diff --git a/dist/quantum-circuit.js b/dist/quantum-circuit.js
index 418db31..7d1d749 100644
--- a/dist/quantum-circuit.js
+++ b/dist/quantum-circuit.js
@@ -6252,12 +6252,12 @@ QuantumCircuit.prototype.matrixHasComplexElement = function(M) {
for(var c = 0; c < row.length; c++) {
var cell = row[c];
- if(cell instanceof math.Complex) {
+ if(cell instanceof math.Complex || ((typeof cell == "object") && ((cell.mathjs && cell.mathjs == "Complex") || (cell.type && cell.type == "Complex")))) {
return true;
}
}
} else {
- if(row instanceof math.Complex) {
+ if(row instanceof math.Complex || ((typeof row == "object") && ((row.mathjs && row.mathjs == "Complex") || (row.type && row.type == "Complex")))) {
return true;
}
}
@@ -6735,6 +6735,7 @@ QuantumCircuit.prototype.isEmptyPlace = function(col, wires, usingCregs) {
for(var wire = minWire; wire <= maxWire; wire++) {
if(!this.isEmptyCell(col, wire)) {
allEmpty = false;
+ break;
}
}
@@ -6759,6 +6760,7 @@ QuantumCircuit.prototype.lastNonEmptyPlace = function(wires, usingCregs) {
for(var wire = minWire; wire <= maxWire; wire++) {
if(!this.isEmptyCell(col, wire)) {
allEmpty = false;
+ break;
}
}
}
@@ -7436,8 +7438,8 @@ QuantumCircuit.prototype.chanceMap = function() {
};
-function binStr(i, len) {
- var bin = i.toString(2);
+function binStr(n, len) {
+ var bin = n.toString(2);
while(bin.length < len) {
bin = "0" + bin;
}
@@ -7445,6 +7447,11 @@ function binStr(i, len) {
}
+function reverseBitwise(n, len) {
+ return parseInt(binStr(n, len).split("").reverse().join(""), 2);
+}
+
+
QuantumCircuit.prototype.resetQubit = function(wire, value) {
var U = [
[0, 0],
@@ -10770,6 +10777,7 @@ QuantumCircuit.prototype.exportToSVG = function(options) {
var centerX = gateX + (options.cellWidth / 2);
var paramsStr = "";
+ var paramsCount = 0;
for(var paramName in gate.options.params) {
if(paramsStr) {
paramsStr += ", ";
@@ -10785,6 +10793,11 @@ QuantumCircuit.prototype.exportToSVG = function(options) {
}
paramsStr += paramVal;
+ paramsCount++;
+ }
+
+ if(paramsStr.length > 26) {
+ paramsStr = "(" + paramsCount + " params)";
}
svg += "" + paramsStr + "";
}
@@ -11011,7 +11024,7 @@ QuantumCircuit.prototype.exportToSVG = function(options) {
if(options.customGate) {
initSymbol = qubitLetter(wire, numRows);
}
- svg += "|" + initSymbol + "⟩";
+ svg += "|" + initSymbol + "⟩";
svg += "";
svg += "q" + wire + "";
}
@@ -15751,7 +15764,7 @@ QuantumCircuit.prototype.continue = function() {
});
};
-QuantumCircuit.prototype.stateAsArray = function(onlyPossible, skipItems, blockSize) {
+QuantumCircuit.prototype.stateAsArray = function(onlyPossible, skipItems, blockSize, reverseBits) {
var state = [];
var numAmplitudes = this.numAmplitudes();
@@ -15761,7 +15774,13 @@ QuantumCircuit.prototype.stateAsArray = function(onlyPossible, skipItems, blockS
var count = 0;
for(var i = 0; i < numAmplitudes; i++) {
- var amplitude = math.round(this.state[i] || math.complex(0, 0), 14);
+ var ampIndex = i;
+ if(reverseBits) {
+ ampIndex = reverseBitwise(i, this.numQubits);
+ }
+
+ var amplitude = math.round(this.state[ampIndex] || math.complex(0, 0), 14);
+
if(!onlyPossible || (amplitude.re || amplitude.im)) {
if(count >= skipItems) {
var indexBinStr = i.toString(2);
@@ -15800,7 +15819,7 @@ QuantumCircuit.prototype.stateAsArray = function(onlyPossible, skipItems, blockS
return state;
};
-QuantumCircuit.prototype.stateAsSimpleArray = function() {
+QuantumCircuit.prototype.stateAsSimpleArray = function(reverseBits) {
var numAmplitudes = this.numAmplitudes();
if(!this.state) {
@@ -15809,7 +15828,12 @@ QuantumCircuit.prototype.stateAsSimpleArray = function() {
var state = [];
for(var i = 0; i < numAmplitudes; i++) {
- state.push(math.round(this.state[i] || math.complex(0, 0), 14));
+ var ampIndex = i;
+ if(reverseBits) {
+ ampIndex = reverseBitwise(i, this.numQubits);
+ }
+
+ state.push(math.round(this.state[ampIndex] || math.complex(0, 0), 14));
}
return state;
};
@@ -112267,4 +112291,4 @@ module.exports.TinyEmitter = E;
},{}]},{},[5])(5)
});
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUltcG9ydC5qcyIsImxpYi9xYXNtX2ltcG9ydC9RQVNNTGV4ZXIuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUxpc3RlbmVyLmpzIiwibGliL3Fhc21faW1wb3J0L1FBU01QYXJzZXIuanMiLCJsaWIvcXVhbnR1bS1jaXJjdWl0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9CdWZmZXJlZFRva2VuU3RyZWFtLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9DaGFyU3RyZWFtcy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvQ29tbW9uVG9rZW5GYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9Db21tb25Ub2tlblN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvRmlsZVN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvSW5wdXRTdHJlYW0uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L0ludGVydmFsU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9MTDFBbmFseXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvTGV4ZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvUGFyc2VyUnVsZUNvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1ByZWRpY3Rpb25Db250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SZWNvZ25pemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SdWxlQ29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvVG9rZW4uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTkRlc2VyaWFsaXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlNpbXVsYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlN0YXRlLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROVHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0xleGVyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vTGV4ZXJBY3Rpb24uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9MZXhlckFjdGlvbkV4ZWN1dG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUGFyc2VyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUHJlZGljdGlvbk1vZGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9TZW1hbnRpY0NvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9UcmFuc2l0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkEuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkFTZXJpYWxpemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9kZmEvREZBU3RhdGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yU3RyYXRlZ3kuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9ycy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9wb2x5ZmlsbHMvY29kZXBvaW50YXQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3BvbHlmaWxscy9mcm9tY29kZXBvaW50LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC90cmVlL1RyZWUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvVHJlZXMuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBsZXguanMvY29tcGxleC5qcyIsIm5vZGVfbW9kdWxlcy9kZWNpbWFsLmpzL2RlY2ltYWwuanMiLCJub2RlX21vZHVsZXMvZXNjYXBlLWxhdGV4L2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZnJhY3Rpb24uanMvZnJhY3Rpb24uanMiLCJub2RlX21vZHVsZXMvamF2YXNjcmlwdC1uYXR1cmFsLXNvcnQvbmF0dXJhbFNvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvY29yZS9mdW5jdGlvbi9jb25maWcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2RlcHJlY2F0ZWRJbXBvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2ltcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvZnVuY3Rpb24vdHlwZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9hbGxGYWN0b3JpZXNBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9jb25maWdSZWFkb25seS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290aC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzYy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE5vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0T3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdFhvci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmxvY2tOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvaHJSYWRpdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9vbGVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2F0YWxhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2JydC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29sdW1uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21waWxlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBvc2l0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdWxvbWIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N0cmFuc3Bvc2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N1YmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZEV2YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaWFnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXN0YW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RvdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3RNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFZmltb3ZGYWN0b3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VpZ3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cmljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cm9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlbWVudGFyeUNoYXJnZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbFRleHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXZhbHVhdGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbTEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V5ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmluZVN0cnVjdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlyc3RSYWRpYXRpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpeC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxvb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2hUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dhc0NvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHY2QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dldE1hdHJpeERhdGFUeXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXJ0cmVlRW5lcmd5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSHlwb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0kuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZmluaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS2xpdHppbmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tyb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMTBFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMT0cyRS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGNtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzFwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb2cyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb3NjaG1pZHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVkaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01pblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9kLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyTWFzc0MxMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTmV1dHJvbk1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdHMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPYmplY3ROb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGhpLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tUZW1wZXJhdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcmludC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvdG9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZG9tLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYXRpb25hbGl6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlcGxhY2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1J5ZGJlcmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQxXzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0TXVsdGlwbGljaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRQb3dlcnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U2l6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTb3J0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BlZWRPZkxpZ2h0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnRtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXVhcmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWVlemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0aXJsaW5nUzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdWJzZXRUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW5oLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYXUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RvLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcmFjZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHJhbnNwb3NlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlT2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuZXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYWN1dW1JbXBlZGFuY2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYXJpYW5jZVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmVyc2lvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYZ2NkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcHJlY2F0ZWRBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9pbXB1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvbWFpbkFueS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvdHlwZUNoZWNrcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Vycm9yL0FyZ3VtZW50c0Vycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXJyb3IvRGltZW5zaW9uRXJyb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lcnJvci9JbmRleEVycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9IZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvSW5maW5pdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE4xMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9MTjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE9HMTBFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL0xPRzJFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9TUVJUMV8yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL1NRUlQyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvZmFsc2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9udWxsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL3BoaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9waS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy90YXUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvdHJ1ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2JpZ251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9ib29sZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9tYXRyaXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3NwYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3VuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvcmUvaW1wb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29yZS90eXBlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2VtYmVkZGVkRG9jcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvZGVyaXZhdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9sdXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3FyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3NsdS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvdXNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY3ViZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3REaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RQb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2V4cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZmxvb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2djZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvaHlwb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xjbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL21vZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL25vcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlNaW51cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9iaXRBbmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdFhvci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL3JpZ2h0TG9nU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3Mvc3RpcmxpbmdTMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvYXJnLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9jb25qLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9pbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZXhwcmVzc2lvbi9oZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVUZXh0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9kZWVwRXF1YWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvdW5lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRDYXJ0ZXNpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXREaXN0aW5jdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRJbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0SXNTdWJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFNpemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRVbmlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NwZWNpYWwvZXJmLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9tYWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21heC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9taW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9zdGQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3N1bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91bml0cy90by5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2Nsb25lLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaGFzTnVtZXJpY1ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOYU4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc05lZ2F0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc1plcm8uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9udW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvdHlwZU9mLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vaGVscC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9rZXl3b3Jkcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9BY2Nlc3Nvck5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQXJyYXlOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Fzc2lnbm1lbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Db25kaXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQ29uc3RhbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0luZGV4Tm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL09iamVjdE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvT3BlcmF0b3JOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9SYW5nZU5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvUmVsYXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS91dGlscy9hY2Nlc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvdXRpbHMvYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9vcGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vY29sdW1uLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9tYXAudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWF4LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL21lYW4udHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3JhbmdlLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9zdGQudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vc3Vic2V0LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZmFjdG9yaWVzQW55LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL2x1cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9xci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9zbHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3JhdGlvbmFsaXplLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvcmVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS91dGlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3Vzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3V0aWxzL3NvbHZlVmFsaWRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzQW1kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NDb3VudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0Rmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzRXRyZWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0ZrZWVwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NGbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NJcHZlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTGVhZi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmsuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmtlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUGVybXV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUG9zdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUmVhY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nwc29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nxci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVGRmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVW5mbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkU2NhbGFyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jdWJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2RpdmlkZVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9leHAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2V4cG0xLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9maXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9nY2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sY20uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzFwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tdWx0aXBseVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3Bvdy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NpZ24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxdWFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3VidHJhY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5UGx1cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMveGdjZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvYml0QW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXROb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2JpdE9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXRYb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2xlZnRTaGlmdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVycy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY2F0YWxhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY29tcG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L2FyZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvY29uai5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvaW0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2FwcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9leHBtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2V5ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxcnRtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3V0aWwvcmFuZG9tTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvdXRpbC9zZWVkZWRSTkcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVOYXR1cmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxTY2FsYXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlckVxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC91bmVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXREaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRNdWx0aXBsaWNpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0U2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRTeW1EaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldFVuaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3BlY2lhbC9lcmYuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWRpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcHJvZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcXVhbnRpbGVTZXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL3N0ZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0cmluZy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdHJpbmcvcHJpbnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91bml0L3RvLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvY2xvbmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc051bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvaXNQcmltZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzWmVyby5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL251bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy90eXBlT2YuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9qc29uL3JlcGxhY2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvanNvbi9yZXZpdmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2FyaXRobWV0aWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci9jb21iaW5hdGlvbnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2xvZ2ljYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcHJvYmFiaWxpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcmVsYXRpb25hbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci90cmlnb25vbWV0cnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9CaWdOdW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9mdW5jdGlvbi9iaWdudW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2Jvb2xlYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2NoYWluL0NoYWluLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvY29tcGxleC9Db21wbGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9mcmFjdGlvbi9mdW5jdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0RlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvRmlib25hY2NpSGVhcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0ltbXV0YWJsZURlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4SW5kZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC9SYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L2Z1bmN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vbWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vc3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL3VuaXQvVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi9jcmVhdGVVbml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L2Z1bmN0aW9uL3NwbGl0VW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L3BoeXNpY2FsQ29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYXJyYXkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2JpZ251bWJlci9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvZm9ybWF0dGVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvY29sbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9jdXN0b21zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvZW1pdHRlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2ZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2lzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbGF0ZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9sb2cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9ub29wLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcG9seWZpbGxzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcHJvZHVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3ZlcnNpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL21haW4vZXM1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RpbnktZW1pdHRlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90eXBlZC1mdW5jdGlvbi90eXBlZC1mdW5jdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNudEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1MVpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDanFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1bkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9yREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcHZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN3dKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVpRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2puQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5c0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6MkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDek1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6ckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25VQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzE1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNubkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2wzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdHpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzduQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2YkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25UQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3NkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RnREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzNEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3ZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25mQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbHJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25jQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBOzs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFBldGFyIEtvcnBvbmFpxIcgPHBldGFyLmtvcnBvbmFpY0BnbWFpbC5jb20+XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UsIGZvdW5kIGluXG4gKiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG52YXIgUUFTTUxleGVyID0gcmVxdWlyZSgnLi9RQVNNTGV4ZXInKTtcbnZhciBRQVNNUGFyc2VyID0gcmVxdWlyZSgnLi9RQVNNUGFyc2VyJyk7XG52YXIgUUFTTUxpc3RlbmVyID0gcmVxdWlyZSgnLi9RQVNNTGlzdGVuZXInKS5RQVNNTGlzdGVuZXI7XG5cbnZhciBFcnJvckxpc3RlbmVyID0gZnVuY3Rpb24oZXJyb3JzKSB7XG4gIGFudGxyNC5lcnJvci5FcnJvckxpc3RlbmVyLmNhbGwodGhpcyk7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuZXJyb3IuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvckxpc3RlbmVyO1xuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWMsIHN5bSwgbGluZSwgY29sLCBtc2csIGUpIHtcbiAgdGhpcy5lcnJvcnMucHVzaCh7XG4gIFx0bGluZTogbGluZSxcbiAgXHRjb2w6IGNvbCxcbiAgXHRtc2c6IG1zZ1xuICB9KTtcbn07XG5cbnZhciBRQ1FBU01MaXN0ZW5lciA9IGZ1bmN0aW9uKGNpcmN1aXQsIGNvbXBhdGliaWxpdHlNb2RlKSB7XG4gICAgdGhpcy5jaXJjdWl0ID0gY2lyY3VpdDtcbiAgICB0aGlzLnFyZWdNYXAgPSB7fTtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IHt9O1xuICAgIHRoaXMuY29tcGF0aWJpbGl0eU1vZGUgPSBjb21wYXRpYmlsaXR5TW9kZTtcblxuICAgIFFBU01MaXN0ZW5lci5jYWxsKHRoaXMpOyAvLyBpbmhlcml0IGRlZmF1bHQgbGlzdGVuZXJcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbnZhciBRQVNNSW1wb3J0ID0gZnVuY3Rpb24oY2lyY3VpdCwgaW5wdXQsIGVycm9yQ2FsbGJhY2ssIGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdHZhciBjaGFycyA9IG5ldyBhbnRscjQuSW5wdXRTdHJlYW0oaW5wdXQpO1xuXHR2YXIgbGV4ZXIgPSBuZXcgUUFTTUxleGVyLlFBU01MZXhlcihjaGFycyk7XG5cdHZhciB0b2tlbnMgID0gbmV3IGFudGxyNC5Db21tb25Ub2tlblN0cmVhbShsZXhlcik7XG5cdHZhciBwYXJzZXIgPSBuZXcgUUFTTVBhcnNlci5RQVNNUGFyc2VyKHRva2Vucyk7XG5cdHBhcnNlci5idWlsZFBhcnNlVHJlZXMgPSB0cnVlO1xuXG5cdHBhcnNlci5yZW1vdmVFcnJvckxpc3RlbmVycygpO1xuXHR2YXIgZXJyb3JzID0gW107XG5cdHZhciBlcnJvckxpc3RlbmVyID0gbmV3IEVycm9yTGlzdGVuZXIoZXJyb3JzKTtcblx0cGFyc2VyLmFkZEVycm9yTGlzdGVuZXIoZXJyb3JMaXN0ZW5lcik7XG5cblx0dmFyIHRyZWUgPSBwYXJzZXIubWFpbnByb2coKTsgICBcblx0dmFyIFFBU00gPSBuZXcgUUNRQVNNTGlzdGVuZXIoY2lyY3VpdCwgY29tcGF0aWJpbGl0eU1vZGUpO1xuXHRhbnRscjQudHJlZS5QYXJzZVRyZWVXYWxrZXIuREVGQVVMVC53YWxrKFFBU00sIHRyZWUpO1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhlcnJvcnMpO1xuXHR9XG59O1xuXG4gXG4vLyBpbmhlcml0IGRlZmF1bHQgbGlzdGVuZXJcblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUUFTTUxpc3RlbmVyLnByb3RvdHlwZSk7XG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQ1FBU01MaXN0ZW5lcjtcblxuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUubnVtUWJpdCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtID0gMDtcblx0Zm9yKHZhciByZWcgaW4gdGhpcy5xcmVnTWFwKSB7XG5cdFx0bnVtICs9IHRoaXMucXJlZ01hcFtyZWddO1xuXHR9XG5cdHJldHVybiBudW07XG59O1xuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUucXJlZ0Jhc2UgPSBmdW5jdGlvbihxcmVnKSB7XG5cdHZhciBiYXNlID0gMDtcblx0Zm9yKHZhciByZWcgaW4gdGhpcy5xcmVnTWFwKSB7XG5cdFx0aWYocmVnID09IHFyZWcpIHtcblx0XHRcdHJldHVybiBiYXNlO1xuXHRcdH1cblx0XHRiYXNlICs9IHRoaXMucXJlZ01hcFtyZWddO1xuXHR9XG5cdHJldHVybiBiYXNlO1xufTtcblxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLnFyZWdMZW4gPSBmdW5jdGlvbihyZWcpIHtcblx0cmV0dXJuIHRoaXMucXJlZ01hcFtyZWddIHx8IDA7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21haW5wcm9nLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyTWFpbnByb2cgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWFpbnByb2cuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0Ly8gY29uZGl0aW9uXG5cdHZhciBuYW1lID0gY3R4LmdldENoaWxkQ291bnQoKSA/IGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkgOiBcIlwiO1xuXHRpZihuYW1lID09IFwiaWZcIikge1xuXHRcdHRoaXMuY29uZGl0aW9uID0ge1xuXHRcdFx0Y3JlZzogY3R4LklEKCkuZ2V0VGV4dCgpLFxuXHRcdFx0dmFsdWU6IHBhcnNlSW50KGN0eC5JTlQoKS5nZXRUZXh0KCkpXG5cdFx0fVxuXHR9XG5cblx0Ly8gc3Vicm91dGluZSAoZ2F0ZSBkZWNsYXJhdGlvbilcblx0aWYoY3R4LmdhdGVkZWNsKCkpIHtcblx0XHR2YXIgZ2F0ZWRlY2wgPSBjdHguZ2F0ZWRlY2woKTtcblx0XHR2YXIgYXJncyA9IFtdO1xuXHRcdHZhciBwYXJhbXMgPSBbXTtcblxuXHRcdHZhciBjY291bnQgPSBnYXRlZGVjbC5nZXRDaGlsZENvdW50KCk7XG5cdFx0aWYoY2NvdW50ID4gMiAmJiBnYXRlZGVjbC5nZXRDaGlsZCgyKS5JRCkge1xuXHRcdFx0Ly8gbm8gcGFyYW1zXG5cdFx0XHRhcmdzID0gZ2F0ZWRlY2wuZ2V0Q2hpbGQoMikuSUQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoY2NvdW50ID4gMyAmJiBnYXRlZGVjbC5nZXRDaGlsZCgzKS5JRCkge1xuXHRcdFx0XHRwYXJhbXMgPSBnYXRlZGVjbC5nZXRDaGlsZCgzKS5JRCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYoY2NvdW50ID4gNSAmJiBnYXRlZGVjbC5nZXRDaGlsZCg1KS5JRCkge1xuXHRcdFx0XHQvLyBubyBwYXJhbXNcblx0XHRcdFx0YXJncyA9IGdhdGVkZWNsLmdldENoaWxkKDUpLklEKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMuY2lyY3VpdCk7XG5cdFx0dmFyIGN1c3RvbUdhdGUgPSBuZXcgcHJvdG8uY29uc3RydWN0b3IoYXJncy5sZW5ndGgpO1xuXHRcdHZhciBjdXN0b21HYXRlTmFtZSA9IGdhdGVkZWNsLklEKCkuZ2V0VGV4dCgpO1xuXHRcdHZhciBjdXN0b21HYXRlUmVncyA9IFtdO1xuXG5cdFx0YXJncy5tYXAoZnVuY3Rpb24ocmVnKSB7XG5cdFx0XHRjdXN0b21HYXRlUmVncy5wdXNoKHJlZy5nZXRUZXh0KCkpO1xuXHRcdH0pO1xuXG5cdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXIpIHtcblx0XHRcdHZhciBwYXJOYW1lID0gcGFyLmdldFRleHQoKTtcblx0XHRcdGN1c3RvbUdhdGUucGFyYW1zLnB1c2gocGFyTmFtZSk7XG5cdFx0fSk7XG5cblx0XHRpZihjdHguZ29wbGlzdCgpKSB7XG5cdFx0XHR2YXIgZ29wbGlzdCA9IGN0eC5nb3BsaXN0KCk7XG5cdFx0XHRnb3BsaXN0LnVvcCgpLm1hcChmdW5jdGlvbih1b3ApIHtcblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gdW9wLklEKCkgPyB1b3AuSUQoKS5nZXRUZXh0KCkgOiBcIlwiO1xuXHRcdFx0XHRpZihnYXRlTmFtZSkge1xuXHRcdFx0XHRcdHZhciBpZGxpc3QgPSB1b3AuYW55bGlzdCgpID8gdW9wLmFueWxpc3QoKS5pZGxpc3QoKSA6IG51bGw7XG5cdFx0XHRcdFx0dmFyIG1peGVkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLm1peGVkbGlzdCgpIDogbnVsbDtcblx0XHRcdFx0XHR2YXIgZXhwbGlzdCA9IHVvcC5leHBsaXN0KCk7XG5cblxuXHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkNYXCI6IGdhdGVOYW1lID0gXCJjeFwiOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJVXCI6IGdhdGVOYW1lID0gXCJ1M1wiOyBicmVhaztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZighc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdICYmICFzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0XHQvLyBmaW5kIGdhdGUgYnkgcWFzbSBuYW1lXG5cdFx0XHRcdFx0XHRmb3IodmFyIHRtcE5hbWUgaW4gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRtcERlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW3RtcE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gbmV3ZXIgdmVyc2lvbnMgb2YgcWlza2l0IGV4cG9ydHMgdG8gcWFzbSB3aXRoIGdhdGUgbmFtZXMgdW5kZWZpbmVkIGJ5IHFhc20gMi4wIGRlZmluaXRpb24uLi5cblx0XHRcdFx0XHRcdFx0aWYodG1wRGVmLmV4cG9ydEluZm8gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSB0bXBOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdFx0XHR2YXIgcGFyYW1zID0ge307XG5cdFx0XHRcdFx0aWYoZXhwbGlzdCAmJiBleHBsaXN0LmV4cCgpKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUxpc3QgPSBleHBsaXN0LmV4cCgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0Lm1hcChmdW5jdGlvbihwYXJhbUl0ZW0sIHBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IHBhcmFtSXRlbS5nZXRUZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmLmxlbmd0aCA+PSBwYXJhbUluZGV4ID8gcGFyYW1EZWZbcGFyYW1JbmRleF0gOiBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW3BhcmFtTmFtZV0gPSBwYXJhbVZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7IHBhcmFtczogcGFyYW1zIH07XG5cblxuXHRcdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXG5cdFx0XHRcdFx0aWYoaWRsaXN0KSB7XG5cdFx0XHRcdFx0XHR2YXIgY291bnQgPSBpZGxpc3QuSUQoKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR3aXJlcy5wdXNoKGN1c3RvbUdhdGVSZWdzLmluZGV4T2YoaWRsaXN0LklEKClbaV0uZ2V0VGV4dCgpKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobWl4ZWRsaXN0KSB7XG5cdFx0XHRcdFx0XHQvLyA/XG5cdFx0XHRcdFx0fVxuXG4vKlxuXHRcdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJ6XCI6IHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMucGFyYW1zICYmIG9wdGlvbnMucGFyYW1zLnBoaSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXMubGFtYmRhID0gb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cbiovXG5cdFx0XHRcdFx0dmFyIGV4dGVybmFsID0gc2VsZi5jaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihleHRlcm5hbCkge1xuXHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZS5yZWdpc3RlckdhdGUoZ2F0ZU5hbWUsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXh0ZXJuYWwpKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y3VzdG9tR2F0ZS5hZGRHYXRlKGdhdGVOYW1lLCAtMSwgd2lyZXMsIG9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLmNpcmN1aXQucmVnaXN0ZXJHYXRlKGN1c3RvbUdhdGVOYW1lLCBjdXN0b21HYXRlLnNhdmUoZmFsc2UpKTtcblx0fVxufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNzdGF0ZW1lbnQuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRWZXJzaW9uID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2RlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJEZWNsID0gZnVuY3Rpb24oY3R4KSB7XG5cdHN3aXRjaChjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSB7XG5cdFx0Y2FzZSBcInFyZWdcIjogdGhpcy5xcmVnTWFwW2N0eC5nZXRDaGlsZCgxKS5nZXRUZXh0KCldID0gcGFyc2VJbnQoY3R4LmdldENoaWxkKDMpLmdldFRleHQoKSk7IGJyZWFrO1xuXHRcdGNhc2UgXCJjcmVnXCI6IHRoaXMuY2lyY3VpdC5jcmVhdGVDcmVnKGN0eC5nZXRDaGlsZCgxKS5nZXRUZXh0KCksIHBhcnNlSW50KGN0eC5nZXRDaGlsZCgzKS5nZXRUZXh0KCkpKTsgYnJlYWs7XG5cdH1cdFxufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXREZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dhdGVkZWNsLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdhdGVkZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJHb3BsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclFvcCA9IGZ1bmN0aW9uKGN0eCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHZhciBjb25kaXRpb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZGl0aW9uKSk7XG5cdHRoaXMuY29uZGl0aW9uID0ge307XG5cblx0dmFyIG5hbWUgPSBjdHguZ2V0Q2hpbGRDb3VudCgpID8gY3R4LmdldENoaWxkKDApLmdldFRleHQoKSA6IFwiXCI7XG5cblx0aWYobmFtZSA9PSBcInJlc2V0XCIpIHtcblx0XHR2YXIgcXJlZyA9IFwiXCI7XG5cdFx0dmFyIHFiaXQgPSAtMTtcblx0XHR2YXIgY291bnQgPSBjdHguYXJndW1lbnQoKS5sZW5ndGg7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBjdHguYXJndW1lbnQoKVtpXTtcblx0XHRcdGlmKGkgPT0gMCkge1xuXHRcdFx0XHRxcmVnID0gYXJnLklEKCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHRxYml0ID0gYXJnLklOVCgpID8gcGFyc2VJbnQoYXJnLklOVCgpLmdldFRleHQoKSkgOiAtMTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihxcmVnKSB7XG5cdFx0XHR2YXIgbnVtQml0cyA9IHNlbGYucXJlZ0xlbihxcmVnKTtcblx0XHRcdGlmKHFiaXQgPCAwKSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGFyZ3VtZW50IGlzIGVudGlyZSByZWdpc3RlclxuXHRcdFx0XHQvL1xuXHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJyZXNldFwiLCAtMSwgeCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGJvdGggYXJndW1lbnRzIGFyZSBzaW5nbGUgYml0c1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcInJlc2V0XCIsIC0xLCBxYml0ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYobmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdHZhciBxcmVnID0gXCJcIjtcblx0XHR2YXIgcWJpdCA9IC0xO1xuXHRcdHZhciBjcmVnID0gXCJcIjtcblx0XHR2YXIgY2JpdCA9IC0xO1xuXHRcdHZhciBjb3VudCA9IGN0eC5hcmd1bWVudCgpLmxlbmd0aDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGN0eC5hcmd1bWVudCgpW2ldO1xuXHRcdFx0aWYoaSA9PSAwKSB7XG5cdFx0XHRcdHFyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdHFiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYoaSA9PSAxKSB7XG5cdFx0XHRcdGNyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdGNiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKHFyZWcgJiYgY3JlZykge1xuXHRcdFx0dmFyIG51bUJpdHMgPSBzZWxmLnFyZWdMZW4ocXJlZyk7XG5cdFx0XHRpZihxYml0IDwgMCAmJiBjYml0IDwgMCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyBib3RoIGFyZ3VtZW50cyBhcmUgZW50aXJlIHJlZ2lzdGVyc1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogeCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYocWJpdCA+PSAwICYmIGNiaXQgPj0gMCkge1xuXHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0Ly8gYm90aCBhcmd1bWVudHMgYXJlIHNpbmdsZSBiaXRzXG5cdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcIm1lYXN1cmVcIiwgLTEsIHFiaXQgKyBzZWxmLnFyZWdCYXNlKHFyZWcpLCB7IGNyZWc6IHsgbmFtZTogY3JlZywgYml0OiBjYml0IH0sIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZihxYml0ID49IDAgJiYgY2JpdCA8IDApIHtcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHQvLyBxYml0IGlzIHNpbmdsZSwgY3JlZyBpcyBlbnRpcmUgcmVnaXN0ZXJcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGYuY2lyY3VpdC5hZGRHYXRlKFwibWVhc3VyZVwiLCAtMSwgcWJpdCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY3JlZzogeyBuYW1lOiBjcmVnLCBiaXQ6IHggfSwgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdFx0Ly8gcWJpdCBpcyBlbnRpcmUgcmVnaXN0ZXIsIGNyZWcgaXMgc2luZ2xlIGJpdFxuXHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBudW1CaXRzOyB4KyspIHtcblx0XHRcdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogY2JpdCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XG5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgdW9wID0gY3R4LnVvcCgpO1xuXHRpZih1b3AgJiYgdW9wLklEKCkpIHtcblx0XHR2YXIgZ2F0ZU5hbWUgPSB1b3AuSUQoKS5nZXRUZXh0KCk7XG5cdFx0dmFyIGlkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLmlkbGlzdCgpIDogbnVsbDtcblx0XHR2YXIgbWl4ZWRsaXN0ID0gdW9wLmFueWxpc3QoKSA/IHVvcC5hbnlsaXN0KCkubWl4ZWRsaXN0KCkgOiBudWxsO1xuXHRcdHZhciBleHBsaXN0ID0gdW9wLmV4cGxpc3QoKTtcblxuXHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0Y2FzZSBcIkNYXCI6IGdhdGVOYW1lID0gXCJjeFwiOyBicmVhaztcblx0XHRcdGNhc2UgXCJVXCI6IGdhdGVOYW1lID0gXCJ1M1wiOyBicmVhaztcblx0XHR9XG5cblx0XHRpZighc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdICYmICFzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHQvLyBmaW5kIGdhdGUgYnkgcWFzbSBuYW1lXG5cdFx0XHRmb3IodmFyIHRtcE5hbWUgaW4gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0dmFyIHRtcERlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW3RtcE5hbWVdO1xuXHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gbmV3ZXIgdmVyc2lvbnMgb2YgcWlza2l0IGV4cG9ydHMgdG8gcWFzbSB3aXRoIGdhdGUgbmFtZXMgdW5kZWZpbmVkIGJ5IHFhc20gMi4wIGRlZmluaXRpb24uLi5cblx0XHRcdFx0aWYodG1wRGVmLmV4cG9ydEluZm8gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZU5hbWUgPSB0bXBOYW1lO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHBhcmFtcyA9IHt9O1xuXHRcdGlmKGV4cGxpc3QgJiYgZXhwbGlzdC5leHAoKSkge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRnYXRlRGVmID0gc2VsZi5jaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IGV4cGxpc3QuZXhwKCk7XG5cdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRwYXJhbUxpc3QubWFwKGZ1bmN0aW9uKHBhcmFtSXRlbSwgcGFyYW1JbmRleCkge1xuXHRcdFx0XHRcdHZhciBwYXJhbVZhbHVlID0gcGFyYW1JdGVtLmdldFRleHQoKTtcblx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWYubGVuZ3RoID49IHBhcmFtSW5kZXggPyBwYXJhbURlZltwYXJhbUluZGV4XSA6IFwiXCI7XG5cdFx0XHRcdFx0aWYocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgb3B0aW9ucyA9IHsgcGFyYW1zOiBwYXJhbXMsIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH07XG5cblx0XHRpZihpZGxpc3QpIHtcblx0XHRcdC8vXG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIGVudGlyZSByZWdpc3RlcnNcblx0XHRcdC8vICAgZXhhbXBsZTogY3ggcSxyO1xuXHRcdFx0Ly9cblx0XHRcdHZhciBudW1CaXRzID0gc2VsZi5xcmVnTGVuKGlkbGlzdC5JRCgpWzBdLmdldFRleHQoKSk7XG5cdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdHZhciBjb3VudCA9IGlkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRhcmdzLnB1c2goeyByZWc6IGlkbGlzdC5JRCgpW2ldLmdldFRleHQoKSwgYml0OiB4IH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHdpcmVzID0gW107XG5cdFx0XHRcdGFyZ3MubWFwKGZ1bmN0aW9uKGEpIHtcblx0XHRcdFx0XHR3aXJlcy5wdXNoKGEuYml0ICsgc2VsZi5xcmVnQmFzZShhLnJlZykpO1xuXHRcdFx0XHR9KTtcbi8qXG5cdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0c3dpdGNoKGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwicnpcIjoge1xuXHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnBhcmFtcyAmJiBvcHRpb25zLnBhcmFtcy5waGkpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtcy5sYW1iZGEgPSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG4qL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShnYXRlTmFtZSwgLTEsIHdpcmVzLCBvcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhcmd1bWVudHMgYXJlIHFiaXRzIG9yIG1peGVkXG5cdFx0aWYobWl4ZWRsaXN0KSB7XG5cdFx0XHRpZihtaXhlZGxpc3QuSUQoKS5sZW5ndGggIT0gbWl4ZWRsaXN0LklOVCgpLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBcblx0XHRcdFx0Ly8gVE9ETzogbWl4ZWQgcWJpdHMgYW5kIGVudGlyZSByZWdpc3RlcnNcblx0XHRcdFx0Ly8gICAgICAgZXhhbXBsZTogY3ggcSxyWzBdO1xuXHRcdFx0XHQvL1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gcWJpdHMsIGZvciBleGFtcGxlOiBjeCBxWzBdLHJbMF07XG5cdFx0XHRcdC8vXG5cdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdHZhciBjb3VudCA9IG1peGVkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRhcmdzLnB1c2goeyByZWc6IG1peGVkbGlzdC5JRCgpW2ldLmdldFRleHQoKSwgYml0OiBwYXJzZUludChtaXhlZGxpc3QuSU5UKClbaV0uZ2V0VGV4dCgpKSB9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXHRcdFx0XHRhcmdzLm1hcChmdW5jdGlvbihhKSB7XG5cdFx0XHRcdFx0d2lyZXMucHVzaChhLmJpdCArIHNlbGYucXJlZ0Jhc2UoYS5yZWcpKTtcblx0XHRcdFx0fSk7XG4vKlxuXHRcdFx0XHRpZighc2VsZi5jb21wYXRpYmlsaXR5TW9kZSkge1xuXHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcInJ6XCI6IHtcblx0XHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJhbXMgJiYgb3B0aW9ucy5wYXJhbXMucGhpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXMubGFtYmRhID0gb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuKi9cblx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgb3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0UW9wID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3VvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQW55bGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlcklkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdElkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtaXhlZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYXJndW1lbnQuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBcmd1bWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhcmd1bWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV4cGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXhwbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNleHAuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VW5hcnlvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRQVNNSW1wb3J0O1xuIiwiLy8gR2VuZXJhdGVkIGZyb20gUUFTTS5nNCBieSBBTlRMUiA0LjcuMVxuLy8ganNoaW50IGlnbm9yZTogc3RhcnRcbnZhciBhbnRscjQgPSByZXF1aXJlKCdhbnRscjQvaW5kZXgnKTtcblxuXG52YXIgc2VyaWFsaXplZEFUTiA9IFtcIlxcdTAwMDNcXHU2MDhiXFx1YTcyYVxcdTgxMzNcXHViOWVkXFx1NDE3Y1xcdTNiZTdcXHU3Nzg2XFx1NTk2NFwiLFxuICAgIFwiXFx1MDAwMi1cXHUwMTI0XFxiXFx1MDAwMVxcdTAwMDRcXHUwMDAyXFx0XFx1MDAwMlxcdTAwMDRcXHUwMDAzXFx0XFx1MDAwM1xcdTAwMDRcIixcbiAgICBcIlxcdTAwMDRcXHRcXHUwMDA0XFx1MDAwNFxcdTAwMDVcXHRcXHUwMDA1XFx1MDAwNFxcdTAwMDZcXHRcXHUwMDA2XFx1MDAwNFxcdTAwMDdcXHRcIixcbiAgICBcIlxcdTAwMDdcXHUwMDA0XFxiXFx0XFxiXFx1MDAwNFxcdFxcdFxcdFxcdTAwMDRcXG5cXHRcXG5cXHUwMDA0XFx1MDAwYlxcdFxcdTAwMGJcXHUwMDA0XCIsXG4gICAgXCJcXGZcXHRcXGZcXHUwMDA0XFxyXFx0XFxyXFx1MDAwNFxcdTAwMGVcXHRcXHUwMDBlXFx1MDAwNFxcdTAwMGZcXHRcXHUwMDBmXFx1MDAwNFxcdTAwMTBcIixcbiAgICBcIlxcdFxcdTAwMTBcXHUwMDA0XFx1MDAxMVxcdFxcdTAwMTFcXHUwMDA0XFx1MDAxMlxcdFxcdTAwMTJcXHUwMDA0XFx1MDAxM1xcdFxcdTAwMTNcIixcbiAgICBcIlxcdTAwMDRcXHUwMDE0XFx0XFx1MDAxNFxcdTAwMDRcXHUwMDE1XFx0XFx1MDAxNVxcdTAwMDRcXHUwMDE2XFx0XFx1MDAxNlxcdTAwMDRcXHUwMDE3XCIsXG4gICAgXCJcXHRcXHUwMDE3XFx1MDAwNFxcdTAwMThcXHRcXHUwMDE4XFx1MDAwNFxcdTAwMTlcXHRcXHUwMDE5XFx1MDAwNFxcdTAwMWFcXHRcXHUwMDFhXCIsXG4gICAgXCJcXHUwMDA0XFx1MDAxYlxcdFxcdTAwMWJcXHUwMDA0XFx1MDAxY1xcdFxcdTAwMWNcXHUwMDA0XFx1MDAxZFxcdFxcdTAwMWRcXHUwMDA0XFx1MDAxZVwiLFxuICAgIFwiXFx0XFx1MDAxZVxcdTAwMDRcXHUwMDFmXFx0XFx1MDAxZlxcdTAwMDQgXFx0IFxcdTAwMDQhXFx0IVxcdTAwMDRcXFwiXFx0XFxcIlxcdTAwMDQjXCIsXG4gICAgXCJcXHQjXFx1MDAwNCRcXHQkXFx1MDAwNCVcXHQlXFx1MDAwNCZcXHQmXFx1MDAwNFxcJ1xcdFxcJ1xcdTAwMDQoXFx0KFxcdTAwMDQpXFx0KVxcdTAwMDRcIixcbiAgICBcIipcXHQqXFx1MDAwNCtcXHQrXFx1MDAwNCxcXHQsXFx1MDAwM1xcdTAwMDJcXHUwMDAzXFx1MDAwMlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwNFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNVxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDZcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXCIsXG4gICAgXCJcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcIixcbiAgICBcIlxcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFxmXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDAzXFxmXFx1MDAwM1xcZlxcdTAwMDNcXHJcXHUwMDAzXFxyXFx1MDAwM1xcdTAwMGVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDExXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMVxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEzXFx1MDAwM1xcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1xcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxNVxcdTAwMDNcXHUwMDE1XFx1MDAwM1xcdTAwMTZcXHUwMDAzXFx1MDAxNlxcdTAwMDNcXHUwMDE2XFx1MDAwM1xcdTAwMTdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDE3XFx1MDAwM1xcdTAwMThcXHUwMDAzXFx1MDAxOFxcdTAwMDNcXHUwMDE5XFx1MDAwM1xcdTAwMTlcXHUwMDAzXFx1MDAxYVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMWFcXHUwMDAzXFx1MDAxYlxcdTAwMDNcXHUwMDFiXFx1MDAwM1xcdTAwMWNcXHUwMDAzXFx1MDAxY1xcdTAwMDNcXHUwMDFkXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxZFxcdTAwMDNcXHUwMDFkXFx1MDAwM1xcdTAwMWRcXHUwMDAzXFx1MDAxZVxcdTAwMDNcXHUwMDFlXFx1MDAwM1xcdTAwMWVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDFlXFx1MDAwM1xcdTAwMWZcXHUwMDAzXFx1MDAxZlxcdTAwMDNcXHUwMDFmXFx1MDAwM1xcdTAwMWZcXHUwMDAzIFxcdTAwMDNcIixcbiAgICBcIiBcXHUwMDAzIFxcdTAwMDMgXFx1MDAwMyFcXHUwMDAzIVxcdTAwMDMhXFx1MDAwM1xcXCJcXHUwMDAzXFxcIlxcdTAwMDNcXFwiXFx1MDAwM1xcXCJcIixcbiAgICBcIlxcdTAwMDNcXFwiXFx1MDAwMyNcXHUwMDAzI1xcdTAwMDMjXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDMkXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDNcIixcbiAgICBcIiRcXHUwMDAzJFxcdTAwMDUkXFx1MDBlMVxcbiRcXHUwMDAzJVxcdTAwMDMlXFx1MDAwMyVcXHUwMDA2JVxcdTAwZTZcXG4lXFxyJVxcdTAwMGVcIixcbiAgICBcIiVcXHUwMGU3XFx1MDAwMyZcXHUwMDAzJlxcdTAwMDMmXFx1MDAwNiZcXHUwMGVkXFxuJlxcciZcXHUwMDBlJlxcdTAwZWVcXHUwMDAzXFwnXCIsXG4gICAgXCJcXHUwMDA2XFwnXFx1MDBmMlxcblxcJ1xcclxcJ1xcdTAwMGVcXCdcXHUwMGYzXFx1MDAwMyhcXHUwMDAzKFxcdTAwMDcoXFx1MDBmOFxcbihcXGZcIixcbiAgICBcIihcXHUwMDBlKFxcdTAwZmJcXHUwMDBiKFxcdTAwMDMpXFx1MDAwNilcXHUwMGZlXFxuKVxccilcXHUwMDBlKVxcdTAwZmZcXHUwMDAzKVwiLFxuICAgIFwiXFx1MDAwMylcXHUwMDAzKlxcdTAwMDMqXFx1MDAwNipcXHUwMTA2XFxuKlxccipcXHUwMDBlKlxcdTAxMDdcXHUwMDAzKlxcdTAwMDMqXCIsXG4gICAgXCJcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDcrXFx1MDExMFxcbitcXGYrXFx1MDAwZStcXHUwMTEzXFx1MDAwYitcIixcbiAgICBcIlxcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzLFxcdTAwMDMsXFx1MDAwMyxcXHUwMDAzLFxcdTAwMDdcIixcbiAgICBcIixcXHUwMTFlXFxuLFxcZixcXHUwMDBlLFxcdTAxMjFcXHUwMDBiLFxcdTAwMDMsXFx1MDAwMyxcXHUwMDAzXFx1MDExMVxcdTAwMDItXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDVcXHUwMDA0XFx1MDAwN1xcdTAwMDVcXHRcXHUwMDA2XFx1MDAwYlxcdTAwMDdcXHJcXGJcXHUwMDBmXFx0XFx1MDAxMVwiLFxuICAgIFwiXFxuXFx1MDAxM1xcdTAwMGJcXHUwMDE1XFxmXFx1MDAxN1xcclxcdTAwMTlcXHUwMDBlXFx1MDAxYlxcdTAwMGZcXHUwMDFkXFx1MDAxMFxcdTAwMWZcIixcbiAgICBcIlxcdTAwMTEhXFx1MDAxMiNcXHUwMDEzJVxcdTAwMTRcXCdcXHUwMDE1KVxcdTAwMTYrXFx1MDAxNy1cXHUwMDE4L1xcdTAwMTkxXFx1MDAxYVwiLFxuICAgIFwiM1xcdTAwMWI1XFx1MDAxYzdcXHUwMDFkOVxcdTAwMWU7XFx1MDAxZj0gPyFBXFxcIkMjRSRHJUkmS1xcJ00oTylRKlMrVSxXLVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXG5cXHUwMDAzXFx1MDAwMjI7XFx1MDAwNFxcdTAwMDJHR2dnXFx1MDAwNFxcdTAwMDItLS8vXFx1MDAwM1xcdTAwMDJjXCIsXG4gICAgXCJ8XFx1MDAwNlxcdTAwMDIyO0NcXFxcYWFjfFxcdTAwMDVcXHUwMDAyXFx1MDAwYlxcZlxcdTAwMGVcXHUwMDBmXFxcIlxcXCJcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiLzAyO0NcXFxcYWFjfFxcdTAwMDRcXHUwMDAyXFxmXFxmXFx1MDAwZlxcdTAwMGZcXHUwMDAyXFx1MDEyZFxcdTAwMDJcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcclxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDExXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFmXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMiFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMiNcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyJVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFwnXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMilcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMitcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyLVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyL1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCIxXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDI1XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjlcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyO1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyPVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDI/XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJBXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMkNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMkVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiR1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAySVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyS1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJNXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJPXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyVVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDNZXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDVbXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDdcIixcbiAgICBcImJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx0ZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBiZlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxccmhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZmtcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDExblxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEzdlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE1XCIsXG4gICAgXCJcXHUwMDdmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTdcXHUwMDg3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTlcIixcbiAgICBcIlxcdTAwOGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYlxcdTAwOGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxZFwiLFxuICAgIFwiXFx1MDA5MFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFmXFx1MDA5NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIhXCIsXG4gICAgXCJcXHUwMDlhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiNcXHUwMDljXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiVcXHUwMGE0XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFwnXFx1MDBhN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIpXFx1MDBhZFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMitcXHUwMGFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMi1cXHUwMGIyXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyL1xcdTAwYjRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyMVxcdTAwYjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDIzXFx1MDBiOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDI1XFx1MDBiYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIjdcXHUwMGJjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjlcXHUwMGJlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjtcXHUwMGMyXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyPVxcdTAwYzZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyP1xcdTAwY2FcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJBXFx1MDBjZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJDXFx1MDBkMVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMkVcXHUwMGQ2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkdcXHUwMGUwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAySVxcdTAwZTJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyS1xcdTAwZTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJNXFx1MDBmMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJPXFx1MDBmNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJRXFx1MDBmZFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlNcXHUwMTAzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlVcXHUwMTBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyV1xcdTAxMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyWVpcXHUwMDA3XFx1MDA3ZlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJaXFx1MDAwNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJbXFxcXFxcdTAwMDdxXFx1MDAwMlxcdTAwMDJcXFxcXVxcdTAwMDdcIixcbiAgICBcInJcXHUwMDAyXFx1MDAwMl1eXFx1MDAwN2NcXHUwMDAyXFx1MDAwMl5fXFx1MDAwN3NcXHUwMDAyXFx1MDAwMl9gXFx1MDAwN3dcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyYGFcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyYVxcdTAwMDZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyYmNcXHUwMDA3PVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJjXFxiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmRlXFx1MDAwNypcXHUwMDAyXFx1MDAwMmVcXG5cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJmZ1xcdTAwMDcrXFx1MDAwMlxcdTAwMDJnXFxmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmhcIixcbiAgICBcImlcXHUwMDA3a1xcdTAwMDJcXHUwMDAyaWpcXHUwMDA3aFxcdTAwMDJcXHUwMDAyalxcdTAwMGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJrbFxcdTAwMDc/XFx1MDAwMlxcdTAwMDJsbVxcdTAwMDc/XFx1MDAwMlxcdTAwMDJtXFx1MDAxMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMm5vXFx1MDAwN2RcXHUwMDAyXFx1MDAwMm9wXFx1MDAwN2NcXHUwMDAyXFx1MDAwMnBxXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwicXJcXHUwMDA3dFxcdTAwMDJcXHUwMDAycnNcXHUwMDA3a1xcdTAwMDJcXHUwMDAyc3RcXHUwMDA3Z1xcdTAwMDJcXHUwMDAydHVcXHUwMDA3XCIsXG4gICAgXCJ0XFx1MDAwMlxcdTAwMDJ1XFx1MDAxMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ2d1xcdTAwMDdRXFx1MDAwMlxcdTAwMDJ3eFwiLFxuICAgIFwiXFx1MDAwN1JcXHUwMDAyXFx1MDAwMnh5XFx1MDAwN0dcXHUwMDAyXFx1MDAwMnl6XFx1MDAwN1BcXHUwMDAyXFx1MDAwMnp7XFx1MDAwN1wiLFxuICAgIFwiU1xcdTAwMDJcXHUwMDAye3xcXHUwMDA3Q1xcdTAwMDJcXHUwMDAyfH1cXHUwMDA3VVxcdTAwMDJcXHUwMDAyfX5cXHUwMDA3T1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJ+XFx1MDAxNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDdmXFx1MDA4MFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwODBcXHUwMDgxXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwODFcXHUwMDgyXFx1MDAwN2VcXHUwMDAyXFx1MDAwMlxcdTAwODJcIixcbiAgICBcIlxcdTAwODNcXHUwMDA3blxcdTAwMDJcXHUwMDAyXFx1MDA4M1xcdTAwODRcXHUwMDA3d1xcdTAwMDJcXHUwMDAyXFx1MDA4NFxcdTAwODVcIixcbiAgICBcIlxcdTAwMDdmXFx1MDAwMlxcdTAwMDJcXHUwMDg1XFx1MDA4NlxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDg2XFx1MDAxNlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODdcXHUwMDg4XFx1MDAwN3NcXHUwMDAyXFx1MDAwMlxcdTAwODhcXHUwMDg5XFx1MDAwN1wiLFxuICAgIFwidFxcdTAwMDJcXHUwMDAyXFx1MDA4OVxcdTAwOGFcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDA4YVxcdTAwOGJcXHUwMDA3aVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhiXFx1MDAxOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhjXFx1MDA4ZFxcdTAwMDddXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGRcXHUwMDFhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGVcXHUwMDhmXFx1MDAwN19cXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZlxcdTAwMWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA5MFxcdTAwOTFcXHUwMDA3ZVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDkxXFx1MDA5MlxcdTAwMDd0XFx1MDAwMlxcdTAwMDJcXHUwMDkyXFx1MDA5M1xcdTAwMDdnXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwOTNcXHUwMDk0XFx1MDAwN2lcXHUwMDAyXFx1MDAwMlxcdTAwOTRcXHUwMDFlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDA5NVxcdTAwOTZcXHUwMDA3aVxcdTAwMDJcXHUwMDAyXFx1MDA5NlxcdTAwOTdcXHUwMDA3Y1xcdTAwMDJcXHUwMDAyXFx1MDA5N1wiLFxuICAgIFwiXFx1MDA5OFxcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMDk4XFx1MDA5OVxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDk5IFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWFcXHUwMDliXFx1MDAwN31cXHUwMDAyXFx1MDAwMlxcdTAwOWJcXFwiXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDA5Y1xcdTAwOWRcXHUwMDA3b1xcdTAwMDJcXHUwMDAyXFx1MDA5ZFxcdTAwOWVcXHUwMDA3Z1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDllXFx1MDA5ZlxcdTAwMDdjXFx1MDAwMlxcdTAwMDJcXHUwMDlmXFx1MDBhMFxcdTAwMDd1XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYTBcXHUwMGExXFx1MDAwN3dcXHUwMDAyXFx1MDAwMlxcdTAwYTFcXHUwMGEyXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwYTJcIixcbiAgICBcIlxcdTAwYTNcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDBhMyRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhNFxcdTAwYTVcIixcbiAgICBcIlxcdTAwMDcvXFx1MDAwMlxcdTAwMDJcXHUwMGE1XFx1MDBhNlxcdTAwMDdAXFx1MDAwMlxcdTAwMDJcXHUwMGE2JlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwYTdcXHUwMGE4XFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwYThcXHUwMGE5XFx1MDAwN2dcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhOVxcdTAwYWFcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBhYVxcdTAwYWJcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGFiXFx1MDBhY1xcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMGFjKFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGFkXCIsXG4gICAgXCJcXHUwMGFlXFx1MDAwN1dcXHUwMDAyXFx1MDAwMlxcdTAwYWUqXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYWZcXHUwMGIwXCIsXG4gICAgXCJcXHUwMDA3RVxcdTAwMDJcXHUwMDAyXFx1MDBiMFxcdTAwYjFcXHUwMDA3WlxcdTAwMDJcXHUwMDAyXFx1MDBiMSxcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMGIyXFx1MDBiM1xcdTAwMDcuXFx1MDAwMlxcdTAwMDJcXHUwMGIzLlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjRcXHUwMGI1XFx1MDAwN2BcXHUwMDAyXFx1MDAwMlxcdTAwYjUwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBiNlxcdTAwYjdcXHUwMDA3LFxcdTAwMDJcXHUwMDAyXFx1MDBiNzJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiOFwiLFxuICAgIFwiXFx1MDBiOVxcdTAwMDcxXFx1MDAwMlxcdTAwMDJcXHUwMGI5NFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBiYlwiLFxuICAgIFwiXFx1MDAwNy1cXHUwMDAyXFx1MDAwMlxcdTAwYmI2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmNcXHUwMGJkXFx1MDAwN1wiLFxuICAgIFwiL1xcdTAwMDJcXHUwMDAyXFx1MDBiZDhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiZVxcdTAwYmZcXHUwMDA3dVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJmXFx1MDBjMFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcXHUwMGMwXFx1MDBjMVxcdTAwMDdwXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYzE6XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzJcXHUwMGMzXFx1MDAwN2VcXHUwMDAyXFx1MDAwMlxcdTAwYzNcIixcbiAgICBcIlxcdTAwYzRcXHUwMDA3cVxcdTAwMDJcXHUwMDAyXFx1MDBjNFxcdTAwYzVcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBjNTxcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM2XFx1MDBjN1xcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMGM3XFx1MDBjOFxcdTAwMDdcIixcbiAgICBcImNcXHUwMDAyXFx1MDAwMlxcdTAwYzhcXHUwMGM5XFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwYzk+XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjYVxcdTAwY2JcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDBjYlxcdTAwY2NcXHUwMDA3elxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGNjXFx1MDBjZFxcdTAwMDdyXFx1MDAwMlxcdTAwMDJcXHUwMGNkQFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGNlXCIsXG4gICAgXCJcXHUwMGNmXFx1MDAwN25cXHUwMDAyXFx1MDAwMlxcdTAwY2ZcXHUwMGQwXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwZDBCXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkMVxcdTAwZDJcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBkMlxcdTAwZDNcXHUwMDA3XCIsXG4gICAgXCJzXFx1MDAwMlxcdTAwMDJcXHUwMGQzXFx1MDBkNFxcdTAwMDd0XFx1MDAwMlxcdTAwMDJcXHUwMGQ0XFx1MDBkNVxcdTAwMDd2XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDVEXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZDZcXHUwMGQ3XFx1MDAwN3JcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkN1xcdTAwZDhcXHUwMDA3a1xcdTAwMDJcXHUwMDAyXFx1MDBkOEZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkOVwiLFxuICAgIFwiXFx1MDBkYVxcdTAwMDVJJVxcdTAwMDJcXHUwMGRhXFx1MDBkYlxcdTAwMDVLJlxcdTAwMDJcXHUwMGRiXFx1MDBlMVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwZGNcXHUwMGRkXFx1MDAwNU1cXCdcXHUwMDAyXFx1MDBkZFxcdTAwZGVcXHUwMDA1SyZcXHUwMDAyXFx1MDBkZVwiLFxuICAgIFwiXFx1MDBlMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRmXFx1MDBlMVxcdTAwMDVJJVxcdTAwMDJcXHUwMGUwXFx1MDBkOVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTBcXHUwMGRjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTBcXHUwMGRmXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMUhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMlxcdTAwZTNcIixcbiAgICBcIlxcdTAwMDVNXFwnXFx1MDAwMlxcdTAwZTNcXHUwMGU1XFx1MDAwNzBcXHUwMDAyXFx1MDAwMlxcdTAwZTRcXHUwMGU2XFx0XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGU1XFx1MDBlNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU2XFx1MDBlN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZTdcXHUwMGU1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTdcXHUwMGU4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBlOEpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlOVxcdTAwZWFcXHRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWFcXHUwMGVjXFx0XFx1MDAwNFxcdTAwMDJcXHUwMDAyXFx1MDBlYlxcdTAwZWRcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVjXCIsXG4gICAgXCJcXHUwMGViXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWRcXHUwMGVlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWVcIixcbiAgICBcIlxcdTAwZWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZVxcdTAwZWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZlwiLFxuICAgIFwiTFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYwXFx1MDBmMlxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjFcXHUwMGYwXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmMlxcdTAwZjNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmM1xcdTAwZjFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGY0TlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjVcXHUwMGY5XFx0XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDBmNlxcdTAwZjhcIixcbiAgICBcIlxcdFxcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwZjdcXHUwMGY2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjhcXHUwMGZiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZjdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZmFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZhUFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZiXFx1MDBmOVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmNcXHUwMGZlXFx0XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDBmZFxcdTAwZmNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZlXFx1MDBmZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZmXFx1MDBmZFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmZcXHUwMTAwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDBcXHUwMTAxXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMVxcdTAxMDJcXGIpXFx1MDAwMlxcdTAwMDJcXHUwMTAyUlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAxMDNcXHUwMTA1XFx1MDAwNyRcXHUwMDAyXFx1MDAwMlxcdTAxMDRcXHUwMTA2XFx0XFxiXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMDVcXHUwMTA0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDZcXHUwMTA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDEwN1xcdTAxMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwN1xcdTAxMDhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTA4XFx1MDEwOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XFx1MDEwYVxcdTAwMDckXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMGFUXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGJcXHUwMTBjXFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMGNcIixcbiAgICBcIlxcdTAxMGRcXHUwMDA3LFxcdTAwMDJcXHUwMDAyXFx1MDEwZFxcdTAxMTFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwZVwiLFxuICAgIFwiXFx1MDExMFxcdTAwMGJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBmXFx1MDEwZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEwXCIsXG4gICAgXCJcXHUwMTEzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcXHUwMTEyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcIixcbiAgICBcIlxcdTAxMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMlxcdTAxMTRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExM1wiLFxuICAgIFwiXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE0XFx1MDExNVxcdTAwMDcsXFx1MDAwMlxcdTAwMDJcXHUwMTE1XCIsXG4gICAgXCJcXHUwMTE2XFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMTZcXHUwMTE3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTdcIixcbiAgICBcIlxcdTAxMThcXGIrXFx1MDAwMlxcdTAwMDJcXHUwMTE4VlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE5XFx1MDExYVxcdTAwMDdcIixcbiAgICBcIjFcXHUwMDAyXFx1MDAwMlxcdTAxMWFcXHUwMTFiXFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMWJcXHUwMTFmXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDExY1xcdTAxMWVcXG5cXHRcXHUwMDAyXFx1MDAwMlxcdTAxMWRcXHUwMTFjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDExZVxcdTAxMjFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExZlxcdTAxMWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMTFmXFx1MDEyMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTIwXFx1MDEyMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAxMjFcXHUwMTFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjJcXHUwMTIzXFxiLFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTIzWFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGZcXHUwMDAyXFx1MDBlMFxcdTAwZTdcXHUwMGVlXFx1MDBmM1xcdTAwZjlcIixcbiAgICBcIlxcdTAwZmZcXHUwMTA3XFx1MDExMVxcdTAxMWZcXHUwMDAzXFxiXFx1MDAwMlxcdTAwMDJcIl0uam9pbihcIlwiKTtcblxuXG52YXIgYXRuID0gbmV3IGFudGxyNC5hdG4uQVRORGVzZXJpYWxpemVyKCkuZGVzZXJpYWxpemUoc2VyaWFsaXplZEFUTik7XG5cbnZhciBkZWNpc2lvbnNUb0RGQSA9IGF0bi5kZWNpc2lvblRvU3RhdGUubWFwKCBmdW5jdGlvbihkcywgaW5kZXgpIHsgcmV0dXJuIG5ldyBhbnRscjQuZGZhLkRGQShkcywgaW5kZXgpOyB9KTtcblxuZnVuY3Rpb24gUUFTTUxleGVyKGlucHV0KSB7XG5cdGFudGxyNC5MZXhlci5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB0aGlzLl9pbnRlcnAgPSBuZXcgYW50bHI0LmF0bi5MZXhlckFUTlNpbXVsYXRvcih0aGlzLCBhdG4sIGRlY2lzaW9uc1RvREZBLCBuZXcgYW50bHI0LlByZWRpY3Rpb25Db250ZXh0Q2FjaGUoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFBU01MZXhlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5MZXhlci5wcm90b3R5cGUpO1xuUUFTTUxleGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFFBU01MZXhlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFFBU01MZXhlci5wcm90b3R5cGUsIFwiYXRuXCIsIHtcbiAgICAgICAgZ2V0IDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0bjtcbiAgICAgICAgfVxufSk7XG5cblFBU01MZXhlci5FT0YgPSBhbnRscjQuVG9rZW4uRU9GO1xuUUFTTUxleGVyLlRfXzAgPSAxO1xuUUFTTUxleGVyLlRfXzEgPSAyO1xuUUFTTUxleGVyLlRfXzIgPSAzO1xuUUFTTUxleGVyLlRfXzMgPSA0O1xuUUFTTUxleGVyLlRfXzQgPSA1O1xuUUFTTUxleGVyLlRfXzUgPSA2O1xuUUFTTUxleGVyLlRfXzYgPSA3O1xuUUFTTUxleGVyLlRfXzcgPSA4O1xuUUFTTUxleGVyLlRfXzggPSA5O1xuUUFTTUxleGVyLlRfXzkgPSAxMDtcblFBU01MZXhlci5UX18xMCA9IDExO1xuUUFTTUxleGVyLlRfXzExID0gMTI7XG5RQVNNTGV4ZXIuVF9fMTIgPSAxMztcblFBU01MZXhlci5UX18xMyA9IDE0O1xuUUFTTUxleGVyLlRfXzE0ID0gMTU7XG5RQVNNTGV4ZXIuVF9fMTUgPSAxNjtcblFBU01MZXhlci5UX18xNiA9IDE3O1xuUUFTTUxleGVyLlRfXzE3ID0gMTg7XG5RQVNNTGV4ZXIuVF9fMTggPSAxOTtcblFBU01MZXhlci5UX18xOSA9IDIwO1xuUUFTTUxleGVyLlRfXzIwID0gMjE7XG5RQVNNTGV4ZXIuVF9fMjEgPSAyMjtcblFBU01MZXhlci5UX18yMiA9IDIzO1xuUUFTTUxleGVyLlRfXzIzID0gMjQ7XG5RQVNNTGV4ZXIuVF9fMjQgPSAyNTtcblFBU01MZXhlci5UX18yNSA9IDI2O1xuUUFTTUxleGVyLlRfXzI2ID0gMjc7XG5RQVNNTGV4ZXIuVF9fMjcgPSAyODtcblFBU01MZXhlci5UX18yOCA9IDI5O1xuUUFTTUxleGVyLlRfXzI5ID0gMzA7XG5RQVNNTGV4ZXIuVF9fMzAgPSAzMTtcblFBU01MZXhlci5UX18zMSA9IDMyO1xuUUFTTUxleGVyLlRfXzMyID0gMzM7XG5RQVNNTGV4ZXIuUEkgPSAzNDtcblFBU01MZXhlci5SRUFMID0gMzU7XG5RQVNNTGV4ZXIuU1VCUkVBTCA9IDM2O1xuUUFTTUxleGVyLkVYUFJFQUwgPSAzNztcblFBU01MZXhlci5JTlQgPSAzODtcblFBU01MZXhlci5JRCA9IDM5O1xuUUFTTUxleGVyLldTID0gNDA7XG5RQVNNTGV4ZXIuRklMRU5BTUUgPSA0MTtcblFBU01MZXhlci5DT01NRU5UID0gNDI7XG5RQVNNTGV4ZXIuTElORV9DT01NRU5UID0gNDM7XG5cblFBU01MZXhlci5wcm90b3R5cGUuY2hhbm5lbE5hbWVzID0gWyBcIkRFRkFVTFRfVE9LRU5fQ0hBTk5FTFwiLCBcIkhJRERFTlwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUubW9kZU5hbWVzID0gWyBcIkRFRkFVTFRfTU9ERVwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUubGl0ZXJhbE5hbWVzID0gWyBudWxsLCBcIid9J1wiLCBcIidvcGFxdWUnXCIsIFwiJzsnXCIsIFwiJygnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJyknXCIsIFwiJ2lmJ1wiLCBcIic9PSdcIiwgXCInYmFycmllcidcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInT1BFTlFBU00nXCIsIFwiJ2luY2x1ZGUnXCIsIFwiJ3FyZWcnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ1snXCIsIFwiJ10nXCIsIFwiJ2NyZWcnXCIsIFwiJ2dhdGUnXCIsIFwiJ3snXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ21lYXN1cmUnXCIsIFwiJy0+J1wiLCBcIidyZXNldCdcIiwgXCInVSdcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInQ1gnXCIsIFwiJywnXCIsIFwiJ14nXCIsIFwiJyonXCIsIFwiJy8nXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJysnXCIsIFwiJy0nXCIsIFwiJ3NpbidcIiwgXCInY29zJ1wiLCBcIid0YW4nXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ2V4cCdcIiwgXCInbG4nXCIsIFwiJ3NxcnQnXCIsIFwiJ3BpJ1wiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUuc3ltYm9saWNOYW1lcyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIlBJXCIsIFwiUkVBTFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIldTXCIsIFwiRklMRU5BTUVcIiwgXCJDT01NRU5UXCIsIFwiTElORV9DT01NRU5UXCIgXTtcblxuUUFTTUxleGVyLnByb3RvdHlwZS5ydWxlTmFtZXMgPSBbIFwiVF9fMFwiLCBcIlRfXzFcIiwgXCJUX18yXCIsIFwiVF9fM1wiLCBcIlRfXzRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX181XCIsIFwiVF9fNlwiLCBcIlRfXzdcIiwgXCJUX184XCIsIFwiVF9fOVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzEwXCIsIFwiVF9fMTFcIiwgXCJUX18xMlwiLCBcIlRfXzEzXCIsIFwiVF9fMTRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18xNVwiLCBcIlRfXzE2XCIsIFwiVF9fMTdcIiwgXCJUX18xOFwiLCBcIlRfXzE5XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVF9fMjBcIiwgXCJUX18yMVwiLCBcIlRfXzIyXCIsIFwiVF9fMjNcIiwgXCJUX18yNFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzI1XCIsIFwiVF9fMjZcIiwgXCJUX18yN1wiLCBcIlRfXzI4XCIsIFwiVF9fMjlcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18zMFwiLCBcIlRfXzMxXCIsIFwiVF9fMzJcIiwgXCJQSVwiLCBcIlJFQUxcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFwiV1NcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJGSUxFTkFNRVwiLCBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG5RQVNNTGV4ZXIucHJvdG90eXBlLmdyYW1tYXJGaWxlTmFtZSA9IFwiUUFTTS5nNFwiO1xuXG5cblxuZXhwb3J0cy5RQVNNTGV4ZXIgPSBRQVNNTGV4ZXI7XG5cbiIsIi8vIEdlbmVyYXRlZCBmcm9tIFFBU00uZzQgYnkgQU5UTFIgNC43LjFcbi8vIGpzaGludCBpZ25vcmU6IHN0YXJ0XG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG5cbi8vIFRoaXMgY2xhc3MgZGVmaW5lcyBhIGNvbXBsZXRlIGxpc3RlbmVyIGZvciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlci5cbmZ1bmN0aW9uIFFBU01MaXN0ZW5lcigpIHtcblx0YW50bHI0LnRyZWUuUGFyc2VUcmVlTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC50cmVlLlBhcnNlVHJlZUxpc3RlbmVyLnByb3RvdHlwZSk7XG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUUFTTUxpc3RlbmVyO1xuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNYWlucHJvZyA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjc3RhdGVtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0U3RhdGVtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3ZlcnNpb24uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpbmNsdWRlLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckluY2x1ZGUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaW5jbHVkZS5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEluY2x1ZGUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZmlsZW5hbWUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyRmlsZW5hbWUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZmlsZW5hbWUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRGaWxlbmFtZSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZGVjbC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdERlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRHYXRlZGVjbCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNnb3BsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ29wbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjcW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclFvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNxb3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRRb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRVb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYW55bGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FueWxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJJZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0SWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21peGVkbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0TWl4ZWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckFyZ3VtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cGxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXhwID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2F0b20uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQXRvbSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhdG9tLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXRvbSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1bmFyeW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuXG5leHBvcnRzLlFBU01MaXN0ZW5lciA9IFFBU01MaXN0ZW5lcjsiLCIvLyBHZW5lcmF0ZWQgZnJvbSBRQVNNLmc0IGJ5IEFOVExSIDQuNy4xXG4vLyBqc2hpbnQgaWdub3JlOiBzdGFydFxudmFyIGFudGxyNCA9IHJlcXVpcmUoJ2FudGxyNC9pbmRleCcpO1xudmFyIFFBU01MaXN0ZW5lciA9IHJlcXVpcmUoJy4vUUFTTUxpc3RlbmVyJykuUUFTTUxpc3RlbmVyO1xudmFyIGdyYW1tYXJGaWxlTmFtZSA9IFwiUUFTTS5nNFwiO1xuXG52YXIgc2VyaWFsaXplZEFUTiA9IFtcIlxcdTAwMDNcXHU2MDhiXFx1YTcyYVxcdTgxMzNcXHViOWVkXFx1NDE3Y1xcdTNiZTdcXHU3Nzg2XFx1NTk2NFwiLFxuICAgIFwiXFx1MDAwMy1cXHUwMTMwXFx1MDAwNFxcdTAwMDJcXHRcXHUwMDAyXFx1MDAwNFxcdTAwMDNcXHRcXHUwMDAzXFx1MDAwNFxcdTAwMDRcXHRcIixcbiAgICBcIlxcdTAwMDRcXHUwMDA0XFx1MDAwNVxcdFxcdTAwMDVcXHUwMDA0XFx1MDAwNlxcdFxcdTAwMDZcXHUwMDA0XFx1MDAwN1xcdFxcdTAwMDdcXHUwMDA0XCIsXG4gICAgXCJcXGJcXHRcXGJcXHUwMDA0XFx0XFx0XFx0XFx1MDAwNFxcblxcdFxcblxcdTAwMDRcXHUwMDBiXFx0XFx1MDAwYlxcdTAwMDRcXGZcXHRcXGZcXHUwMDA0XCIsXG4gICAgXCJcXHJcXHRcXHJcXHUwMDA0XFx1MDAwZVxcdFxcdTAwMGVcXHUwMDA0XFx1MDAwZlxcdFxcdTAwMGZcXHUwMDA0XFx1MDAxMFxcdFxcdTAwMTBcXHUwMDA0XCIsXG4gICAgXCJcXHUwMDExXFx0XFx1MDAxMVxcdTAwMDRcXHUwMDEyXFx0XFx1MDAxMlxcdTAwMDRcXHUwMDEzXFx0XFx1MDAxM1xcdTAwMDNcXHUwMDAyXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDdcXHUwMDAyKVxcblxcdTAwMDJcXGZcXHUwMDAyXFx1MDAwZVxcdTAwMDIsXFx1MDAwYlxcdTAwMDJcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDA1XFx1MDAwM1dcXG5cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA0XFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcIixcbiAgICBcIlxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA2XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDVcXHUwMDA3b1xcblxcdTAwMDdcIixcbiAgICBcIlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1wiLFxuICAgIFwiXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXCIsXG4gICAgXCJcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDVcXGJcXHUwMDg1XFxuXFxiXFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFwiLFxuICAgIFwiXFx1MDAwM1xcdFxcdTAwMDZcXHRcXHUwMDhjXFxuXFx0XFxyXFx0XFx1MDAwZVxcdFxcdTAwOGRcXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cIixcbiAgICBcIlxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwNVwiLFxuICAgIFwiXFxuXFx1MDA5YlxcblxcblxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDA1XFx1MDAwYlxcdTAwYmJcXG5cXHUwMDBiXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDA1XFxmXFx1MDBiZlwiLFxuICAgIFwiXFxuXFxmXFx1MDAwM1xcclxcdTAwMDNcXHJcXHUwMDA3XFxyXFx1MDBjM1xcblxcclxcZlxcclxcdTAwMGVcXHJcXHUwMGM2XFx1MDAwYlxcclxcdTAwMDNcIixcbiAgICBcIlxcclxcdTAwMDNcXHJcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDA3XFx1MDAwZVxcdTAwY2ZcXG5cXHUwMDBlXFxmXFx1MDAwZVxcdTAwMGVcXHUwMDBlXFx1MDBkMlxcdTAwMGJcXHUwMDBlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDBlXFx1MDBkYVxcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGRkXFx1MDAwYlxcdTAwMGVcXHUwMDAzXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDdcXHUwMDBlXCIsXG4gICAgXCJcXHUwMGU1XFxuXFx1MDAwZVxcZlxcdTAwMGVcXHUwMDBlXFx1MDAwZVxcdTAwZThcXHUwMDBiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwZVxcdTAwMDdcXHUwMDBlXFx1MDBlY1xcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGVmXFx1MDAwYlxcdTAwMGVcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwNVxcdTAwMGVcXHUwMGY1XFxuXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDVcIixcbiAgICBcIlxcdTAwMGZcXHUwMGZjXFxuXFx1MDAwZlxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDdcXHUwMDEwXCIsXG4gICAgXCJcXHUwMTAxXFxuXFx1MDAxMFxcZlxcdTAwMTBcXHUwMDBlXFx1MDAxMFxcdTAxMDRcXHUwMDBiXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMFxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMGFcXG5cXHUwMDExXFx1MDAwM1xcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwNVxcdTAwMTFcXHUwMTExXFxuXCIsXG4gICAgXCJcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMTlcXG5cXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMWNcXG5cXHUwMDExXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDdcXHUwMDExXFx1MDEyN1xcblxcdTAwMTFcXGZcXHUwMDExXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAxMVxcdTAxMmFcXHUwMDBiXFx1MDAxMVxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDJcXHUwMDAzIFxcdTAwMTRcXHUwMDAyXFx1MDAwNFxcdTAwMDZcXGJcXG5cXGZcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDEwXFx1MDAxMlxcdTAwMTRcXHUwMDE2XFx1MDAxOFxcdTAwMWFcXHUwMDFjXFx1MDAxZSBcXFwiJFxcdTAwMDJcXHUwMDA2XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMWNcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDFhXFx1MDAxYlxcdTAwMDRcXHUwMDAyJCUoKVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDFlI1xcdTAwMDJcXHUwMTQ0XFx1MDAwMiZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwNFZcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDA2WFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGJcXFxcXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFxuYFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGZuXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMGVcXHUwMDg0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxMFxcdTAwOGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxMlxcdTAwOWFcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE0XFx1MDBiYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE2XFx1MDBiZVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMThcXHUwMGM0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMWFcXHUwMGY0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxY1xcdTAwZmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxZVxcdTAxMDJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDIgXFx1MDExYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXFwiXFx1MDEyYlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMiRcXHUwMTJkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiYqXFx1MDAwNVxcdTAwMDZcXHUwMDA0XFx1MDAwMlwiLFxuICAgIFwiXFwnKVxcdTAwMDVcXHUwMDA0XFx1MDAwM1xcdTAwMDIoXFwnXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiksXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyKihcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyKitcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyK1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIsKlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDItV1xcdTAwMDVcXGZcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiLi9cXHUwMDA1XFx1MDAwZVxcYlxcdTAwMDIvMFxcdTAwMDVcXHUwMDEwXFx0XFx1MDAwMjAxXFx1MDAwN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiMVdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyMjNcXHUwMDA1XFx1MDAwZVxcYlxcdTAwMDIzNFxcdTAwMDdcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMjRXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjU2XFx1MDAwN1xcdTAwMDRcXHUwMDAyXFx1MDAwMjY3XFx1MDAwNylcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyNzhcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDI4OVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDI5V1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMjo7XFx1MDAwN1xcdTAwMDRcXHUwMDAyXFx1MDAwMjs8XFx1MDAwNylcXHUwMDAyXFx1MDAwMjw9XCIsXG4gICAgXCJcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyPT5cXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyPj9cXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcIixcbiAgICBcIj9AXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMkBXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkFCXFx1MDAwN1xcdTAwMDRcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyQkNcXHUwMDA3KVxcdTAwMDJcXHUwMDAyQ0RcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyREVcXHUwMDA1XFx1MDAxOFwiLFxuICAgIFwiXFxyXFx1MDAwMkVGXFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMkZHXFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyR0hcXHUwMDA3XFx1MDAwNVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJIV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJJV1xcdTAwMDVcXHUwMDEyXFxuXFx1MDAwMkpLXFx1MDAwN1wiLFxuICAgIFwiXFxiXFx1MDAwMlxcdTAwMDJLTFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJMTVxcdTAwMDcpXFx1MDAwMlxcdTAwMDJNTlxcdTAwMDdcIixcbiAgICBcIlxcdFxcdTAwMDJcXHUwMDAyTk9cXHUwMDA3KFxcdTAwMDJcXHUwMDAyT1BcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyUFdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDEyXFxuXFx1MDAwMlFSXFx1MDAwN1xcblxcdTAwMDJcXHUwMDAyUlNcXHUwMDA1XFx1MDAxNlxcZlxcdTAwMDJTVFxcdTAwMDdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlRXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlVXXFx1MDAwNVxcYlxcdTAwMDVcXHUwMDAyVi1cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJWLlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJWMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlY1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlY6XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlZBXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyVklcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVkpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVlFcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJWVVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJXXFx1MDAwNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlhZXFx1MDAwN1xcdTAwMGJcXHUwMDAyXFx1MDAwMllaXFx1MDAwNyVcXHUwMDAyXFx1MDAwMlpbXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyW1xcdTAwMDdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFxcXF1cXHUwMDA3XFxmXFx1MDAwMlxcdTAwMDJdXlxcdTAwMDVcIixcbiAgICBcIlxcblxcdTAwMDZcXHUwMDAyXl9cXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyX1xcdFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcImBhXFx1MDAwNytcXHUwMDAyXFx1MDAwMmFcXHUwMDBiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmJjXFx1MDAwN1xcclxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJjZFxcdTAwMDcpXFx1MDAwMlxcdTAwMDJkZVxcdTAwMDdcXHUwMDBlXFx1MDAwMlxcdTAwMDJlZlxcdTAwMDcoXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMmZnXFx1MDAwN1xcdTAwMGZcXHUwMDAyXFx1MDAwMmdvXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMmhpXFx1MDAwN1xcdTAwMTBcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyaWpcXHUwMDA3KVxcdTAwMDJcXHUwMDAyamtcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAya2xcXHUwMDA3XCIsXG4gICAgXCIoXFx1MDAwMlxcdTAwMDJsbVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJtb1xcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJuYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMm5oXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMm9cXHJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJwcVxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJxclxcdTAwMDcpXFx1MDAwMlxcdTAwMDJyc1xcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyc3RcXHUwMDA3XFx1MDAxMlxcdTAwMDJcXHUwMDAydFxcdTAwODVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAydXZcIixcbiAgICBcIlxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJ2d1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJ3eFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcInh5XFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMnl6XFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyentcXHUwMDA3XFx1MDAxMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJ7XFx1MDA4NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ8fVxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJ9flxcdTAwMDdcIixcbiAgICBcIilcXHUwMDAyXFx1MDAwMn5cXHUwMDdmXFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwN2ZcXHUwMDgwXFx1MDAwNVxcdTAwMThcIixcbiAgICBcIlxcclxcdTAwMDJcXHUwMDgwXFx1MDA4MVxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMDgxXFx1MDA4MlxcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyXFx1MDA4MlxcdTAwODNcXHUwMDA3XFx1MDAxMlxcdTAwMDJcXHUwMDAyXFx1MDA4M1xcdTAwODVcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDg0cFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDg0dVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwODR8XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODVcXHUwMDBmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4NlxcdTAwOGNcXHUwMDA1XFx1MDAxNFxcdTAwMGJcXHUwMDAyXFx1MDA4N1xcdTAwODhcXHUwMDA3XFxuXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwODhcXHUwMDg5XFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyXFx1MDA4OVxcdTAwOGFcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhhXFx1MDA4Y1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhiXFx1MDA4NlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGJcXHUwMDg3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGNcXHUwMDhkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZFxcdTAwOGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA4ZFxcdTAwOGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhlXFx1MDAxMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhmXFx1MDA5YlxcdTAwMDVcXHUwMDE0XFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTBcXHUwMDkxXFx1MDAwN1xcdTAwMTNcXHUwMDAyXFx1MDAwMlxcdTAwOTFcXHUwMDkyXFx1MDAwNVxcdTAwMWNcXHUwMDBmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5MlxcdTAwOTNcXHUwMDA3XFx1MDAxNFxcdTAwMDJcXHUwMDAyXFx1MDA5M1xcdTAwOTRcXHUwMDA1XFx1MDAxY1xcdTAwMGZcIixcbiAgICBcIlxcdTAwMDJcXHUwMDk0XFx1MDA5NVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJcXHUwMDk1XFx1MDA5YlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTZcXHUwMDk3XFx1MDAwN1xcdTAwMTVcXHUwMDAyXFx1MDAwMlxcdTAwOTdcXHUwMDk4XFx1MDAwNVxcdTAwMWNcXHUwMDBmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5OFxcdTAwOTlcXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDA5OVxcdTAwOWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDlhXFx1MDA4ZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDlhXFx1MDA5MFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOWFcXHUwMDk2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWJcXHUwMDEzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5Y1xcdTAwOWRcXHUwMDA3XFx1MDAxNlxcdTAwMDJcXHUwMDAyXFx1MDA5ZFxcdTAwOWVcXHUwMDA3XFx1MDAwNlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDllXFx1MDA5ZlxcdTAwMDVcXHUwMDFlXFx1MDAxMFxcdTAwMDJcXHUwMDlmXFx1MDBhMFxcdTAwMDdcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTBcXHUwMGExXFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTFcXHUwMGEyXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhMlxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhM1xcdTAwYTRcXHUwMDA3XFx1MDAxN1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGE0XFx1MDBhNVxcdTAwMDVcXHUwMDFjXFx1MDAwZlxcdTAwMDJcXHUwMGE1XFx1MDBhNlxcdTAwMDdcXHUwMDE4XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTZcXHUwMGE3XFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTdcXHUwMGE4XFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhOFxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhOVxcdTAwYWFcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFhXFx1MDBhYlxcdTAwMDVcXHUwMDE2XFxmXFx1MDAwMlxcdTAwYWJcXHUwMGFjXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhY1xcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhZFxcdTAwYWVcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFlXFx1MDBhZlxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcXHUwMGFmXFx1MDBiMFxcdTAwMDdcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjBcXHUwMGIxXFx1MDAwNVxcdTAwMTZcXGZcXHUwMDAyXFx1MDBiMVxcdTAwYjJcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGIyXFx1MDBiYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGIzXFx1MDBiNFxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjRcXHUwMGI1XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwYjVcXHUwMGI2XFx1MDAwNVxcdTAwMWVcXHUwMDEwXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiNlxcdTAwYjdcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDBiN1xcdTAwYjhcXHUwMDA1XFx1MDAxNlxcZlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjhcXHUwMGI5XFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAwYjlcXHUwMGJiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiYVxcdTAwOWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiYVxcdTAwYTNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJhXFx1MDBhOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBhZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmFcXHUwMGIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmJcXHUwMDE1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiY1xcdTAwYmZcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcXHUwMGJkXFx1MDBiZlxcdTAwMDVcXHUwMDFhXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmVcXHUwMGJjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmVcXHUwMGJkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiZlxcdTAwMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjMFxcdTAwYzFcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGMxXFx1MDBjM1xcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcXHUwMGMyXFx1MDBjMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzNcXHUwMGM2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzRcXHUwMGMyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjNFxcdTAwYzVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjNVxcdTAwYzdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGM2XFx1MDBjNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM3XFx1MDBjOFxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzhcXHUwMDE5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzlcXHUwMGNhXFx1MDAwNylcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjYVxcdTAwY2JcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBjYlxcdTAwY2NcXHUwMDA3KFxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGNjXFx1MDBjZFxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGNkXFx1MDBjZlxcdTAwMDdcXHUwMDE4XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwY2VcXHUwMGM5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwY2ZcXHUwMGQyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBkMFxcdTAwY2VcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkMFxcdTAwZDFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGQxXFx1MDBkM1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGQyXFx1MDBkMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDNcXHUwMGY1XFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZDRcXHUwMGQ1XFx1MDAwNylcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkNVxcdTAwZDZcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBkNlxcdTAwZDdcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGQ3XFx1MDBkOFxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGQ4XFx1MDBkYVxcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZDlcXHUwMGQ0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZGFcXHUwMGRkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkYlxcdTAwZDlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkYlxcdTAwZGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGRjXFx1MDBkZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRkXFx1MDBkYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZGVcXHUwMGRmXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZGZcXHUwMGUwXFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlMFxcdTAwZTFcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXFx1MDBlMVxcdTAwZjVcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGUyXFx1MDBlM1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGUzXFx1MDBlNVxcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTRcXHUwMGUyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTVcXHUwMGU4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlNlxcdTAwZTRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlNlxcdTAwZTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGU3XFx1MDBlOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU4XFx1MDBlNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTlcXHUwMGVhXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZWFcXHUwMGVjXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlYlxcdTAwZTZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlY1xcdTAwZWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGVkXFx1MDBlYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVkXFx1MDBlZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWVcXHUwMGYwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWZcXHUwMGVkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmMFxcdTAwZjFcXHUwMDA3KVxcdTAwMDJcXHUwMDAyXFx1MDBmMVxcdTAwZjJcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGYyXFx1MDBmM1xcdTAwMDcoXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmNVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZjRcXHUwMGQwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjRcXHUwMGRiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmNFxcdTAwZWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmNVxcdTAwMWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGY2XFx1MDBmY1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGY3XFx1MDBmOFxcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGY4XCIsXG4gICAgXCJcXHUwMGY5XFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMlxcdTAwZjlcXHUwMGZhXFx1MDAwNyhcXHUwMDAyXFx1MDAwMlxcdTAwZmFcIixcbiAgICBcIlxcdTAwZmNcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyXFx1MDBmYlxcdTAwZjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmYlwiLFxuICAgIFwiXFx1MDBmN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZjXFx1MDAxZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZkXCIsXG4gICAgXCJcXHUwMGZlXFx1MDAwNSBcXHUwMDExXFx1MDAwMlxcdTAwZmVcXHUwMGZmXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlxcdTAwZmZcIixcbiAgICBcIlxcdTAxMDFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMFxcdTAwZmRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMVwiLFxuICAgIFwiXFx1MDEwNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAyXFx1MDEwMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAyXCIsXG4gICAgXCJcXHUwMTAzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDNcXHUwMTA1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDRcIixcbiAgICBcIlxcdTAxMDJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwNVxcdTAxMDZcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDEwNlwiLFxuICAgIFwiXFx1MDAxZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA3XFx1MDEwOVxcYlxcdTAwMTFcXHUwMDAxXFx1MDAwMlxcdTAxMDhcIixcbiAgICBcIlxcdTAxMGFcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XFx1MDEwOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XCIsXG4gICAgXCJcXHUwMTBhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGFcXHUwMTBiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGJcIixcbiAgICBcIlxcdTAxMGNcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyXFx1MDEwY1xcdTAxMGRcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDEwZFwiLFxuICAgIFwiXFx1MDEwZVxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMTBlXFx1MDExY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBmXCIsXG4gICAgXCJcXHUwMTExXFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMFxcdTAxMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMFwiLFxuICAgIFwiXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTExXFx1MDExMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEyXCIsXG4gICAgXCJcXHUwMTEzXFx1MDAwNSRcXHUwMDEzXFx1MDAwMlxcdTAxMTNcXHUwMTE0XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAxMTRcIixcbiAgICBcIlxcdTAxMTVcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDExNVxcdTAxMTZcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDExNlwiLFxuICAgIFwiXFx1MDExY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE3XFx1MDExOVxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMThcIixcbiAgICBcIlxcdTAxMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOFxcdTAxMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOVwiLFxuICAgIFwiXFx1MDExYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTFhXFx1MDExY1xcdTAwMDVcXFwiXFx1MDAxMlxcdTAwMDJcXHUwMTFiXCIsXG4gICAgXCJcXHUwMTA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWJcXHUwMTEwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWJcIixcbiAgICBcIlxcdTAxMThcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExY1xcdTAxMjhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExZFwiLFxuICAgIFwiXFx1MDExZVxcZlxcYlxcdTAwMDJcXHUwMDAyXFx1MDExZVxcdTAxMWZcXHUwMDA3XFx1MDAxOVxcdTAwMDJcXHUwMDAyXFx1MDExZlxcdTAxMjdcIixcbiAgICBcIlxcdTAwMDUgXFx1MDAxMVxcdFxcdTAxMjBcXHUwMTIxXFxmXFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDEyMVxcdTAxMjJcXHRcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAxMjJcXHUwMTI3XFx1MDAwNSBcXHUwMDExXFxiXFx1MDEyM1xcdTAxMjRcXGZcXHUwMDA2XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMjRcXHUwMTI1XFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyNVxcdTAxMjdcXHUwMDA1IFxcdTAwMTFcXHUwMDA3XFx1MDEyNlwiLFxuICAgIFwiXFx1MDExZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI2XFx1MDEyMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI2XCIsXG4gICAgXCJcXHUwMTIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjdcXHUwMTJhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjhcIixcbiAgICBcIlxcdTAxMjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOFxcdTAxMjlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOVwiLFxuICAgIFwiIVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJhXFx1MDEyOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJiXCIsXG4gICAgXCJcXHUwMTJjXFx0XFx1MDAwNFxcdTAwMDJcXHUwMDAyXFx1MDEyYyNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyZFxcdTAxMmVcIixcbiAgICBcIlxcdFxcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAxMmUlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTkqVm5cXHUwMDg0XFx1MDA4YlwiLFxuICAgIFwiXFx1MDA4ZFxcdTAwOWFcXHUwMGJhXFx1MDBiZVxcdTAwYzRcXHUwMGQwXFx1MDBkYlxcdTAwZTZcXHUwMGVkXFx1MDBmNFxcdTAwZmJcXHUwMTAyXCIsXG4gICAgXCJcXHUwMTA5XFx1MDExMFxcdTAxMThcXHUwMTFiXFx1MDEyNlxcdTAxMjhcIl0uam9pbihcIlwiKTtcblxuXG52YXIgYXRuID0gbmV3IGFudGxyNC5hdG4uQVRORGVzZXJpYWxpemVyKCkuZGVzZXJpYWxpemUoc2VyaWFsaXplZEFUTik7XG5cbnZhciBkZWNpc2lvbnNUb0RGQSA9IGF0bi5kZWNpc2lvblRvU3RhdGUubWFwKCBmdW5jdGlvbihkcywgaW5kZXgpIHsgcmV0dXJuIG5ldyBhbnRscjQuZGZhLkRGQShkcywgaW5kZXgpOyB9KTtcblxudmFyIHNoYXJlZENvbnRleHRDYWNoZSA9IG5ldyBhbnRscjQuUHJlZGljdGlvbkNvbnRleHRDYWNoZSgpO1xuXG52YXIgbGl0ZXJhbE5hbWVzID0gWyBudWxsLCBcIid9J1wiLCBcIidvcGFxdWUnXCIsIFwiJzsnXCIsIFwiJygnXCIsIFwiJyknXCIsIFwiJ2lmJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJz09J1wiLCBcIidiYXJyaWVyJ1wiLCBcIidPUEVOUUFTTSdcIiwgXCInaW5jbHVkZSdcIiwgXCIncXJlZydcIiwgXG4gICAgICAgICAgICAgICAgICAgICBcIidbJ1wiLCBcIiddJ1wiLCBcIidjcmVnJ1wiLCBcIidnYXRlJ1wiLCBcIid7J1wiLCBcIidtZWFzdXJlJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJy0+J1wiLCBcIidyZXNldCdcIiwgXCInVSdcIiwgXCInQ1gnXCIsIFwiJywnXCIsIFwiJ14nXCIsIFwiJyonXCIsIFxuICAgICAgICAgICAgICAgICAgICAgXCInLydcIiwgXCInKydcIiwgXCInLSdcIiwgXCInc2luJ1wiLCBcIidjb3MnXCIsIFwiJ3RhbidcIiwgXCInZXhwJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJ2xuJ1wiLCBcIidzcXJ0J1wiLCBcIidwaSdcIiBdO1xuXG52YXIgc3ltYm9saWNOYW1lcyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXCJQSVwiLCBcIlJFQUxcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFwiV1NcIiwgXCJGSUxFTkFNRVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG52YXIgcnVsZU5hbWVzID0gIFsgXCJtYWlucHJvZ1wiLCBcInN0YXRlbWVudFwiLCBcInZlcnNpb25cIiwgXCJpbmNsdWRlXCIsIFwiZmlsZW5hbWVcIiwgXG4gICAgICAgICAgICAgICAgICAgXCJkZWNsXCIsIFwiZ2F0ZWRlY2xcIiwgXCJnb3BsaXN0XCIsIFwicW9wXCIsIFwidW9wXCIsIFwiYW55bGlzdFwiLCBcbiAgICAgICAgICAgICAgICAgICBcImlkbGlzdFwiLCBcIm1peGVkbGlzdFwiLCBcImFyZ3VtZW50XCIsIFwiZXhwbGlzdFwiLCBcImV4cFwiLCBcbiAgICAgICAgICAgICAgICAgICBcImF0b21cIiwgXCJ1bmFyeW9wXCIgXTtcblxuZnVuY3Rpb24gUUFTTVBhcnNlciAoaW5wdXQpIHtcblx0YW50bHI0LlBhcnNlci5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB0aGlzLl9pbnRlcnAgPSBuZXcgYW50bHI0LmF0bi5QYXJzZXJBVE5TaW11bGF0b3IodGhpcywgYXRuLCBkZWNpc2lvbnNUb0RGQSwgc2hhcmVkQ29udGV4dENhY2hlKTtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLmxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcztcbiAgICB0aGlzLnN5bWJvbGljTmFtZXMgPSBzeW1ib2xpY05hbWVzO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlci5wcm90b3R5cGUpO1xuUUFTTVBhcnNlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQVNNUGFyc2VyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUUFTTVBhcnNlci5wcm90b3R5cGUsIFwiYXRuXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGF0bjtcblx0fVxufSk7XG5cblFBU01QYXJzZXIuRU9GID0gYW50bHI0LlRva2VuLkVPRjtcblFBU01QYXJzZXIuVF9fMCA9IDE7XG5RQVNNUGFyc2VyLlRfXzEgPSAyO1xuUUFTTVBhcnNlci5UX18yID0gMztcblFBU01QYXJzZXIuVF9fMyA9IDQ7XG5RQVNNUGFyc2VyLlRfXzQgPSA1O1xuUUFTTVBhcnNlci5UX181ID0gNjtcblFBU01QYXJzZXIuVF9fNiA9IDc7XG5RQVNNUGFyc2VyLlRfXzcgPSA4O1xuUUFTTVBhcnNlci5UX184ID0gOTtcblFBU01QYXJzZXIuVF9fOSA9IDEwO1xuUUFTTVBhcnNlci5UX18xMCA9IDExO1xuUUFTTVBhcnNlci5UX18xMSA9IDEyO1xuUUFTTVBhcnNlci5UX18xMiA9IDEzO1xuUUFTTVBhcnNlci5UX18xMyA9IDE0O1xuUUFTTVBhcnNlci5UX18xNCA9IDE1O1xuUUFTTVBhcnNlci5UX18xNSA9IDE2O1xuUUFTTVBhcnNlci5UX18xNiA9IDE3O1xuUUFTTVBhcnNlci5UX18xNyA9IDE4O1xuUUFTTVBhcnNlci5UX18xOCA9IDE5O1xuUUFTTVBhcnNlci5UX18xOSA9IDIwO1xuUUFTTVBhcnNlci5UX18yMCA9IDIxO1xuUUFTTVBhcnNlci5UX18yMSA9IDIyO1xuUUFTTVBhcnNlci5UX18yMiA9IDIzO1xuUUFTTVBhcnNlci5UX18yMyA9IDI0O1xuUUFTTVBhcnNlci5UX18yNCA9IDI1O1xuUUFTTVBhcnNlci5UX18yNSA9IDI2O1xuUUFTTVBhcnNlci5UX18yNiA9IDI3O1xuUUFTTVBhcnNlci5UX18yNyA9IDI4O1xuUUFTTVBhcnNlci5UX18yOCA9IDI5O1xuUUFTTVBhcnNlci5UX18yOSA9IDMwO1xuUUFTTVBhcnNlci5UX18zMCA9IDMxO1xuUUFTTVBhcnNlci5UX18zMSA9IDMyO1xuUUFTTVBhcnNlci5UX18zMiA9IDMzO1xuUUFTTVBhcnNlci5QSSA9IDM0O1xuUUFTTVBhcnNlci5SRUFMID0gMzU7XG5RQVNNUGFyc2VyLlNVQlJFQUwgPSAzNjtcblFBU01QYXJzZXIuRVhQUkVBTCA9IDM3O1xuUUFTTVBhcnNlci5JTlQgPSAzODtcblFBU01QYXJzZXIuSUQgPSAzOTtcblFBU01QYXJzZXIuV1MgPSA0MDtcblFBU01QYXJzZXIuRklMRU5BTUUgPSA0MTtcblFBU01QYXJzZXIuQ09NTUVOVCA9IDQyO1xuUUFTTVBhcnNlci5MSU5FX0NPTU1FTlQgPSA0MztcblxuUUFTTVBhcnNlci5SVUxFX21haW5wcm9nID0gMDtcblFBU01QYXJzZXIuUlVMRV9zdGF0ZW1lbnQgPSAxO1xuUUFTTVBhcnNlci5SVUxFX3ZlcnNpb24gPSAyO1xuUUFTTVBhcnNlci5SVUxFX2luY2x1ZGUgPSAzO1xuUUFTTVBhcnNlci5SVUxFX2ZpbGVuYW1lID0gNDtcblFBU01QYXJzZXIuUlVMRV9kZWNsID0gNTtcblFBU01QYXJzZXIuUlVMRV9nYXRlZGVjbCA9IDY7XG5RQVNNUGFyc2VyLlJVTEVfZ29wbGlzdCA9IDc7XG5RQVNNUGFyc2VyLlJVTEVfcW9wID0gODtcblFBU01QYXJzZXIuUlVMRV91b3AgPSA5O1xuUUFTTVBhcnNlci5SVUxFX2FueWxpc3QgPSAxMDtcblFBU01QYXJzZXIuUlVMRV9pZGxpc3QgPSAxMTtcblFBU01QYXJzZXIuUlVMRV9taXhlZGxpc3QgPSAxMjtcblFBU01QYXJzZXIuUlVMRV9hcmd1bWVudCA9IDEzO1xuUUFTTVBhcnNlci5SVUxFX2V4cGxpc3QgPSAxNDtcblFBU01QYXJzZXIuUlVMRV9leHAgPSAxNTtcblFBU01QYXJzZXIuUlVMRV9hdG9tID0gMTY7XG5RQVNNUGFyc2VyLlJVTEVfdW5hcnlvcCA9IDE3O1xuXG5mdW5jdGlvbiBNYWlucHJvZ0NvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9tYWlucHJvZztcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFpbnByb2dDb250ZXh0O1xuXG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFZlcnNpb25Db250ZXh0LDApO1xufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5zdGF0ZW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoU3RhdGVtZW50Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChTdGF0ZW1lbnRDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbk1haW5wcm9nQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJNYWlucHJvZyh0aGlzKTtcblx0fVxufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRNYWlucHJvZyh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5NYWlucHJvZ0NvbnRleHQgPSBNYWlucHJvZ0NvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLm1haW5wcm9nID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgTWFpbnByb2dDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDAsIFFBU01QYXJzZXIuUlVMRV9tYWlucHJvZyk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMzY7XG4gICAgICAgIHRoaXMudmVyc2lvbigpO1xuICAgICAgICB0aGlzLnN0YXRlID0gNDA7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIHdoaWxlKCgoKF9sYSkgJiB+MHgxZikgPT0gMCAmJiAoKDEgPDwgX2xhKSAmICgoMSA8PCBRQVNNUGFyc2VyLlRfXzEpIHwgKDEgPDwgUUFTTVBhcnNlci5UX181KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fNykgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzkpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xMCkgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzEzKSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTQpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xNikgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzE4KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTkpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18yMCkpKSAhPT0gMCkgfHwgX2xhPT09UUFTTVBhcnNlci5JRCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDM3O1xuICAgICAgICAgICAgdGhpcy5zdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0MjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gU3RhdGVtZW50Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3N0YXRlbWVudDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGF0ZW1lbnRDb250ZXh0O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5kZWNsID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChEZWNsQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmdhdGVkZWNsID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChHYXRlZGVjbENvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5nb3BsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChHb3BsaXN0Q29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLklEID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JRCwgMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoSWRsaXN0Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLnFvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoUW9wQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFueWxpc3RDb250ZXh0LDApO1xufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuaW5jbHVkZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSW5jbHVkZUNvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclN0YXRlbWVudCh0aGlzKTtcblx0fVxufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0U3RhdGVtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlN0YXRlbWVudENvbnRleHQgPSBTdGF0ZW1lbnRDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5zdGF0ZW1lbnQgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBTdGF0ZW1lbnRDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDIsIFFBU01QYXJzZXIuUlVMRV9zdGF0ZW1lbnQpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxLHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0MztcbiAgICAgICAgICAgIHRoaXMuZGVjbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0NDtcbiAgICAgICAgICAgIHRoaXMuZ2F0ZWRlY2woKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0NTtcbiAgICAgICAgICAgIHRoaXMuZ29wbGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQ2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0ODtcbiAgICAgICAgICAgIHRoaXMuZ2F0ZWRlY2woKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18wKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDUzO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA1NDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDYwO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2MTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY2O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX180KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2ODtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDcpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDcxO1xuICAgICAgICAgICAgdGhpcy5xb3AoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgOCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzYpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklOVCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzg7XG4gICAgICAgICAgICB0aGlzLnFvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA5KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA3OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX183KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA4MDtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMTApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgzO1xuICAgICAgICAgICAgdGhpcy5pbmNsdWRlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gVmVyc2lvbkNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV92ZXJzaW9uO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJzaW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuVmVyc2lvbkNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVyc2lvbkNvbnRleHQ7XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5SRUFMID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5SRUFMLCAwKTtcbn07XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclZlcnNpb24odGhpcyk7XG5cdH1cbn07XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRWZXJzaW9uKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlZlcnNpb25Db250ZXh0ID0gVmVyc2lvbkNvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBWZXJzaW9uQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCA0LCBRQVNNUGFyc2VyLlJVTEVfdmVyc2lvbik7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDg2O1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fOCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4NztcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlJFQUwpO1xuICAgICAgICB0aGlzLnN0YXRlID0gODg7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBJbmNsdWRlQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2luY2x1ZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkluY2x1ZGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbmNsdWRlQ29udGV4dDtcblxuSW5jbHVkZUNvbnRleHQucHJvdG90eXBlLmZpbGVuYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChGaWxlbmFtZUNvbnRleHQsMCk7XG59O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJJbmNsdWRlKHRoaXMpO1xuXHR9XG59O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0SW5jbHVkZSh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5JbmNsdWRlQ29udGV4dCA9IEluY2x1ZGVDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5pbmNsdWRlID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgSW5jbHVkZUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgNiwgUUFTTVBhcnNlci5SVUxFX2luY2x1ZGUpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA5MDtcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzkpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTE7XG4gICAgICAgIHRoaXMuZmlsZW5hbWUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDkyO1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRmlsZW5hbWVDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZmlsZW5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkZpbGVuYW1lQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbGVuYW1lQ29udGV4dDtcblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5GSUxFTkFNRSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuRklMRU5BTUUsIDApO1xufTtcblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckZpbGVuYW1lKHRoaXMpO1xuXHR9XG59O1xuXG5GaWxlbmFtZUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEZpbGVuYW1lKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkZpbGVuYW1lQ29udGV4dCA9IEZpbGVuYW1lQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZmlsZW5hbWUgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBGaWxlbmFtZUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgOCwgUUFTTVBhcnNlci5SVUxFX2ZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTQ7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5GSUxFTkFNRSk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRGVjbENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9kZWNsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWNsQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRGVjbENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGVjbENvbnRleHQ7XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuRGVjbENvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckRlY2wodGhpcyk7XG5cdH1cbn07XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXREZWNsKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkRlY2xDb250ZXh0ID0gRGVjbENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmRlY2wgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBEZWNsQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAxMCwgUUFTTVBhcnNlci5SVUxFX2RlY2wpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMDg7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgc3dpdGNoKHRoaXMuX2lucHV0LkxBKDEpKSB7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xMDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDk3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA5ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTM6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTAzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTA3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gR2F0ZWRlY2xDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZ2F0ZWRlY2w7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkdhdGVkZWNsQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdhdGVkZWNsQ29udGV4dDtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoSWRsaXN0Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbkdhdGVkZWNsQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJHYXRlZGVjbCh0aGlzKTtcblx0fVxufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRHYXRlZGVjbCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5HYXRlZGVjbENvbnRleHQgPSBHYXRlZGVjbENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmdhdGVkZWNsID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgR2F0ZWRlY2xDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDEyLCBRQVNNUGFyc2VyLlJVTEVfZ2F0ZWRlY2wpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMzA7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMyx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExMjtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExNztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE5O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyMztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyNTtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyNztcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBHb3BsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2dvcGxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkdvcGxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5Hb3BsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHb3BsaXN0Q29udGV4dDtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLnVvcCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhVb3BDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFVvcENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhJZGxpc3RDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KElkbGlzdENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyR29wbGlzdCh0aGlzKTtcblx0fVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEdvcGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuR29wbGlzdENvbnRleHQgPSBHb3BsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZ29wbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEdvcGxpc3RDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE0LCBRQVNNUGFyc2VyLlJVTEVfZ29wbGlzdCk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMTM3OyBcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEzNztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHN3aXRjaCh0aGlzLl9pbnB1dC5MQSgxKSkge1xuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzE5OlxuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzIwOlxuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLklEOlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzI7XG4gICAgICAgICAgICAgICAgdGhpcy51b3AoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX183OlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzM7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzQ7XG4gICAgICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMTM1O1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGFudGxyNC5lcnJvci5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzk7IFxuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIH0gd2hpbGUoKCgoKF9sYSAtIDgpKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCAoX2xhIC0gOCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlRfXzcgLSA4KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5UX18xOSAtIDgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzIwIC0gOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuSUQgLSA4KSkpKSAhPT0gMCkpO1xuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIFFvcENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9xb3A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFvcENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcblFvcENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUW9wQ29udGV4dDtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChVb3BDb250ZXh0LDApO1xufTtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoQXJndW1lbnRDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFyZ3VtZW50Q29udGV4dCxpKTtcbiAgICB9XG59O1xuXG5Rb3BDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclFvcCh0aGlzKTtcblx0fVxufTtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0UW9wKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlFvcENvbnRleHQgPSBRb3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5xb3AgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBRb3BDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE2LCBRQVNNUGFyc2VyLlJVTEVfcW9wKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTUyO1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHN3aXRjaCh0aGlzLl9pbnB1dC5MQSgxKSkge1xuICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTk6XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18yMDpcbiAgICAgICAgY2FzZSBRQVNNUGFyc2VyLklEOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDE7XG4gICAgICAgICAgICB0aGlzLnVvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xNjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQyO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE2KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDM7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE3KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDU7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xODpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE4KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDk7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTUwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gVW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3VvcDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuVW9wQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuVW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVb3BDb250ZXh0O1xuXG5Vb3BDb250ZXh0LnByb3RvdHlwZS5leHBsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChFeHBsaXN0Q29udGV4dCwwKTtcbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmFyZ3VtZW50ID0gZnVuY3Rpb24oaSkge1xuICAgIGlmKGk9PT11bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IG51bGw7XG4gICAgfVxuICAgIGlmKGk9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHRzKEFyZ3VtZW50Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChBcmd1bWVudENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFueWxpc3RDb250ZXh0LDApO1xufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJVb3AodGhpcyk7XG5cdH1cbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdFVvcCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5Vb3BDb250ZXh0ID0gVW9wQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgVW9wQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAxOCwgUUFTTVBhcnNlci5SVUxFX3VvcCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCw3LHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTY7XG4gICAgICAgICAgICB0aGlzLmV4cGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTU4O1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTYxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjI7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTYzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjQ7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2ODtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTcxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTczO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3NDtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc5O1xuICAgICAgICAgICAgdGhpcy5leHBsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTgwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4MTtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4MjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBBbnlsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2FueWxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBbnlsaXN0Q29udGV4dDtcblxuQW55bGlzdENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSWRsaXN0Q29udGV4dCwwKTtcbn07XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZS5taXhlZGxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KE1peGVkbGlzdENvbnRleHQsMCk7XG59O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJBbnlsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0QW55bGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5BbnlsaXN0Q29udGV4dCA9IEFueWxpc3RDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5hbnlsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgQW55bGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjAsIFFBU01QYXJzZXIuUlVMRV9hbnlsaXN0KTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTg4O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBsYV8gPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDgsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NjtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NztcbiAgICAgICAgICAgIHRoaXMubWl4ZWRsaXN0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gSWRsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2lkbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJZGxpc3RDb250ZXh0O1xuXG5JZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKGkpIHtcblx0aWYoaT09PXVuZGVmaW5lZCkge1xuXHRcdGkgPSBudWxsO1xuXHR9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKFFBU01QYXJzZXIuSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIGkpO1xuICAgIH1cbn07XG5cblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJJZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbklkbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdElkbGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5JZGxpc3RDb250ZXh0ID0gSWRsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuaWRsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgSWRsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyMiwgUUFTTVBhcnNlci5SVUxFX2lkbGlzdCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsOSx0aGlzLl9jdHgpXG4gICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTA7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMTkxO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDksdGhpcy5fY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSAxOTc7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gTWl4ZWRsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX21peGVkbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNaXhlZGxpc3RDb250ZXh0O1xuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKGkpIHtcblx0aWYoaT09PXVuZGVmaW5lZCkge1xuXHRcdGkgPSBudWxsO1xuXHR9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKFFBU01QYXJzZXIuSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIGkpO1xuICAgIH1cbn07XG5cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oaSkge1xuXHRpZihpPT09dW5kZWZpbmVkKSB7XG5cdFx0aSA9IG51bGw7XG5cdH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbnMoUUFTTVBhcnNlci5JTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCBpKTtcbiAgICB9XG59O1xuXG5cbk1peGVkbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyTWl4ZWRsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRNaXhlZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuTWl4ZWRsaXN0Q29udGV4dCA9IE1peGVkbGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLm1peGVkbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IE1peGVkbGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjQsIFFBU01QYXJzZXIuUlVMRV9taXhlZGxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNDI7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTQsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwNjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMCx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjAyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjAzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwODtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTAsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwOTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxNztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMSx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjEzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjE0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxOTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTEsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIyMDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjIxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMzU7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTMsdGhpcy5fY3R4KVxuICAgICAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjI4O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMix0aGlzLl9jdHgpXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjI1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDEyLHRoaXMuX2N0eCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzNztcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTMsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjM5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIEFyZ3VtZW50Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2FyZ3VtZW50O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcmd1bWVudENvbnRleHQ7XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JTlQsIDApO1xufTtcblxuQXJndW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckFyZ3VtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEFyZ3VtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkFyZ3VtZW50Q29udGV4dCA9IEFyZ3VtZW50Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBBcmd1bWVudENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjYsIFFBU01QYXJzZXIuUlVMRV9hcmd1bWVudCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI0OTtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxNSx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRXhwbGlzdENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9leHBsaXN0O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FeHBsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRXhwbGlzdENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXhwbGlzdENvbnRleHQ7XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoRXhwQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChFeHBDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckV4cGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRFeHBsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkV4cGxpc3RDb250ZXh0ID0gRXhwbGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmV4cGxpc3QgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBFeHBsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyOCwgUUFTTVBhcnNlci5SVUxFX2V4cGxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNTY7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE2LHRoaXMuX2N0eClcbiAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI1MTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjUyO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI1ODtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE2LHRoaXMuX2N0eCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gMjU5O1xuICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBFeHBDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZXhwO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FeHBDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5FeHBDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEV4cENvbnRleHQ7XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmV4cCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhFeHBDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEV4cENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuRXhwQ29udGV4dC5wcm90b3R5cGUudW5hcnlvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoVW5hcnlvcENvbnRleHQsMCk7XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS5hdG9tID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChBdG9tQ29udGV4dCwwKTtcbn07XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyRXhwKHRoaXMpO1xuXHR9XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRFeHAodGhpcyk7XG5cdH1cbn07XG5cblxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbihfcCkge1xuXHRpZihfcD09PXVuZGVmaW5lZCkge1xuXHQgICAgX3AgPSAwO1xuXHR9XG4gICAgdmFyIF9wYXJlbnRjdHggPSB0aGlzLl9jdHg7XG4gICAgdmFyIF9wYXJlbnRTdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEV4cENvbnRleHQodGhpcywgdGhpcy5fY3R4LCBfcGFyZW50U3RhdGUpO1xuICAgIHZhciBfcHJldmN0eCA9IGxvY2FsY3R4O1xuICAgIHZhciBfc3RhcnRTdGF0ZSA9IDMwO1xuICAgIHRoaXMuZW50ZXJSZWN1cnNpb25SdWxlKGxvY2FsY3R4LCAzMCwgUUFTTVBhcnNlci5SVUxFX2V4cCwgX3ApO1xuICAgIHZhciBfbGEgPSAwOyAvLyBUb2tlbiB0eXBlXG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI4MTtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMCx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjM7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgIGlmKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjI7XG4gICAgICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI2NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjY7XG4gICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjcwO1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICBpZihfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjY5O1xuICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgIGlmKCEoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzI7XG4gICAgICAgICAgICB0aGlzLnVuYXJ5b3AoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc0O1xuICAgICAgICAgICAgdGhpcy5leHAoMCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3ODtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgaWYoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3NztcbiAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjgwO1xuICAgICAgICAgICAgdGhpcy5hdG9tKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N0eC5zdG9wID0gdGhpcy5faW5wdXQuTFQoLTEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjk0O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMix0aGlzLl9jdHgpXG4gICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuX3BhcnNlTGlzdGVuZXJzIT09bnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9wcmV2Y3R4ID0gbG9jYWxjdHg7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5MjtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMjEsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4MztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA2KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwKDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxjdHggPSBuZXcgRXhwQ29udGV4dCh0aGlzLCBfcGFyZW50Y3R4LCBfcGFyZW50U3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hOZXdSZWN1cnNpb25Db250ZXh0KGxvY2FsY3R4LCBfc3RhcnRTdGF0ZSwgUUFTTVBhcnNlci5SVUxFX2V4cCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODY7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKCB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbih0aGlzLCBcInRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA1KVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjg3O1xuICAgICAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzIzIHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4ODtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHAoNik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4OTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDQpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyOTA7XG4gICAgICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjkxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cCg1KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5NjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDIyLHRoaXMuX2N0eCk7XG4gICAgICAgIH1cblxuICAgIH0gY2F0Y2goIGVycm9yKSB7XG4gICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gZXJyb3I7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCBlcnJvcik7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIGVycm9yKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IGVycm9yO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5yb2xsUmVjdXJzaW9uQ29udGV4dHMoX3BhcmVudGN0eClcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gQXRvbUNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9hdG9tO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuQXRvbUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbUNvbnRleHQ7XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5JTlQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklOVCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuUkVBTCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuUkVBTCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuUEkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLlBJLCAwKTtcbn07XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyQXRvbSh0aGlzKTtcblx0fVxufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEF0b20odGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuQXRvbUNvbnRleHQgPSBBdG9tQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuYXRvbSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEF0b21Db250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDMyLCBRQVNNUGFyc2VyLlJVTEVfYXRvbSk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjk3O1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgaWYoISgoKCgoX2xhIC0gMzQpKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCAoX2xhIC0gMzQpKSAmICgoMSA8PCAoUUFTTVBhcnNlci5QSSAtIDM0KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5SRUFMIC0gMzQpKSB8ICgxIDw8IChRQVNNUGFyc2VyLklOVCAtIDM0KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5JRCAtIDM0KSkpKSAhPT0gMCkpKSB7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBVbmFyeW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3VuYXJ5b3A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblVuYXJ5b3BDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVbmFyeW9wQ29udGV4dDtcblxuXG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJVbmFyeW9wKHRoaXMpO1xuXHR9XG59O1xuXG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0VW5hcnlvcCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5VbmFyeW9wQ29udGV4dCA9IFVuYXJ5b3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS51bmFyeW9wID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgVW5hcnlvcENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMzQsIFFBU01QYXJzZXIuUlVMRV91bmFyeW9wKTtcbiAgICB2YXIgX2xhID0gMDsgLy8gVG9rZW4gdHlwZVxuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyOTk7XG4gICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICBpZighKCgoKChfbGEgLSAyOCkpICYgfjB4MWYpID09IDAgJiYgKCgxIDw8IChfbGEgLSAyOCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlRfXzI3IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzI4IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzI5IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMwIC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMxIC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMyIC0gMjgpKSkpICE9PSAwKSkpIHtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cblxuUUFTTVBhcnNlci5wcm90b3R5cGUuc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBydWxlSW5kZXgsIHByZWRJbmRleCkge1xuXHRzd2l0Y2gocnVsZUluZGV4KSB7XG5cdGNhc2UgMTU6XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBfc2VtcHJlZChsb2NhbGN0eCwgcHJlZEluZGV4KTtcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBcIk5vIHByZWRpY2F0ZSB3aXRoIGluZGV4OlwiICsgcnVsZUluZGV4O1xuICAgfVxufTtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZXhwX3NlbXByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcHJlZEluZGV4KSB7XG5cdHN3aXRjaChwcmVkSW5kZXgpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRyZXR1cm4gdGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpO1xuXHRcdGNhc2UgMTpcblx0XHRcdHJldHVybiB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNSk7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cmV0dXJuIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA0KTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgXCJObyBwcmVkaWNhdGUgd2l0aCBpbmRleDpcIiArIHByZWRJbmRleDtcblx0fVxufTtcblxuXG5leHBvcnRzLlFBU01QYXJzZXIgPSBRQVNNUGFyc2VyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgUGV0YXIgS29ycG9uYWnEhyA8cGV0YXIua29ycG9uYWljQGdtYWlsLmNvbT5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSwgZm91bmQgaW5cbiAqIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBtYXRoID0gcmVxdWlyZShcIm1hdGhqc1wiKTtcblxudmFyIFFBU01JbXBvcnQgPSByZXF1aXJlKFwiLi9xYXNtX2ltcG9ydC9RQVNNSW1wb3J0LmpzXCIpO1xuXG5cbnZhciBmb3JtYXRDb21wbGV4MiA9IGZ1bmN0aW9uKHJlLCBpbSwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgc3JlID0gZm9ybWF0RmxvYXQocmUsIG9wdGlvbnMpO1xuXG5cdHZhciBvcHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTtcblx0b3B0LnBsdXNDaGFyID0gXCIrXCI7XG5cdHZhciBzaW0gPSBmb3JtYXRGbG9hdChpbSwgb3B0KTtcblx0cmV0dXJuIHNyZSArIHNpbSArIChvcHRpb25zLmlvdGFDaGFyID8gb3B0aW9ucy5pb3RhQ2hhciA6IFwiaVwiKTtcbn07XG5cbnZhciBmb3JtYXRGbG9hdCA9IGZ1bmN0aW9uKGYsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0aWYob3B0aW9ucy5kZWNpbWFsUGxhY2VzKSB7XG5cdFx0ZiA9IG1hdGgucm91bmQoZiwgb3B0aW9ucy5kZWNpbWFsUGxhY2VzKTtcblx0fVxuXG5cdHZhciBzID0gZiArIFwiXCI7XG5cblx0aWYob3B0aW9ucy5maXhlZFdpZHRoKSB7XG5cdFx0cyA9IGYudG9GaXhlZChvcHRpb25zLmRlY2ltYWxQbGFjZXMgfHwgMTQpO1xuXHR9XG5cblx0dmFyIHBsdXNDaGFyID0gb3B0aW9ucy5wbHVzQ2hhcjtcblx0aWYob3B0aW9ucy5maXhlZFdpZHRoICYmICFwbHVzQ2hhcikge1xuXHRcdHBsdXNDaGFyID0gXCIgXCI7XG5cdH1cblxuXHRpZihwbHVzQ2hhciAmJiBmID49IDApIHtcblx0XHRzID0gcGx1c0NoYXIgKyBzO1xuXHR9XG5cblx0cmV0dXJuIHM7XG59O1xuXG52YXIgemVyb2VzTWF0cml4ID0gZnVuY3Rpb24obikge1xuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRtYXRyaXhbaV0gPSBbXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG5cdFx0XHRtYXRyaXhbaV1bal0gPSAwO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0cml4O1xufTtcblxudmFyIGlkZW50aXR5TWF0cml4ID0gZnVuY3Rpb24obikge1xuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRtYXRyaXhbaV0gPSBbXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG5cdFx0XHRtYXRyaXhbaV1bal0gPSBqID09IGkgPyAxIDogMDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdHJpeDtcbn07XG5cblxudmFyIG1ha2VDb250cm9sbGVkID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgbSA9IFUubGVuZ3RoO1xuXHR2YXIgQyA9IGlkZW50aXR5TWF0cml4KG0gKiAyKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtOyBpKyspIHtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG07IGorKykge1xuXHRcdFx0Q1tpICsgbV1baiArIG1dID0gVVtpXVtqXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIEM7XG59O1xuXG52YXIgdW5pcXVlQXJyYXkgPSBmdW5jdGlvbihhcnJheSkge1xuICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgc2VsZikge1xuXHRyZXR1cm4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG4gIH0pO1xufTtcblxudmFyIHF1Yml0TGV0dGVyID0gZnVuY3Rpb24obiwgbWF4KSB7XG5cdG1heE4gPSBtYXggfHwgKG4gKyAxKTtcblxuXHRpZihtYXhOID4gMCkge1xuXHRcdG1heE4gPSBtYXhOIC0gMTtcblx0fVxuXG5cdG1heExlbiA9IG1heE4udG9TdHJpbmcoMjYpLmxlbmd0aDtcblxuXHR2YXIgblN0ciA9IG4udG9TdHJpbmcoMjYpO1xuXHR3aGlsZShuU3RyLmxlbmd0aCA8IG1heExlbikge1xuXHRcdG5TdHIgPSBcIjBcIiArIG5TdHI7XG5cdH1cblxuXHR2YXIgcmVzID0gXCJcIjtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG5TdHIubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY29kZSA9IG5TdHIuY2hhckNvZGVBdChpKTtcblx0XHRyZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlIDwgOTcgPyBjb2RlICsgNDkgOiBjb2RlICsgMTApO1xuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cbnZhciBRdWFudHVtQ2lyY3VpdCA9IGZ1bmN0aW9uKG51bVF1Yml0cykge1xuXHR0aGlzLmJhc2ljR2F0ZXMgPSB7XG5cdFx0aWQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlNpbmdsZSBxdWJpdCBpZGVudGl0eSBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsIDBdLFxuXHRcdFx0XHRbMCwgMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJJRFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29tcGFjdFVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IHsgYWxwaGE6IFwiKENvbXBsZXgpIHsgLnJlYWwgPSAxLCAuaW1hZyA9IDAgfVwiLFxuXHRcdFx0XHRcdFx0XHRiZXRhOiBcIihDb21wbGV4KSB7LnJlYWwgPSAwLCAuaW1hZyA9IDB9XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiaWRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGF1bGkgWCAoUEkgcm90YXRpb24gb3ZlciBYLWF4aXMpIGFrYSBcXFwiTk9UXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzAsMV0sXG5cdFx0XHRcdFsxLDBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwYXVsaVhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQYXVsaSBZIChQSSByb3RhdGlvbiBvdmVyIFktYXhpcylcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMCxcIi1pXCJdLFxuXHRcdFx0XHRbXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHo6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBhdWxpIFogKFBJIHJvdGF0aW9uIG92ZXIgWi1heGlzKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkhhZGFtYXJkIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIxIC8gc3FydCgyKVwiLFwiMSAvIHNxcnQoMilcIl0sXG5cdFx0XHRcdFtcIjEgLyBzcXJ0KDIpXCIsXCItMSAvIHNxcnQoMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJIXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImhhZGFtYXJkXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3JuOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTcXVhcmUgcm9vdCBvZiBOT1RcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgc3JuOlxcbiAgICAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNSswLjVqLCAwLjUtMC41al0sIFswLjUtMC41aiwgMC41KzAuNWpdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlgqKigxLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMC41XCIsIFwiMC41XCJdLCBbXCIwLjVcIiwgXCItMC41XCJdXSxcblx0XHRcdFx0XHRcdFtbXCIwLjVcIiwgXCItMC41XCJdLFtcIjAuNVwiLCBcIjAuNVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInN4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdLFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1swLjUrMC41aiwgMC41LTAuNWpdLCBbMC41LTAuNWosIDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNybmRnOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJJbnZlcnNlIHNxdWFyZSByb290IG9mIE5PVFwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXSxcblx0XHRcdFx0W1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtYJiM4MjI0O1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5kZ1wiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBzcm5kZzpcXG4gICAgMC41LTAuNWksIDAuNSswLjVpXFxuICAgIDAuNSswLjVpLCAwLjUtMC41aVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3JuZGdcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNS0wLjVqLCAwLjUrMC41al0sIFswLjUrMC41aiwgMC41LTAuNWpdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlgqKigtMS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjAuNVwiLCBcIi0wLjVcIl0sIFtcIjAuNVwiLCBcIjAuNVwiXV0sXG5cdFx0XHRcdFx0XHRbW1wiMC41XCIsIFwiMC41XCJdLFtcIjAuNVwiLCBcIi0wLjVcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeGRnXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeGRnXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ2aVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdLFtcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1swLjUtMC41aiwgMC41KzAuNWpdLCBbMC41KzAuNWosIDAuNS0wLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHIyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIGFrYSBcXFwiUGhhc2UgUEkvMlxcXCJcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzJcIlxuXHRcdFx0fSxcblxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic0dhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzXCIsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJzXCIsIHBhcmFtczoge30gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwic1wiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyNDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpcyBha2EgXFxcIlBoYXNlIFBJLzRcXFwiXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMF0sXG5cdFx0XHRcdFswLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWiYjeDFENkQxOy80XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ0R2F0ZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidFwiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInRcIiwgcGFyYW1zOiB7fSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpewrxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cjg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBJLzggcm90YXRpb24gb3ZlciBaLWF4aXMgYWthIFxcXCJQaGFzZSBQSS84XFxcIlwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyA4KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvOFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOiBcIk1fUEkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS84XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvOFwiIH0gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpe4oWbXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwaGFzZXNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6IFwicGkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDBdLFswLFwiZXhwKGkgKiBwaSAvIDgpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMF0sWzAsbnAuZXhwKDFqICogbnAucGkgLyA4KV1dXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBYLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEgLyAyKVwiLCBcIi1pICogc2luKHRoZXRhIC8gMilcIl0sXG5cdFx0XHRcdFtcIi1pICogc2luKHRoZXRhIC8gMilcIiwgXCJjb3ModGhldGEgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJvdGF0ZVhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cnk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJvdGF0aW9uIGFyb3VuZCB0aGUgWS1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhIC8gMilcIiwgXCItMSAqIHNpbih0aGV0YSAvIDIpXCJdLFxuXHRcdFx0XHRbXCJzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUllcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicm90YXRlWVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJZXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBaLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcImNvcyhwaGkgLyAyKSAtIGkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImNvcyhwaGkgLyAyKSArIGkgKiBzaW4ocGhpIC8gMilcIl1cblx0XHRcdF0sXG5cblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1MToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiU2luZ2xlLXF1Yml0IHJvdGF0aW9uIGFib3V0IHRoZSBaIGF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIGxhbWJkYSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVTFcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUEhBU0VcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMF0sIFswLCBucC5leHAoMWoqcF9sYW1iZGEpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlc2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUEhcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHUyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTaW5nbGUtcXViaXQgcm90YXRpb24gYWJvdXQgdGhlIFgrWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiMSAvIHNxcnQoMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogMSAvIHNxcnQoMilcIl0sXG5cdFx0XHRcdFtcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlUyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInUyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHUyKCVwaGksICVsYW1iZGEpOlxcbiAgICAxL1NRUlQoMiksIC0xKkVYUChpKiVsYW1iZGEpKjEvU1FSVCgyKVxcbiAgICBFWFAoaSolcGhpKSoxL1NRUlQoMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKjEvU1FSVCgyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTJcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvcXVpbF9zcXJ0KDIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqMS9xdWlsX3NxcnQoMildLFtxdWlsX2V4cCgxaipwX3BoaSkqMS9xdWlsX3NxcnQoMikscXVpbF9leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvcXVpbF9zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLCBbbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiLWNvcyhsYW1iZGEpL3NxcnQoMilcIiwgXCItc2luKGxhbWJkYSkvc3FydCgyKVwiXV0sXG5cdFx0XHRcdFx0XHRcdCBbW1wiY29zKHBoaSkvc3FydCgyKVwiLCBcInNpbihwaGkpL3NxcnQoMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKS9zcXJ0KDIpXCIsIFwic2luKGxhbWJkYStwaGkpL3NxcnQoMilcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSwgW25wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRtYXRyaXg6IFtbXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiXSxbXCJleHAoaSAqIHBoaSkgKiAxIC8gc3FydCgyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiAxIC8gc3FydCgyKVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sIFtucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBoaVwiLCBsYW1iZGE6IFwibGFtYmRhXCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1Mzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiR2VuZXJpYyBzaW5nbGUtcXViaXQgcm90YXRpb24gZ2F0ZSB3aXRoIDMgRXVsZXIgYW5nbGVzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyBcImNvcyh0aGV0YS8yKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJVM1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHUzKCV0aGV0YSwgJXBoaSwgJWxhbWJkYSk6XFxuICAgIENPUygldGhldGEvMiksIC0xKkVYUChpKiVsYW1iZGEpKlNJTigldGhldGEvMilcXG4gICAgRVhQKGkqJXBoaSkqU0lOKCV0aGV0YS8yKSwgRVhQKGkqJWxhbWJkYSArIGkqJXBoaSkqQ09TKCV0aGV0YS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbcXVpbF9jb3MocF90aGV0YS8yKSwtcXVpbF9leHAoMWoqcF9sYW1iZGEpKnF1aWxfc2luKHBfdGhldGEvMildLFtxdWlsX2V4cCgxaipwX3BoaSkqcXVpbF9zaW4ocF90aGV0YS8yKSxxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqcXVpbF9jb3MocF90aGV0YS8yKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwidTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKSpzaW4odGhldGEvMilcIiwgXCItc2luKGxhbWJkYSkqc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKSpzaW4odGhldGEvMilcIiwgXCJzaW4ocGhpKSpzaW4odGhldGEvMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIiwgXCJzaW4obGFtYmRhK3BoaSkqY29zKHRoZXRhLzIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhLzIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sIFtucC5leHAoMWoqcF9waGkpKm5wLnNpbihwX3RoZXRhLzIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKm5wLmNvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFsgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgcjJgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic0dhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS80IHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgcjRgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyA0KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlRcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidEdhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIigtUEkvMikgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoLWkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUyYjODIyNDtcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCItTV9QSS8yXCIgfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twr1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRkYWdnZXI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR0ZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIigtUEkvNCkgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoLWkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVCYjODIyNDtcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCItTV9QSS80XCIgfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twrxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRkYWdnZXI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTd2FwcyB0aGUgc3RhdGUgb2YgdHdvIHF1Yml0cy5cIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wieFwiLFwieFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiU1dQXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN3YXBcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgc3dhcChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyKSB7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTIpO1xcblwiICtcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxuXCIgK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlN3YXBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN3YXBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3Jzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTcXVhcmUgcm9vdCBvZiBzd2FwXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCxcIjAuNSAqICgxICsgaSlcIixcIjAuNSAqICgxIC0gaSlcIiwwXSxcblx0XHRcdFx0WzAsXCIwLjUgKiAoMSAtIGkpXCIsXCIwLjUgKiAoMSArIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtTV1BcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHNyc3dhcDpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAwLjUrMC41aSwgMC41LTAuNWksIDBcXG4gICAgMCwgMC41LTAuNWksIDAuNSswLjVpLCAwXFxuICAgIDAsIDAsIDAsIDFcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQKiooMS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwwLjUgKiAoMSArIDFqKSwwLjUgKiAoMSAtIDFqKSwwXSxbMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNyc3dhcFwiLFxuXHRcdFx0XHRcdGZ1bmM6IFwidm9pZCBzcnN3YXAoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcTEsIGNvbnN0IGludCBxMikge1xcblwiICtcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVkocXViaXRzLCBxMiwgTV9QSS8yKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCBNX1BJLzE2KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVoocXViaXRzLCBxMSwgTV9QSS84KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCAtTV9QSS84KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVoocXViaXRzLCBxMiwgTV9QSS8xNik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVkocXViaXRzLCBxMiwgLU1fUEkvMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTEpO1xcbn1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0ZXF1aXZhbGVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaS8yXCIsIGxhbWJkYTogXCItMSpwaVwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCJwaVwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS80XCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjcqcGkvNFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS80XCIsIHBoaTogXCItMSpwaVwiLCBsYW1iZGE6IFwiLTEqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaVwiLCBsYW1iZGE6IFwicGkvMlwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCItMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiNypwaS80XCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpXCIsIGxhbWJkYTogXCJwaS8yXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIi0zKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMC41ICogKDEgLSAxaiksMC41ICogKDEgKyAxaiksMF0sWzAsMCwwLDFdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTUVJUU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0aXN3YXA6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlN3YXBzIHRoZSBzdGF0ZSBvZiB0d28gcXViaXRzLCBhcHBseWluZyBhIC1pIHBoYXNlIHRvIHExIHdoZW4gaXQgaXMgaW4gdGhlIDEgc3RhdGUgYW5kIGEgLWkgcGhhc2UgdG8gcTIgd2hlbiBpdCBpcyBpbiB0aGUgMCBzdGF0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCxcIjAraVwiLDBdLFxuXHRcdFx0XHRbMCxcIjAraVwiLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiaVNXUFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIklTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwiLTEqcGlcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGlcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjMqcGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCIwXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpXCIsIHBoaTogXCJwaS80XCIsIGxhbWJkYTogXCItMSpwaS80XCIgfSwgd2lyZXM6IFsxXX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjMqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIzKnBpLzJcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaVwiLCBwaGk6IFwicGkvNFwiLCBsYW1iZGE6IFwiLTEqcGkvNFwiIH0sIHdpcmVzOiBbMV19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJpc3dhcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eHk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlhZIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwgMCwgMCwgMF0sXG5cdFx0XHRcdFswLCBcImNvcyhwaGkgLyAyKVwiLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgXCJjb3MocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCAwLCAwLCAxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhZXCIsXG5cdFx0XHRcdFx0XCJwYXJhbXNcIjogW1xuXHRcdFx0XHRcdFx0XCJwaGlcIlxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIjMqcGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGhpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN6XCIsIHdpcmVzOiBbMSwgMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTMqcGkvNFwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3pcIiwgd2lyZXM6IFsxLCAwXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzRcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwieHlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgbnAuY29zKHBfcGhpLzIpLCAxaipucC5zaW4ocF9waGkvMiksIDBdLCBbMCwgMWoqbnAuc2luKHBfcGhpLzIpLCBucC5jb3MocF9waGkvMiksIDBdLCBbMCwgMCwgMCwgMV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieHlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLCAwLCAwLCAwXSxbMCwgXCJjb3MocGhpIC8gMilcIiwgXCJpICogc2luKHBoaSAvIDIpXCIsIDBdLFswLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgXCJjb3MocGhpIC8gMilcIiwgMF0sWzAsIDAsIDAsIDFdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgbnAuY29zKHBfcGhpLzIpLCAxaipucC5zaW4ocF9waGkvMiksIDBdLCBbMCwgMWoqbnAuc2luKHBfcGhpLzIpLCBucC5jb3MocF9waGkvMiksIDBdLCBbMCwgMCwgMCwgMV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBOT1QgKENOT1QpIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDFdLFxuXHRcdFx0XHRbMCwwLDEsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhcIixcblx0XHRcdFx0cm9vdDogXCJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDTk9UXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWROb3RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFkgZ2F0ZSAoY29udHJvbGxlZCByb3RhdGlvbiBvdmVyIFktYXhpcyBieSBQSSlcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLFwiLWlcIl0sXG5cdFx0XHRcdFswLDAsXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllcIixcblx0XHRcdFx0cm9vdDogXCJ5XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGF1bGlZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInlcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjeVwiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjeTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIDAsIC1pXFxuICAgIDAsIDAsIGksIDBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwwLC0xal0sWzAsMCwxaiwwXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3o6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgWiBnYXRlIChjb250cm9sbGVkIHJvdGF0aW9uIG92ZXIgWi1heGlzIGJ5IFBJKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJkb3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlpcIixcblx0XHRcdFx0cm9vdDogXCJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlRmxpcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NJR05cIlxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y2g6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgSGFkYW1hcmQgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIjEgLyBzcXJ0KDIpXCJdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIi0xIC8gc3FydCgyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiSFwiLFxuXHRcdFx0XHRyb290OiBcImhcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIjEvc3FydCgyKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImhcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjaFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY2g6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIDAuNzA3MTA2NzgxMTg2NTQ3NVxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIC0wLjcwNzEwNjc4MTE4NjU0NzVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNoXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwxL25wLnNxcnQoMiksMS9ucC5zcXJ0KDIpXSxbMCwwLDEvbnAuc3FydCgyKSwtMS9ucC5zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgSFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEvbnAuc3FydCgyKSwxL25wLnNxcnQoMildLFswLDAsMS9ucC5zcXJ0KDIpLC0xL25wLnNxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzcm46IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgc3F1YXJlIHJvb3Qgb2YgTk9UXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFswLDAsXCIwLjUtMC41aVwiLFwiMC41KzAuNWlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiLFxuXHRcdFx0XHRyb290OiBcInNyblwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiLTEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCItMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3JuXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNzcm46XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMCwgMCwgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3hcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCxcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXSxbMCwwLFwiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG1zOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJNw7hsbWVyLVPDuHJlbnNlbiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcIi1pKnNpbih0aGV0YSlcIl0sXG5cblx0XHRcdFx0WzAsIFwiY29zKHRoZXRhKVwiLCBcIi1pKnNpbih0aGV0YSlcIiwgMF0sXG5cblx0XHRcdFx0WzAsIFwiLWkqc2luKHRoZXRhKVwiLCBcImNvcyh0aGV0YSlcIiwgMF0sXG5cblx0XHRcdFx0W1wiLWkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiY2lyY2xlXCIsXCJjaXJjbGVcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgbXMoJXRoZXRhKTpcXG4gICAgQ09TKCV0aGV0YSksIDAsIDAsIC1pKlNJTigldGhldGEpXFxuICAgIDAsIENPUygldGhldGEpLCAtaSpTSU4oJXRoZXRhKSwgMFxcbiAgICAwLCAtaSpTSU4oJXRoZXRhKSwgQ09TKCV0aGV0YSksIDBcXG4gICAgLWkqU0lOKCV0aGV0YSksIDAsIDAsIENPUygldGhldGEpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJtc1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbcXVpbF9jb3MocF90aGV0YSksIDAsIDAsIC0xaipxdWlsX3NpbihwX3RoZXRhKV0sIFswLCBxdWlsX2NvcyhwX3RoZXRhKSwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipxdWlsX3NpbihwX3RoZXRhKSwgcXVpbF9jb3MocF90aGV0YSksIDBdLCBbLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwLCAwLCBxdWlsX2NvcyhwX3RoZXRhKV0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeHhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ4eFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1tucC5jb3MocF90aGV0YSksIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSldLCBbMCwgbnAuY29zKHBfdGhldGEpLCAtMWoqbnAuc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipucC5zaW4ocF90aGV0YSksIG5wLmNvcyhwX3RoZXRhKSwgMF0sIFstMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1tcImNvcyh0aGV0YSlcIiwgMCwgMCwgXCItaSpzaW4odGhldGEpXCJdLFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFtcIi1pKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhKSwgMCwgMCwgLTFqKm5wLnNpbihwX3RoZXRhKV0sIFswLCBucC5jb3MocF90aGV0YSksIC0xaipucC5zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKm5wLnNpbihwX3RoZXRhKSwgbnAuY29zKHBfdGhldGEpLCAwXSwgWy0xaipucC5zaW4ocF90aGV0YSksIDAsIDAsIG5wLmNvcyhwX3RoZXRhKV0gXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0XG5cdFx0eXk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIllZIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEpXCIsIDAsIDAsIFwiaSpzaW4odGhldGEpXCJdLFxuXG5cdFx0XHRcdFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFtcImkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiY2lyY2xlXCIsXCJjaXJjbGVcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInl5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgeXkoJXRoZXRhKTpcXG4gICAgQ09TKCV0aGV0YSksIDAsIDAsIGkqU0lOKCV0aGV0YSlcXG4gICAgMCwgQ09TKCV0aGV0YSksIC1pKlNJTigldGhldGEpLCAwXFxuICAgIDAsIC1pKlNJTigldGhldGEpLCBDT1MoJXRoZXRhKSwgMFxcbiAgICBpKlNJTigldGhldGEpLCAwLCAwLCBDT1MoJXRoZXRhKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5eVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbcXVpbF9jb3MocF90aGV0YSksIDAsIDAsIDFqKnF1aWxfc2luKHBfdGhldGEpXSwgWzAsIHF1aWxfY29zKHBfdGhldGEpLCAtMWoqcXVpbF9zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCBxdWlsX2NvcyhwX3RoZXRhKSwgMF0sIFsxaipxdWlsX3NpbihwX3RoZXRhKSwgMCwgMCwgcXVpbF9jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHQvL0BUT0RPIGFkZCBmdW5jdGlvblxuXHRcdFx0XHRcdGZ1bmM6IFwiVE9ET1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcImkqc2luKHRoZXRhKVwiXSxbMCwgXCJjb3ModGhldGEpXCIsIFwiLWkqc2luKHRoZXRhKVwiLCAwXSxbMCwgXCItaSpzaW4odGhldGEpXCIsIFwiY29zKHRoZXRhKVwiLCAwXSxbXCJpKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhKSwgMCwgMCwgMWoqbnAuc2luKHBfdGhldGEpXSwgWzAsIG5wLmNvcyhwX3RoZXRhKSwgLTFqKm5wLnNpbihwX3RoZXRhKSwgMF0sIFswLCAtMWoqbnAuc2luKHBfdGhldGEpLCBucC5jb3MocF90aGV0YSksIDBdLCBbMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5eVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnl5XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR6ejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGFyYW1ldHJpYyAyLXF1Yml0IHJvdGF0aW9uIGFib3V0IFpaXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyBcImV4cCgtaSAqIHRoZXRhIC8gMilcIiwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIFwiZXhwKGkgKiB0aGV0YSAvIDIpXCIsIDAsIDAgIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJleHAoaSAqIHRoZXRhIC8gMilcIiwgMCAgXSxcblx0XHRcdFx0WyAwLCAwLCAwLCBcImV4cCgtaSAqIHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImNpcmNsZVwiLFwiY2lyY2xlXCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaWlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ6elwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHp6KCV0aGV0YSk6XFxuICAgIEVYUCgtaSAqICV0aGV0YSAvIDIpLCAwLCAwLCAwXFxuICAgIDAsIEVYUChpICogJXRoZXRhIC8gMiksIDAsIDBcXG4gICAgMCwgMCwgRVhQKGkgKiAldGhldGEgLyAyKSwgMFxcbiAgICAwLCAwLCAwLCBFWFAoLWkgKiAldGhldGEgLyAyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwienpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIlsgWyBxdWlsX2V4cCgtMWogKiBwX3RoZXRhIC8gMiksIDAsIDAsIDAgXSwgWyAwLCBxdWlsX2V4cCgxaiAqIHBfdGhldGEgLyAyKSwgMCwgMF0sIFsgMCwgMCwgcXVpbF9leHAoMWogKiBwX3RoZXRhIC8gMiksIDAgXSwgWyAwLCAwLCAwLCBxdWlsX2V4cCgtMWogKiBwX3RoZXRhIC8gMikgXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwicnp6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyenpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyMjoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzJcIixcblx0XHRcdFx0cm9vdDogXCJyMlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiTV9QSS8yXCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDIpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3I0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzQgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvNFwiLFxuXHRcdFx0XHRyb290OiBcInI0XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS80XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDQpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3I4OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzggcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gOClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvOFwiLFxuXHRcdFx0XHRyb290OiBcInI4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzhcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvOFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7ihZtcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMCwgMCwgMF0sIFswLCAxLCAwLCAwXSwgWzAsIDAsIDEsIDBdLCBbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA4KV0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEsMF0sWzAsMCwwLFwiZXhwKGkgKiBwaSAvIDgpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaiAqIG5wLnBpIC8gOCldIF1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhcm91bmQgdGhlIFgtYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YSAvIDIpXCIsIFwiLWkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCItaSAqIHNpbih0aGV0YSAvIDIpXCIsIFwiY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWFwiLFxuXHRcdFx0XHRyb290OiBcInJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNyeCgldGhldGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLWkqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCAtaSpTSU4oJXRoZXRhLzIpLCBDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInJ4XCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHsgdGhldGE6IFwidGhldGFcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCIsXG5cdFx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3J4XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWyAxLCAwLCAwLCAwIF0sIFsgMCwgMSwgMCwgMCBdLCBbIDAsIDAsIHF1aWxfY29zKHBfdGhldGEgLyAyKSwgLTFqKnF1aWxfc2luKHBfdGhldGEgLyAyKSBdLCBbIDAsIDAsIC0xaipxdWlsX3NpbihwX3RoZXRhIC8gMiksIHF1aWxfY29zKHBfdGhldGEgLyAyKSBdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIjBcIiwgXCItc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCIwXCIsIFwiLXNpbih0aGV0YS8yKVwiXSwgW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBSeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGkvMlwiIH19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGkvMlwiIH19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLCBbIDAsIDEsIDAsIDAgXSwgWyAwLCAwLCBucC5jb3MocF90aGV0YSAvIDIpLCAtMWoqbnAuc2luKHBfdGhldGEgLyAyKSBdLCBbIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSAvIDIpLCBucC5jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyeToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhcm91bmQgdGhlIFktYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YSAvIDIpXCIsIFwiLTEgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUllcIixcblx0XHRcdFx0cm9vdDogXCJyeVwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjcnkoJXRoZXRhKTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIENPUygldGhldGEvMiksIC0xKlNJTigldGhldGEvMilcXG4gICAgMCwgMCwgU0lOKCV0aGV0YS8yKSwgQ09TKCV0aGV0YS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJyeVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhXCIgfSxcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgcXVpbF9jb3MocF90aGV0YSAvIDIpLCAtMSpxdWlsX3NpbihwX3RoZXRhIC8gMikgXSxbIDAsIDAsIHF1aWxfc2luKHBfdGhldGEgLyAyKSwgcXVpbF9jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXSwgW1wiLXNpbih0aGV0YS8yKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcInNpbih0aGV0YS8yKVwiLCBcIjBcIl0sIFtcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgUnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCItMSp0aGV0YSAvIDJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCItMSp0aGV0YSAvIDJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbIDEsIDAsIDAsIDAgXSxbIDAsIDEsIDAsIDAgXSxbIDAsIDAsIG5wLmNvcyhwX3RoZXRhIC8gMiksIC0xKm5wLnNpbihwX3RoZXRhIC8gMikgXSxbIDAsIDAsIG5wLnNpbihwX3RoZXRhIC8gMiksIG5wLmNvcyhwX3RoZXRhIC8gMikgXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3J6OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFyb3VuZCB0aGUgWi1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLCAwLCBcImNvcyhwaGkgLyAyKSAtIGkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCAwLCAwLCBcImNvcyhwaGkgLyAyKSArIGkgKiBzaW4ocGhpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiZG90XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWlwiLFxuXHRcdFx0XHRyb290OiBcInJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyelwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjcnooJXBoaSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCBDT1MoJXBoaSAvIDIpIC0gaSAqIFNJTiglcGhpIC8gMiksIDBcXG4gICAgMCwgMCwgMCwgQ09TKCVwaGkgLyAyKSArIGkgKiBTSU4oJXBoaSAvIDIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCBxdWlsX2NvcyhwX3BoaSAvIDIpIC0gMWogKiBxdWlsX3NpbihwX3BoaSAvIDIpLCAwXSwgWzAsIDAsIDAsIHF1aWxfY29zKHBfcGhpIC8gMikgKyAxaiAqIHF1aWxfc2luKHBfcGhpIC8gMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJyelwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7IHBoaTogXCJwaGlcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUm90YXRlWlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgbnAuY29zKHBfcGhpIC8gMikgLSAxaiAqIG5wLnNpbihwX3BoaSAvIDIpLCAwXSwgWzAsIDAsIDAsIG5wLmNvcyhwX3BoaSAvIDIpICsgMWogKiBucC5zaW4ocF9waGkgLyAyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN1MToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhYm91dCB0aGUgWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBsYW1iZGEpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiQ1UxXCIsXG5cdFx0XHRcdHJvb3Q6IFwidTFcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1BIQVNFXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWoqcF9sYW1iZGEpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaipwX2xhbWJkYSldXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJQSFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3UyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFib3V0IHRoZSBYK1ogYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcIjEgLyBzcXJ0KDIpXCIsIFwiLWV4cChpICogbGFtYmRhKSAqIDEgLyBzcXJ0KDIpXCIgXSxcblx0XHRcdFx0WyAwLCAwLCBcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNVMlwiLFxuXHRcdFx0XHRyb290OiBcInUyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjdTIoJXBoaSwgJWxhbWJkYSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAxL1NRUlQoMiksIC0xKkVYUChpKiVsYW1iZGEpKjEvU1FSVCgyKVxcbiAgICAwLCAwLCBFWFAoaSolcGhpKSoxL1NRUlQoMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKjEvU1FSVCgyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvcXVpbF9zcXJ0KDIpLCAtcXVpbF9leHAoMWoqcF9sYW1iZGEpKjEvcXVpbF9zcXJ0KDIpXSxbMCwgMCwgcXVpbF9leHAoMWoqcF9waGkpKjEvcXVpbF9zcXJ0KDIpLCBxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9xdWlsX3NxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdG1hdHJpeDogW1tbXCIxL3NxcnQoMilcIiwgXCIwXCJdLCBbXCItY29zKGxhbWJkYSkvc3FydCgyKVwiLCBcIi1zaW4obGFtYmRhKS9zcXJ0KDIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKS9zcXJ0KDIpXCIsIFwic2luKHBoaSkvc3FydCgyKVwiXSwgW1wiY29zKGxhbWJkYStwaGkpL3NxcnQoMilcIiwgXCJzaW4obGFtYmRhK3BoaSkvc3FydCgyKVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiIF0sWyAwLCAwLCBcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIgXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSxbMCwgMCwgbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN1Mzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBnYXRlIHdpdGggMyBFdWxlciBhbmdsZXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbIDEsIDAsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAxLCAwLCAwIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFxuXHRcdFx0XHRbIDAsIDAsIFwiZXhwKGkgKiBwaGkpICogc2luKHRoZXRhIC8gMilcIiwgXCJleHAoaSAqIGxhbWJkYSArIGkgKiBwaGkpICogY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNVM1wiLFxuXHRcdFx0XHRyb290OiBcInUzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGN1MygldGhldGEsICVwaGksICVsYW1iZGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLTEqRVhQKGkqJWxhbWJkYSkqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCBFWFAoaSolcGhpKSpTSU4oJXRoZXRhLzIpLCBFWFAoaSolbGFtYmRhICsgaSolcGhpKSpDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBxdWlsX2NvcyhwX3RoZXRhLzIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqcXVpbF9zaW4ocF90aGV0YS8yKV0sWzAsIDAsIHF1aWxfZXhwKDFqKnBfcGhpKSpxdWlsX3NpbihwX3RoZXRhLzIpLHF1aWxfZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpxdWlsX2NvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKSpzaW4odGhldGEvMilcIiwgXCItc2luKGxhbWJkYSkqc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKSpzaW4odGhldGEvMilcIiwgXCJzaW4ocGhpKSpzaW4odGhldGEvMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIiwgXCJzaW4obGFtYmRhK3BoaSkqY29zKHRoZXRhLzIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgbnAuY29zKHBfdGhldGEvMiksLW5wLmV4cCgxaipwX2xhbWJkYSkqbnAuc2luKHBfdGhldGEvMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKm5wLnNpbihwX3RoZXRhLzIpLG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFsgMCwgMCwgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjczoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgY3IyYClcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNcIixcblx0XHRcdFx0cm9vdDogXCJzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS8yXCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEsIDBdLFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDIpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3Q6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpcyAoc3lub255bSBmb3IgYGNyNGApXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJUXCIsXG5cdFx0XHRcdHJvb3Q6IFwidFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiTV9QSS80XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpewrxcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxLCAwXSxbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA0KV1dXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgKC1QSS8yKSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cCgtaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlMmIzgyMjQ7XCIsXG5cdFx0XHRcdHJvb3Q6IFwic2RnXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIi1NX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcIi0xKnBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpeLcK9XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgtMWogKiBucC5waSAvIDIpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN0ZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgKC1QSS80KSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cCgtaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlQmIzgyMjQ7XCIsXG5cdFx0XHRcdHJvb3Q6IFwidGRnXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIi1NX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcIi0xKnBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpeLcK8XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgtMWogKiBucC5waSAvIDQpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiVG9mZm9saSBha2EgXFxcIkNDTk9UXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDEsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDEsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDAsMV0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwxLDBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNDTk9UXCIsXG5cdFx0XHRcdHJvb3Q6IFwieFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDQ05PVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDWFwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY2N4XCIsXG5cdFx0XHRcdFx0ZnVuYzogXCJ2b2lkIGNjeChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyLCBjb25zdCBpbnQgcTMpIHtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTMsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTMsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTEpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTIsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDQ05PVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDTk9UXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjc3dhcDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBzd2FwIGFrYSBcXFwiRnJlZGtpblxcXCIgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcInhcIixcInhcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNXUFwiLFxuXHRcdFx0XHRyb290OiBcInN3YXBcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N3YXBcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgY3N3YXAoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcTEsIGNvbnN0IGludCBxMiwgY29uc3QgaW50IHEzKSB7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMywgcTIpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBoYWRhbWFyZChxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGhhZGFtYXJkKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMiwgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTMsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU3dhcFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLCBbMCwxLDAsMCwwLDAsMCwwXSwgWzAsMCwxLDAsMCwwLDAsMF0sIFswLDAsMCwxLDAsMCwwLDBdLCBbMCwwLDAsMCwxLDAsMCwwXSwgWzAsMCwwLDAsMCwwLDEsMF0sIFswLDAsMCwwLDAsMSwwLDBdLCBbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjc3Jzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHNxdWFyZSByb290IG9mIHN3YXBcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMSwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsXCIwLjUgKiAoMSArIGkpXCIsXCIwLjUgKiAoMSAtIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsXCIwLjUgKiAoMSAtIGkpXCIsXCIwLjUgKiAoMSArIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwwLDFdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7U1dQXCIsXG5cdFx0XHRcdHJvb3Q6IFwic3Jzd2FwXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3Jzd2FwXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcImNvbnRyb2xsZWRcIixcblx0XHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3Nyc3dhcFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY3Nyc3dhcDpcXG4gICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwXFxuICAgIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDBcXG4gICAgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMFxcbiAgICAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwXFxuICAgIDAsIDAsIDAsIDAsIDAsIDAuNSswLjVpLCAwLjUtMC41aSwgMFxcbiAgICAwLCAwLCAwLCAwLCAwLCAwLjUtMC41aSwgMC41KzAuNWksIDBcXG4gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3Nyc3dhcFwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMCwwLDAsMCwwXSxbMCwxLDAsMCwwLDAsMCwwXSxbMCwwLDEsMCwwLDAsMCwwXSxbMCwwLDAsMSwwLDAsMCwwXSxbMCwwLDAsMCwxLDAsMCwwXSxbMCwwLDAsMCwwLDAuNSAqICgxICsgMWopLDAuNSAqICgxIC0gMWopLDBdLFswLDAsMCwwLDAsMC41ICogKDEgLSAxaiksMC41ICogKDEgKyAxaiksMF0sWzAsMCwwLDAsMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLFswLDEsMCwwLDAsMCwwLDBdLFswLDAsMSwwLDAsMCwwLDBdLFswLDAsMCwxLDAsMCwwLDBdLFswLDAsMCwwLDEsMCwwLDBdLFswLDAsMCwwLDAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMCwwLDAsMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1FSVFNXQVBcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cmVzZXQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJlc2V0cyBxdWJpdFwiLFxuXHRcdFx0bWF0cml4OiBbXSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJTVFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSRVNFVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJlc2V0XCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyZXNldFwiLFxuXHRcdFx0XHRcdC8vQFRPRE8gYWRkIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZnVuYzogXCJUT0RPXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSZXNldFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bWVhc3VyZToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiTWVhc3VyZXMgcXViaXQgYW5kIHN0b3JlcyBjaGFuY2UgKDAgb3IgMSkgaW50byBjbGFzc2ljYWwgYml0XCIsXG5cdFx0XHRtYXRyaXg6IFtdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImdhdWdlXCJdLFxuXHRcdFx0XHRsYWJlbDogXCJcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiTUVBU1VSRVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1lYXN1cmVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwibWVhc3VyZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiTVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpcy5pbml0KG51bVF1Yml0cyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVmYXVsdEh5YnJpZE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHtcblx0XHRvcHRpbWl6ZXI6IFwiUG93ZWxsXCIsXG5cdFx0dG9sZXJhbmNlOiAwLjAwMSxcblx0XHRjb3N0RnVuY3Rpb246IHtcblx0XHRcdHB5dGhvbjogXCJcIixcblx0XHRcdGphdmFzY3JpcHQ6IFwiXCJcblx0XHR9XG5cdH07XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG51bVF1Yml0cywgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR0aGlzLm51bVF1Yml0cyA9IG51bVF1Yml0cyB8fCAxO1xuXHR0aGlzLmdhdGVzID0gW107XG5cdHRoaXMucGFydGl0aW9uTWFwID0gW107XG5cdHRoaXMucGFydGl0aW9uQ291bnQgPSAwO1xuXHR0aGlzLnBhcnRpdGlvbkluZm8gPSB7fTtcblxuXHR0aGlzLnBhcmFtcyA9IFtdO1xuXHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0cGFyYW1zOiB7fSxcblxuXHRcdGh5YnJpZDogZmFsc2UsXG5cdFx0aHlicmlkT3B0aW9uczogdGhpcy5kZWZhdWx0SHlicmlkT3B0aW9ucygpXG5cdH07XG5cblx0aWYoIW9wdGlvbnMua2VlcEN1c3RvbUdhdGVzKSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlcyA9IHt9O1xuXHR9XG5cblx0dGhpcy5jcmVncyA9IHt9O1xuXHR0aGlzLmNvbGxhcHNlZCA9IFtdO1xuXHR0aGlzLnByb2IgPSBbXTtcblx0dGhpcy5tZWFzdXJlUmVzZXRzUXViaXQgPSBmYWxzZTtcblx0dGhpcy5yZXZlcnNlQml0T3JkZXIgPSBmYWxzZTtcblxuXHR0aGlzLmNsZWFyKCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY2xlYXJHYXRlcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmdhdGVzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuY2xlYXJHYXRlcygpO1xuXHR0aGlzLmluaXRTdGF0ZSgpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzZXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuXHQvLyByZXNldCBzdGF0ZVxuXHR0aGlzLnN0YXRlID0ge307XG5cdHRoaXMuc3RhdGVCaXRzID0gMDtcblx0dGhpcy5wYXJ0aXRpb25DYWNoZSA9IHt9O1xuXG5cdC8vIHJlc2V0IGNyZWdzXG5cdGZvcih2YXIgY3JlZyBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDA7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0dGhpcy5jcmVnc1tjcmVnXS5wdXNoKDApO1xuXHRcdH1cblx0fVxuXG5cdC8vIHJlc2V0IG1lYXN1cmVtZW50XG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXG5cdC8vIHJlc2V0IHN0YXRpc3RpY3Ncblx0dGhpcy5zdGF0cyA9IHtcblx0XHRkdXJhdGlvbjogMFxuXHR9O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluaXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0dGhpcy5zdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZm9ybWF0Q29tcGxleCA9IGZ1bmN0aW9uKGNvbXBsZXgsIG9wdGlvbnMpIHtcblx0cmV0dXJuIGZvcm1hdENvbXBsZXgyKGNvbXBsZXgucmUsIGNvbXBsZXguaW0sIG9wdGlvbnMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm11bHRpcGx5U3F1YXJlTWF0cmljZXMgPSBmdW5jdGlvbihtMSwgbTIpIHtcblx0dmFyIGxlbiA9IG0xLmxlbmd0aDtcblxuXHR2YXIgYyA9IGxlbjtcblx0dmFyIGQgPSBsZW47XG5cdHZhciBrID0gbGVuO1xuXG5cdHZhciByZXMgPSBbXTtcblx0d2hpbGUoYy0tKSB7XG5cdFx0cmVzW2NdID0gW107XG5cdFx0ZCA9IGxlbjtcblx0XHR3aGlsZShkLS0pIHtcblx0XHRcdHJlc1tjXVtkXSA9IDA7XG5cdFx0XHRrID0gbGVuO1xuXHRcdFx0d2hpbGUoay0tKSB7XG5cdFx0XHRcdGlmKG0xW2NdW2tdICYmIG0yW2tdW2RdKSB7XG5cdFx0XHRcdFx0aWYocmVzW2NdW2RdKSB7XG5cdFx0XHRcdFx0XHRyZXNbY11bZF0gPSBtYXRoLmFkZChyZXNbY11bZF0sIG1hdGgubXVsdGlwbHkobTFbY11ba10sIG0yW2tdW2RdKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc1tjXVtkXSA9IG1hdGgubXVsdGlwbHkobTFbY11ba10sIG0yW2tdW2RdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0lkZW50aXR5TWF0cml4ID0gZnVuY3Rpb24obSwgcHJlY2lzaW9uKSB7XG5cdGlmKHR5cGVvZiBwcmVjaXNpb24gPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHByZWNpc2lvbiA9IDE0O1xuXHR9XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbS5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYobWF0aC5yb3VuZChtW2ldW2pdLCBwcmVjaXNpb24pICE9IChpID09IGogPyAxIDogMCkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzVW5pdGFyeU1hdHJpeCA9IGZ1bmN0aW9uKFUsIHByZWNpc2lvbikge1xuXHRyZXR1cm4gdGhpcy5pc0lkZW50aXR5TWF0cml4KG1hdGgubXVsdGlwbHkoVSwgbWF0aC5jdHJhbnNwb3NlKFUpKSwgcHJlY2lzaW9uKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzSGVybWl0aWFuTWF0cml4ID0gZnVuY3Rpb24oSCwgcHJlY2lzaW9uKSB7XG5cdHZhciBkaWZmID0gdGhpcy5tYXRyaXhEaWZmKEgsIG1hdGguY3RyYW5zcG9zZShIKSlcblxuXHRyZXR1cm4gZGlmZiA8PSBtYXRoLnBvdygxMCwgLTEgKiAocHJlY2lzaW9uIHx8IDE0KSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhEaWZmID0gZnVuY3Rpb24obWF0cml4MSwgbWF0cml4Mikge1xuXHR2YXIgdG90YWwgPSAwO1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgbWF0cml4MS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cxID0gbWF0cml4MVtyXTtcblx0XHR2YXIgcm93MiA9IG1hdHJpeDJbcl07XG5cdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdzEubGVuZ3RoOyBjKyspIHtcblx0XHRcdHZhciBpdGVtMSA9IHJvdzFbY107XG5cdFx0XHR2YXIgaXRlbTIgPSByb3cyW2NdO1xuXG5cdFx0XHR2YXIgaTEgPSAodHlwZW9mIGl0ZW0xID09IFwib2JqZWN0XCIpID8gaXRlbTEgOiBtYXRoLmNvbXBsZXgoaXRlbTEpO1xuXHRcdFx0dmFyIGkyID0gKHR5cGVvZiBpdGVtMiA9PSBcIm9iamVjdFwiKSA/IGl0ZW0yIDogbWF0aC5jb21wbGV4KGl0ZW0yKTtcblxuXHRcdFx0Ly8gZGlzdGFuY2UgaW4gdGhlIGNvbXBsZXggcGxhbmVcblx0XHRcdHZhciBkaXN0YW5jZSA9IG1hdGguYWJzKG1hdGguc3VidHJhY3QoaTEsIGkyKSk7XG5cblx0XHRcdHRvdGFsICs9IGRpc3RhbmNlO1xuXG5cdFx0XHRjb3VudCsrO1xuXHRcdH1cblx0fVxuXG5cdHZhciBkaWZmID0gY291bnQgPyAodG90YWwgLyBjb3VudCkgOiAwO1xuXG5cdHJldHVybiBkaWZmO1xufTtcblxuXG4vL1xuLy8gRXh0cmFjdCB2YXJpYWJsZXMgZnJvbSBleHByZXNzaW9uIHN0cmluZyBhbmQgcmV0dXJucyBvYmplY3Qgd2l0aCBleHByZXNzaW9uIHN0cmluZyBhbmQgYXJyYXkgb2YgdmFyaWFibGUgbmFtZXNcbi8vIE5vdGUgdGhhdCBzeW1ib2wgXCJqXCIgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gXCJpXCIgKGltYWdpbmFyeSB1bml0IHVzZWQgaW4gcHl0aG9uIGlzIFwialwiIGJ1dCB3ZSBuZWVkIFwiaVwiKVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wYXJzZU1hdGhTdHJpbmcgPSBmdW5jdGlvbihzdHIpIHtcblx0dmFyIHZhcmlhYmxlcyA9IFtdO1xuXG5cdC8vIGNvbnZlcnQgaW1hZ2luYXJ5IHVuaXQgXCJqXCIgdG8gXCJpXCJcblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdGlmKG5vZGUubmFtZSA9PSBcImpcIikge1xuXHRcdFx0XHRyZXR1cm4gXCJpXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHZhcmlhYmxlcy5pbmRleE9mKG5vZGUubmFtZSkgPCAwKSB7XG5cdFx0XHRcdHZhcmlhYmxlcy5wdXNoKG5vZGUubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBub2RlID0gbWF0aC5wYXJzZShzdHIucmVwbGFjZSgvW1xcdFxcblxccl0vZ20sIFwiXCIpKTtcblxuXHR2YXIgZXhwcmVzc2lvbiA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhwcmVzc2lvbjogZXhwcmVzc2lvbixcblx0XHR2YXJpYWJsZXM6IHZhcmlhYmxlcyxcblx0XHRub2RlOiBub2RlXG5cdH07XG59O1xuXG4vL1xuLy8gRXZhbHVhdGUgZXhwcmVzc2lvblxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ldmFsTWF0aFN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgdmFycykge1xuXHR2YXJzID0gdmFycyB8fCB7fTtcblxuXHR2YXIgcGFyc2VkID0gdGhpcy5wYXJzZU1hdGhTdHJpbmcoc3RyKTtcblxuXHR2YXIgcmVzID0gbWF0aC5ldmFsdWF0ZShwYXJzZWQuZXhwcmVzc2lvbiwgdmFycyk7XG5cdGlmKHJlcyBpbnN0YW5jZW9mIG1hdGguTWF0cml4KSB7XG5cdFx0cmV0dXJuIHJlcy50b0FycmF5KCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnNlTWF0cml4ID0gZnVuY3Rpb24oTSwgdmFycykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIEEgPSBudWxsO1xuXHRpZih0eXBlb2YgTSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0QSA9IHNlbGYuZXZhbE1hdGhTdHJpbmcoTSwgdmFycyk7XG5cdH0gZWxzZSB7XG5cdFx0QSA9IE07XG5cdH1cblxuXHR2YXIgcmVzID0gW107XG5cblx0QS5tYXAoZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0cmVzLnB1c2goW10pO1xuXHRcdFx0cm93Lm1hcChmdW5jdGlvbih2YWwsIGNvbEluZGV4KSB7XG5cdFx0XHRcdGlmKHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHJlc1tyb3dJbmRleF0ucHVzaChzZWxmLmV2YWxNYXRoU3RyaW5nKHZhbCwgdmFycykpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc1tyb3dJbmRleF0ucHVzaCh2YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYodHlwZW9mIHJvdyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHJlcy5wdXNoKHNlbGYuZXZhbE1hdGhTdHJpbmcocm93LCB2YXJzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXMucHVzaChyb3cpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhIYXNDb21wbGV4RWxlbWVudCA9IGZ1bmN0aW9uKE0pIHtcblx0Zm9yKHZhciByID0gMDsgciA8IE0ubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gTVtyXTtcblxuXHRcdGlmKHJvdyBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdHZhciBjZWxsID0gcm93W2NdO1xuXG5cdFx0XHRcdGlmKGNlbGwgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZihyb3cgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblxuLy9cbi8vIE9wdGlvbnM6IHtcbi8vICAgICBtaW5pZnk6ICAgICAgICAgZmFsc2Vcbi8vXHQgICBmaXhlZFdpZHRoOiAgICAgZmFsc2Vcbi8vICAgICBkZWNpbWFsUGxhY2VzOiAgMTQsXG4vLyAgICAgaW90YUNoYXI6ICAgICAgIFwiaVwiXG4vLyB9XG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnN0cmluZ2lmeU1hdHJpeCA9IGZ1bmN0aW9uKE0sIG9wdGlvbnMpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdC8vIG1hdGhqcyBNYXRyaXggdG8gYXJyYXlcblx0dmFyIEEgPSBNLnRvQXJyYXkgPyBNLnRvQXJyYXkoKSA6IE07XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGZvcmNlQ29tcGxleCA9IGZhbHNlO1xuXHRpZihvcHRpb25zLmZpeGVkV2lkdGgpIHtcblx0XHQvLyBmb3JjZUNvbXBsZXggaWYgbWF0cml4IGhhcyBhdCBsZWFzdCBvbmUgY29tcGxleCBlbGVtZW50XG5cdFx0Zm9yY2VDb21wbGV4ID0gdGhpcy5tYXRyaXhIYXNDb21wbGV4RWxlbWVudChBKTtcblx0fVxuXG5cdHZhciBzdHIgPSBcIlwiO1xuXHRzdHIgKz0gXCJbXCI7XG5cdEEubWFwKGZ1bmN0aW9uKHJvdywgcm93SW5kZXgpIHtcblx0XHRpZihyb3dJbmRleCA+IDApIHtcblx0XHRcdHN0ciArPSBcIixcIjtcblx0XHR9XG5cdFx0aWYoIW9wdGlvbnMubWluaWZ5KSB7XG5cdFx0XHRzdHIgKz0gXCJcXG4gIFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHIgKz0gXCIgXCI7XG5cdFx0fVxuXG5cdFx0aWYocm93IGluc3RhbmNlb2YgQXJyYXkpIHtcblx0XHRcdHN0ciArPSBcIltcIjtcblx0XHRcdHJvdy5tYXAoZnVuY3Rpb24oZWwsIGVsSW5kZXgpIHtcblx0XHRcdFx0aWYoZWxJbmRleCA+IDApIHtcblx0XHRcdFx0XHRzdHIgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGVsIGluc3RhbmNlb2YgbWF0aC5Db21wbGV4KSB7XG5cdFx0XHRcdFx0c3RyICs9IHNlbGYuZm9ybWF0Q29tcGxleChlbCwgb3B0aW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYoKHR5cGVvZiBlbCA9PSBcIm9iamVjdFwiKSAmJiAoKGVsLm1hdGhqcyAmJiBlbC5tYXRoanMgPT0gXCJDb21wbGV4XCIpIHx8IChlbC50eXBlICYmIGVsLnR5cGUgPT0gXCJDb21wbGV4XCIpKSkge1xuXHRcdFx0XHRcdFx0c3RyICs9IGZvcm1hdENvbXBsZXgyKGVsLnJlLCBlbC5pbSwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKHR5cGVvZiBlbCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGV4cHJlc3Npb25cblx0XHRcdFx0XHRcdFx0c3RyICs9IGVsO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYoZm9yY2VDb21wbGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RyICs9IGZvcm1hdENvbXBsZXgyKGVsLCAwLCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0RmxvYXQoZWwsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHN0ciArPSBcIl1cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYocm93IGluc3RhbmNlb2YgbWF0aC5Db21wbGV4KSB7XG5cdFx0XHRcdHN0ciArPSBzZWxmLmZvcm1hdENvbXBsZXgocm93LCBvcHRpb25zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKCh0eXBlb2Ygcm93ID09IFwib2JqZWN0XCIpICYmICgocm93Lm1hdGhqcyAmJiByb3cubWF0aGpzID09IFwiQ29tcGxleFwiKSB8fCAocm93LnR5cGUgJiYgcm93LnR5cGUgPT0gXCJDb21wbGV4XCIpKSkge1xuXHRcdFx0XHRcdHN0ciArPSBmb3JtYXRDb21wbGV4MihlbC5yZSwgZWwuaW0sIG9wdGlvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmKHR5cGVvZiByb3cgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0Ly8gZXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0c3RyICs9IHJvdztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoZm9yY2VDb21wbGV4KSB7XG5cdFx0XHRcdFx0XHRcdHN0ciArPSBmb3JtYXRDb21wbGV4Mihyb3csIDAsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c3RyICs9IGZvcm1hdEZsb2F0KHJvdywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0aWYoQS5sZW5ndGgpIHtcblx0XHRpZighb3B0aW9ucy5taW5pZnkpIHtcblx0XHRcdHN0ciArPSBcIlxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHIgKz0gXCIgXCI7XG5cdFx0fVxuXHR9XG5cdHN0ciArPSBcIl1cIjtcblxuXHRyZXR1cm4gc3RyO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubWF0cml4UmUgPSBmdW5jdGlvbihVKSB7XG5cdHZhciByZXMgPSBbXTtcblx0Zm9yKHZhciByID0gMDsgciA8IFUubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gVVtyXTtcblx0XHRpZihBcnJheS5pc0FycmF5KHJvdykpIHtcblx0XHRcdHZhciBuZXdSb3cgPSBbXTtcblx0XHRcdGZvcih2YXIgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0aWYodHlwZW9mIHJvd1tjXSA9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0bmV3Um93LnB1c2gocm93W2NdLnJlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdSb3cucHVzaChyb3dbY10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXMucHVzaChuZXdSb3cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZih0eXBlb2Ygcm93ID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0bmV3Um93LnB1c2gocm93LnJlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1Jvdy5wdXNoKHJvdyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhJbSA9IGZ1bmN0aW9uKFUpIHtcblx0dmFyIHJlcyA9IFtdO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgVS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cgPSBVW3JdO1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0dmFyIG5ld1JvdyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdy5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRpZih0eXBlb2Ygcm93W2NdID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRuZXdSb3cucHVzaChyb3dbY10uaW0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1Jvdy5wdXNoKDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXMucHVzaChuZXdSb3cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZih0eXBlb2Ygcm93ID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0bmV3Um93LnB1c2gocm93LmltKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1Jvdy5wdXNoKDApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubWF0cml4QWJzID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgcmVzID0gW107XG5cdGZvcih2YXIgciA9IDA7IHIgPCBVLmxlbmd0aDsgcisrKSB7XG5cdFx0dmFyIHJvdyA9IFVbcl07XG5cdFx0aWYoQXJyYXkuaXNBcnJheShyb3cpKSB7XG5cdFx0XHR2YXIgbmV3Um93ID0gW107XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdG5ld1Jvdy5wdXNoKG1hdGguYWJzKHJvd1tjXSkpO1xuXHRcdFx0fVxuXHRcdFx0cmVzLnB1c2gobmV3Um93KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzLnB1c2gobWF0aC5hYnMocm93KSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhBcmcgPSBmdW5jdGlvbihVKSB7XG5cdHZhciByZXMgPSBbXTtcblx0Zm9yKHZhciByID0gMDsgciA8IFUubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gVVtyXTtcblx0XHRpZihBcnJheS5pc0FycmF5KHJvdykpIHtcblx0XHRcdHZhciBuZXdSb3cgPSBbXTtcblx0XHRcdGZvcih2YXIgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0bmV3Um93LnB1c2gobWF0aC5hcmcocm93W2NdKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXMucHVzaChuZXdSb3cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXMucHVzaChtYXRoLmFyZyhyb3cpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuXG4vL1xuLy8gY29tYmluZUxpc3QgaXMgYXJyYXkgb2Ygb2JqZWN0czpcbi8vXG4vLyB7XG4vLyAgICAgY2lyY3VpdDogPFF1YW50dW1DaXJjdWl0PlxuLy8gICAgIHdpcmVzOiBbMCwgMSwgMl0gLy8gYXJyYXkgb2YgZGVzdGluYXRpb24gcXViaXRzIChmb3IgZWFjaCB3aXJlIGluIGdpdmVuIGNpcmN1aXQpXG4vLyB9XG4vL1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc2V0Q29tYmluZWRTdGF0ZSA9IGZ1bmN0aW9uKGNvbWJpbmVMaXN0KSB7XG5cdHZhciBuZXdTdGF0ZSA9IHt9O1xuXHR2YXIgbmV3U3RhdGVCaXRzID0gMDtcblx0dmFyIHRvdGFsUXViaXRzID0gMDtcblx0Zm9yKHZhciBpdGVtSW5kZXggPSAwOyBpdGVtSW5kZXggPCBjb21iaW5lTGlzdC5sZW5ndGg7IGl0ZW1JbmRleCsrKSB7XG5cdFx0dmFyIGl0ZW0gPSBjb21iaW5lTGlzdFtpdGVtSW5kZXhdO1xuXHRcdC8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgcXViaXRzIGJhc2VkIG9uIHdpcmVNYXBcblx0XHRpdGVtLndpcmVzLm1hcChmdW5jdGlvbihkZXN0KSB7XG5cdFx0XHRpZihkZXN0ICsgMSA+IHRvdGFsUXViaXRzKSB7XG5cdFx0XHRcdHRvdGFsUXViaXRzID0gZGVzdCArIDE7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgYml0TWFwcyA9IFtdO1xuXHRmb3IodmFyIGl0ZW1JbmRleCA9IDA7IGl0ZW1JbmRleCA8IGNvbWJpbmVMaXN0Lmxlbmd0aDsgaXRlbUluZGV4KyspIHtcblx0XHR2YXIgaXRlbSA9IGNvbWJpbmVMaXN0W2l0ZW1JbmRleF07XG5cblx0XHR2YXIgY21hcCA9IFtdO1xuXHRcdGl0ZW0ud2lyZXMubWFwKGZ1bmN0aW9uKGRlc3QsIHNvdXJjZSkge1xuXHRcdFx0Y21hcC5wdXNoKHtcblx0XHRcdFx0YW5kOiAxIDw8ICgodG90YWxRdWJpdHMgLSAxKSAtIGRlc3QpLFxuXHRcdFx0XHRvcjogMSA8PCAoKGl0ZW0uY2lyY3VpdC5udW1RdWJpdHMgLSAxKSAtIHNvdXJjZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Yml0TWFwcy5wdXNoKGNtYXApO1xuXHR9XG5cblx0dmFyIG4zID0gMSA8PCB0b3RhbFF1Yml0cztcblx0Zm9yKHZhciBhMyA9IDA7IGEzIDwgbjM7IGEzKyspIHtcblx0XHR2YXIgczMgPSBudWxsO1xuXHRcdGZvcih2YXIgaXRlbUluZGV4ID0gMDsgaXRlbUluZGV4IDwgY29tYmluZUxpc3QubGVuZ3RoOyBpdGVtSW5kZXgrKykge1xuXHRcdFx0dmFyIG1hcCA9IGJpdE1hcHNbaXRlbUluZGV4XTtcblxuXHRcdFx0dmFyIGExID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoYTMgJiBtYXBbaV0uYW5kKSB7XG5cdFx0XHRcdFx0YTEgfD0gbWFwW2ldLm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHZhciBpdGVtID0gY29tYmluZUxpc3RbaXRlbUluZGV4XTtcblx0XHRcdHZhciBzMSA9IGl0ZW0uY2lyY3VpdC5zdGF0ZVthMV07XG5cdFx0XHRpZihzMSkge1xuXHRcdFx0XHRpZihzMyA9PSBudWxsKSB7XG5cdFx0XHRcdFx0czMgPSBzMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzMyA9IG1hdGgubXVsdGlwbHkoczEsIHMzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0czMgPSBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoczMgJiYgKHMzLnJlIHx8IHMzLmltKSkge1xuXHRcdFx0bmV3U3RhdGVbYTNdID0gczM7XG5cdFx0XHRuZXdTdGF0ZUJpdHMgfD0gYTM7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5yZXNldFN0YXRlKCk7XG5cdC8vIGV4cGFuZCBjaXJjdWl0IGlmIG5lZWRlZFxuXHRpZih0aGlzLm51bVF1Yml0cyA8IHRvdGFsUXViaXRzKSB7XG5cdFx0dGhpcy5udW1RdWJpdHMgPSB0b3RhbFF1Yml0cztcblxuXHRcdHdoaWxlKHRoaXMuZ2F0ZXMubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdHRoaXMuZ2F0ZXMucHVzaChbXSk7XG5cdFx0fVxuXG5cdFx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5nYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2hpbGUodGhpcy5nYXRlc1tpXS5sZW5ndGggPCBudW1Db2xzKSB7XG5cdFx0XHRcdHRoaXMuZ2F0ZXNbaV0ucHVzaChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG5cdHRoaXMuc3RhdGVCaXRzID0gbmV3U3RhdGVCaXRzO1xuXG5cdGlmKHRoaXMuc3RhdGVCaXRzID09IDAgJiYgT2JqZWN0LmtleXModGhpcy5zdGF0ZSkubGVuZ3RoID09IDApIHtcblx0XHR0aGlzLnN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcblx0fVxufTtcblxuLy9cbi8vIENvbWJpbmVzIHN0YXRlIHZlY3RvcnMgb2YgdHdvIGV2YWx1YXRlZCBjaXJjdWl0cyBhbmQgc3RvcmVzIHJlc3VsdGluZyB2ZWN0b3IgaW50byB0aGlzLlxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5fc2V0Q29tYmluZWRTdGF0ZSA9IGZ1bmN0aW9uKGMxLCBjMiwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgcTEgPSBjMS5udW1RdWJpdHM7XG5cdHZhciBxMiA9IGMyLm51bVF1Yml0cztcblxuXHQvLyBjcmVhdGUgd2lyZU1hcCBpZiBub3QgcHJvdmlkZWRcblx0aWYoIW9wdGlvbnMud2lyZU1hcCkge1xuXHRcdG9wdGlvbnMud2lyZU1hcCA9IHtcblx0XHRcdGMxOiBbXSxcblx0XHRcdGMyOiBbXVxuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBxMTsgaSsrKSB7XG5cdFx0XHRvcHRpb25zLndpcmVNYXAuYzEucHVzaChpKTtcblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcTI7IGkrKykge1xuXHRcdFx0b3B0aW9ucy53aXJlTWFwLmMyLnB1c2goaSArIHExKTtcblx0XHR9XG5cdH1cblxuXHQvLyBjYWxjdWxhdGUgbnVtYmVyIG9mIHF1Yml0cyBiYXNlZCBvbiB3aXJlTWFwXG5cdHZhciBxMyA9IDA7XG5cdG9wdGlvbnMud2lyZU1hcC5jMS5tYXAoZnVuY3Rpb24oZGVzdCkge1xuXHRcdGlmKGRlc3QgKyAxID4gcTMpIHtcblx0XHRcdHEzID0gZGVzdCArIDE7XG5cdFx0fVxuXHR9KTtcblx0b3B0aW9ucy53aXJlTWFwLmMyLm1hcChmdW5jdGlvbihkZXN0KSB7XG5cdFx0aWYoZGVzdCArIDEgPiBxMykge1xuXHRcdFx0cTMgPSBkZXN0ICsgMTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIGNyZWF0ZSBiaXQgbWFwIGZvciBjaXJjdWl0IDFcblx0dmFyIGMxbWFwID0gW107XG5cdG9wdGlvbnMud2lyZU1hcC5jMS5tYXAoZnVuY3Rpb24oZGVzdCwgc291cmNlKSB7XG5cdFx0YzFtYXAucHVzaCh7IGFuZDogMSA8PCAoKHEzIC0gMSkgLSBkZXN0KSwgb3I6IDEgPDwgKChxMSAtIDEpIC0gc291cmNlKSB9KTtcblx0fSk7XG5cblx0Ly8gY3JlYXRlIGJpdCBtYXAgZm9yIGNpcmN1aXQgMlxuXHR2YXIgYzJtYXAgPSBbXTtcblx0b3B0aW9ucy53aXJlTWFwLmMyLm1hcChmdW5jdGlvbihkZXN0LCBzb3VyY2UpIHtcblx0XHRjMm1hcC5wdXNoKHsgYW5kOiAxIDw8ICgocTMgLSAxKSAtIGRlc3QpLCBvcjogMSA8PCAoKHEyIC0gMSkgLSBzb3VyY2UpIH0pO1xuXHR9KTtcblxuXHR2YXIgdW51c2VkID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IHEzOyBpKyspIHtcblx0XHRpZihvcHRpb25zLndpcmVNYXAuYzEuaW5kZXhPZihpKSA8IDAgJiYgb3B0aW9ucy53aXJlTWFwLmMyLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHR1bnVzZWQgfD0gMSA8PCAoKHEzIC0gMSkgLSBpKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgbmV3U3RhdGUgPSB7fTtcblx0dmFyIG5ld1N0YXRlQml0cyA9IDA7XG5cblx0dmFyIG4zID0gMSA8PCBxMztcblx0Zm9yKHZhciBhMyA9IDA7IGEzIDwgbjM7IGEzKyspIHtcblx0XHRpZighKGEzICYgdW51c2VkKSkge1xuXHRcdFx0dmFyIGExID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjMW1hcC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhMyAmIGMxbWFwW2ldLmFuZCkgYTEgfD0gYzFtYXBbaV0ub3I7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBhMiA9IDA7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgYzJtYXAubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoYTMgJiBjMm1hcFtpXS5hbmQpIGEyIHw9IGMybWFwW2ldLm9yO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgczEgPSBjMS5zdGF0ZVthMV07XG5cdFx0XHRpZihzMSkge1xuXHRcdFx0XHR2YXIgczIgPSBjMi5zdGF0ZVthMl07XG5cdFx0XHRcdGlmKHMyKSB7XG5cdFx0XHRcdFx0dmFyIHMzID0gbWF0aC5tdWx0aXBseShzMSwgczIpO1xuXHRcdFx0XHRcdGlmKHMzLnJlIHx8IHMzLmltKSB7XG5cdFx0XHRcdFx0XHRuZXdTdGF0ZVthM10gPSBzMztcblx0XHRcdFx0XHRcdG5ld1N0YXRlQml0cyB8PSBhMztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0Ly8gZXhwYW5kIGNpcmN1aXQgaWYgbmVlZGVkXG5cdGlmKHRoaXMubnVtUXViaXRzIDwgcTMpIHtcblx0XHR0aGlzLm51bVF1Yml0cyA9IHEzO1xuXG5cdFx0d2hpbGUodGhpcy5nYXRlcy5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0XHR9XG5cdFx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5nYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2hpbGUodGhpcy5nYXRlc1tpXS5sZW5ndGggPCBudW1Db2xzKSB7XG5cdFx0XHRcdHRoaXMuZ2F0ZXNbaV0ucHVzaChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG5cdHRoaXMuc3RhdGVCaXRzID0gbmV3U3RhdGVCaXRzO1xuXG5cdGlmKHRoaXMuc3RhdGVCaXRzID09IDAgJiYgT2JqZWN0LmtleXModGhpcy5zdGF0ZSkubGVuZ3RoID09IDApIHtcblx0XHR0aGlzLnN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcblx0fVxufTtcblxuLy8gQWRkIHF1Yml0cyBwcmVzZXJ2aW5nIHN0YXRlXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYXBwZW5kUXViaXRzID0gZnVuY3Rpb24obnVtUXViaXRzKSB7XG5cdHZhciBjID0gbmV3IFF1YW50dW1DaXJjdWl0KG51bVF1Yml0cyk7XG5cdHRoaXMuX3NldENvbWJpbmVkU3RhdGUodGhpcywgYyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubnVtQW1wbGl0dWRlcyA9IGZ1bmN0aW9uKG9ubHlQb3NzaWJsZSkge1xuXHRpZihvbmx5UG9zc2libGUpIHtcblx0XHR2YXIgcG9zc2libGVDb3VudCA9IDA7XG5cdFx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0XHR2YXIgc3RhdGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaXNdLCAxNCk7XG5cdFx0XHRpZihzdGF0ZS5yZSB8fCBzdGF0ZS5pbSkge1xuXHRcdFx0XHRwb3NzaWJsZUNvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBwb3NzaWJsZUNvdW50O1xuXHR9XG5cblx0cmV0dXJuIG1hdGgucG93KDIsIHRoaXMubnVtUXViaXRzKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5udW1Db2xzID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmdhdGVzLmxlbmd0aCA/IHRoaXMuZ2F0ZXNbMF0ubGVuZ3RoIDogMDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5udW1HYXRlcyA9IGZ1bmN0aW9uKGRlY29tcG9zZSkge1xuXHR2YXIgY2lyY3VpdCA9IG51bGw7XG5cdGlmKGRlY29tcG9zZSkge1xuXHRcdGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblx0fSBlbHNlIHtcblx0XHRjaXJjdWl0ID0gdGhpcztcblx0fVxuXG5cdHZhciBudW1HYXRlcyA9IDA7XG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdG51bUdhdGVzKys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG51bUdhdGVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzRW1wdHlDZWxsID0gZnVuY3Rpb24oY29sLCB3aXJlKSB7XG5cdGlmKHRoaXMuZ2F0ZXNbd2lyZV0gJiYgdGhpcy5nYXRlc1t3aXJlXVtjb2xdKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Zm9yKHZhciB3ID0gMDsgdyA8IHRoaXMubnVtUXViaXRzOyB3KyspIHtcblx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbCwgdyk7XG5cdFx0aWYoZ2F0ZSkge1xuXHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiIHx8IChnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHx8IChNYXRoLm1pbi5hcHBseShudWxsLCBnYXRlLndpcmVzKSA8IHdpcmUgJiYgTWF0aC5tYXguYXBwbHkobnVsbCwgZ2F0ZS53aXJlcykgPiB3aXJlKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaXNFbXB0eVBsYWNlID0gZnVuY3Rpb24oY29sLCB3aXJlcywgdXNpbmdDcmVncykge1xuXHR2YXIgbWluV2lyZSA9IE1hdGgubWluLmFwcGx5KG51bGwsIHdpcmVzKTtcblx0dmFyIG1heFdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCB3aXJlcyk7XG5cblx0aWYodXNpbmdDcmVncykge1xuXHRcdHZhciBteCA9IHRoaXMubnVtUXViaXRzIC0gMTtcblx0XHRpZihteCA+IG1heFdpcmUpIHtcblx0XHRcdG1heFdpcmUgPSBteDtcblx0XHR9XG5cdH1cblxuXHR2YXIgYWxsRW1wdHkgPSB0cnVlO1xuXHRmb3IodmFyIHdpcmUgPSBtaW5XaXJlOyB3aXJlIDw9IG1heFdpcmU7IHdpcmUrKykge1xuXHRcdGlmKCF0aGlzLmlzRW1wdHlDZWxsKGNvbCwgd2lyZSkpIHtcblx0XHRcdGFsbEVtcHR5ID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFsbEVtcHR5O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmxhc3ROb25FbXB0eVBsYWNlID0gZnVuY3Rpb24od2lyZXMsIHVzaW5nQ3JlZ3MpIHtcblx0dmFyIGNvbCA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgYWxsRW1wdHkgPSB0cnVlO1xuXG5cdHZhciBtaW5XaXJlID0gTWF0aC5taW4uYXBwbHkobnVsbCwgd2lyZXMpO1xuXHR2YXIgbWF4V2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHdpcmVzKTtcblxuXHRpZih1c2luZ0NyZWdzKSB7XG5cdFx0dmFyIG14ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHRcdGlmKG14ID4gbWF4V2lyZSkge1xuXHRcdFx0bWF4V2lyZSA9IG14O1xuXHRcdH1cblx0fVxuXG5cdHdoaWxlKGFsbEVtcHR5ICYmIGNvbC0tKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gbWluV2lyZTsgd2lyZSA8PSBtYXhXaXJlOyB3aXJlKyspIHtcblx0XHRcdGlmKCF0aGlzLmlzRW1wdHlDZWxsKGNvbCwgd2lyZSkpIHtcblx0XHRcdFx0YWxsRW1wdHkgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluc2VydENvbHVtbiA9IGZ1bmN0aW9uKGNvbEluZGV4KSB7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0dGhpcy5nYXRlc1tpXS5zcGxpY2UoY29sSW5kZXggfHwgMCwgMCwgbnVsbCk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yYW5kb21TdHJpbmcgPSBmdW5jdGlvbihsZW4pIHtcblx0bGVuID0gbGVuIHx8IDE3O1xuXG5cdHZhciB0ZXh0ID0gXCJcIjtcblx0Ly8gbGV0IGZpcnN0IGNoYXIgdG8gYmUgbGV0dGVyXG5cdHZhciBjaGFyc2V0ID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCI7XG5cdHRleHQgKz0gY2hhcnNldC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnNldC5sZW5ndGgpKTtcblxuXHQvLyBvdGhlciBjaGFycyBjYW4gYmUgbGV0dGVycyBhbmQgbnVtYmVyc1xuXHRjaGFyc2V0ICs9IFwiMDEyMzQ1Njc4OVwiO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHR0ZXh0ICs9IGNoYXJzZXQuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzZXQubGVuZ3RoKSk7XG5cdH1cblxuXHRyZXR1cm4gdGV4dDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFkZEdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgY29sdW1uLCB3aXJlcywgb3B0aW9ucykge1xuXHR2YXIgd2lyZUxpc3QgPSBbXTtcblx0aWYoQXJyYXkuaXNBcnJheSh3aXJlcykpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgd2lyZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdpcmVMaXN0LnB1c2god2lyZXNbaV0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR3aXJlTGlzdC5wdXNoKHdpcmVzKTtcblx0fVxuXG5cdGlmKGNvbHVtbiA8IDApIHtcblx0XHRjb2x1bW4gPSB0aGlzLmxhc3ROb25FbXB0eVBsYWNlKHdpcmVMaXN0LCBnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIiB8fCAob3B0aW9ucyAmJiBvcHRpb25zLmNvbmRpdGlvbiAmJiBvcHRpb25zLmNvbmRpdGlvbi5jcmVnKSkgKyAxO1xuXHR9XG5cblx0dmFyIG51bUNvbm5lY3RvcnMgPSB3aXJlTGlzdC5sZW5ndGg7XG5cdHZhciBpZCA9IHRoaXMucmFuZG9tU3RyaW5nKCk7XG5cdGZvcih2YXIgY29ubmVjdG9yID0gMDsgY29ubmVjdG9yIDwgbnVtQ29ubmVjdG9yczsgY29ubmVjdG9yKyspIHtcblx0XHR2YXIgd2lyZSA9IHdpcmVMaXN0W2Nvbm5lY3Rvcl07XG5cblx0XHRpZigod2lyZSArIDEpID4gdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdHRoaXMubnVtUXViaXRzID0gd2lyZSArIDE7XG5cdFx0fVxuXG5cdFx0d2hpbGUodGhpcy5nYXRlcy5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0XHR9XG5cblx0XHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRcdGlmKChjb2x1bW4gKyAxKSA+IG51bUNvbHMpIHtcblx0XHRcdG51bUNvbHMgPSBjb2x1bW4gKyAxO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aGlsZSh0aGlzLmdhdGVzW2ldLmxlbmd0aCA8IG51bUNvbHMpIHtcblx0XHRcdFx0dGhpcy5nYXRlc1tpXS5wdXNoKG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBnYXRlID0ge1xuXHRcdFx0aWQ6IGlkLFxuXHRcdFx0bmFtZTogZ2F0ZU5hbWUsXG5cdFx0XHRjb25uZWN0b3I6IGNvbm5lY3Rvcixcblx0XHRcdG9wdGlvbnM6IHt9XG5cdFx0fVxuXG5cdFx0aWYob3B0aW9ucykge1xuXHRcdFx0Z2F0ZS5vcHRpb25zID0gb3B0aW9ucztcblxuXHRcdFx0Ly8gZXh0ZW5kIGNyZWcgaWYgcmVxdWlyZWRcblx0XHRcdGlmKG9wdGlvbnMuY3JlZyAmJiBvcHRpb25zLmNyZWdbXCJuYW1lXCJdICYmIHR5cGVvZiBvcHRpb25zLmNyZWdbXCJiaXRcIl0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHR2YXIgY3JlZ0JpdCA9IHBhcnNlSW50KG9wdGlvbnMuY3JlZy5iaXQgfHwgMCk7XG5cdFx0XHRcdGlmKGlzTmFOKGNyZWdCaXQpKSB7XG5cdFx0XHRcdFx0Y3JlZ0JpdCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGV4aXN0aW5nQ3JlZyA9IHRoaXMuY3JlZ3Nbb3B0aW9ucy5jcmVnLm5hbWVdIHx8IFtdO1xuXHRcdFx0XHR2YXIgY3VycmVudFZhbHVlID0gKGV4aXN0aW5nQ3JlZy5sZW5ndGggPiBjcmVnQml0KSA/IGV4aXN0aW5nQ3JlZ1tvcHRpb25zLmNyZWcuYml0XSA6IDA7XG5cdFx0XHRcdHRoaXMuc2V0Q3JlZ0JpdChvcHRpb25zLmNyZWcubmFtZSwgY3JlZ0JpdCwgY3VycmVudFZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl0gPSBnYXRlO1xuXHR9XG5cdHJldHVybiBpZDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBlbmRHYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIHdpcmVzLCBvcHRpb25zKSB7XG5cdHJldHVybiB0aGlzLmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgb3B0aW9ucyk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbnNlcnRHYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGNvbHVtbiwgd2lyZXMsIG9wdGlvbnMpIHtcblx0dmFyIHdpcmVMaXN0ID0gW107XG5cdGlmKEFycmF5LmlzQXJyYXkod2lyZXMpKSB7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHdpcmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aXJlTGlzdC5wdXNoKHdpcmVzW2ldKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0d2lyZUxpc3QucHVzaCh3aXJlcyk7XG5cdH1cblxuXHRpZihjb2x1bW4gPCAwKSB7XG5cdFx0Y29sdW1uID0gdGhpcy5sYXN0Tm9uRW1wdHlQbGFjZSh3aXJlTGlzdCwgKCEhZ2F0ZU5hbWUgJiYgZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIpIHx8IChvcHRpb25zICYmIG9wdGlvbnMuY29uZGl0aW9uICYmIG9wdGlvbnMuY29uZGl0aW9uLmNyZWcpKSArIDE7XG5cdH1cblxuXHR2YXIgc3BhY2VJc0VtcHR5ID0gdHJ1ZTtcblx0dmFyIG51bUNvbm5lY3RvcnMgPSB3aXJlTGlzdC5sZW5ndGg7XG5cdGZvcih2YXIgY29ubmVjdG9yID0gMDsgY29ubmVjdG9yIDwgbnVtQ29ubmVjdG9yczsgY29ubmVjdG9yKyspIHtcblx0XHR2YXIgd2lyZSA9IHdpcmVMaXN0W2Nvbm5lY3Rvcl07XG5cblx0XHRpZigod2lyZSArIDEpID4gdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdHRoaXMubnVtUXViaXRzID0gd2lyZSArIDE7XG5cdFx0fVxuXG5cdFx0d2hpbGUodGhpcy5nYXRlcy5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0XHR9XG5cblx0XHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRcdGlmKChjb2x1bW4gKyAxKSA+IG51bUNvbHMpIHtcblx0XHRcdG51bUNvbHMgPSBjb2x1bW4gKyAxO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aGlsZSh0aGlzLmdhdGVzW2ldLmxlbmd0aCA8IG51bUNvbHMpIHtcblx0XHRcdFx0dGhpcy5nYXRlc1tpXS5wdXNoKG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKCF0aGlzLmlzRW1wdHlQbGFjZShjb2x1bW4sIHdpcmVMaXN0LCAoISFnYXRlTmFtZSAmJiBnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikgfHwgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb25kaXRpb24gJiYgb3B0aW9ucy5jb25kaXRpb24uY3JlZykpKSB7XG5cdFx0dGhpcy5pbnNlcnRDb2x1bW4oY29sdW1uKTtcblx0fVxuXG5cdHZhciBpZCA9IG51bGw7XG5cdGlmKGdhdGVOYW1lKSB7XG5cdFx0aWQgPSB0aGlzLmFkZEdhdGUoZ2F0ZU5hbWUsIGNvbHVtbiwgd2lyZUxpc3QsIG9wdGlvbnMpO1xuXHR9XG5cdHJldHVybiBpZDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbnNlcnRTcGFjZSA9IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZXMpIHtcblx0cmV0dXJuIHRoaXMuaW5zZXJ0R2F0ZShudWxsLCBjb2x1bW4sIHdpcmVzLCBudWxsKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZUdhdGVBdCA9IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZSkge1xuXHRpZighdGhpcy5nYXRlc1t3aXJlXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRpZighZ2F0ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciBpZCA9IGdhdGUuaWQ7XG5cblx0dmFyIG51bVdpcmVzID0gdGhpcy5nYXRlcy5sZW5ndGg7XG5cdGZvcih2YXIgdyA9IDA7IHcgPCBudW1XaXJlczsgdysrKSB7XG5cdFx0dmFyIGNlbGwgPSB0aGlzLmdhdGVzW3ddW2NvbHVtbl07XG5cdFx0aWYoY2VsbCAmJiBjZWxsLmlkID09IGlkKSB7XG5cdFx0XHR0aGlzLmdhdGVzW3ddW2NvbHVtbl0gPSBudWxsO1xuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZUdhdGUgPSBmdW5jdGlvbihnYXRlSWQpIHtcblx0dmFyIGdhdGVQb3MgPSB0aGlzLmdldEdhdGVQb3NCeUlkKGdhdGVJZCk7XG5cdGlmKCFnYXRlUG9zIHx8IGdhdGVQb3MuY29sIDwgMCB8fCAhZ2F0ZVBvcy53aXJlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLnJlbW92ZUdhdGVBdChnYXRlUG9zLmNvbCwgZ2F0ZVBvcy53aXJlc1swXSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hZGRNZWFzdXJlID0gZnVuY3Rpb24od2lyZSwgY3JlZywgY2JpdCkge1xuXHR0aGlzLmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB3aXJlLCB7IGNyZWc6IHsgbmFtZTogY3JlZywgYml0OiBjYml0IH0gfSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYXBwZW5kQ2lyY3VpdCA9IGZ1bmN0aW9uKGNpcmN1aXQsIHBhY2spIHtcblx0dmFyIGNvbE9mZnNldCA9IHRoaXMubnVtQ29scygpO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cblx0XHRcdFx0aWYoIXRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdICYmIGNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdHRoaXMucmVnaXN0ZXJHYXRlKGdhdGUubmFtZSwgY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuYWRkR2F0ZShnYXRlLm5hbWUsIGNvbHVtbiArIGNvbE9mZnNldCwgZ2F0ZS53aXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cblxuXG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZVRyYWlsaW5nQ29sdW1ucyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IG51bUNvbHMgLSAxOyBjb2x1bW4gPj0gMDsgY29sdW1uLS0pIHtcblx0XHR2YXIgaXNFbXB0eUNvbCA9IHRydWU7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHRpc0VtcHR5Q29sID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKCFpc0VtcHR5Q29sKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHRoaXMuZ2F0ZXNbd2lyZV0ucG9wKCk7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlTGVhZGluZ0NvbHVtbnMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGVtcHR5Q291bnQgPSAwO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0dmFyIGlzRW1wdHlDb2wgPSB0cnVlO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0aXNFbXB0eUNvbCA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZighaXNFbXB0eUNvbCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0ZW1wdHlDb3VudCsrO1xuXHR9XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IGVtcHR5Q291bnQ7IGkrKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR0aGlzLmdhdGVzW3dpcmVdLnNoaWZ0KCk7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlVHJhaWxpbmdSb3dzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgd2lyZSA9IHRoaXMubnVtUXViaXRzIC0gMTsgd2lyZSA+PSAwOyB3aXJlLS0pIHtcblx0XHR2YXIgaXNFbXB0eVJvdyA9IHRydWU7XG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdGlzRW1wdHlSb3cgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoIWlzRW1wdHlSb3cpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5nYXRlcy5wb3AoKTtcblx0XHR0aGlzLm51bVF1Yml0cy0tO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlUXViaXQgPSBmdW5jdGlvbih3aXJlKSB7XG5cdGlmKCF0aGlzLmdhdGVzW3dpcmVdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5yZXNldFN0YXRlKCk7XG5cblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBudW1Db2xzOyBjb2wrKykge1xuXHRcdHRoaXMucmVtb3ZlR2F0ZUF0KGNvbCwgd2lyZSk7XG5cdH1cblxuXHRmb3IodmFyIHcgPSB3aXJlICsgMTsgdyA8IHRoaXMubnVtUXViaXRzOyB3KyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG51bUNvbHM7IGNvbCsrKSB7XG5cdFx0XHR0aGlzLmdhdGVzW3cgLSAxXVtjb2xdID0gdGhpcy5nYXRlc1t3XVtjb2xdO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuZ2F0ZXMucG9wKCk7XG5cdHRoaXMubnVtUXViaXRzLS07XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5mbGlwVmVydGljYWxseSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgbGFzdFF1Yml0ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHRmb3IodmFyIHcgPSAwOyB3IDwgdGhpcy5udW1RdWJpdHMgLyAyOyB3KyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG51bUNvbHM7IGNvbCsrKSB7XG5cdFx0XHR2YXIgdG1wID0gdGhpcy5nYXRlc1t3XVtjb2xdO1xuXHRcdFx0dGhpcy5nYXRlc1t3XVtjb2xdID0gdGhpcy5nYXRlc1tsYXN0UXViaXQgLSB3XVtjb2xdO1xuXHRcdFx0dGhpcy5nYXRlc1tsYXN0UXViaXQgLSB3XVtjb2xdID0gdG1wO1xuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmZsaXBIb3Jpem9udGFsbHkgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5yZXNldFN0YXRlKCk7XG5cblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0dmFyIGxhc3RDb2wgPSBudW1Db2xzIC0gMTtcblx0Zm9yKHZhciB3ID0gMDsgdyA8IHRoaXMubnVtUXViaXRzOyB3KyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG51bUNvbHMgLyAyOyBjb2wrKykge1xuXHRcdFx0dmFyIHRtcCA9IHRoaXMuZ2F0ZXNbd11bY29sXTtcblx0XHRcdHRoaXMuZ2F0ZXNbd11bY29sXSA9IHRoaXMuZ2F0ZXNbd11bbGFzdENvbCAtIGNvbF07XG5cdFx0XHR0aGlzLmdhdGVzW3ddW2xhc3RDb2wgLSBjb2xdID0gdG1wO1xuXHRcdH1cblx0fVxufTtcblxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybSA9IGZ1bmN0aW9uKFUsIHF1Yml0cykge1xuXHR2YXIgbmV3U3RhdGUgPSB7fTtcblx0dmFyIG5ld1N0YXRlQml0cyA9IDA7XG5cblx0Ly8gY2xvbmUgbGlzdCBvZiB3aXJlcyB0byBpdHNlbGYgKHJlbW92ZSByZWZlcmVuY2UgdG8gb3JpZ2luYWwgYXJyYXkpXG5cdHF1Yml0cyA9IHF1Yml0cy5zbGljZSgwKTtcblxuXHQvLyByZXZlcnNlIGJpdCBvcmRlclxuXHRpZih0aGlzLnJldmVyc2VCaXRPcmRlcikge1xuXHRcdC8vIGNvbnZlcnQgaW5kZXggZnJvbSAwLWJhc2VkIHRvIGVuZC1iYXNlZFxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBxdWJpdHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHF1Yml0c1tpXSA9ICh0aGlzLm51bVF1Yml0cyAtIDEpIC0gcXViaXRzW2ldO1xuXHRcdH1cblx0fVxuXG5cdHF1Yml0cy5yZXZlcnNlKCk7XG5cblx0Ly8gbGlzdCBvZiB3aXJlcyBub3QgdXNlZCBieSB0aGlzIGdhdGVcblx0dmFyIHVudXNlZCA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdGlmKHF1Yml0cy5pbmRleE9mKGkpIDwgMCkge1xuXHRcdFx0dW51c2VkLnB1c2goaSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHVudXNlZENvdW50ID0gdW51c2VkLmxlbmd0aDtcblx0dmFyIHVudXNlZFNwYWNlID0gKDEgPDwgdW51c2VkQ291bnQpO1xuXG5cdGZ1bmN0aW9uIGdldEVsTWFzayhlbCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHF1Yml0cy5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRpZihlbCAmICgxIDw8IGluZGV4KSkge1xuXHRcdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRJbmNNYXNrKCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHF1Yml0cy5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXMgKyAxO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Tm90TWFzaygpIHtcblx0XHR2YXIgcmVzID0gMDtcblx0XHR1bnVzZWQubWFwKGZ1bmN0aW9uKHF1Yml0LCBpbmRleCkge1xuXHRcdFx0cmVzIHw9ICgxIDw8IHF1Yml0KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0dmFyIFpFUk8gPSBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cblx0Zm9yKHZhciBlbHJvdyA9IDA7IGVscm93IDwgVS5sZW5ndGg7IGVscm93KyspIHtcblxuXHRcdHZhciByb3dtYXNrID0gZ2V0RWxNYXNrKGVscm93KTtcblxuXHRcdGZvcih2YXIgZWxjb2wgPSAwOyBlbGNvbCA8IFVbZWxyb3ddLmxlbmd0aDsgZWxjb2wrKykge1xuXG5cdFx0XHR2YXIgY29sbWFzayA9IGdldEVsTWFzayhlbGNvbCk7XG5cblx0XHRcdGlmKCh0aGlzLnN0YXRlQml0cyAmIGNvbG1hc2spID09IGNvbG1hc2spIHtcblxuXHRcdFx0XHR2YXIgdXZhbCA9IFVbZWxyb3ddW2VsY29sXTtcblx0XHRcdFx0aWYodXZhbCkge1xuXHRcdFx0XHRcdHZhciByb3cgPSByb3dtYXNrO1xuXHRcdFx0XHRcdHZhciBjb2wgPSBjb2xtYXNrO1xuXG5cdFx0XHRcdFx0dmFyIGNvdW50ZXIgPSB1bnVzZWRTcGFjZTtcblx0XHRcdFx0XHR2YXIgY291bnRlcm1hc2sgPSBnZXRFbE1hc2soMCk7XG5cdFx0XHRcdFx0dmFyIGluY21hc2sgPSBnZXRJbmNNYXNrKCk7XG5cdFx0XHRcdFx0dmFyIG5vdG1hc2sgPSBnZXROb3RNYXNrKCk7XG5cdFx0XHRcdFx0dmFyIHRvb3RobGVzcyA9IGNvdW50ZXJtYXNrO1xuXHRcdFx0XHRcdHdoaWxlKGNvdW50ZXItLSkge1xuXHRcdFx0XHRcdFx0dmFyIHN0YXRlID0gdGhpcy5zdGF0ZVtjb2xdO1xuXHRcdFx0XHRcdFx0aWYoc3RhdGUpIHtcblx0XHRcdFx0XHRcdFx0cm93ID0gdG9vdGhsZXNzIHwgcm93bWFzaztcblxuXHRcdFx0XHRcdFx0XHRpZih1dmFsID09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRuZXdTdGF0ZVtyb3ddID0gbWF0aC5hZGQobmV3U3RhdGVbcm93XSB8fCBaRVJPLCBzdGF0ZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV3U3RhdGVbcm93XSA9IG1hdGguYWRkKG5ld1N0YXRlW3Jvd10gfHwgWkVSTywgbWF0aC5tdWx0aXBseSh1dmFsLCBzdGF0ZSkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG5ld1N0YXRlQml0cyB8PSByb3c7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRvb3RobGVzcyA9ICh0b290aGxlc3MgKyBpbmNtYXNrKSAmIG5vdG1hc2s7XG5cdFx0XHRcdFx0XHRjb2wgPSB0b290aGxlc3MgfCBjb2xtYXNrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyByZXBsYWNlIGN1cnJlbnQgc3RhdGUgd2l0aCBuZXcgc3RhdGVcblx0dGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuXHR0aGlzLnN0YXRlQml0cyA9IG5ld1N0YXRlQml0cztcblxuXHRpZih0aGlzLnN0YXRlQml0cyA9PSAwICYmIE9iamVjdC5rZXlzKHRoaXMuc3RhdGUpLmxlbmd0aCA9PSAwKSB7XG5cdFx0dGhpcy5zdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG5cdH1cbn07XG5cbi8vXG4vLyBgZW5kaWFubmVzc2AgY2FuIGJlOlxuLy8gICAgIG51bGwgLSB0aGlzIGlzIGRlZmF1bHQgYW5kIGRlcGVuZHMgb24gdGhpcy5yZXZlcnNlQml0T3JkZXJcbi8vICAgICBcImJpZ1wiIC0gYmlnIGVuZGlhbiAobGlrZSBSaWdldHRpL3B5UXVpbClcbi8vICAgICBcImxpdHRsZVwiIC0gbGl0dGxlIGVuZGlhbiAobGlrZSBJQk0vUWlza2l0KVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS50cmFuc2Zvcm1NYXRyaXggPSBmdW5jdGlvbih0b3RhbFF1Yml0cywgVSwgdGFyZ2V0UXViaXRzLCBlbmRpYW5uZXNzKSB7XG5cdC8vIGNsb25lIGxpc3Qgb2Ygd2lyZXMgdG8gaXRzZWxmIChyZW1vdmUgcmVmZXJlbmNlIHRvIG9yaWdpbmFsIGFycmF5KVxuXHR0YXJnZXRRdWJpdHMgPSB0YXJnZXRRdWJpdHMuc2xpY2UoMCk7XG5cblx0dmFyIHJldmVyc2VCaXRzID0gZmFsc2U7XG5cdGlmKCFlbmRpYW5uZXNzKSB7XG5cdFx0cmV2ZXJzZUJpdHMgPSAhdGhpcy5yZXZlcnNlQml0T3JkZXI7XG5cdH0gZWxzZSB7XG5cdFx0cmV2ZXJzZUJpdHMgPSBlbmRpYW5uZXNzID09IFwiYmlnXCI7XG5cdH1cblxuXHQvLyByZXZlcnNlIGJpdCBvcmRlclxuXHRpZihyZXZlcnNlQml0cykge1xuXHRcdC8vIGNvbnZlcnQgaW5kZXggZnJvbSAwLWJhc2VkIHRvIGVuZC1iYXNlZFxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0YXJnZXRRdWJpdHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRhcmdldFF1Yml0c1tpXSA9ICh0b3RhbFF1Yml0cyAtIDEpIC0gdGFyZ2V0UXViaXRzW2ldO1xuXHRcdH1cblx0fVxuXG5cdHRhcmdldFF1Yml0cy5yZXZlcnNlKCk7XG5cblx0Ly8gbGlzdCBvZiB3aXJlcyBub3QgdXNlZCBieSB0aGlzIGdhdGVcblx0dmFyIHVudXNlZCA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgdG90YWxRdWJpdHM7IGkrKykge1xuXHRcdGlmKHRhcmdldFF1Yml0cy5pbmRleE9mKGkpIDwgMCkge1xuXHRcdFx0dW51c2VkLnB1c2goaSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHVudXNlZENvdW50ID0gdW51c2VkLmxlbmd0aDtcblx0dmFyIHVudXNlZFNwYWNlID0gKDEgPDwgdW51c2VkQ291bnQpO1xuXG5cdGZ1bmN0aW9uIGdldEVsTWFzayhlbCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHRhcmdldFF1Yml0cy5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRpZihlbCAmICgxIDw8IGluZGV4KSkge1xuXHRcdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRJbmNNYXNrKCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHRhcmdldFF1Yml0cy5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXMgKyAxO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Tm90TWFzaygpIHtcblx0XHR2YXIgcmVzID0gMDtcblx0XHR1bnVzZWQubWFwKGZ1bmN0aW9uKHF1Yml0LCBpbmRleCkge1xuXHRcdFx0cmVzIHw9ICgxIDw8IHF1Yml0KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0dmFyIFQgPSBtYXRoLnplcm9zKFsgMSA8PCB0b3RhbFF1Yml0cywgMSA8PCB0b3RhbFF1Yml0cyBdKTtcblxuXHRmb3IodmFyIGVscm93ID0gMDsgZWxyb3cgPCBVLmxlbmd0aDsgZWxyb3crKykge1xuXG5cdFx0dmFyIHJvd21hc2sgPSBnZXRFbE1hc2soZWxyb3cpO1xuXG5cdFx0Zm9yKHZhciBlbGNvbCA9IDA7IGVsY29sIDwgVVtlbHJvd10ubGVuZ3RoOyBlbGNvbCsrKSB7XG5cblx0XHRcdHZhciBjb2xtYXNrID0gZ2V0RWxNYXNrKGVsY29sKTtcblxuXHRcdFx0dmFyIHV2YWwgPSBVW2Vscm93XVtlbGNvbF07XG5cdFx0XHRpZih1dmFsKSB7XG5cdFx0XHRcdHZhciByb3cgPSByb3dtYXNrO1xuXHRcdFx0XHR2YXIgY29sID0gY29sbWFzaztcblxuXHRcdFx0XHR2YXIgY291bnRlciA9IHVudXNlZFNwYWNlO1xuXHRcdFx0XHR2YXIgY291bnRlcm1hc2sgPSBnZXRFbE1hc2soMCk7XG5cdFx0XHRcdHZhciBpbmNtYXNrID0gZ2V0SW5jTWFzaygpO1xuXHRcdFx0XHR2YXIgbm90bWFzayA9IGdldE5vdE1hc2soKTtcblx0XHRcdFx0dmFyIHRvb3RobGVzcyA9IGNvdW50ZXJtYXNrO1xuXHRcdFx0XHR3aGlsZShjb3VudGVyLS0pIHtcblx0XHRcdFx0XHRyb3cgPSB0b290aGxlc3MgfCByb3dtYXNrO1xuXG5cdFx0XHRcdFx0VFtyb3ddW2NvbF0gPSB1dmFsO1xuXG5cdFx0XHRcdFx0dG9vdGhsZXNzID0gKHRvb3RobGVzcyArIGluY21hc2spICYgbm90bWFzaztcblx0XHRcdFx0XHRjb2wgPSB0b290aGxlc3MgfCBjb2xtYXNrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBUO1xufTtcblxuLy9cbi8vIEZ1bmN0aW9uIHJldHVybnMgdW5pdGFyeSBvZiB0aGUgd2hvbGUgY2lyY3VpdFxuLy9cbi8vIGBlbmRpYW5uZXNzYCBjYW4gYmU6XG4vLyAgICAgbnVsbCAtIHRoaXMgaXMgZGVmYXVsdCBhbmQgZGVwZW5kcyBvbiB0aGlzLnJldmVyc2VCaXRPcmRlclxuLy8gICAgIFwiYmlnXCIgLSBiaWcgZW5kaWFuIChsaWtlIFJpZ2V0dGkvcHlRdWlsKVxuLy8gICAgIFwibGl0dGxlXCIgLSBsaXR0bGUgZW5kaWFuIChsaWtlIElCTS9RaXNraXQpXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNpcmN1aXRNYXRyaXggPSBmdW5jdGlvbihlbmRpYW5uZXNzKSB7XG5cdHZhciBkZWNvbXBvc2VkID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGRlY29tcG9zZWQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdGlmKGRlY29tcG9zZWQuZ290Q2xhc3NpY2FsQ29udHJvbCgpKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0dmFyIG1hdHJpeCA9IFtdO1xuXHRmb3IodmFyIGNvbCA9IGRlY29tcG9zZWQubnVtQ29scygpIC0gMTsgY29sID49IDA7IGNvbC0tKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gZGVjb21wb3NlZC5udW1RdWJpdHMgLSAxOyB3aXJlID49IDA7IHdpcmUtLSkge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2wsIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIlwiKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZ2F0ZURlZi5tYXRyaXggJiYgZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIHJhd0dhdGUgPSBkZWNvbXBvc2VkLmdldFJhd0dhdGUoZ2F0ZURlZiwgZ2F0ZS5vcHRpb25zKTtcblxuXHRcdFx0XHRcdHZhciBVID0gZGVjb21wb3NlZC50cmFuc2Zvcm1NYXRyaXgoZGVjb21wb3NlZC5udW1RdWJpdHMsIHJhd0dhdGUsIGdhdGUud2lyZXMsIGVuZGlhbm5lc3MpO1xuXG5cdFx0XHRcdFx0aWYoIW1hdHJpeCB8fCAhbWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0bWF0cml4ID0gVTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bWF0cml4ID0gdGhpcy5tdWx0aXBseVNxdWFyZU1hdHJpY2VzKG1hdHJpeCwgVSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdHJpeDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmVpZ2VudmFsdWVzMngyID0gZnVuY3Rpb24oQSkge1xuXHR2YXIgTSA9IHRoaXMucGFyc2VNYXRyaXgoQSk7XG5cblx0dmFyIGVpZ2VuID0gWzAsIDBdO1xuXG5cdHZhciB4ID0gbWF0aC5hZGQoTVswXVswXSwgTVsxXVsxXSk7XG5cblx0ZWlnZW5bMF0gPSBtYXRoLmRpdmlkZShtYXRoLmFkZCh4LCBtYXRoLnNxcnQoIG1hdGguYWRkKG1hdGgubXVsdGlwbHkobWF0aC5tdWx0aXBseSg0LCBNWzBdWzFdKSwgTVsxXVswXSksIG1hdGgucG93KCBtYXRoLnN1YnRyYWN0KE1bMF1bMF0sIE1bMV1bMV0pLCAyKSkpKSwgMik7XG5cdGVpZ2VuWzFdID0gbWF0aC5kaXZpZGUobWF0aC5zdWJ0cmFjdCh4LCBtYXRoLnNxcnQoIG1hdGguYWRkKG1hdGgubXVsdGlwbHkobWF0aC5tdWx0aXBseSg0LCBNWzBdWzFdKSwgTVsxXVswXSksIG1hdGgucG93KCBtYXRoLnN1YnRyYWN0KE1bMF1bMF0sIE1bMV1bMV0pLCAyKSkpKSwgMik7XG5cblx0cmV0dXJuIGVpZ2VuO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEJpcGFydGl0ZVN0YXRlID0gZnVuY3Rpb24ocTEsIHEyKSB7XG5cdHZhciBiaXBhcnRpdGVTdGF0ZSA9IHt9O1xuXHR2YXIgYW1wQ291bnQgPSAwO1xuXG5cdGZ1bmN0aW9uIHNwZWNTdW1Db21wbGV4KGEsIGIpIHtcblx0XHR2YXIgcmF3U3VtID0gbWF0aC5hZGQoYSwgYik7XG5cdFx0dmFyIGFyZyA9IHJhd1N1bS5hcmcoKTtcblx0XHRyZXR1cm4gbWF0aC5jb21wbGV4KHsgYWJzOiBtYXRoLnNxcnQobWF0aC5wb3cobWF0aC5hYnMoYSksIDIpICsgbWF0aC5wb3cobWF0aC5hYnMoYiksIDIpKSwgYXJnOiBhcmcgfSk7XG5cdH1cblxuXHRmb3IodmFyIGlzIGluIHRoaXMuc3RhdGUpIHtcblx0XHR2YXIgaSA9IHBhcnNlSW50KGlzKTtcblx0XHR2YXIgaW5kZXggPSAwO1xuXHRcdHZhciBiaXQxID0gKGkgJiAoMSA8PCBxMSkpID8gMSA6IDA7XG5cdFx0dmFyIGJpdDIgPSAoaSAmICgxIDw8IHEyKSkgPyAyIDogMDtcblxuXHRcdGluZGV4IHw9IGJpdDE7XG5cdFx0aW5kZXggfD0gYml0MjtcblxuXHRcdGlmKHR5cGVvZiBiaXBhcnRpdGVTdGF0ZVtpbmRleF0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0YmlwYXJ0aXRlU3RhdGVbaW5kZXhdID0gc3BlY1N1bUNvbXBsZXgoYmlwYXJ0aXRlU3RhdGVbaW5kZXhdLCB0aGlzLnN0YXRlW2lzXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJpcGFydGl0ZVN0YXRlW2luZGV4XSA9IHRoaXMuc3RhdGVbaXNdO1xuXHRcdH1cblxuXHRcdGFtcENvdW50Kys7XG5cdH1cblxuXHRpZighYW1wQ291bnQpIHtcblx0XHRiaXBhcnRpdGVTdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG5cdH1cblxuXHRyZXR1cm4gYmlwYXJ0aXRlU3RhdGU7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jaGFuY2VNYXAgPSBmdW5jdGlvbigpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cblx0dmFyIG1hcCA9IHt9O1xuXHRmb3IodmFyIHNvdXIgPSAwOyBzb3VyIDwgdGhpcy5udW1RdWJpdHM7IHNvdXIrKykge1xuXHRcdGZvcih2YXIgZGVzdCA9IDA7IGRlc3QgPCB0aGlzLm51bVF1Yml0czsgZGVzdCsrKSB7XG5cdFx0XHRpZighbWFwW3NvdXJdKSB7XG5cdFx0XHRcdG1hcFtzb3VyXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYoZGVzdCA9PSBzb3VyKSB7XG5cdFx0XHRcdG1hcFtzb3VyXVtkZXN0XSA9IG51bGw7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXBbc291cl1bZGVzdF0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmb3IodmFyIHNvdXIgPSAwOyBzb3VyIDwgdGhpcy5udW1RdWJpdHM7IHNvdXIrKykge1xuXHRcdGZvcih2YXIgZGVzdCA9IHNvdXIgKyAxOyBkZXN0IDwgdGhpcy5udW1RdWJpdHM7IGRlc3QrKykge1xuXHRcdFx0dmFyIHJlZHVjZWRTdGF0ZSA9IHRoaXMuZ2V0QmlwYXJ0aXRlU3RhdGUoc291ciwgZGVzdCk7XG5cblx0XHRcdHZhciBjaXJjID0gbmV3IFF1YW50dW1DaXJjdWl0KDIpO1xuXHRcdFx0Y2lyYy5zdGF0ZSA9IHJlZHVjZWRTdGF0ZTtcblxuXHRcdFx0dmFyIHJhZGl1cyA9IG1hdGguYWJzKGNpcmMuYW5nbGVzKClbMF0ucmFkaXVzKTtcblxuXHRcdFx0dmFyIGNvbmN1cmVuY2UgPSBtYXRoLnJvdW5kKDEgLSBtYXRoLnBvdyhyYWRpdXMsIDIpLCA3KTtcblxuXHRcdFx0bWFwW3NvdXJdW2Rlc3RdLmVudGFuZ2xlZCA9IGNvbmN1cmVuY2UgPiAwO1xuXHRcdFx0bWFwW3NvdXJdW2Rlc3RdLmNvbmN1cmVuY2UgPSBjb25jdXJlbmNlO1xuXHRcdFx0bWFwW3NvdXJdW2Rlc3RdLmNvbmN1cmVuY2VQZXJjZW50ID0gbWF0aC5yb3VuZChjb25jdXJlbmNlICogMTAwLCAyKTtcblxuXG5cdFx0XHRtYXBbZGVzdF1bc291cl0uZW50YW5nbGVkID0gY29uY3VyZW5jZSA+IDA7XG5cdFx0XHRtYXBbZGVzdF1bc291cl0uY29uY3VyZW5jZSA9IGNvbmN1cmVuY2U7XG5cdFx0XHRtYXBbZGVzdF1bc291cl0uY29uY3VyZW5jZVBlcmNlbnQgPSBtYXRoLnJvdW5kKGNvbmN1cmVuY2UgKiAxMDAsIDIpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXA7XG59O1xuXG5cbmZ1bmN0aW9uIGJpblN0cihpLCBsZW4pIHtcblx0dmFyIGJpbiA9IGkudG9TdHJpbmcoMik7XG5cdHdoaWxlKGJpbi5sZW5ndGggPCBsZW4pIHtcblx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0fVxuXHRyZXR1cm4gYmluO1xufVxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZXNldFF1Yml0ID0gZnVuY3Rpb24od2lyZSwgdmFsdWUpIHtcblx0dmFyIFUgPSBbXG5cdFx0WzAsIDBdLFxuXHRcdFswLCAwXVxuXHRdO1xuXG5cdHZhciBiaXQgPSBudWxsO1xuXHRpZih0aGlzLnJldmVyc2VCaXRPcmRlcikge1xuXHRcdGJpdCA9IG1hdGgucG93KDIsICh0aGlzLm51bVF1Yml0cyAtIDEpIC0gd2lyZSk7XG5cdH0gZWxzZSB7XG5cdFx0Yml0ID0gbWF0aC5wb3coMiwgd2lyZSk7XG5cdH1cblxuXHR2YXIgcHJvYiA9IDA7XG5cdGZvcih2YXIgaXMgaW4gdGhpcy5zdGF0ZSkge1xuXHRcdHZhciBpID0gcGFyc2VJbnQoaXMpO1xuXHRcdGlmKHZhbHVlID8gISEoaSAmIGJpdCkgOiAhKGkgJiBiaXQpKSB7XG5cdFx0XHRwcm9iICs9IG1hdGgucG93KG1hdGguYWJzKHRoaXMuc3RhdGVbaXNdKSwgMik7XG5cdFx0fVxuXHR9XG5cblx0cHJvYiA9IG1hdGgucm91bmQocHJvYiwgMTQpO1xuXG5cdGlmKHByb2IgPT0gMSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKHZhbHVlKSB7XG5cdFx0aWYocHJvYiA9PSAwKSB7XG5cdFx0XHRVWzFdWzBdID0gMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VVsxXVsxXSA9IG1hdGguc3FydCgxIC8gcHJvYik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmKHByb2IgPT0gMCkge1xuXHRcdFx0VVswXVsxXSA9IDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFVbMF1bMF0gPSBtYXRoLnNxcnQoMSAvIHByb2IpO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLmNvbGxhcHNlZCA9IFtdO1xuXHR0aGlzLnByb2IgPSBbXTtcblx0dGhpcy5hcHBseVRyYW5zZm9ybShVLCBbd2lyZV0pO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYXBwbHlHYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGNvbHVtbiwgd2lyZXMsIG9wdGlvbnMpIHtcblx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRpZighb3B0aW9ucy5jcmVnKSB7XG5cdFx0XHR0aHJvdyBcIkVycm9yOiBcXFwibWVhc3VyZVxcXCIgZ2F0ZSByZXF1aXJlcyBkZXN0aW5hdGlvbi5cIjtcblx0XHR9XG5cblx0XHR2YXIgdmFsdWUgPSB0aGlzLm1lYXN1cmUod2lyZXNbMF0sIG9wdGlvbnMuY3JlZy5uYW1lLCBvcHRpb25zLmNyZWcuYml0KTtcblxuXHRcdHZhciBkb1Jlc2V0ID0gdGhpcy5tZWFzdXJlUmVzZXRzUXViaXQ7XG5cdFx0aWYoIWRvUmVzZXQpIHtcblx0XHRcdGZvcih2YXIgY29sID0gY29sdW1uOyBjb2wgPCB0aGlzLm51bUNvbHMoKTsgY29sKyspIHtcblx0XHRcdFx0dmFyIGZyb21Sb3cgPSBjb2wgPT0gY29sdW1uID8gd2lyZXNbMF0gOiAwO1xuXHRcdFx0XHRmb3IodmFyIHJvdyA9IGZyb21Sb3c7IHJvdyA8IHRoaXMubnVtUXViaXRzOyByb3crKykge1xuXHRcdFx0XHRcdHZhciBnID0gdGhpcy5nYXRlc1tyb3ddW2NvbF07XG5cdFx0XHRcdFx0aWYoZyAmJiBnLm5hbWUgIT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRcdGRvUmVzZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGRvUmVzZXQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKGRvUmVzZXQpIHtcblx0XHRcdHRoaXMucmVzZXRRdWJpdCh3aXJlc1swXSwgdmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGdhdGVOYW1lID09IFwicmVzZXRcIikge1xuXHRcdHRoaXMucmVzZXRRdWJpdCh3aXJlc1swXSwgMCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGdhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRpZighZ2F0ZSkge1xuXHRcdGNvbnNvbGUubG9nKFwiVW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGVOYW1lICsgXCJcXFwiLlwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgcmF3R2F0ZSA9IHRoaXMuZ2V0UmF3R2F0ZShnYXRlLCBvcHRpb25zKTtcblxuXHR0aGlzLmNvbGxhcHNlZCA9IFtdO1xuXHR0aGlzLnByb2IgPSBbXTtcblxuXHR0aGlzLmFwcGx5VHJhbnNmb3JtKHJhd0dhdGUsIHdpcmVzKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRSYXdHYXRlID0gZnVuY3Rpb24oZ2F0ZSwgZ2F0ZU9wdGlvbnMsIGdsb2JhbE9wdGlvbnMpIHtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IGdsb2JhbE9wdGlvbnMgJiYgZ2xvYmFsT3B0aW9ucy5wYXJhbXMgPyBnbG9iYWxPcHRpb25zLnBhcmFtcyA6ICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fSk7XG5cblx0dmFyIGdsb2JhbFBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2xvYmFsUGFyYW1zKSk7XG5cdGZvcih2YXIgZ2xvYmFsUGFyYW1OYW1lIGluIGdsb2JhbFBhcmFtcykge1xuXHRcdGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdH1cblxuXHR2YXIgcmF3R2F0ZSA9IFtdO1xuXHRnYXRlLm1hdHJpeC5tYXAoZnVuY3Rpb24ocm93KSB7XG5cdFx0dmFyIHJhd0dhdGVSb3cgPSBbXTtcblx0XHRyb3cubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdGlmKHR5cGVvZiBpdGVtID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0dmFyIHBhcmFtcyA9IGdhdGVPcHRpb25zID8gZ2F0ZU9wdGlvbnMucGFyYW1zIHx8IHt9IDoge307XG5cblx0XHRcdFx0dmFyIHZhcnMgPSB7fTtcblx0XHRcdFx0Z2F0ZS5wYXJhbXMubWFwKGZ1bmN0aW9uKHZhck5hbWUsIHZhckluZGV4KSB7XG5cdFx0XHRcdFx0aWYoQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG5cdFx0XHRcdFx0XHQvLyBEZXByZWNhdGVkLiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvbmx5LiBcInBhcmFtc1wiIHNob3VsZCBiZSBvYmplY3QgLSBub3QgYXJyYXkuXG5cdFx0XHRcdFx0XHR2YXJzW3Zhck5hbWVdID0gcGFyYW1zLmxlbmd0aCA+IHZhckluZGV4ID8gbWF0aC5ldmFsdWF0ZShwYXJhbXNbdmFySW5kZXhdLCBnbG9iYWxQYXJhbXMpIDogbnVsbDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFyc1t2YXJOYW1lXSA9IG1hdGguZXZhbHVhdGUocGFyYW1zW3Zhck5hbWVdLCBnbG9iYWxQYXJhbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dmFyIGV2ID0gbWF0aC5ldmFsdWF0ZShpdGVtLCB2YXJzKTtcblx0XHRcdFx0cmF3R2F0ZVJvdy5wdXNoKGV2KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJhd0dhdGVSb3cucHVzaChpdGVtKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyYXdHYXRlLnB1c2gocmF3R2F0ZVJvdyk7XG5cdH0pO1xuXHRyZXR1cm4gcmF3R2F0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5maW5kR2xvYmFsUGFyYW1zID0gZnVuY3Rpb24oKSB7XG5cdHZhciByZXMgPSB7XG5cdFx0Z2xvYmFsUGFyYW1zOiBbXSxcblx0XHRjZWxsczogW11cblx0fTtcblxuXHR2YXIgZXh0cmFjdFZhcmlhYmxlcyA9IGZ1bmN0aW9uKHMpIHtcblx0XHR2YXIgdmFycyA9IFtdO1xuXG5cdFx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSAmJiAhbm9kZS5pc0Z1bmN0aW9uTm9kZSAmJiAhbWF0aFtub2RlLm5hbWVdKSB7XG5cdFx0XHRcdHZhcnMucHVzaChub2RlLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2Uocyk7XG5cdFx0bm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRyZXR1cm4gdmFycztcblx0fTtcblxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdHZhciBjZWxsQWRkZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRmb3IodmFyIGdhdGVQYXJhbU5hbWUgaW4gZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbVZhbHVlID0gZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXTtcblx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1WYWx1ZSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBnbG9iYWxzID0gZXh0cmFjdFZhcmlhYmxlcyhnYXRlUGFyYW1WYWx1ZSk7XG5cblx0XHRcdFx0XHRcdFx0aWYoZ2xvYmFscy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGcgPSAwOyBnIDwgZ2xvYmFscy5sZW5ndGg7IGcrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocmVzLmdsb2JhbFBhcmFtcy5pbmRleE9mKGdsb2JhbHNbZ10pIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXMuZ2xvYmFsUGFyYW1zLnB1c2goZ2xvYmFsc1tnXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYoIWNlbGxBZGRlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG1heFdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCBnYXRlLndpcmVzKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcy5jZWxscy5wdXNoKFtjb2x1bW4sIG1heFdpcmVdKTtcblx0XHRcdFx0XHRcdFx0XHRcdGNlbGxBZGRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHbG9iYWxQYXJhbXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMuZmluZEdsb2JhbFBhcmFtcygpLmdsb2JhbFBhcmFtcztcblx0cmV0dXJuIGdsb2JhbFBhcmFtcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nb3RHbG9iYWxQYXJhbXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMuZ2V0R2xvYmFsUGFyYW1zKCk7XG5cblx0cmV0dXJuIGdsb2JhbFBhcmFtcy5sZW5ndGggPiAwO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnVwZGF0ZUdsb2JhbFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnBhcmFtcyA9IHRoaXMuZ2V0R2xvYmFsUGFyYW1zKCk7XG5cblx0dGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zIHx8IHt9O1xuXHR0aGlzLm9wdGlvbnMucGFyYW1zID0gdGhpcy5vcHRpb25zLnBhcmFtcyB8fCB7fTtcblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgcGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cdFx0aWYodHlwZW9mIHRoaXMub3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0gPSAwO1xuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgcGFyYW1OYW1lIGluIHRoaXMub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRpZih0aGlzLnBhcmFtcy5pbmRleE9mKHBhcmFtTmFtZSkgPCAwKSB7XG5cdFx0XHRkZWxldGUgdGhpcy5vcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzLnBhcmFtcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZWNvbXBvc2UgPSBmdW5jdGlvbihvYmopIHtcblx0aWYoIW9iai5nYXRlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0dGhpcy51cGRhdGVHbG9iYWxQYXJhbXMoKTtcblxuXHRmdW5jdGlvbiBpbmplY3RBcnJheShhMSwgYTIsIHBvcykge1xuXHRcdHJldHVybiBhMS5zbGljZSggMCwgcG9zICkuY29uY2F0KCBhMiApLmNvbmNhdCggYTEuc2xpY2UoIHBvcyApICk7XG5cdH1cblxuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG9iai5nYXRlc1swXS5sZW5ndGg7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IG9iai5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBvYmouZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCAmJiAhdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0dmFyIHRtcCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHR2YXIgY3VzdG9tID0gb2JqLmN1c3RvbUdhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKGN1c3RvbSkge1xuXHRcdFx0XHRcdHRtcC5sb2FkKGN1c3RvbSk7XG5cdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0Ly8gY2lyY3VpdCB3aXRoIHBhcmFtc1xuXHRcdFx0XHRcdGlmKHRtcC5wYXJhbXMubGVuZ3RoICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gZ2F0ZS5vcHRpb25zLnBhcmFtcztcblx0XHRcdFx0XHRcdGZvcih2YXIgY2MgPSAwOyBjYyA8IHRtcC5nYXRlc1swXS5sZW5ndGg7IGNjKyspIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IDA7IHd3IDwgdG1wLm51bVF1Yml0czsgd3crKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnZyA9IHRtcC5nYXRlc1t3d11bY2NdO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdnICYmIGdnLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihnZy5vcHRpb25zICYmIGdnLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZGVzdFBhcmFtIGluIGdnLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gcGFyc2UgcGFyYW0sIHJlcGxhY2UgdmFyaWFibGUgd2l0aCBnbG9iYWwgcGFyYW0gYW5kIGFzc2VtYmxlIGl0IGJhY2tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2cub3B0aW9ucy5wYXJhbXNbZGVzdFBhcmFtXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHRyYW5zZm9ybWVkID0gbm9kZS50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUgJiYgZ2xvYmFsUGFyYW1zLmhhc093blByb3BlcnR5KG5vZGUubmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1hdGgucGFyc2UoXCIoXCIgKyBnbG9iYWxQYXJhbXNbbm9kZS5uYW1lXSArIFwiKVwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdnLm9wdGlvbnMucGFyYW1zW2Rlc3RQYXJhbV0gPSB0cmFuc2Zvcm1lZC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24pIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgY2MgPSAwOyBjYyA8IHRtcC5nYXRlc1swXS5sZW5ndGg7IGNjKyspIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IDA7IHd3IDwgdG1wLm51bVF1Yml0czsgd3crKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnZyA9IHRtcC5nYXRlc1t3d11bY2NdO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRnZy5vcHRpb25zID0gZ2cub3B0aW9ucyB8fCB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdGdnLm9wdGlvbnMuY29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHR2YXIgZGVjb21wb3NlZCA9IHRtcC5zYXZlKHRydWUpO1xuXHRcdFx0XHRcdGlmKCFkZWNvbXBvc2VkLmdhdGVzWzBdLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciB0bXBxID0gMDsgdG1wcSA8IGRlY29tcG9zZWQuZ2F0ZXMubGVuZ3RoOyB0bXBxKyspIHtcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlZC5nYXRlc1t0bXBxXS5wdXNoKG51bGwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBlbXB0eSA9IFtdO1xuXHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZWNvbXBvc2VkLmdhdGVzWzBdLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdFx0ZW1wdHkucHVzaChudWxsKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBzaGlmdCBjb2x1bW5zIHJpZ2h0XG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IG9iai5udW1RdWJpdHM7IHcrKykge1xuXHRcdFx0XHRcdFx0dmFyIGcgPSBvYmouZ2F0ZXNbd11bY29sdW1uXTtcblx0XHRcdFx0XHRcdGlmKGcgJiYgZy5pZCA9PSBnYXRlLmlkKSB7XG5cdFx0XHRcdFx0XHRcdG9iai5nYXRlc1t3XS5zcGxpY2UoY29sdW1uLCAxKTtcblx0XHRcdFx0XHRcdFx0dmFyIGluc2VydEdhdGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlY29tcG9zZWQuZ2F0ZXNbZy5jb25uZWN0b3JdKSk7XG5cdFx0XHRcdFx0XHRcdC8vIHVuaXF1ZSBpZFxuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHRtcHEgPSAwOyB0bXBxIDwgaW5zZXJ0R2F0ZS5sZW5ndGg7IHRtcHErKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGluc2VydEdhdGVbdG1wcV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGluc2VydEdhdGVbdG1wcV0uaWQgPSBpbnNlcnRHYXRlW3RtcHFdLmlkICsgXCJfXCIgKyBnYXRlLmlkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRvYmouZ2F0ZXNbd10gPSBpbmplY3RBcnJheShvYmouZ2F0ZXNbd10sIGluc2VydEdhdGUsIGNvbHVtbik7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRvYmouZ2F0ZXNbd10gPSBpbmplY3RBcnJheShvYmouZ2F0ZXNbd10sIGVtcHR5LCBjb2x1bW4gKyAxKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvYmouY3VzdG9tR2F0ZXMgPSB7fTtcblxuXHRyZXR1cm4gb2JqO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmRlY29tcG9zZUdhdGVBdCA9IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZSkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0Ly8gaWYgdGhlcmUgaXMgbm8gZ2F0ZSAtIHJldHVyblxuXHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdGlmKCFnYXRlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gaWYgZ2F0ZSBpcyBub3QgY29tcG9zaXRlIC0gcmV0dXJuXG5cdGlmKCF0aGlzLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBjb3B5IGNpcmN1aXRcblx0dmFyIG9iaiA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRvYmoubG9hZCh0aGlzLnNhdmUoKSk7XG5cblx0Ly8gcmVtb3ZlIGFsbCBnYXRlcyBleGNlcHQgdGhpc1xuXHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG9iai5nYXRlc1swXS5sZW5ndGg7IGNvbCsrKSB7XG5cdFx0Zm9yKHZhciByb3cgPSAwOyByb3cgPCBvYmoubnVtUXViaXRzOyByb3crKykge1xuXHRcdFx0dmFyIGcgPSBvYmouZ2F0ZXNbcm93XVtjb2xdO1xuXHRcdFx0aWYoZyAmJiBnLmlkICE9IGdhdGUuaWQpIHtcblx0XHRcdFx0b2JqLnJlbW92ZUdhdGVBdChjb2wsIHJvdyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gZGVjb21wb3NlIGNpcmN1aXRcblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKG9iai5zYXZlKHRydWUpKTtcblx0Y2lyY3VpdC5yZW1vdmVMZWFkaW5nQ29sdW1ucygpO1xuXHRjaXJjdWl0LnJlbW92ZVRyYWlsaW5nQ29sdW1ucygpO1xuXG5cdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LmdhdGVzWzBdLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdHRoaXMuaW5zZXJ0U3BhY2UoY29sdW1uICsgaSwgZ2F0ZS53aXJlcyk7XG5cdH1cblx0dGhpcy5yZW1vdmVHYXRlKGdhdGUuaWQpO1xuXG5cdHZhciBkZXN0Q29sID0gY29sdW1uO1xuXHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IGNpcmN1aXQuZ2F0ZXNbMF0ubGVuZ3RoOyBjb2wrKykge1xuXHRcdHZhciBnYXRlcyA9IGNpcmN1aXQuZ2V0R2F0ZXNBdENvbHVtbihjb2wpO1xuXHRcdGdhdGVzLm1hcChmdW5jdGlvbihnKSB7XG5cdFx0XHRzZWxmLmFkZEdhdGUoZy5uYW1lLCBkZXN0Q29sLCBnLndpcmVzLCBnLm9wdGlvbnMpO1xuXHRcdH0pO1xuXHRcdGRlc3RDb2wrKztcblx0fVxuXG5cdHJldHVybiBjaXJjdWl0O1xufTtcblxuXG4vL1xuLy8gQ29udmVydCB0aGlzIGNpcmN1aXQgdG8gY3VzdG9tIGdhdGVcbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jb252ZXJ0VG9DdXN0b21HYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGRlY29tcG9zZSwgYWRkVG9DaXJjdWl0KSB7XG5cdC8vIHJlbW92ZSBtZWFzdXJlbWVudCBhbmQgY2xhc3NpY2FsIGNvbnRyb2xcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIG1lYXN1cmVtZW50XG5cdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSA9IG51bGw7XG5cdFx0XHRcdFx0Z2F0ZSA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHQvLyByZW1vdmUgY29uZGl0aW9uc1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl0ub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZW1vdmUgY3JlZ3Ncblx0dGhpcy5jcmVncyA9IHt9O1xuXG5cdHZhciBzb3VyY2UgPSB0aGlzLnNhdmUoZGVjb21wb3NlKTtcblx0aWYoc291cmNlLm9wdGlvbnMpIHtcblx0XHRzb3VyY2Uub3B0aW9ucy5oeWJyaWQgPSBmYWxzZTtcblx0XHRpZihzb3VyY2Uub3B0aW9ucy5oeWJyaWRPcHRpb25zKSB7XG5cdFx0XHRkZWxldGUgc291cmNlLm9wdGlvbnMuaHlicmlkT3B0aW9ucztcblx0XHR9XG5cdH1cblxuXHR0aGlzLmNsZWFyKCk7XG5cdHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdID0gc291cmNlO1xuXG5cdGlmKGFkZFRvQ2lyY3VpdCkge1xuXHRcdHZhciB3aXJlcyA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHR3aXJlcy5wdXNoKGkpO1xuXHRcdH1cblxuXHRcdHZhciBnYXRlT3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV0ub3B0aW9ucykpO1xuXG5cdFx0dGhpcy5hZGRHYXRlKGdhdGVOYW1lLCAtMSwgd2lyZXMsIGdhdGVPcHRpb25zKTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLnJlbW92ZVRyYWlsaW5nUm93cygpO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUudmFsaWRDdXN0b21HYXRlTmFtZSA9IGZ1bmN0aW9uKGJhc2VOYW1lKSB7XG5cdGJhc2VOYW1lID0gKGJhc2VOYW1lIHx8IFwic3ViXCIpICsgXCJcIjtcblxuXHR2YXIgY3VzdG9tR2F0ZU5hbWVzID0gW107XG5cdGlmKHRoaXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRpZighdGhpcy5iYXNpY0dhdGVzW2Jhc2VOYW1lXSkge1xuXHRcdFx0aWYoIXRoaXMuY3VzdG9tR2F0ZXNbYmFzZU5hbWVdKSB7XG5cdFx0XHRcdHJldHVybiBiYXNlTmFtZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IodmFyIGdhdGVOYW1lIGluIHRoaXMuYmFzaWNHYXRlcykge1xuXHRcdFx0Y3VzdG9tR2F0ZU5hbWVzLnB1c2goZ2F0ZU5hbWUpO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5jdXN0b21HYXRlcykge1xuXHRcdFx0Y3VzdG9tR2F0ZU5hbWVzLnB1c2goZ2F0ZU5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBpbmRleCA9IDA7XG5cdHZhciB2YWxpZE5hbWUgPSBcIlwiO1xuXHRkbyB7XG5cdFx0aW5kZXgrKztcblx0XHR2YWxpZE5hbWUgPSBiYXNlTmFtZSArIGluZGV4O1xuXHR9IHdoaWxlKGN1c3RvbUdhdGVOYW1lcy5pbmRleE9mKHZhbGlkTmFtZSkgPj0gMCk7XG5cblx0cmV0dXJuIHZhbGlkTmFtZTtcbn07XG5cblxuLy9cbi8vIFNwbGl0IGNpcmN1aXQgaW50byBjb21wb3NpdGUgZ2F0ZXMsIGVhY2ggb2YgXCJibG9ja1NpemVcIiBxdWJpdHNcbi8vXG4vLyBPcHRpb25zOlxuLy8gICB7XG4vLyAgICAgIGZsZXhpYmxlQmxvY2tTaXplOiBib29sIC8vIEFsbG93IGxhcmdlciBibG9ja3MgZm9yIGdhdGVzIHdpdGggbW9yZSBxdWJpdHMgdGhhbiBibG9jayBzaXplXG4vLyAgICAgIHZlcnRpY2FsT25seTogYm9vbCAvLyBEb24ndCBleHRlbmQgYmxvY2tzIGhvcml6b250YWxseVxuLy8gICB9XG4vL1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc3BsaXRJbnRvQmxvY2tzID0gZnVuY3Rpb24oYmxvY2tTaXplLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBibG9ja3MgPSBbXTtcblx0dmFyIHByZXZDb25kaXRpb24gPSBcInt9XCI7XG5cdHZhciBwcmV2SXNVbml0YXJ5ID0gdHJ1ZTtcblxuXHR2YXIgY3VycmVudEJsb2NrID0gbnVsbDtcblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHR2YXIgbnVtQ29scyA9IGRlY29tcG9zZWQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCAmJiAhZ2F0ZS5hZGRlZFRvQmxvY2spIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0dmFyIGN1cnJlbnRDb25kaXRpb24gPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA/IEpTT04uc3RyaW5naWZ5KGdhdGUub3B0aW9ucy5jb25kaXRpb24pIDogXCJ7fVwiO1xuXHRcdFx0XHR2YXIgY3VycmVudElzVW5pdGFyeSA9IGdhdGVEZWYgJiYgISEoZ2F0ZURlZi5tYXRyaXggJiYgZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKTtcblxuXHRcdFx0XHR2YXIgbmV3V2lyZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRCbG9jayA/IGN1cnJlbnRCbG9jay53aXJlcyA6IFtdKSk7XG5cdFx0XHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdFx0XHRpZihuZXdXaXJlcy5pbmRleE9mKHdpcmUpIDwgMCkge1xuXHRcdFx0XHRcdFx0bmV3V2lyZXMucHVzaCh3aXJlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmKFxuXHRcdFx0XHRcdCFibG9ja3MubGVuZ3RoIHx8XG5cdFx0XHRcdFx0IShjdXJyZW50Q29uZGl0aW9uID09IHByZXZDb25kaXRpb24pIHx8XG5cdFx0XHRcdFx0IWN1cnJlbnRJc1VuaXRhcnkgfHxcblx0XHRcdFx0XHQhcHJldklzVW5pdGFyeSB8fFxuXHRcdFx0XHRcdCEobmV3V2lyZXMubGVuZ3RoIDw9IGJsb2NrU2l6ZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y3VycmVudEJsb2NrID0ge1xuXHRcdFx0XHRcdFx0d2lyZXM6IGdhdGUud2lyZXMsXG5cdFx0XHRcdFx0XHRnYXRlczogW2dhdGVdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRibG9ja3MucHVzaChjdXJyZW50QmxvY2spO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24pIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRCbG9jay5jb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjdXJyZW50QmxvY2sud2lyZXMgPSBuZXdXaXJlcztcblx0XHRcdFx0XHRjdXJyZW50QmxvY2suZ2F0ZXMucHVzaChnYXRlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKHd3KSB7XG5cdFx0XHRcdFx0ZGVjb21wb3NlZC5nYXRlc1t3d11bY29sdW1uXS5hZGRlZFRvQmxvY2sgPSB0cnVlO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRwcmV2Q29uZGl0aW9uID0gY3VycmVudENvbmRpdGlvbjtcblx0XHRcdFx0cHJldklzVW5pdGFyeSA9IGN1cnJlbnRJc1VuaXRhcnk7XG5cblx0XHRcdFx0aWYoIW9wdGlvbnMudmVydGljYWxPbmx5KSB7XG5cdFx0XHRcdFx0Ly8gdHJ5IHRvIGV4dGVuZCB0aGUgYmxvY2sgaG9yaXpvbnRhbGx5XG5cdFx0XHRcdFx0dmFyIGV4dENvbHVtbiA9IGNvbHVtbiArIDE7XG5cdFx0XHRcdFx0dmFyIGV4dFdpcmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjdXJyZW50QmxvY2sud2lyZXMpKTtcblx0XHRcdFx0XHRleHRXaXJlcy5zb3J0KCk7XG5cdFx0XHRcdFx0d2hpbGUoZXh0Q29sdW1uIDwgbnVtQ29scyAmJiBleHRXaXJlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGV4dFdpcmUgPSBleHRXaXJlc1swXTtcblxuXHRcdFx0XHRcdFx0d2hpbGUoZXh0V2lyZXMubGVuZ3RoICYmIGV4dFdpcmUgPD0gZXh0V2lyZXNbZXh0V2lyZXMubGVuZ3RoIC0gMV0pIHtcblx0XHRcdFx0XHRcdFx0dmFyIGV4dEdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChleHRDb2x1bW4sIGV4dFdpcmUpO1xuXHRcdFx0XHRcdFx0XHRpZihleHRHYXRlICYmICFleHRHYXRlLmFkZGVkVG9CbG9jaykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBleHRHYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2V4dEdhdGUubmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dENvbmRpdGlvbiA9IGV4dEdhdGUub3B0aW9ucyAmJiBleHRHYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gSlNPTi5zdHJpbmdpZnkoZXh0R2F0ZS5vcHRpb25zLmNvbmRpdGlvbikgOiBcInt9XCI7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dElzVW5pdGFyeSA9IGV4dEdhdGVEZWYgJiYgISEoZXh0R2F0ZURlZi5tYXRyaXggJiYgZXh0R2F0ZURlZi5tYXRyaXgubGVuZ3RoKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgZ2F0ZSBpcyB2YWxpZCBmb3IgYmxvY2tcblx0XHRcdFx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlVmFsaWQgPSBleHRJc1VuaXRhcnkgJiYgKGV4dENvbmRpdGlvbiA9PSBjdXJyZW50Q29uZGl0aW9uKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGFsbCBnYXRlJ3Mgd2lyZXMgYXJlIGluc2lkZSBibG9ja1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVWYWxpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IDA7IHd3IDwgZXh0R2F0ZS53aXJlcy5sZW5ndGg7IHd3KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXh0V2lyZXMuaW5kZXhPZihleHRHYXRlLndpcmVzW3d3XSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVZhbGlkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlVmFsaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGFkZCBnYXRlIHRvIGJsb2NrXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50QmxvY2suZ2F0ZXMucHVzaChleHRHYXRlKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0ZXh0R2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od3cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlZC5nYXRlc1t3d11bZXh0Q29sdW1uXS5hZGRlZFRvQmxvY2sgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlbW92ZSBnYXRlJ3Mgd2lyZXMgZnJvbSBzY2FuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsaWRFeHRXaXJlcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IDA7IHd3IDwgZXh0V2lyZXMubGVuZ3RoOyB3dysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBleHRXID0gZXh0V2lyZXNbd3ddO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihleHRHYXRlLndpcmVzLmluZGV4T2YoZXh0VykgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsaWRFeHRXaXJlcy5wdXNoKGV4dFcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRleHRXaXJlcyA9IHZhbGlkRXh0V2lyZXM7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIGdvdG8gbmV4dCB2YWxpZCB3aXJlXG5cdFx0XHRcdFx0XHRcdGlmKGV4dFdpcmVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdFeHRXaXJlID0gZXh0V2lyZXNbZXh0V2lyZXMubGVuZ3RoIC0gMV0gKyAxO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgd3cgPSBleHRXaXJlcy5sZW5ndGggLSAxOyB3dyA+PSAwOyB3dy0tKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0VyA9IGV4dFdpcmVzW3d3XTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGV4dFcgPiBleHRXaXJlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5ld0V4dFdpcmUgPSBleHRXO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRleHRXaXJlID0gbmV3RXh0V2lyZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRleHRDb2x1bW4rKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdHZhciBibG9ja0NvdW50ZXIgPSAwO1xuXHRmb3IodmFyIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgYmxvY2tzLmxlbmd0aDsgYmxvY2tJbmRleCsrKSB7XG5cdFx0dmFyIGJsb2NrID0gYmxvY2tzW2Jsb2NrSW5kZXhdO1xuXG5cdFx0dmFyIGlzQmxvY2sgPSBmYWxzZTtcblx0XHRpZihibG9jay53aXJlcy5sZW5ndGggPD0gYmxvY2tTaXplIHx8ICEhb3B0aW9ucy5mbGV4aWJsZUJsb2NrU2l6ZSkge1xuXHRcdFx0Zm9yKHZhciB4ID0gMDsgeCA8IGJsb2NrLmdhdGVzLmxlbmd0aDsgeCsrKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gYmxvY2suZ2F0ZXNbeF07XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cblx0XHRcdFx0aWYoZ2F0ZURlZi5tYXRyaXggJiYgZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aXNCbG9jayA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihpc0Jsb2NrKSB7XG5cdFx0XHRibG9ja0NvdW50ZXIrKztcblxuXHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBibG9jay5nYXRlcy5sZW5ndGg7IHgrKykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IGJsb2NrLmdhdGVzW3hdO1xuXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jb25kaXRpb24pIHtcblx0XHRcdFx0XHRkZWxldGUgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFVwZGF0ZSBnYXRlIHdpcmVzXG5cdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXHRcdFx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbih3aXJlKSB7XG5cdFx0XHRcdFx0d2lyZXMucHVzaChibG9jay53aXJlcy5pbmRleE9mKHdpcmUpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGdhdGUud2lyZXMgPSB3aXJlcztcblxuXHRcdFx0XHQvLyBhZGQgZ2F0ZSB0byBjdXN0b20gZ2F0ZVxuXHRcdFx0XHRjdXN0b21HYXRlLmFwcGVuZEdhdGUoZ2F0ZS5uYW1lLCB3aXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcmVnaXN0ZXIgY3VzdG9tIGdhdGVcblx0XHRcdHZhciBjdXN0b21HYXRlTmFtZSA9IFwiYmxvY2tcIiArIGJsb2NrQ291bnRlcjtcblx0XHRcdGNpcmN1aXQucmVnaXN0ZXJHYXRlKGN1c3RvbUdhdGVOYW1lLCBjdXN0b21HYXRlKTtcblxuXHRcdFx0Ly8gYWRkIGN1c3RvbSBnYXRlIHRvIGNpcmN1aXRcblx0XHRcdHZhciBjdXN0b21HYXRlT3B0aW9ucyA9IHt9O1xuXHRcdFx0aWYoYmxvY2suY29uZGl0aW9uKSB7XG5cdFx0XHRcdGN1c3RvbUdhdGVPcHRpb25zLmNvbmRpdGlvbiA9IGJsb2NrLmNvbmRpdGlvbjtcblx0XHRcdH1cblx0XHRcdGNpcmN1aXQuYXBwZW5kR2F0ZShjdXN0b21HYXRlTmFtZSwgYmxvY2sud2lyZXMsIGN1c3RvbUdhdGVPcHRpb25zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gLS0tXG5cdFx0XHQvLyBhZGQgb3JpZ2luYWwgZ2F0ZSAobm9uLXVuaXRhcnkgZ2F0ZXMgW2FuZCBnYXRlcyB3aXRoIG1vcmUgdGhhbiBibG9ja1NpemUgd2lyZXMgaWYgYWxsb3dGbGV4aWJsZUJsb2NrU2l6ZSA9IGZhbHNlXSlcblx0XHRcdC8vIC0tLVxuXHRcdFx0YmxvY2suZ2F0ZXMubWFwKGZ1bmN0aW9uKGdhdGUpIHtcblx0XHRcdFx0Y2lyY3VpdC5hcHBlbmRHYXRlKGdhdGUubmFtZSwgZ2F0ZS53aXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMubG9hZChjaXJjdWl0LnNhdmUoZmFsc2UpKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnVzZWRHYXRlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cdHZhciB1c2VkID0gW107XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBkZWNvbXBvc2VkLm51bUNvbHMoKTsgY29sKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nYXRlc1t3aXJlXVtjb2xdO1xuXHRcdFx0aWYoZ2F0ZSAmJiB1c2VkLmluZGV4T2YoZ2F0ZS5uYW1lKSA8IDApIHtcblx0XHRcdFx0dmFyIHNraXBHYXRlID0gZmFsc2U7XG5cblx0XHRcdFx0aWYob3B0aW9ucy51bml0YXJpZXNPbmx5KSB7XG5cdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGRlY29tcG9zZWQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRcdGlmKCFiYXNpY0dhdGUgfHwgIWJhc2ljR2F0ZS5tYXRyaXggfHwgIWJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRza2lwR2F0ZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIXNraXBHYXRlKSB7XG5cdFx0XHRcdFx0dXNlZC5wdXNoKGdhdGUubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDdXN0b20gZ2F0ZXNcblx0aWYoIW9wdGlvbnMubm9DdXN0b21HYXRlcykge1xuXHRcdGZvcih2YXIgY3VzdG9tR2F0ZU5hbWUgaW4gdGhpcy5jdXN0b21HYXRlcykge1xuXHRcdFx0dmFyIGN1c3RvbUdhdGUgPSB0aGlzLmN1c3RvbUdhdGVzW2N1c3RvbUdhdGVOYW1lXTtcblxuXHRcdFx0aWYodXNlZC5pbmRleE9mKGN1c3RvbUdhdGVOYW1lKSA8IDApIHtcblx0XHRcdFx0dXNlZC5wdXNoKGN1c3RvbUdhdGVOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdXNlZDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNvdW50T3BzID0gZnVuY3Rpb24ob2JqLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRvcHRpb25zLnNoYWxsb3cgPSBvcHRpb25zLnNoYWxsb3cgfHwgZmFsc2U7XG5cblx0aWYoIW9iaikge1xuXHRcdG9iaiA9IHRoaXM7XG5cdH1cblxuXHR2YXIgb3BzID0ge307XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBvYmouZ2F0ZXMubGVuZ3RoOyB3aXJlKyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG9iai5nYXRlc1t3aXJlXS5sZW5ndGg7IGNvbCsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IG9iai5nYXRlc1t3aXJlXVtjb2xdO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0aWYob3BzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRcdG9wc1tnYXRlLm5hbWVdKys7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9wc1tnYXRlLm5hbWVdID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0aWYob3BzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0rKztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG9wc1tnYXRlLm5hbWVdID0gMTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoIW9wdGlvbnMuc2hhbGxvdykge1xuXHRcdFx0XHRcdFx0XHR2YXIgc3ViT3BzID0gdGhpcy5jb3VudE9wcyhjdXN0b21HYXRlLCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdFx0Zm9yKHN1Yk5hbWUgaW4gc3ViT3BzKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYob3BzW3N1Yk5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcHNbc3ViTmFtZV0gKz0gc3ViT3BzW3N1Yk5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcHNbc3ViTmFtZV0gPSBzdWJPcHNbc3ViTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wcztcbn07XG5cblxuLy9cbi8vIFJldHVybnMgYXJyYXlzIG9mIHF1Yml0cyB3aGVyZSBnYXRlcyBhcmUgcHJlc2VudFxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDb3VwbGluZ01hcCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvdXBsaW5nTWFwID0gXCJcIjtcblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgZGVjb21wb3NlZC5udW1Db2xzKCk7IGNvbCsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGNvbCwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIHNraXBHYXRlID0gZmFsc2U7XG5cblx0XHRcdFx0aWYob3B0aW9ucy51bml0YXJpZXNPbmx5KSB7XG5cdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGRlY29tcG9zZWQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRcdGlmKCFiYXNpY0dhdGUgfHwgIWJhc2ljR2F0ZS5tYXRyaXggfHwgIWJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRza2lwR2F0ZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIXNraXBHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIHdpcmVzU3RyID0gSlNPTi5zdHJpbmdpZnkoZ2F0ZS53aXJlcyk7XG5cdFx0XHRcdFx0aWYoY291cGxpbmdNYXAuaW5kZXhPZih3aXJlc1N0cikgPCAwKSB7XG5cdFx0XHRcdFx0XHRpZihjb3VwbGluZ01hcCkge1xuXHRcdFx0XHRcdFx0XHRjb3VwbGluZ01hcCArPSBcIixcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvdXBsaW5nTWFwICs9IHdpcmVzU3RyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBKU09OLnBhcnNlKFwiW1wiICsgY291cGxpbmdNYXAgKyBcIl1cIik7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZURlZiA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbbmFtZV07XG5cdGlmKCFnYXRlRGVmKSB7XG5cdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV07XG5cdH1cblx0cmV0dXJuIGdhdGVEZWY7XG59O1xuXG4vLyAtLS1cbi8vIEltcG9ydCBmcm9tIFF1Yml0IFRvYXN0ZXJcbi8vIC0tLVxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmltcG9ydFJhdyA9IGZ1bmN0aW9uKGRhdGEsIGVycm9yQ2FsbGJhY2spIHtcblx0dmFyIG51bVF1Yml0cyA9IGRhdGEgPyAoZGF0YS5xdWJpdHMgfHwgMCkgOiAwO1xuXG5cdHRoaXMuaW5pdChudW1RdWJpdHMpO1xuXG5cdGlmKCFkYXRhKSB7XG5cdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0ZXJyb3JDYWxsYmFjayhbXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHQvLyBpbXBvcnQgY2xhc3NpY2FsIHJlZ2lzdGVyc1xuXHRpZihkYXRhLmNyZWdzKSB7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRhdGEuY3JlZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjcmVnID0gZGF0YS5jcmVnc1tpXTtcblxuXHRcdFx0aWYoIWNyZWcubmFtZSkge1xuXHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJDbGFzc2ljYWwgcmVnaXN0ZXIgXCIgKyBpICsgXCIgZG9lc24ndCBoYXZlIGEgXFxcIm5hbWVcXFwiLlwiO1xuXHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmNyZWF0ZUNyZWcoY3JlZy5uYW1lLCBjcmVnLmxlbiB8fCAwKTtcblx0XHR9XG5cdH1cblxuXHQvLyBpbXBvcnQgcHJvZ3JhbVxuXHRpZihkYXRhLnByb2dyYW0pIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5wcm9ncmFtLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRhdGEucHJvZ3JhbVtpXTtcblxuXHRcdFx0Ly8gSW1wb3J0IGZyb20gbWF0cml4IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIHNvIGJlc3Qgd2UgaGF2ZSBpcyBnYXRlIG5hbWVcblx0XHRcdC8vIENoZWNrIGlmIGdhdGUgaGFzIG5hbWVcblx0XHRcdGlmKCFnYXRlLm5hbWUpIHtcblx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiR2F0ZSBcIiArIGkgKyBcIiBkb2Vzbid0IGhhdmUgYSBcXFwibmFtZVxcXCIuIE5hbWUgaXMgb3B0aW9uYWwgYW5kIHRoaXMgaXMgT0sgZm9yIFF1Yml0VG9hc3RlciBidXQgd2UgY2Fubm90IGltcG9ydCBnYXRlIGZyb20gbWF0cml4LiBOb3QgaW1wbGVtZW50ZWQgeWV0LlwiO1xuXHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiBnYXRlIG5hbWUgZXhpc3RzIGluIHRoaXMuYmFzaWNHYXRlc1xuXHRcdFx0dmFyIGJhc2ljR2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJVbmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLiBOYW1lIGlzIG9wdGlvbmFsIGFuZCB0aGlzIGlzIE9LIGZvciBRdWJpdFRvYXN0ZXIgYnV0IHdlIGNhbm5vdCBpbXBvcnQgZ2F0ZSBmcm9tIG1hdHJpeC4gV2UgY2FuIGltcG9ydCBvbmx5IGdhdGVzIGJ5IG5hbWUgZnJvbSBzZXQgb2Yga25vd24gZ2F0ZXMuXCI7XG5cdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblxuXHRcdFx0dmFyIHdpcmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnYXRlLndpcmVzIHx8IFtdKSk7XG5cdFx0XHR2YXIgb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZS5vcHRpb25zIHx8IHt9KSk7XG5cblx0XHRcdC8vIGNoZWNrIGlmIG51bWJlciBvZiB3aXJlcyBpcyBjb3JyZWN0XG5cdFx0XHR2YXIgYmFzaWNHYXRlUXViaXRzID0gYmFzaWNHYXRlLm1hdHJpeCAmJiBiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCA/IG1hdGgubG9nMihiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCkgOiAxO1xuXHRcdFx0aWYod2lyZXMubGVuZ3RoICE9IGJhc2ljR2F0ZVF1Yml0cykge1xuXHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJHYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIiBoYXMgXCIgKyB3aXJlcy5sZW5ndGggKyBcIiB3aXJlcyBidXQgc2hvdWxkIGhhdmUgXCIgKyBiYXNpY0dhdGVRdWJpdHMgKyBcIiB3aXJlcy5cIjtcblx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIHByZXNlbnRcblx0XHRcdGlmKGJhc2ljR2F0ZS5wYXJhbXMgJiYgYmFzaWNHYXRlLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0aWYoIW9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiTWlzc2luZyBwYXJhbWV0ZXJzIGZvciBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi4gRXhwZWN0aW5nIFwiICsgYmFzaWNHYXRlLnBhcmFtcy5sZW5ndGggKyBcIiBwYXJhbWV0ZXJzLlwiO1xuXHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IGJhc2ljR2F0ZS5wYXJhbXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gYmFzaWNHYXRlLnBhcmFtc1twXTtcblxuXHRcdFx0XHRcdGlmKHR5cGVvZiBvcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIk1pc3NpbmcgcGFyYW1ldGVyIFxcXCJcIiArIHBhcmFtTmFtZSArIFwiXFxcIiBmb3IgZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuYXBwZW5kR2F0ZShnYXRlLm5hbWUsIHdpcmVzLCBvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGVycm9yIGhhbmRsaW5nIGlzIGNyKnAgYnV0IGxldCdzIGJlIGNvbnNpc3RlbnQgd2l0aCBpbXBvcnRRQVNNKCkgZm9yIG5vd1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhbXSk7XG5cdH1cbn07XG5cbi8vIC0tLVxuLy8gRXhwb3J0IHRvIFF1Yml0IFRvYXN0ZXJcbi8vIC0tLVxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFJhdyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdHZhciBnbG9iYWxQYXJhbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdsb2JhbFBhcmFtcykpO1xuXHRmb3IodmFyIGdsb2JhbFBhcmFtTmFtZSBpbiBnbG9iYWxQYXJhbXMpIHtcblx0XHRnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHR9XG5cblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0dmFyIG51bUNvbHMgPSBkZWNvbXBvc2VkLm51bUNvbHMoKTtcblx0dmFyIHNlcXVlbmNlID0gW107XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBndCA9IGRlY29tcG9zZWQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRpZighZ3QpIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlVua25vd24gZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuXCIpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciByYXdHYXRlID0gZGVjb21wb3NlZC5nZXRSYXdHYXRlKGd0LCBnYXRlLm9wdGlvbnMpO1xuXG5cdFx0XHRcdHZhciByYXdNYXRyaXggPSBbXTtcblx0XHRcdFx0cmF3R2F0ZS5tYXAoZnVuY3Rpb24ocm93KSB7XG5cdFx0XHRcdFx0dmFyIHJhd1JvdyA9IFtdO1xuXHRcdFx0XHRcdHJvdy5tYXAoZnVuY3Rpb24oY2VsbCkge1xuXHRcdFx0XHRcdFx0Y2VsbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2VsbCkpO1xuXHRcdFx0XHRcdFx0aWYodHlwZW9mIGNlbGwgPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRpZihjZWxsW1wibWF0aGpzXCJdICYmIHR5cGVvZiBjZWxsW1wibWF0aGpzXCJdID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRjZWxsW1widHlwZVwiXSA9IGNlbGxbXCJtYXRoanNcIl0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgY2VsbC5tYXRoanM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJhd1Jvdy5wdXNoKGNlbGwpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJhd01hdHJpeC5wdXNoKHJhd1Jvdyk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHZhciBvcHRpb25zID0ge307XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHRcdG9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdhdGUub3B0aW9ucykpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYob3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRmb3IodmFyIHBhcmFtTmFtZSBpbiBvcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUob3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSwgZ2xvYmFsUGFyYW1zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZXF1ZW5jZS5wdXNoKHtcblx0XHRcdFx0XHRuYW1lOiBnYXRlLm5hbWUsXG5cdFx0XHRcdFx0bWF0cml4OiByYXdNYXRyaXgsXG5cdFx0XHRcdFx0d2lyZXM6IGdhdGUud2lyZXMsXG5cdFx0XHRcdFx0b3B0aW9uczogb3B0aW9uc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgY3JlZ3MgPSBbXTtcblx0Zm9yKHZhciBjcmVnIGluIGRlY29tcG9zZWQuY3JlZ3MpIHtcblx0XHRjcmVncy5wdXNoKHtcblx0XHRcdG5hbWU6IGNyZWcsXG5cdFx0XHRsZW46IGRlY29tcG9zZWQuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDBcblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0cXViaXRzOiBkZWNvbXBvc2VkLm51bVF1Yml0cyxcblx0XHRjcmVnczogY3JlZ3MsXG5cdFx0cHJvZ3JhbTogc2VxdWVuY2Vcblx0fTtcbn07XG5cbi8vXG4vLyBSZXR1cm5zIGlucHV0IGZpbGUgZm9yIFF1YW50dW0gR2VuZXJhdG9yXG4vL1xuLy8gb3B0aW9uczogeyBcbi8vICAgICBub1ZlY3RvcnM6IGJvb2wgKGRlZmF1bHQ6IGZhbHNlKSAvLyBzZXQgdHJ1ZSBmb3IgdHJhbnNwaWxpbmcgd2l0aCBcInJlcGxhY2VfYmxvY2tzXCIgJiBcInJlcGxhY2VfZ2F0ZXNcIiBtZXRob2RzIHRvIGF2b2lkIGdlbmVyYXRpbmcgKGxhcmdlKSB2ZWN0b3JzXG4vLyAgICAgZnJvbU1hdHJpeDogYm9vbCAoZGVmYXVsdDogZmFsc2UpIC8vIGRpcmVjdGx5IHNlbmQgbWF0cml4IHRvIGdlbmVyYXRvciAoaW5zdGVhZCB2ZWN0b3JzKVxuLy8gICAgIG51bVNhbXBsZXM6IGludCAoZGVmYXVsdDogYXV0bykgLy8gbnVtYmVyIG9mIHJhbmRvbSB2ZWN0b3JzXG4vLyAgICAgdXNlR2F0ZXM6IGFycmF5IG9mIHN0cmluZyAoZGVmYXVsdDogW1widTMsIFwiY3hcIl0pIC8vIGdhdGVzIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgcmFuZG9tIHZlY3RvcnNcbi8vIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb0dlbmVyYXRvciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIHFhc20gPSB0aGlzLmV4cG9ydFFBU00obnVsbCwgZmFsc2UsIG51bGwsIGZhbHNlLCB0cnVlKTtcblx0dmFyIHVzZWRHYXRlcyA9IHRoaXMudXNlZEdhdGVzKHsgbm9DdXN0b21HYXRlczogdHJ1ZSwgdW5pdGFyaWVzT25seTogdHJ1ZSB9KTtcblx0dmFyIGNvdXBsaW5nTWFwID0gdGhpcy5nZXRDb3VwbGluZ01hcCh7IHVuaXRhcmllc09ubHk6IHRydWUgfSk7XG5cblx0dmFyIG91dHB1dCA9IHtcblx0XHRzb3VyY2U6IHsgXG5cdFx0XHRjaXJjdWl0OiB7IFxuXHRcdFx0XHRxYXNtOiBxYXNtXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHByb2JsZW06IFtdLFxuXG5cdFx0dHlwZTogXCJjaXJjdWl0XCIsXG5cblx0XHRzZXR0aW5nczoge1xuXHRcdFx0YWxsb3dlZF9nYXRlczogdXNlZEdhdGVzLmpvaW4oXCIsXCIpLFxuXHRcdFx0Y291cGxpbmdfbWFwOiBjb3VwbGluZ01hcFxuXHRcdH1cblx0fTtcblxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHRpZihvcHRpb25zLmZyb21NYXRyaXgpIHtcblx0XHR2YXIgbWF0cml4ID0gY2lyY3VpdC5jaXJjdWl0TWF0cml4KCk7XG5cdFx0dmFyIHVuaXRhcnkgPSBbXTtcblxuXHRcdG1hdHJpeC5tYXAoZnVuY3Rpb24ocm93KSB7XG5cdFx0XHRyb3cubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRcdGlmKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0dW5pdGFyeS5wdXNoKFt2YWx1ZS5yZSwgdmFsdWUuaW1dKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1bml0YXJ5LnB1c2godmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdG91dHB1dC5wcm9ibGVtLnB1c2goe1xuXHRcdFx0dW5pdGFyeTogdW5pdGFyeVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdGlmKCFvcHRpb25zLm5vVmVjdG9ycykge1xuXHRcdHZhciBzdGF0ZUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHRcdHZhciBudW1TYW1wbGVzID0gb3B0aW9ucy5udW1TYW1wbGVzIHx8ICh0aGlzLm51bVF1Yml0cyA8IDMgPyA4IDogKHRoaXMubnVtUXViaXRzIDwgNSA/ICgoMSA8PCB0aGlzLm51bVF1Yml0cykgKyAxKSA6ICh0aGlzLm51bVF1Yml0cyA8IDkgPyAodGhpcy5udW1RdWJpdHMgKiA0KSA6IHRoaXMubnVtUXViaXRzKSkpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1TYW1wbGVzICsgMTsgaSsrKSB7XG5cblx0XHRcdHZhciBzZXQgPSB7IGlucHV0OiBbXSwgb3V0cHV0OiBbXSB9O1xuXG5cdFx0XHR2YXIgaW5pdGlhbFZlY3RvciA9IFtdO1xuXG5cdFx0XHRpZihpID4gMCkge1xuXHRcdFx0XHRzdGF0ZUNpcmN1aXQucmFuZG9tQ2lyY3VpdCh0aGlzLm51bVF1Yml0cywgMjAsIHsgdXNlR2F0ZXM6IG9wdGlvbnMudXNlR2F0ZXMgfHwgW1widTNcIiwgXCJjeFwiXSwgbm9DbGFzc2ljQ29udHJvbDogdHJ1ZSwgbm9NZWFzdXJlOiB0cnVlLCBub1Jlc2V0OiB0cnVlIH0pO1xuXHRcdFx0XHRzdGF0ZUNpcmN1aXQucnVuKCk7XG5cblx0XHRcdFx0c3RhdGVDaXJjdWl0LnN0YXRlQXNBcnJheSgpLm1hcChmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0XHRcdHNldC5pbnB1dC5wdXNoKFsgc3RhdGUuYW1wbGl0dWRlLnJlLCBzdGF0ZS5hbXBsaXR1ZGUuaW0gXSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGluaXRpYWxWZWN0b3IgPSBzdGF0ZUNpcmN1aXQuc3RhdGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjaXJjdWl0LmluaXRTdGF0ZSgpO1xuXG5cdFx0XHRcdGNpcmN1aXQuc3RhdGVBc0FycmF5KCkubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHRcdFx0c2V0LmlucHV0LnB1c2goWyBzdGF0ZS5hbXBsaXR1ZGUucmUsIHN0YXRlLmFtcGxpdHVkZS5pbSBdKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aW5pdGlhbFZlY3RvciA9IGNpcmN1aXQuc3RhdGU7XG5cdFx0XHR9XG5cblx0XHRcdGNpcmN1aXQucnVuKG51bGwsIHsgaW5pdGlhbFN0YXRlOiBpbml0aWFsVmVjdG9yIH0pO1xuXG5cdFx0XHRjaXJjdWl0LnN0YXRlQXNBcnJheSgpLm1hcChmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0XHRzZXQub3V0cHV0LnB1c2goWyBzdGF0ZS5hbXBsaXR1ZGUucmUsIHN0YXRlLmFtcGxpdHVkZS5pbSBdKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvdXRwdXQucHJvYmxlbS5wdXNoKHNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH1cblxuXHRyZXR1cm4gb3V0cHV0O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKGRlY29tcG9zZSwgbGlnaHR3ZWlnaHQpIHtcblx0dGhpcy51cGRhdGVHbG9iYWxQYXJhbXMoKTtcblxuXHR2YXIgZGF0YSA9IHtcblx0XHRudW1RdWJpdHM6IHRoaXMubnVtUXViaXRzLFxuXHRcdHBhcmFtczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFtcykpLFxuXHRcdG9wdGlvbnM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zKSksXG5cdFx0Z2F0ZXM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5nYXRlcykpLFxuXHRcdGN1c3RvbUdhdGVzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3VzdG9tR2F0ZXMpKSxcblx0XHRjcmVnczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNyZWdzKSlcblx0fVxuXG5cdHZhciByZXMgPSBudWxsO1xuXHRpZihkZWNvbXBvc2UpIHtcblx0XHRyZXMgPSB0aGlzLmRlY29tcG9zZShkYXRhKTtcblx0fSBlbHNlIHtcblx0XHRyZXMgPSBkYXRhO1xuXHR9XG5cblx0Ly8gLS0tXG5cdC8vIHJlbW92ZSBJZCBmcm9tIGdhdGVzP1xuXHQvLyAtLS1cblx0aWYobGlnaHR3ZWlnaHQpIHtcblx0XHRpZihyZXMuZ2F0ZXMpIHtcblx0XHRcdHJlcy5nYXRlcy5tYXAoZnVuY3Rpb24ocm93KSB7XG5cdFx0XHRcdGlmKHJvdykge1xuXHRcdFx0XHRcdHJvdy5tYXAoZnVuY3Rpb24oY2VsbCkge1xuXHRcdFx0XHRcdFx0aWYoY2VsbCAmJiBjZWxsLmlkKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBjZWxsLmlkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZihyZXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRcdGZvcih2YXIgY3VzdG9tR2F0ZU5hbWUgaW4gcmVzLmN1c3RvbUdhdGVzKSB7XG5cdFx0XHRcdHZhciBjdXN0b21HYXRlID0gcmVzLmN1c3RvbUdhdGVzW2N1c3RvbUdhdGVOYW1lXTtcblx0XHRcdFx0aWYoY3VzdG9tR2F0ZSAmJiBjdXN0b21HYXRlLmdhdGVzKSB7XG5cdFx0XHRcdFx0Y3VzdG9tR2F0ZS5nYXRlcy5tYXAoZnVuY3Rpb24ocm93KSB7XG5cdFx0XHRcdFx0XHRpZihyb3cpIHtcblx0XHRcdFx0XHRcdFx0cm93Lm1hcChmdW5jdGlvbihjZWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY2VsbCAmJiBjZWxsLmlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZWxldGUgY2VsbC5pZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIC0tLVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uKG9iaikge1xuXHR0aGlzLm51bVF1Yml0cyA9IG9iai5udW1RdWJpdHMgfHwgMTtcblx0dGhpcy5jbGVhcigpO1xuXHR0aGlzLnBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLnBhcmFtcyB8fCBbXSkpO1xuXHR0aGlzLm9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iai5vcHRpb25zIHx8IHt9KSk7XG5cdHRoaXMuZ2F0ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iai5nYXRlcyB8fCBbXSkpO1xuXHR0aGlzLmN1c3RvbUdhdGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmouY3VzdG9tR2F0ZXMgfHwge30pKTtcblx0dGhpcy5jcmVncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLmNyZWdzIHx8IHt9KSk7XG5cdC8vIGRlZmF1bHQgb3B0aW9uc1xuXHR0aGlzLm9wdGlvbnMucGFyYW1zID0gdGhpcy5vcHRpb25zLnBhcmFtcyB8fCB7fTtcblx0dGhpcy5vcHRpb25zLmh5YnJpZCA9IHRoaXMub3B0aW9ucy5oeWJyaWQgfHwgZmFsc2U7XG5cdGlmKCF0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucykge1xuXHRcdHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zID0gdGhpcy5kZWZhdWx0SHlicmlkT3B0aW9ucygpO1xuXHR9XG59O1xuXG5cbnZhciBnZW5lcmF0ZUdyYXlDb2RlID0gZnVuY3Rpb24obnVtQml0cykge1xuXHRpZihudW1CaXRzIDw9IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2VuZXJhdGUgdGhlIGdyYXkgY29kZSBmb3IgbGVzcyB0aGFuIDEgYml0LlwiKTtcblx0fVxuXG5cdHZhciByZXN1bHQgPSBbMF07XG5cdGZvcihpID0gMDsgaSA8IG51bUJpdHM7IGkrKykge1xuXHRcdHZhciByZXZlcnNlZCA9IFtdLmNvbmNhdChyZXN1bHQpLnJldmVyc2UoKTtcblx0XHRyZXZlcnNlZC5tYXAoZnVuY3Rpb24oeCkge1xuXHRcdFx0cmVzdWx0LnB1c2goeCArIG1hdGgucG93KDIsIGkpKTtcblx0XHR9KTtcblx0fVxuXG5cdHZhciBncmF5ID0gW107XG5cdHJlc3VsdC5tYXAoZnVuY3Rpb24oZGVjKSB7XG5cdFx0Z3JheS5wdXNoKGJpblN0cihkZWMsIG51bUJpdHMpKTtcblx0fSk7XG5cblx0cmV0dXJuIGdyYXk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ncmF5Q29kZUNoYWluID0gZnVuY3Rpb24obnVtQ3RybFF1Yml0cywgZ2F0ZU5hbWUsIGdhdGVPcHRpb25zKSB7XG5cblx0ZnVuY3Rpb24gY29tcGFyZVN0cmluZ3MoczEsIHMyKSB7XG5cdFx0dmFyIGNvbXAgPSBbXTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgczEubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbXAucHVzaChzMVtpXSAhPSBzMltpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21wO1xuXHR9XG5cblx0ZnVuY3Rpb24gaW5kaWNlc09mQ2hhcihzLCBjaCkge1xuXHRcdHZhciBpbmRpY2VzID0gW107XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKHNbaV0gPT0gY2gpIHtcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gaW5kaWNlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGNvdW50Q2hhcihzLCBjaCkge1xuXHRcdHZhciBjb3VudCA9IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKHNbaV0gPT0gY2gpIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNvdW50O1xuXHR9XG5cblx0dmFyIHFDb250cm9scyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0czsgaSsrKSB7XG5cdFx0cUNvbnRyb2xzLnB1c2goaSk7XG5cdH1cblxuXHR2YXIgcVRhcmdldCA9IG51bUN0cmxRdWJpdHM7XG5cdHZhciBncmF5Q29kZSA9IGdlbmVyYXRlR3JheUNvZGUobnVtQ3RybFF1Yml0cyk7XG5cdHZhciBsYXN0UGF0dGVybiA9IG51bGw7XG5cblx0dmFyIHJ1bGVzID0gW107XG5cdGdyYXlDb2RlLm1hcChmdW5jdGlvbihwYXR0ZXJuKSB7XG5cdFx0dmFyIGxtUG9zID0gcGF0dGVybi5pbmRleE9mKFwiMVwiKTtcblx0XHRpZihsbVBvcyA+PSAwKSB7XG5cdFx0XHRpZighbGFzdFBhdHRlcm4pIHtcblx0XHRcdFx0bGFzdFBhdHRlcm4gPSBwYXR0ZXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgY29tcCA9IGNvbXBhcmVTdHJpbmdzKHBhdHRlcm4sIGxhc3RQYXR0ZXJuKTtcblx0XHRcdHZhciBwb3MgPSBjb21wLmluZGV4T2YodHJ1ZSk7XG5cdFx0XHRpZihwb3MgPj0gMCkge1xuXHRcdFx0XHRpZihwb3MgIT0gbG1Qb3MpIHtcblx0XHRcdFx0XHRydWxlcy5wdXNoKHsgZ2F0ZU5hbWU6IFwiY3hcIiwgd2lyZXM6IFsgcUNvbnRyb2xzW3Bvc10sIHFDb250cm9sc1tsbVBvc10gXSwgb3B0aW9uczogbnVsbCB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgaW5kaWNlcyA9IGluZGljZXNPZkNoYXIocGF0dGVybiwgXCIxXCIpO1xuXHRcdFx0XHRcdGZvcih2YXIgaWR4ID0gMTsgaWR4IDwgaW5kaWNlcy5sZW5ndGg7IGlkeCsrKSB7XG5cdFx0XHRcdFx0XHRydWxlcy5wdXNoKHsgZ2F0ZU5hbWU6IFwiY3hcIiwgd2lyZXM6IFsgcUNvbnRyb2xzW2luZGljZXNbaWR4XV0sIHFDb250cm9sc1tsbVBvc10gXSwgb3B0aW9uczogbnVsbCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYoIShjb3VudENoYXIocGF0dGVybiwgXCIxXCIpICUgMikpIHtcblx0XHRcdFx0Ly8gaW52ZXJzZVxuXHRcdFx0XHQvLyAhISFcblx0XHRcdFx0Ly8gV2FybmluZyAtIHRoaXMgd29ya3Mgb25seSB3aXRoIGdhdGUgd2hpY2ggaXMgb3duIGludmVyc2Vcblx0XHRcdFx0Ly8gVE9ETzogaW1wbGVtZW50IHByb3BlciBpbnZlcnNlIGZvciBhbGwgZ2F0ZXNcblx0XHRcdFx0Ly8gISEhXG5cdFx0XHRcdHZhciBpbnZlcnNlT3B0aW9ucyA9IG51bGw7XG5cdFx0XHRcdGlmKGdhdGVPcHRpb25zKSB7XG5cdFx0XHRcdFx0aW52ZXJzZU9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdhdGVPcHRpb25zKSk7XG5cdFx0XHRcdFx0aWYoaW52ZXJzZU9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRmb3Ioa2V5IGluIGludmVyc2VPcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHR2YXIgdmFsID0gaW52ZXJzZU9wdGlvbnMucGFyYW1zW2tleV07XG5cdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdFx0XHRcdHZhbCA9IDAgLSB2YWw7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsID0gXCItKFwiICsgdmFsICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aW52ZXJzZU9wdGlvbnMucGFyYW1zW2tleV0gPSB2YWw7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogZ2F0ZU5hbWUsIHdpcmVzOiBbIHFDb250cm9sc1tsbVBvc10sIHFUYXJnZXQgXSwgb3B0aW9uczogaW52ZXJzZU9wdGlvbnMgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRydWxlcy5wdXNoKHsgZ2F0ZU5hbWU6IGdhdGVOYW1lLCB3aXJlczogWyBxQ29udHJvbHNbbG1Qb3NdLCBxVGFyZ2V0IF0sIG9wdGlvbnM6IGdhdGVPcHRpb25zIH0pO1xuXHRcdFx0fVxuXHRcdFx0bGFzdFBhdHRlcm4gPSBwYXR0ZXJuO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJ1bGVzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuTUNVMUNpcmN1aXQgPSBmdW5jdGlvbihjdHJsUXViaXRzKSB7XG5cdHZhciBudW1DdHJsUXViaXRzID0gMDtcblx0dmFyIGludmVydENvbnRyb2xzID0gW107XG5cdGlmKHR5cGVvZiBjdHJsUXViaXRzID09IFwibnVtYmVyXCIpIHtcblx0XHRudW1DdHJsUXViaXRzID0gY3RybFF1Yml0cztcblx0fSBlbHNlIHtcblx0XHRudW1DdHJsUXViaXRzID0gY3RybFF1Yml0cy5sZW5ndGggfHwgMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZighY3RybFF1Yml0c1tpXSB8fCAodHlwZW9mIGN0cmxRdWJpdHNbaV0gPT0gXCJudW1iZXJcIiAmJiBjdHJsUXViaXRzW2ldIDwgMCkpIHtcblx0XHRcdFx0aW52ZXJ0Q29udHJvbHMucHVzaChpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihudW1DdHJsUXViaXRzID09IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIG11bHRpLWNvbnRyb2xsZWQgZ2F0ZSB3aXRoIHplcm8gY29udHJvbCBxdWJpdHMuXCIpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkWChjaXJjdWl0LCB3aXJlcykge1xuXHRcdHdpcmVzLm1hcChmdW5jdGlvbih3aXJlKSB7XG5cdFx0XHRjaXJjdWl0LmFwcGVuZEdhdGUoXCJ4XCIsIHdpcmUpO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIHNjYWxlZExhbWJkYSA9IFwibGFtYmRhIC8gXCIgKyBtYXRoLnBvdygyLCBudW1DdHJsUXViaXRzIC0gMSk7XG5cdHZhciBnYXRlT3B0aW9ucyA9IHsgcGFyYW1zOiB7IGxhbWJkYTogc2NhbGVkTGFtYmRhIH0gfTtcblxuXHR2YXIgcWMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHRpZihudW1DdHJsUXViaXRzID09IDEpIHtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cWMuYXBwZW5kR2F0ZShcImN1MVwiLCBbMCwgMV0sIGdhdGVPcHRpb25zKTtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cmV0dXJuIHFjO1xuXHR9XG5cblx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHR2YXIgcnVsZXMgPSB0aGlzLmdyYXlDb2RlQ2hhaW4obnVtQ3RybFF1Yml0cywgXCJjdTFcIiwgZ2F0ZU9wdGlvbnMpO1xuXHRydWxlcy5tYXAoZnVuY3Rpb24ocnVsZSkge1xuXHRcdHFjLmFwcGVuZEdhdGUocnVsZS5nYXRlTmFtZSwgcnVsZS53aXJlcywgcnVsZS5vcHRpb25zKTtcblx0fSk7XG5cdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblxuXHRyZXR1cm4gcWM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5NQ1hDaXJjdWl0ID0gZnVuY3Rpb24oY3RybFF1Yml0cykge1xuXHR2YXIgbnVtQ3RybFF1Yml0cyA9IDA7XG5cdHZhciBpbnZlcnRDb250cm9scyA9IFtdO1xuXHRpZih0eXBlb2YgY3RybFF1Yml0cyA9PSBcIm51bWJlclwiKSB7XG5cdFx0bnVtQ3RybFF1Yml0cyA9IGN0cmxRdWJpdHM7XG5cdH0gZWxzZSB7XG5cdFx0bnVtQ3RybFF1Yml0cyA9IGN0cmxRdWJpdHMubGVuZ3RoIHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUN0cmxRdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoIWN0cmxRdWJpdHNbaV0gfHwgKHR5cGVvZiBjdHJsUXViaXRzW2ldID09IFwibnVtYmVyXCIgJiYgY3RybFF1Yml0c1tpXSA8IDApKSB7XG5cdFx0XHRcdGludmVydENvbnRyb2xzLnB1c2goaSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIHFjID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgbXVsdGktY29udHJvbGxlZCBnYXRlIHdpdGggemVybyBjb250cm9sIHF1Yml0cy5cIik7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRYKGNpcmN1aXQsIHdpcmVzKSB7XG5cdFx0d2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdGNpcmN1aXQuYXBwZW5kR2F0ZShcInhcIiwgd2lyZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZihudW1DdHJsUXViaXRzID09IDEpIHtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cWMuYXBwZW5kR2F0ZShcImN4XCIsIFswLCAxXSk7XG5cdFx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRcdHJldHVybiBxYztcblx0fVxuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMikge1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRxYy5hcHBlbmRHYXRlKFwiY2N4XCIsIFswLCAxLCAyXSk7XG5cdFx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRcdHJldHVybiBxYztcblx0fVxuXG5cdHZhciBtY3UxID0gcWMuTUNVMUNpcmN1aXQobnVtQ3RybFF1Yml0cyk7XG5cdHZhciBtY3UxbmFtZSA9IFwibWN1MV9cIiArIG51bUN0cmxRdWJpdHM7XG5cdHZhciBtY3Uxd2lyZXMgPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUN0cmxRdWJpdHMgKyAxOyBpKyspIHtcblx0XHRtY3Uxd2lyZXMucHVzaChpKTtcblx0fVxuXG5cdHFjLnJlZ2lzdGVyR2F0ZShtY3UxbmFtZSwgbWN1MSk7XG5cdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0cWMuYXBwZW5kR2F0ZShcImhcIiwgbnVtQ3RybFF1Yml0cyk7XG5cdHFjLmFwcGVuZEdhdGUobWN1MW5hbWUsIG1jdTF3aXJlcywgeyBwYXJhbXM6IHsgbGFtYmRhOiBcInBpXCIgfX0pO1xuXHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdHFjLmFwcGVuZEdhdGUoXCJoXCIsIG51bUN0cmxRdWJpdHMpO1xuXG5cdHJldHVybiBxYztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlZ2lzdGVyR2F0ZSA9IGZ1bmN0aW9uKG5hbWUsIG9iaikge1xuXHRpZihvYmogaW5zdGFuY2VvZiBRdWFudHVtQ2lyY3VpdCkge1xuXHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0gPSBvYmouc2F2ZSgpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0gPSBvYmo7XG5cdH1cblxuXHRpZih0aGlzLmlzTXVsdGlDb250cm9sbGVkR2F0ZShuYW1lKSkge1xuXHRcdHZhciBtY0luZm8gPSB0aGlzLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lKG5hbWUpO1xuXHRcdGlmKG1jSW5mby5udW1DdHJsUXViaXRzICE9IHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0ubnVtUXViaXRzIC0gMSkge1xuXHRcdFx0bWNJbmZvLm51bUN0cmxRdWJpdHMgPSB0aGlzLmN1c3RvbUdhdGVzW25hbWVdLm51bVF1Yml0cyAtIDE7XG5cdFx0XHR2YXIgY3RybFF1Yml0cyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IG1jSW5mby5udW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRcdFx0Y3RybFF1Yml0cy5wdXNoKHR5cGVvZiBtY0luZm8uY3RybFF1Yml0c1tpXSA9PSBcInVuZGVmaW5lZFwiID8gdHJ1ZSA6IG1jSW5mby5jdHJsUXViaXRzW2ldKTtcblx0XHRcdH1cblx0XHRcdG1jSW5mby5jdHJsUXViaXRzID0gY3RybFF1Yml0cztcblx0XHR9XG5cblx0XHR2YXIgcm9vdEdhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbbWNJbmZvLnJvb3ROYW1lXTtcblx0XHRpZihyb290R2F0ZSAmJiByb290R2F0ZS5kcmF3aW5nSW5mbyAmJiByb290R2F0ZS5kcmF3aW5nSW5mby5jb25uZWN0b3JzKSB7XG5cdFx0XHRpZighdGhpcy5jdXN0b21HYXRlc1tuYW1lXS5kcmF3aW5nSW5mbykge1xuXHRcdFx0XHR0aGlzLmN1c3RvbUdhdGVzW25hbWVdLmRyYXdpbmdJbmZvID0ge307XG5cdFx0XHR9XG5cblx0XHRcdHZhciBjb25uZWN0b3JzID0gW107XG5cdFx0XHRtY0luZm8uY3RybFF1Yml0cy5tYXAoZnVuY3Rpb24oY3RybFF1Yml0KSB7XG5cdFx0XHRcdGlmKGN0cmxRdWJpdCkge1xuXHRcdFx0XHRcdGNvbm5lY3RvcnMucHVzaChcImRvdFwiKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25uZWN0b3JzLnB1c2goXCJuZG90XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbm5lY3RvcnMucHVzaChyb290R2F0ZS5kcmF3aW5nSW5mby5jb25uZWN0b3JzW3Jvb3RHYXRlLmRyYXdpbmdJbmZvLmNvbm5lY3RvcnMubGVuZ3RoIC0gMV0pO1xuXG5cdFx0XHR0aGlzLmN1c3RvbUdhdGVzW25hbWVdLmRyYXdpbmdJbmZvLmNvbm5lY3RvcnMgPSBjb25uZWN0b3JzO1xuXHRcdFx0dGhpcy5jdXN0b21HYXRlc1tuYW1lXS5kcmF3aW5nSW5mby5yb290ID0gcm9vdEdhdGUuZHJhd2luZ0luZm8ucm9vdDtcblx0XHR9XG5cdH1cbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlZ2lzdGVyTUNYR2F0ZSA9IGZ1bmN0aW9uKGN0cmxRdWJpdHMpIHtcblx0dmFyIGdhdGVOYW1lID0gdGhpcy5tdWx0aUNvbnRyb2xsZWRHYXRlTmFtZShcIm1jeFwiLCBjdHJsUXViaXRzKTtcblx0dGhpcy5yZWdpc3RlckdhdGUoZ2F0ZU5hbWUsIHRoaXMuTUNYQ2lyY3VpdChjdHJsUXViaXRzKS5zYXZlKHRydWUpKTtcblx0cmV0dXJuIGdhdGVOYW1lO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVnaXN0ZXJNQ1UxR2F0ZSA9IGZ1bmN0aW9uKGN0cmxRdWJpdHMpIHtcblx0dmFyIGdhdGVOYW1lID0gdGhpcy5tdWx0aUNvbnRyb2xsZWRHYXRlTmFtZShcIm1jdTFcIiwgY3RybFF1Yml0cyk7XG5cdHRoaXMucmVnaXN0ZXJHYXRlKGdhdGVOYW1lLCB0aGlzLk1DVTFDaXJjdWl0KGN0cmxRdWJpdHMpLnNhdmUodHJ1ZSkpO1xuXHRyZXR1cm4gZ2F0ZU5hbWU7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZWdpc3Rlck11bHRpQ29udHJvbGxlZEdhdGUgPSBmdW5jdGlvbihyb290TmFtZSwgY3RybFF1Yml0cykge1xuXHRzd2l0Y2gocm9vdE5hbWUpIHtcblx0XHRjYXNlIFwiY3hcIjogcmV0dXJuIHRoaXMucmVnaXN0ZXJNQ1hHYXRlKGN0cmxRdWJpdHMpOyBicmVhaztcblx0XHRjYXNlIFwiY3UxXCI6IHJldHVybiB0aGlzLnJlZ2lzdGVyTUNVMUdhdGUoY3RybFF1Yml0cyk7IGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIFwiXCI7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0T3JSZWdpc3Rlck11bHRpQ29udHJvbGxlZEVxdWl2YWxlbnQgPSBmdW5jdGlvbihnYXRlTmFtZSwgaW52ZXJzZUNvbnRyb2wpIHtcblx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRpZihnYXRlRGVmKSB7XG5cdFx0aWYoZ2F0ZURlZi5kcmF3aW5nSW5mbykge1xuXHRcdFx0Ly8gQmFzaWMgZ2F0ZSB3aXRoIG11bHRpLWNvbnRyb2xsZWQvaW52ZXJzZSBjb250cm9sbGVkIGltcGxlbWVudGF0aW9uXG5cdFx0XHRpZihnYXRlTmFtZSA9PSBcInhcIiB8fCBnYXRlTmFtZSA9PSBcInUxXCIgfHwgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IFwieFwiIHx8IGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCA9PSBcInUxXCIpIHtcblx0XHRcdFx0aWYoIXRoaXMuYmFzaWNHYXRlc1tcImNcIiArIGdhdGVOYW1lXSB8fCBpbnZlcnNlQ29udHJvbCkge1xuXHRcdFx0XHRcdC8vIGNyZWF0ZSBtdWx0aSBjb250cm9sbGVkIHZlcnNpb24gYW5kIHJldHVybiBpdHMgbmFtZVxuXHRcdFx0XHRcdHZhciByb290TmFtZSA9IFwiY1wiICsgKGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCB8fCBnYXRlTmFtZSk7XG5cdFx0XHRcdFx0dmFyIG51bUN0cmxRdWJpdHMgPSBtYXRoLmxvZzIoZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKTtcblx0XHRcdFx0XHR2YXIgY3RybFF1Yml0cyA9IFtdO1xuXHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjdHJsUXViaXRzLnB1c2godHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN0cmxRdWJpdHMudW5zaGlmdCghaW52ZXJzZUNvbnRyb2wpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXJNdWx0aUNvbnRyb2xsZWRHYXRlKHJvb3ROYW1lLCBjdHJsUXViaXRzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB0aGVyZSBpcyBiYXNpYyBnYXRlIHdpdGggYWRkaXRpb25hbCBjb250cm9sXG5cdFx0XHRcdFx0cmV0dXJuIFwiY1wiICsgZ2F0ZU5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBCYXNpYyBnYXRlIGZvciB3aGljaCB3ZSBkb24ndCBoYXZlIG11bHRpLWNvbnRyb2xsZWQgb3IgaW52ZXJzZSBjb250cm9sbGVkIGltcGxlbWVudGF0aW9uXG5cdFx0Ly8gYnV0IG1heWJlIHdlIGhhdmUgYmFzaWMgZ2F0ZSB3aXRoIGFkZGl0aW9uYWwgY29udHJvbFxuXHRcdGZvcih2YXIgZ24gaW4gdGhpcy5iYXNpY0dhdGVzKSB7XG5cdFx0XHR2YXIgdG1wR2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnbl07XG5cdFx0XHRpZih0bXBHYXRlRGVmICYmIHRtcEdhdGVEZWYuZHJhd2luZ0luZm8gJiYgdG1wR2F0ZURlZi5kcmF3aW5nSW5mby5yb290ICYmIHRtcEdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCA9PSBnYXRlTmFtZSkge1xuXHRcdFx0XHRpZighaW52ZXJzZUNvbnRyb2wpIHtcblx0XHRcdFx0XHQvLyB0aGVyZSBpcyBiYXNpYyBnYXRlIHdpdGggYWRkaXRpb25hbCBjb250cm9sXG5cdFx0XHRcdFx0cmV0dXJuIGduO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0aWYodGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV0pIHtcblx0XHR2YXIgbWNJbmZvID0gdGhpcy5kZWNvZGVNdWx0aUNvbnRyb2xsZWRHYXRlTmFtZShnYXRlTmFtZSk7XG5cdFx0aWYoIW1jSW5mbyB8fCAhbWNJbmZvLm51bUN0cmxRdWJpdHMpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmKG1jSW5mby5yb290TmFtZSA9PSBcImN4XCIgfHwgbWNJbmZvLnJvb3ROYW1lID09IFwiY3UxXCIpIHtcblx0XHRcdC8vIGNyZWF0ZSBtdWx0aSBjb250cm9sbGVkIHZlcnNpb24gYW5kIHJldHVybiBpdHMgbmFtZVxuXHRcdFx0bWNJbmZvLmN0cmxRdWJpdHMudW5zaGlmdCghaW52ZXJzZUNvbnRyb2wpO1xuXHRcdFx0cmV0dXJuIHRoaXMucmVnaXN0ZXJNdWx0aUNvbnRyb2xsZWRHYXRlKG1jSW5mby5yb290TmFtZSwgbWNJbmZvLmN0cmxRdWJpdHMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVVbnVzZWRNdWx0aUNvbnRyb2xsZWRHYXRlcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3BzID0gdGhpcy5jb3VudE9wcyhudWxsLCB7IHNoYWxsb3c6IGZhbHNlIH0pO1xuXG5cdGZvcihnYXRlTmFtZSBpbiB0aGlzLmN1c3RvbUdhdGVzKSB7XG5cdFx0aWYoIW9wc1tnYXRlTmFtZV0pIHtcblx0XHRcdGlmKHRoaXMuaXNNdWx0aUNvbnRyb2xsZWRHYXRlKGdhdGVOYW1lKSkge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZWNvZGVNdWx0aUNvbnRyb2xsZWRHYXRlTmFtZSA9IGZ1bmN0aW9uKGdhdGVOYW1lKSB7XG5cdGlmKCFnYXRlTmFtZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIG1jSW5mbyA9IHt9O1xuXHR2YXIgc3BsaXR0ZWQgPSBnYXRlTmFtZS5zcGxpdChcIl9cIik7XG5cblx0Ly8gbmFtZVxuXHRpZihzcGxpdHRlZC5sZW5ndGggPiAwKSB7XG5cdFx0bWNJbmZvLm5hbWUgPSBzcGxpdHRlZFswXTtcblx0XHRtY0luZm8ucm9vdE5hbWUgPSBtY0luZm8ubmFtZS5zdWJzdHJpbmcoMSk7XG5cdH1cblxuXHQvLyBudW1DdHJsUXViaXRzXG5cdGlmKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcblx0XHR2YXIgbnVtQ3RybFF1Yml0cyA9IHBhcnNlSW50KHNwbGl0dGVkWzFdKTtcblx0XHRpZighaXNOYU4obnVtQ3RybFF1Yml0cykpIHtcblx0XHRcdG1jSW5mby5udW1DdHJsUXViaXRzID0gbnVtQ3RybFF1Yml0cztcblx0XHR9XG5cdH1cblxuXHQvLyBjdHJsUXViaXRzXG5cdGlmKG1jSW5mby5udW1DdHJsUXViaXRzKSB7XG5cdFx0dmFyIGN0cmxRdWJpdHMgPSBbXTtcblx0XHRpZihzcGxpdHRlZC5sZW5ndGggPiAyKSB7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc3BsaXR0ZWRbMl0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoc3BsaXR0ZWRbMl1baV0gPT0gXCIwXCIpIHtcblx0XHRcdFx0XHRjdHJsUXViaXRzLnB1c2goZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKHNwbGl0dGVkWzJdW2ldID09IFwiMVwiKSB7XG5cdFx0XHRcdFx0Y3RybFF1Yml0cy5wdXNoKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoIWN0cmxRdWJpdHMubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0czsgaSsrKSB7XG5cdFx0XHRcdGN0cmxRdWJpdHMucHVzaCh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bWNJbmZvLmN0cmxRdWJpdHMgPSBjdHJsUXViaXRzO1xuXHR9XG5cblx0cmV0dXJuIG1jSW5mbztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm11bHRpQ29udHJvbGxlZEdhdGVOYW1lID0gZnVuY3Rpb24obmFtZVByZWZpeCwgY3RybFF1Yml0cykge1xuXHR2YXIgZ2F0ZU5hbWUgPSBuYW1lUHJlZml4ICsgXCJfXCI7XG5cdGlmKHR5cGVvZiBjdHJsUXViaXRzID09IFwibnVtYmVyXCIpIHtcblx0XHRnYXRlTmFtZSArPSBjdHJsUXViaXRzO1xuXHR9IGVsc2Uge1xuXHRcdGdhdGVOYW1lICs9IChjdHJsUXViaXRzLmxlbmd0aCB8fCAwKTtcblxuXHRcdHZhciB3aXJlcyA9IFwiXCI7XG5cdFx0Y3RybFF1Yml0cy5tYXAoZnVuY3Rpb24od2lyZSkge1xuXHRcdFx0aWYoIXdpcmUgfHwgKHR5cGVvZiB3aXJlID09IFwibnVtYmVyXCIgJiYgd2lyZSA8IDApKSB7XG5cdFx0XHRcdHdpcmVzICs9IFwiMFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2lyZXMgKz0gXCIxXCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYod2lyZXMuaW5kZXhPZihcIjBcIikgPCAwKSB7XG5cdFx0XHR3aXJlcyA9IFwiXCI7XG5cdFx0fVxuXHRcdGlmKHdpcmVzKSB7XG5cdFx0XHRnYXRlTmFtZSArPSBcIl9cIiArIHdpcmVzO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZ2F0ZU5hbWU7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc011bHRpQ29udHJvbGxlZEdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSkge1xuXHR2YXIgbWNJbmZvID0gdGhpcy5kZWNvZGVNdWx0aUNvbnRyb2xsZWRHYXRlTmFtZShnYXRlTmFtZSk7XG5cdHJldHVybiAhIXRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdICYmICEhbWNJbmZvICYmICEhbWNJbmZvLm51bUN0cmxRdWJpdHM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0NvbnRyb2xsYWJsZUdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSkge1xuXHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdGlmKGdhdGVEZWYpIHtcblx0XHRpZihnYXRlRGVmLmRyYXdpbmdJbmZvKSB7XG5cdFx0XHRpZihnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gXCJ4XCIgfHwgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IFwidTFcIikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yKHZhciBnbiBpbiB0aGlzLmJhc2ljR2F0ZXMpIHtcblx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2duXTtcblx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5kcmF3aW5nSW5mbyAmJiBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgJiYgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzLmlzTXVsdGlDb250cm9sbGVkR2F0ZShnYXRlTmFtZSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZVBvc0J5SWQgPSBmdW5jdGlvbihnYXRlSWQpIHtcblx0dmFyIGNpcmN1aXQgPSB0aGlzO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmlkID09IGdhdGVJZCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHdpcmVzOiBnYXRlLndpcmVzLFxuXHRcdFx0XHRcdGNvbDogY29sdW1uXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR3aXJlczogW10sXG5cdFx0Y29sOiAtMVxuXHR9O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdhdGVCeUlkID0gZnVuY3Rpb24oZ2F0ZUlkKSB7XG5cdHZhciBjaXJjdWl0ID0gdGhpcztcblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5pZCA9PSBnYXRlSWQpIHtcblx0XHRcdFx0cmV0dXJuIGdhdGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlQmVmb3JlID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlKSB7XG5cdHZhciBnYXRlID0gbnVsbDtcblx0dmFyIGNvbCA9IGNvbHVtbiAtIDE7XG5cdHdoaWxlKGNvbCA+PSAwICYmICFnYXRlKSB7XG5cdFx0Z2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbCwgd2lyZSk7XG5cdFx0Y29sLS07XG5cdH1cblx0cmV0dXJuIGdhdGU7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZUF0ID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlKSB7XG5cdGlmKCF0aGlzLmdhdGVzW3dpcmVdIHx8ICF0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl0pIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciBnYXRlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl0pKTtcblx0aWYoIWdhdGUpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdhdGUuY29sdW1uID0gY29sdW1uO1xuXHRnYXRlLndpcmVzID0gW107XG5cblx0dmFyIGlkID0gZ2F0ZS5pZDtcblx0dmFyIG51bVdpcmVzID0gdGhpcy5nYXRlcy5sZW5ndGg7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBudW1XaXJlczsgd2lyZSsrKSB7XG5cdFx0dmFyIGcgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0aWYoZyAmJiBnLmlkID09IGlkKSB7XG5cdFx0XHRnYXRlLndpcmVzW2cuY29ubmVjdG9yXSA9IHdpcmU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBnYXRlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdhdGVzQXRDb2x1bW4gPSBmdW5jdGlvbihjb2x1bW4pIHtcblx0dmFyIGdhdGVzID0gW107XG5cdHZhciBudW1XaXJlcyA9IHRoaXMuZ2F0ZXMubGVuZ3RoO1xuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgbnVtV2lyZXM7IHdpcmUrKykge1xuXHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdGdhdGVzLnB1c2goZ2F0ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBnYXRlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDb250cm9sbGFibGVHYXRlc0F0Q29sdW1uID0gZnVuY3Rpb24oY29sdW1uKSB7XG5cdHZhciBnYXRlcyA9IHRoaXMuZ2V0R2F0ZXNBdENvbHVtbihjb2x1bW4pO1xuXHR2YXIgY29udHJvbGxhYmxlR2F0ZXMgPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IGdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGdhdGUgPSBnYXRlc1tpXTtcblx0XHRpZih0aGlzLmlzQ29udHJvbGxhYmxlR2F0ZShnYXRlLm5hbWUpKSB7XG5cdFx0XHRjb250cm9sbGFibGVHYXRlcy5wdXNoKGdhdGUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29udHJvbGxhYmxlR2F0ZXM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRKYXZhU2NyaXB0ID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCBhc0p1cHl0ZXIpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblxuXHQvLyBkZWNvbXBvc2Vcblx0aWYoZGVjb21wb3NlKSB7XG5cdFx0Y2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXHR9IGVsc2Uge1xuXHRcdGNpcmN1aXQgPSB0aGlzO1xuXHR9XG5cblx0dmFyIGpzID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMiAmJiBjbGluZVswXSAhPSBcIi9cIiAmJiBjbGluZVsxXSAhPSBcIi9cIikge1xuXHRcdFx0XHRqcyArPSBcIi8vIFwiO1xuXHRcdFx0fVxuXHRcdFx0anMgKz0gY2xpbmU7XG5cdFx0XHRqcyArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIGluZGVudCA9IFwiXCI7XG5cdHZhciBjaXJjdWl0VmFyID0gXCJcIjtcblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aW5kZW50ID0gXCIgICAgXCI7XG5cdFx0Y2lyY3VpdFZhciA9IFwiY2lyY1wiO1xuXG5cdFx0anMgKz0gXCJjb25zdCBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyBcIiA9IGZ1bmN0aW9uKCkge1xcblwiO1xuXG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zdCBcIiArIGNpcmN1aXRWYXIgKyBcIiA9IG5ldyBRdWFudHVtQ2lyY3VpdChcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIpO1xcblxcblwiO1xuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLnBhcmFtcyA9IFwiICsgSlNPTi5zdHJpbmdpZnkoY2lyY3VpdC5wYXJhbXMpICsgXCJcXG5cXG5cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aW5kZW50ID0gXCJcIjtcblx0XHRjaXJjdWl0VmFyID0gXCJjaXJjdWl0XCI7XG5cblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnN0IFF1YW50dW1DaXJjdWl0ID0gcmVxdWlyZShcXFwicXVhbnR1bS1jaXJjdWl0XFxcIik7XFxuXFxuXCI7XG5cblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnN0IFwiICsgY2lyY3VpdFZhciArIFwiID0gbmV3IFF1YW50dW1DaXJjdWl0KFwiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIik7XFxuXFxuXCI7XG5cblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZXNBZGRlZCA9IFtdO1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdGpzICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0SmF2YVNjcmlwdChcIlwiLCB0cnVlLCB1c2VkR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZXNBZGRlZC5wdXNoKHVzZWRHYXRlTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Y3VzdG9tR2F0ZXNBZGRlZC5tYXAoZnVuY3Rpb24oY3VzdG9tR2F0ZU5hbWUpIHtcblx0XHRcdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLnJlZ2lzdGVyR2F0ZShcXFwiXCIgKyBjdXN0b21HYXRlTmFtZSArIFwiXFxcIiwgXCIgKyBjdXN0b21HYXRlTmFtZSArIFwiKCkpO1xcblwiO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmKGN1c3RvbUdhdGVzQWRkZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRqcyArPSBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBjcmVnQ291bnQgPSAwO1xuXHRmb3IodmFyIGNyZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIuY3JlYXRlQ3JlZyhcXFwiXCIgKyBjcmVnTmFtZSArIFwiXFxcIiwgXCIgKyAodGhpcy5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoIHx8IDEpICsgXCIpO1xcblwiO1xuXHRcdGNyZWdDb3VudCsrO1xuXHR9XG5cdGlmKGNyZWdDb3VudCA+IDApIHtcblx0XHRqcyArPSBcIlxcblwiO1xuXHR9XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXG5cdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5hZGRNZWFzdXJlKFwiICsgd2lyZSArIFwiLCBcXFwiXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgXCJcXFwiLCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiKTtcXG5cIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIuYXBwZW5kR2F0ZShcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCJcIjtcblxuXHRcdFx0XHRcdGlmKGdhdGUud2lyZXMubGVuZ3RoID09IDEpIHtcblx0XHRcdFx0XHRcdGpzICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdGpzICs9IGdhdGUud2lyZXNbMF07XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGpzICs9IFwiLCBbXCI7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRpZih3ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGpzICs9IFwiLFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGpzICs9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRqcyArPSBcIl1cIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMpIHtcblx0XHRcdFx0XHRcdHZhciBvcHQgPSB7fTtcblx0XHRcdFx0XHRcdGZvcih2YXIgb3B0S2V5IGluIGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnNbb3B0S2V5XSkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBvYmogPSBnYXRlLm9wdGlvbnNbb3B0S2V5XTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgc2tpcCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBvYmogPT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMCAmJiBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2tpcCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYoIXNraXApIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wdFtvcHRLZXldID0gb2JqO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0anMgKz0gXCIsIFwiICsgSlNPTi5zdHJpbmdpZnkob3B0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0anMgKz0gXCIpO1xcblwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0anMgKz0gXCJcXG5cIjtcblx0XHRqcyArPSBpbmRlbnQgKyBcInJldHVybiBcIiArIGNpcmN1aXRWYXIgKyBcIjtcXG5cIjtcblx0XHRqcyArPSBcIn07XFxuXFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0anMgKz0gXCJcXG5cIjtcblxuXHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5ydW4oKTtcXG5cXG5cIjtcblxuXHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coXFxcIlByb2JhYmlsaXRpZXM6XFxcIik7XFxuXCI7XG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShjaXJjdWl0LnByb2JhYmlsaXRpZXMoKSkpO1xcblxcblwiO1xuXHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coXFxcIk1lYXN1cmUgYWxsOlxcXCIpO1xcblwiO1xuXHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY2lyY3VpdC5tZWFzdXJlQWxsKCkpKTtcXG5cXG5cIjtcblx0XHRpZihjaXJjdWl0LmNyZWdDb3VudCgpKSB7XG5cdFx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKFxcXCJDbGFzc2ljYWwgcmVnaXN0ZXJzOlxcXCIpO1xcblwiO1xuXHRcdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhjaXJjdWl0LmNyZWdzQXNTdHJpbmcoKSk7XFxuXFxuXCI7XG5cdFx0fVxuXHR9XG5cblxuXHRpZihhc0p1cHl0ZXIpIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRcIm1ldGFkYXRhXCI6IHtcblx0XHRcdFx0XCJrZXJuZWxzcGVjXCI6IHtcblx0XHRcdFx0XHRcImRpc3BsYXlfbmFtZVwiOiBcIkphdmFzY3JpcHQgKE5vZGUuanMpXCIsXG5cdFx0XHRcdFx0XCJsYW5ndWFnZVwiOiBcImphdmFzY3JpcHRcIixcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJqYXZhc2NyaXB0XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJsYW5ndWFnZV9pbmZvXCI6IHtcblx0XHRcdFx0XHRcImZpbGVfZXh0ZW5zaW9uXCI6IFwiLmpzXCIsXG5cdFx0XHRcdFx0XCJtaW1ldHlwZVwiOiBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIixcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJqYXZhc2NyaXB0XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IGpzLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGpzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UWlza2l0ID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyLCBwcm92aWRlck5hbWUsIGJhY2tlbmROYW1lLCBhc0p1cHl0ZXIsIHNob3RzLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSwgaHlicmlkKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRwcm92aWRlck5hbWU6IHByb3ZpZGVyTmFtZSxcblx0XHRiYWNrZW5kTmFtZTogYmFja2VuZE5hbWUsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkXG5cdH07XG5cdFxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1Fpc2tpdChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSlcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFF1RVNUID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCBkZWZpbmVkRnVuYykge1xuXHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlXG5cdH07XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9RdUVTVChuZXdPcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lLCBkZWZpbmVkRnVuYyk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRQVNNID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGNvbXBhdGliaWxpdHlNb2RlLCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0fTtcblx0XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUUFTTShvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSlcdFxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW1wb3J0UUFTTSA9IGZ1bmN0aW9uKGlucHV0LCBlcnJvckNhbGxiYWNrLCBjb21wYXRpYmlsaXR5TW9kZSkge1xuXHR0aGlzLmluaXQoKTtcblx0UUFTTUltcG9ydCh0aGlzLCBpbnB1dCwgZXJyb3JDYWxsYmFjaywgY29tcGF0aWJpbGl0eU1vZGUpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UHlxdWlsID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyLCBsYXR0aWNlLCBhc1FWTSwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRsYXR0aWNlOiBsYXR0aWNlLFxuXHRcdGFzUVZNOiBhc1FWTSxcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0aHlicmlkOiBoeWJyaWRcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9QeXF1aWwob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG59XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRdWlsID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0clxuXHR9O1xuXG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUXVpbChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmltcG9ydFF1aWwgPSBmdW5jdGlvbihxdWlsLCBlcnJvckNhbGxiYWNrLCBvcHRpb25zLCBxdWJpdE5hbWVzLCByZW5hbWVkR2F0ZXMsIGxpbmVPZmZzZXQpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHNlbGYuaW5pdCgpO1xuXG5cdHJlbmFtZWRHYXRlcyA9IHJlbmFtZWRHYXRlcyB8fCB7fTtcblx0bGluZU9mZnNldCA9IGxpbmVPZmZzZXQgfHwgMDtcblxuXHRmdW5jdGlvbiBnZXRHYXRlSW5mbyhnYXRlTmFtZSkge1xuXHRcdGlmKHNlbGYuY3VzdG9tR2F0ZXMgJiYgc2VsZi5jdXN0b21HYXRlc1tnYXRlTmFtZV0pIHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGdhdGVOYW1lLCBjdXN0b21HYXRlOiBzZWxmLmN1c3RvbUdhdGVzW2dhdGVOYW1lXSB9O1xuXHRcdH1cblxuXHRcdGZvcih2YXIgZ25hbWUgaW4gc2VsZi5iYXNpY0dhdGVzKSB7XG5cdFx0XHR2YXIgZ2RlZiA9IHNlbGYuYmFzaWNHYXRlc1tnbmFtZV07XG5cdFx0XHRpZihnZGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0aWYoZ2RlZi5leHBvcnRJbmZvLnF1aWwgJiYgZ2RlZi5leHBvcnRJbmZvLnF1aWwubmFtZSA9PSBnYXRlTmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGduYW1lLCBnYXRlRGVmOiBnZGVmLCBxdWlsRGVmOiBnZGVmLmV4cG9ydEluZm8ucXVpbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGdkZWYuZXhwb3J0SW5mby5weXF1aWwgJiYgZ2RlZi5leHBvcnRJbmZvLnB5cXVpbC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZ25hbWUsIGdhdGVEZWY6IGdkZWYsIHF1aWxEZWY6IGdkZWYuZXhwb3J0SW5mby5weXF1aWwgfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblxuXHR2YXIgbGluZXMgPSBxdWlsLnNwbGl0KFwiXFxuXCIpO1xuXG5cdHZhciBjb21tYW5kcyA9IFtdO1xuXHR2YXIgbXVsdGlsaW5lID0gZmFsc2U7XG5cdGxpbmVzLm1hcChmdW5jdGlvbihsaW5lLCBsaW5lSW5kZXgpIHtcblx0XHQvLyByZW1vdmUgY29tbWVudHNcblx0XHRsaW5lID0gbGluZS5zcGxpdChcIiNcIilbMF07XG5cblx0XHRpZighbGluZS5sZW5ndGgpIHtcblx0XHRcdG11bHRpbGluZSA9IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzXG5cdFx0XHRsaW5lID0gbGluZS50cmltKCk7XG5cdFx0fVxuXG5cdFx0aWYoIW11bHRpbGluZSkge1xuXHRcdFx0aWYobGluZS5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGNsaW5lcyA9IGxpbmUuc3BsaXQoXCI7XCIpO1xuXHRcdFx0XHR2YXIgY29kZWxpbmVzID0gW107XG5cdFx0XHRcdGNsaW5lcy5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdFx0XHRpZihjbGluZS50cmltKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjb2RlbGluZXMucHVzaChjbGluZS50cmltKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y29kZWxpbmVzLm1hcChmdW5jdGlvbihjb2RlbGluZSkge1xuXG5cdFx0XHRcdFx0dmFyIHRva2VucyA9IGNvZGVsaW5lLnNwbGl0KFwiIFwiKTtcblx0XHRcdFx0XHR2YXIgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHRpZihsYXN0VG9rZW4ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRpZihsYXN0VG9rZW5bbGFzdFRva2VuLmxlbmd0aCAtIDFdID09IFwiOlwiKSB7XG5cdFx0XHRcdFx0XHRcdG11bHRpbGluZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdC8vIHJlbW92ZSBcIjpcIlxuXHRcdFx0XHRcdFx0XHRsYXN0VG9rZW4gPSBsYXN0VG9rZW4uc3Vic3RyaW5nKDAsIGxhc3RUb2tlbi5sZW5ndGggLSAxKTtcblx0XHRcdFx0XHRcdFx0dG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA9IGxhc3RUb2tlbjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYodG9rZW5zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdHlwZSA9IFwiR0FURVwiO1xuXHRcdFx0XHRcdFx0XHRpZih0b2tlbnNbMF0gPT0gXCJERUZHQVRFXCIgfHwgdG9rZW5zWzBdID09IFwiREVGQ0lSQ1VJVFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZSA9IHRva2Vuc1swXTtcblx0XHRcdFx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKDAsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dmFyIG5hbWUgPSB0b2tlbnMuam9pbihcIiBcIik7XG5cblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1TdGFydCA9IG5hbWUuaW5kZXhPZihcIihcIik7XG5cdFx0XHRcdFx0XHRcdGlmKHBhcmFtU3RhcnQgPj0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbUVuZCA9IG5hbWUuaW5kZXhPZihcIilcIik7XG5cdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1FbmQgPiBwYXJhbVN0YXJ0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMgPSBuYW1lLnN1YnN0cmluZyhwYXJhbVN0YXJ0ICsgMSwgcGFyYW1FbmQpLnNwbGl0KFwiLFwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyLCBuZHgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyID0gcGFyLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2hpbGUocGFyLmxlbmd0aCAmJiBwYXJbMF0gPT0gXCIlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXIgPSBwYXIuc2xpY2UoMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW25keF0gPSBwYXI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoKHBhcmFtRW5kICsgMSkgPD0gbmFtZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG9rID0gbmFtZS5zdWJzdHJpbmcocGFyYW1FbmQgKyAxLCBuYW1lLmxlbmd0aCkuc3BsaXQoXCIgXCIpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRva2VucyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b2subWFwKGZ1bmN0aW9uKHRrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGsgPSB0ay50cmltKCk7IFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHRrLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9rZW5zLnB1c2godGspO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b2tlbnMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIHBhcmFtU3RhcnQpLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IHRva2Vucy5zcGxpY2UoMCwgMSlbMF0udHJpbSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dmFyIGFyZ3MgPSBbXTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciB0b2tlbiA9IHRva2Vuc1t0XTtcblx0XHRcdFx0XHRcdFx0XHRpZihxdWJpdE5hbWVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcWluZGV4ID0gcXViaXROYW1lcy5pbmRleE9mKHRva2VuKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHFpbmRleCA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChxaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKHRva2VuKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKHRva2VuKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjb21tYW5kcy5wdXNoKHsgdHlwZTogdHlwZSwgbmFtZTogbmFtZSwgcGFyYW1zOiBwYXJhbXMsIGFyZ3M6IGFyZ3MsIGJvZHk6IFtdLCBsaW5lOiBsaW5lSW5kZXgsIGNvbDogMCB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgY29kZWxpbmVzID0gbGluZS5zcGxpdChcIjtcIik7XG5cdFx0XHRjb2RlbGluZXMubWFwKGZ1bmN0aW9uKGNvZGVsaW5lKSB7XG5cdFx0XHRcdGlmKGNvZGVsaW5lLnRyaW0oKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb21tYW5kc1tjb21tYW5kcy5sZW5ndGggLSAxXS5ib2R5LnB1c2goY29kZWxpbmUudHJpbSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgY29tbWFuZENvdW50ID0gY29tbWFuZHMubGVuZ3RoO1xuXHRmb3IodmFyIGNvbW1hbmRJbmRleCA9IDA7IGNvbW1hbmRJbmRleCA8IGNvbW1hbmRDb3VudDsgY29tbWFuZEluZGV4KyspIHtcblx0XHR2YXIgY29tbWFuZCA9IGNvbW1hbmRzW2NvbW1hbmRJbmRleF07XG5cblx0XHRpZihyZW5hbWVkR2F0ZXNbY29tbWFuZC5uYW1lXSkge1xuXHRcdFx0Y29tbWFuZC5uYW1lID0gcmVuYW1lZEdhdGVzW2NvbW1hbmQubmFtZV07XG5cdFx0fVxuXG5cdFx0c3dpdGNoKGNvbW1hbmQudHlwZSkge1xuXHRcdFx0Y2FzZSBcIkRFRkdBVEVcIjoge1xuXHRcdFx0XHRpZihjb21tYW5kLm5hbWUgPT0gY29tbWFuZC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcblx0XHRcdFx0XHR2YXIgbmV3TmFtZSA9IGNvbW1hbmQubmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHJlbmFtZWRHYXRlc1tjb21tYW5kLm5hbWVdID0gbmV3TmFtZTtcblx0XHRcdFx0XHRjb21tYW5kLm5hbWUgPSBuZXdOYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTk9UIElNUExFTUVOVEVEIFlFVCAhISFcblxuXHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdGNhc2UgXCJERUZDSVJDVUlUXCI6IHtcblx0XHRcdFx0aWYoY29tbWFuZC5uYW1lID09IGNvbW1hbmQubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG5cdFx0XHRcdFx0dmFyIG5ld05hbWUgPSBjb21tYW5kLm5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRyZW5hbWVkR2F0ZXNbY29tbWFuZC5uYW1lXSA9IG5ld05hbWU7XG5cdFx0XHRcdFx0Y29tbWFuZC5uYW1lID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBzdWJRdWlsID0gY29tbWFuZC5ib2R5LmpvaW4oXCJcXG5cIik7XG5cdFx0XHRcdHZhciBzdWJRdWJpdE5hbWVzID0gY29tbWFuZC5hcmdzO1xuXHRcdFx0XHR2YXIgc3ViQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdFx0XHRcdHN1YkNpcmN1aXQuaW1wb3J0UXVpbChzdWJRdWlsLCBlcnJvckNhbGxiYWNrLCBvcHRpb25zLCBzdWJRdWJpdE5hbWVzLCByZW5hbWVkR2F0ZXMsIGNvbW1hbmQubGluZSArIDEpO1xuXG5cdFx0XHRcdHN1YkNpcmN1aXQucGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb21tYW5kLnBhcmFtcykpO1xuXG5cdFx0XHRcdHNlbGYucmVnaXN0ZXJHYXRlKGNvbW1hbmQubmFtZSwgc3ViQ2lyY3VpdC5zYXZlKCkpO1xuXHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdGNhc2UgXCJHQVRFXCI6IHtcblx0XHRcdFx0c3dpdGNoKGNvbW1hbmQubmFtZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJERUNMQVJFXCI6IHtcblx0XHRcdFx0XHRcdC8vIE5PVCBJTVBMRU1FTlRFRCBZRVQgISEhXG5cblx0XHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJIQUxUXCI6IHtcblx0XHRcdFx0XHRcdC8vIFdoYXQhP1xuXG5cdFx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiUFJBR01BXCI6IHtcblx0XHRcdFx0XHRcdC8vIFdoYXQhP1xuXG5cdFx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZUluZm8gPSBnZXRHYXRlSW5mbyhjb21tYW5kLm5hbWUpO1xuXHRcdFx0XHRcdFx0aWYoIWdhdGVJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkNhbm5vdCByZWNvZ25pemUgXFxcIlwiICsgY29tbWFuZC5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbXMgPSB7fTtcblxuXHRcdFx0XHRcdFx0XHRpZihnYXRlSW5mby5nYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBnYXRlSW5mby5nYXRlRGVmO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBxdWlsRGVmID0gZ2F0ZUluZm8ucXVpbERlZjtcblxuXHRcdFx0XHRcdFx0XHRcdGlmKChxdWlsRGVmLnBhcmFtcyB8fCBbXSkubGVuZ3RoICE9IChjb21tYW5kLnBhcmFtcyB8fCBbXSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIG51bWJlciBvZiBwYXJhbXMuIEV4cGVjdGVkIFwiICsgKHF1aWxEZWYucGFyYW1zIHx8IFtdKS5sZW5ndGggKyBcIiBnb3QgXCIgKyAoY29tbWFuZC5wYXJhbXMgfHwgW10pLmxlbmd0aCArIFwiLlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IGdhdGVEZWYucGFyYW1zW2ldO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbUluZGV4ID0gcXVpbERlZi5wYXJhbXMuaW5kZXhPZihwYXJhbU5hbWUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtSW5kZXggPCAwIHx8IHBhcmFtSW5kZXggPj0gY29tbWFuZC5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW50ZXJuYWwgZXJyb3I6IFFVSUwgZGVmaW5pdGlvbiBmb3IgZ2F0ZSBcXFwiXCIgKyBjb21tYW5kLm5hbWUgKyBcIiBpcyBpbnZhbGlkLlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IGNvbW1hbmQucGFyYW1zW3BhcmFtSW5kZXhdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlRGVmID0gZ2F0ZUluZm8uY3VzdG9tR2F0ZTtcblx0XHRcdFx0XHRcdFx0XHRpZigoZ2F0ZURlZi5wYXJhbXMgfHwgW10pLmxlbmd0aCAhPSAoY29tbWFuZC5wYXJhbXMgfHwgW10pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBudW1iZXIgb2YgcGFyYW1zLiBFeHBlY3RlZCBcIiArIChnYXRlRGVmLnBhcmFtcyB8fCBbXSkubGVuZ3RoICsgXCIgZ290IFwiICsgKGNvbW1hbmQucGFyYW1zIHx8IFtdKS5sZW5ndGggKyBcIi5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBnYXRlRGVmLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gZ2F0ZURlZi5wYXJhbXNbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gY29tbWFuZC5wYXJhbXNbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgbnVtYmVyIG9mIGFyZ3VtZW50cyBtYXRjaCBnYXRlRGVmXG5cdFx0XHRcdFx0XHRcdGlmKGNvbW1hbmQubmFtZSA9PSBcIk1FQVNVUkVcIikge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGNvbW1hbmQuYXJncy5sZW5ndGggIT0gMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiRXhwZWN0aW5nIDIgYXJndW1lbnRzIChxdWJpdCBhbmQgdGFyZ2V0IHJlZ2lzdGVyKSBidXQgZm91bmQgXCIgKyBjb21tYW5kLmFyZ3MubGVuZ3RoICsgXCIuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXViaXRDb3VudCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5udW1RdWJpdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1Yml0Q291bnQgPSBnYXRlRGVmLm51bVF1Yml0cztcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5tYXRyaXggJiYgZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHF1Yml0Q291bnQgPSBtYXRoLmxvZzIoZ2F0ZURlZi5tYXRyaXgubGVuZ3RoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZihjb21tYW5kLmFyZ3MubGVuZ3RoICE9IHF1Yml0Q291bnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkV4cGVjdGluZyBcIiArIHF1Yml0Q291bnQgKyBcIiBhcmd1bWVudHMgYnV0IGZvdW5kIFwiICsgY29tbWFuZC5hcmdzLmxlbmd0aCArIFwiLlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgYXJncyA9IFtdO1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY29tbWFuZC5hcmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFyZyA9IGNvbW1hbmQuYXJnc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRpZihjb21tYW5kLm5hbWUgPT0gXCJNRUFTVVJFXCIpIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNyZWdTdGFydCA9IGFyZy5pbmRleE9mKFwiW1wiKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGNyZWdTdGFydCA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjcmVnRW5kID0gYXJnLmluZGV4T2YoXCJdXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihjcmVnRW5kID4gY3JlZ1N0YXJ0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3JlZ0JpdCA9IGFyZy5zdWJzdHJpbmcoY3JlZ1N0YXJ0ICsgMSwgY3JlZ0VuZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3JlZ05hbWUgPSBhcmcuc3Vic3RyaW5nKDAsIGNyZWdTdGFydCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjcmVnID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Yml0OiBjcmVnQml0LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogY3JlZ05hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXJnSW50ID0gcGFyc2VJbnQoYXJnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoaXNOYU4oYXJnSW50KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2goYXJnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBhcmd1bWVudCBcXFwiXCIgKyBhcmcgKyBcIlxcXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChhcmdJbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgYXJnSW50ID0gcGFyc2VJbnQoYXJnKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGlzTmFOKGFyZ0ludCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBhcmd1bWVudCBcXFwiXCIgKyBhcmcgKyBcIlxcXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2goYXJnSW50KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzZWxmLmFwcGVuZEdhdGUoZ2F0ZUluZm8ubmFtZSwgYXJncywgeyBwYXJhbXM6IHBhcmFtcywgY3JlZzogY3JlZyB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBlcnJvciBoYW5kbGluZyBpcyBjcipwIGJ1dCBsZXQncyBiZSBjb25zaXN0ZW50IHdpdGggaW1wb3J0UUFTTSgpIGZvciBub3dcblx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdGVycm9yQ2FsbGJhY2soW10pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UXVpcmsgPSBmdW5jdGlvbihkZWNvbXBvc2UpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblxuXHRmdW5jdGlvbiByYW5nZShuKSB7XG5cdFx0dmFyIGFyciA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRcdGFyci5wdXNoKGkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNXaXJlSW5SYW5nZSh3aXJlLCB3aXJlUmFuZ2Upe1xuXHRcdGlmKHdpcmVSYW5nZS5pbmRleE9mKHdpcmUpID4gLTEpe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIGZvcmNlIGRlY29tcG9zZVxuXHRkZWNvbXBvc2UgPSB0cnVlO1xuXHR2YXIgb2JqID0gdGhpcy5zYXZlKGRlY29tcG9zZSk7XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdHZhciB0ZW1wQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQob2JqKTtcblx0dGVtcENpcmN1aXQubG9hZChvYmopO1xuXG5cdHZhciBxdWlyayA9IHtcblx0XHRjb2xzOiBbXSxcblx0XHRnYXRlczogW11cblx0fTtcblxuXHR2YXIgZ2F0ZU1hdHJpeCA9IG51bGw7XG5cblx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcblx0dmFyIGdhdGVMb2NhdGlvbnMgPSB7fTtcblx0dmFyIGN1c3RvbUdhdGVDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cblx0XG5cdFxuXHR2YXIgZ2F0ZXNUb0JlQWRkZWQgPSBbXTtcblx0XG5cdHZhciBnYXRlSW5mb3JtYXRpb24gPSB7fTtcblxuXHRpZighZGVjb21wb3NlKSB7XG5cdFx0dmFyIG51bUNvbHMgPSB0ZW1wQ2lyY3VpdC5udW1Db2xzKCk7XG5cdFx0Zm9yKHZhciBjb2x1bW4gPSBudW1Db2xzIC0gMTsgY29sdW1uID49IDA7IGNvbHVtbi0tKSB7XG5cdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGVtcENpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0ZW1wQ2lyY3VpdC5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDAgJiYgIXRlbXBDaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdGN1c3RvbURlY29tcG9zZWRDaXJjdWl0ID0gdGVtcENpcmN1aXQuZGVjb21wb3NlR2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdFx0dmFyIGlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdCA9IGZhbHNlO1xuXHRcdFx0XHRcdGdhdGVJbmZvcm1hdGlvbltnYXRlLm5hbWVdID0ge2luZm86W10sIGlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdDpudWxsfTtcblx0XHRcdFx0XHRmb3IodmFyIGRlY29tcG9zZWRDb2x1bW4gPSAwOyBkZWNvbXBvc2VkQ29sdW1uIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtQ29scygpOyBkZWNvbXBvc2VkQ29sdW1uKyspIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgZGVjb21wb3NlZFdpcmUgPSAwOyBkZWNvbXBvc2VkV2lyZSA8IGN1c3RvbURlY29tcG9zZWRDaXJjdWl0Lm51bVF1Yml0czsgZGVjb21wb3NlZFdpcmUrKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZUluQ3VzdG9tQ2lyY3VpdCA9IGN1c3RvbURlY29tcG9zZWRDaXJjdWl0LmdldEdhdGVBdChkZWNvbXBvc2VkQ29sdW1uLCBkZWNvbXBvc2VkV2lyZSk7XG5cblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZUluQ3VzdG9tQ2lyY3VpdCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZUluQ3VzdG9tQ2lyY3VpdCA9IGN1c3RvbURlY29tcG9zZWRDaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZUluQ3VzdG9tQ2lyY3VpdC5uYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRpZihiYXNpY0dhdGVJbkN1c3RvbUNpcmN1aXQuZXhwb3J0SW5mbyAmJiAhYmFzaWNHYXRlSW5DdXN0b21DaXJjdWl0LmV4cG9ydEluZm8ucXVpcmspe1xuXHRcdFx0XHRcdFx0XHRcdFx0aXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0ID0gaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0IHx8IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVJbkN1c3RvbUNpcmN1aXQuY29ubmVjdG9yID09IDApe1x0XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlSW5mb3JtYXRpb25bZ2F0ZS5uYW1lXS5pbmZvLnB1c2goe2dhdGVJbkN1c3RvbUNpcmN1aXQ6Z2F0ZUluQ3VzdG9tQ2lyY3VpdCwgY29sdW1uOmNvbHVtbn0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZXNUb0JlQWRkZWQucHVzaChnYXRlSW5mb3JtYXRpb24pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRnYXRlSW5mb3JtYXRpb25bZ2F0ZS5uYW1lXS5pc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQ9IGlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdDtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdCl7XG5cdFx0XHRcdFx0XHRjaXJjdWl0LmdhdGVzLm1hcChmdW5jdGlvbihjaXJjdWl0R2F0ZSwgaW5kZXgpe1xuXHRcdFx0XHRcdFx0XHRjaXJjdWl0R2F0ZS5tYXAoZnVuY3Rpb24oZ2F0ZVRvUmVtb3ZlKXtcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlVG9SZW1vdmUgJiYgZ2F0ZVRvUmVtb3ZlLm5hbWUgPT0gZ2F0ZS5uYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcmN1aXQucmVtb3ZlR2F0ZShnYXRlVG9SZW1vdmUuaWQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2F0ZUtleXMgPSBPYmplY3Qua2V5cyhnYXRlSW5mb3JtYXRpb24pO1xuXHRmb3IodmFyIGdhdGVOdW1iZXIgPSAgMDsgZ2F0ZU51bWJlciA8IGdhdGVLZXlzLmxlbmd0aDsgZ2F0ZU51bWJlcisrKXtcblx0XHRnYXRlS2V5ID0gZ2F0ZUtleXNbZ2F0ZU51bWJlcl07XG5cdFx0aWYoZ2F0ZUluZm9ybWF0aW9uW2dhdGVLZXldLmlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdCl7XG5cdFx0XHRmb3IodmFyIGkgPSBnYXRlSW5mb3JtYXRpb25bZ2F0ZUtleV0uaW5mby5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG5cdFx0XHRcdHZhciBnYXRlSW5mbyA9IGdhdGVJbmZvcm1hdGlvbltnYXRlS2V5XS5pbmZvW2ldO1xuXHRcdFx0XHR2YXIgZ2F0ZVRvQWRkID0gZ2F0ZUluZm8uZ2F0ZUluQ3VzdG9tQ2lyY3VpdDtcblx0XHRcdFx0Y2lyY3VpdC5pbnNlcnRHYXRlKGdhdGVUb0FkZC5uYW1lLCBnYXRlSW5mby5jb2x1bW4sIGdhdGVUb0FkZC53aXJlcywgZ2F0ZVRvQWRkLm9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBwcmV2aW91c0NvbHVtbiA9IG51bGw7XG5cdHZhciBwcmV2aW91c0dhdGUgPSBudWxsO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUpe1xuXHRcdFx0XHRpZihwcmV2aW91c0dhdGUgJiYgcHJldmlvdXNHYXRlLm5hbWUgIT0gZ2F0ZS5uYW1lICYmIHByZXZpb3VzR2F0ZS5jb25uZWN0b3IgIT0gMCAmJiBwcmV2aW91c0NvbHVtbiA9PSBjb2x1bW4pe1xuXHRcdFx0XHRcdGNpcmN1aXQucmVtb3ZlR2F0ZShnYXRlLmlkKTtcblx0XHRcdFx0XHRjaXJjdWl0Lmluc2VydEdhdGUoZ2F0ZS5uYW1lLCBnYXRlLmNvbHVtbiArIDEsIGdhdGUud2lyZXMsIGdhdGUub3B0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cHJldmlvdXNHYXRlID0gZ2F0ZTtcblx0XHRcdFx0cHJldmlvdXNDb2x1bW4gPSBjb2x1bW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdHZhciBxdWlya0NvbHVtbiA9IFtdO1xuXHRcdHZhciB3aXJlUmFuZ2UgPSBbXTtcblx0XHR2YXIgaXNCYXNpY0dhdGUgPSBmYWxzZTtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoIWdhdGUgfHwgZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiIHx8IGdhdGUubmFtZSA9PSBcInJlc2V0XCIpIHtcblx0XHRcdFx0aWYoaXNCYXNpY0dhdGUgfHwgIWlzV2lyZUluUmFuZ2Uod2lyZSwgd2lyZVJhbmdlKSl7XG5cdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaCgxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHR2YXIgbWF4V2lyZSA9IG1hdGgubWF4KGdhdGUud2lyZXMpO1xuXHRcdFx0XHR2YXIgbWluV2lyZSA9IG1hdGgubWluKGdhdGUud2lyZXMpO1xuXHRcdFx0XHR2YXIgZ2F0ZVdpcmVzID0gZ2F0ZS53aXJlcy5zbGljZSgpO1xuXHRcdFx0XHR2YXIgd2lyZVJhbmdlID0gcmFuZ2UobWF4V2lyZSk7XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBxdWlya05hbWUgPSBcIlwiO1xuXHRcdFx0XHRcdHZhciBjb250cm9sbGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0aXNCYXNpY0dhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aXJrKXtcblx0XHRcdFx0XHRcdHF1aXJrTmFtZSA9IGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aXJrLm5hbWU7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVkID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpcmsuY29udHJvbGxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gdHdvLXF1Yml0IGdhdGVcblx0XHRcdFx0XHRpZihiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCA9PSA0KSB7XG5cdFx0XHRcdFx0XHQvLyBrbm93biBnYXRlLCBidXQgdGhpcyBpcyBjb250cm9sIGJpdFxuXHRcdFx0XHRcdFx0aWYocXVpcmtOYW1lICYmIChnYXRlLm5hbWUgPT0gXCJzd2FwXCIgJiYgZ2F0ZS5jb25uZWN0b3IgPCBnYXRlLndpcmVzLmxlbmd0aCAtIDIgJiYgY29udHJvbGxlZCkgfHwgKGdhdGUubmFtZSAhPSBcInN3YXBcIiAmJiBnYXRlLmNvbm5lY3RvciA8IGdhdGUud2lyZXMubGVuZ3RoIC0gMSAmJiBjb250cm9sbGVkKSkge1xuXHRcdFx0XHRcdFx0XHRxdWlya05hbWUgPSBcIuKAolwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIHRocmVlLXF1Yml0IGdhdGVcblx0XHRcdFx0XHRpZihiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCA9PSA4KSB7XG5cdFx0XHRcdFx0XHQvLyBrbm93biBnYXRlLCBidXQgdGhpcyBpcyBjb250cm9sIGJpdFxuXHRcdFx0XHRcdFx0aWYocXVpcmtOYW1lICYmIChnYXRlLm5hbWUgPT0gXCJjc3dhcFwiICYmIGdhdGUuY29ubmVjdG9yIDwgZ2F0ZS53aXJlcy5sZW5ndGggLSAyICYmIGNvbnRyb2xsZWQpIHx8IChnYXRlLm5hbWUgIT0gXCJjc3dhcFwiICYmIGdhdGUuY29ubmVjdG9yIDwgZ2F0ZS53aXJlcy5sZW5ndGggLSAxICYmIGNvbnRyb2xsZWQpKSB7XG5cdFx0XHRcdFx0XHRcdHF1aXJrTmFtZSA9IFwi4oCiXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYocXVpcmtOYW1lKSB7XG5cdFx0XHRcdFx0XHQvLyBhZGQgZ2F0ZSB0byBjb2x1bW5cblx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2gocXVpcmtOYW1lKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBOb3QgZGlyZWN0bHkgc3VwcG9ydGVkIGJ5IHF1aXJrXG5cdFx0XHRcdFx0aWYoIXF1aXJrTmFtZSkge1xuXHRcdFx0XHRcdFx0cXVpcmtOYW1lID0gXCJ+XCIgKyBnYXRlLm5hbWU7XG5cblx0XHRcdFx0XHRcdGlmKGJhc2ljR2F0ZS5wYXJhbXMubGVuZ3RoICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0YmFzaWNHYXRlLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW0pe1xuXHRcdFx0XHRcdFx0XHRcdGFuZ2xlID0gbWF0aC5yb3VuZChtYXRoLmV2YWx1YXRlKGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1dLCBnbG9iYWxQYXJhbXMpLCAzKTtcblx0XHRcdFx0XHRcdFx0XHRxdWlya05hbWUgKz0gXCJfXCIgKyBhbmdsZTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZhciBtYXRyaXggPSBcIlwiO1xuXHRcdFx0XHRcdFx0bWF0cml4ICs9IFwie1wiO1xuXG5cdFx0XHRcdFx0XHR2YXIgcmF3TWF0cml4ID0gc2VsZi5nZXRSYXdHYXRlKGJhc2ljR2F0ZSwgZ2F0ZS5vcHRpb25zKTtcblxuXHRcdFx0XHRcdFx0dmFyIHRhcmdldFdpcmVzU29ydGVkID0gZ2F0ZVdpcmVzLnNvcnQoKTtcblx0XHRcdFx0XHRcdHZhciB0YXJnZXRXaXJlcyA9IFtdO1xuXHRcdFx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24odFdpcmUpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0V2lyZXMucHVzaCh0YXJnZXRXaXJlc1NvcnRlZC5pbmRleE9mKHRXaXJlKSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmKG1heFdpcmUgLSBtaW5XaXJlICsgMSA+IGdhdGUud2lyZXMubGVuZ3RoIHx8IGdhdGUud2lyZXNbMF0gPiBnYXRlLndpcmVzWzFdKSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVNYXRyaXggPSBjaXJjdWl0LnRyYW5zZm9ybU1hdHJpeChtYXhXaXJlIC0gbWluV2lyZSArIDEsIHJhd01hdHJpeCwgdGFyZ2V0V2lyZXMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZU1hdHJpeCA9IHJhd01hdHJpeDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Z2F0ZU1hdHJpeC5tYXAoZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRpZihyb3dJbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bWF0cml4ICs9IFwie1wiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0cm93Lm1hcChmdW5jdGlvbihjb2wsIGNvbEluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY29sSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGNvbCAhPSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wgPSBtYXRoLmNvbXBsZXgoY29sKS50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wgPSBjb2wudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gY29sO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0bWF0cml4ICs9IFwifVwiO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ9XCI7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdGlmKGdhdGUuY29ubmVjdG9yID09IDApIHtcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGFscmVhZHlEZWZpbmVkID0gcXVpcmsuZ2F0ZXMuZmluZChmdW5jdGlvbihndCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBndC5pZCA9PSBxdWlya05hbWU7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYoIWFscmVhZHlEZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpcmsuZ2F0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZDogcXVpcmtOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4OiBtYXRyaXhcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQcmVzZW50SW5Db2wgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBjb2x1bW5FbGVtZW50ID0gMDsgY29sdW1uRWxlbWVudCA8IHF1aXJrQ29sdW1uLmxlbmd0aDsgY29sdW1uRWxlbWVudCsrKXtcblx0XHRcdFx0XHRcdFx0XHRpZihxdWlya0NvbHVtbltjb2x1bW5FbGVtZW50XSA9PSBxdWlya05hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVByZXNlbnRJbkNvbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZighZ2F0ZVByZXNlbnRJbkNvbCl7XG5cdFx0XHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaChxdWlya05hbWUpO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaCgxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYod2lyZSA8IGdhdGUud2lyZXNbMF0pe1xuXHRcdFx0XHRcdFx0XHRcdHF1aXJrLmdhdGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IHF1aXJrTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeDogbWF0cml4XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFscmVhZHlEZWZpbmVkID0gcXVpcmsuZ2F0ZXMuZmluZChmdW5jdGlvbihndCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGd0LmlkID09IHF1aXJrTmFtZTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRpZighYWxyZWFkeURlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aXJrLmdhdGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZDogcXVpcmtOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXg6IG1hdHJpeFxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlUHJlc2VudEluQ29sID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBjb2x1bW5FbGVtZW50ID0gMDsgY29sdW1uRWxlbWVudCA8IHF1aXJrQ29sdW1uLmxlbmd0aDsgY29sdW1uRWxlbWVudCsrKXtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHF1aXJrQ29sdW1uW2NvbHVtbkVsZW1lbnRdID09IHF1aXJrTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdhdGVQcmVzZW50SW5Db2wgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRpZighZ2F0ZVByZXNlbnRJbkNvbCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKHF1aXJrTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaCgxKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGVXaXJlcyA9IFtdO1xuXHRcdFx0XHRcdGlzQmFzaWNHYXRlID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYoZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGVFeGlzdHMgPSBjdXN0b21HYXRlQ2lyY3VpdC5nYXRlcy5maW5kKGZ1bmN0aW9uKGN1c3RvbUdhdGUpe1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY3VzdG9tR2F0ZSAmJiBjdXN0b21HYXRlWzBdICYmIGN1c3RvbUdhdGVbMF1bXCJuYW1lXCJdID09IGdhdGUubmFtZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYoIWN1c3RvbUdhdGVFeGlzdHMpe1xuXHRcdFx0XHRcdFx0XHR2YXIgd2lyZU9mZnNldCA9IGdhdGUud2lyZXNbMF07XG5cdFx0XHRcdFx0XHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKGdhdGVXaXJlKXtcblx0XHRcdFx0XHRcdFx0XHRjdXN0b21HYXRlV2lyZXMucHVzaChnYXRlV2lyZSAtIHdpcmVPZmZzZXQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZUNpcmN1aXQucmVnaXN0ZXJHYXRlKGdhdGUubmFtZSwgc2VsZi5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKTtcblx0XHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZUNpcmN1aXQuYXBwZW5kR2F0ZShnYXRlLm5hbWUsIGN1c3RvbUdhdGVXaXJlcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKFwiflwiICsgZ2F0ZS5uYW1lKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaCgxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cXVpcmsuY29scy5wdXNoKHF1aXJrQ29sdW1uKTtcblx0fVx0XHRcblx0XG5cdFxuXHQvLyB1c2VyIGRlZmluZWQgZ2F0ZXNcblx0aWYoIWRlY29tcG9zZSkge1xuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRmb3IoY3VzdG9tQ29sID0gMDsgY3VzdG9tQ29sIDwgY3VzdG9tR2F0ZUNpcmN1aXQubnVtQ29scygpOyBjdXN0b21Db2wrKyl7XG5cdFx0XHRcdFx0XHRmb3IoY3VzdG9tV2lyZSA9IDA7IGN1c3RvbVdpcmUgPCBjdXN0b21HYXRlQ2lyY3VpdC5udW1HYXRlcygpOyBjdXN0b21XaXJlKyspe1xuXHRcdFx0XHRcdFx0XHR2YXIgY2lyY3VpdEdhdGUgPSBjdXN0b21HYXRlQ2lyY3VpdC5nZXRHYXRlQXQoY3VzdG9tQ29sLCBjdXN0b21XaXJlKTtcblx0XHRcdFx0XHRcdFx0aWYoY2lyY3VpdEdhdGUgJiYgY2lyY3VpdEdhdGUubmFtZSA9PSB1c2VkR2F0ZU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdGN1c3RvbUdhdGVPYmogPSBjdXN0b21HYXRlQ2lyY3VpdC5kZWNvbXBvc2VHYXRlQXQoY3VzdG9tQ29sLCBjdXN0b21XaXJlKTtcblx0XHRcdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZU9iaik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cXVpcmsuZ2F0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRpZDogXCJ+XCIgKyB1c2VkR2F0ZU5hbWUsXG5cdFx0XHRcdFx0XHRjaXJjdWl0OiBjdXN0b21DaXJjdWl0LmV4cG9ydFF1aXJrKHRydWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBxdWlyaztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydENpcnEgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGFzSnVweXRlciwgc2hvdHMsIGV4cG9ydFRmcSkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGV4cG9ydFRmcTogZXhwb3J0VGZxXG5cdH07XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQ2lycShvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UVNoYXJwID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyLCBhc0p1cHl0ZXIsIGNpcmN1aXROYW1lLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0Y2lyY3VpdE5hbWU6IGNpcmN1aXROYW1lLFxuXHRcdGluZGVudERlcHRoOiBpbmRlbnREZXB0aFxuXHR9O1xuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1FTaGFycChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFFvYmogPSBmdW5jdGlvbihjaXJjdWl0TmFtZSwgZXhwZXJpbWVudE5hbWUsIG51bVNob3RzLCBjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y2lyY3VpdE5hbWU6IGNpcmN1aXROYW1lLFxuXHRcdGV4cGVyaW1lbnROYW1lOiBleHBlcmltZW50TmFtZSxcblx0XHRudW1TaG90czogbnVtU2hvdHNcblx0fTtcblx0XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUW9iaihvcHRpb25zLCBjaXJjdWl0UmVwbGFjZW1lbnQpXHRcbn1cblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW1wb3J0UW9iaiA9IGZ1bmN0aW9uKHFvYmosIGVycm9yQ2FsbGJhY2spIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHRoaXMuaW5pdCgpO1xuXG5cdGlmKCFxb2JqIHx8ICFxb2JqLmV4cGVyaW1lbnRzIHx8ICFxb2JqLmV4cGVyaW1lbnRzLmxlbmd0aCkge1xuXHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogXCJJbnZhbGlkIGlucHV0IGZpbGU6IG5vIGV4cGVyaW1lbnRzIGZvdW5kLlwiIH0gXSk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciBleHBlcmltZW50ID0gcW9iai5leHBlcmltZW50c1swXTtcblxuXHR2YXIgaGVhZGVyID0gZXhwZXJpbWVudC5oZWFkZXIgfHwge307XG5cblx0Ly8gQWRkIHF1Yml0c1xuXHR0aGlzLmluaXQocGFyc2VJbnQoaGVhZGVyLm5fcXViaXRzIHx8IDApKTtcblxuXHQvLyBDbGFzc2ljYWwgcmVnaXN0ZXJzXG5cdHZhciBjcmVnRGF0YSA9IHt9O1xuXHRpZihoZWFkZXIuY3JlZ19zaXplcyAmJiBoZWFkZXIuY3JlZ19zaXplcy5sZW5ndGgpIHtcblx0XHR2YXIgdG90YWxCaXRzID0gMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgaGVhZGVyLmNyZWdfc2l6ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjcmVnRGVmID0gaGVhZGVyLmNyZWdfc2l6ZXNbaV07XG5cdFx0XHRpZihjcmVnRGVmLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0dmFyIGNyZWdOYW1lID0gY3JlZ0RlZlswXSArIFwiXCI7XG5cdFx0XHRcdHZhciBjcmVnTGVuID0gcGFyc2VJbnQoY3JlZ0RlZlsxXSk7XG5cdFx0XHRcdHRoaXMuY3JlYXRlQ3JlZyhjcmVnTmFtZSwgY3JlZ0xlbik7XG5cblx0XHRcdFx0dmFyIGNyZWdNYXNrID0gKCgxIDw8ICh0b3RhbEJpdHMgKyBjcmVnTGVuKSkgLSAoMSA8PCB0b3RhbEJpdHMpKTtcblxuXHRcdFx0XHRjcmVnRGF0YVtjcmVnTmFtZV0gPSB7XG5cdFx0XHRcdFx0bWFzazogY3JlZ01hc2ssXG5cdFx0XHRcdFx0b2Zmc2V0OiB0b3RhbEJpdHNcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0b3RhbEJpdHMgKz0gY3JlZ0xlbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gY2xhc3NpY2FsIGNvbmRpdGlvbiBhcmd1bWVudCBmb3IgZ2F0ZSBmcm9tIGJmdW5jIG1hc2sgYW5kIHZhbHVlXG5cdGZ1bmN0aW9uIGNvbmRpdGlvbkZyb21NYXNrQW5kVmFsdWUobWFzaywgdmFsdWUpIHtcblx0XHRmb3IodmFyIGNyZWdOYW1lIGluIGNyZWdEYXRhKSB7XG5cdFx0XHR2YXIgZGF0YSA9IGNyZWdEYXRhW2NyZWdOYW1lXTtcblxuXHRcdFx0aWYoZGF0YS5tYXNrID09IG1hc2spIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRjcmVnOiBjcmVnTmFtZSxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWUgPj4gZGF0YS5vZmZzZXRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE9idGFpbiBjbGFzc2ljYWwgcmVnaXN0ZXIgbmFtZSBhbmQgbG9jYWwgYml0IG51bWJlciBmcm9tIGdsb2JhbCBiaXQgbnVtYmVyXG5cdGZ1bmN0aW9uIG1lbW9yeVRvQ3JlZyhtZW1vcnkpIHtcblx0XHR2YXIgdG90YWxCaXRzID0gMDtcblx0XHRmb3IodmFyIGNyZWdOYW1lIGluIHNlbGYuY3JlZ3MpIHtcblx0XHRcdHZhciBjcmVnID0gc2VsZi5jcmVnc1tjcmVnTmFtZV07XG5cdFx0XHRpZigodG90YWxCaXRzICsgY3JlZy5sZW5ndGgpID4gbWVtb3J5KSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmFtZTogY3JlZ05hbWUsXG5cdFx0XHRcdFx0Yml0OiBtZW1vcnkgLSB0b3RhbEJpdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHRvdGFsQml0cyArPSBjcmVnLmxlbmd0aDtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBBZGQgZ2F0ZXNcblx0dmFyIGluc3RydWN0aW9ucyA9IGV4cGVyaW1lbnQuaW5zdHJ1Y3Rpb25zIHx8IFtdO1xuXHR2YXIgY29uZGl0aW9ucyA9IHt9O1xuXHRmb3IodmFyIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGV4cGVyaW1lbnQuaW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaW5zdEluZGV4KyspIHtcblx0XHR2YXIgaW5zdCA9IGV4cGVyaW1lbnQuaW5zdHJ1Y3Rpb25zW2luc3RJbmRleF07XG5cblx0XHRzd2l0Y2goaW5zdC5uYW1lKSB7XG5cdFx0XHQvLyBjbGFzc2ljYWwgY29udHJvbFxuXHRcdFx0Y2FzZSBcImJmdW5jXCI6IHtcblx0XHRcdFx0dmFyIGNvbmRpdGlvbiA9IGNvbmRpdGlvbkZyb21NYXNrQW5kVmFsdWUocGFyc2VJbnQoaW5zdC5tYXNrKSwgcGFyc2VJbnQoaW5zdC52YWwpKTtcblxuXHRcdFx0XHRpZighY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBjbGFzc2ljYWwgY29uZGl0aW9uLlwiO1xuXHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbmRpdGlvbnNbaW5zdC5yZWdpc3Rlcl0gPSBjb25kaXRpb247XG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Ly8gTWVhc3VyZW1lbnRcblx0XHRcdGNhc2UgXCJtZWFzdXJlXCI6IHtcblx0XHRcdFx0Zm9yKHZhciBxSW5kZXggPSAwOyBxSW5kZXggPCBpbnN0LnF1Yml0cy5sZW5ndGg7IHFJbmRleCsrKSB7XG5cdFx0XHRcdFx0dmFyIHF1Yml0ID0gaW5zdC5xdWJpdHNbcUluZGV4XTtcblx0XHRcdFx0XHR2YXIgbWVtb3J5ID0gaW5zdC5tZW1vcnlbcUluZGV4XTtcblx0XHRcdFx0XHR2YXIgY3JlZyA9IG1lbW9yeVRvQ3JlZyhtZW1vcnkpO1xuXHRcdFx0XHRcdGlmKCFjcmVnKSB7XG5cdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIG1lYXN1cmVtZW50IGRlc3RpbmF0aW9uLlwiO1xuXHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSB9IF0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7IGNyZWc6IGNyZWcgfTtcblxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kR2F0ZShcIm1lYXN1cmVcIiwgcXViaXQsIG9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Y2FzZSBcImJhcnJpZXJcIjoge1xuXHRcdFx0XHQvLyAhISEgTm90IGltcGxlbWVudGVkIHlldC4gSWdub3JlIGZvciBub3cuXG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Ly8gTm9ybWFsIGdhdGVcblx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0cGFyYW1zOiB7fSxcblx0XHRcdFx0XHRjb25kaXRpb246IHt9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gRmluZCBnYXRlIGRlZmluaXRpb25cblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gaW5zdC5uYW1lO1xuXHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRjYXNlIFwiaWRlblwiOiBnYXRlTmFtZSA9IFwiaWRcIjsgYnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiVW5rbm93biBnYXRlIFxcXCJcIiArIGluc3QubmFtZSArIFwiXFxcIi5cIjtcblx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSB9IF0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHYXRlIHBhcmFtcyAoaWYgYW55KVxuXHRcdFx0XHRpZihnYXRlRGVmLnBhcmFtcyAmJiBnYXRlRGVmLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRpZighaW5zdC5wYXJhbXMgfHwgIWluc3QucGFyYW1zLmxlbmd0aCB8fCBpbnN0LnBhcmFtcy5sZW5ndGggIT0gZ2F0ZURlZi5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIG51bWJlciBvZiBwYXJhbXMgZm9yIGdhdGUgXFxcIlwiICsgaW5zdC5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSB9IF0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHBhckluZGV4ID0gMDsgcGFySW5kZXggPCBnYXRlRGVmLnBhcmFtcy5sZW5ndGg7IHBhckluZGV4KyspIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBnYXRlRGVmLnBhcmFtc1twYXJJbmRleF07XG5cdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID0gaW5zdC5wYXJhbXNbcGFySW5kZXhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENsYXNzaWNhbCBjb250cm9sIChpZiBhbnkpXG5cdFx0XHRcdGlmKHR5cGVvZiBpbnN0LmNvbmRpdGlvbmFsICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHR2YXIgY29uZGl0aW9uID0gY29uZGl0aW9uc1tpbnN0LmNvbmRpdGlvbmFsXTtcblx0XHRcdFx0XHRpZighY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGNsYXNzaWNhbCBjb25kaXRpb24uXCI7XG5cdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvcHRpb25zLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBnYXRlIHRvIGNpcmN1aXRcblx0XHRcdFx0dGhpcy5hcHBlbmRHYXRlKGdhdGVOYW1lLCBpbnN0LnF1Yml0cywgb3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBlcnJvciBoYW5kbGluZyBpcyBjcipwIGJ1dCBsZXQncyBiZSBjb25zaXN0ZW50IHdpdGggaW1wb3J0UUFTTSgpIGZvciBub3dcblx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdGVycm9yQ2FsbGJhY2soW10pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VEZRID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyLCBhc0p1cHl0ZXIsIHNob3RzKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHNcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9URlEob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG59XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRCcmFrZXQgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGFzSnVweXRlciwgc2hvdHMsIGh5YnJpZCwgaW5kZW50RGVwdGgpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRoeWJyaWQ6IGh5YnJpZCxcblx0XHRpbmRlbnREZXB0aDogaW5kZW50RGVwdGhcblx0fTtcblxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb0JyYWtldChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFNWRyA9IGZ1bmN0aW9uKGVtYmVkZGVkLCBvcHRpb25zKSB7XG5cdHZhciBuZXdPcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0bmV3T3B0aW9ucy5lbWJlZGRlZCA9ICEhZW1iZWRkZWQ7XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9TVkcobmV3T3B0aW9ucyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9TVkcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblx0dmFyIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdG9wdGlvbnMuZW1iZWRkZWQgPSBvcHRpb25zLmVtYmVkZGVkIHx8IGZhbHNlO1xuXHRvcHRpb25zLmNlbGxXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoIHx8IDQwO1xuXHRvcHRpb25zLmNlbGxIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgfHwgNDA7XG5cdG9wdGlvbnMuaFNwYWNpbmcgPSBvcHRpb25zLmhTcGFjaW5nIHx8IDI4O1xuXHRvcHRpb25zLnZTcGFjaW5nID0gb3B0aW9ucy52U3BhY2luZyB8fCAzNDtcblx0b3B0aW9ucy5ibGFja2JveFBhZGRpbmdYID0gb3B0aW9ucy5ibGFja2JveFBhZGRpbmdYIHx8IDI7XG5cdG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWSA9IG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWSB8fCAyO1xuXHRvcHRpb25zLmJsYWNrYm94TGluZUNvbG9yID0gb3B0aW9ucy5ibGFja2JveExpbmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMuYmxhY2tib3hTZWxlY3RlZExpbmVDb2xvciA9IG9wdGlvbnMuYmxhY2tib3hTZWxlY3RlZExpbmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMud2lyZUNvbG9yID0gb3B0aW9ucy53aXJlQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLmdhdGVMaW5lQ29sb3IgPSBvcHRpb25zLmdhdGVMaW5lQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA9IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy5jV2lyZUNvbG9yID0gb3B0aW9ucy5jV2lyZUNvbG9yIHx8IFwic2lsdmVyXCI7XG5cdG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yID0gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgfHwgXCJzaWx2ZXJcIjtcblx0b3B0aW9ucy5jQXJyb3dTaXplID0gb3B0aW9ucy5jQXJyb3dTaXplIHx8IDEwO1xuXHRvcHRpb25zLmhXaXJlQ29sb3IgPSBvcHRpb25zLmhXaXJlQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLndpcmVXaWR0aCA9IG9wdGlvbnMud2lyZVdpZHRoIHx8IDE7XG5cdG9wdGlvbnMud2lyZVRleHRIZWlnaHQgPSBvcHRpb25zLndpcmVUZXh0SGVpZ2h0IHx8IDg7XG5cdG9wdGlvbnMud2lyZVRleHREb3duID0gb3B0aW9ucy53aXJlVGV4dERvd24gfHwgMTY7XG5cdG9wdGlvbnMud2lyZU1hcmdpbiA9IG9wdGlvbnMud2lyZU1hcmdpbiB8fCAyMDtcblx0b3B0aW9ucy53aXJlTGFiZWxXaWR0aCA9IG9wdGlvbnMud2lyZUxhYmVsV2lkdGggfHwgNDA7XG5cdG9wdGlvbnMuZG90UmFkaXVzID0gb3B0aW9ucy5kb3RSYWRpdXMgfHwgNTtcblx0b3B0aW9ucy5wYXJhbVRleHRIZWlnaHQgPSBvcHRpb25zLnBhcmFtVGV4dEhlaWdodCB8fCA2O1xuXHRvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdYID0gb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWCB8fCA0O1xuXHRvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdZID0gb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWSB8fCA0O1xuXHRvcHRpb25zLnNlbGVjdGlvbkxpbmVDb2xvciA9IG9wdGlvbnMuc2VsZWN0aW9uTGluZUNvbG9yIHx8IFwiIzIxODVEMFwiO1xuXHRvcHRpb25zLmRyYXdCbG9jaFNwaGVyZXMgPSBvcHRpb25zLmRyYXdCbG9jaFNwaGVyZXMgfHwgZmFsc2U7XG5cblx0aWYodHlwZW9mIG9wdGlvbnMuZHJhd0h5YnJpZCA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0b3B0aW9ucy5kcmF3SHlicmlkID0gdGhpcy5vcHRpb25zID8gISF0aGlzLm9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cdH1cblxuXHR2YXIgZ2V0Q3JlZ0luZGV4ID0gZnVuY3Rpb24obmFtZSkge1xuXHRcdHZhciBjcmVnSW5kZXggPSAwO1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gc2VsZi5jcmVncykge1xuXHRcdFx0aWYoY3JlZ05hbWUgPT0gbmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gY3JlZ0luZGV4O1xuXHRcdFx0fVxuXHRcdFx0Y3JlZ0luZGV4Kys7XG5cdFx0fVxuXHRcdHJldHVybiBjcmVnSW5kZXg7XG5cdH07XG5cblx0dmFyIGdldENlbGxYID0gZnVuY3Rpb24oY29sKSB7XG5cdFx0cmV0dXJuIG9wdGlvbnMud2lyZUxhYmVsV2lkdGggKyAoKG9wdGlvbnMuY2VsbFdpZHRoICsgb3B0aW9ucy5oU3BhY2luZykgKiBjb2wpICsgb3B0aW9ucy5oU3BhY2luZztcblx0fTtcblxuXHR2YXIgZ2V0Q2VsbFkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdFx0cmV0dXJuICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiB3aXJlKSArIG9wdGlvbnMudlNwYWNpbmc7XG5cdH07XG5cblx0dmFyIG51bVJvd3MgPSB0aGlzLm51bVF1Yml0cztcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0dmFyIG51bUNyZWdzID0gdGhpcy5jcmVnQ291bnQoKTtcblxuXHR2YXIgdG90YWxDb2xzID0gbnVtQ29scztcblx0Ly8gcmVzZXJ2ZSBjb2wgZm9yIGJsb2NoIHNwaGVyZXNcblx0aWYob3B0aW9ucy5kcmF3QmxvY2hTcGhlcmVzKSB7XG5cdFx0dG90YWxDb2xzKys7XG5cdH1cblxuXHR2YXIgdG90YWxXaXJlQ29scyA9IHRvdGFsQ29scztcblxuXHQvLyByZXNlcnZlIDIgY29scyBmb3IgaHlicmlkIHF1YW50dW0tY2xhc3NpY2FsIGNvbm5lY3RvclxuXHRpZihvcHRpb25zLmRyYXdIeWJyaWQpIHtcblx0XHR0b3RhbENvbHMgKz0gMjtcblx0fVxuXG5cdHZhciB0b3RhbFdpZHRoID0gZ2V0Q2VsbFgodG90YWxDb2xzKTtcblx0dmFyIHRvdGFsV2lyZVdpZHRoID0gZ2V0Q2VsbFgodG90YWxXaXJlQ29scyk7XG5cdHZhciB0b3RhbEhlaWdodCA9ICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiAobnVtUm93cyArIG51bUNyZWdzICsgKG9wdGlvbnMuZHJhd0h5YnJpZCA/IDEgOiAwKSkpICsgb3B0aW9ucy52U3BhY2luZztcblxuXHR2YXIgaHlicmlkWSA9ICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiAobnVtUm93cyArIG51bUNyZWdzKSkgKyBvcHRpb25zLnZTcGFjaW5nO1xuXHR2YXIgaHlicmlkV2lyZVkgPSAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogKG51bVJvd3MgKyBudW1DcmVncykpICsgKG9wdGlvbnMudlNwYWNpbmcgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMikpO1xuXG5cdGZ1bmN0aW9uIHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBhbmdsZUluRGVncmVlcykge1xuXHRcdHZhciBhbmdsZUluUmFkaWFucyA9IChhbmdsZUluRGVncmVlcyAtIDkwKSAqIE1hdGguUEkgLyAxODAuMDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IGNlbnRlclggKyAocmFkaXVzICogTWF0aC5jb3MoYW5nbGVJblJhZGlhbnMpKSxcblx0XHRcdFx0eTogY2VudGVyWSArIChyYWRpdXMgKiBNYXRoLnNpbihhbmdsZUluUmFkaWFucykpXG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRlc2NyaWJlQXJjKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUpe1xuXG5cdFx0dmFyIHN0YXJ0ID0gcG9sYXJUb0NhcnRlc2lhbih4LCB5LCByYWRpdXMsIGVuZEFuZ2xlKTtcblx0XHR2YXIgZW5kID0gcG9sYXJUb0NhcnRlc2lhbih4LCB5LCByYWRpdXMsIHN0YXJ0QW5nbGUpO1xuXG5cdFx0dmFyIGxhcmdlQXJjRmxhZyA9IGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSA8PSAxODAgPyBcIjBcIiA6IFwiMVwiO1xuXG5cdFx0dmFyIGQgPSBbXG5cdFx0XHRcIk1cIiwgc3RhcnQueCwgc3RhcnQueSxcblx0XHRcdFwiQVwiLCByYWRpdXMsIHJhZGl1cywgMCwgbGFyZ2VBcmNGbGFnLCAwLCBlbmQueCwgZW5kLnlcblx0XHRdLmpvaW4oXCIgXCIpO1xuXG5cdFx0cmV0dXJuIGQ7XG5cdH1cblxuXHR2YXIgcVdpcmVZID0gZnVuY3Rpb24od2lyZSkge1xuXHRcdHJldHVybiAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogd2lyZSkgKyAob3B0aW9ucy52U3BhY2luZyArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKSk7XG5cdH07XG5cblx0dmFyIHFHYXRlWSA9IGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRyZXR1cm4gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIHdpcmUpICsgb3B0aW9ucy52U3BhY2luZztcblx0fTtcblxuXHR2YXIgY1dpcmVZID0gZnVuY3Rpb24oY3JlZ05hbWUpIHtcblx0XHRyZXR1cm4gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIChudW1Sb3dzICsgZ2V0Q3JlZ0luZGV4KGNyZWdOYW1lKSkpICsgKG9wdGlvbnMudlNwYWNpbmcgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMikpO1xuXHR9O1xuXG5cblx0ZnVuY3Rpb24gZ2F0ZUJveFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKSB7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLWJveFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0aWYoZ2F0ZUxhYmVsKSB7XG5cdFx0XHRyZXMgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtZ2F0ZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyAoZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMikpICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZICsgKGdhdGVIZWlnaHQgLyAyKSkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZmlsbD1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCI+XCIgKyBnYXRlTGFiZWwgKyBcIjwvdGV4dD5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZVJlY3RTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCkge1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICogMjtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0cmVzICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtcmVjdFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0aWYoZ2F0ZUxhYmVsKSB7XG5cdFx0XHRyZXMgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtZ2F0ZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyAoZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMikpICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZICsgKGdhdGVIZWlnaHQgLyAyKSkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCI+XCIgKyBnYXRlTGFiZWwgKyBcIjwvdGV4dD5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZUNpcmNsZVNWRyhjZWxsWCwgY2VsbFksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGNlbnRlclggPSBjZWxsWCArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gY2VsbFkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAwLjg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjg7XG5cdFx0dmFyIGdhdGVYID0gY2VsbFggKyAoKG9wdGlvbnMuY2VsbFdpZHRoIC0gZ2F0ZVdpZHRoKSAvIDIpO1xuXHRcdHZhciBnYXRlWSA9IGNlbGxZICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRyZXMgKz0gXCI8ZWxsaXBzZSBjbGFzcz1cXFwicWMtZ2F0ZS1ub3RcXFwiIGN4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgY3k9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiByeD1cXFwiXCIgKyAoZ2F0ZVdpZHRoIC8gMikgKyBcIlxcXCIgcnk9XFxcIlwiICsgKGdhdGVIZWlnaHQgLyAyKSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0aWYoZ2F0ZUxhYmVsKSB7XG5cdFx0XHRyZXMgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtZ2F0ZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyAoZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMikpICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZICsgKGdhdGVIZWlnaHQgLyAyKSkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCI+XCIgKyBnYXRlTGFiZWwgKyBcIjwvdGV4dD5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZU5vdFNWRyhjZWxsWCwgY2VsbFksIGdhdGVOYW1lLCBzZWxlY3RlZCkge1xuXHRcdHZhciBjZW50ZXJYID0gY2VsbFggKyAob3B0aW9ucy5jZWxsV2lkdGggLyAyKTtcblx0XHR2YXIgY2VudGVyWSA9IGNlbGxZICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpO1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICogMC44O1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0ICogMC44O1xuXHRcdHZhciBnYXRlWCA9IGNlbGxYICsgKChvcHRpb25zLmNlbGxXaWR0aCAtIGdhdGVXaWR0aCkgLyAyKTtcblx0XHR2YXIgZ2F0ZVkgPSBjZWxsWSArICgob3B0aW9ucy5jZWxsSGVpZ2h0IC0gZ2F0ZUhlaWdodCkgLyAyKTtcblxuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRyZXMgKz0gXCI8ZWxsaXBzZSBjbGFzcz1cXFwicWMtZ2F0ZS1ub3RcXFwiIGN4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgY3k9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiByeD1cXFwiXCIgKyAoZ2F0ZVdpZHRoIC8gMikgKyBcIlxcXCIgcnk9XFxcIlwiICsgKGdhdGVIZWlnaHQgLyAyKSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbm90LWxpbmVcXFwiIHgxPVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgeDI9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBnYXRlWSArXCJcXFwiIHkyPVxcXCJcIiArIChnYXRlWSArIGdhdGVIZWlnaHQpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJlcyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLW5vdC1saW5lXFxcIiB4MT1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyAoZ2F0ZVggKyBnYXRlV2lkdGgpICsgXCJcXFwiIHkxPVxcXCJcIiArIGNlbnRlclkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVHYXVnZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCkge1xuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHR2YXIgY2VudGVyWCA9IGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpO1xuXHRcdHZhciBtb3ZlZG93biA9IGdhdGVIZWlnaHQgLyA1O1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRyZXMgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1ib3hcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJlcyArPSBcIjxwYXRoIGNsYXNzPVxcXCJnYy1nYXRlLWdhdWdlLWFyY1xcXCIgZD1cXFwiXCIgKyBkZXNjcmliZUFyYyhjZW50ZXJYLCBjZW50ZXJZICsgbW92ZWRvd24sIGdhdGVXaWR0aCAvIDIuMywgMzAwLCA2MCkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJub25lXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtZ2F1Z2Utc2NhbGVcXFwiIHgxPVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgeDI9XFxcIlwiICsgKChnYXRlWCArIGdhdGVXaWR0aCkgLSBtb3ZlZG93bikgKyBcIlxcXCIgeTE9XFxcIlwiICsgKGNlbnRlclkgKyBtb3ZlZG93bikgKyBcIlxcXCIgeTI9XFxcIlwiICsgKGdhdGVZICsgbW92ZWRvd24pICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVYU1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICogMC40O1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0ICogMC40O1xuXHRcdHZhciBnYXRlWCA9IGNlbGxYICsgKChvcHRpb25zLmNlbGxXaWR0aCAtIGdhdGVXaWR0aCkgLyAyKTtcblx0XHR2YXIgZ2F0ZVkgPSBjZWxsWSArICgob3B0aW9ucy5jZWxsSGVpZ2h0IC0gZ2F0ZUhlaWdodCkgLyAyKTtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXHRcdHJlcyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLXhcXFwiIHgxPVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHgyPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeTE9XFxcIlwiICsgZ2F0ZVkgK1wiXFxcIiB5Mj1cXFwiXCIgKyAoZ2F0ZVkgKyBnYXRlSGVpZ2h0KSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXMgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS14XFxcIiB4MT1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyAoZ2F0ZVggKyBnYXRlV2lkdGgpICsgXCJcXFwiIHkxPVxcXCJcIiArIChnYXRlWSArIGdhdGVIZWlnaHQpICtcIlxcXCIgeTI9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVEb3RTVkcoY2VsbFgsIGNlbGxZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0dmFyIGNlbnRlclggPSBjZWxsWCArIChnYXRlV2lkdGggLyAyKTtcblx0XHR2YXIgY2VudGVyWSA9IGNlbGxZICsgKGdhdGVIZWlnaHQgLyAyKTtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXHRcdHJlcyArPSBcIjxjaXJjbGUgY2xhc3M9XFxcInFjLWdhdGUtZG90XFxcIiBjeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIGN5PVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgcj1cXFwiXCIgKyBvcHRpb25zLmRvdFJhZGl1cyArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLndpcmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMud2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVJbnZlcnRlZERvdFNWRyhjZWxsWCwgY2VsbFksIGdhdGVOYW1lLCBzZWxlY3RlZCkge1xuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHR2YXIgY2VudGVyWCA9IGNlbGxYICsgKGdhdGVXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gY2VsbFkgKyAoZ2F0ZUhlaWdodCAvIDIpO1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cdFx0cmVzICs9IFwiPGNpcmNsZSBjbGFzcz1cXFwicWMtZ2F0ZS1uZG90XFxcIiBjeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIGN5PVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgcj1cXFwiXCIgKyBvcHRpb25zLmRvdFJhZGl1cyArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLndpcmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIGNvbm5lY3RvciwgZHJhd0JveCwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdGlmKGNvbm5lY3RvciAhPSBcImJveFwiICYmIGRyYXdCb3gpIHtcblx0XHRcdHJlcyArPSBnYXRlQm94U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIFwiXCIsIHNlbGVjdGVkKTtcblx0XHR9XG5cblx0XHRzd2l0Y2goY29ubmVjdG9yKSB7XG5cdFx0XHRjYXNlIFwiYm94XCI6IHJlcyArPSBnYXRlQm94U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJyZWN0XCI6IHJlcyArPSBnYXRlUmVjdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwiY2lyY2xlXCI6IHJlcyArPSBnYXRlQ2lyY2xlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJub3RcIjogcmVzICs9IGdhdGVOb3RTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJ4XCI6IHJlcyArPSBnYXRlWFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcImRvdFwiOiByZXMgKz0gZ2F0ZURvdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm5kb3RcIjogcmVzICs9IGdhdGVJbnZlcnRlZERvdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcImdhdWdlXCI6IHJlcyArPSBnYXRlR2F1Z2VTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblxuXHRmdW5jdGlvbiBkcmF3R2F0ZShnYXRlLCBjb2xJbmRleCwgcm93SW5kZXgpIHtcblx0XHR2YXIgZGluZm8gPSBzZWxmLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSA/IHNlbGYuYmFzaWNHYXRlc1tnYXRlLm5hbWVdLmRyYXdpbmdJbmZvIDogbnVsbDtcblx0XHRpZighZGluZm8pIHtcblx0XHRcdGRpbmZvID0gc2VsZi5jdXN0b21HYXRlc1tnYXRlLm5hbWVdID8gc2VsZi5jdXN0b21HYXRlc1tnYXRlLm5hbWVdLmRyYXdpbmdJbmZvIDogbnVsbDtcblx0XHR9XG5cblx0XHR2YXIgYmxhY2tib3ggPSBmYWxzZTtcblx0XHR2YXIgc2VsZWN0ZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuc2VsZWN0aW9uICYmIG9wdGlvbnMuc2VsZWN0aW9uLmluZGV4T2YoZ2F0ZS5pZCkgPj0gMDtcblx0XHRpZighZGluZm8pIHtcblx0XHRcdGlmKGdhdGUud2lyZXMubGVuZ3RoID09IDEpIHtcblx0XHRcdFx0ZGluZm8gPSB7IGNvbm5lY3RvcnM6IFtcImJveFwiXSB9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGluZm8gPSB7IGNvbm5lY3RvcnM6IFtdIH07XG5cdFx0XHRcdGJsYWNrYm94ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUoZGluZm8uY29ubmVjdG9ycy5sZW5ndGggPCBnYXRlLndpcmVzLmxlbmd0aCkge1xuXHRcdFx0ZGluZm8uY29ubmVjdG9ycy5wdXNoKFwiYm94XCIpO1xuXHRcdH1cblxuXHRcdHZhciB0b3BXaXJlID0gTWF0aC5taW4uYXBwbHkobnVsbCwgZ2F0ZS53aXJlcyk7XG5cdFx0dmFyIGJvdHRvbVdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCBnYXRlLndpcmVzKTtcblx0XHR2YXIgY0xpbmtUb3BZID0gY1dpcmVZKGJvdHRvbVdpcmUpO1xuXG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cdFx0c3ZnICs9IFwiPGcgY2xhc3M9XFxcInFjLWdhdGUtZ3JvdXBcXFwiIGRhdGEtaWQ9XFxcIlwiICsgZ2F0ZS5pZCArIFwiXFxcIiBkYXRhLWdhdGU9XFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiPlwiO1xuXHRcdGlmKGJsYWNrYm94KSB7XG5cdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCkgLSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1g7XG5cdFx0XHR2YXIgZ2F0ZVkgPSBxR2F0ZVkodG9wV2lyZSkgLSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1k7XG5cdFx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKyAoMiAqIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWCk7XG5cdFx0XHR2YXIgZ2F0ZUhlaWdodCA9ICgocUdhdGVZKGJvdHRvbVdpcmUpICsgb3B0aW9ucy5jZWxsSGVpZ2h0KSAtIGdhdGVZKSArIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWTtcblxuXHRcdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChnYXRlV2lkdGggLyAyKTtcblxuXHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBnYXRlSGVpZ2h0O1xuXG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtYmxhY2tib3gtbGFiZWxcXFwiIHg9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB5PVxcXCJcIiArIChnYXRlWSAtIG9wdGlvbnMud2lyZVRleHRIZWlnaHQgLSAob3B0aW9ucy5ibGFja2JveFBhZGRpbmdZICogMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+XCIgKyAoZGluZm8ubGFiZWwgfHwgZ2F0ZS5uYW1lKSArIFwiPC90ZXh0PlwiO1xuXHRcdFx0c3ZnICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtYmxhY2tib3hcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuYmxhY2tib3hTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuYmxhY2tib3hMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcInRyYW5zcGFyZW50XFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0fVxuXG5cdFx0aWYoc2VsZWN0ZWQpIHtcblx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KSAtIG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1g7XG5cdFx0XHR2YXIgZ2F0ZVkgPSBxR2F0ZVkodG9wV2lyZSkgLSBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdZO1xuXHRcdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICsgKDIgKiBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdYKTtcblx0XHRcdHZhciBnYXRlSGVpZ2h0ID0gKChxR2F0ZVkoYm90dG9tV2lyZSkgKyBvcHRpb25zLmNlbGxIZWlnaHQpIC0gZ2F0ZVkpICsgb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWTtcblxuXHRcdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChnYXRlV2lkdGggLyAyKTtcblxuXHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBnYXRlSGVpZ2h0O1xuXG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1zZWxlY3Rpb25cXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuc2VsZWN0aW9uTGluZUNvbG9yICsgXCJcXFwiIGZpbGw9XFxcInRyYW5zcGFyZW50XFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gbGlua1xuXHRcdGlmKHRvcFdpcmUgIT0gYm90dG9tV2lyZSAmJiAhYmxhY2tib3gpIHtcblx0XHRcdHZhciBsaW5rWCA9IGdldENlbGxYKGNvbEluZGV4KSArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdFx0dmFyIGxpbmtZMSA9IGdldENlbGxZKHRvcFdpcmUpICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpO1xuXHRcdFx0dmFyIGxpbmtZMiA9IGdldENlbGxZKGJvdHRvbVdpcmUpICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpO1xuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbGlua1xcXCIgeDE9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeTE9XFxcIlwiICsgbGlua1kxICtcIlxcXCIgeTI9XFxcIlwiICsgbGlua1kyICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMud2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gY29ubmVjdG9yc1xuXHRcdHZhciBtYXhXaXJlID0gTWF0aC5tYXguYXBwbHkobnVsbCwgZ2F0ZS53aXJlcyk7XG5cdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od2lyZSwgY29ubmVjdG9yKSB7XG5cblx0XHRcdHN3aXRjaChkaW5mby5jb25uZWN0b3JzW2Nvbm5lY3Rvcl0pIHtcblx0XHRcdFx0Y2FzZSBcImJveFwiOiB7XG5cdFx0XHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZUJveFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGUubmFtZSwgKGJsYWNrYm94ID8gcXViaXRMZXR0ZXIoY29ubmVjdG9yLCBudW1Sb3dzKSA6IChkaW5mby5sYWJlbCB8fCBnYXRlLm5hbWUpKSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiY2lyY2xlXCI6IHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlQ2lyY2xlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZS5uYW1lLCAoYmxhY2tib3ggPyBxdWJpdExldHRlcihjb25uZWN0b3IsIG51bVJvd3MpIDogKGRpbmZvLmxhYmVsIHx8IGdhdGUubmFtZSkpLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZUhlaWdodCA9IChvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjgpO1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBnYXRlSGVpZ2h0ICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIm5vdFwiOiB7XG5cdFx0XHRcdFx0dmFyIGNlbGxYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHRcdHZhciBjZWxsWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZU5vdFNWRyhjZWxsWCwgY2VsbFksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0dmFyIGdhdGVIZWlnaHQgPSAob3B0aW9ucy5jZWxsSGVpZ2h0ICogMC44KTtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IGNlbGxZICsgZ2F0ZUhlaWdodCArICgob3B0aW9ucy5jZWxsSGVpZ2h0IC0gZ2F0ZUhlaWdodCkgLyAyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJ4XCI6IHtcblx0XHRcdFx0XHR2YXIgY2VsbFggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGNlbGxZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlWFNWRyhjZWxsWCwgY2VsbFksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gcVdpcmVZKGJvdHRvbVdpcmUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiZG90XCI6IHtcblx0XHRcdFx0XHR2YXIgY2VsbFggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGNlbGxZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlRG90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZS5uYW1lLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBxV2lyZVkoYm90dG9tV2lyZSkgKyBvcHRpb25zLmRvdFJhZGl1cztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJuZG90XCI6IHtcblx0XHRcdFx0XHR2YXIgY2VsbFggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGNlbGxZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlSW52ZXJ0ZWREb3RTVkcoY2VsbFgsIGNlbGxZLCBnYXRlLm5hbWUsIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IHFXaXJlWShib3R0b21XaXJlKSArIG9wdGlvbnMuZG90UmFkaXVzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcImdhdWdlXCI6IHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlR2F1Z2VTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlLm5hbWUsIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IGdhdGVZICsgb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHBhcmFtc1xuXHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgJiYgd2lyZSA9PSBtYXhXaXJlKSB7XG5cdFx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cdFx0XHRcdHZhciBjZW50ZXJYID0gZ2F0ZVggKyAob3B0aW9ucy5jZWxsV2lkdGggLyAyKTtcblxuXHRcdFx0XHR2YXIgcGFyYW1zU3RyID0gXCJcIjtcblx0XHRcdFx0Zm9yKHZhciBwYXJhbU5hbWUgaW4gZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdGlmKHBhcmFtc1N0cikge1xuXHRcdFx0XHRcdFx0cGFyYW1zU3RyICs9IFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgcGFyYW1WYWwgPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0XHRcdFx0aWYodHlwZW9mIHBhcmFtVmFsID09IFwic3RyaW5nXCIgJiYgcGFyYW1WYWwubWF0Y2goL15bXFwrXFwtXT9cXGQqXFwuP1xcZCsoPzpbRWVdW1xcK1xcLV0/XFxkKyk/JC8pKSB7XG5cdFx0XHRcdFx0XHRwYXJhbVZhbCA9IHBhcnNlRmxvYXQocGFyYW1WYWwpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHR5cGVvZiBwYXJhbVZhbCA9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0XHRwYXJhbVZhbCA9IG1hdGgucm91bmQocGFyYW1WYWwsIDMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHBhcmFtc1N0ciArPSBwYXJhbVZhbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtZ2F0ZS1wYXJhbXNcXFwiIHg9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB5PVxcXCJcIiArIChnYXRlWSArIG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMucGFyYW1UZXh0SGVpZ2h0KSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZm9udC1zaXplPVxcXCI3NSVcXFwiPlwiICsgcGFyYW1zU3RyICsgXCI8L3RleHQ+XCI7XG5cdFx0XHR9XG5cblx0XHR9KTtcblxuXHRcdC8vIG1lYXN1cmVcblx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpIHtcblx0XHRcdHZhciBsaW5rWCA9IGdldENlbGxYKGNvbEluZGV4KSArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdFx0dmFyIGxpbmtZMSA9IGNMaW5rVG9wWTtcblx0XHRcdHZhciBsaW5rWTIgPSBjV2lyZVkoZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSk7XG5cblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWxpbmstY1xcXCIgeDE9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeTE9XFxcIlwiICsgbGlua1kxICtcIlxcXCIgeTI9XFxcIlwiICsgbGlua1kyICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciA6IG9wdGlvbnMuY1dpcmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rLWNcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgxPVxcXCJcIiArIChsaW5rWCAtIChvcHRpb25zLmNBcnJvd1NpemUgLyAyKSkgKyBcIlxcXCIgeTE9XFxcIlwiICsgKGxpbmtZMiAtIG9wdGlvbnMuY0Fycm93U2l6ZSkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rLWNcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgxPVxcXCJcIiArIChsaW5rWCArIChvcHRpb25zLmNBcnJvd1NpemUgLyAyKSkgKyBcIlxcXCIgeTE9XFxcIlwiICsgKGxpbmtZMiAtIG9wdGlvbnMuY0Fycm93U2l6ZSkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHk9XFxcIlwiICsgKGxpbmtZMiArIG9wdGlvbnMud2lyZVRleHRIZWlnaHQpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+XCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIjwvdGV4dD5cIjtcblx0XHR9XG5cblx0XHQvLyBjb250cm9sbGVkIGJ5IGNsYXNzaWMgcmVnaXN0ZXJcblx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdHZhciBsaW5rWCA9IGdldENlbGxYKGNvbEluZGV4KSArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdFx0dmFyIGxpbmtZMSA9IGNMaW5rVG9wWTtcblx0XHRcdHZhciBsaW5rWTIgPSBjV2lyZVkoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKTtcblxuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbGluay1jXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdHN2ZyArPSBcIjxjaXJjbGUgY2xhc3M9XFxcInFjLWdhdGUtZG90LWNcXFwiIGN4PVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIGN5PVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiByPVxcXCJcIiArIG9wdGlvbnMuZG90UmFkaXVzICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciA6IG9wdGlvbnMuY1dpcmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciA6IG9wdGlvbnMuY1dpcmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtd2lyZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5PVxcXCJcIiArIChsaW5rWTIgKyBvcHRpb25zLndpcmVUZXh0SGVpZ2h0KSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZm9udC1zaXplPVxcXCI3NSVcXFwiPj09IFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjwvZz5cIjtcblxuXHRcdHJldHVybiBzdmc7XG5cdH1cblxuXHRmdW5jdGlvbiBkcmF3R2F0ZVBsYWNlaG9sZGVyKGNvbEluZGV4LCB3aXJlKSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKyBvcHRpb25zLmhTcGFjaW5nO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZztcblx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCkgLSBvcHRpb25zLmhTcGFjaW5nO1xuXHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpIC0gb3B0aW9ucy52U3BhY2luZztcblxuXHRcdGlmKHdpcmUgPT0gbnVtUm93cykge1xuXHRcdFx0Z2F0ZUhlaWdodCA9IG9wdGlvbnMudlNwYWNpbmc7XG5cdFx0fVxuXG5cdFx0aWYoY29sSW5kZXggPT0gbnVtQ29scykge1xuXHRcdFx0Z2F0ZVdpZHRoID0gb3B0aW9ucy5oU3BhY2luZztcblx0XHR9XG5cblx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1wbGFjZWhvbGRlclxcXCIgZGF0YS1yb3c9XFxcIlwiICsgd2lyZSArIFwiXFxcIiBkYXRhLWNvbD1cXFwiXCIgKyBjb2xJbmRleCArIFwiXFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwibm9uZVxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMFxcXCIgLz5cIjtcblxuXHRcdHJldHVybiBzdmc7XG5cdH1cblxuXHRmdW5jdGlvbiBkcmF3R2F0ZUhhbmRsZShnYXRlLCBjb2xJbmRleCwgd2lyZSkge1xuXHRcdHZhciBzdmcgPSBcIlwiO1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLWhhbmRsZVxcXCIgZGF0YS1pZD1cXFwiXCIgKyBnYXRlLmlkICsgXCJcXFwiIGRhdGEtZ2F0ZT1cXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIgZGF0YS1yb3c9XFxcIlwiICsgd2lyZSArIFwiXFxcIiBkYXRhLWNvbD1cXFwiXCIgKyBjb2xJbmRleCArIFwiXFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwibm9uZVxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMFxcXCIgLz5cIjtcblxuXHRcdHJldHVybiBzdmc7XG5cdH1cblxuXHRmdW5jdGlvbiBkcmF3R2F0ZUNhbnZhcyhjb2xJbmRleCwgd2lyZSwgY2xhc3NOYW1lLCBjYW52YXNJZCkge1xuXHRcdHZhciBzdmcgPSBcIlwiO1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXG5cdFx0c3ZnICs9IFwiPGcgY2xhc3M9XFxcIlwiICsgKGNsYXNzTmFtZSB8fCBcInFjLWNhbnZhcy1ncm91cFwiKSArIFwiXFxcIiBkYXRhLXJvdz1cXFwiXCIgKyB3aXJlICsgXCJcXFwiPlwiO1xuXHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1jYW52YXMtYm94XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwidHJhbnNwYXJlbnRcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0c3ZnICs9IFwiPGZvcmVpZ25PYmplY3QgY2xhc3M9XFxcInFjLWNhbnZhcy1vYmplY3RcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCI+XCI7XG5cdFx0c3ZnICs9IFwiPGRpdiBzdHlsZT1cXFwicG9zaXRpb246cmVsYXRpdmU7XFxcIj5cIjtcblx0XHRzdmcgKz0gXCI8Y2FudmFzIGlkPVxcXCJcIiArIGNhbnZhc0lkICsgXCItXCIgKyB3aXJlICsgXCJcXFwiIGNsYXNzPVxcXCJcIiArIGNhbnZhc0lkICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIj5cIjtcblx0XHRzdmcgKz0gXCI8L2NhbnZhcz5cIjtcblx0XHRzdmcgKz0gXCI8L2Rpdj5cIjtcblx0XHRzdmcgKz0gXCI8L2ZvcmVpZ25PYmplY3Q+XCI7XG5cdFx0c3ZnICs9IFwiPC9nPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cblx0ZnVuY3Rpb24gZXNjYXBlSHRtbChzdHIpIHtcblx0XHRyZXR1cm4gc3RyXG5cdFx0XHQucmVwbGFjZSgvJi9nLCBcIiZhbXA7XCIpXG5cdFx0XHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcblx0XHRcdC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKVxuXHRcdFx0LnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpXG5cdFx0XHQucmVwbGFjZSgvJy9nLCBcIiYjMDM5O1wiKTtcblx0fVxuXG5cdC8vIFxuXHQvLyAtIGdhdGVHYWxsZXJ5IGFuZCBjdXN0b21HYXRlR2FsbGVyeSBpcyB1c2VkIGZvciB0b29sYm94IHBhbGV0dGUgaW4gZHJhZyAmIGRyb3AgZWRpdG9yLlxuXHQvLyAtIGdhdGVHYWxsZXJ5UmF3IGlzIHVzZWQgdG8gZ2VuZXJhdGUgbGlzdCBvZiBhbGwgZ2F0ZSBzeW1ib2xzIHRoYXQgbG9vayB0aGUgc2FtZSBhcyBpbiBkaWFncmFtXG5cdC8vICAgKGdhdGUgc3ltYm9sIG9ubHkgd2l0aG91dCBjb250cm9sbGluZyB3aXJlKS4gVXNlZnVsIHRvIGdlbmVyYXRlIHRyYWluaW5nIHNldCBmb3IgY2lyY3VpdCBpbWFnZSByZWNvZ25pdGlvbi5cblx0Ly9cblx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSB8fCBvcHRpb25zLmdhdGVHYWxsZXJ5UmF3IHx8IG9wdGlvbnMuY3VzdG9tR2F0ZUdhbGxlcnkpIHtcblx0XHR2YXIgZ2F0ZUxpc3QgPSBbXTtcblxuXHRcdC8vIGJhc2ljIGdhdGVzXG5cdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSB8fCBvcHRpb25zLmdhdGVHYWxsZXJ5UmF3KSB7XG5cblx0XHRcdHZhciB1bmlxID0gW107XG5cdFx0XHRmb3IodmFyIGdhdGVOYW1lIGluIHRoaXMuYmFzaWNHYXRlcykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdHZhciBkaW5mbyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZS5kcmF3aW5nSW5mbyB8fCB7IGNvbm5lY3RvcnM6IFtcImJveFwiXSB9KSk7XG5cdFx0XHRcdGlmKGRpbmZvLmNvbm5lY3RvcnMpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZUxhYmVsID0gZGluZm8ubGFiZWwgfHwgZ2F0ZU5hbWU7XG5cdFx0XHRcdFx0dmFyIGNvbm5lY3RvciA9IGRpbmZvLmNvbm5lY3RvcnMgPyBkaW5mby5jb25uZWN0b3JzW2RpbmZvLmNvbm5lY3RvcnMubGVuZ3RoIC0gMV0gOiBcImJveFwiO1xuXG5cdFx0XHRcdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSkge1xuXHRcdFx0XHRcdFx0Ly8gRHJhdyBcInN3YXBcIiwgXCJjdTFcIiBhbmQgXCJjelwiIGdhdGVzIGFzIGJveFxuXHRcdFx0XHRcdFx0aWYoY29ubmVjdG9yID09IFwieFwiIHx8IGNvbm5lY3RvciA9PSBcImRvdFwiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3RvciA9IFwiYm94XCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIHVuaXFTdHIgPSBnYXRlTGFiZWwgKyBcInxcIiArIGNvbm5lY3RvcjtcblxuXHRcdFx0XHRcdGlmKHVuaXEuaW5kZXhPZih1bmlxU3RyKSA8IDAgJiYgZ2F0ZU5hbWUgIT0gXCJjY3hcIikge1xuXHRcdFx0XHRcdFx0dW5pcS5wdXNoKHVuaXFTdHIpO1xuXG5cdFx0XHRcdFx0XHR2YXIgc3ZnID0gXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFvcHRpb25zLmVtYmVkZGVkKSB7XG5cdFx0XHRcdFx0XHRcdHN2ZyArPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCI/PlwiO1xuXHRcdFx0XHRcdFx0XHRzdmcgKz1cIjwhRE9DVFlQRSBzdmcgUFVCTElDIFxcXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlxcXCIgXFxcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFxcXCI+XCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzdmcgKz0gXCI8c3ZnIGNsYXNzPVxcXCJxYy1nYXRlLWdhbGxlcnktaXRlbVxcXCIgZGF0YS1nYXRlPVxcXCJcIiArIGVzY2FwZUh0bWwoZ2F0ZU5hbWUpICsgXCJcXFwiIGRhdGEtY29udGVudD1cXFwiXCIgKyBlc2NhcGVIdG1sKGdhdGUuZGVzY3JpcHRpb24pICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIG9wdGlvbnMuY2VsbFdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXHRcdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZVNWRygwLCAwLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBjb25uZWN0b3IsICEhb3B0aW9ucy5nYXRlR2FsbGVyeSwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0c3ZnICs9IFwiPC9zdmc+XCI7XG5cblx0XHRcdFx0XHRcdGlmKG9wdGlvbnMuZ2F0ZUdhbGxlcnkpIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZUxpc3QucHVzaChzdmcpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZUxpc3QucHVzaCh7IG5hbWU6IGdhdGVOYW1lLCBzdmc6IHN2ZyB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gc3BlY2lhbCBpdGVtOiBkb3Rcblx0XHRcdHZhciBkb3RzdmcgPSBcIlwiO1xuXHRcdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdFx0ZG90c3ZnICs9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIj8+XCI7XG5cdFx0XHRcdGRvdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHRcdH1cblx0XHRcdGRvdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWdhdGUtZ2FsbGVyeS1pdGVtXFxcIiBkYXRhLWdhdGU9XFxcImRvdFxcXCIgZGF0YS1jb250ZW50PVxcXCJDb250cm9sXFxcIiB3aWR0aD1cXFwiXCIgKyBvcHRpb25zLmNlbGxXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgXCJcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj5cIjtcblx0XHRcdGRvdHN2ZyA9IGRvdHN2ZyArIGdhdGVTVkcoMCwgMCwgXCJkb3RcIiwgXCJkb3RcIiwgXCJkb3RcIiwgISFvcHRpb25zLmdhdGVHYWxsZXJ5LCBmYWxzZSk7XG5cdFx0XHRkb3RzdmcgKz0gXCI8L3N2Zz5cIjtcblxuXHRcdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSkge1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKGRvdHN2Zyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKHsgbmFtZTogXCJkb3RcIiwgc3ZnOiBkb3RzdmcgfSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNwZWNpYWwgaXRlbTogaW52ZXJ0ZWQgZG90XG5cdFx0XHR2YXIgbmRvdHN2ZyA9IFwiXCI7XG5cdFx0XHRpZighb3B0aW9ucy5lbWJlZGRlZCkge1xuXHRcdFx0XHRuZG90c3ZnICs9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIj8+XCI7XG5cdFx0XHRcdG5kb3RzdmcgKz1cIjwhRE9DVFlQRSBzdmcgUFVCTElDIFxcXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlxcXCIgXFxcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFxcXCI+XCI7XG5cdFx0XHR9XG5cdFx0XHRuZG90c3ZnICs9IFwiPHN2ZyBjbGFzcz1cXFwicWMtZ2F0ZS1nYWxsZXJ5LWl0ZW1cXFwiIGRhdGEtZ2F0ZT1cXFwibmRvdFxcXCIgZGF0YS1jb250ZW50PVxcXCJDb250cm9sXFxcIiB3aWR0aD1cXFwiXCIgKyBvcHRpb25zLmNlbGxXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgXCJcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj5cIjtcblx0XHRcdG5kb3RzdmcgPSBuZG90c3ZnICsgZ2F0ZVNWRygwLCAwLCBcIm5kb3RcIiwgXCJuZG90XCIsIFwibmRvdFwiLCAhIW9wdGlvbnMuZ2F0ZUdhbGxlcnksIGZhbHNlKTtcblx0XHRcdG5kb3RzdmcgKz0gXCI8L3N2Zz5cIjtcblxuXHRcdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSkge1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKG5kb3RzdmcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Z2F0ZUxpc3QucHVzaCh7IG5hbWU6IFwiZG90XCIsIHN2ZzogbmRvdHN2ZyB9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjdXN0b20gZ2F0ZXNcblx0XHRpZihvcHRpb25zLmN1c3RvbUdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRmb3IodmFyIGdhdGVOYW1lIGluIHRoaXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRcdFx0dmFyIHN2ZyA9IFwiXCI7XG5cdFx0XHRcdGlmKCFvcHRpb25zLmVtYmVkZGVkKSB7XG5cdFx0XHRcdFx0c3ZnICs9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIj8+XCI7XG5cdFx0XHRcdFx0c3ZnICs9XCI8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcXFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cXFwiIFxcXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcXFwiPlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWN1c3RvbS1nYXRlLWdhbGxlcnktaXRlbVxcXCIgZGF0YS1nYXRlPVxcXCJcIiArIGdhdGVOYW1lICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIChvcHRpb25zLmNlbGxXaWR0aCAqIDIpICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlU1ZHKDAsIDAsIGdhdGVOYW1lLCBnYXRlTmFtZSwgXCJyZWN0XCIsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKHN2Zyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGdhdGVMaXN0O1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzdmcgPSBcIlwiO1xuXHRcdGlmKCFvcHRpb25zLmVtYmVkZGVkKSB7XG5cdFx0XHRzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHR9XG5cblx0XHRzdmcgKz0gXCI8c3ZnIGNsYXNzPVxcXCJxYy1jaXJjdWl0XFxcIiB3aWR0aD1cXFwiXCIgKyB0b3RhbFdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyB0b3RhbEhlaWdodCArIFwiXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+XCI7XG5cblx0XHRpZihvcHRpb25zLnBsYWNlaG9sZGVycykge1xuXHRcdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPD0gbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRcdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8PSB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRcdFx0c3ZnICs9IGRyYXdHYXRlUGxhY2Vob2xkZXIoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFF1YW50dW0gd2lyZXNcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgbnVtUm93czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgd2lyZVkgPSBxV2lyZVkod2lyZSk7XG5cdFx0XHR2YXIgaW5pdFN5bWJvbCA9IFwiMFwiO1xuXHRcdFx0aWYob3B0aW9ucy5jdXN0b21HYXRlKSB7XG5cdFx0XHRcdGluaXRTeW1ib2wgPSBxdWJpdExldHRlcih3aXJlLCBudW1Sb3dzKTtcblx0XHRcdH1cblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWluaXRcXFwiIHg9XFxcIjBcXFwiIHk9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIj58XCIgKyBpbml0U3ltYm9sICsgXCImI3gwMjdFOTs8L3RleHQ+XCI7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZVxcXCIgeDE9XFxcIlwiICsgb3B0aW9ucy53aXJlTWFyZ2luICsgXCJcXFwiIHgyPVxcXCJcIiArIHRvdGFsV2lyZVdpZHRoICsgXCJcXFwiIHkxPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHkyPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLndpcmVDb2xvciArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIG9wdGlvbnMud2lyZU1hcmdpbiArIFwiXFxcIiB5PVxcXCJcIiArICh3aXJlWSAtIChvcHRpb25zLndpcmVUZXh0SGVpZ2h0KjIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+cVwiICsgd2lyZSArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdC8vIENsYXNzaWNhbCB3aXJlc1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdFx0dmFyIHdpcmVZID0gY1dpcmVZKGNyZWdOYW1lKTtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWluaXRcXFwiIHg9XFxcIjBcXFwiIHk9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIj4wPC90ZXh0PlwiO1xuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLXdpcmUtY1xcXCIgeDE9XFxcIlwiICsgb3B0aW9ucy53aXJlTWFyZ2luICsgXCJcXFwiIHgyPVxcXCJcIiArIHRvdGFsV2lyZVdpZHRoICsgXCJcXFwiIHkxPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHkyPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmNXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCJcIiArIG9wdGlvbnMud2lyZVdpZHRoICsgXCJcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtd2lyZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyBvcHRpb25zLndpcmVNYXJnaW4gKyBcIlxcXCIgeT1cXFwiXCIgKyAod2lyZVkgLSAob3B0aW9ucy53aXJlVGV4dEhlaWdodCAqIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+XCIgKyBjcmVnTmFtZSArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdC8vIEdhdGVzXG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdFx0aWYoZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcdFx0c3ZnICs9IGRyYXdHYXRlKGdhdGUsIGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gR2F0ZSBoYW5kbGVzIChmb3IgZHJhZyAmIGRyb3AgZWRpdG9yKVxuXHRcdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHRcdGlmKG9wdGlvbnMucGxhY2Vob2xkZXJzKSB7XG5cdFx0XHRcdFx0XHRzdmcgKz0gZHJhd0dhdGVIYW5kbGUoZ2F0ZSwgY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQbGFjZSBmb3IgYmxvY2ggc3BoZXJlIG9uIGVhY2ggcXVhbnR1bSB3aXJlXG5cdFx0aWYob3B0aW9ucy5kcmF3QmxvY2hTcGhlcmVzKSB7XG5cdFx0XHR2YXIgY3VycmVudENvbCA9IHRvdGFsQ29scyAtIDE7XG5cdFx0XHRpZihvcHRpb25zLmRyYXdIeWJyaWQpIHtcblx0XHRcdFx0Y3VycmVudENvbCAtPSAyO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHRzdmcgKz0gZHJhd0dhdGVDYW52YXMoY3VycmVudENvbCwgd2lyZSwgXCJxYy1ibG9jaC1ncm91cFwiLCBcInFjLWJsb2NoLWNhbnZhc1wiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBoeWJyaWQgcXVhbnR1bS1jbGFzc2ljYWxcblx0XHRpZihvcHRpb25zLmRyYXdIeWJyaWQpIHtcblx0XHRcdHZhciBjdXJyZW50Q29sID0gdG90YWxDb2xzIC0gMjtcblx0XHRcdC8vIGNvbm5lY3RvclxuXHRcdFx0dmFyIGNvbEluZGV4ID0gY3VycmVudENvbDtcblxuXHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgb3B0aW9ucy5ibGFja2JveFBhZGRpbmdYO1xuXHRcdFx0dmFyIGdhdGVZID0gcUdhdGVZKDApICsgb3B0aW9ucy5ibGFja2JveFBhZGRpbmdZO1xuXHRcdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoIC0gKDIgKiBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1gpO1xuXHRcdFx0dmFyIGdhdGVIZWlnaHQgPSAoKHFHYXRlWShudW1Sb3dzICsgbnVtQ3JlZ3MgLSAxKSArIG9wdGlvbnMuY2VsbEhlaWdodCkgLSBnYXRlWSkgLSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1k7XG5cblx0XHRcdHZhciBjZW50ZXJYID0gZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cdFx0XHR2YXIgY2VudGVyWSA9IGdhdGVZICsgKGdhdGVIZWlnaHQgLyAyKTtcblxuXHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBnYXRlSGVpZ2h0O1xuXG5cdFx0XHQvLyBjb3N0XG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtY29zdC1oXFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgcng9XFxcIjhcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtbGFiZWwtaFxcXCIgeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHk9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmaWxsPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtOTAsIFwiICsgY2VudGVyWCArIFwiLCBcIiArIGNlbnRlclkgKyBcIilcXFwiPkNvc3Q8L3RleHQ+XCI7XG5cblxuXHRcdFx0dmFyIGdhdGUyWCA9IGdldENlbGxYKGNvbEluZGV4ICsgMSkgKyBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1g7XG5cdFx0XHR2YXIgY2VudGVyMlggPSBnYXRlMlggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cblx0XHRcdC8vIGFycm93XG5cdFx0XHRzdmcgKz0gXCI8bWFya2VyIGlkPVxcXCJxYy1hcnJvdy1oZWFkXFxcIiBvcmllbnQ9XFxcImF1dG9cXFwiIG1hcmtlcldpZHRoPVxcXCI4XFxcIiBtYXJrZXJIZWlnaHQ9XFxcIjEwXFxcIiByZWZYPVxcXCI4XFxcIiByZWZZPVxcXCI1XFxcIj48cGF0aCBkPVxcXCJNMCwwIFYxMCBMOCw1IFpcXFwiIGZpbGw9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiLz48L21hcmtlcj5cIjtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1saW5rLWhcXFwiIHgxPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeDI9XFxcIlwiICsgZ2F0ZTJYICsgXCJcXFwiIHkxPVxcXCJcIiArIGNlbnRlclkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCJcIiArIG9wdGlvbnMud2lyZVdpZHRoICsgXCJcXFwiIG1hcmtlci1lbmQ9XFxcInVybCgjcWMtYXJyb3ctaGVhZClcXFwiIC8+XCI7XG5cblxuXHRcdFx0Ly8gb3B0aW1pemVyXG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtb3B0aW1pemVyLWhcXFwiIHg9XFxcIlwiICsgZ2F0ZTJYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgcng9XFxcIjhcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtbGFiZWwtaFxcXCIgeD1cXFwiXCIgKyBjZW50ZXIyWCArIFwiXFxcIiB5PVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZmlsbD1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgdHJhbnNmb3JtPVxcXCJyb3RhdGUoLTkwLCBcIiArIGNlbnRlcjJYICsgXCIsIFwiICsgY2VudGVyWSArIFwiKVxcXCI+T3B0aW1pemVyPC90ZXh0PlwiO1xuXG5cdFx0XHQvLyBsaW5rXG5cdFx0XHR2YXIgbGlua1ggPSBjZW50ZXIyWDtcblx0XHRcdHZhciBsaW5rWTEgPSBjTGlua1RvcFk7XG5cdFx0XHR2YXIgbGlua1kyID0gaHlicmlkV2lyZVk7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdC8vIENvbm5lY3QgYWxsIGdsb2JhbGx5IHBhcmFtZXRyaXplZCBnYXRlc1xuXHRcdFx0dmFyIGhXaXJlWCA9IDA7XG5cdFx0XHR2YXIgZ2xvYmFsUGFyYW1zSW5mbyA9IHRoaXMuZmluZEdsb2JhbFBhcmFtcygpO1xuXHRcdFx0aWYoZ2xvYmFsUGFyYW1zSW5mby5nbG9iYWxQYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGhXaXJlWCA9IGdldENlbGxYKGdsb2JhbFBhcmFtc0luZm8uY2VsbHNbMF1bMF0pICsgb3B0aW9ucy5jZWxsV2lkdGggKyAob3B0aW9ucy5oU3BhY2luZyAvIDIpO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZ2xvYmFsUGFyYW1zSW5mby5jZWxscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBjZWxsID0gZ2xvYmFsUGFyYW1zSW5mby5jZWxsc1tpXTtcblxuXHRcdFx0XHRcdHZhciBsaW5rMlggPSBnZXRDZWxsWChjZWxsWzBdKSArIG9wdGlvbnMuY2VsbFdpZHRoICsgKG9wdGlvbnMuaFNwYWNpbmcgLyAyKTtcblx0XHRcdFx0XHR2YXIgbGluazJZMiA9IGdldENlbGxZKGNlbGxbMV0pICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZyAtIChvcHRpb25zLnBhcmFtVGV4dEhlaWdodCAvIDIpO1xuXHRcdFx0XHRcdHZhciBsaW5rMlkxID0gaHlicmlkV2lyZVk7XG5cdFx0XHRcdFx0dmFyIGNlbGxCb3R0b21SaWdodFggPSBnZXRDZWxsWChjZWxsWzBdKSArIG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdFx0XHRcdHZhciBjZWxsQm90dG9tUmlnaHRZID0gZ2V0Q2VsbFkoY2VsbFsxXSkgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyAob3B0aW9ucy5wYXJhbVRleHRIZWlnaHQgKiAyKSArIDQ7XG5cdFx0XHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLXdpcmUtaFxcXCIgeDE9XFxcIlwiICsgbGluazJYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmsyWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rMlkxICtcIlxcXCIgeTI9XFxcIlwiICsgbGluazJZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBsaW5rMlggKyBcIlxcXCIgeDI9XFxcIlwiICsgY2VsbEJvdHRvbVJpZ2h0WCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rMlkyICtcIlxcXCIgeTI9XFxcIlwiICsgY2VsbEJvdHRvbVJpZ2h0WSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgbWFya2VyLWVuZD1cXFwidXJsKCNxYy1hcnJvdy1oZWFkKVxcXCIgLz5cIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB3aXJlWSA9IGh5YnJpZFdpcmVZO1xuXHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBoV2lyZVggKyBcIlxcXCIgeDI9XFxcIlwiICsgY2VudGVyMlggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgLz5cIjtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gTm8gZ2F0ZXMgd2l0aCBnbG9iYWwgcGFyYW1zXG5cdFx0XHRcdGhXaXJlWCA9IGdldENlbGxYKHRvdGFsV2lyZUNvbHMpO1xuXG5cdFx0XHRcdHZhciB3aXJlWSA9IGh5YnJpZFdpcmVZO1xuXHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBjZW50ZXIyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBoV2lyZVggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgIG1hcmtlci1lbmQ9XFxcInVybCgjcWMtYXJyb3ctaGVhZClcXFwiIC8+XCI7XG5cdFx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13YXJuaW5nLWhcXFwiIHg9XFxcIlwiICsgKGhXaXJlWCAtIDUpICsgXCJcXFwiIHk9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcImVuZFxcXCI+PzwvdGV4dD5cIjtcblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXHR9XG5cblx0cmV0dXJuIHN2Zztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1Fpc2tpdCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgcHJvdmlkZXJOYW1lID0gb3B0aW9ucy5wcm92aWRlck5hbWU7XG5cdHZhciBiYWNrZW5kTmFtZSA9IG9wdGlvbnMuYmFja2VuZE5hbWU7XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0dmFyIGh5YnJpZCA9IG9wdGlvbnMuaHlicmlkO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHRwcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWUgfHwgXCJBZXJcIjtcblxuXHRiYWNrZW5kTmFtZSA9IGJhY2tlbmROYW1lIHx8IFwiXCI7XG5cdGlmKCFiYWNrZW5kTmFtZSAmJiBwcm92aWRlck5hbWUgPT0gXCJBZXJcIikge1xuXHRcdGJhY2tlbmROYW1lID0gXCJxYXNtX3NpbXVsYXRvclwiO1xuXHR9XG5cblx0c2hvdHMgPSBzaG90cyB8fCAxMDI0O1xuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMC43XCIpO1xuXHRpZihpc05hTih2ZXJzaW9uKSkge1xuXHRcdHZlcnNpb24gPSAwLjc7XG5cdH1cblxuXHRpZih0eXBlb2YgaHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRoeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHFpc2tpdCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwiIyBcIjtcblx0XHRcdH1cblx0XHRcdHFpc2tpdCArPSBjbGluZTtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiLCBcInNpblwiLCBcImNvc1wiLCBcInRhblwiLCBcImFzaW5cIiwgXCJhY29zXCIsIFwiYXRhblwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblxuXHRcdFx0aWYoc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpID49IDAgJiYgaHlicmlkKSB7XG5cdFx0XHRcdHJldHVybiBcInBhcmFtc1tcIiArIHNlbGYucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSArIFwiXVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgYWRqdXN0SWRlbnRhdGlvbiA9IGZ1bmN0aW9uKGFkZFN0ciwgaWRlbnQpIHtcblx0XHR2YXIgc3RyID0gXCJcIjtcblxuXHRcdC8vIGFkZCB1c2VyIGRlZmluZWQgY29zdCBmdW5jdGlvbiB3aXRoIHByb3BlciBpZGVudGF0aW9uXG5cdFx0dmFyIGNmTGluZXMgPSBhZGRTdHIuc3BsaXQoXCJcXG5cIik7XG5cdFx0dmFyIG1pbklkZW50ID0gLTE7XG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHR2YXIgdG1wSWRlbnQgPSBjZkxpbmUuc2VhcmNoKC9cXFMvKTtcblx0XHRcdGlmKHRtcElkZW50ID49IDAgJiYgKG1pbklkZW50IDwgMCB8fCB0bXBJZGVudCA8IG1pbklkZW50KSkge1xuXHRcdFx0XHRtaW5JZGVudCA9IHRtcElkZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYobWluSWRlbnQgPCAwKSB7XG5cdFx0XHRtaW5JZGVudCA9IDA7XG5cdFx0fVxuXG5cdFx0dmFyIGFkZElkZW50ID0gXCJcIjtcblx0XHRpZihtaW5JZGVudCA8IGlkZW50Lmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciB0bXAgPSAwOyB0bXAgPCAoaWRlbnQubGVuZ3RoIC0gbWluSWRlbnQpOyB0bXArKykge1xuXHRcdFx0XHRhZGRJZGVudCArPSBcIiBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHN0ciArPSBhZGRJZGVudCArIGNmTGluZSArIFwiXFxuXCI7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxaXNraXQgKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgXCIocWNcIjtcblxuXHRcdHZhciBhcmdjID0gMDtcblx0XHRpZihjaXJjdWl0LnBhcmFtcyAmJiBjaXJjdWl0LnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgcGMgPSAwOyBwYyA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgcGMrKykge1xuXHRcdFx0XHRxaXNraXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRhcmdjKys7XG5cdFx0XHRcdHFpc2tpdCArPSBjaXJjdWl0LnBhcmFtc1twY107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRhcmdjKys7XG5cdFx0XHRxaXNraXQgKz0gcXViaXRMZXR0ZXIoaSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdH1cblx0XHRxaXNraXQgKz0gXCIpOlxcblwiO1xuXHR9IGVsc2Uge1xuXHRcdGlmKCFjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0XHRcdHFpc2tpdCArPSBcImZyb20gcWlza2l0IGltcG9ydCBRdWFudHVtUmVnaXN0ZXIsIENsYXNzaWNhbFJlZ2lzdGVyXFxuXCI7XG5cdFx0XHRxaXNraXQgKz0gXCJmcm9tIHFpc2tpdCBpbXBvcnQgUXVhbnR1bUNpcmN1aXQsIGV4ZWN1dGUsIFwiICsgcHJvdmlkZXJOYW1lICsgXCJcXG5cIjtcblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcImZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0cWlza2l0ICs9IFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblxuXHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwic2hvdHMgPSBcIiArIHNob3RzICsgXCJcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdGlmKHRoaXMucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwidG9sZXJhbmNlID0gXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSB8fCBcIjAuMDAxXCIgOiBcIjAuMDAxXCIpICsgXCJcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdFx0XHRcdFx0XHRcdHByb3ZpZGVyTmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRiYWNrZW5kTmFtZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRzaG90czogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0aHlicmlkOiBudWxsXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUWlza2l0KG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBpZGVudGF0aW9uID0gXCJcIjtcblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRpZGVudGF0aW9uID0gXCIgIFwiO1xuXG5cdFx0XHRcdHFpc2tpdCArPSBcImRlZiBvYmplY3RpdmVfZnVuY3Rpb24ocGFyYW1zKTpcXG5cIlxuXHRcdFx0fVxuXG5cdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicWMgPSBRdWFudHVtQ2lyY3VpdCgpXFxuXCI7XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblxuXHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInEgPSBRdWFudHVtUmVnaXN0ZXIoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiLCAncScpXFxuXCI7XG5cdFx0XHRmb3IodmFyIGNyZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBjcmVnTmFtZSArIFwiID0gQ2xhc3NpY2FsUmVnaXN0ZXIoXCIgKyAodGhpcy5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoIHx8IDEpICsgXCIsICdcIiArIGNyZWdOYW1lICsgXCInKVxcblwiO1xuXHRcdFx0fVxuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cblx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJxYy5hZGRfcmVnaXN0ZXIocSlcXG5cIjtcblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicWMuYWRkX3JlZ2lzdGVyKFwiICsgY3JlZ05hbWUgKyBcIilcXG5cIjtcblx0XHRcdH1cblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdH1cblx0fVxuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1x0XG5cdFx0XHR2YXIgcWlza2l0UmVwbGFjZW1lbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFpc2tpdEVxdWl2YWxlbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFpc2tpdENvbmRpdGlvbiA9IG51bGw7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0XG5cdFx0XHRcdHFpc2tpdENvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyA/IGdhdGUub3B0aW9ucy5jb25kaXRpb24gOiBudWxsO1xuXG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdGlmKGdhdGVEZWYpe1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0LnJlcGxhY2VtZW50KXtcblx0XHRcdFx0XHRcdFx0cWlza2l0UmVwbGFjZW1lbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0LnJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRxaXNraXRSZXBsYWNlbWVudC5tYXAoZnVuY3Rpb24ocmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMoZ2F0ZS5vcHRpb25zLnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRQYXJhbXMgPSBPYmplY3Qua2V5cyhyZXBsYWNlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlcGxhY2VtZW50UGFyYW1zLmluZGV4T2YocGFyYW0pID4gLTEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnBhcmFtc1twYXJhbV0gPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmFkZEdhdGUocmVwbGFjZW1lbnQubmFtZSwgY29sdW1uLCBnYXRlLndpcmVzLCB7cGFyYW1zOiByZXBsYWNlbWVudC5wYXJhbXMsIGNvbmRpdGlvbjogcWlza2l0Q29uZGl0aW9ufSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvdmlkZXJOYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tlbmROYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG90czogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRoeWJyaWQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSByZXBsYWNlbWVudENpcmN1aXQuZXhwb3J0VG9RaXNraXQobmV3T3B0aW9ucywgZmFsc2UsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZihnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQuZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdEVxdWl2YWxlbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0LmVxdWl2YWxlbnQ7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdEVxdWl2YWxlbnQubWFwKGZ1bmN0aW9uKGVxdWl2YWxlbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlcXVpdmFsZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBlcXVpdmFsZW50LndpcmVzLmxlbmd0aCA+IDEgPyBnYXRlLndpcmVzIDogZ2F0ZS53aXJlc1tlcXVpdmFsZW50LndpcmVzWzBdXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXFQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRpZihlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZ2F0ZVBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtc1tnYXRlUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBlcVBhcmFtTmFtZSBpbiBlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcVBhcmFtc1tlcVBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGVxdWl2YWxlbnQucGFyYW1zW2VxUGFyYW1OYW1lXSwgZ2F0ZVBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuYWRkR2F0ZShlcXVpdmFsZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZVdpcmVzLCB7IHBhcmFtczogZXFQYXJhbXMsIGNvbmRpdGlvbjogcWlza2l0Q29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHByb3ZpZGVyTmFtZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRiYWNrZW5kTmFtZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvdHM6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0aHlicmlkOiBudWxsXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gZXF1aXZhbGVudENpcmN1aXQuZXhwb3J0VG9RaXNraXQobmV3T3B0aW9ucywgZmFsc2UsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighcWlza2l0UmVwbGFjZW1lbnQgJiYgIXFpc2tpdEVxdWl2YWxlbnQpIHtcblx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSB8fCBoeWJyaWQpIHtcblx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiAgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIXFpc2tpdFJlcGxhY2VtZW50ICYmICFxaXNraXRFcXVpdmFsZW50KSB7XG5cblx0XHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cblx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRcdHFpc2tpdCArPSBcInFjLlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQubmFtZSl7XG5cdFx0XHRcdFx0XHRnYXRlTmFtZSA9IGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQubmFtZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHFpc2tpdCArPSBnYXRlTmFtZSArIFwiKFwiO1xuXG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRpZihnYXRlUGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblxuXHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCJxY1wiO1xuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdIHx8IGdhdGVQYXJhbXNbcGFyYW1OYW1lXS50b1N0cmluZygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcImN1XCIgJiYgIWdhdGVQYXJhbXNbXCJnYW1tYVwiXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiLCAwXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcInFbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHFpc2tpdCArPSBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgXCJbXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIl1cIjtcblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiKVwiO1x0XHRcdFx0XHRcblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiLmNfaWYoXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgKyBcIiwgXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICsgXCIpXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZighY2lyY3VpdFJlcGxhY2VtZW50KSB7XG5cdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXG5cdFx0XHR2YXIgaWRlbnRhdGlvbiA9IFwiXCI7XG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0aWRlbnRhdGlvbiA9IFwiICBcIjtcblx0XHRcdH1cblxuXHRcdFx0aWYocHJvdmlkZXJOYW1lID09IFwiQWVyXCIpIHtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImJhY2tlbmQgPSBBZXIuZ2V0X2JhY2tlbmQoJ1wiICsgYmFja2VuZE5hbWUgKyBcIicpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJqb2IgPSBleGVjdXRlKHFjLCBiYWNrZW5kPWJhY2tlbmRcIjtcblx0XHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIHNob3RzPXNob3RzXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWlza2l0ICs9IFwiKVxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiam9iX3Jlc3VsdCA9IGpvYi5yZXN1bHQoKVxcblwiO1xuXG5cdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJjb3VudHMgPSBDb3VudGVyKGpvYl9yZXN1bHQuZ2V0X2NvdW50cyhxYykpXFxuXCI7XG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCJcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGlkZW50YXRpb24pO1xuXG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCJcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJwcmludChqb2JfcmVzdWx0LmdldF9jb3VudHMocWMpKVxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmKHByb3ZpZGVyTmFtZSA9PSBcIklCTVFcIikge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiSUJNUS5sb2FkX2FjY291bnQoKVxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicHJvdmlkZXIgPSBJQk1RLmdldF9wcm92aWRlcihodWI9XFxcImlibS1xXFxcIiwgZ3JvdXA9XFxcIm9wZW5cXFwiLCBwcm9qZWN0PVxcXCJtYWluXFxcIilcXG5cIjtcblx0XHRcdFx0aWYoYmFja2VuZE5hbWUpIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiYmFja2VuZCA9IHByb3ZpZGVyLmdldF9iYWNrZW5kKFxcXCJcIiArIGJhY2tlbmROYW1lICsgXCJcXFwiKVxcblwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQgIHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJiYWNrZW5kcyA9IHByb3ZpZGVyLmJhY2tlbmRzKClcXG5cIjtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiYmFja2VuZCA9IGxlYXN0X2J1c3koYmFja2VuZHMpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImpvYiA9IGV4ZWN1dGUocWMsIGJhY2tlbmQ9YmFja2VuZFwiO1xuXHRcdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgc2hvdHM9c2hvdHNcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxaXNraXQgKz0gXCIpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJqb2JfcmVzdWx0ID0gam9iLnJlc3VsdCgpXFxuXCI7XG5cblx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImNvdW50cyA9IENvdW50ZXIoam9iX3Jlc3VsdC5nZXRfY291bnRzKHFjKSlcXG5cIjtcblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHFpc2tpdCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaWRlbnRhdGlvbik7XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInByaW50KGpvYl9yZXN1bHQuZ2V0X2NvdW50cyhxYykpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHR0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24oZ2xvYmFsUGFyYW1OYW1lLCBnbG9iYWxQYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0aWYoZ2xvYmFsUGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBnbG9iYWxQYXJhbU5hbWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJwYXJhbXMgPSBucC5hcnJheShbXCIgKyBnbG9iYWxQYXJhbUxpc3QgKyBcIl0pXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJtaW5pbXVtID0gbWluaW1pemUob2JqZWN0aXZlX2Z1bmN0aW9uLCBwYXJhbXMsIG1ldGhvZD1cXFwiXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA6IFwiUG93ZWxsXCIpICsgXCJcXFwiLCB0b2w9dG9sZXJhbmNlKVxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJwcmludChcXFwiY29zdDpcXFwiLCBtaW5pbXVtLmZ1biwgXFxcInBhcmFtczpcXFwiLCBtaW5pbXVtLngpXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cblx0XHRpZihhc0p1cHl0ZXIpIHtcblx0XHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdFx0c291cmNlOiBxaXNraXQsXG5cdFx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF1cblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBxaXNraXQ7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RdUVTVCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGRlZmluZWRGdW5jKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdGRlZmluZWRGdW5jID0gZGVmaW5lZEZ1bmMgfHwgW107XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXHR2YXIgZnVuY3Rpb25zID0gW1widW5pdGFyeVwiLFwiY29udHJvbGxlZFVuaXRhcnlcIl07XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcXVlc3QgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAyICYmIGNsaW5lWzBdICE9IFwiL1wiICYmIGNsaW5lWzFdICE9IFwiL1wiKSB7XG5cdFx0XHRcdHF1ZXN0ICs9IFwiLy8gXCI7XG5cdFx0XHR9XG5cdFx0XHRxdWVzdCArPSBjbGluZTtcblx0XHRcdHF1ZXN0ICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdHZhciBnYXRlcyA9IHRoaXMuZ2F0ZXNbaV07XG5cdFx0Zm9yKHZhciBqID0gMDsgaiA8IGdhdGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGdhdGVzW2pdO1xuXHRcdFx0aWYoIWdhdGUgfHwgIXRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdKXtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdLmV4cG9ydEluZm8gJiYgdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mby5xdWVzdCkge1xuXHRcdFx0XHR2YXIgcXVlc3ROYW1lID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mby5xdWVzdC5uYW1lO1xuXHRcdFx0XHRpZihkZWZpbmVkRnVuYy5pbmNsdWRlcyhnYXRlLm5hbWUpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZnVuY3Rpb25zLmluY2x1ZGVzKHF1ZXN0TmFtZSkgfHwgdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mby5xdWVzdC5mdW5jICkge1xuXHRcdFx0XHRcdGRlZmluZWRGdW5jLnB1c2goZ2F0ZS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxdWVzdCArPSBcIlF1cmVnIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIFwiKFF1cmVnIHF1Yml0c1wiO1xuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdHF1ZXN0ICs9IFwiLCBjb25zdCBpbnQgcVwiO1xuXHRcdFx0cXVlc3QgKz0gaTtcblx0XHR9XG5cblx0XHRpZihjaXJjdWl0LnBhcmFtcyAmJiBjaXJjdWl0LnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRxdWVzdCArPSBcIiwgZG91YmxlIFwiICsgY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHF1ZXN0ICs9IFwiKSB7XFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0cXVlc3QgKz0gXCIjaW5jbHVkZSA8bWF0aC5oPlxcbiNpbmNsdWRlIFxcXCJRdUVTVC5oXFxcIlxcblxcblwiO1xuXHRcdHF1ZXN0ICs9IFwiI2lmbmRlZiBNX1BJXFxuI2RlZmluZSBNX1BJIDMuMTQxNTkyNjVcXG4jZW5kaWZcXG5cXG5cIjtcblxuXHRcdHZhciBjdXN0b21RdUVTVCA9IFtdO1xuXG5cblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2Vcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRjdXN0b21RdUVTVC5wdXNoKGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RdUVTVChuZXdPcHRpb25zLCB1c2VkR2F0ZU5hbWUsIGRlZmluZWRGdW5jKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVmaW5lZEZ1bmMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBnYXRlTmFtZSA9IGRlZmluZWRGdW5jW2ldO1xuXHRcdFx0dmFyIHF1ZXN0TmFtZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0uZXhwb3J0SW5mby5xdWVzdC5uYW1lO1xuXHRcdFx0c3dpdGNoKHF1ZXN0TmFtZSkge1xuXHRcdFx0XHRjYXNlIFwidW5pdGFyeVwiOlxuXHRcdFx0XHRjYXNlIFwiY29udHJvbGxlZFVuaXRhcnlcIjoge1xuXHRcdFx0XHRcdG1hdHJpeCA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0uZXhwb3J0SW5mby5xdWVzdC5tYXRyaXg7XG5cdFx0XHRcdFx0dmFyIHF1ZXN0UGFyYW1zID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXS5leHBvcnRJbmZvLnF1ZXN0LnBhcmFtcztcblx0XHRcdFx0XHRxdWVzdCArPSBcInZvaWQgXCIgKyBnYXRlTmFtZSArIFwiKFF1cmVnIHF1Yml0cywgY29uc3QgaW50IHFcIjtcblx0XHRcdFx0XHRpZihxdWVzdE5hbWUgPT0gXCJjb250cm9sbGVkVW5pdGFyeVwiKSB7XG5cdFx0XHRcdFx0XHRxdWVzdCArPSBcIjEsIGNvbnN0IGludCBxMlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocXVlc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgaj0wOyBqIDwgcXVlc3RQYXJhbXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIGRvdWJsZSBcIiArIHF1ZXN0UGFyYW1zW2pdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWVzdCArPSBcIikge1xcblwiO1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIENvbXBsZXhNYXRyaXgyIHU7XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMGMwID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFswXVswXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMF1bMF1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMGMxID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFswXVsxXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMF1bMV1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMWMwID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFsxXVswXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMV1bMF1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMWMxID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFsxXVsxXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMV1bMV1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgXCIgKyBxdWVzdE5hbWUgKyBcIihxdWJpdHMsIHFcIlxuXHRcdFx0XHRcdGlmKHF1ZXN0TmFtZSA9PSBcImNvbnRyb2xsZWRVbml0YXJ5XCIpIHtcblx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiMSwgcTJcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIsIHUpO1xcbn1cXG5cXG5cIjtcblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogeyBxdWVzdCArPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdLmV4cG9ydEluZm8ucXVlc3QuZnVuYyArIFwiXFxuXFxuXCI7IH0gYnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGN1c3RvbVF1RVNULmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRxdWVzdCArPSBjdXN0b21RdUVTVFtpXTtcblx0XHR9XG5cblx0XHRxdWVzdCArPSBcImludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHtcXG5cIjtcblx0XHRxdWVzdCArPSBcIiAgICBRdUVTVEVudiBlbnYgPSBjcmVhdGVRdUVTVEVudigpO1xcblwiO1xuXHRcdHF1ZXN0ICs9IFwiICAgIFF1cmVnIHF1Yml0cyA9IGNyZWF0ZVF1cmVnKFwiICsgY2lyY3VpdC5udW1RdWJpdHMgK1wiLCBlbnYpO1xcblwiO1xuXHRcdHF1ZXN0ICs9IFwiICAgIGludCBtZWFzdXJlZFtcIiArIGNpcmN1aXQubnVtUXViaXRzICtcIl07XFxuXFxuXCI7XG5cdH1cblxuXHRxdWVzdCArPSBcIlxcblwiO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCJpZihcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyArIFwiPT1cIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIikge1xcblwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cblx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBtZWFzdXJlZFtcIiArIGdhdGUud2lyZXNbMF0gKyBcIl0gPSBtZWFzdXJlKHF1Yml0cywgXCIgKyBnYXRlLndpcmVzWzBdO1xuXHRcdFx0XHR9IGVsc2UgaWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdHZhciBxdWVzdE5hbWUgPSBnYXRlRGVmLmV4cG9ydEluZm8ucXVlc3QubmFtZTtcblx0XHRcdFx0XHR2YXIgcXVlc3RQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8ucXVlc3QucGFyYW1zO1xuXG5cdFx0XHRcdFx0aWYoZnVuY3Rpb25zLmluY2x1ZGVzKHF1ZXN0TmFtZSkpIHtcblx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIFwiICsgZ2F0ZU5hbWUgKyBcIihxdWJpdHNcIjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgXCIgKyBxdWVzdE5hbWUgKyBcIihxdWJpdHNcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIHFcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIFwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHF1ZXN0UGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2gocXVlc3ROYW1lKXtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImNvbXBhY3RVbml0YXJ5XCI6IHtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBxdWVzdFBhcmFtcy5hbHBoYTtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBxdWVzdFBhcmFtcy5iZXRhO1xuXHRcdFx0XHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwicGhhc2VTaGlmdFwiOlxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIjoge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHF1ZXN0UGFyYW1zLnRoZXRhKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBxdWVzdFBhcmFtcy50aGV0YTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBxdWJpdHMgPSBcIiArIGdhdGVOYW1lICsgXCIocXViaXRzXCI7XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXG5cdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cdFx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIFwiICsgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cXVlc3QgKz0gXCIpO1xcblwiO1xuXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwifVxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHF1ZXN0ICs9IFwiXFxuICAgIHJldHVybiBxdWJpdHM7XFxufVxcblxcblwiO1xuXHR9IGVsc2Uge1xuXHRcdHF1ZXN0ICs9IFwiXFxuICAgIGRlc3Ryb3lRdXJlZyhxdWJpdHMsIGVudik7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgZGVzdHJveVF1RVNURW52KGVudik7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgcmV0dXJuIDA7XFxufVxcblwiO1xuXHR9XG5cblx0cmV0dXJuIHF1ZXN0O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RQVNNID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIGNvbXBhdGliaWxpdHlNb2RlID0gb3B0aW9ucy5jb21wYXRpYmlsaXR5TW9kZTtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlKSB7XG5cdFx0XHRpZighY29tcGF0aWJpbGl0eU1vZGUgJiYgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpID49IDApIHtcblx0XHRcdFx0cmV0dXJuIGdsb2JhbFBhcmFtc1tub2RlLm5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgY2lyY3VpdCA9IG51bGw7XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcWFzbSA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDIgJiYgY2xpbmVbMF0gIT0gXCIvXCIgJiYgY2xpbmVbMV0gIT0gXCIvXCIpIHtcblx0XHRcdFx0cWFzbSArPSBcIi8vIFwiO1xuXHRcdFx0fVxuXHRcdFx0cWFzbSArPSBjbGluZTtcblx0XHRcdHFhc20gKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxYXNtICs9IFwiZ2F0ZSBcIiArIGV4cG9ydEFzR2F0ZU5hbWU7XG5cblx0XHRpZihjaXJjdWl0LnBhcmFtcyAmJiBjaXJjdWl0LnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdHFhc20gKz0gXCIoXCI7XG5cdFx0XHRmb3IodmFyIHBjID0gMDsgcGMgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IHBjKyspIHtcblx0XHRcdFx0aWYocGMgPiAwKSB7XG5cdFx0XHRcdFx0cWFzbSArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWFzbSArPSBjaXJjdWl0LnBhcmFtc1twY107XG5cdFx0XHR9XG5cdFx0XHRxYXNtICs9IFwiKVwiO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihpID09IDApIHtcblx0XHRcdFx0cWFzbSArPSBcIiBcIjtcblx0XHRcdH1cblx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdHFhc20gKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0cWFzbSArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0fVxuXHRcdHFhc20gKz0gXCJcXG57XFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoIWNpcmN1aXRSZXBsYWNlbWVudCl7XG5cdFx0XHRxYXNtICs9IFwiT1BFTlFBU00gMi4wO1xcblwiO1xuXHRcdFx0cWFzbSArPSBcImluY2x1ZGUgXFxcInFlbGliMS5pbmNcXFwiO1xcblwiO1xuXHRcdFx0cWFzbSArPSBcInFyZWcgcVtcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCJdO1xcblwiO1xuXG5cdFx0XHRmb3IodmFyIGNyZWdOYW1lIGluIGNpcmN1aXQuY3JlZ3MpIHtcblx0XHRcdFx0cWFzbSArPSBcImNyZWcgXCIgKyBjcmVnTmFtZSArIFwiW1wiICsgKGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVdLmxlbmd0aCB8fCAxKSArIFwiXTtcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0cWFzbSArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUUFTTShuZXdPcHRpb25zLCB1c2VkR2F0ZU5hbWUsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdHZhciBxYXNtUmVwbGFjZW1lbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFhc21FcXVpdmFsZW50ID0gbnVsbDtcblx0XHRcdFxuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBxYXNtTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0aWYoIWNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0XHRpZihnYXRlRGVmKXtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbyl7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRxYXNtTmFtZSA9IGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihnYXRlRGVmLmV4cG9ydEluZm8ucWFzbSAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdHFhc21SZXBsYWNlbWVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRcdHFhc21SZXBsYWNlbWVudC5tYXAoZnVuY3Rpb24ocmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtcyA9IE9iamVjdC5rZXlzKGdhdGUub3B0aW9ucy5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRQYXJhbXMgPSBPYmplY3Qua2V5cyhyZXBsYWNlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyZXBsYWNlbWVudFBhcmFtcy5pbmRleE9mKHBhcmFtKSA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wYXJhbXNbcGFyYW1dID0gZ2F0ZS5vcHRpb25zLnBhcmFtc1twYXJhbV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uIDoge307XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuYWRkR2F0ZShyZXBsYWNlbWVudC5uYW1lLCBjb2x1bW4sIGdhdGUud2lyZXMsIHsgcGFyYW1zOiByZXBsYWNlbWVudC5wYXJhbXMsIGNvbmRpdGlvbjogcmVwbGFjZW1lbnRDb25kaXRpb24gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29tcGF0aWJpbGl0eU1vZGU6IGNvbXBhdGliaWxpdHlNb2RlXG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0cWFzbSArPSByZXBsYWNlbWVudENpcmN1aXQuZXhwb3J0VG9RQVNNKG5ld09wdGlvbnMsIGZhbHNlLCB0cnVlLCAhIWV4cG9ydEFzR2F0ZU5hbWUgfHwgaW5zaWRlU3VibW9kdWxlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLmVxdWl2YWxlbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHFhc21FcXVpdmFsZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudDtcblx0XHRcdFx0XHRcdFx0XHRxYXNtRXF1aXZhbGVudC5tYXAoZnVuY3Rpb24oZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXF1aXZhbGVudENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBlcXVpdmFsZW50LndpcmVzLmxlbmd0aCA+IDEgPyBnYXRlLndpcmVzIDogZ2F0ZS53aXJlc1tlcXVpdmFsZW50LndpcmVzWzBdXTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGVxdWl2YWxlbnQgZ2F0ZSBwYXJhbXMgY2FuIGNvbnRhaW4gdmFyaWFibGUgZnJvbSBnYXRlIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBFdmFsdWF0ZSBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBnYXRlUGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXNbZ2F0ZVBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGdhdGUub3B0aW9ucy5wYXJhbXNbZ2F0ZVBhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEV2YWx1YXRlIGVxdWl2YWxlbnQgZ2F0ZSdzIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGVxUGFyYW1OYW1lIGluIGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXFQYXJhbXNbZXFQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShlcXVpdmFsZW50LnBhcmFtc1tlcVBhcmFtTmFtZV0sIGdhdGVQYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcUNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IHt9O1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVpdmFsZW50Q2lyY3VpdC5hZGRHYXRlKGVxdWl2YWxlbnQubmFtZSwgY29sdW1uLCBnYXRlV2lyZXMsIHsgcGFyYW1zOiBlcVBhcmFtcywgY29uZGl0aW9uOiBlcUNvbmRpdGlvbiB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRxYXNtICs9IGVxdWl2YWxlbnRDaXJjdWl0LmV4cG9ydFRvUUFTTShuZXdPcHRpb25zLCBcIlwiLCB0cnVlLCAhIWV4cG9ydEFzR2F0ZU5hbWUgfHwgaW5zaWRlU3VibW9kdWxlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFxYXNtUmVwbGFjZW1lbnQgJiYgIXFhc21FcXVpdmFsZW50KSB7XG5cdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0XHRcdFx0XHRcdHFhc20gKz0gXCIgIFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdHFhc20gKz0gXCJpZihcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyArIFwiPT1cIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIikgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoKCFxYXNtUmVwbGFjZW1lbnQgJiYgIXFhc21FcXVpdmFsZW50KSB8fCBjb21wYXRpYmlsaXR5TW9kZSkge1xuXHRcdFx0XHRcdHZhciBnYXRlTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXG5cdFx0XHRcdFx0cWFzbSArPSBjb21wYXRpYmlsaXR5TW9kZSA/IGdhdGUubmFtZSA6IHFhc21OYW1lO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCkge1xuXHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIgKFwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHAgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IGdhdGVQYXJhbXNbcGFyYW1OYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCFleHBvcnRBc0dhdGVOYW1lICYmICFpbnNpZGVTdWJtb2R1bGUgJiYgIWNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRxYXNtICs9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cdFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZih3ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRxYXNtICs9IFwiLFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiBcIiArIHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIgcVtcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpIHtcblx0XHRcdFx0XHRcdHFhc20gKz0gXCIgLT4gXCI7XG5cdFx0XHRcdFx0XHRxYXNtICs9IGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIltcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiXVwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHFhc20gKz0gXCI7XFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0cWFzbSArPSBcIn1cXG5cXG5cIjtcblx0fVxuXG5cdHJldHVybiBxYXNtO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUHlxdWlsID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGxhdHRpY2UgPSBvcHRpb25zLmxhdHRpY2U7XG5cdHZhciBhc1FWTSA9IG9wdGlvbnMuYXNRVk07XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0dmFyIGh5YnJpZCA9IG9wdGlvbnMuaHlicmlkO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQodmVyc2lvblN0ciB8fCBcIjIuMTJcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDIuMTtcblx0fVxuXG5cdGlmKCFzaG90cykge1xuXHRcdHNob3RzID0gMTAyNDtcblx0fVxuXG5cdGlmKHR5cGVvZiBoeWJyaWQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGh5YnJpZCA9IHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCAmJiBoeWJyaWQpIHtcblx0XHRcdFx0cmV0dXJuIFwicGFyYW1zW1wiICsgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpICsgXCJdXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGp1c3RJZGVudGF0aW9uID0gZnVuY3Rpb24oYWRkU3RyLCBpZGVudCkge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXG5cdFx0Ly8gYWRkIHVzZXIgZGVmaW5lZCBjb3N0IGZ1bmN0aW9uIHdpdGggcHJvcGVyIGlkZW50YXRpb25cblx0XHR2YXIgY2ZMaW5lcyA9IGFkZFN0ci5zcGxpdChcIlxcblwiKTtcblx0XHR2YXIgbWluSWRlbnQgPSAtMTtcblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHZhciB0bXBJZGVudCA9IGNmTGluZS5zZWFyY2goL1xcUy8pO1xuXHRcdFx0aWYodG1wSWRlbnQgPj0gMCAmJiAobWluSWRlbnQgPCAwIHx8IHRtcElkZW50IDwgbWluSWRlbnQpKSB7XG5cdFx0XHRcdG1pbklkZW50ID0gdG1wSWRlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZihtaW5JZGVudCA8IDApIHtcblx0XHRcdG1pbklkZW50ID0gMDtcblx0XHR9XG5cblx0XHR2YXIgYWRkSWRlbnQgPSBcIlwiO1xuXHRcdGlmKG1pbklkZW50IDwgaWRlbnQubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIHRtcCA9IDA7IHRtcCA8IChpZGVudC5sZW5ndGggLSBtaW5JZGVudCk7IHRtcCsrKSB7XG5cdFx0XHRcdGFkZElkZW50ICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0c3RyICs9IGFkZElkZW50ICsgY2ZMaW5lICsgXCJcXG5cIjtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cblx0dmFyIGltcG9ydEdhdGVzID0gXCJcIjtcblx0dmFyIGRlZlBhcmFtcyA9IFtdO1xuXHR2YXIgZGVmR2F0ZXMgPSBcIlwiO1xuXHR2YXIgZGVmUnVuID0gXCJcIjtcblx0dmFyIGRlZkFycmF5cyA9IFwiXCI7XG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR2YXIgZ290TWVhc3VyZW1lbnQgPSBjaXJjdWl0LmdvdE1lYXN1cmVtZW50KCk7XG5cblx0dmFyIGRlZkdhdGVOYW1lcyA9IFtdO1xuXHR2YXIgZGVmQ2lyY05hbWVzID0gW107XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8gJiYgYmFzaWNHYXRlLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdHZhciBxdWlsSW5mbyA9IGJhc2ljR2F0ZS5leHBvcnRJbmZvLnB5cXVpbDtcblx0XHRcdFx0aWYocXVpbEluZm8uYXJyYXkpIHtcblxuXHRcdFx0XHRcdC8vIGRlZmdhdGVcblxuXHRcdFx0XHRcdHZhciBwYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHRcdGlmKHF1aWxJbmZvLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwiLCBbXCI7XG5cdFx0XHRcdFx0XHRxdWlsSW5mby5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSwgcGFyYW1JbmRleCkge1xuXHRcdFx0XHRcdFx0XHRpZihwYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwicF9cIiArIHBhcmFtTmFtZTtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtVGV4dCA9IFwicF9cIiArIHBhcmFtTmFtZSArIFwiID0gUGFyYW1ldGVyKFxcJ1wiICsgcGFyYW1OYW1lICsgXCJcXCcpXCI7XG5cdFx0XHRcdFx0XHRcdGlmKGRlZlBhcmFtcy5pbmRleE9mKHBhcmFtVGV4dCkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVmUGFyYW1zLnB1c2gocGFyYW1UZXh0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCJdXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZGVmUnVuICs9IFwicC5pbnN0KFwiICsgcXVpbEluZm8ubmFtZSArIFwiX2RlZmdhdGUpXFxuXCI7XG5cdFx0XHRcdFx0ZGVmQXJyYXlzICs9IHF1aWxJbmZvLm5hbWUgKyBcIl9hcnJheSA9IG5wLmFycmF5KFwiICsgcXVpbEluZm8uYXJyYXkgKyBcIilcXG5cIjtcblx0XHRcdFx0XHRkZWZHYXRlcyArPSBxdWlsSW5mby5uYW1lICsgXCJfZGVmZ2F0ZSA9IERlZkdhdGUoXFwnXCIgKyBxdWlsSW5mby5uYW1lICsgXCJcXCcsIFwiICsgcXVpbEluZm8ubmFtZSArIFwiX2FycmF5XCIgKyBwYXJhbUxpc3QgKyBcIilcXG5cIjtcblx0XHRcdFx0XHRkZWZHYXRlcyArPSBxdWlsSW5mby5uYW1lICsgXCIgPSBcIiArIHF1aWxJbmZvLm5hbWUgKyBcIl9kZWZnYXRlLmdldF9jb25zdHJ1Y3RvcigpXFxuXCI7XG5cblx0XHRcdFx0XHRkZWZHYXRlTmFtZXMucHVzaChxdWlsSW5mby5uYW1lKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgaW1wb3J0TmFtZSA9IFwiXCI7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8ucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdHZhciBiZyA9IGNpcmN1aXQuYmFzaWNHYXRlc1txdWlsSW5mby5yZXBsYWNlbWVudC5uYW1lXTtcblx0XHRcdFx0XHRcdGlmKGJnKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdFx0XHRpZihiZy5leHBvcnRJbmZvLnB5cXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IGJnLmV4cG9ydEluZm8ucHlxdWlsLm5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gYmcuZXhwb3J0SW5mby5xdWlsLm5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBxdWlsSW5mby5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGltcG9ydE5hbWUpIHtcblx0XHRcdFx0XHRcdGlmKGltcG9ydEdhdGVzKSB7XG5cdFx0XHRcdFx0XHRcdGltcG9ydEdhdGVzICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGltcG9ydEdhdGVzICs9IGltcG9ydE5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mbyAmJiBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0dmFyIHF1aWxJbmZvID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpbDtcblxuXHRcdFx0XHRcdGlmKCFxdWlsSW5mby5kZWZnYXRlKSB7XG5cblx0XHRcdFx0XHRcdHZhciBpbXBvcnROYW1lID0gXCJcIjtcblx0XHRcdFx0XHRcdGlmKHF1aWxJbmZvLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBiZyA9IGNpcmN1aXQuYmFzaWNHYXRlc1txdWlsSW5mby5yZXBsYWNlbWVudC5uYW1lXTtcblx0XHRcdFx0XHRcdFx0aWYoYmcpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihiZy5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihiZy5leHBvcnRJbmZvLnB5cXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gYmcuZXhwb3J0SW5mby5weXF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBiZy5leHBvcnRJbmZvLnF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IHF1aWxJbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGltcG9ydE5hbWUpIHtcblx0XHRcdFx0XHRcdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRpbXBvcnRHYXRlcyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aW1wb3J0R2F0ZXMgKz0gaW1wb3J0TmFtZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBiYXNpYyBnYXRlIG5vdCBzdXBwb3J0ZWQgYnkgcHlxdWlsXG5cdFx0XHRcdFx0Ly8gVE9ETzogYWRkIHB5cXVpbCBkZWZpbmUgZ2F0ZSBjb2RlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIGltcG9ydCBNT1ZFLCBBTkQsIE9SIGlmIGNpcmN1aXQgaGFzIGNvbmRpdGlvbnNcblx0dmFyIGdvdENvbmRpdGlvbnMgPSBjaXJjdWl0LmdvdENsYXNzaWNhbENvbnRyb2woKTtcblx0aWYoZ290Q29uZGl0aW9ucykge1xuXHRcdGlmKGltcG9ydEdhdGVzKSB7XG5cdFx0XHRpbXBvcnRHYXRlcyArPSBcIiwgXCI7XG5cdFx0fVxuXHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRpbXBvcnRHYXRlcyArPSBcIkZBTFNFLCBOT1QsIE9SLCBBTkRcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW1wb3J0R2F0ZXMgKz0gXCJNT1ZFLCBOT1QsIElPUiwgQU5EXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGltcG9ydHNGb3JEZWZnYXRlID0gXCJcIjtcblx0aWYoZGVmR2F0ZXMpIHtcblx0XHRpZih2ZXJzaW9uIDwgMi4xMikge1xuXHRcdFx0aW1wb3J0c0ZvckRlZmdhdGUgPSBcImZyb20gcHlxdWlsLnBhcmFtZXRlcnMgaW1wb3J0IFBhcmFtZXRlciwgcXVpbF9zaW4sIHF1aWxfY29zLCBxdWlsX3NxcnQsIHF1aWxfZXhwLCBxdWlsX2Npc1xcbmZyb20gcHlxdWlsLnF1aWxiYXNlIGltcG9ydCBEZWZHYXRlXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGltcG9ydHNGb3JEZWZnYXRlID0gXCJmcm9tIHB5cXVpbC5xdWlsYXRvbSBpbXBvcnQgUGFyYW1ldGVyLCBxdWlsX3NpbiwgcXVpbF9jb3MsIHF1aWxfc3FydCwgcXVpbF9leHAsIHF1aWxfY2lzXFxuZnJvbSBweXF1aWwucXVpbGJhc2UgaW1wb3J0IERlZkdhdGVcIjtcdFx0XHRcblx0XHR9XG5cdH1cblxuXHR2YXIgcHlxdWlsID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMSAmJiBjbGluZVswXSAhPSBcIiNcIikge1xuXHRcdFx0XHRweXF1aWwgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0cHlxdWlsICs9IGNsaW5lO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgaW5kZW50ID0gXCJcIjtcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IFwicVwiICsgaTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdHB5cXVpbCArPSBcImRlZiBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyAoYXJncyA/IFwiKFwiICsgYXJncyArIFwiKVwiIDogXCJcIikgKyBcIjpcXG5cIjtcblx0XHRpbmRlbnQgPSBcIiAgXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gcHlxdWlsLmFwaSBpbXBvcnQgUVZNQ29ubmVjdGlvblxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBweXF1aWwucXVpbCBpbXBvcnQgUHJvZ3JhbVxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIHB5cXVpbCBpbXBvcnQgUHJvZ3JhbSwgZ2V0X3FjXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gcHlxdWlsLmdhdGVzIGltcG9ydCBcIiArIGltcG9ydEdhdGVzICsgXCJcXG5cIjtcblx0XHR9XG5cdFx0aWYoaW1wb3J0c0ZvckRlZmdhdGUpIHtcblx0XHRcdHB5cXVpbCArPSBpbXBvcnRzRm9yRGVmZ2F0ZSArIFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0cHlxdWlsICs9IFwiZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZVxcblwiO1xuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIHNjaXB5Lm9wdGltaXplIGltcG9ydCBtaW5pbWl6ZVxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlclxcblwiO1xuXG5cdFx0fVxuXG5cdFx0cHlxdWlsICs9IFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cblxuXHRcdGlmKHNob3RzKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcInNob3RzID0gXCIgKyBzaG90cyArIFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdGlmKHRoaXMucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0cHlxdWlsICs9IGdsb2JhbFBhcmFtTmFtZSArIFwiID0gXCIgKyBnbG9iYWxQYXJhbVZhbHVlICsgXCJcXG5cIjtcblx0XHRcdH1cblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0cHlxdWlsICs9IFwidG9sZXJhbmNlID0gXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSB8fCBcIjAuMDAxXCIgOiBcIjAuMDAxXCIpICsgXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGlmKGRlZkdhdGVzKSB7XG5cdFx0XHRkZWZQYXJhbXMubWFwKGZ1bmN0aW9uKGRlZlBhcmFtSXRlbSwgZGVmSW5kZXgpIHtcblx0XHRcdFx0aWYoZGVmSW5kZXggPT0gMCkge1xuXHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHB5cXVpbCArPSBkZWZQYXJhbUl0ZW0gKyBcIlxcblwiO1xuXHRcdFx0fSk7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBkZWZBcnJheXMgKyBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gZGVmR2F0ZXMgKyBcIlxcblwiO1xuXHRcdH1cblx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRUb1B5cXVpbChuZXdPcHRpb25zLCB1c2VkR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdFx0ZGVmQ2lyY05hbWVzLnB1c2godXNlZEdhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGlmKGh5YnJpZCkge1xuXHRcdGluZGVudCArPSBcIiAgXCI7XG5cblx0XHRweXF1aWwgKz0gXCJkZWYgb2JqZWN0aXZlX2Z1bmN0aW9uKHBhcmFtcyk6XFxuXCJcblx0fVxuXG5cdGlmKHZlcnNpb24gPj0gMiAmJiAhZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGlmKGFzUVZNIHx8IGxhdHRpY2UpIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAgPSBQcm9ncmFtKCdQUkFHTUEgSU5JVElBTF9SRVdJUklORyBcXFwiUEFSVElBTFxcXCInKVxcblxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwID0gUHJvZ3JhbSgpXFxuXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHRvdGFsQml0cyA9IGNpcmN1aXQuY3JlZ1RvdGFsQml0cygpO1xuXHRcdGlmKGdvdENvbmRpdGlvbnMpIHtcblx0XHRcdHRvdGFsQml0cyArPSAxO1xuXHRcdH07XG5cdFx0aWYodG90YWxCaXRzKSB7XG5cdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJybyA9IHAuZGVjbGFyZSgncm8nLCBtZW1vcnlfdHlwZT0nQklUJywgbWVtb3J5X3NpemU9XCIgKyB0b3RhbEJpdHMgKyBcIilcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwID0gUHJvZ3JhbSgpXFxuXFxuXCI7XG5cdH1cblxuXHRweXF1aWwgKz0gZGVmUnVuID8gKGluZGVudCArIGRlZlJ1biArIFwiXFxuXCIpIDogXCJcIjtcblxuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IGNpcmN1aXQubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBxdWlsSW5mbyA9IG51bGw7XG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnB5cXVpbC5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsLnJlcGxhY2VtZW50LnBhcmFtcztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwucmVwbGFjZW1lbnQubmFtZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucXVpbCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbEluZm8gPSBnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsSW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBpc0RlZkdhdGUgPSBmYWxzZTtcblx0XHRcdFx0XHR2YXIgaXNEZWZDaXJjID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8pIHtcblx0XHRcdFx0XHRcdGlzRGVmR2F0ZSA9IGRlZkdhdGVOYW1lcy5pbmRleE9mKHF1aWxJbmZvLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0XHRpc0RlZkNpcmMgPSBkZWZDaXJjTmFtZXMuaW5kZXhPZihxdWlsSW5mby5uYW1lKSA+PSAwO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpc0RlZkdhdGUgPSBkZWZHYXRlTmFtZXMuaW5kZXhPZihnYXRlLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0XHRpc0RlZkNpcmMgPSBkZWZDaXJjTmFtZXMuaW5kZXhPZihnYXRlLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGluc2lkZUNvbnRyb2wgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0Ly8gRmxvdyBjb250cm9sXG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdGluc2lkZUNvbnRyb2wgPSB0cnVlO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciB0ZXN0Qml0ID0gc2VsZi5jcmVnVG90YWxCaXRzKCk7XG5cdFx0XHRcdFx0XHR2YXIgY29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0XHRcdHZhciBjb25kaXRpb25WYWx1ZSA9IGNvbmRpdGlvbi52YWx1ZSB8fCAwO1xuXHRcdFx0XHRcdFx0dmFyIGNyZWdCYXNlID0gc2VsZi5jcmVnQmFzZShjb25kaXRpb24uY3JlZyk7XG5cblx0XHRcdFx0XHRcdGlmKGNvbmRpdGlvblZhbHVlID09IDApIHtcblx0XHRcdFx0XHRcdFx0dmFyIGNyZWdTaXplID0gc2VsZi5jcmVnc1tjb25kaXRpb24uY3JlZ10ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChGQUxTRShcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBiaXRJbmRleCA9IDA7IGJpdEluZGV4IDwgY3JlZ1NpemU7IGJpdEluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChPUihcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiLCBcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChOT1QoXCIgKyB0ZXN0Qml0ICsgXCIpKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihcIiArIHRlc3RCaXQgKyBcIiwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoTU9WRShyb1tcIiArIHRlc3RCaXQgKyBcIl0sIDApKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgYml0SW5kZXggPSAwOyBiaXRJbmRleCA8IGNyZWdTaXplOyBiaXRJbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoSU9SKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgcm9bXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0pKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoTk9UKHJvW1wiICsgdGVzdEJpdCArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdFN0ciA9IGNvbmRpdGlvblZhbHVlLnRvU3RyaW5nKDIpLnNwbGl0KFwiXCIpLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdENvdW50ID0gMDtcblx0XHRcdFx0XHRcdFx0dmFyIHNpbmdsZUJpdEluZGV4ID0gMDtcblx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYml0VmFsID0gcGFyc2VJbnQoYml0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdGJpdFN0cltiaXRJbmRleF0gPSBiaXRWYWw7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2luZ2xlQml0SW5kZXggPSBiaXRJbmRleDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmKGJpdENvdW50ID09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKFwiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCIsIFByb2dyYW0oXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihyb1tcIiArIChzaW5nbGVCaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChGQUxTRShcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmlyc3RTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihmaXJzdFNldCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zmlyc3RTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChPUihcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiLCBcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChBTkQoXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIiwgXCIgKyB0ZXN0Qml0ICsgXCIpKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmlmX3RoZW4oXCIgKyB0ZXN0Qml0ICsgXCIsIFByb2dyYW0oXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChNT1ZFKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgMCkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmlyc3RTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihmaXJzdFNldCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zmlyc3RTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChJT1Iocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChBTkQocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihyb1tcIiArIHRlc3RCaXQgKyBcIl0sIFByb2dyYW0oXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHF1aWxJbmZvKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gcXVpbEluZm8ubmFtZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgZ290T3BlbkJyYWNlID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8gJiYgcXVpbEluZm8ucGFyYW1zICYmIHF1aWxJbmZvLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRnb3RPcGVuQnJhY2UgPSB0cnVlO1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHF1aWxJbmZvLnBhcmFtcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyIHx8IGlzRGVmR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYucGFyYW1zICYmIGdhdGVEZWYucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRcdGdvdE9wZW5CcmFjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBnYXRlRGVmLnBhcmFtcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1tnYXRlRGVmLnBhcmFtc1twXV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbZ2F0ZURlZi5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyIHx8IGlzRGVmR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS53aXJlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMiB8fCAhZ290T3BlbkJyYWNlIHx8IGlzRGVmR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRcdGdvdE9wZW5CcmFjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcInFcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGFyZ2V0Qml0ID0gcGFyc2VJbnQoZ2F0ZS5vcHRpb25zLmNyZWcuYml0KSB8fCAwO1xuXHRcdFx0XHRcdFx0XHRpZihpc05hTih0YXJnZXRCaXQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwicm9bXCIgKyAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSkgKyBcIl1cIjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIpXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cHlxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdGlmKGluc2lkZUNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcXG5cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gdW5rbm93biBnYXRlP1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIHB5cXVpbCBXQVJOSU5HOiB1bmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBwXFxuXCI7XG5cdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInF2bSA9IFFWTUNvbm5lY3Rpb24oKVxcblwiO1xuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblxuXHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KHF2bS5ydW4ocCkpXFxuXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHNob3RzKSB7XG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAud3JhcF9pbl9udW1zaG90c19sb29wKHNob3RzKVxcblwiO1xuXHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGxhdHRpY2VOYW1lID0gbGF0dGljZTtcblx0XHRcdGlmKCFsYXR0aWNlTmFtZSkge1xuXHRcdFx0XHRpZih2ZXJzaW9uIDwgMi4xKSB7XG5cdFx0XHRcdFx0bGF0dGljZU5hbWUgPSB0aGlzLm51bVF1Yml0cyArIFwicS1nZW5lcmljLXF2bVwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxhdHRpY2VOYW1lID0gdGhpcy5udW1RdWJpdHMgKyBcInEtcXZtXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicWMgPSBnZXRfcWMoJ1wiICsgbGF0dGljZU5hbWUgKyBcIidcIiArIChsYXR0aWNlID8gKFwiLCBhc19xdm09XCIgKyAoYXNRVk0gPyBcIlRydWVcIiA6IFwiRmFsc2VcIikpIDogXCJcIikgKyBcIilcXG5cIjtcblxuXHRcdFx0aWYobGF0dGljZSkge1xuXHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJlcCA9IHFjLmNvbXBpbGUocClcXG5cIjtcblxuXHRcdFx0XHRpZihnb3RNZWFzdXJlbWVudCkge1xuXG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0c19saXN0ID0gcWMucnVuKGVwKS5yZWFkb3V0X2RhdGEuZ2V0KFxcXCJyb1xcXCIpXFxuXCI7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0sIFxcXCJcXFwiKSwgcmVzdWx0c19saXN0KSlcXG5cIjtcblxuXHRcdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcihkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KGNvdW50cylcXG5cIjtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcihkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwcmludChxYy5ydW4oZXApLnJlYWRvdXRfZGF0YS5nZXQoXFxcInJvXFxcIikpXFxuXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZihnb3RNZWFzdXJlbWVudCkge1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJlc3VsdHNfbGlzdCA9IHFjLnJ1bihwKS5yZWFkb3V0X2RhdGEuZ2V0KFxcXCJyb1xcXCIpXFxuXCI7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0sIFxcXCJcXFwiKSwgcmVzdWx0c19saXN0KSlcXG5cIjtcblx0XHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImNvdW50cyA9IENvdW50ZXIoZGljdCh6aXAocmVzdWx0cyxbcmVzdWx0cy5jb3VudChpKSBmb3IgaSBpbiByZXN1bHRzXSkpKVxcblwiO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gZGljdCh6aXAocmVzdWx0cyxbcmVzdWx0cy5jb3VudChpKSBmb3IgaSBpbiByZXN1bHRzXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwcmludChjb3VudHMpXFxuXCI7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzX2xpc3QgPSBxYy5ydW4ocCkucmVhZG91dF9kYXRhLmdldChcXFwicm9cXFwiKVxcblwiO1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJlc3VsdHMgPSBsaXN0KG1hcChsYW1iZGEgYXJyOiByZWR1Y2UobGFtYmRhIHgsIHk6IHN0cih4KSArIHN0cih5KSwgYXJyWzo6LTFdLCBcXFwiXFxcIiksIHJlc3VsdHNfbGlzdCkpXFxuXCI7XG5cdFx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KHJlc3VsdHMpXFxuXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHR2YXIgZ2xvYmFsUGFyYW1MaXN0ID0gXCJcIjtcblx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0aWYoZ2xvYmFsUGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRnbG9iYWxQYXJhbUxpc3QgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBnbG9iYWxQYXJhbU5hbWU7XG5cdFx0XHR9KTtcblxuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJwYXJhbXMgPSBucC5hcnJheShbXCIgKyBnbG9iYWxQYXJhbUxpc3QgKyBcIl0pXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIm1pbmltdW0gPSBtaW5pbWl6ZShvYmplY3RpdmVfZnVuY3Rpb24sIHBhcmFtcywgbWV0aG9kPVxcXCJcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyIDogXCJQb3dlbGxcIikgKyBcIlxcXCIsIHRvbD10b2xlcmFuY2UpXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJwcmludChcXFwiY29zdDpcXFwiLCBtaW5pbXVtLmZ1biwgXFxcInBhcmFtczpcXFwiLCBtaW5pbXVtLngpXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBweXF1aWwsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gcHlxdWlsO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUXVpbCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cblx0Ly8gUVVJTCBTdWJtb2R1bGVzIG5vdCBzdXBwb3J0ZWRcblx0dmFyIGRlY29tcG9zZSA9IHRydWU7IC8vIG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIHZlcnNpb24gPSBwYXJzZUZsb2F0KHZlcnNpb25TdHIgfHwgXCIyLjBcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDIuMDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHF1aWwgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAxICYmIGNsaW5lWzBdICE9IFwiI1wiKSB7XG5cdFx0XHRcdHF1aWwgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0cXVpbCArPSBjbGluZTtcblx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aWwpIHtcblx0XHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpbC5kZWZnYXRlKSB7XG5cdFx0XHRcdFx0cXVpbCArPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsLmRlZmdhdGU7XG5cdFx0XHRcdFx0cXVpbCArPSBcIlxcblxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBiYXNpYyBnYXRlIG5vdCBzdXBwb3J0ZWQgYnkgcXVpbFxuXHRcdFx0XHQvLyBUT0RPOiBhZGQgcXVpbCBkZWZpbmUgZ2F0ZSBjb2RlXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgZ290Q29uZGl0aW9ucyA9IHRoaXMuZ290Q2xhc3NpY2FsQ29udHJvbCgpO1xuXHR2YXIgaW5kZW50ID0gXCJcIjtcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBwYXJhbXMgPSBcIlwiO1xuXHRcdGlmKGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0cGFyYW1zICs9IFwiKFwiO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdFx0cGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYXJhbXMgKz0gXCIlXCIgKyBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdH1cblx0XHRcdHBhcmFtcyArPSBcIilcIjtcblx0XHR9XG5cblx0XHR2YXIgYXJncyA9IFwiXCI7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IFwicVwiICsgaTtcblx0XHR9XG5cdFx0cXVpbCArPSBcIkRFRkNJUkNVSVQgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKHBhcmFtcyA/IFwiIFwiICsgcGFyYW1zIDogXCJcIikgKyAoYXJncyA/IFwiIFwiICsgYXJncyA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0aW5kZW50ID0gXCIgICAgXCI7XG5cdH0gZWxzZSB7XG5cdFx0cXVpbCArPSBcIlxcblwiO1xuXG5cdFx0aWYodmVyc2lvbiA+PSAyKSB7XG5cdFx0XHR2YXIgdG90YWxCaXRzID0gY2lyY3VpdC5jcmVnVG90YWxCaXRzKCk7XG5cdFx0XHRpZihnb3RDb25kaXRpb25zKSB7XG5cdFx0XHRcdHRvdGFsQml0cyArPSAxO1xuXHRcdFx0fTtcblx0XHRcdGlmKHRvdGFsQml0cykge1xuXHRcdFx0XHRxdWlsICs9IFwiREVDTEFSRSBybyBCSVRbXCIgKyB0b3RhbEJpdHMgKyBcIl1cXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0cXVpbCArPSBcIkRFQ0xBUkUgXCIgKyBnbG9iYWxQYXJhbU5hbWUgKyBcIiBSRUFMWzFdXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlXG5cdFx0XHRcdFx0XHR9O1x0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHF1aWwgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRUb1F1aWwobmV3T3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSAmJiBjaXJjdWl0LnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0cmV0dXJuIFwiJVwiICsgbm9kZS5uYW1lO1xuXHRcdH1cblx0fTtcblxuXHR2YXIgbGFiZWxDb3VudGVyID0gMTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjaXJjdWl0Lm51bUNvbHMoKTsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBxdWlsSW5mbyA9IG51bGw7XG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudC5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cXVpbEluZm8gPSAoZ2F0ZURlZiAmJiBnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwpID8gZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwgOiBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBpbnNpZGVDb250cm9sID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdC8vIEZsb3cgY29udHJvbFxuXHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRpbnNpZGVDb250cm9sID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIHRlc3RCaXQgPSBzZWxmLmNyZWdUb3RhbEJpdHMoKTtcblx0XHRcdFx0XHRcdHZhciBjb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdFx0dmFyIGNvbmRpdGlvblZhbHVlID0gY29uZGl0aW9uLnZhbHVlIHx8IDA7XG5cdFx0XHRcdFx0XHR2YXIgY3JlZ0Jhc2UgPSBzZWxmLmNyZWdCYXNlKGNvbmRpdGlvbi5jcmVnKTtcblxuXHRcdFx0XHRcdFx0aWYoY29uZGl0aW9uVmFsdWUgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1NpemUgPSBzZWxmLmNyZWdzW2NvbmRpdGlvbi5jcmVnXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIkZBTFNFIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdEluZGV4ID0gMDsgYml0SW5kZXggPCBjcmVnU2l6ZTsgYml0SW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIFtcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJOT1QgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiRkFMU0Ugcm9bXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBiaXRJbmRleCA9IDA7IGJpdEluZGV4IDwgY3JlZ1NpemU7IGJpdEluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJPUiByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk5PVCByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdFN0ciA9IGNvbmRpdGlvblZhbHVlLnRvU3RyaW5nKDIpLnNwbGl0KFwiXCIpLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdENvdW50ID0gMDtcblx0XHRcdFx0XHRcdFx0dmFyIHNpbmdsZUJpdEluZGV4ID0gMDtcblx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYml0VmFsID0gcGFyc2VJbnQoYml0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdGJpdFN0cltiaXRJbmRleF0gPSBiaXRWYWw7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2luZ2xlQml0SW5kZXggPSBiaXRJbmRleDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmKGJpdENvdW50ID09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAtV0hFTiBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCIgW1wiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiByb1tcIiArIChzaW5nbGVCaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJGQUxTRSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmlyc3RTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihmaXJzdFNldCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zmlyc3RTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJPUiBbXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0gW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiQU5EIFtcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJGQUxTRSByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiQU5EIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihxdWlsSW5mbykge1xuXHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBxdWlsSW5mby5uYW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxdWlsICs9IFwiIFwiO1xuXHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8gJiYgcXVpbEluZm8ucGFyYW1zICYmIHF1aWxJbmZvLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcXVpbEluZm8ucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJyUnIHRvIGdsb2JhbCBwYXJhbXNcblx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGdhdGVQYXJhbXNbcXVpbEluZm8ucGFyYW1zW3BdXSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcXVpbEluZm8ucGFyYW1zW3BdXSk7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZiAmJiBnYXRlRGVmLnBhcmFtcyAmJiBnYXRlRGVmLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICclJyB0byBnbG9iYWwgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGdhdGVQYXJhbXNbZ2F0ZURlZi5wYXJhbXNbcF1dICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW2dhdGVEZWYucGFyYW1zW3BdXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcInFcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpIHtcblx0XHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQpIHx8IDA7XG5cdFx0XHRcdFx0XHRpZihpc05hTih0YXJnZXRCaXQpKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldEJpdCA9IDA7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiW1wiICsgKHRhcmdldEJpdCArIHNlbGYuY3JlZ0Jhc2UoZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSkpICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwicm9bXCIgKyAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSkgKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxdWlsICs9IFwiXFxuXCI7XG5cblx0XHRcdFx0XHRpZihpbnNpZGVDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdFx0XHRcdGxhYmVsQ291bnRlciArPSAyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bmtub3duIGdhdGU/XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCJ1bmtub3duIGdhdGVcIiwgZ2F0ZS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxdWlsICs9IFwiXFxuXCI7XG5cdH1cblxuXHRyZXR1cm4gcXVpbDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb0FRQVNNID0gZnVuY3Rpb24ob3B0aW9ucywgaXNFeHBvcnRQeUFRQVNNLCBleHBvcnRBc0dhdGVOYW1lLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gISFpc0V4cG9ydFB5QVFBU00gPyBvcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblx0dmFyIHRlbXBDaXJjdWl0ID0gbnVsbDtcblxuXHRzaG90cyA9IHNob3RzIHx8IDEwMjQ7XG5cblx0aWYodHlwZW9mIGh5YnJpZCA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0aHlicmlkID0gdGhpcy5vcHRpb25zID8gISF0aGlzLm9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cdH1cblxuXHR2YXIgb2JqID0gdGhpcy5zYXZlKCEhZGVjb21wb3NlKTtcblxuXHRjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdHRlbXBDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZChvYmopO1xuXHR0ZW1wQ2lyY3VpdC5sb2FkKG9iaik7XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGFkanVzdElkZW50YXRpb24gPSBmdW5jdGlvbihhZGRTdHIsIGlkZW50KSB7XG5cdFx0dmFyIHN0ciA9IFwiXCI7XG5cblx0XHQvLyBhZGQgdXNlciBkZWZpbmVkIGNvc3QgZnVuY3Rpb24gd2l0aCBwcm9wZXIgaWRlbnRhdGlvblxuXHRcdHZhciBjZkxpbmVzID0gYWRkU3RyLnNwbGl0KFwiXFxuXCIpO1xuXHRcdHZhciBtaW5JZGVudCA9IC0xO1xuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0dmFyIHRtcElkZW50ID0gY2ZMaW5lLnNlYXJjaCgvXFxTLyk7XG5cdFx0XHRpZih0bXBJZGVudCA+PSAwICYmIChtaW5JZGVudCA8IDAgfHwgdG1wSWRlbnQgPCBtaW5JZGVudCkpIHtcblx0XHRcdFx0bWluSWRlbnQgPSB0bXBJZGVudDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmKG1pbklkZW50IDwgMCkge1xuXHRcdFx0bWluSWRlbnQgPSAwO1xuXHRcdH1cblxuXHRcdHZhciBhZGRJZGVudCA9IFwiXCI7XG5cdFx0aWYobWluSWRlbnQgPCBpZGVudC5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgdG1wID0gMDsgdG1wIDwgKGlkZW50Lmxlbmd0aCAtIG1pbklkZW50KTsgdG1wKyspIHtcblx0XHRcdFx0YWRkSWRlbnQgKz0gXCIgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHRzdHIgKz0gYWRkSWRlbnQgKyBjZkxpbmUgKyBcIlxcblwiO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHN0cjtcblx0fTtcblxuXHR2YXIgZ2V0SW5kZW50ID0gZnVuY3Rpb24oZGVwdGgpIHtcblx0XHR2YXIgaW5kZW50ID0gXCJcIjtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVwdGg7IGkrKykge1xuXHRcdFx0aW5kZW50ICs9IFwiICAgIFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gaW5kZW50O1xuXHR9XG5cblx0aW5kZW50RGVwdGggPSBpbmRlbnREZXB0aCB8fCAwO1xuXG5cdHZhciBnYXRlc1RvQmVBZGRlZCA9IFtdO1xuXHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR2YXIgbnVtQ29scyA9IHRlbXBDaXJjdWl0Lm51bUNvbHMoKTtcblx0XHRcdGZvcih2YXIgY29sdW1uID0gbnVtQ29scyAtIDE7IGNvbHVtbiA+PSAwOyBjb2x1bW4tLSkge1xuXHRcdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGVtcENpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZSA9IHRlbXBDaXJjdWl0LmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwICYmICF0ZW1wQ2lyY3VpdC5iYXNpY0dhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRcdGN1c3RvbURlY29tcG9zZWRDaXJjdWl0ID0gdGVtcENpcmN1aXQuZGVjb21wb3NlR2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdFx0XHR2YXIgaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGRlY29tcG9zZWRDb2x1bW4gPSAwOyBkZWNvbXBvc2VkQ29sdW1uIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtQ29scygpOyBkZWNvbXBvc2VkQ29sdW1uKyspIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkZWNvbXBvc2VkV2lyZSA9IDA7IGRlY29tcG9zZWRXaXJlIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtUXViaXRzOyBkZWNvbXBvc2VkV2lyZSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVJbkN1c3RvbUNpcmN1aXQgPSBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5nZXRHYXRlQXQoZGVjb21wb3NlZENvbHVtbiwgZGVjb21wb3NlZFdpcmUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZUluQ3VzdG9tQ2lyY3VpdCAmJiBnYXRlSW5DdXN0b21DaXJjdWl0LmNvbm5lY3RvciA9PSAwKXtcblx0XHRcdFx0XHRcdFx0XHRcdGdhdGVzVG9CZUFkZGVkLnB1c2goZ2F0ZUluQ3VzdG9tQ2lyY3VpdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGNpcmN1aXQuZ2F0ZXMubWFwKGZ1bmN0aW9uKGNpcmN1aXRHYXRlLCBpbmRleCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaXJjdWl0R2F0ZS5tYXAoZnVuY3Rpb24oZ2F0ZVRvUmVtb3ZlKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVRvUmVtb3ZlICYmIGdhdGVUb1JlbW92ZS5uYW1lID09IGdhdGUubmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdC5yZW1vdmVHYXRlKGdhdGVUb1JlbW92ZS5pZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR9KTtcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdhdGVzVG9CZUFkZGVkLm1hcChmdW5jdGlvbihnYXRlVG9BZGQpe1xuXHRcdFx0aWYoZ2F0ZVRvQWRkKXtcblx0XHRcdFx0Y2lyY3VpdC5pbnNlcnRHYXRlKGdhdGVUb0FkZC5uYW1lLCBnYXRlVG9BZGQuY29sdW1uLCBnYXRlVG9BZGQud2lyZXMsIGdhdGVUb0FkZC5vcHRpb25zKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHZhciBhcWFzbSA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0dmFyIG51bVF1Yml0cyA9IGNpcmN1aXQubnVtUXViaXRzO1xuXHRcblx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiQkVHSU5cXG5cIjtcblx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJxdWJpdHMgXCIgKyBudW1RdWJpdHMgKyBcIlxcblwiO1xuXG5cdFx0aWYgKGNpcmN1aXQuY3JlZ3Mpe1xuXHRcdFx0dmFyIGNyZWdMZW5ndGggPSAwO1xuXHRcdFx0Zm9yKHZhciBjcmVnIGluIGNpcmN1aXQuY3JlZ3Mpe1xuXHRcdFx0XHRjcmVnTGVuZ3RoICs9IGNpcmN1aXQuY3JlZ3NbY3JlZ10ubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJjYml0cyBcIiArIGNyZWdMZW5ndGggKyBcIlxcblwiO1xuXHRcdH1cblx0fWVsc2Uge1xuXHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdFx0dmFyIGFyZ3MgPSBcIlwiO1xuXHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcmdzICs9IGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0fVxuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXJncyArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0fWVsc2Uge1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJmcm9tIHFhdC5sYW5nLkFRQVNNIGltcG9ydCAqXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gcWF0LnFwdXMgaW1wb3J0IGdldF9kZWZhdWx0X3FwdVxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyXFxuXCI7XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImltcG9ydCBudW1weSBhcyBucFxcblwiO1xuXG5cdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXG5cdFx0XHR2YXIgdW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbiA9IFwiXCI7XG5cdFx0XHR2YXIgc3VibW9kdWxlQ291bnQgPSAwO1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRpZighZGVjb21wb3NlKXtcblx0XHRcdFx0XHRcdGlmKGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYXFhc20gJiYgY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5hcWFzbS5hcnJheSkge1xuXHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEFxYXNtSW5mbyA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYXFhc207XG5cdFx0XHRcblx0XHRcdFx0XHRcdFx0Z2F0ZVVuaXRhcnkgPSB1c2VkR2F0ZU5hbWUgKyBcIl9nYXRlXCI7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiZGVmIFwiICsgZ2F0ZVVuaXRhcnkgK1wiKFwiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYodW5zdXBwb3J0ZWRBcWFzbUluZm8ucGFyYW1zICYmIHVuc3VwcG9ydGVkQXFhc21JbmZvLnBhcmFtcy5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRBcWFzbUluZm8ucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwicF9cIiArIHBhcmFtTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0YXFhc20gKz0gXCIpOlxcblwiO1xuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBnZXRJbmRlbnQoaW5kZW50RGVwdGggKyAxKSArIFwicmV0dXJuIG5wLmFycmF5KFwiICsgIHVuc3VwcG9ydGVkQXFhc21JbmZvLmFycmF5ICsgXCIpXFxuXFxuXCI7XHRcdFx0XHRcdFx0XHRcblxuXHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IHVzZWRHYXRlTmFtZSArIFwiID0gQWJzdHJhY3RHYXRlKFxcXCJcIiArIHVzZWRHYXRlTmFtZSArIFwiXFxcIiwgW1wiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGNvdW50ID0gMDtcblxuXHRcdFx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoY291bnQgPiAwKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbiArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IFwiZmxvYXRcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoYmFzaWNHYXRlLm1hdHJpeCl7XG5cdFx0XHRcdFx0XHRcdFx0YXJpdHkgPSBtYXRoLmxvZzIoYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbiArPSBcIl0sIG1hdHJpeF9nZW5lcmF0b3I9XCIgKyBnYXRlVW5pdGFyeSArIFwiLCBhcml0eT1cIiArIGFyaXR5ICtcIilcXG5cIjtcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHNob3RzOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRoeWJyaWQ6IGZhbHNlXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRhcWFzbSArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvQVFBU00obmV3T3B0aW9ucywgaXNFeHBvcnRQeUFRQVNNLCB1c2VkR2F0ZU5hbWUsIGluZGVudERlcHRoKTtcblx0XHRcdFx0XHRcdHN1Ym1vZHVsZUNvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YXFhc20gKz0gdW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbjtcblxuXHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblxuXHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJzaG90cyA9IFwiICsgc2hvdHMgKyBcIlxcblwiO1xuXHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJwcm9ncmFtID0gUHJvZ3JhbSgpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJxdWJpdHNfcmVnID0gcHJvZ3JhbS5xYWxsb2MoXCIrIGNpcmN1aXQubnVtUXViaXRzICtcIilcXG5cIjtcdFxuXHRcdFx0XG5cdFx0XHRmb3IodmFyIGNyZWdOYW1lIGluIGNpcmN1aXQuY3JlZ3Mpe1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBjcmVnTmFtZSArIFwiID0gcHJvZ3JhbS5jYWxsb2MoXCIgKyBjaXJjdWl0LmNyZWdzW2NyZWdOYW1lXS5sZW5ndGggKyBcIilcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblxuXHRcdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblxuXHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRcdGFxYXNtICs9IGdsb2JhbFBhcmFtTmFtZSArIFwiID0gXCIgKyBnbG9iYWxQYXJhbVZhbHVlICsgXCJcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdGFxYXNtICs9IFwiZGVmIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKSArIFwiOlxcblwiO1xuXHRcdGluZGVudERlcHRoKys7XG5cdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImNpcmN1aXQgPSBRUm91dGluZSgpXFxuXCJcdFxuXHR9IGVsc2Uge1xuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0YXFhc20gKz0gXCJkZWYgb2JqZWN0aXZlX2Z1bmN0aW9uKHBhcmFtcyk6XFxuXCJcblx0XHRcdGluZGVudERlcHRoKys7XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdH1cblx0fVxuXG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoc3VibW9kdWxlQ291bnQpIHtcblx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHRpZighY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0gJiYgY2lyY3VpdC5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgdXNlZEdhdGVOYW1lICsgXCIoXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgY2lyY3VpdC5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHR2YXIgbmFtZSA9IFwiXCI7XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zLnBhcmFtcztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIil7XG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdFx0XHRcdFx0bmFtZSArPSBcIk1FQVNcIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwicHJvZ3JhbS5tZWFzdXJlXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwicmVzZXRcIil7XG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdFx0XHRcdFx0bmFtZSArPSBcIlJFU0VUXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bmFtZSArPSBcInByb2dyYW0ucmVzZXRcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyl7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLmFxYXNtKXtcblx0XHRcdFx0XHRcdHZhciBhcWFzbUluZm8gPSBnYXRlRGVmLmV4cG9ydEluZm8uYXFhc207XG5cdFx0XHRcdFx0XHR2YXIgYXFhc21JbmZvTmFtZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRpZihhcWFzbUluZm8ubmFtZSl7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLnBhcmFtcy5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVEZWYucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1twYXJhbV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHtoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lID0gYXFhc21JbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXFhc21JbmZvTmFtZSArPSBcIltcIiArIHBhcmFtVmFsdWUgKyBcIl1cIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lICs9IFwiKFwiICsgcGFyYW1WYWx1ZSArIFwiKVwiO1x0XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lICs9IGFxYXNtSW5mby5uYW1lO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoYXFhc21JbmZvLmNvbnRyb2xsZWQgJiYgYXFhc21JbmZvLmRhZ2dlcil7XG5cdFx0XHRcdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiQ1RSTChEQUcoXCIgKyBhcWFzbUluZm9OYW1lICsgXCIpKVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gYXFhc21JbmZvTmFtZSArIFwiLmRhZygpLmN0cmwoKVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fWVsc2UgaWYoYXFhc21JbmZvLmNvbnRyb2xsZWQpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIkNUUkwoXCIgKyBhcWFzbUluZm9OYW1lICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBhcWFzbUluZm9OYW1lICsgXCIuY3RybCgpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ZWxzZSBpZihhcWFzbUluZm8uZGFnZ2VyKXtcblx0XHRcdFx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJEQUcoXCIgKyBhcWFzbUluZm9OYW1lICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBhcWFzbUluZm9OYW1lICsgXCIuZGFnKClcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IGFxYXNtSW5mb05hbWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fWVsc2UgaWYoYXFhc21JbmZvLm1hdHJpeCl7XG5cdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBcIltcIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGsgPSAwIDsgayA8IGFxYXNtSW5mby5tYXRyaXgubGVuZ3RoOyBrKyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0cm93ID0gYXFhc21JbmZvLm1hdHJpeFtrXTtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJbXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cm93X2VsZW1lbnQgPSByb3dbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFxYXNtSW5mby5wYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mby5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW0gPSBnYXRlUGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyb3dfZWxlbWVudC50b1N0cmluZygpLmluZGV4T2YocGFyYW1OYW1lKSA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dfZWxlbWVudCA9IHJvd19lbGVtZW50LnJlcGxhY2UocGFyYW1OYW1lLCBwYXJhbSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZhbHVhdGVkX2V4cHJlc3Npb24gPSBtYXRoLmV2YWx1YXRlKHJvd19lbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4X2VsZW1lbnQgPSBtYXRoLmNvbXBsZXgoZXZhbHVhdGVkX2V4cHJlc3Npb24pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXhfZWxlbWVudF9yZWFsID0gbWF0cml4X2VsZW1lbnRbXCJyZVwiXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4X2VsZW1lbnRfaW0gPSBtYXRyaXhfZWxlbWVudFtcImltXCJdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IG1hdHJpeF9lbGVtZW50X3JlYWwgKyBcIiwgXCIgKyBtYXRyaXhfZWxlbWVudF9pbSArIFwiKVwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaSA8IHJvdy5sZW5ndGggLSAxKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiXVwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGsgPCBhcWFzbUluZm8ubWF0cml4Lmxlbmd0aCAtIDEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiXVwiO1x0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gZ2F0ZS5uYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVEZWYucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHtoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbUNvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgbmFtZTtcblxuXHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0YXFhc20gKz0gXCIgXCI7XG5cdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0YXFhc20gKz0gXCIoXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKyl7XG5cdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKXtcblx0XHRcdFx0XHRcdGFxYXNtICs9ICBcIiwgXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRhcWFzbSArPSBcInFbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBxdWJpdExldHRlcihnYXRlLndpcmVzW3ddLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBcInF1Yml0c19yZWdbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YXJnQ291bnQgPSBhcmdDb3VudCArIDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpe1xuXHRcdFx0XHRcdGFxYXNtICs9IFwiLCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIltcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiXVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRhcWFzbSArPSBcIilcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGFxYXNtICs9IGluZGVudCArIFwicmV0dXJuIGNpcmN1aXRcXG5cXG5cIjtcblx0fVxuXG5cdGlmKCFpc0V4cG9ydFB5QVFBU00pIHtcblx0XHRhcWFzbSArPSBcIkVORFwiO1xuXHR9IGVsc2Uge1xuXHRcdGlmKCFleHBvcnRBc0dhdGVOYW1lKXtcdFx0XHRcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIlxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiY2lyY3VpdCA9IHByb2dyYW0udG9fY2lyYygpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJqb2IgPSBjaXJjdWl0LnRvX2pvYihuYnNob3RzPXNob3RzLCBhZ2dyZWdhdGVfZGF0YT1GYWxzZSlcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcInFwdSA9IGdldF9kZWZhdWx0X3FwdSgpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJqb2JfcmVzdWx0ID0gcXB1LnN1Ym1pdChqb2IpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJjb3VudHMgPSBDb3VudGVyKClcXG5cXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImZvciBzdGF0ZSBpbiBqb2JfcmVzdWx0OlxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiICAgIHN0cmluZ19zdGF0ZSA9IHN0cihzdGF0ZS5zdGF0ZSlcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIiAgICBzdHJpbmdfc3RhdGUgPSBzdHJpbmdfc3RhdGVbc3RyaW5nX3N0YXRlLmZpbmQoJ3wnKSArIDE6IHN0cmluZ19zdGF0ZS5maW5kKCc+JyldXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCIgICAgc3RyaW5nX3N0YXRlID0gc3RyaW5nX3N0YXRlWzo6LTFdXFxuXCJcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIiAgICBjb3VudHNbc3RyaW5nX3N0YXRlXSArPSAxXFxuXFxuXCJcblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cdFxuXHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0XHRhcWFzbSArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblx0XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCJcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiO1x0XG5cdFxuXHRcdFx0XHRpbmRlbnREZXB0aC0tO1xuXHRcdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1MaXN0ID0gXCJcIjtcblx0XHRcdFx0XHR0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24oZ2xvYmFsUGFyYW1OYW1lLCBnbG9iYWxQYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRnbG9iYWxQYXJhbUxpc3QgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdFx0XHR9KTtcblx0XG5cdFx0XHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblx0XHRcdFx0XHRhcWFzbSArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwibWluaW11bSA9IG1pbmltaXplKG9iamVjdGl2ZV9mdW5jdGlvbiwgcGFyYW1zLCBtZXRob2Q9XFxcIlwiICsgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgOiBcIlBvd2VsbFwiKSArIFwiXFxcIiwgdG9sPXRvbGVyYW5jZSlcXG5cIjtcblx0XHRcdFx0XHRhcWFzbSArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHRcdFx0fVxuXHRcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwicHJpbnQoY291bnRzKVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGFzSnVweXRlciAmJiBpc0V4cG9ydFB5QVFBU00pIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0ZGlzcGxheV9uYW1lOiBcIlB5dGhvbiAzXCIsXG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IGFxYXNtLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGFxYXNtXG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0QVFBU00gPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGlzRXhwb3J0UHlBUUFTTSwgZXhwb3J0QXNHYXRlTmFtZSwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRoeWJyaWQ6IGh5YnJpZFxuXHR9O1xuXG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQVFBU00ob3B0aW9ucywgaXNFeHBvcnRQeUFRQVNNLCBleHBvcnRBc0dhdGVOYW1lLCBpbmRlbnREZXB0aCk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1B5QVFBU00gPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQVFBU00ob3B0aW9ucywgdHJ1ZSwgZXhwb3J0QXNHYXRlTmFtZSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UHlBUUFTTSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkXG5cdH07XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUHlBUUFTTShvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb0NpcnEgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBzaG90cyA9IG9wdGlvbnMuc2hvdHM7XG5cdHZhciBleHBvcnRUZnEgPSBvcHRpb25zLmV4cG9ydFRmcTtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIHBsYXRmb3JtID0gXCJcIjtcblx0aWYoZXhwb3J0VGZxKSB7XG5cdFx0cGxhdGZvcm0gPSBcIlRGUVwiO1xuXHR9IGVsc2Uge1xuXHRcdHBsYXRmb3JtID0gXCJjaXJxXCI7XG5cdH1cblxuXHR2YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQodmVyc2lvblN0ciB8fCBcIjAuN1wiKTtcblx0aWYoaXNOYU4odmVyc2lvbikpIHtcblx0XHR2ZXJzaW9uID0gMC43O1xuXHR9XG5cblx0aWYodHlwZW9mIHNob3RzID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRzaG90cyA9IDEwMjQ7XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBjaXJxID0gXCJcIjtcblx0dmFyIGluZGVudCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0Y2lycSArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRjaXJxICs9IGNsaW5lO1xuXHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiLCBcInNpblwiLCBcImNvc1wiLCBcInRhblwiLCBcImFzaW5cIiwgXCJhY29zXCIsIFwiYXRhblwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIHBhcmFtc1RvQXJnID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGdhdGVQYXJhbXMpIHtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblxuXHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcdFx0XG5cdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHR2YXIgYXJncyA9IFwiXCI7XG5cdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRjaXJxICs9IFwiZGVmIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKSArIFwiOlxcblwiO1xuXHRcdGNpcnEgKz0gXCIgICAgcmV0dXJuIFtcXG5cIjtcblx0XHRpbmRlbnQgPSBcIiAgICAgICAgXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoZXhwb3J0VGZxKXtcblx0XHRcdGNpcnEgKz0gXCJpbXBvcnQgdGVuc29yZmxvd19xdWFudHVtIGFzIHRmcVxcblwiXG5cdFx0fVxuXG5cdFx0Y2lycSArPSBcImltcG9ydCBjaXJxXFxuXCI7XG5cdFx0Y2lycSArPSBcImltcG9ydCBudW1weSBhcyBucFxcblwiO1xuXHRcdGNpcnEgKz0gXCJmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlXFxuXCI7XG5cdFx0Y2lycSArPSBcIlxcblwiO1xuXG5cdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdGlmKHRoaXMucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblxuXHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdFx0XHRcdGNpcnEgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyXG5cdFx0XHRcdFx0XHR9O1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0Y2lycSArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvQ2lycShuZXdPcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhciBkZWZHYXRlcyA9IFwiXCI7XG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mbyAmJiBiYXNpY0dhdGUuZXhwb3J0SW5mby5jaXJxKSB7XG5cdFx0XHRcdFx0dmFyIGNpcnFJbmZvID0gYmFzaWNHYXRlLmV4cG9ydEluZm8uY2lycTtcblx0XHRcdFx0XHR2YXIgaXNSZXBsYWNlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChjaXJxSW5mby5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50R2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihjaXJxSW5mby5yZXBsYWNlbWVudC5uYW1lKVxuXHRcdFx0XHRcdFx0Y2lycUluZm8gPSByZXBsYWNlbWVudEdhdGVEZWYuZXhwb3J0SW5mby5jaXJxXG5cdFx0XHRcdFx0XHRpc1JlcGxhY2VkID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoY2lycUluZm8uYXJyYXkpIHtcblx0XHRcdFx0XHRcdGlmKCFleHBvcnRUZnEpe1xuXHRcdFx0XHRcdFx0XHQvLyBkZWZnYXRlXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZOYW1lID0gaXNSZXBsYWNlZCA/IGNpcnFJbmZvLm5hbWUgOiB1c2VkR2F0ZU5hbWVcblx0XHRcdFx0XHRcdFx0aWYgKGRlZkdhdGVzLmluZGV4T2YoZGVmTmFtZSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCJkZWYgXCIgKyBkZWZOYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY2lycUluZm8ucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCIsIFtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcnFJbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lLCBwYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlZkdhdGVzICs9IFwicF9cIiArIHBhcmFtTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwiXVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIik6XFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYmFzaWNHYXRlLm1hdHJpeCAmJiBiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDAuNykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2goYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDI6IGRlZkdhdGVzICs9IFwiICAgIHJldHVybiBjaXJxLlNpbmdsZVF1Yml0TWF0cml4R2F0ZShucC5hcnJheShcIiArIGNpcnFJbmZvLmFycmF5ICsgXCIpKVxcblwiOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDQ6IGRlZkdhdGVzICs9IFwiICAgIHJldHVybiBjaXJxLlR3b1F1Yml0TWF0cml4R2F0ZShucC5hcnJheShcIiArIGNpcnFJbmZvLmFycmF5ICsgXCIpKVxcblwiOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OiBkZWZHYXRlcyArPSBcIiAgICAjIEV4cG9ydCB0byBcIiArIHBsYXRmb3JtICsgXCIgV0FSTklORzogQ2Fubm90IGRlZmluZSBcIiArIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoICsgXCIgeCBcIiArIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoICsgXCIgbWF0cml4IGdhdGVcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCIgICAgcmV0dXJuIGNpcnEuTWF0cml4R2F0ZShucC5hcnJheShcIiArIGNpcnFJbmZvLmFycmF5ICsgXCIpKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y2lycSArPSBkZWZHYXRlcztcblxuXHRcdGlmKGV4cG9ydFRmcSl7XG5cdFx0XHRjaXJxICs9IFwicSA9IGNpcnEuR3JpZFF1Yml0LnJlY3QoMSwgXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiKVxcblwiO1xuXHRcdH1lbHNle1xuXHRcdFx0Y2lycSArPSBcInEgPSBbY2lycS5OYW1lZFF1Yml0KCdxJyArIHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiKV1cXG5cIjtcblx0XHR9XG5cblx0XHRjaXJxICs9IFwiXFxuXCI7XG5cblx0XHRpZih2ZXJzaW9uIDwgMC43KSB7XG5cdFx0XHRjaXJxICs9IFwiY2lyY3VpdCA9IGNpcnEuQ2lyY3VpdC5mcm9tX29wcyhcXG5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2lycSArPSBcImNpcmN1aXQgPSBjaXJxLkNpcmN1aXQoXFxuXCI7XG5cdFx0fVxuXHRcdGluZGVudCA9IFwiICAgIFwiO1xuXHR9XG5cdFxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHR2YXIgZ2F0ZUNvdW50ZXIgPSAwO1xuXHR2YXIgbXVsdGlzaG90S2V5cyA9ICcnO1xuXHR2YXIgdGVtcEdhdGVEZWYgPSBudWxsO1xuXHR2YXIgbm9UZnFTdXBwb3J0ID0gZmFsc2U7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdGlmKGdhdGVDb3VudGVyID4gMCl7XG5cdFx0XHRcdFx0Y2lycSArPSBcIixcIjtcblx0XHRcdFx0XHRpZihleHBvcnRUZnEgJiYgbm9UZnFTdXBwb3J0KXtcblx0XHRcdFx0XHRcdGNpcnEgKz0gaW5kZW50ICsgXCIjIEV4cG9ydCB0byBURlEgV0FSTklORzogR2F0ZSBub3QgeWV0IHN1cHBvcnRlZCBieSBUZW5zb3JmbG93IFF1YW50dW1cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBjaXJxSW5mbyA9IG51bGw7XG5cdFx0XHRcdHZhciBpc0NvbnRyb2xsZWRHYXRlID0gZmFsc2U7XG5cdFx0XHRcdHZhciBpc0Jhc2ljR2F0ZSA9ICEhY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdFx0bm9UZnFTdXBwb3J0ID0gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEubm90VGZxU3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8uY2lycSAmJiBnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlzQ29udHJvbGxlZEdhdGUgPSAoZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQudHlwZSAmJiAoZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQudHlwZSA9PSBcImNvbnRyb2xsZWRcIikpID8gdHJ1ZSA6IGZhbHNlO1x0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdG5vVGZxU3VwcG9ydCA9IGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50Lm5vdFRmcVN1cHBvcnRlZCA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNpcnFJbmZvID0gKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvICYmIGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxKSA/IGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxIDogbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Z2F0ZUNvdW50ZXIrKztcblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFwiICsgcGxhdGZvcm0gK1wiIFdBUk5JTkc6IGNsYXNzaWNhbCBjb250cm9sIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXFxuXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIHRtcFBhcmFtQ291bnQgPSAwO1xuXHRcdFx0XHRcdHZhciBwYXJhbVN0cmluZyA9IFwiXCI7XG5cblxuXHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwieXlcIil7XG5cdFx0XHRcdFx0XHRcdHBhcmFtRGVmID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHRtcFBhcmFtQ291bnQgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmKHRtcFBhcmFtQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBwYXJhbURlZltwXTtcblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoIW5vZGUuYXJncyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgcGFyYW0gaW4gZ2F0ZS5vcHRpb25zLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZSA9IG1hdGgucGFyc2UoZ2F0ZS5vcHRpb25zLnBhcmFtc1twYXJhbV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA9PSBwYXJhbUNvdW50IC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaXNCYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRtcFBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGNpcnFJbmZvKSB7XG5cdFx0XHRcdFx0XHR2YXIgYWRkQnJhY2VzID0gY2lycUluZm8ubmFtZS5pbmRleE9mKFwiKipcIikgPj0gMDtcblxuXHRcdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQ7XG5cblx0XHRcdFx0XHRcdGlmKGFkZEJyYWNlcykge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZighY2lycUluZm8uYXJyYXkpIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcImNpcnEuXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGV4cG9ydFRmcSAmJiBjaXJxSW5mby50ZnFSZXBsYWNlbWVudCAmJiBjaXJxSW5mby50ZnFSZXBsYWNlbWVudC5uYW1lKXtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcImNpcnEuXCIgKyBjaXJxSW5mby50ZnFSZXBsYWNlbWVudC5uYW1lXG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBjaXJxSW5mby5uYW1lO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihhZGRCcmFjZXMpIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIilcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjaXJxICs9IGluZGVudCArIGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjaXJxICs9IHBhcmFtU3RyaW5nO1x0XHRcdFx0XHRcblx0XHRcdFx0XHRcblxuXHRcdFx0XHRcdGlmKGlzQ29udHJvbGxlZEdhdGUpIHtcblx0XHRcdFx0XHRcdGNpcnEgKz0gXCIuY29udHJvbGxlZCgpLm9uKFwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKGlzQmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCJxW1wiICsgZ2F0ZS53aXJlc1t3XSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIiwga2V5PVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjaXJxICs9IFwiJ1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiJ1wiO1xuXG5cdFx0XHRcdFx0XHRpZihjb2x1bW4gPT0gbnVtQ29scyAtIDEgJiYgd2lyZSA9PSB0aGlzLm51bVF1Yml0cyAtIDEpe1xuXHRcdFx0XHRcdFx0XHRtdWx0aXNob3RLZXlzICs9IFwiJ1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiJ1wiO1xuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdG11bHRpc2hvdEtleXMgKz0gXCInXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCInLCBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y2lycSArPSBcIilcIjtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNpcnEgKz0gaW5kZW50ICsgXCIjIEV4cG9ydCB0byBcIiArIHBsYXRmb3JtICsgXCIgV0FSTklORzogdW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydFRmcSAmJiBub1RmcVN1cHBvcnQpe1xuXHRcdGNpcnEgKz0gaW5kZW50ICsgXCIjIEV4cG9ydCB0byBURlEgV0FSTklORzogR2F0ZSBub3QgeWV0IHN1cHBvcnRlZCBieSBUZW5zb3JmbG93IFF1YW50dVwiO1xuXHR9XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRjaXJxICs9IFwiXFxuKVxcblwiO1xuXHRcdGNpcnEgKz0gXCJcXG5cIjtcblx0XHRpZighZXhwb3J0VGZxKXtcblx0XHRcdGNpcnEgKz0gXCJzaW11bGF0b3IgPSBjaXJxLlNpbXVsYXRvcigpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwicmVzdWx0ID0gc2ltdWxhdG9yLnJ1bihjaXJjdWl0LCByZXBldGl0aW9ucz1cIisgc2hvdHMgK1wiKVxcblwiO1xuXHRcdFx0Y2lycSArPSBcInJlc3VsdF9kaWN0ID0gZGljdChyZXN1bHQubXVsdGlfbWVhc3VyZW1lbnRfaGlzdG9ncmFtKGtleXM9W1wiICsgbXVsdGlzaG90S2V5cyArIFwiXSkpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwia2V5cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0pLCByZXN1bHRfZGljdC5rZXlzKCkpKVxcblwiO1xuXHRcdFx0Y2lycSArPSBcImNvdW50cyA9IGRpY3QoemlwKGtleXMsW3ZhbHVlIGZvciB2YWx1ZSBpbiByZXN1bHRfZGljdC52YWx1ZXMoKV0pKVxcblwiO1xuXHRcdFx0Y2lycSArPSBcInByaW50KGNvdW50cylcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y2lycSArPSBcIlxcbiAgICBdXFxuXCI7XG5cdFx0Y2lycSArPSBcIlxcblwiO1xuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBjaXJxLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGNpcnE7XG59XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1RGUSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIHZlcnNpb25TdHIgPSBvcHRpb25zLnZlcnNpb25TdHI7XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHRpZih0eXBlb2Ygc2hvdHMgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHNob3RzID0gMTAyNDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHRmcSA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAxICYmIGNsaW5lWzBdICE9IFwiI1wiKSB7XG5cdFx0XHRcdGNpcnEgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0Y2lycSArPSBjbGluZTtcblx0XHRcdGNpcnEgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRleHBvcnRUZnE6IHRydWVcblx0fTtcdFx0XHRcdFx0XHRcblx0dGZxICs9IGNpcmN1aXQuZXhwb3J0VG9DaXJxKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xuXHR0ZnEgKz0gXCJyZXN1bHRzX2xpc3QgPSB0ZnEubGF5ZXJzLlNhbXBsZSgpKGNpcmN1aXQsIHJlcGV0aXRpb25zPVwiK3Nob3RzK1wiKS50b19saXN0KClbMF1cXG5cIjtcblx0dGZxICs9IFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0pLCByZXN1bHRzX2xpc3QpKVxcblwiO1xuXHR0ZnEgKz0gXCJjb3VudHMgPSBkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSlcXG5cIjtcblx0dGZxICs9IFwicHJpbnQoY291bnRzKVwiO1xuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRsYW5ndWFnZTogXCJweXRob25cIixcblx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogdGZxLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIHRmcTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUVNoYXJwID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgY2lyY3VpdE5hbWUgPSBvcHRpb25zLmNpcmN1aXROYW1lO1xuXHR2YXIgaW5kZW50RGVwdGggPSBvcHRpb25zLmluZGVudERlcHRoO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblx0XG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXG5cdFx0Ly8gc3ltYm9sc1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlKSB7XG5cdFx0XHR2YXIgcGFyYW1ldGVySnNvbiA9IHsgXCJwaVwiOiBcIlBJKClcIiB9O1xuXHRcdFx0aWYocGFyYW1ldGVySnNvbltub2RlLm5hbWVdKXtcblx0XHRcdFx0cmV0dXJuIHBhcmFtZXRlckpzb25bbm9kZS5uYW1lXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjb25zdGFudFxuXHRcdGlmKG5vZGUuaXNDb25zdGFudE5vZGUpIHtcblx0XHRcdC8vIGNvbnZlcnQgaW50ZWdlciB0byBmbG9hdFxuXHRcdFx0aWYoTnVtYmVyLmlzSW50ZWdlcihub2RlLnZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gKG5vZGUudmFsdWUpLnRvRml4ZWQoMSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBvcGVyYXRpb25OYW1lID0gY2lyY3VpdE5hbWUgfHwgXCJDaXJjdWl0XCI7XG5cblx0aW5kZW50RGVwdGggPSBpbmRlbnREZXB0aCB8fCAwO1xuXG5cdGZ1bmN0aW9uIGdldEluZGVudChkZXB0aCkge1xuXHRcdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0XHRpbmRlbnQgKz0gXCIgICAgXCI7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRlbnQ7XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBxc2hhcnAgPSBcIlwiO1xuXHR2YXIgaW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGlmKCFhc0p1cHl0ZXIpIHtcblx0XHRcdC8vIG9wZW5pbmcgbmFtZXNwYWNlXG5cdFx0XHRxc2hhcnAgKz0gXCJuYW1lc3BhY2UgUXVhbnR1bSB7XFxuXCI7XG5cdFx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHR9XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5JbnRyaW5zaWM7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIm9wZW4gTWljcm9zb2Z0LlF1YW50dW0uQ2Fub247XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIm9wZW4gTWljcm9zb2Z0LlF1YW50dW0uTWF0aDtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5Db252ZXJ0O1xcblwiO1xuXG5cdFx0cXNoYXJwICs9IFwiXFxuXCI7XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiZnVuY3Rpb24gU2V0Qml0VmFsdWUocmVnOiBJbnQsIGJpdDogSW50LCB2YWx1ZTogQm9vbCk6IEludCB7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIiAgICBpZih2YWx1ZSkge1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgICAgIHJldHVybiByZWcgfHx8ICgxIDw8PCBiaXQpO1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgfSBlbHNlIHtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiICAgICAgICByZXR1cm4gcmVnICYmJiB+fn4oMSA8PDwgYml0KTtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiICAgIH1cXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wifVxcblwiO1xuXG5cdFx0cXNoYXJwICs9IGluZGVudCtcIlxcblwiO1xuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKSArIFwiOiBRdWJpdFwiO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwib3BlcmF0aW9uIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKTtcblx0XHQvLyBxc2hhcnAgKz0gXCIgICAgcmV0dXJuIFtcXG5cIjtcblx0XHQvLyBpbmRlbnQgPSBcIiAgICAgICAgXCI7XG5cdH0gZWxzZXtcblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGluZGVudERlcHRoOiBpbmRlbnREZXB0aFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHFzaGFycCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUVNoYXJwKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cXNoYXJwICs9IGluZGVudCtcIm9wZXJhdGlvbiBcIiArIG9wZXJhdGlvbk5hbWUgKyBcIigpXCI7XG5cdH1cblxuXHRpbmRlbnREZXB0aCsrO1xuXHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdHZhciBjcmVnQ291bnQgPSAwO1xuXHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdGNyZWdDb3VudCsrO1xuXHR9XG5cblx0dmFyIGNyZWdMaXN0ID0gXCJcIjtcblx0aWYoY3JlZ0NvdW50KSB7XG5cdFx0cXNoYXJwICs9IFwiIDogKFwiXG5cdFx0Zm9yKGNyZWdOYW1lIGluIGNpcmN1aXQuY3JlZ3MpIHtcblx0XHRcdGlmKGNyZWdMaXN0KSB7XG5cdFx0XHRcdHFzaGFycCArPSBcIiwgXCI7XG5cdFx0XHRcdGNyZWdMaXN0ICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdHFzaGFycCArPSBcIkludFwiO1xuXHRcdFx0Y3JlZ0xpc3QgKz0gY3JlZ05hbWU7XG5cdFx0fVxuXHRcdHFzaGFycCArPSBcIilcIjtcblx0fSBlbHNlIHtcblx0XHRxc2hhcnAgKz0gXCIgOiBVbml0XCI7XG5cdH1cblx0cXNoYXJwICs9IFwiIHtcXG5cIjtcblx0Ly8gLS0tXG5cblx0Ly8gZGVjbGFyZSBjcmVnc1xuXHRpZihjcmVnQ291bnQpIHtcblx0XHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdFx0cXNoYXJwICs9IGluZGVudCArIFwibXV0YWJsZSBcIiArIGNyZWdOYW1lICsgXCIgPSAwO1xcblwiO1xuXHRcdH1cblx0fVxuXG5cdHFyZWdfbmFtZSA9IFwicXViaXRzXCI7XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJ1c2luZyhcIjtcblx0XHRxc2hhcnAgKz0gcXJlZ19uYW1lICsgXCIgPSBRdWJpdFtcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCJdXCI7XG5cdFx0cXNoYXJwICs9IFwiKSB7XFxuXCI7XG5cdFx0aW5kZW50RGVwdGgrKztcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHR9XG5cblx0dmFyIGRlZkdhdGVzID0gXCJcIjtcblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0dmFyIGdhdGVDb3VudGVyID0gMDtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblxuXHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdGdhdGVEZWYgPSBjaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHR2YXIgcXNoYXJwSW5mbyA9IG51bGw7XG5cdFx0XHRcdHZhciBpc0NvbnRyb2xsZWRHYXRlID0gZmFsc2U7XG5cdFx0XHRcdHZhciB3aXJlSWR4ID0gMDtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFzaGFycEluZm8gPSAoZ2F0ZURlZiAmJiBnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycCkgPyBnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwIDogbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlRGVmLmRyYXdpbmdJbmZvICYmIGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCAmJiBnYXRlLm5hbWUgIT0gXCJjeFwiICYmIGdhdGUubmFtZSAhPSBcImNjeFwiKSB7XG5cdFx0XHRcdFx0XHRpc0NvbnRyb2xsZWRHYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblxuXHRcdFx0XHRcdHZhciB0bXBQYXJhbUNvdW50ID0gMDtcblx0XHRcdFx0XHR2YXIgcGFyYW1TdHJpbmcgPSBcIlwiO1xuXHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XHRcdFxuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaWYodG1wUGFyYW1Db3VudCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRwYXJhbVN0cmluZyArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1x0XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gaWYodG1wUGFyYW1Db3VudCA9PSBwYXJhbUNvdW50IC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFx0cGFyYW1TdHJpbmcgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdFx0XHRcdHRtcFBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJzZXQgXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgXCIgPSBTZXRCaXRWYWx1ZShcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIiwgXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIiwgUmVzdWx0QXNCb29sKE0oXCI7XG5cdFx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1swXSwgY2lyY3VpdC5udW1RdWJpdHMpICsgXCIpKSk7XFxuXCI7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXJlZ19uYW1lICsgXCJbXCIgKyBnYXRlLndpcmVzWzBdICsgXCJdKSkpO1xcblwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCIvLyBFeHBvcnQgdG8gcXNoYXJwIFdBUk5JTkc6IG1pc3NpbmcgZGVzdGluYXRpb24gcmVnaXN0ZXJcXG5cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cXNoYXJwICs9IGluZGVudDtcblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcImlmKFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICsgXCIgPT0gXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICsgXCIpIHtcXG5cIjtcblx0XHRcdFx0XHRcdFx0aW5kZW50RGVwdGgrKztcblx0XHRcdFx0XHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IGluZGVudDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYocXNoYXJwSW5mbykge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXNoYXJwSW5mby5uYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gZ2F0ZS5uYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGlzQ29udHJvbGxlZEdhdGUpIHtcblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcIltcIiArIHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbMF0sIGNpcmN1aXQubnVtUXViaXRzKSArIFwiXSwgKFwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcIltcIiArIHFyZWdfbmFtZSArIFwiW1wiICsgZ2F0ZS53aXJlc1swXSArIFwiXV0sIChcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR3aXJlSWR4ID0gMTtcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHR3aXJlSWR4ID0gMDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYocGFyYW1TdHJpbmcpe1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcGFyYW1TdHJpbmcgKyBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdFx0Ly8gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBcdHFzaGFycCArPSBwYXJhbVN0cmluZyArIFwiKFwiO1xuXHRcdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdGZvcih2YXIgdyA9IHdpcmVJZHg7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxdWJpdExldHRlcihnYXRlLndpcmVzW3ddLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXJlZ19uYW1lICsgXCJbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihpc0NvbnRyb2xsZWRHYXRlKXtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRxc2hhcnAgKz0gXCIpO1xcblwiO1xuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdFx0Ly8gZW5kIGlmXG5cdFx0XHRcdFx0XHRcdGluZGVudERlcHRoLS07XG5cdFx0XHRcdFx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBpbmRlbnQgKyBcIn1cXG5cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdHFzaGFycCArPSBpbmRlbnQgKyBcIlJlc2V0QWxsKFwiICsgcXJlZ19uYW1lICsgXCIpO1xcblwiO1xuXG5cdFx0aW5kZW50RGVwdGgtLTtcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwifVxcblwiO1xuXHR9XG5cblx0aWYoY3JlZ0NvdW50KSB7XG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwicmV0dXJuIChcIiArIGNyZWdMaXN0ICsgXCIpO1xcblwiO1xuXHR9XG5cblx0aW5kZW50RGVwdGgtLTtcblx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0cXNoYXJwICs9IGluZGVudCArIFwifVxcblwiO1xuXG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoIWFzSnVweXRlcikge1xuXHRcdFx0Ly8gY2xvc2luZyBuYW1lc3BhY2Vcblx0XHRcdHFzaGFycCArPSBcIn1cXG5cIjtcblxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRxc2hhcnAgKz0gXCJcXG5cIjtcblx0fVxuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdFwibWV0YWRhdGFcIjoge1xuXHRcdFx0XHRcImtlcm5lbHNwZWNcIjoge1xuXHRcdFx0XHRcdFwiZGlzcGxheV9uYW1lXCI6IFwiUSNcIixcblx0XHRcdFx0XHRcImxhbmd1YWdlXCI6IFwicXNoYXJwXCIsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiaXFzaGFycFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwibGFuZ3VhZ2VfaW5mb1wiOiB7XG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IHFzaGFycCxcblx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBcIiVzaW11bGF0ZSBcIiArIG9wZXJhdGlvbk5hbWUsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gcXNoYXJwO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvQnJha2V0ID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gb3B0aW9ucy5oeWJyaWQ7XG5cdHZhciBpbmRlbnREZXB0aCA9IG9wdGlvbnMuaW5kZW50RGVwdGg7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cblx0c2hvdHMgPSBzaG90cyB8fCAxMDI0O1xuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMS4wXCIpO1xuXHRpZihpc05hTih2ZXJzaW9uKSkge1xuXHRcdHZlcnNpb24gPSAxLjA7XG5cdH1cblxuXHRpZih0eXBlb2YgaHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRoeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiLCBcInNpblwiLCBcImNvc1wiLCBcInRhblwiLCBcImFzaW5cIiwgXCJhY29zXCIsIFwiYXRhblwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblxuXHRcdFx0aWYoc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpID49IDAgJiYgaHlicmlkKSB7XG5cdFx0XHRcdHJldHVybiBcInBhcmFtc1tcIiArIHNlbGYucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSArIFwiXVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgYWRqdXN0SWRlbnRhdGlvbiA9IGZ1bmN0aW9uKGFkZFN0ciwgaWRlbnQpIHtcblx0XHR2YXIgc3RyID0gXCJcIjtcblxuXHRcdC8vIGFkZCB1c2VyIGRlZmluZWQgY29zdCBmdW5jdGlvbiB3aXRoIHByb3BlciBpZGVudGF0aW9uXG5cdFx0dmFyIGNmTGluZXMgPSBhZGRTdHIuc3BsaXQoXCJcXG5cIik7XG5cdFx0dmFyIG1pbklkZW50ID0gLTE7XG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHR2YXIgdG1wSWRlbnQgPSBjZkxpbmUuc2VhcmNoKC9cXFMvKTtcblx0XHRcdGlmKHRtcElkZW50ID49IDAgJiYgKG1pbklkZW50IDwgMCB8fCB0bXBJZGVudCA8IG1pbklkZW50KSkge1xuXHRcdFx0XHRtaW5JZGVudCA9IHRtcElkZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYobWluSWRlbnQgPCAwKSB7XG5cdFx0XHRtaW5JZGVudCA9IDA7XG5cdFx0fVxuXG5cdFx0dmFyIGFkZElkZW50ID0gXCJcIjtcblx0XHRpZihtaW5JZGVudCA8IGlkZW50Lmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciB0bXAgPSAwOyB0bXAgPCAoaWRlbnQubGVuZ3RoIC0gbWluSWRlbnQpOyB0bXArKykge1xuXHRcdFx0XHRhZGRJZGVudCArPSBcIiBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHN0ciArPSBhZGRJZGVudCArIGNmTGluZSArIFwiXFxuXCI7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdHZhciBnZXRJbmRlbnQgPSBmdW5jdGlvbihkZXB0aCkge1xuXHRcdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0XHRpbmRlbnQgKz0gXCIgICAgXCI7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRlbnQ7XG5cdH1cblxuXHRpbmRlbnREZXB0aCA9IGluZGVudERlcHRoIHx8IDA7XG5cblx0dmFyIGJyYWtldCA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR2YXIgaXNTdWJNb2R1bGUgPSBmYWxzZTtcblx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpe1xuXHRcdGlmKCFjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXSl7XG5cdFx0XHRpc1N1Yk1vZHVsZSA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgYXJncyA9IFwiXCI7XG5cdHZhciBhcmdDb3VudCA9IDA7XG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJpbXBvcnQgbnVtcHkgYXMgbnBcXG5cIjtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJmcm9tIGJyYWtldC5kZXZpY2VzIGltcG9ydCBMb2NhbFNpbXVsYXRvclxcblwiO1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImZyb20gYnJha2V0LmNpcmN1aXRzIGltcG9ydCBDaXJjdWl0XFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwiZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlclxcblwiO1xuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJmcm9tIHNjaXB5Lm9wdGltaXplIGltcG9ydCBtaW5pbWl6ZVxcblwiO1xuXHRcdH1cblxuXHRcdGJyYWtldCArPSBcIlxcblwiO1xuXG5cdFx0aWYoc2hvdHMpIHtcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInNob3RzID0gXCIgKyBzaG90cyArIFwiXFxuXCI7XG5cdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0YnJha2V0ICs9IGdsb2JhbFBhcmFtTmFtZSArIFwiID0gXCIgKyBnbG9iYWxQYXJhbVZhbHVlICsgXCJcXG5cIjtcblx0XHRcdH1cblx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwidG9sZXJhbmNlID0gXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSB8fCBcIjAuMDAxXCIgOiBcIjAuMDAxXCIpICsgXCJcXG5cIjtcblx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdH1cblx0fVxuXG5cdHZhciB1bnN1cHBvcnRlZEJyYWtldEluZm8gPSBudWxsO1xuXHR2YXIgZ2F0ZVVuaXRhcnkgPSBudWxsO1xuXHR2YXIgc3VibW9kdWxlQ291bnQgPSAwO1xuXHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdGlmKCFkZWNvbXBvc2Upe1xuXHRcdFx0XHRpZihjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXS5leHBvcnRJbmZvLmJyYWtldCAmJiBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXS5leHBvcnRJbmZvLmJyYWtldC5hcnJheSkge1xuXHRcdFx0XHRcdHVuc3VwcG9ydGVkQnJha2V0SW5mbyA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYnJha2V0O1xuXHRcblx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEJyYWtldEluZm8ubmFtZSA9PSBcInVuaXRhcnlcIil7XG5cdFx0XHRcdFx0XHRnYXRlVW5pdGFyeSA9IHVzZWRHYXRlTmFtZSArIFwiX3VuaXRhcnlcIjtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImRlZiBcIiArIGdhdGVVbml0YXJ5ICtcIihcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYodW5zdXBwb3J0ZWRCcmFrZXRJbmZvLnBhcmFtcyAmJiB1bnN1cHBvcnRlZEJyYWtldEluZm8ucGFyYW1zLmxlbmd0aCl7XG5cdFx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRCcmFrZXRJbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKXtcblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRcdFx0YnJha2V0ICs9IFwiKTpcXG5cIjtcblx0XHRcdFx0XHRicmFrZXQgKz0gZ2V0SW5kZW50KGluZGVudERlcHRoICsgMSkgKyBcInJldHVybiBucC5hcnJheShcIiArICB1bnN1cHBvcnRlZEJyYWtldEluZm8uYXJyYXkgKyBcIik7XFxuXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0YnJha2V0ICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0QnJha2V0KFwiXCIsIHRydWUsIHVzZWRHYXRlTmFtZSwgdmVyc2lvblN0ciwgZmFsc2UsIG51bGwsIGZhbHNlLCBpbmRlbnREZXB0aCk7XG5cdFx0XHRcdHN1Ym1vZHVsZUNvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcdFxuXHRcdFx0XHRcdFxuXHRpZihleHBvcnRBc0dhdGVOYW1lKXtcblx0XHRicmFrZXQgKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0aW5kZW50RGVwdGgrKztcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHR9IGVsc2Uge1xuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0YnJha2V0ICs9IFwiZGVmIG9iamVjdGl2ZV9mdW5jdGlvbihwYXJhbXMpOlxcblwiXG5cdFx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHR9XG5cdH1cblxuXHRicmFrZXQgKz0gaW5kZW50ICsgXCJjaXJjdWl0ID0gQ2lyY3VpdCgpXFxuXCI7XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpZihzdWJtb2R1bGVDb3VudCkge1xuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHRpZighY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0gJiYgY2lyY3VpdC5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiY2lyY3VpdC5yZWdpc3Rlcl9zdWJyb3V0aW5lKFwiICsgdXNlZEdhdGVOYW1lICsgXCIpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdHZhciBicmFrZXRJbmZvID0gbnVsbDtcblxuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdHZhciBwYXJhbVN0cmluZyA9IFwiXCI7XG5cdFx0XHRcdHZhciBpc1VuaXRhcnkgPSBmYWxzZTtcblxuXHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvICYmIGdhdGVEZWYuZXhwb3J0SW5mby5icmFrZXQpIHtcblx0XHRcdFx0XHRcdGJyYWtldEluZm8gPSBnYXRlRGVmLmV4cG9ydEluZm8uYnJha2V0O1xuXG5cdFx0XHRcdFx0XHRpZihicmFrZXRJbmZvLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRpZihBcnJheS5pc0FycmF5KGJyYWtldEluZm8ucGFyYW1zKSkge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtRGVmID0gYnJha2V0SW5mby5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGJyYWtldEluZm8ucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtRGVmID0gT2JqZWN0LmtleXMoZ2F0ZVBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoYnJha2V0SW5mby5uYW1lID09IFwidW5pdGFyeVwiKSB7XG5cdFx0XHRcdFx0XHRcdGlzVW5pdGFyeSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IGJyYWtldEluZm8ubmFtZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighYnJha2V0SW5mbyAmJiAhY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiIyBVbnN1cHBvcnRlZCBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cXG5cIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgdG1wUGFyYW1Db3VudCA9IDA7XG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XHRcdFxuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1x0XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRtcFBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImNpcmN1aXQuXCI7XG5cblx0XHRcdFx0XHRpZihpc1VuaXRhcnkpIHtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBcInVuaXRhcnkobWF0cml4PVwiICsgZ2F0ZU5hbWUgKyBcIl91bml0YXJ5KFwiICsgcGFyYW1TdHJpbmcgKyBcIiksIHRhcmdldHM9W1wiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRicmFrZXQgKz0gZ2F0ZU5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRmb3IodyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGJyYWtldCArPSBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihpc1VuaXRhcnkpIHtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBcIl1cIjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYocGFyYW1TdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IHBhcmFtU3RyaW5nO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmFrZXQgKz0gXCIpXCI7XG5cdFx0XHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0XG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInJldHVybiBjaXJjdWl0XCI7XG5cdH1cblxuXHRicmFrZXQgKz0gXCJcXG5cXG5cIjtcblx0XG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwibG9jYWxfc2ltID0gTG9jYWxTaW11bGF0b3IoKVxcblwiO1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInJlc3VsdCA9IGxvY2FsX3NpbS5ydW4oY2lyY3VpdCwgc2hvdHM9c2hvdHMpLnJlc3VsdCgpXFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcih7IFxcXCJcXFwiLmpvaW4ocmV2ZXJzZWQoaykpOiB2IGZvciBrLCB2IGluIHJlc3VsdC5tZWFzdXJlbWVudF9jb3VudHMuaXRlbXMoKSB9KVxcblwiO1xuXHRcdGJyYWtldCArPSBcIlxcblwiO1xuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRicmFrZXQgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdGJyYWtldCArPSBcIlxcblwiXG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiO1xuXG5cblx0XHRcdGluZGVudERlcHRoLS07XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHR0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24oZ2xvYmFsUGFyYW1OYW1lLCBnbG9iYWxQYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0aWYoZ2xvYmFsUGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBnbG9iYWxQYXJhbU5hbWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdFx0XHRicmFrZXQgKz0gXCJwYXJhbXMgPSBucC5hcnJheShbXCIgKyBnbG9iYWxQYXJhbUxpc3QgKyBcIl0pXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdFx0XHRicmFrZXQgKz0gXCJtaW5pbXVtID0gbWluaW1pemUob2JqZWN0aXZlX2Z1bmN0aW9uLCBwYXJhbXMsIG1ldGhvZD1cXFwiXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA6IFwiUG93ZWxsXCIpICsgXCJcXFwiLCB0b2w9dG9sZXJhbmNlKVxcblwiO1xuXHRcdFx0XHRicmFrZXQgKz0gXCJwcmludChcXFwiY29zdDpcXFwiLCBtaW5pbXVtLmZ1biwgXFxcInBhcmFtczpcXFwiLCBtaW5pbXVtLngpXFxuXCI7XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwicHJpbnQoY291bnRzKVwiO1xuXHRcdH1cblx0fVxuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRsYW5ndWFnZTogXCJweXRob25cIixcblx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogYnJha2V0LFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGJyYWtldDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1FvYmogPSBmdW5jdGlvbihvcHRpb25zLCBjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNpcmN1aXROYW1lID0gb3B0aW9ucy5jaXJjdWl0TmFtZTtcblx0dmFyIGV4cGVyaW1lbnROYW1lID0gb3B0aW9ucy5leHBlcmltZW50TmFtZTtcblx0dmFyIG51bVNob3RzID0gb3B0aW9ucy5udW1TaG90cztcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdFxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdHZhciBnbG9iYWxQYXJhbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdsb2JhbFBhcmFtcykpO1xuXHRmb3IodmFyIGdsb2JhbFBhcmFtTmFtZSBpbiBnbG9iYWxQYXJhbXMpIHtcblx0XHRnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHR9XG5cblx0Y2lyY3VpdE5hbWUgPSBjaXJjdWl0TmFtZSB8fCBcIlwiO1xuXHRleHBlcmltZW50TmFtZSA9IGV4cGVyaW1lbnROYW1lIHx8IFwiXCI7XG5cdG51bVNob3RzID0gbnVtU2hvdHMgfHwgMTtcblxuXHQvLyAtLS1cblx0Ly8gZGVjb21wb3NlIGNpcmN1aXRcblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cdC8vIC0tLVxuXG5cdHZhciBpZCA9IHRoaXMucmFuZG9tU3RyaW5nKCk7XG5cdHZhciBwYXJlbnRRb2JqID0ge3FvYmpfaWQ6IFwicW9ial9cIiArIGlkLCB0eXBlOiBcIlFBU01cIiwgc2NoZW1hX3ZlcnNpb246IFwiMS4wXCIsIGV4cGVyaW1lbnRzOiBbXSwgaGVhZGVyOiB7ZGVzY3JpcHRpb246IGNpcmN1aXROYW1lfSwgY29uZmlnOntzaG90czogbnVtU2hvdHMsIG1lbW9yeV9zbG90czogMH19O1xuXHR2YXIgcW9iaiA9IHtoZWFkZXI6IHttZW1vcnlfc2xvdHM6IDAsIG5fcXViaXRzOiAwLCBxcmVnX3NpemVzOiBbXSwgcXViaXRfbGFiZWxzOiBbXSwgY3JlZ19zaXplczogW10sIGNsYml0X2xhYmVsczogW10sIG5hbWU6IFwiY2lyY3VpdDBcIn0sIGNvbmZpZzoge25fcXViaXRzOiAwLCBtZW1vcnlfc2xvdHM6IDB9LCBpbnN0cnVjdGlvbnM6IFtdfTtcblx0dmFyIGNyZWdOYW1lcyA9IE9iamVjdC5rZXlzKGNpcmN1aXQuY3JlZ3MpO1xuXG5cdHZhciBpbnRUb0RvdWJsZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihOdW1iZXIuaXNJbnRlZ2VyKG5vZGUpKSB7XG5cdFx0XHRyZXR1cm4gbm9kZS50b0ZpeGVkKDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gbm9kZTtcblx0fTtcblxuXHRpZighY2lyY3VpdFJlcGxhY2VtZW50KXtcblx0XHRpZihleHBlcmltZW50TmFtZSl7XG5cdFx0XHRxb2JqLmhlYWRlci5kZXNjcmlwdGlvbiA9IGV4cGVyaW1lbnROYW1lO1xuXHRcdH1cblx0XHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncyl7XG5cdFx0XHR2YXIgY3JlZ0xlbmd0aCA9IGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVdLmxlbmd0aDtcblx0XHRcdHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cyArPSBjcmVnTGVuZ3RoO1xuXHRcdFx0cW9iai5oZWFkZXIuY3JlZ19zaXplcy5wdXNoKFtjcmVnTmFtZSwgY3JlZ0xlbmd0aF0pO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNyZWdMZW5ndGg7IGkrKyl7XG5cdFx0XHRcdHFvYmouaGVhZGVyLmNsYml0X2xhYmVscy5wdXNoKFtjcmVnTmFtZSwgaV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRxb2JqLmhlYWRlci5tZW1vcnlfc2xvdHMgPSBwYXJlbnRRb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHM7XG5cdFx0cW9iai5oZWFkZXIubl9xdWJpdHMgPSBjaXJjdWl0Lm51bVF1Yml0cztcblx0XHRxb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHMgPSBwYXJlbnRRb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHM7XG5cdFx0cW9iai5jb25maWcubl9xdWJpdHMgPSBjaXJjdWl0Lm51bVF1Yml0cztcblx0XHRxb2JqLmhlYWRlci5xcmVnX3NpemVzLnB1c2goW1wicVwiLCBjaXJjdWl0Lm51bVF1Yml0c10pO1xuXHR9XG5cblx0dmFyIHJlZ2lzdGVyU2xvdHMgPSBwYXJlbnRRb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHM7XG5cblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKXtcblx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0aWYoIWJhc2ljR2F0ZSl7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKGN1c3RvbUdhdGUpe1xuXHRcdFx0XHRjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IGNpcmN1aXROYW1lLFxuXHRcdFx0XHRcdGV4cGVyaW1lbnROYW1lOiBleHBlcmltZW50TmFtZSxcblx0XHRcdFx0XHRudW1TaG90czogbnVtU2hvdHNcblx0XHRcdFx0fTtcblx0XHRcdFx0cGFyZW50UW9iaiArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUW9iaihuZXdPcHRpb25zLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKXtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKyl7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHR2YXIgcW9iakluc3RydWN0aW9uID0ge25hbWUgOiBcIlwiLCBxdWJpdHM6IFtdfTtcblx0XHRcdHZhciBxb2JqUmVwbGFjZW1lbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFvYmpFcXVpdmFsZW50ID0gbnVsbDtcblx0XHRcdGlmKGNvbHVtbiA9PSAwKXtcblx0XHRcdFx0cW9iai5oZWFkZXIucXViaXRfbGFiZWxzLnB1c2goW1wicVwiLCB3aXJlXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCl7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdGlmKGdhdGVEZWYpe1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbyl7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucWFzbSAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5yZXBsYWNlbWVudCl7XG5cdFx0XHRcdFx0XHRcdHFvYmpSZXBsYWNlbWVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRxb2JqUmVwbGFjZW1lbnQubWFwKGZ1bmN0aW9uKHJlcGxhY2VtZW50KXtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMoZ2F0ZS5vcHRpb25zLnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRQYXJhbXMgPSBPYmplY3Qua2V5cyhyZXBsYWNlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlcGxhY2VtZW50UGFyYW1zLmluZGV4T2YocGFyYW0pID4gLTEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnBhcmFtc1twYXJhbV0gPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudENvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IHt9O1xuXHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50Q2lyY3VpdC5hZGRHYXRlKHJlcGxhY2VtZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZS53aXJlcywgeyBwYXJhbXM6IHJlcGxhY2VtZW50LnBhcmFtcywgY29uZGl0aW9uOiByZXBsYWNlbWVudENvbmRpdGlvbiB9KTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcmN1aXROYW1lOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXhwZXJpbWVudE5hbWU6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRudW1TaG90czogXCJcIlxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0cW9iai5pbnN0cnVjdGlvbnMgPSBxb2JqLmluc3RydWN0aW9ucy5jb25jYXQocmVwbGFjZW1lbnRDaXJjdWl0LmV4cG9ydFRvUW9iaihuZXdPcHRpb25zLCB0cnVlKSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fWVsc2UgaWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdHFvYmpFcXVpdmFsZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudDtcblx0XHRcdFx0XHRcdFx0cW9iakVxdWl2YWxlbnQubWFwKGZ1bmN0aW9uKGVxdWl2YWxlbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlcXVpdmFsZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmVzID0gZXF1aXZhbGVudC53aXJlcy5sZW5ndGggPiAxID8gZ2F0ZS53aXJlcyA6IGdhdGUud2lyZXNbZXF1aXZhbGVudC53aXJlc1swXV07XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVxUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRcdFx0aWYoZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZXF1aXZhbGVudCBnYXRlIHBhcmFtcyBjYW4gY29udGFpbiB2YXJpYWJsZSBmcm9tIGdhdGUgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRXZhbHVhdGUgZ2F0ZSdzIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZ2F0ZVBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtc1tnYXRlUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRXZhbHVhdGUgZXF1aXZhbGVudCBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGVxUGFyYW1OYW1lIGluIGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVxUGFyYW1zW2VxUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZXF1aXZhbGVudC5wYXJhbXNbZXFQYXJhbU5hbWVdLCBnYXRlUGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHR2YXIgZXFDb25kaXRpb24gPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA/IGdhdGUub3B0aW9ucy5jb25kaXRpb24gOiB7fTtcblxuXHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmFkZEdhdGUoZXF1aXZhbGVudC5uYW1lLCBjb2x1bW4sIGdhdGVXaXJlcywgeyBwYXJhbXM6IGVxUGFyYW1zLCBjb25kaXRpb246IGVxQ29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRleHBlcmltZW50TmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdG51bVNob3RzOiBcIlwiXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucyA9IHFvYmouaW5zdHJ1Y3Rpb25zLmNvbmNhdChlcXVpdmFsZW50Q2lyY3VpdC5leHBvcnRUb1FvYmoobmV3T3B0aW9ucywgdHJ1ZSkpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighcW9ialJlcGxhY2VtZW50ICYmICFxb2JqRXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdFx0aWYodGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXSl7XG5cdFx0XHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImlkXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwiaWRlblwiO1xuXHRcdFx0XHRcdFx0XHR9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcInIyXCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvMlwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwicjRcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJ1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS80XCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJyOFwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzhcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcImNyMlwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcImN1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS8yXCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJjcjRcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJjdTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvNFwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwiY3I4XCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwiY3UxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzhcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5uYW1lID0gZ2F0ZU5hbWU7XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5xdWJpdHMgPSBnYXRlLndpcmVzO1xuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpe1xuXHRcdFx0XHRcdFx0XHR2YXIgYm9vbGVhbkluc3RydWN0aW9uID0ge25hbWU6IFwiXCIsIHJlZ2lzdGVyOiByZWdpc3RlclNsb3RzLCByZWxhdGlvbjogXCI9PVwiLCBtYXNrOiBcIlwiLCB2YWw6IFwiXCJ9O1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1NpemUgPSBjaXJjdWl0LmNyZWdzW2dhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZ10ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHR2YXIgbnVtYmVyT2ZCaXRzU2hpZnQgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgbWFza1ZhbHVlID0gMDtcblx0XHRcdFx0XHRcdFx0dmFyIG1hc2sgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHR2YXIgdmFsID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBpbmRleE9mUmVnaXN0ZXIgPSBjcmVnTmFtZXMuaW5kZXhPZihnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgaW5kZXhPZlJlZ2lzdGVyOyBpKyspe1xuXHRcdFx0XHRcdFx0XHRcdG51bWJlck9mQml0c1NoaWZ0ICs9IGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVzW2ldXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSAoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSAlIE1hdGgucG93KDIsIGNyZWdTaXplKSkqTWF0aC5wb3coMiwgbnVtYmVyT2ZCaXRzU2hpZnQpO1xuXHRcdFx0XHRcdFx0XHR2YWwgPSBcIjB4XCIgKyB2YWx1ZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblxuXHRcdFx0XHRcdFx0XHRpZihudW1iZXJPZkJpdHNTaGlmdCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBleHBvbmVudCA9IE1hdGgucG93KDIsIG51bWJlck9mQml0c1NoaWZ0KTtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdCA9IDA7IGJpdCA8IGNyZWdTaXplOyBiaXQrKyl7XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0bWFza1ZhbHVlICs9IGV4cG9uZW50O1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXhwb25lbnQgKj0gMjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bWFzayA9IFwiMHhcIiArIG1hc2tWYWx1ZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG1hc2sgPSBcIjB4XCIgKyAoTWF0aC5wb3coMiwgY3JlZ1NpemUpIC0gMSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ym9vbGVhbkluc3RydWN0aW9uLm5hbWUgPSBcImJmdW5jXCI7XG5cdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5jb25kaXRpb25hbCA9IHJlZ2lzdGVyU2xvdHM7XG5cdFx0XHRcdFx0XHRcdGJvb2xlYW5JbnN0cnVjdGlvbi5tYXNrID0gbWFzaztcblx0XHRcdFx0XHRcdFx0Ym9vbGVhbkluc3RydWN0aW9uLnZhbCA9IHZhbDtcblx0XHRcdFx0XHRcdFx0cW9iai5pbnN0cnVjdGlvbnMucHVzaChib29sZWFuSW5zdHJ1Y3Rpb24pO1xuXHRcdFx0XHRcdFx0XHRyZWdpc3RlclNsb3RzICs9IDE7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZyl7XG5cdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5tZW1vcnkgPSBbXTtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnJlZ2lzdGVyID0gW107XG5cdFx0XHRcdFx0XHRcdHZhciBwcmV2UmVnaXN0ZXJMZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgaW5kZXhPZlJlZ2lzdGVyID0gY3JlZ05hbWVzLmluZGV4T2YoZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBpbmRleE9mUmVnaXN0ZXI7IGkrKyl7XG5cdFx0XHRcdFx0XHRcdFx0cHJldlJlZ2lzdGVyTGVuZ3RoICs9IGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVzW2ldXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dmFyIGNyZWdCaXQgPSBwcmV2UmVnaXN0ZXJMZW5ndGggKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQ7XG5cdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5tZW1vcnkucHVzaChjcmVnQml0KTtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnJlZ2lzdGVyLnB1c2goY3JlZ0JpdCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gdGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZil7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnBhcmFtcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWUgPSBwYXJhbURlZltwXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdIHx8IGdhdGVQYXJhbXNbcGFyYW1OYW1lXS50b1N0cmluZygpKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGguZXZhbHVhdGUoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdLCBnbG9iYWxQYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5wYXJhbXMucHVzaChub2RlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucy5wdXNoKHFvYmpJbnN0cnVjdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdFxuXHRpZihjaXJjdWl0UmVwbGFjZW1lbnQpe1xuXHRcdHJldHVybiBxb2JqLmluc3RydWN0aW9ucztcblx0fVxuXG5cdGlmKHFvYmouaW5zdHJ1Y3Rpb25zLmxlbmd0aCl7XG5cdFx0cGFyZW50UW9iai5leHBlcmltZW50cy5wdXNoKHFvYmopO1xuXHR9XG5cblx0cmV0dXJuIHBhcmVudFFvYmo7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jbGVhclBhcnRpdGlvbnMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5wYXJ0aXRpb25NYXAgPSBbXTtcblx0dGhpcy5wYXJ0aXRpb25Db3VudCA9IDA7XG5cdHRoaXMucGFydGl0aW9uSW5mbyA9IHt9O1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dGhpcy5wYXJ0aXRpb25NYXAucHVzaChbXSk7XG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0dGhpcy5wYXJ0aXRpb25NYXBbd2lyZV0ucHVzaCgtMSk7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlYXRlUGFydGl0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmNsZWFyUGFydGl0aW9ucygpO1xuXG5cdHZhciB3aXJlUGFydGl0aW9ucyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdHdpcmVQYXJ0aXRpb25zLnB1c2goLTEpO1xuXHR9XG5cblx0dmFyIHBhcnRpdGlvbkNvdW50ZXIgPSAwO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS53aXJlcykge1xuXHRcdFx0XHR2YXIgcHJldlBhcnRpdGlvbnMgPSBbXTtcblx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHR2YXIgd3IgPSBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdHZhciBwcmV2UGFydGl0aW9uID0gd2lyZVBhcnRpdGlvbnNbd3JdO1xuXHRcdFx0XHRcdGlmKHByZXZQYXJ0aXRpb25zLmluZGV4T2YocHJldlBhcnRpdGlvbikgPCAwKSB7XG5cdFx0XHRcdFx0XHRwcmV2UGFydGl0aW9ucy5wdXNoKHByZXZQYXJ0aXRpb24pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgcGFydGl0aW9uID0gLTE7XG5cdFx0XHRcdGlmKHByZXZQYXJ0aXRpb25zLmxlbmd0aCAhPSAxIHx8IHByZXZQYXJ0aXRpb25zWzBdID09IC0xKSB7XG5cdFx0XHRcdFx0cGFydGl0aW9uID0gcGFydGl0aW9uQ291bnRlcisrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcnRpdGlvbiA9IHByZXZQYXJ0aXRpb25zWzBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHR2YXIgd3IgPSBnYXRlLndpcmVzW3ddO1xuXG5cdFx0XHRcdFx0b2xkUGFydGl0aW9uID0gd2lyZVBhcnRpdGlvbnNbd3JdO1xuXHRcdFx0XHRcdGlmKG9sZFBhcnRpdGlvbiA9PSAtMSkge1xuXHRcdFx0XHRcdFx0d2lyZVBhcnRpdGlvbnNbd3JdID0gcGFydGl0aW9uO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZih3aXJlUGFydGl0aW9uc1tpXSA9PSBvbGRQYXJ0aXRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHR3aXJlUGFydGl0aW9uc1tpXSA9IHBhcnRpdGlvbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXVtjb2x1bW5dID0gd2lyZVBhcnRpdGlvbnNbd2lyZV07XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5wYXJ0aXRpb25Db3VudCA9IHBhcnRpdGlvbkNvdW50ZXI7XG5cblx0Zm9yKHZhciBwYXJ0aXRpb24gPSAwOyBwYXJ0aXRpb24gPCBwYXJ0aXRpb25Db3VudGVyOyBwYXJ0aXRpb24rKykge1xuXHRcdHRoaXMucGFydGl0aW9uSW5mb1twYXJ0aXRpb25dID0gdGhpcy5wYXJ0aXRpb25Cb3VuZHMocGFydGl0aW9uKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnByaW50UGFydGl0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdHZhciByb3cgPSBcIlwiO1xuXHRcdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRcdHZhciBwYXJ0ID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKHBhcnQgPT0gLTEpIHBhcnQgPSBcIiBcIjtcblx0XHRcdGlmKHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSkpIHtcblx0XHRcdFx0cGFydCA9IHBhcnQgKyBcIipcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhcnQgPSBwYXJ0ICsgXCIgXCI7XG5cdFx0XHR9XG5cdFx0XHR3aGlsZShwYXJ0Lmxlbmd0aCA8IDQpIHtcblx0XHRcdFx0cGFydCA9IFwiIFwiICsgcGFydDtcblx0XHRcdH1cblx0XHRcdHJvdyArPSBwYXJ0O1xuXHRcdH1cblx0XHR2YXIgdyA9IHdpcmUgKyBcIlwiO1xuXHRcdHdoaWxlKHcubGVuZ3RoIDwgMikge1xuXHRcdFx0dyA9IFwiMFwiICsgdztcblx0XHR9XG5cdFx0cm93ID0gXCJxXCIgKyB3ICsgcm93O1xuXHRcdGNvbnNvbGUubG9nKHJvdyk7XG5cdH1cbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpdGlvbkJvdW5kcyA9IGZ1bmN0aW9uKHBhcnRpdGlvbkluZGV4KSB7XG5cdHZhciBib3VuZHMgPSB7XG5cdFx0d2lyZToge1xuXHRcdFx0dG9wOiAtMSxcblx0XHRcdGJvdHRvbTogLTFcblx0XHR9LFxuXHRcdGNvbHVtbjoge1xuXHRcdFx0bGVmdDogLTEsXG5cdFx0XHRyaWdodDogLTFcblx0XHR9LFxuXHRcdHdpcmVNYXA6IHtcblxuXHRcdH0sXG5cdFx0cGFyZW50czoge1xuXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBmb3VuZCA9IGZhbHNlO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBwYXJ0aXRpb24gPSB0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYocGFydGl0aW9uID09IHBhcnRpdGlvbkluZGV4KSB7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblxuXHRcdFx0XHRpZihib3VuZHMud2lyZS50b3AgPCAwKSB7XG5cdFx0XHRcdFx0Ym91bmRzLndpcmUudG9wID0gd2lyZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihib3VuZHMud2lyZS5ib3R0b20gPCB3aXJlKSB7XG5cdFx0XHRcdFx0Ym91bmRzLndpcmUuYm90dG9tID0gd2lyZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGJvdW5kcy5jb2x1bW4ubGVmdCA8IDApIHtcblx0XHRcdFx0XHRib3VuZHMuY29sdW1uLmxlZnQgPSBjb2x1bW47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoYm91bmRzLmNvbHVtbi5yaWdodCA8IGNvbHVtbikge1xuXHRcdFx0XHRcdGJvdW5kcy5jb2x1bW4ucmlnaHQgPSBjb2x1bW47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZighZm91bmQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciBwYXJ0aXRpb25XaXJlID0gMDtcblx0Zm9yKHZhciB3aXJlID0gYm91bmRzLndpcmUudG9wOyB3aXJlIDw9IGJvdW5kcy53aXJlLmJvdHRvbTsgd2lyZSsrKSB7XG5cdFx0dmFyIHBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2JvdW5kcy5jb2x1bW4ubGVmdF07XG5cdFx0aWYocGFydGl0aW9uID09IHBhcnRpdGlvbkluZGV4KSB7XG5cdFx0XHRib3VuZHMud2lyZU1hcFt3aXJlXSA9IHBhcnRpdGlvbldpcmU7XG5cblx0XHRcdHBhcnRpdGlvbldpcmUrKztcblx0XHR9XG5cdH1cblx0Ym91bmRzLm51bVF1Yml0cyA9IHBhcnRpdGlvbldpcmU7XG5cblx0aWYoYm91bmRzLmNvbHVtbi5sZWZ0ID4gMCkge1xuXHRcdGZvcih2YXIgd2lyZSBpbiBib3VuZHMud2lyZU1hcCkge1xuXHRcdFx0dmFyIHBhcmVudFBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2JvdW5kcy5jb2x1bW4ubGVmdCAtIDFdO1xuXHRcdFx0aWYocGFyZW50UGFydGl0aW9uID49IDApIHtcblx0XHRcdFx0aWYoIWJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0pIHtcblx0XHRcdFx0XHRib3VuZHMucGFyZW50c1twYXJlbnRQYXJ0aXRpb25dID0ge307XG5cdFx0XHRcdFx0Ym91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXS5saW5rcyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBwYXJlbnRCb3VuZHMgPSB0aGlzLnBhcnRpdGlvbkluZm9bcGFyZW50UGFydGl0aW9uXTtcblx0XHRcdFx0Zm9yKHZhciBwd2lyZSBpbiBwYXJlbnRCb3VuZHMud2lyZU1hcCkge1xuXHRcdFx0XHRcdGlmKHB3aXJlID09IHdpcmUpIHtcblx0XHRcdFx0XHRcdGJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0ubGlua3MucHVzaChib3VuZHMud2lyZU1hcFt3aXJlXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGJvdW5kcztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpdGlvbkNpcmN1aXQgPSBmdW5jdGlvbihwYXJ0aXRpb25JbmRleCkge1xuXHR2YXIgYm91bmRzID0gdGhpcy5wYXJ0aXRpb25JbmZvW3BhcnRpdGlvbkluZGV4XTtcblx0aWYoIWJvdW5kcykge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIGNvbWJpbmVMaXN0ID0gW107XG5cdHZhciB1c2VkV2lyZXMgPSBbXTtcblx0Zm9yKHZhciBwYXJlbnRQYXJ0aXRpb24gaW4gYm91bmRzLnBhcmVudHMpIHtcblx0XHR2YXIgY29tYmluZUl0ZW0gPSB7fTtcblxuXHRcdGNvbWJpbmVJdGVtLmNpcmN1aXQgPSB0aGlzLnBhcnRpdGlvbkNhY2hlW3BhcmVudFBhcnRpdGlvbl07XG5cdFx0Y29tYmluZUl0ZW0ud2lyZXMgPSBbXTtcblx0XHRjb21iaW5lSXRlbS53aXJlcyA9IGJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0ubGlua3M7XG5cblx0XHR1c2VkV2lyZXMgPSB1c2VkV2lyZXMuY29uY2F0KGNvbWJpbmVJdGVtLndpcmVzKTtcblxuXHRcdGNvbWJpbmVMaXN0LnB1c2goY29tYmluZUl0ZW0pO1xuXHR9XG5cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHQvLyBjb21iaW5lIHN0YXRlIGZyb20gcGFyZW50IHBhcnRpdGlvbnNcblx0aWYoY29tYmluZUxpc3QubGVuZ3RoID4gMCkge1xuXHRcdGlmKGJvdW5kcy5udW1RdWJpdHMgPiB1c2VkV2lyZXMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgY29tYmluZUl0ZW0gPSB7fTtcblx0XHRcdGNvbWJpbmVJdGVtLmNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoYm91bmRzLm51bVF1Yml0cyAtIHVzZWRXaXJlcy5sZW5ndGgpO1xuXHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMgPSBbXTtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBib3VuZHMubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdFx0aWYodXNlZFdpcmVzLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMucHVzaChpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29tYmluZUxpc3QucHVzaChjb21iaW5lSXRlbSk7XG5cdFx0fVxuXHRcdGNpcmN1aXQuc2V0Q29tYmluZWRTdGF0ZShjb21iaW5lTGlzdCk7XG5cdH1cblxuXHQvLyBhZGQgZ2F0ZXMgdG8gdGhlIGNpcmN1aXRcblx0Zm9yKHZhciBjb2x1bW4gPSBib3VuZHMuY29sdW1uLmxlZnQ7IGNvbHVtbiA8PSBib3VuZHMuY29sdW1uLnJpZ2h0OyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IGJvdW5kcy53aXJlLnRvcDsgd2lyZSA8PSBib3VuZHMud2lyZS5ib3R0b207IHdpcmUrKykge1xuXHRcdFx0dmFyIHBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihwYXJ0aXRpb24gPT0gcGFydGl0aW9uSW5kZXgpIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmVzID0gW107XG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdHZhciB3ciA9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRnYXRlV2lyZXMucHVzaChib3VuZHMud2lyZU1hcFt3cl0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjaXJjdWl0LmFkZEdhdGUoZ2F0ZS5uYW1lLCBjb2x1bW4gLSBib3VuZHMuY29sdW1uLmxlZnQsIGdhdGVXaXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjaXJjdWl0O1xufTtcblxuLy9cbi8vIE9wdGlvbnM6XG4vLyAgIHtcbi8vICAgICBzdHJpY3RNb2RlOiBib29sLFxuLy8gICAgIHBhcnRpdGlvbmluZzogYm9vbCxcbi8vICAgICBjb250aW51ZTogYm9vbCxcbi8vICAgICBpbml0aWFsU3RhdGU6IEFycmF5XG4vLyAgICAgb25HYXRlOiBmdW5jdGlvbihjb2x1bW4sIHdpcmUsIGdhdGVDb3VudGVyKSB7IC4uLiB9LFxuLy8gICAgIG9uQ29sdW1uOiBmdW5jdGlvbihjb2x1bW4pIHsgLi4uIH1cbi8vICAgfVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbihpbml0aWFsVmFsdWVzLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHRoaXMubWVhc3VyZVJlc2V0c1F1Yml0ID0gISFvcHRpb25zLnN0cmljdE1vZGU7XG5cblx0aWYoIW9wdGlvbnMuY29udGludWUpIHtcblx0XHR0aGlzLmluaXRTdGF0ZSgpO1xuXHRcdHRoaXMuc3RhdHMuZHVyYXRpb24gPSAwO1xuXHR9XG5cblx0aWYob3B0aW9ucy5pbml0aWFsU3RhdGUpIHtcblx0XHRpZihBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5pdGlhbFN0YXRlKSkge1xuXHRcdFx0dGhpcy5zdGF0ZSA9IHt9O1xuXHRcdFx0Zm9yKHZhciB2YWxJbmRleCA9IDA7IHZhbEluZGV4IDwgb3B0aW9ucy5pbml0aWFsU3RhdGUubGVuZ3RoOyB2YWxJbmRleCsrKSB7XG5cdFx0XHRcdHZhciB2YWwgPSBvcHRpb25zLmluaXRpYWxTdGF0ZVt2YWxJbmRleF07XG5cblx0XHRcdFx0aWYoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT0gMikge1xuXHRcdFx0XHRcdHZhbCA9IG1hdGguY29tcGxleCh2YWxbMF0sIHZhbFsxXSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZih0eXBlb2YgdmFsID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHR2YWwgPSB0aGlzLmV2YWxNYXRoU3RyaW5nKHZhbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYodHlwZW9mIHZhbCA9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0dmFsID0gbWF0aC5jb21wbGV4KHZhbCwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zdGF0ZVt2YWxJbmRleCArIFwiXCJdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnN0YXRlID0gb3B0aW9ucy5pbml0aWFsU3RhdGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdGF0ZUJpdHMgPSAwO1xuXHRcdGZvcih2YXIgYWluZGV4IGluIHRoaXMuc3RhdGUpIHtcblx0XHRcdHRoaXMuc3RhdGVCaXRzIHw9IHBhcnNlSW50KGFpbmRleCk7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5zdGF0cy5zdGFydCA9IG5ldyBEYXRlKCk7XG5cblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0aWYoaW5pdGlhbFZhbHVlcykge1xuXHRcdGRlY29tcG9zZWQuaW5zZXJ0Q29sdW1uKDApO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRpZihpbml0aWFsVmFsdWVzW3dpcmVdKSB7XG5cdFx0XHRcdGRlY29tcG9zZWQuYWRkR2F0ZShcInhcIiwgMCwgd2lyZSwge30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBwYXJ0aXRpb25pbmcgPSBvcHRpb25zLnBhcnRpdGlvbmluZztcblxuXHRpZihwYXJ0aXRpb25pbmcpIHtcblx0XHRkZWNvbXBvc2VkLmNyZWF0ZVBhcnRpdGlvbnMoKTtcbi8vXHRcdGRlY29tcG9zZWQucHJpbnRQYXJ0aXRpb25zKCk7XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGRlY29tcG9zZWQubnVtQ29scygpO1xuXHR2YXIgZ2F0ZUNvdW50ZXIgPSAwO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRnYXRlQ291bnRlcisrO1xuXG5cdFx0XHRcdHZhciBleGVjdXRlR2F0ZSA9IHRydWU7XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdHZhciBjcmVnVmFsdWUgPSB0aGlzLmdldENyZWdWYWx1ZShnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpO1xuXHRcdFx0XHRcdGV4ZWN1dGVHYXRlID0gY3JlZ1ZhbHVlID09PSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZXhlY3V0ZUdhdGUpIHtcblxuXHRcdFx0XHRcdGlmKHBhcnRpdGlvbmluZykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcnRpdGlvbiA9IGRlY29tcG9zZWQucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRcdFx0XHRpZighZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtwYXJ0aXRpb25dKSB7XG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbcGFydGl0aW9uXSA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2lyY3VpdChwYXJ0aXRpb24pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2YXIgcGNpcmMgPSBkZWNvbXBvc2VkLnBhcnRpdGlvbkNhY2hlW3BhcnRpdGlvbl07XG5cdFx0XHRcdFx0XHR2YXIgYm91bmRzID0gZGVjb21wb3NlZC5wYXJ0aXRpb25JbmZvW3BhcnRpdGlvbl07XG5cblx0XHRcdFx0XHRcdHZhciBwY29sdW1uID0gY29sdW1uIC0gYm91bmRzLmNvbHVtbi5sZWZ0O1xuXG5cdFx0XHRcdFx0XHR2YXIgcGdhdGUgPSBwY2lyYy5nZXRHYXRlQXQocGNvbHVtbiwgYm91bmRzLndpcmVNYXBbd2lyZV0pO1xuXG5cdFx0XHRcdFx0XHRwY2lyYy5jcmVncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jcmVncykpO1xuXHRcdFx0XHRcdFx0cGNpcmMuYXBwbHlHYXRlKHBnYXRlLm5hbWUsIHBjb2x1bW4sIHBnYXRlLndpcmVzLCBwZ2F0ZS5vcHRpb25zKTtcblx0XHRcdFx0XHRcdHRoaXMuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHBjaXJjLmNyZWdzKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuYXBwbHlHYXRlKGdhdGUubmFtZSwgY29sdW1uLCBnYXRlLndpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGNhbGxiYWNrIGFmdGVyIGdhdGUgaXMgZmluaXNoZWRcblx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLm9uR2F0ZSkge1xuXHRcdFx0XHRcdG9wdGlvbnMub25HYXRlKGNvbHVtbiwgd2lyZSwgZ2F0ZUNvdW50ZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGNhbGxiYWNrIGFmdGVyIGNvbHVtbiBpcyBmaW5pc2hlZFxuXHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5vbkNvbHVtbikge1xuXHRcdFx0b3B0aW9ucy5vbkNvbHVtbihjb2x1bW4pO1xuXHRcdH1cblx0fVxuXG5cdGlmKHBhcnRpdGlvbmluZykge1xuXHRcdHZhciBsYXN0UGFydGl0aW9ucyA9IFtdO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgcGFydGl0aW9uID0gZGVjb21wb3NlZC5wYXJ0aXRpb25NYXBbd2lyZV1bbnVtQ29scyAtIDFdO1xuXHRcdFx0aWYocGFydGl0aW9uID49IDAgJiYgbGFzdFBhcnRpdGlvbnMuaW5kZXhPZihwYXJ0aXRpb24pIDwgMCkge1xuXHRcdFx0XHRsYXN0UGFydGl0aW9ucy5wdXNoKHBhcnRpdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmKGxhc3RQYXJ0aXRpb25zLmxlbmd0aCkge1xuXHRcdFx0aWYobGFzdFBhcnRpdGlvbnMubGVuZ3RoID09IDEpIHtcblx0XHRcdFx0dGhpcy5zdGF0ZSA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbbGFzdFBhcnRpdGlvbnNbMF1dLnN0YXRlO1xuXHRcdFx0XHR0aGlzLnN0YXRlQml0cyA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbbGFzdFBhcnRpdGlvbnNbMF1dLnN0YXRlQml0cztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBzdGFydFRpbWUgPSB0aGlzLnN0YXRzLnN0YXJ0O1xuXHRcdFx0XHR2YXIgY29tYmluZUxpc3QgPSBbXTtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGxhc3RQYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGxhc3RQYXJ0aXRpb24gPSBsYXN0UGFydGl0aW9uc1tpXTtcblxuXHRcdFx0XHRcdHZhciBjb21iaW5lSXRlbSA9IHt9O1xuXG5cdFx0XHRcdFx0Y29tYmluZUl0ZW0uY2lyY3VpdCA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbbGFzdFBhcnRpdGlvbl07XG5cdFx0XHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMgPSBbXTtcblxuXHRcdFx0XHRcdHZhciBsYXN0Qm91bmRzID0gZGVjb21wb3NlZC5wYXJ0aXRpb25JbmZvW2xhc3RQYXJ0aXRpb25dO1xuXHRcdFx0XHRcdGZvcih2YXIgd2lyZSBpbiBsYXN0Qm91bmRzLndpcmVNYXApIHtcblx0XHRcdFx0XHRcdGNvbWJpbmVJdGVtLndpcmVzLnB1c2gocGFyc2VJbnQod2lyZSkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbWJpbmVMaXN0LnB1c2goY29tYmluZUl0ZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0Q29tYmluZWRTdGF0ZShjb21iaW5lTGlzdCk7XG5cdFx0XHRcdHRoaXMuc3RhdHMuc3RhcnQgPSBzdGFydFRpbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5zdGF0cy5lbmQgPSBuZXcgRGF0ZSgpO1xuXHR0aGlzLnN0YXRzLmR1cmF0aW9uICs9IHRoaXMuc3RhdHMuZW5kIC0gdGhpcy5zdGF0cy5zdGFydDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jb250aW51ZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJ1bihudWxsLCB7XG5cdFx0Y29udGludWU6IHRydWVcblx0fSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc3RhdGVBc0FycmF5ID0gZnVuY3Rpb24ob25seVBvc3NpYmxlLCBza2lwSXRlbXMsIGJsb2NrU2l6ZSkge1xuXHR2YXIgc3RhdGUgPSBbXTtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXG5cdHNraXBJdGVtcyA9IHNraXBJdGVtcyB8fCAwO1xuXHRibG9ja1NpemUgPSBibG9ja1NpemUgfHwgKG9ubHlQb3NzaWJsZSA/IHRoaXMubnVtQW1wbGl0dWRlcyhvbmx5UG9zc2libGUpIDogbnVtQW1wbGl0dWRlcyk7XG5cblx0dmFyIGNvdW50ID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUFtcGxpdHVkZXM7IGkrKykge1xuXHRcdHZhciBhbXBsaXR1ZGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaV0gfHwgbWF0aC5jb21wbGV4KDAsIDApLCAxNCk7XG5cdFx0aWYoIW9ubHlQb3NzaWJsZSB8fCAoYW1wbGl0dWRlLnJlIHx8IGFtcGxpdHVkZS5pbSkpIHtcblx0XHRcdGlmKGNvdW50ID49IHNraXBJdGVtcykge1xuXHRcdFx0XHR2YXIgaW5kZXhCaW5TdHIgPSBpLnRvU3RyaW5nKDIpO1xuXHRcdFx0XHR3aGlsZShpbmRleEJpblN0ci5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0XHRcdGluZGV4QmluU3RyID0gXCIwXCIgKyBpbmRleEJpblN0cjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBhbXBsaXR1ZGVTdHIgPSB0aGlzLmZvcm1hdENvbXBsZXgoYW1wbGl0dWRlLCB7IGZpeGVkV2lkdGg6IHRydWUsIGRlY2ltYWxQbGFjZXM6IDgsIGlvdGFDaGFyOiBcImlcIiB9KTtcblx0XHRcdFx0dmFyIG1hZ25pdHVkZSA9IG1hdGgucG93KG1hdGguYWJzKGFtcGxpdHVkZSksIDIpO1xuXHRcdFx0XHR2YXIgY2hhbmNlID0gbWFnbml0dWRlICogMTAwO1xuXHRcdFx0XHR2YXIgY2hhbmNlU3RyID0gY2hhbmNlLnRvRml4ZWQoNSk7XG5cdFx0XHRcdHZhciBwaGFzZSA9IG1hdGguYXJnKGFtcGxpdHVkZSk7XG5cdFx0XHRcdHZhciBwaGFzZVN0ciA9IHBoYXNlLnRvRml4ZWQoNSk7XG5cblx0XHRcdFx0c3RhdGUucHVzaCh7XG5cdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0aW5kZXhCaW5TdHI6IGluZGV4QmluU3RyLFxuXHRcdFx0XHRcdGFtcGxpdHVkZTogYW1wbGl0dWRlLFxuXHRcdFx0XHRcdGFtcGxpdHVkZVN0cjogYW1wbGl0dWRlU3RyLFxuXHRcdFx0XHRcdG1hZ25pdHVkZTogbWFnbml0dWRlLFxuXHRcdFx0XHRcdGNoYW5jZTogY2hhbmNlLFxuXHRcdFx0XHRcdGNoYW5jZVN0cjogY2hhbmNlU3RyLFxuXHRcdFx0XHRcdHBoYXNlOiBwaGFzZSxcblx0XHRcdFx0XHRwaGFzZVN0cjogcGhhc2VTdHJcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvdW50Kys7XG5cblx0XHRcdGlmKHN0YXRlLmxlbmd0aCA9PSBibG9ja1NpemUpIHtcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdGF0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zdGF0ZUFzU2ltcGxlQXJyYXkgPSBmdW5jdGlvbigpIHtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXHRpZighdGhpcy5zdGF0ZSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdHZhciBzdGF0ZSA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQW1wbGl0dWRlczsgaSsrKSB7XG5cdFx0c3RhdGUucHVzaChtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaV0gfHwgbWF0aC5jb21wbGV4KDAsIDApLCAxNCkpO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnN0YXRlQXNTdHJpbmcgPSBmdW5jdGlvbihvbmx5UG9zc2libGUpIHtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXHRpZighdGhpcy5zdGF0ZSkge1xuXHRcdHJldHVybiBcIkVycm9yOiBjaXJjdWl0IGlzIG5vdCBpbml0aWFsaXplZC4gUGxlYXNlIGNhbGwgaW5pdFN0YXRlKCkgb3IgcnVuKCkgbWV0aG9kLlwiO1xuXHR9XG5cblx0dmFyIHMgPSBcIlwiO1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQW1wbGl0dWRlczsgaSsrKSB7XG5cdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2ldIHx8IG1hdGguY29tcGxleCgwLCAwKSwgMTQpO1xuXHRcdGlmKCFvbmx5UG9zc2libGUgfHwgKHN0YXRlLnJlIHx8IHN0YXRlLmltKSkge1xuXHRcdFx0dmFyIG0gPSBtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpICogMTAwO1xuXG5cdFx0XHQvLyBiaW5hcnkgc3RyaW5nXG5cdFx0XHR2YXIgYmluID0gaS50b1N0cmluZygyKTtcblx0XHRcdHdoaWxlKGJpbi5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcmlnaHQgYWxpZ25lZCBwZXJjZW50XG5cdFx0XHR2YXIgcGVyYyA9IG0udG9GaXhlZCg1KTtcblx0XHRcdHdoaWxlKHBlcmMubGVuZ3RoIDwgOSkge1xuXHRcdFx0XHRwZXJjID0gXCIgXCIgKyBwZXJjO1xuXHRcdFx0fVxuXG5cdFx0XHRzICs9IHRoaXMuZm9ybWF0Q29tcGxleChzdGF0ZSwgeyBmaXhlZFdpZHRoOiB0cnVlLCBkZWNpbWFsUGxhY2VzOiA4LCBpb3RhQ2hhcjogXCJpXCIgfSkgKyBcInxcIiArIGJpbiArIFwiPlxcdFwiICsgcGVyYyArIFwiJVxcblwiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wcmludCA9IGZ1bmN0aW9uKG9ubHlQb3NzaWJsZSkge1xuXHRjb25zb2xlLmxvZyh0aGlzLnN0YXRlQXNTdHJpbmcob25seVBvc3NpYmxlKSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ290Q2xhc3NpY2FsQ29udHJvbCA9IGZ1bmN0aW9uKCkge1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdvdE1lYXN1cmVtZW50ID0gZnVuY3Rpb24oKSB7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlZ0NvdW50ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBjcmVnQ291bnQgPSAwO1xuXHRmb3IodmFyIGNyZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRjcmVnQ291bnQrKztcblx0fVxuXHRyZXR1cm4gY3JlZ0NvdW50O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdzID0gZnVuY3Rpb24oKSB7XG5cdHZhciByZXMgPSB7fTtcblx0Zm9yKHZhciBjcmVnIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRyZXNbY3JlZ10gPSB0aGlzLmdldENyZWdWYWx1ZShjcmVnKTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdzQXNTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcInJlZ1xcdGJpblxcdGRlY1xcblwiO1xuXHRmb3IodmFyIGNyZWcgaW4gdGhpcy5jcmVncykge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMuZ2V0Q3JlZ1ZhbHVlKGNyZWcpO1xuXG5cdFx0Ly8gYmluYXJ5IHN0cmluZ1xuXHRcdHZhciBiaW4gPSB2YWx1ZS50b1N0cmluZygyKTtcblx0XHR2YXIgbGVuID0gdGhpcy5jcmVnc1tjcmVnXSA/IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDEgOiAxO1xuXHRcdHdoaWxlKGJpbi5sZW5ndGggPCBsZW4pIHtcblx0XHRcdGJpbiA9IFwiMFwiICsgYmluO1xuXHRcdH1cblxuXHRcdHMgKz0gY3JlZyArIFwiXFx0XCIgKyBiaW4gKyBcIlxcdFwiICsgdmFsdWUgKyBcIlxcblwiO1xuXHR9XG5cdHJldHVybiBzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlYXRlQ3JlZyA9IGZ1bmN0aW9uKGNyZWcsIGxlbikge1xuXHR0aGlzLmNyZWdzW2NyZWddID0gW107XG5cblx0Ly8gZXh0ZW5kIHJlZ2lzdGVyXG5cdHdoaWxlKHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIDwgKGxlbiB8fCAxKSkge1xuXHRcdHRoaXMuY3JlZ3NbY3JlZ10ucHVzaCgwKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZUNyZWcgPSBmdW5jdGlvbihjcmVnKSB7XG5cdC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gY3JlZ1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgcmVtb3ZlR2F0ZXMgPSBbXTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdC8vIGdhdGUgd3JpdGluZyB0byBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jcmVnICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSA9PSBjcmVnKSB7XG5cdFx0XHRcdFx0aWYocmVtb3ZlR2F0ZXMuaW5kZXhPZihnYXRlLmlkKSA8IDApIHtcblx0XHRcdFx0XHRcdHJlbW92ZUdhdGVzLnB1c2goZ2F0ZS5pZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZ2F0ZSBjb250cm9sbGVkIGJ5IGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID09IGNyZWcpIHtcblx0XHRcdFx0XHRkZWxldGUgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGRlbGV0ZSByZWdpc3RlclxuXHRkZWxldGUgdGhpcy5jcmVnc1tjcmVnXTtcblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgcmVtb3ZlR2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR0aGlzLnJlbW92ZUdhdGUocmVtb3ZlR2F0ZXNbaV0pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVuYW1lQ3JlZyA9IGZ1bmN0aW9uKG9sZE5hbWUsIG5ld05hbWUpIHtcblx0Ly8gcmVuYW1lIHJlZmVyZW5jZVxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLm9wdGlvbnMpIHtcblx0XHRcdFx0Ly8gZ2F0ZSB3cml0aW5nIHRvIGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID09IG9sZE5hbWUpIHtcblx0XHRcdFx0XHRnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGdhdGUgY29udHJvbGxlZCBieSBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyA9PSBvbGROYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJlbmFtZSByZWdpc3RlclxuXHR0aGlzLmNyZWdzW25ld05hbWVdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNyZWdzW29sZE5hbWVdKSk7XG5cdGRlbGV0ZSB0aGlzLmNyZWdzW29sZE5hbWVdO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1pbkNyZWdTaXplID0gZnVuY3Rpb24oY3JlZykge1xuXHR2YXIgbGFyZ2VzdEJpdCA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlICYmIGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHQvLyBnYXRlIHdyaXRpbmcgdG8gY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY3JlZyAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgPT0gY3JlZykge1xuXHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQgfHwgMCk7XG5cdFx0XHRcdFx0aWYoaXNOYU4odGFyZ2V0Qml0KSkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYodGFyZ2V0Qml0ID4gbGFyZ2VzdEJpdCkge1xuXHRcdFx0XHRcdFx0bGFyZ2VzdEJpdCA9IHRhcmdldEJpdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBnYXRlIGNvbnRyb2xsZWQgYnkgY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgPT0gY3JlZykge1xuXHRcdFx0XHRcdHZhciBsYiA9IE1hdGguZmxvb3IoTWF0aC5sb2cyKGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUpKTtcblx0XHRcdFx0XHRpZihsYiA+IGxhcmdlc3RCaXQpIHtcblx0XHRcdFx0XHRcdGxhcmdlc3RCaXQgPSBsYjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbGFyZ2VzdEJpdCArIDE7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzaXplQ3JlZyA9IGZ1bmN0aW9uKGNyZWcsIHNpemUpIHtcblx0aWYoc2l6ZSA8IHRoaXMubWluQ3JlZ1NpemUoY3JlZykpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA8IHNpemUpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cblxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA+IHNpemUpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnBvcCgpO1xuXHR9XG5cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDcmVnID0gZnVuY3Rpb24oY3JlZykge1xuXHRyZXR1cm4gdGhpcy5jcmVnc1tjcmVnXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zZXRDcmVnQml0ID0gZnVuY3Rpb24oY3JlZywgY2JpdCwgdmFsdWUpIHtcblx0Ly8gc2VlIGlmIGNiaXQgaXMgaW50ZWdlclxuXHR2YXIgYml0ID0gcGFyc2VJbnQoY2JpdCk7XG5cdGlmKGlzTmFOKGJpdCkpIHtcblx0XHR0aHJvdyBcIkVycm9yOiBpbnZhbGlkIFxcXCJjYml0XFxcIiBhcmd1bWVudCB0byBcXFwic2V0Q3JlZ0JpdFxcXCIgbWV0aG9kOiBleHBlY3RlZCBcXFwiaW50ZWdlclxcXCIgZ290IFxcXCJcIiArIHR5cGVvZiBjYml0ICsgXCJcXFwiLlwiO1xuXHR9XG5cblx0Ly8gY3JlYXRlIHJlZ2lzdGVyIGlmIGRvZXMgbm90IGV4aXN0XG5cdGlmKCF0aGlzLmNyZWdzW2NyZWddKSB7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXHR9XG5cblx0Ly8gZXh0ZW5kIHJlZ2lzdGVyIGlmIG5lZWRlZFxuXHR3aGlsZShiaXQgPj0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGgpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cblxuXHQvLyBzZXQgYml0XG5cdHRoaXMuY3JlZ3NbY3JlZ11bYml0XSA9IHZhbHVlID8gMSA6IDA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0Q3JlZ0JpdCA9IGZ1bmN0aW9uKGNyZWcsIGNiaXQpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBiaXQgPSBwYXJzZUludChjYml0KTtcblx0aWYoaXNOYU4oYml0KSB8fCBiaXQgPj0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGgpIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IGJpdCBcXFwiXCIgKyBjYml0ICsgXCJcXFwiIG5vdCBmb3VuZC5cIjtcblx0fVxuXHRyZXR1cm4gdGhpcy5jcmVnc1tjcmVnXVtiaXRdO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdCYXNlID0gZnVuY3Rpb24oY3JlZykge1xuXHRpZighdGhpcy5jcmVnc1tjcmVnXSkge1xuXHRcdHRocm93IFwiRXJyb3I6IFxcXCJnZXRDcmVnQml0XFxcIjogdW5rbm93biByZWdpc3RlciBcXFwiXCIgKyBjcmVnICsgXCJcXFwiLlwiO1xuXHR9XG5cblx0dmFyIGJhc2UgPSAwO1xuXHRmb3IodmFyIHJlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdGlmKHJlZ05hbWUgPT0gY3JlZykge1xuXHRcdFx0cmV0dXJuIGJhc2U7XG5cdFx0fVxuXHRcdGJhc2UgKz0gdGhpcy5jcmVnc1tyZWdOYW1lXS5sZW5ndGg7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jcmVnVG90YWxCaXRzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBiaXRzID0gMDtcblx0Zm9yKHZhciByZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRiaXRzICs9IHRoaXMuY3JlZ3NbcmVnTmFtZV0ubGVuZ3RoO1xuXHR9XG5cdHJldHVybiBiaXRzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdWYWx1ZSA9IGZ1bmN0aW9uKGNyZWcpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBsZW4gPSB0aGlzLmNyZWdzW2NyZWddLmxlbmd0aDtcblx0dmFyIHZhbHVlID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0aWYodGhpcy5jcmVnc1tjcmVnXVtpXSkge1xuXHRcdFx0dmFsdWUgKz0gbWF0aC5wb3coMiwgaSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBtZWFzdXJlbWVudCBvZiBhbGwgcXViaXRzIG9uIGN1cnJlbnQgc3RhdGUgdmVjdG9yLCB3aXRob3V0IG1vZGlmeWluZyBzdGF0ZVxuLy8gICBSZXR1cm5zIGFycmF5IG9mIDBzIGFuZCAxcyBmb3IgZWFjaCBxdWJpdC4gXG4vLyAgIEZvciBleGFtcGxlLCBiZWxsIHN0YXRlIHdpbGwgcmV0dXJuOiBbMCwgMF0gb3IgWzEsIDFdXG4vLyAgIElmIHlvdSBuZWVkIG11bHRpcGxlIHNob3RzIHRoZW4gdXNlIFwibWVhc3VyZUFsbE11bHRpc2hvdFwiIG1ldGhvZCAoaXQgcnVucyBtdWNoIGZhc3RlcikuXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1lYXN1cmVBbGwgPSBmdW5jdGlvbihmb3JjZSkge1xuXHRpZih0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmNvbGxhcHNlZC5sZW5ndGggPT0gdGhpcy5udW1RdWJpdHMgJiYgIWZvcmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGFwc2VkO1xuXHR9XG5cblx0dGhpcy5jb2xsYXBzZWQgPSBbXTtcblxuXHR2YXIgcmFuZG9tV2VpZ2h0ID0gTWF0aC5yYW5kb20oKTtcblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2lzXSwgMTQpO1xuXHRcdGlmKHN0YXRlLnJlIHx8IHN0YXRlLmltKSB7XG5cdFx0XHR2YXIgY2hhbmNlID0gbWF0aC5yb3VuZChtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpLCAxNCk7XG5cdFx0XHRyYW5kb21XZWlnaHQgLT0gY2hhbmNlO1xuXHRcdFx0aWYocmFuZG9tV2VpZ2h0IDw9IDApIHtcblx0XHRcdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cdFx0XHRcdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0XHRcdFx0Zm9yKHZhciBxID0gdGhpcy5udW1RdWJpdHMgLSAxOyBxID49IDA7IHEtLSkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgxIDw8IHEgJiBpID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IodmFyIHEgPSAwOyBxIDwgdGhpcy5udW1RdWJpdHM7IHErKykge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgxIDw8IHEgJiBpID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsYXBzZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBzaG9sZCBuZXZlciBoYXBwZW4sIGJ1dCBcIm5hdHVyZSBpcyBub3QgY2xhc3NpY2FsXCIgOilcblx0aWYoIXRoaXMuY29sbGFwc2VkLmxlbmd0aCkge1xuXHRcdHdoaWxlKHRoaXMuY29sbGFwc2VkLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmNvbGxhcHNlZC5wdXNoKDApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcy5jb2xsYXBzZWQ7XG59O1xuXG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBtZWFzdXJlbWVudCBvZiBhbGwgcXViaXRzIG9uIGN1cnJlbnQgc3RhdGUgdmVjdG9yLCB3aXRob3V0IG1vZGlmeWluZyBzdGF0ZSwgbXVsdGlwbGUgdGltZXNcbi8vICAgUmV0dXJucyBvYmplY3QgKGRpY3Rpb25hcnkpIHdpdGggbWVhc3VyZWQgdmFsdWVzIChiaW5hcnkpIGFzIGtleXMgYW5kIGNvdW50cyBhcyB2YWx1ZXNcbi8vICAgRm9yIGV4YW1wbGUsIDEwMjQgc2hvdHMgb24gYmVsbCBzdGF0ZSB3aWxsIHJldHVybiBzb21ldGhpbmcgbGlrZTogeyBcIjAwXCI6IDUxNCwgXCIxMVwiOiA1MTAgfVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tZWFzdXJlQWxsTXVsdGlzaG90ID0gZnVuY3Rpb24oc2hvdHMpIHtcblx0c2hvdHMgPSBzaG90cyB8fCAxO1xuXG5cdHZhciBjb3VudHMgPSB7fTtcblxuXHR2YXIgcmFuZG9tV2VpZ2h0cyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgc2hvdHM7IGkrKykge1xuXHRcdHJhbmRvbVdlaWdodHMucHVzaChNYXRoLnJhbmRvbSgpKTtcblx0fVxuXG5cdHZhciBzaG90Q291bnQgPSAwO1xuXHRkbyB7XG5cdFx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0XHR2YXIgc3RhdGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaXNdLCAxNCk7XG5cdFx0XHRpZihzdGF0ZS5yZSB8fCBzdGF0ZS5pbSkge1xuXHRcdFx0XHR2YXIgY2hhbmNlID0gbWF0aC5yb3VuZChtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpLCAxNCk7XG5cblx0XHRcdFx0Zm9yKHZhciBzaCA9IDA7IHNoIDwgc2hvdHM7IHNoKyspIHtcblx0XHRcdFx0XHRpZihyYW5kb21XZWlnaHRzW3NoXSA+IDApIHtcblx0XHRcdFx0XHRcdHJhbmRvbVdlaWdodHNbc2hdIC09IGNoYW5jZTtcblxuXHRcdFx0XHRcdFx0aWYocmFuZG9tV2VpZ2h0c1tzaF0gPD0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYmluID0gcGFyc2VJbnQoaXMpLnRvU3RyaW5nKDIpO1xuXHRcdFx0XHRcdFx0XHR3aGlsZShiaW4ubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKGNvdW50c1tiaW5dKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y291bnRzW2Jpbl0rKztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb3VudHNbYmluXSA9IDE7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzaG90Q291bnQrKztcblxuXHRcdFx0XHRcdFx0XHRpZihzaG90Q291bnQgPT0gc2hvdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gY291bnRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IHdoaWxlKHNob3RDb3VudCA8IHNob3RzKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1lYXN1cmUgPSBmdW5jdGlvbih3aXJlLCBjcmVnLCBjYml0LCBmb3JjZSkge1xuXHRpZihmb3JjZSB8fCAhdGhpcy5jb2xsYXBzZWQgfHwgdGhpcy5jb2xsYXBzZWQubGVuZ3RoICE9IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0dGhpcy5tZWFzdXJlQWxsKGZvcmNlKTtcblx0fVxuXG5cdHZhciB2YWwgPSB0aGlzLmNvbGxhcHNlZFt3aXJlXTtcblxuXHRpZihjcmVnICYmIHR5cGVvZiBjYml0ICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHR0aGlzLnNldENyZWdCaXQoY3JlZywgY2JpdCwgdmFsKTtcblx0fVxuXG5cdHJldHVybiB2YWw7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJvYmFiaWxpdGllcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnByb2IgPSBbXTtcblxuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdHRoaXMucHJvYi5wdXNoKDApO1xuXHR9XG5cblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGJpdCA9IG51bGw7XG5cblx0XHRcdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0XHRcdGJpdCA9IG1hdGgucG93KDIsICh0aGlzLm51bVF1Yml0cyAtIDEpIC0gd2lyZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRiaXQgPSBtYXRoLnBvdygyLCB3aXJlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoaSAmIGJpdCkge1xuXHRcdFx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlW2lzXTtcblx0XHRcdFx0aWYoc3RhdGUucmUgfHwgc3RhdGUuaW0pIHtcblx0XHRcdFx0XHR0aGlzLnByb2Jbd2lyZV0gKz0gbWF0aC5wb3cobWF0aC5hYnMoc3RhdGUpLCAyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dGhpcy5wcm9iW3dpcmVdID0gbWF0aC5yb3VuZCh0aGlzLnByb2Jbd2lyZV0sIDE0KTtcblx0fVxuXG5cdHJldHVybiB0aGlzLnByb2I7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJvYmFiaWxpdHkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdGlmKCF0aGlzLnByb2IgfHwgdGhpcy5wcm9iLmxlbmd0aCAhPSB0aGlzLm51bVF1Yml0cykge1xuXHRcdHRoaXMucHJvYmFiaWxpdGllcygpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXMucHJvYlt3aXJlXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZW5zaXR5TWF0cml4ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBkZW5zaXR5ID0gW107XG5cdHZhciBudW1BbXBsaXR1ZGVzID0gdGhpcy5udW1BbXBsaXR1ZGVzKCk7XG5cdGZvcihyb3cgPSAwOyByb3cgPCBudW1BbXBsaXR1ZGVzOyByb3crKykge1xuXHRcdHZhciByID0gW107XG5cdFx0dmFyIHJvd1ZhbCA9IHRoaXMuc3RhdGVbcm93XSB8fCBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBudW1BbXBsaXR1ZGVzOyBjb2wrKykge1xuXHRcdFx0dmFyIGNvbFZhbCA9IHRoaXMuc3RhdGVbY29sXSB8fCBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0XHRpZihjb2xWYWwucmUgfHwgY29sVmFsLmltKSB7XG5cdFx0XHRcdGNvbFZhbCA9IG1hdGguY29uaihjb2xWYWwpO1xuXHRcdFx0fVxuXHRcdFx0ci5wdXNoKG1hdGgubXVsdGlwbHkocm93VmFsLCBjb2xWYWwpKTtcblx0XHR9XG5cdFx0ZGVuc2l0eS5wdXNoKHIpO1xuXHR9XG5cdHJldHVybiBkZW5zaXR5O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpYWxUcmFjZSA9IGZ1bmN0aW9uKHF1Yml0KSB7XG5cblx0ZnVuY3Rpb24gaW5zZXJ0Qml0KGlucHV0LCBwb3MsIGJpdCkge1xuXHRcdHZhciBvdXQgPSBpbnB1dCA8PCAxO1xuXHRcdHZhciBtID0gKDIgPDwgcG9zKSAtIDE7XG5cdFx0dmFyIHBvc0JpdCA9IDEgPDwgcG9zO1xuXHRcdHZhciBvdXQgPSAob3V0IF4gKChvdXQgXiBpbnB1dCkgJiBtKSkgfCBwb3NCaXQ7XG5cdFx0aWYoIWJpdCkge1xuXHRcdFx0b3V0ID0gb3V0IF4gcG9zQml0O1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0dmFyIHRyYWNlID0gW107XG5cblx0dmFyIHVudXNlZENvdW50ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHR2YXIgdW51c2VkTGVuID0gbWF0aC5wb3coMiwgdW51c2VkQ291bnQpO1xuXG5cdHZhciBxcG9zID0gbnVsbDtcblx0aWYodGhpcy5yZXZlcnNlQml0T3JkZXIpIHtcblx0XHRxcG9zID0gKHRoaXMubnVtUXViaXRzIC0gMSkgLSBxdWJpdDtcblx0fSBlbHNlIHtcblx0XHRxcG9zID0gcXViaXQ7XG5cdH1cblxuXHRmb3IodmFyIGVsID0gMDsgZWwgPCA0OyBlbCsrKSB7XG5cdFx0dHJhY2UucHVzaChtYXRoLmNvbXBsZXgoMCwgMCkpO1xuXHRcdHZhciBiYXNlID0gdW51c2VkTGVuO1xuXHRcdHdoaWxlKGJhc2UtLSkge1xuXHRcdFx0dmFyIHJvdyA9IGluc2VydEJpdChiYXNlLCBxcG9zLCBlbCAmIDIgPyAxIDogMCk7XG5cdFx0XHRpZih0aGlzLnN0YXRlW3Jvd10pIHtcblx0XHRcdFx0dmFyIGNvbCA9IGluc2VydEJpdChiYXNlLCBxcG9zLCBlbCAmIDEgPyAxIDogMCk7XG5cdFx0XHRcdGlmKHRoaXMuc3RhdGVbY29sXSkge1xuXHRcdFx0XHRcdHRyYWNlW2VsXSA9IG1hdGguYWRkKHRyYWNlW2VsXSwgbWF0aC5tdWx0aXBseSh0aGlzLnN0YXRlW3Jvd10sIG1hdGguY29uaih0aGlzLnN0YXRlW2NvbF0pKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIFtcblx0XHRbIHRyYWNlWzBdLCB0cmFjZVsxXSBdLFxuXHRcdFsgdHJhY2VbMl0sIHRyYWNlWzNdIF1cblx0XTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFuZ2xlcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYW5nbGVzID0gW107XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0YW5nbGVzLnB1c2goeyB0aGV0YTogMCwgcGhpOiAwIH0pO1xuXHR9XG5cblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHR2YXIgdHJhY2UgPSB0aGlzLnBhcnRpYWxUcmFjZSh3aXJlKTtcblx0XHR2YXIgYWxwaGEgPSBtYXRoLnJvdW5kKG1hdGguc3FydCh0cmFjZVswXVswXSksIDEyKTtcblx0XHR2YXIgYmV0YSA9IG1hdGgucm91bmQobWF0aC5tdWx0aXBseSh0cmFjZVsxXVswXSwgbWF0aC5zcXJ0KDIpKSwgMTIpO1xuXHRcdHZhciByYWRpdXMgPSBtYXRoLnJvdW5kKG1hdGguYWJzKG1hdGguc3FydCgyKm1hdGguYWJzKG1hdGgudHJhY2UobWF0aC5wb3codHJhY2UsIDIpKSktMSkpLCAxMik7XG5cblx0XHR2YXIgdGhldGEgPSBtYXRoLm11bHRpcGx5KDIsIG1hdGguYWNvcyhhbHBoYSkpO1xuXHRcdHZhciBwaGkgPSAwO1xuXG5cdFx0aWYoIShtYXRoLnJvdW5kKGJldGEucmUsIDgpID09IDAgJiYgbWF0aC5yb3VuZChiZXRhLmltLCA4KSA9PSAwKSkge1xuXHRcdFx0cGhpID0gbWF0aC5tdWx0aXBseShtYXRoLmNvbXBsZXgoMCwgLTEpLCBtYXRoLmxvZyhtYXRoLm11bHRpcGx5KGJldGEsIG1hdGguY3NjKG1hdGguZGl2aWRlKHRoZXRhLCAyKSkpKSkucmU7XG5cdFx0XHRpZihpc05hTihwaGkpKSB7XG5cdFx0XHRcdHBoaSA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YW5nbGVzW3dpcmVdLnRoZXRhID0gbWF0aC5yb3VuZChtYXRoLmFicyh0aGV0YSksIDEyKTtcblx0XHRhbmdsZXNbd2lyZV0ucGhpID0gbWF0aC5yb3VuZChwaGksIDEyKTtcblx0XHRhbmdsZXNbd2lyZV0udGhldGFEZWcgPSBtYXRoLnJvdW5kKG1hdGgubXVsdGlwbHkobWF0aC5hYnModGhldGEpLCAoMTgwIC8gbWF0aC5waSkpLCA3KTtcblx0XHRhbmdsZXNbd2lyZV0ucGhpRGVnID0gbWF0aC5yb3VuZChtYXRoLm11bHRpcGx5KHBoaSwgKDE4MCAvIG1hdGgucGkpKSwgNyk7XG5cdFx0YW5nbGVzW3dpcmVdLnJhZGl1cyA9IG1hdGgucm91bmQocmFkaXVzLCA3KTtcblx0fVxuXG5cdHJldHVybiBhbmdsZXM7XG59O1xuXG5cbi8vXG4vLyBPcHRpb25zOiBcbi8vICB7IFxuLy9cdFx0dXNlR2F0ZXM6IFsgXCJyeVwiLCBcInJ6XCIsIFwiY3J6XCIsIC4uLiBdLFxuLy8gIFx0bm9NZWFzdXJlOiBmYWxzZVxuLy8gICAgICBub1Jlc2V0OiBmYWxzZVxuLy8gICAgICBub0NsYXNzaWNDb250cm9sOiBmYWxzZVxuLy8gIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yYW5kb21DaXJjdWl0ID0gZnVuY3Rpb24obnVtUXViaXRzLCBudW1HYXRlcywgb3B0aW9ucykge1xuXHR0aGlzLmluaXQobnVtUXViaXRzKTtcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZ2F0ZXMgPSAob3B0aW9ucy51c2VHYXRlcyAmJiBvcHRpb25zLnVzZUdhdGVzLmxlbmd0aCkgPyBvcHRpb25zLnVzZUdhdGVzIDogT2JqZWN0LmtleXModGhpcy5iYXNpY0dhdGVzKTtcblxuXHRpZihvcHRpb25zLm5vTWVhc3VyZSAmJiBnYXRlcy5pbmRleE9mKFwibWVhc3VyZVwiKSA+PSAwKSB7XG5cdFx0Z2F0ZXMuc3BsaWNlKGdhdGVzLmluZGV4T2YoXCJtZWFzdXJlXCIpLCAxKTtcblx0fVxuXG5cdGlmKG9wdGlvbnMubm9SZXNldCAmJiBnYXRlcy5pbmRleE9mKFwicmVzZXRcIikgPj0gMCkge1xuXHRcdGdhdGVzLnNwbGljZShnYXRlcy5pbmRleE9mKFwicmVzZXRcIiksIDEpO1xuXHR9XG5cblx0dmFyIGdhdGVDb3VudCA9IDA7XG5cdHdoaWxlKGdhdGVDb3VudCA8IG51bUdhdGVzKSB7XG5cdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZ2F0ZXMubGVuZ3RoKV07XG5cdFx0dmFyIGdhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdGlmKGdhdGUpIHtcblx0XHRcdHZhciBnYXRlUXViaXRzID0gZ2F0ZS5tYXRyaXggJiYgZ2F0ZS5tYXRyaXgubGVuZ3RoID8gbWF0aC5sb2cyKGdhdGUubWF0cml4Lmxlbmd0aCkgOiAxO1xuXG5cdFx0XHRpZihnYXRlUXViaXRzIDw9IG51bVF1Yml0cykge1xuXHRcdFx0XHQvLyBnYXRlIHdpcmVzXG5cdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBbXTtcblx0XHRcdFx0d2hpbGUoZ2F0ZVdpcmVzLmxlbmd0aCA8IGdhdGVRdWJpdHMpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmUgPSAtMTtcblx0XHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0XHRnYXRlV2lyZSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG51bVF1Yml0cyk7XG5cdFx0XHRcdFx0fSB3aGlsZShnYXRlV2lyZXMuaW5kZXhPZihnYXRlV2lyZSkgPj0gMCk7XG5cdFx0XHRcdFx0Z2F0ZVdpcmVzLnB1c2goZ2F0ZVdpcmUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIG9wdCA9IHt9O1xuXG5cdFx0XHRcdC8vIGdhdGUgcGFyYW1zXG5cdFx0XHRcdGlmKGdhdGUucGFyYW1zICYmIGdhdGUucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBwYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRnYXRlLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IE1hdGguUEkgKiAyICogTWF0aC5yYW5kb20oKTtcblxuXHRcdFx0XHRcdFx0Ly8gLVBJLi5QSVxuXHRcdFx0XHRcdFx0aWYocGFyYW1zW3BhcmFtTmFtZV0gPiBNYXRoLlBJKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gTWF0aC5QSSAtIHBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9wdC5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdC8vIG1lYXN1cmVtZW50IGRlc3RpbmF0aW9uXG5cdFx0XHRcdFx0b3B0LmNyZWcgPSB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImNcIixcblx0XHRcdFx0XHRcdGJpdDogZ2F0ZVdpcmVzWzBdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZighb3B0aW9ucy5ub0NsYXNzaWNDb250cm9sKSB7XG5cdFx0XHRcdFx0XHQvLyBtYXliZSBhZGQgY29uZGl0aW9uXG5cdFx0XHRcdFx0XHRpZihNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnQml0cyA9IHRoaXMuY3JlZ1RvdGFsQml0cygpO1xuXHRcdFx0XHRcdFx0XHRpZihjcmVnQml0cykge1xuXHRcdFx0XHRcdFx0XHRcdG9wdC5jb25kaXRpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjcmVnOiBcImNcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF0aC5wb3coMiwgY3JlZ0JpdHMpKSlcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hcHBlbmRHYXRlKGdhdGVOYW1lLCBnYXRlV2lyZXMsIG9wdCk7XG5cdFx0XHRcdGdhdGVDb3VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJhbmRvbVVuaXRhcnkgPSBmdW5jdGlvbihudW1RdWJpdHMpIHtcblx0dmFyIGNpcmMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyYy5yYW5kb21DaXJjdWl0KChudW1RdWJpdHMgfHwgMSksIChudW1RdWJpdHMgfHwgMSkgKiA4LCB7XG5cdFx0dXNlR2F0ZXM6IFsgXCJyeFwiLCBcInJ6XCIsIFwiY3pcIiBdLFxuXHRcdG5vTWVhc3VyZTogdHJ1ZSxcblx0XHRub1Jlc2V0OiB0cnVlLFxuXHRcdG5vQ2xhc3NpY0NvbnRyb2w6IHRydWVcblx0fSk7XG5cdHJldHVybiBjaXJjLmNpcmN1aXRNYXRyaXgoKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ldWxlckFuZ2xlc1pZWiA9IGZ1bmN0aW9uKGlucHV0TWF0cml4KSB7XG5cdHZhciBldWxlckFuZ2xlcyA9IHt0aGV0YTogbnVsbCwgcGhpOiBudWxsLCBsYW1iZGE6IG51bGwsIHBoYXNlOiBudWxsfTtcblx0dmFyIGNvZWZmID0gbWF0aC5wb3cobWF0aC5kZXQoaW5wdXRNYXRyaXgpLCAtMC41KTtcblx0ZXVsZXJBbmdsZXMucGhhc2UgPSAtMSAqIG1hdGguY29tcGxleChjb2VmZikudG9Qb2xhcigpLnBoaTtcblx0dmFyIHN1X21hdCA9IG1hdGgubXVsdGlwbHkoY29lZmYsIGlucHV0TWF0cml4KTtcblx0ZXVsZXJBbmdsZXMudGhldGEgPSAyICogbWF0aC5hdGFuMihtYXRoLmFicyhzdV9tYXRbMV1bMF0pLCBtYXRoLmFicyhzdV9tYXRbMF1bMF0pKTtcblx0dmFyIHBoaXBsYW1iZGEgPSAyICogbWF0aC5jb21wbGV4KHN1X21hdFsxXVsxXSkudG9Qb2xhcigpLnBoaTtcblx0dmFyIHBoaW1sYW1kYSA9IDIgKiBtYXRoLmNvbXBsZXgoc3VfbWF0WzFdWzBdKS50b1BvbGFyKCkucGhpO1xuXHRldWxlckFuZ2xlcy5waGkgPSAocGhpcGxhbWJkYSArIHBoaW1sYW1kYSkgLyAyLjA7XG5cdGV1bGVyQW5nbGVzLmxhbWJkYSA9IChwaGlwbGFtYmRhIC0gcGhpbWxhbWRhKSAvIDIuMDtcblx0cmV0dXJuIGV1bGVyQW5nbGVzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFudHVtQ2lyY3VpdDtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vIFRoaXMgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFRva2VuU3RyZWFtfSBsb2FkcyB0b2tlbnMgZnJvbSBhXG4vLyB7QGxpbmsgVG9rZW5Tb3VyY2V9IG9uLWRlbWFuZCwgYW5kIHBsYWNlcyB0aGUgdG9rZW5zIGluIGEgYnVmZmVyIHRvIHByb3ZpZGVcbi8vIGFjY2VzcyB0byBhbnkgcHJldmlvdXMgdG9rZW4gYnkgaW5kZXguXG4vL1xuLy8gPHA+XG4vLyBUaGlzIHRva2VuIHN0cmVhbSBpZ25vcmVzIHRoZSB2YWx1ZSBvZiB7QGxpbmsgVG9rZW4vL2dldENoYW5uZWx9LiBJZiB5b3VyXG4vLyBwYXJzZXIgcmVxdWlyZXMgdGhlIHRva2VuIHN0cmVhbSBmaWx0ZXIgdG9rZW5zIHRvIG9ubHkgdGhvc2Ugb24gYSBwYXJ0aWN1bGFyXG4vLyBjaGFubmVsLCBzdWNoIGFzIHtAbGluayBUb2tlbi8vREVGQVVMVF9DSEFOTkVMfSBvclxuLy8ge0BsaW5rIFRva2VuLy9ISURERU5fQ0hBTk5FTH0sIHVzZSBhIGZpbHRlcmluZyB0b2tlbiBzdHJlYW0gc3VjaCBhXG4vLyB7QGxpbmsgQ29tbW9uVG9rZW5TdHJlYW19LjwvcD5cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xudmFyIExleGVyID0gcmVxdWlyZSgnLi9MZXhlcicpLkxleGVyO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xuXG4vLyB0aGlzIGlzIGp1c3QgdG8ga2VlcCBtZWFuaW5nZnVsIHBhcmFtZXRlciB0eXBlcyB0byBQYXJzZXJcbmZ1bmN0aW9uIFRva2VuU3RyZWFtKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gQnVmZmVyZWRUb2tlblN0cmVhbSh0b2tlblNvdXJjZSkge1xuXG5cdFRva2VuU3RyZWFtLmNhbGwodGhpcyk7XG5cdC8vIFRoZSB7QGxpbmsgVG9rZW5Tb3VyY2V9IGZyb20gd2hpY2ggdG9rZW5zIGZvciB0aGlzIHN0cmVhbSBhcmUgZmV0Y2hlZC5cblx0dGhpcy50b2tlblNvdXJjZSA9IHRva2VuU291cmNlO1xuXG5cdC8vIEEgY29sbGVjdGlvbiBvZiBhbGwgdG9rZW5zIGZldGNoZWQgZnJvbSB0aGUgdG9rZW4gc291cmNlLiBUaGUgbGlzdCBpc1xuXHQvLyBjb25zaWRlcmVkIGEgY29tcGxldGUgdmlldyBvZiB0aGUgaW5wdXQgb25jZSB7QGxpbmsgLy9mZXRjaGVkRU9GfSBpcyBzZXRcblx0Ly8gdG8ge0Bjb2RlIHRydWV9LlxuXHR0aGlzLnRva2VucyA9IFtdO1xuXG5cdC8vIFRoZSBpbmRleCBpbnRvIHtAbGluayAvL3Rva2Vuc30gb2YgdGhlIGN1cnJlbnQgdG9rZW4gKG5leHQgdG9rZW4gdG9cblx0Ly8ge0BsaW5rIC8vY29uc3VtZX0pLiB7QGxpbmsgLy90b2tlbnN9e0Bjb2RlIFt9e0BsaW5rIC8vcH17QGNvZGUgXX0gc2hvdWxkXG5cdC8vIGJlXG5cdC8vIHtAbGluayAvL0xUIExUKDEpfS5cblx0Ly9cblx0Ly8gPHA+VGhpcyBmaWVsZCBpcyBzZXQgdG8gLTEgd2hlbiB0aGUgc3RyZWFtIGlzIGZpcnN0IGNvbnN0cnVjdGVkIG9yIHdoZW5cblx0Ly8ge0BsaW5rIC8vc2V0VG9rZW5Tb3VyY2V9IGlzIGNhbGxlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSBmaXJzdCB0b2tlbiBoYXNcblx0Ly8gbm90IHlldCBiZWVuIGZldGNoZWQgZnJvbSB0aGUgdG9rZW4gc291cmNlLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbixcblx0Ly8gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHtAbGluayBJbnRTdHJlYW19IGZvciBhIGRlc2NyaXB0aW9uIG9mXG5cdC8vIEluaXRpYWxpemluZyBNZXRob2RzLjwvcD5cblx0dGhpcy5pbmRleCA9IC0xO1xuXG5cdC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSB7QGxpbmsgVG9rZW4vL0VPRn0gdG9rZW4gaGFzIGJlZW4gZmV0Y2hlZCBmcm9tXG5cdC8vIHtAbGluayAvL3Rva2VuU291cmNlfSBhbmQgYWRkZWQgdG8ge0BsaW5rIC8vdG9rZW5zfS4gVGhpcyBmaWVsZCBpbXByb3Zlc1xuXHQvLyBwZXJmb3JtYW5jZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly9cblx0Ly8gPHVsPlxuXHQvLyA8bGk+e0BsaW5rIC8vY29uc3VtZX06IFRoZSBsb29rYWhlYWQgY2hlY2sgaW4ge0BsaW5rIC8vY29uc3VtZX0gdG9cblx0Ly8gcHJldmVudFxuXHQvLyBjb25zdW1pbmcgdGhlIEVPRiBzeW1ib2wgaXMgb3B0aW1pemVkIGJ5IGNoZWNraW5nIHRoZSB2YWx1ZXMgb2Zcblx0Ly8ge0BsaW5rIC8vZmV0Y2hlZEVPRn0gYW5kIHtAbGluayAvL3B9IGluc3RlYWQgb2YgY2FsbGluZyB7QGxpbmtcblx0Ly8gLy9MQX0uPC9saT5cblx0Ly8gPGxpPntAbGluayAvL2ZldGNofTogVGhlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIG11bHRpcGxlIEVPRiBzeW1ib2xzXG5cdC8vIGludG9cblx0Ly8ge0BsaW5rIC8vdG9rZW5zfSBpcyB0cml2aWFsIHdpdGggdGhpcyBmaWVsZC48L2xpPlxuXHQvLyA8dWw+XG5cdHRoaXMuZmV0Y2hlZEVPRiA9IGZhbHNlO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuU3RyZWFtLnByb3RvdHlwZSk7XG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJ1ZmZlcmVkVG9rZW5TdHJlYW07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLm1hcmsgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDA7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24obWFya2VyKSB7XG5cdC8vIG5vIHJlc291cmNlcyB0byByZWxlYXNlXG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnNlZWsoMCk7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHR0aGlzLmluZGV4ID0gdGhpcy5hZGp1c3RTZWVrSW5kZXgoaW5kZXgpO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHRyZXR1cm4gdGhpcy50b2tlbnNbaW5kZXhdO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2tpcEVvZkNoZWNrID0gZmFsc2U7XG5cdGlmICh0aGlzLmluZGV4ID49IDApIHtcblx0XHRpZiAodGhpcy5mZXRjaGVkRU9GKSB7XG5cdFx0XHQvLyB0aGUgbGFzdCB0b2tlbiBpbiB0b2tlbnMgaXMgRU9GLiBza2lwIGNoZWNrIGlmIHAgaW5kZXhlcyBhbnlcblx0XHRcdC8vIGZldGNoZWQgdG9rZW4gZXhjZXB0IHRoZSBsYXN0LlxuXHRcdFx0c2tpcEVvZkNoZWNrID0gdGhpcy5pbmRleCA8IHRoaXMudG9rZW5zLmxlbmd0aCAtIDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vIEVPRiB0b2tlbiBpbiB0b2tlbnMuIHNraXAgY2hlY2sgaWYgcCBpbmRleGVzIGEgZmV0Y2hlZCB0b2tlbi5cblx0XHRcdHNraXBFb2ZDaGVjayA9IHRoaXMuaW5kZXggPCB0aGlzLnRva2Vucy5sZW5ndGg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIG5vdCB5ZXQgaW5pdGlhbGl6ZWRcblx0XHRza2lwRW9mQ2hlY2sgPSBmYWxzZTtcblx0fVxuXHRpZiAoIXNraXBFb2ZDaGVjayAmJiB0aGlzLkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHR0aHJvdyBcImNhbm5vdCBjb25zdW1lIEVPRlwiO1xuXHR9XG5cdGlmICh0aGlzLnN5bmModGhpcy5pbmRleCArIDEpKSB7XG5cdFx0dGhpcy5pbmRleCA9IHRoaXMuYWRqdXN0U2Vla0luZGV4KHRoaXMuaW5kZXggKyAxKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIGluZGV4IHtAY29kZSBpfSBpbiB0b2tlbnMgaGFzIGEgdG9rZW4uXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYSB0b2tlbiBpcyBsb2NhdGVkIGF0IGluZGV4IHtAY29kZSBpfSwgb3RoZXJ3aXNlXG4vLyB7QGNvZGUgZmFsc2V9LlxuLy8gQHNlZSAvL2dldChpbnQgaSlcbi8vIC9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihpKSB7XG5cdHZhciBuID0gaSAtIHRoaXMudG9rZW5zLmxlbmd0aCArIDE7IC8vIGhvdyBtYW55IG1vcmUgZWxlbWVudHMgd2UgbmVlZD9cblx0aWYgKG4gPiAwKSB7XG5cdFx0dmFyIGZldGNoZWQgPSB0aGlzLmZldGNoKG4pO1xuXHRcdHJldHVybiBmZXRjaGVkID49IG47XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG4vLyBBZGQge0Bjb2RlIG59IGVsZW1lbnRzIHRvIGJ1ZmZlci5cbi8vXG4vLyBAcmV0dXJuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBidWZmZXIuXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5mZXRjaCA9IGZ1bmN0aW9uKG4pIHtcblx0aWYgKHRoaXMuZmV0Y2hlZEVPRikge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0dmFyIHQgPSB0aGlzLnRva2VuU291cmNlLm5leHRUb2tlbigpO1xuXHRcdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblx0XHR0aGlzLnRva2Vucy5wdXNoKHQpO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0dGhpcy5mZXRjaGVkRU9GID0gdHJ1ZTtcblx0XHRcdHJldHVybiBpICsgMTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG47XG59O1xuXG4vLyBHZXQgYWxsIHRva2VucyBmcm9tIHN0YXJ0Li5zdG9wIGluY2x1c2l2ZWx5Ly8vXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXRUb2tlbnMgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgdHlwZXMpIHtcblx0aWYgKHR5cGVzID09PSB1bmRlZmluZWQpIHtcblx0XHR0eXBlcyA9IG51bGw7XG5cdH1cblx0aWYgKHN0YXJ0IDwgMCB8fCBzdG9wIDwgMCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0dmFyIHN1YnNldCA9IFtdO1xuXHRpZiAoc3RvcCA+PSB0aGlzLnRva2Vucy5sZW5ndGgpIHtcblx0XHRzdG9wID0gdGhpcy50b2tlbnMubGVuZ3RoIC0gMTtcblx0fVxuXHRmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBzdG9wOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmICh0eXBlcyA9PT0gbnVsbCB8fCB0eXBlcy5jb250YWlucyh0LnR5cGUpKSB7XG5cdFx0XHRzdWJzZXQucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHN1YnNldDtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLkxBID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gdGhpcy5MVChpKS50eXBlO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuTEIgPSBmdW5jdGlvbihrKSB7XG5cdGlmICh0aGlzLmluZGV4IC0gayA8IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleCAtIGtdO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuTFQgPSBmdW5jdGlvbihrKSB7XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKGsgPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAoayA8IDApIHtcblx0XHRyZXR1cm4gdGhpcy5MQigtayk7XG5cdH1cblx0dmFyIGkgPSB0aGlzLmluZGV4ICsgayAtIDE7XG5cdHRoaXMuc3luYyhpKTtcblx0aWYgKGkgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7IC8vIHJldHVybiBFT0YgdG9rZW5cblx0XHQvLyBFT0YgbXVzdCBiZSBsYXN0IHRva2VuXG5cdFx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdO1xuXHR9XG5cdHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbi8vIEFsbG93ZWQgZGVyaXZlZCBjbGFzc2VzIHRvIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2Ygb3BlcmF0aW9ucyB3aGljaCBjaGFuZ2Vcbi8vIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbiBieSBhZGp1c3RpbmcgdGhlIHRhcmdldCB0b2tlbiBpbmRleCBvZiBhIHNlZWtcbi8vIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMge0Bjb2RlIGl9LiBJZiBhblxuLy8gZXhjZXB0aW9uIGlzIHRocm93biBpbiB0aGlzIG1ldGhvZCwgdGhlIGN1cnJlbnQgc3RyZWFtIGluZGV4IHNob3VsZCBub3QgYmVcbi8vIGNoYW5nZWQuXG4vL1xuLy8gPHA+Rm9yIGV4YW1wbGUsIHtAbGluayBDb21tb25Ub2tlblN0cmVhbX0gb3ZlcnJpZGVzIHRoaXMgbWV0aG9kIHRvIGVuc3VyZVxuLy8gdGhhdFxuLy8gdGhlIHNlZWsgdGFyZ2V0IGlzIGFsd2F5cyBhbiBvbi1jaGFubmVsIHRva2VuLjwvcD5cbi8vXG4vLyBAcGFyYW0gaSBUaGUgdGFyZ2V0IHRva2VuIGluZGV4LlxuLy8gQHJldHVybiBUaGUgYWRqdXN0ZWQgdGFyZ2V0IHRva2VuIGluZGV4LlxuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGp1c3RTZWVrSW5kZXggPSBmdW5jdGlvbihpKSB7XG5cdHJldHVybiBpO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUubGF6eUluaXQgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuaW5kZXggPT09IC0xKSB7XG5cdFx0dGhpcy5zZXR1cCgpO1xuXHR9XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnN5bmMoMCk7XG5cdHRoaXMuaW5kZXggPSB0aGlzLmFkanVzdFNlZWtJbmRleCgwKTtcbn07XG5cbi8vIFJlc2V0IHRoaXMgdG9rZW4gc3RyZWFtIGJ5IHNldHRpbmcgaXRzIHRva2VuIHNvdXJjZS4vLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnNldFRva2VuU291cmNlID0gZnVuY3Rpb24odG9rZW5Tb3VyY2UpIHtcblx0dGhpcy50b2tlblNvdXJjZSA9IHRva2VuU291cmNlO1xuXHR0aGlzLnRva2VucyA9IFtdO1xuXHR0aGlzLmluZGV4ID0gLTE7XG5cdHRoaXMuZmV0Y2hlZEVPRiA9IGZhbHNlO1xufTtcblxuXG4vLyBHaXZlbiBhIHN0YXJ0aW5nIGluZGV4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBuZXh0IHRva2VuIG9uIGNoYW5uZWwuXG4vLyBSZXR1cm4gaSBpZiB0b2tlbnNbaV0gaXMgb24gY2hhbm5lbC4gUmV0dXJuIC0xIGlmIHRoZXJlIGFyZSBubyB0b2tlbnNcbi8vIG9uIGNoYW5uZWwgYmV0d2VlbiBpIGFuZCBFT0YuXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5uZXh0VG9rZW5PbkNoYW5uZWwgPSBmdW5jdGlvbihpLCBjaGFubmVsKSB7XG5cdHRoaXMuc3luYyhpKTtcblx0aWYgKGkgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIC0xO1xuXHR9XG5cdHZhciB0b2tlbiA9IHRoaXMudG9rZW5zW2ldO1xuXHR3aGlsZSAodG9rZW4uY2hhbm5lbCAhPT0gdGhpcy5jaGFubmVsKSB7XG5cdFx0aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpICs9IDE7XG5cdFx0dGhpcy5zeW5jKGkpO1xuXHRcdHRva2VuID0gdGhpcy50b2tlbnNbaV07XG5cdH1cblx0cmV0dXJuIGk7XG59O1xuXG4vLyBHaXZlbiBhIHN0YXJ0aW5nIGluZGV4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBwcmV2aW91cyB0b2tlbiBvbiBjaGFubmVsLlxuLy8gUmV0dXJuIGkgaWYgdG9rZW5zW2ldIGlzIG9uIGNoYW5uZWwuIFJldHVybiAtMSBpZiB0aGVyZSBhcmUgbm8gdG9rZW5zXG4vLyBvbiBjaGFubmVsIGJldHdlZW4gaSBhbmQgMC5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnByZXZpb3VzVG9rZW5PbkNoYW5uZWwgPSBmdW5jdGlvbihpLCBjaGFubmVsKSB7XG5cdHdoaWxlIChpID49IDAgJiYgdGhpcy50b2tlbnNbaV0uY2hhbm5lbCAhPT0gY2hhbm5lbCkge1xuXHRcdGkgLT0gMTtcblx0fVxuXHRyZXR1cm4gaTtcbn07XG5cbi8vIENvbGxlY3QgYWxsIHRva2VucyBvbiBzcGVjaWZpZWQgY2hhbm5lbCB0byB0aGUgcmlnaHQgb2Zcbi8vIHRoZSBjdXJyZW50IHRva2VuIHVwIHVudGlsIHdlIHNlZSBhIHRva2VuIG9uIERFRkFVTFRfVE9LRU5fQ0hBTk5FTCBvclxuLy8gRU9GLiBJZiBjaGFubmVsIGlzIC0xLCBmaW5kIGFueSBub24gZGVmYXVsdCBjaGFubmVsIHRva2VuLlxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0SGlkZGVuVG9rZW5zVG9SaWdodCA9IGZ1bmN0aW9uKHRva2VuSW5kZXgsXG5cdFx0Y2hhbm5lbCkge1xuXHRpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hhbm5lbCA9IC0xO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKHRva2VuSW5kZXggPCAwIHx8IHRva2VuSW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJcIiArIHRva2VuSW5kZXggKyBcIiBub3QgaW4gMC4uXCIgKyB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBuZXh0T25DaGFubmVsID0gdGhpcy5uZXh0VG9rZW5PbkNoYW5uZWwodG9rZW5JbmRleCArIDEsIExleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCk7XG5cdHZhciBmcm9tXyA9IHRva2VuSW5kZXggKyAxO1xuXHQvLyBpZiBub25lIG9uY2hhbm5lbCB0byByaWdodCwgbmV4dE9uQ2hhbm5lbD0tMSBzbyBzZXQgdG8gPSBsYXN0IHRva2VuXG5cdHZhciB0byA9IG5leHRPbkNoYW5uZWwgPT09IC0xID8gdGhpcy50b2tlbnMubGVuZ3RoIC0gMSA6IG5leHRPbkNoYW5uZWw7XG5cdHJldHVybiB0aGlzLmZpbHRlckZvckNoYW5uZWwoZnJvbV8sIHRvLCBjaGFubmVsKTtcbn07XG5cbi8vIENvbGxlY3QgYWxsIHRva2VucyBvbiBzcGVjaWZpZWQgY2hhbm5lbCB0byB0aGUgbGVmdCBvZlxuLy8gdGhlIGN1cnJlbnQgdG9rZW4gdXAgdW50aWwgd2Ugc2VlIGEgdG9rZW4gb24gREVGQVVMVF9UT0tFTl9DSEFOTkVMLlxuLy8gSWYgY2hhbm5lbCBpcyAtMSwgZmluZCBhbnkgbm9uIGRlZmF1bHQgY2hhbm5lbCB0b2tlbi5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldEhpZGRlblRva2Vuc1RvTGVmdCA9IGZ1bmN0aW9uKHRva2VuSW5kZXgsXG5cdFx0Y2hhbm5lbCkge1xuXHRpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hhbm5lbCA9IC0xO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKHRva2VuSW5kZXggPCAwIHx8IHRva2VuSW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJcIiArIHRva2VuSW5kZXggKyBcIiBub3QgaW4gMC4uXCIgKyB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBwcmV2T25DaGFubmVsID0gdGhpcy5wcmV2aW91c1Rva2VuT25DaGFubmVsKHRva2VuSW5kZXggLSAxLCBMZXhlci5ERUZBVUxUX1RPS0VOX0NIQU5ORUwpO1xuXHRpZiAocHJldk9uQ2hhbm5lbCA9PT0gdG9rZW5JbmRleCAtIDEpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHQvLyBpZiBub25lIG9uIGNoYW5uZWwgdG8gbGVmdCwgcHJldk9uQ2hhbm5lbD0tMSB0aGVuIGZyb209MFxuXHR2YXIgZnJvbV8gPSBwcmV2T25DaGFubmVsICsgMTtcblx0dmFyIHRvID0gdG9rZW5JbmRleCAtIDE7XG5cdHJldHVybiB0aGlzLmZpbHRlckZvckNoYW5uZWwoZnJvbV8sIHRvLCBjaGFubmVsKTtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmZpbHRlckZvckNoYW5uZWwgPSBmdW5jdGlvbihsZWZ0LCByaWdodCwgY2hhbm5lbCkge1xuXHR2YXIgaGlkZGVuID0gW107XG5cdGZvciAodmFyIGkgPSBsZWZ0OyBpIDwgcmlnaHQgKyAxOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmIChjaGFubmVsID09PSAtMSkge1xuXHRcdFx0aWYgKHQuY2hhbm5lbCAhPT0gTGV4ZXIuREVGQVVMVF9UT0tFTl9DSEFOTkVMKSB7XG5cdFx0XHRcdGhpZGRlbi5wdXNoKHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodC5jaGFubmVsID09PSBjaGFubmVsKSB7XG5cdFx0XHRoaWRkZW4ucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0aWYgKGhpZGRlbi5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gaGlkZGVuO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0U291cmNlTmFtZSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy50b2tlblNvdXJjZS5nZXRTb3VyY2VOYW1lKCk7XG59O1xuXG4vLyBHZXQgdGhlIHRleHQgb2YgYWxsIHRva2VucyBpbiB0aGlzIGJ1ZmZlci4vLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdHRoaXMuZmlsbCgpO1xuXHRpZiAoaW50ZXJ2YWwgPT09IHVuZGVmaW5lZCB8fCBpbnRlcnZhbCA9PT0gbnVsbCkge1xuXHRcdGludGVydmFsID0gbmV3IEludGVydmFsKDAsIHRoaXMudG9rZW5zLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHZhciBzdGFydCA9IGludGVydmFsLnN0YXJ0O1xuXHRpZiAoc3RhcnQgaW5zdGFuY2VvZiBUb2tlbikge1xuXHRcdHN0YXJ0ID0gc3RhcnQudG9rZW5JbmRleDtcblx0fVxuXHR2YXIgc3RvcCA9IGludGVydmFsLnN0b3A7XG5cdGlmIChzdG9wIGluc3RhbmNlb2YgVG9rZW4pIHtcblx0XHRzdG9wID0gc3RvcC50b2tlbkluZGV4O1xuXHR9XG5cdGlmIChzdGFydCA9PT0gbnVsbCB8fCBzdG9wID09PSBudWxsIHx8IHN0YXJ0IDwgMCB8fCBzdG9wIDwgMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGlmIChzdG9wID49IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuXHRcdHN0b3AgPSB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBzID0gXCJcIjtcblx0Zm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgc3RvcCArIDE7IGkrKykge1xuXHRcdHZhciB0ID0gdGhpcy50b2tlbnNbaV07XG5cdFx0aWYgKHQudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cyA9IHMgKyB0LnRleHQ7XG5cdH1cblx0cmV0dXJuIHM7XG59O1xuXG4vLyBHZXQgYWxsIHRva2VucyBmcm9tIGxleGVyIHVudGlsIEVPRi8vL1xuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdHdoaWxlICh0aGlzLmZldGNoKDEwMDApID09PSAxMDAwKSB7XG5cdFx0Y29udGludWU7XG5cdH1cbn07XG5cbmV4cG9ydHMuQnVmZmVyZWRUb2tlblN0cmVhbSA9IEJ1ZmZlcmVkVG9rZW5TdHJlYW07XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxudmFyIElucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xuXG52YXIgaXNOb2RlSnMgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PT0gJ3VuZGVmaW5lZCc7XG52YXIgZnMgPSBpc05vZGVKcyA/IHJlcXVpcmUoXCJmc1wiKSA6IG51bGw7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zIHRvIGNyZWF0ZSBJbnB1dFN0cmVhbXMgZnJvbSB2YXJpb3VzIHNvdXJjZXMuXG4vL1xuLy8gQWxsIHJldHVybmVkIElucHV0U3RyZWFtcyBzdXBwb3J0IHRoZSBmdWxsIHJhbmdlIG9mIFVuaWNvZGVcbi8vIHVwIHRvIFUrMTBGRkZGICh0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBJbnB1dFN0cmVhbSBvbmx5IHN1cHBvcnRzXG4vLyBjb2RlIHBvaW50cyB1cCB0byBVK0ZGRkYpLlxudmFyIENoYXJTdHJlYW1zID0ge1xuICAvLyBDcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBzdHJpbmcuXG4gIGZyb21TdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgSW5wdXRTdHJlYW0oc3RyLCB0cnVlKTtcbiAgfSxcblxuICAvLyBBc3luY2hyb25vdXNseSBjcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBibG9iIGdpdmVuIHRoZVxuICAvLyBlbmNvZGluZyBvZiB0aGUgYnl0ZXMgaW4gdGhhdCBibG9iIChkZWZhdWx0cyB0byAndXRmOCcgaWZcbiAgLy8gZW5jb2RpbmcgaXMgbnVsbCkuXG4gIC8vXG4gIC8vIEludm9rZXMgb25Mb2FkKHJlc3VsdCkgb24gc3VjY2Vzcywgb25FcnJvcihlcnJvcikgb25cbiAgLy8gZmFpbHVyZS5cbiAgZnJvbUJsb2I6IGZ1bmN0aW9uKGJsb2IsIGVuY29kaW5nLCBvbkxvYWQsIG9uRXJyb3IpIHtcbiAgICB2YXIgcmVhZGVyID0gRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgaXMgPSBuZXcgSW5wdXRTdHJlYW0oZS50YXJnZXQucmVzdWx0LCB0cnVlKTtcbiAgICAgIG9uTG9hZChpcyk7XG4gICAgfTtcbiAgICByZWFkZXIub25lcnJvciA9IG9uRXJyb3I7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpO1xuICB9LFxuXG4gIC8vIENyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZnJvbSBhIEJ1ZmZlciBnaXZlbiB0aGVcbiAgLy8gZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgYnVmZmVyIChkZWZhdWx0cyB0byAndXRmOCcgaWZcbiAgLy8gZW5jb2RpbmcgaXMgbnVsbCkuXG4gIGZyb21CdWZmZXI6IGZ1bmN0aW9uKGJ1ZmZlciwgZW5jb2RpbmcpIHtcbiAgICByZXR1cm4gbmV3IElucHV0U3RyZWFtKGJ1ZmZlci50b1N0cmluZyhlbmNvZGluZyksIHRydWUpO1xuICB9LFxuXG4gIC8vIEFzeW5jaHJvbm91c2x5IGNyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZnJvbSBhIGZpbGUgb24gZGlzayBnaXZlblxuICAvLyB0aGUgZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgZmlsZSAoZGVmYXVsdHMgdG8gJ3V0ZjgnIGlmXG4gIC8vIGVuY29kaW5nIGlzIG51bGwpLlxuICAvL1xuICAvLyBJbnZva2VzIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpIG9uIGNvbXBsZXRpb24uXG4gIGZyb21QYXRoOiBmdW5jdGlvbihwYXRoLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBmcy5yZWFkRmlsZShwYXRoLCBlbmNvZGluZywgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICB2YXIgaXMgPSBudWxsO1xuICAgICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgICAgaXMgPSBuZXcgSW5wdXRTdHJlYW0oZGF0YSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhlcnIsIGlzKTtcbiAgICB9KTtcbiAgfSxcblxuICAvLyBTeW5jaHJvbm91c2x5IGNyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZ2l2ZW4gYSBwYXRoIHRvIGEgZmlsZVxuICAvLyBvbiBkaXNrIGFuZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgZmlsZSAoZGVmYXVsdHMgdG9cbiAgLy8gJ3V0ZjgnIGlmIGVuY29kaW5nIGlzIG51bGwpLlxuICBmcm9tUGF0aFN5bmM6IGZ1bmN0aW9uKHBhdGgsIGVuY29kaW5nKSB7XG4gICAgdmFyIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgZW5jb2RpbmcpO1xuICAgIHJldHVybiBuZXcgSW5wdXRTdHJlYW0oZGF0YSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydHMuQ2hhclN0cmVhbXMgPSBDaGFyU3RyZWFtcztcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vL1xuLy8gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBUb2tlbkZhY3Rvcnl9IGNyZWF0ZXNcbi8vIHtAbGluayBDb21tb25Ub2tlbn0gb2JqZWN0cy5cbi8vXG5cbnZhciBDb21tb25Ub2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Db21tb25Ub2tlbjtcblxuZnVuY3Rpb24gVG9rZW5GYWN0b3J5KCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gQ29tbW9uVG9rZW5GYWN0b3J5KGNvcHlUZXh0KSB7XG5cdFRva2VuRmFjdG9yeS5jYWxsKHRoaXMpO1xuICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHtAbGluayBDb21tb25Ub2tlbi8vc2V0VGV4dH0gc2hvdWxkIGJlIGNhbGxlZCBhZnRlclxuICAgIC8vIGNvbnN0cnVjdGluZyB0b2tlbnMgdG8gZXhwbGljaXRseSBzZXQgdGhlIHRleHQuIFRoaXMgaXMgdXNlZnVsIGZvciBjYXNlc1xuICAgIC8vIHdoZXJlIHRoZSBpbnB1dCBzdHJlYW0gbWlnaHQgbm90IGJlIGFibGUgdG8gcHJvdmlkZSBhcmJpdHJhcnkgc3Vic3RyaW5nc1xuICAgIC8vIG9mIHRleHQgZnJvbSB0aGUgaW5wdXQgYWZ0ZXIgdGhlIGxleGVyIGNyZWF0ZXMgYSB0b2tlbiAoZS5nLiB0aGVcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQ2hhclN0cmVhbS8vZ2V0VGV4dH0gaW5cbiAgICAvLyB7QGxpbmsgVW5idWZmZXJlZENoYXJTdHJlYW19IHRocm93cyBhblxuICAgIC8vIHtAbGluayBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbn0pLiBFeHBsaWNpdGx5IHNldHRpbmcgdGhlIHRva2VuIHRleHRcbiAgICAvLyBhbGxvd3Mge0BsaW5rIFRva2VuLy9nZXRUZXh0fSB0byBiZSBjYWxsZWQgYXQgYW55IHRpbWUgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAvLyBpbnB1dCBzdHJlYW0gaW1wbGVtZW50YXRpb24uXG4gICAgLy9cbiAgICAvLyA8cD5cbiAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB7QGNvZGUgZmFsc2V9IHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5XG4gICAgLy8gb3ZlcmhlYWQgb2YgY29weWluZyB0ZXh0IGZvciBldmVyeSB0b2tlbiB1bmxlc3MgZXhwbGljaXRseSByZXF1ZXN0ZWQuPC9wPlxuICAgIC8vXG4gICAgdGhpcy5jb3B5VGV4dCA9IGNvcHlUZXh0PT09dW5kZWZpbmVkID8gZmFsc2UgOiBjb3B5VGV4dDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuRmFjdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuRmFjdG9yeS5wcm90b3R5cGUpO1xuQ29tbW9uVG9rZW5GYWN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuRmFjdG9yeTtcblxuLy9cbi8vIFRoZSBkZWZhdWx0IHtAbGluayBDb21tb25Ub2tlbkZhY3Rvcnl9IGluc3RhbmNlLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyB0b2tlbiBmYWN0b3J5IGRvZXMgbm90IGV4cGxpY2l0bHkgY29weSB0b2tlbiB0ZXh0IHdoZW4gY29uc3RydWN0aW5nXG4vLyB0b2tlbnMuPC9wPlxuLy9cbkNvbW1vblRva2VuRmFjdG9yeS5ERUZBVUxUID0gbmV3IENvbW1vblRva2VuRmFjdG9yeSgpO1xuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgdHlwZSwgdGV4dCwgY2hhbm5lbCwgc3RhcnQsIHN0b3AsIGxpbmUsIGNvbHVtbikge1xuICAgIHZhciB0ID0gbmV3IENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApO1xuICAgIHQubGluZSA9IGxpbmU7XG4gICAgdC5jb2x1bW4gPSBjb2x1bW47XG4gICAgaWYgKHRleHQgIT09bnVsbCkge1xuICAgICAgICB0LnRleHQgPSB0ZXh0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb3B5VGV4dCAmJiBzb3VyY2VbMV0gIT09bnVsbCkge1xuICAgICAgICB0LnRleHQgPSBzb3VyY2VbMV0uZ2V0VGV4dChzdGFydCxzdG9wKTtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZVRoaW4gPSBmdW5jdGlvbih0eXBlLCB0ZXh0KSB7XG4gICAgdmFyIHQgPSBuZXcgQ29tbW9uVG9rZW4obnVsbCwgdHlwZSk7XG4gICAgdC50ZXh0ID0gdGV4dDtcbiAgICByZXR1cm4gdDtcbn07XG5cbmV4cG9ydHMuQ29tbW9uVG9rZW5GYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vL1xuLy8gVGhpcyBjbGFzcyBleHRlbmRzIHtAbGluayBCdWZmZXJlZFRva2VuU3RyZWFtfSB3aXRoIGZ1bmN0aW9uYWxpdHkgdG8gZmlsdGVyXG4vLyB0b2tlbiBzdHJlYW1zIHRvIHRva2VucyBvbiBhIHBhcnRpY3VsYXIgY2hhbm5lbCAodG9rZW5zIHdoZXJlXG4vLyB7QGxpbmsgVG9rZW4vL2dldENoYW5uZWx9IHJldHVybnMgYSBwYXJ0aWN1bGFyIHZhbHVlKS5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgdG9rZW4gc3RyZWFtIHByb3ZpZGVzIGFjY2VzcyB0byBhbGwgdG9rZW5zIGJ5IGluZGV4IG9yIHdoZW4gY2FsbGluZ1xuLy8gbWV0aG9kcyBsaWtlIHtAbGluayAvL2dldFRleHR9LiBUaGUgY2hhbm5lbCBmaWx0ZXJpbmcgaXMgb25seSB1c2VkIGZvciBjb2RlXG4vLyBhY2Nlc3NpbmcgdG9rZW5zIHZpYSB0aGUgbG9va2FoZWFkIG1ldGhvZHMge0BsaW5rIC8vTEF9LCB7QGxpbmsgLy9MVH0sIGFuZFxuLy8ge0BsaW5rIC8vTEJ9LjwvcD5cbi8vXG4vLyA8cD5cbi8vIEJ5IGRlZmF1bHQsIHRva2VucyBhcmUgcGxhY2VkIG9uIHRoZSBkZWZhdWx0IGNoYW5uZWxcbi8vICh7QGxpbmsgVG9rZW4vL0RFRkFVTFRfQ0hBTk5FTH0pLCBidXQgbWF5IGJlIHJlYXNzaWduZWQgYnkgdXNpbmcgdGhlXG4vLyB7QGNvZGUgLT5jaGFubmVsKEhJRERFTil9IGxleGVyIGNvbW1hbmQsIG9yIGJ5IHVzaW5nIGFuIGVtYmVkZGVkIGFjdGlvbiB0b1xuLy8gY2FsbCB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9LlxuLy8gPC9wPlxuLy9cbi8vIDxwPlxuLy8gTm90ZTogbGV4ZXIgcnVsZXMgd2hpY2ggdXNlIHRoZSB7QGNvZGUgLT5za2lwfSBsZXhlciBjb21tYW5kIG9yIGNhbGxcbi8vIHtAbGluayBMZXhlci8vc2tpcH0gZG8gbm90IHByb2R1Y2UgdG9rZW5zIGF0IGFsbCwgc28gaW5wdXQgdGV4dCBtYXRjaGVkIGJ5XG4vLyBzdWNoIGEgcnVsZSB3aWxsIG5vdCBiZSBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgdG9rZW4gc3RyZWFtLCByZWdhcmRsZXNzIG9mXG4vLyBjaGFubmVsLjwvcD5cbi8vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQnVmZmVyZWRUb2tlblN0cmVhbSA9IHJlcXVpcmUoJy4vQnVmZmVyZWRUb2tlblN0cmVhbScpLkJ1ZmZlcmVkVG9rZW5TdHJlYW07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuU3RyZWFtKGxleGVyLCBjaGFubmVsKSB7XG5cdEJ1ZmZlcmVkVG9rZW5TdHJlYW0uY2FsbCh0aGlzLCBsZXhlcik7XG4gICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbD09PXVuZGVmaW5lZCA/IFRva2VuLkRFRkFVTFRfQ0hBTk5FTCA6IGNoYW5uZWw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUpO1xuQ29tbW9uVG9rZW5TdHJlYW0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29tbW9uVG9rZW5TdHJlYW07XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGp1c3RTZWVrSW5kZXggPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIHRoaXMubmV4dFRva2VuT25DaGFubmVsKGksIHRoaXMuY2hhbm5lbCk7XG59O1xuXG5Db21tb25Ub2tlblN0cmVhbS5wcm90b3R5cGUuTEIgPSBmdW5jdGlvbihrKSB7XG4gICAgaWYgKGs9PT0wIHx8IHRoaXMuaW5kZXgtazwwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuaW5kZXg7XG4gICAgdmFyIG4gPSAxO1xuICAgIC8vIGZpbmQgayBnb29kIHRva2VucyBsb29raW5nIGJhY2t3YXJkc1xuICAgIHdoaWxlIChuIDw9IGspIHtcbiAgICAgICAgLy8gc2tpcCBvZmYtY2hhbm5lbCB0b2tlbnNcbiAgICAgICAgaSA9IHRoaXMucHJldmlvdXNUb2tlbk9uQ2hhbm5lbChpIC0gMSwgdGhpcy5jaGFubmVsKTtcbiAgICAgICAgbiArPSAxO1xuICAgIH1cbiAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5MVCA9IGZ1bmN0aW9uKGspIHtcbiAgICB0aGlzLmxhenlJbml0KCk7XG4gICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChrIDwgMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5MQigtayk7XG4gICAgfVxuICAgIHZhciBpID0gdGhpcy5pbmRleDtcbiAgICB2YXIgbiA9IDE7IC8vIHdlIGtub3cgdG9rZW5zW3Bvc10gaXMgYSBnb29kIG9uZVxuICAgIC8vIGZpbmQgayBnb29kIHRva2Vuc1xuICAgIHdoaWxlIChuIDwgaykge1xuICAgICAgICAvLyBza2lwIG9mZi1jaGFubmVsIHRva2VucywgYnV0IG1ha2Ugc3VyZSB0byBub3QgbG9vayBwYXN0IEVPRlxuICAgICAgICBpZiAodGhpcy5zeW5jKGkgKyAxKSkge1xuICAgICAgICAgICAgaSA9IHRoaXMubmV4dFRva2VuT25DaGFubmVsKGkgKyAxLCB0aGlzLmNoYW5uZWwpO1xuICAgICAgICB9XG4gICAgICAgIG4gKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2ldO1xufTtcblxuLy8gQ291bnQgRU9GIGp1c3Qgb25jZS4vLy9cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXROdW1iZXJPZk9uQ2hhbm5lbFRva2VucyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gMDtcbiAgICB0aGlzLmZpbGwoKTtcbiAgICBmb3IgKHZhciBpID0wOyBpPCB0aGlzLnRva2Vucy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciB0ID0gdGhpcy50b2tlbnNbaV07XG4gICAgICAgIGlmKCB0LmNoYW5uZWw9PT10aGlzLmNoYW5uZWwpIHtcbiAgICAgICAgICAgIG4gKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiggdC50eXBlPT09VG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbjtcbn07XG5cbmV4cG9ydHMuQ29tbW9uVG9rZW5TdHJlYW0gPSBDb21tb25Ub2tlblN0cmVhbTsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vICBUaGlzIGlzIGFuIElucHV0U3RyZWFtIHRoYXQgaXMgbG9hZGVkIGZyb20gYSBmaWxlIGFsbCBhdCBvbmNlXG4vLyAgd2hlbiB5b3UgY29uc3RydWN0IHRoZSBvYmplY3QuXG4vL1xudmFyIElucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xudmFyIGlzTm9kZUpzID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgPT09ICd1bmRlZmluZWQnO1xudmFyIGZzID0gaXNOb2RlSnMgPyByZXF1aXJlKFwiZnNcIikgOiBudWxsO1xuXG5mdW5jdGlvbiBGaWxlU3RyZWFtKGZpbGVOYW1lLCBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdHZhciBkYXRhID0gZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCBcInV0ZjhcIik7XG5cdElucHV0U3RyZWFtLmNhbGwodGhpcywgZGF0YSwgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyk7XG5cdHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkZpbGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJbnB1dFN0cmVhbS5wcm90b3R5cGUpO1xuRmlsZVN0cmVhbS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWxlU3RyZWFtO1xuXG5leHBvcnRzLkZpbGVTdHJlYW0gPSBGaWxlU3RyZWFtO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnJlcXVpcmUoJy4vcG9seWZpbGxzL2NvZGVwb2ludGF0Jyk7XG5yZXF1aXJlKCcuL3BvbHlmaWxscy9mcm9tY29kZXBvaW50Jyk7XG5cbi8vIFZhY3V1bSBhbGwgaW5wdXQgZnJvbSBhIHN0cmluZyBhbmQgdGhlbiB0cmVhdCBpdCBsaWtlIGEgYnVmZmVyLlxuXG5mdW5jdGlvbiBfbG9hZFN0cmluZyhzdHJlYW0pIHtcblx0c3RyZWFtLl9pbmRleCA9IDA7XG5cdHN0cmVhbS5kYXRhID0gW107XG5cdGlmIChzdHJlYW0uZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cykge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RyZWFtLnN0cmRhdGEubGVuZ3RoOyApIHtcblx0XHRcdHZhciBjb2RlUG9pbnQgPSBzdHJlYW0uc3RyZGF0YS5jb2RlUG9pbnRBdChpKTtcblx0XHRcdHN0cmVhbS5kYXRhLnB1c2goY29kZVBvaW50KTtcblx0XHRcdGkgKz0gY29kZVBvaW50IDw9IDB4RkZGRiA/IDEgOiAyO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0cmVhbS5zdHJkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgY29kZVVuaXQgPSBzdHJlYW0uc3RyZGF0YS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0c3RyZWFtLmRhdGEucHVzaChjb2RlVW5pdCk7XG5cdFx0fVxuXHR9XG5cdHN0cmVhbS5fc2l6ZSA9IHN0cmVhbS5kYXRhLmxlbmd0aDtcbn1cblxuLy8gSWYgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgdHJlYXRlZFxuLy8gYXMgYSBzZXJpZXMgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cbi8vXG4vLyBPdGhlcndpc2UsIHRoZSBpbnB1dCBpcyB0cmVhdGVkIGFzIGEgc2VyaWVzIG9mIDE2LWJpdCBVVEYtMTYgY29kZVxuLy8gdW5pdHMuXG5mdW5jdGlvbiBJbnB1dFN0cmVhbShkYXRhLCBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdHRoaXMubmFtZSA9IFwiPGVtcHR5PlwiO1xuXHR0aGlzLnN0cmRhdGEgPSBkYXRhO1xuXHR0aGlzLmRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMgPSBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzIHx8IGZhbHNlO1xuXHRfbG9hZFN0cmluZyh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1dFN0cmVhbS5wcm90b3R5cGUsIFwiaW5kZXhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5kZXg7XG5cdH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXRTdHJlYW0ucHJvdG90eXBlLCBcInNpemVcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2l6ZTtcblx0fVxufSk7XG5cbi8vIFJlc2V0IHRoZSBzdHJlYW0gc28gdGhhdCBpdCdzIGluIHRoZSBzYW1lIHN0YXRlIGl0IHdhc1xuLy8gd2hlbiB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkICpleGNlcHQqIHRoZSBkYXRhIGFycmF5IGlzIG5vdFxuLy8gdG91Y2hlZC5cbi8vXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5faW5kZXggPSAwO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLmNvbnN1bWUgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX2luZGV4ID49IHRoaXMuX3NpemUpIHtcblx0XHQvLyBhc3NlcnQgdGhpcy5MQSgxKSA9PSBUb2tlbi5FT0Zcblx0XHR0aHJvdyAoXCJjYW5ub3QgY29uc3VtZSBFT0ZcIik7XG5cdH1cblx0dGhpcy5faW5kZXggKz0gMTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5MQSA9IGZ1bmN0aW9uKG9mZnNldCkge1xuXHRpZiAob2Zmc2V0ID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7IC8vIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChvZmZzZXQgPCAwKSB7XG5cdFx0b2Zmc2V0ICs9IDE7IC8vIGUuZy4sIHRyYW5zbGF0ZSBMQSgtMSkgdG8gdXNlIG9mZnNldD0wXG5cdH1cblx0dmFyIHBvcyA9IHRoaXMuX2luZGV4ICsgb2Zmc2V0IC0gMTtcblx0aWYgKHBvcyA8IDAgfHwgcG9zID49IHRoaXMuX3NpemUpIHsgLy8gaW52YWxpZFxuXHRcdHJldHVybiBUb2tlbi5FT0Y7XG5cdH1cblx0cmV0dXJuIHRoaXMuZGF0YVtwb3NdO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLkxUID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdHJldHVybiB0aGlzLkxBKG9mZnNldCk7XG59O1xuXG4vLyBtYXJrL3JlbGVhc2UgZG8gbm90aGluZzsgd2UgaGF2ZSBlbnRpcmUgYnVmZmVyXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUubWFyayA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gLTE7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKG1hcmtlcikge1xufTtcblxuLy8gY29uc3VtZSgpIGFoZWFkIHVudGlsIHA9PV9pbmRleDsgY2FuJ3QganVzdCBzZXQgcD1faW5kZXggYXMgd2UgbXVzdFxuLy8gdXBkYXRlIGxpbmUgYW5kIGNvbHVtbi4gSWYgd2Ugc2VlayBiYWNrd2FyZHMsIGp1c3Qgc2V0IHBcbi8vXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uKF9pbmRleCkge1xuXHRpZiAoX2luZGV4IDw9IHRoaXMuX2luZGV4KSB7XG5cdFx0dGhpcy5faW5kZXggPSBfaW5kZXg7IC8vIGp1c3QganVtcDsgZG9uJ3QgdXBkYXRlIHN0cmVhbSBzdGF0ZSAobGluZSxcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi4pXG5cdFx0cmV0dXJuO1xuXHR9XG5cdC8vIHNlZWsgZm9yd2FyZFxuXHR0aGlzLl9pbmRleCA9IE1hdGgubWluKF9pbmRleCwgdGhpcy5fc2l6ZSk7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wKSB7XG5cdGlmIChzdG9wID49IHRoaXMuX3NpemUpIHtcblx0XHRzdG9wID0gdGhpcy5fc2l6ZSAtIDE7XG5cdH1cblx0aWYgKHN0YXJ0ID49IHRoaXMuX3NpemUpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRpZiAodGhpcy5kZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gXCJcIjtcblx0XHRcdGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBzdG9wOyBpKyspIHtcblx0XHRcdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuZGF0YVtpXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdHJkYXRhLnNsaWNlKHN0YXJ0LCBzdG9wICsgMSk7XG5cdFx0fVxuXHR9XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3RyZGF0YTtcbn07XG5cbmV4cG9ydHMuSW5wdXRTdHJlYW0gPSBJbnB1dFN0cmVhbTtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLypqc2xpbnQgc21hcnR0YWJzOnRydWUgKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuXG4vKiBzdG9wIGlzIG5vdCBpbmNsdWRlZCEgKi9cbmZ1bmN0aW9uIEludGVydmFsKHN0YXJ0LCBzdG9wKSB7XG5cdHRoaXMuc3RhcnQgPSBzdGFydDtcblx0dGhpcy5zdG9wID0gc3RvcDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkludGVydmFsLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0cmV0dXJuIGl0ZW0gPj0gdGhpcy5zdGFydCAmJiBpdGVtIDwgdGhpcy5zdG9wO1xufTtcblxuSW50ZXJ2YWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdGlmKHRoaXMuc3RhcnQ9PT10aGlzLnN0b3AtMSkge1xuXHRcdHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhcnQudG9TdHJpbmcoKSArIFwiLi5cIiArICh0aGlzLnN0b3AtMSkudG9TdHJpbmcoKTtcblx0fVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWwucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3AgLSB0aGlzLnN0YXJ0O1xuXHR9XG59KTtcblxuZnVuY3Rpb24gSW50ZXJ2YWxTZXQoKSB7XG5cdHRoaXMuaW50ZXJ2YWxzID0gbnVsbDtcblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xufVxuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCB8fCB0aGlzLmludGVydmFscy5sZW5ndGg9PT0wKSB7XG5cdFx0cmV0dXJuIFRva2VuLklOVkFMSURfVFlQRTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcnZhbHNbMF0uc3RhcnQ7XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5hZGRPbmUgPSBmdW5jdGlvbih2KSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHYsIHYgKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkUmFuZ2UgPSBmdW5jdGlvbihsLCBoKSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGwsIGggKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkSW50ZXJ2YWwgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHRoaXMuaW50ZXJ2YWxzID0gW107XG5cdFx0dGhpcy5pbnRlcnZhbHMucHVzaCh2KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmaW5kIGluc2VydCBwb3Ncblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdFx0Ly8gZGlzdGluY3QgcmFuZ2UgLT4gaW5zZXJ0XG5cdFx0XHRpZiAodi5zdG9wIDwgaS5zdGFydCkge1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgdik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGNvbnRpZ3VvdXMgcmFuZ2UgLT4gYWRqdXN0XG5cdFx0XHRlbHNlIGlmICh2LnN0b3AgPT09IGkuc3RhcnQpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10uc3RhcnQgPSB2LnN0YXJ0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBvdmVybGFwcGluZyByYW5nZSAtPiBhZGp1c3QgYW5kIHJlZHVjZVxuXHRcdFx0ZWxzZSBpZiAodi5zdGFydCA8PSBpLnN0b3ApIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoTWF0aC5taW4oaS5zdGFydCwgdi5zdGFydCksIE1hdGgubWF4KGkuc3RvcCwgdi5zdG9wKSk7XG5cdFx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGdyZWF0ZXIgdGhhbiBhbnkgZXhpc3Rpbmdcblx0XHR0aGlzLmludGVydmFscy5wdXNoKHYpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKG90aGVyLmludGVydmFscyAhPT0gbnVsbCkge1xuXHRcdGZvciAodmFyIGsgPSAwOyBrIDwgb3RoZXIuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IG90aGVyLmludGVydmFsc1trXTtcblx0XHRcdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGkuc3RhcnQsIGkuc3RvcCkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcztcbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbihrKSB7XG5cdC8vIG9ubHkgbmVlZCB0byByZWR1Y2UgaWYgayBpcyBub3QgdGhlIGxhc3Rcblx0aWYgKGsgPCB0aGlzLmludGVydmFsc2xlbmd0aCAtIDEpIHtcblx0XHR2YXIgbCA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdHZhciByID0gdGhpcy5pbnRlcnZhbHNbayArIDFdO1xuXHRcdC8vIGlmIHIgY29udGFpbmVkIGluIGxcblx0XHRpZiAobC5zdG9wID49IHIuc3RvcCkge1xuXHRcdFx0dGhpcy5pbnRlcnZhbHMucG9wKGsgKyAxKTtcblx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdH0gZWxzZSBpZiAobC5zdG9wID49IHIuc3RhcnQpIHtcblx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGwuc3RhcnQsIHIuc3RvcCk7XG5cdFx0XHR0aGlzLmludGVydmFscy5wb3AoayArIDEpO1xuXHRcdH1cblx0fVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmNvbXBsZW1lbnQgPSBmdW5jdGlvbihzdGFydCwgc3RvcCkge1xuICAgIHZhciByZXN1bHQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICByZXN1bHQuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHN0YXJ0LHN0b3ArMSkpO1xuICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5yZW1vdmVSYW5nZSh0aGlzLmludGVydmFsc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRpZih0aGlzLmludGVydmFsc1trXS5jb250YWlucyhpdGVtKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsZW4gPSAwO1xuXHRcdHRoaXMuaW50ZXJ2YWxzLm1hcChmdW5jdGlvbihpKSB7bGVuICs9IGkubGVuZ3RoO30pO1xuXHRcdHJldHVybiBsZW47XG5cdH1cbn0pO1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUucmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbih2KSB7XG4gICAgaWYodi5zdGFydD09PXYuc3RvcC0xKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlT25lKHYuc3RhcnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbnRlcnZhbHMhPT1udWxsKSB7XG4gICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgZm9yKHZhciBuPTA7IG48dGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5pbnRlcnZhbHNba107XG4gICAgICAgICAgICAvLyBpbnRlcnZhbHMgYXJlIG9yZGVyZWRcbiAgICAgICAgICAgIGlmICh2LnN0b3A8PWkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgaW5jbHVkaW5nIHJhbmdlLCBzcGxpdCBpdFxuICAgICAgICAgICAgZWxzZSBpZih2LnN0YXJ0Pmkuc3RhcnQgJiYgdi5zdG9wPGkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQsIHYuc3RhcnQpO1xuICAgICAgICAgICAgICAgIHZhciB4ID0gbmV3IEludGVydmFsKHYuc3RvcCwgaS5zdG9wKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGluY2x1ZGVkIHJhbmdlLCByZW1vdmUgaXRcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDw9aS5zdGFydCAmJiB2LnN0b3A+PWkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgICAgICBrID0gayAtIDE7IC8vIG5lZWQgYW5vdGhlciBwYXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgbG93ZXIgYm91bmRhcnlcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDxpLnN0b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsc1trXSA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2LnN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciB1cHBlciBib3VuZGFyeVxuICAgICAgICAgICAgZWxzZSBpZih2LnN0b3A8aS5zdG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwodi5zdG9wLCBpLnN0b3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgayArPSAxO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnJlbW92ZU9uZSA9IGZ1bmN0aW9uKHYpIHtcblx0aWYgKHRoaXMuaW50ZXJ2YWxzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmludGVydmFscy5sZW5ndGg7IGsrKykge1xuXHRcdFx0dmFyIGkgPSB0aGlzLmludGVydmFsc1trXTtcblx0XHRcdC8vIGludGVydmFscyBpcyBvcmRlcmVkXG5cdFx0XHRpZiAodiA8IGkuc3RhcnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIHNpbmdsZSB2YWx1ZSByYW5nZVxuXHRcdFx0ZWxzZSBpZiAodiA9PT0gaS5zdGFydCAmJiB2ID09PSBpLnN0b3AgLSAxKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIGxvd2VyIGJvdW5kYXJ5XG5cdFx0XHRlbHNlIGlmICh2ID09PSBpLnN0YXJ0KSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQgKyAxLCBpLnN0b3ApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBjaGVjayBmb3IgdXBwZXIgYm91bmRhcnlcblx0XHRcdGVsc2UgaWYgKHYgPT09IGkuc3RvcCAtIDEpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoaS5zdGFydCwgaS5zdG9wIC0gMSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIHNwbGl0IGV4aXN0aW5nIHJhbmdlXG5cdFx0XHRlbHNlIGlmICh2IDwgaS5zdG9wIC0gMSkge1xuXHRcdFx0XHR2YXIgeCA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2KTtcblx0XHRcdFx0aS5zdGFydCA9IHYgKyAxO1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgZWxlbXNBcmVDaGFyKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRlbGVtc0FyZUNoYXIgPSBlbGVtc0FyZUNoYXIgfHwgZmFsc2U7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcInt9XCI7XG5cdH0gZWxzZSBpZihsaXRlcmFsTmFtZXMhPT1udWxsIHx8IHN5bWJvbGljTmFtZXMhPT1udWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9Ub2tlblN0cmluZyhsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpO1xuXHR9IGVsc2UgaWYoZWxlbXNBcmVDaGFyKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9DaGFyU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMudG9JbmRleFN0cmluZygpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUudG9DaGFyU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBuYW1lcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHYgPSB0aGlzLmludGVydmFsc1tpXTtcblx0XHRpZih2LnN0b3A9PT12LnN0YXJ0KzEpIHtcblx0XHRcdGlmICggdi5zdGFydD09PVRva2VuLkVPRiApIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIjxFT0Y+XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIidcIiArIFN0cmluZy5mcm9tQ2hhckNvZGUodi5zdGFydCkgKyBcIidcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2goXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RhcnQpICsgXCInLi4nXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RvcC0xKSArIFwiJ1wiKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvSW5kZXhTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGlmKHYuc3RvcD09PXYuc3RhcnQrMSkge1xuXHRcdFx0aWYgKCB2LnN0YXJ0PT09VG9rZW4uRU9GICkge1xuXHRcdFx0XHRuYW1lcy5wdXNoKFwiPEVPRj5cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuYW1lcy5wdXNoKHYuc3RhcnQudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2godi5zdGFydC50b1N0cmluZygpICsgXCIuLlwiICsgKHYuc3RvcC0xKS50b1N0cmluZygpKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvVG9rZW5TdHJpbmcgPSBmdW5jdGlvbihsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGZvciAodmFyIGogPSB2LnN0YXJ0OyBqIDwgdi5zdG9wOyBqKyspIHtcblx0XHRcdG5hbWVzLnB1c2godGhpcy5lbGVtZW50TmFtZShsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMsIGopKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5lbGVtZW50TmFtZSA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgYSkge1xuXHRpZiAoYSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIGlmIChhID09PSBUb2tlbi5FUFNJTE9OKSB7XG5cdFx0cmV0dXJuIFwiPEVQU0lMT04+XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGxpdGVyYWxOYW1lc1thXSB8fCBzeW1ib2xpY05hbWVzW2FdO1xuXHR9XG59O1xuXG5leHBvcnRzLkludGVydmFsID0gSW50ZXJ2YWw7XG5leHBvcnRzLkludGVydmFsU2V0ID0gSW50ZXJ2YWxTZXQ7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbnZhciBTZXQgPSByZXF1aXJlKCcuL1V0aWxzJykuU2V0O1xudmFyIEJpdFNldCA9IHJlcXVpcmUoJy4vVXRpbHMnKS5CaXRTZXQ7XG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQVROQ29uZmlnID0gcmVxdWlyZSgnLi9hdG4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIEludGVydmFsU2V0ID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsU2V0O1xudmFyIFJ1bGVTdG9wU3RhdGUgPSByZXF1aXJlKCcuL2F0bi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgUnVsZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuL2F0bi9UcmFuc2l0aW9uJykuUnVsZVRyYW5zaXRpb247XG52YXIgTm90U2V0VHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5Ob3RTZXRUcmFuc2l0aW9uO1xudmFyIFdpbGRjYXJkVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5XaWxkY2FyZFRyYW5zaXRpb247XG52YXIgQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uID0gcmVxdWlyZSgnLi9hdG4vVHJhbnNpdGlvbicpLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxudmFyIHBjID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uQ29udGV4dCcpO1xudmFyIHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0ID0gcGMucHJlZGljdGlvbkNvbnRleHRGcm9tUnVsZUNvbnRleHQ7XG52YXIgUHJlZGljdGlvbkNvbnRleHQgPSBwYy5QcmVkaWN0aW9uQ29udGV4dDtcbnZhciBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IHBjLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuXG5mdW5jdGlvbiBMTDFBbmFseXplciAoYXRuKSB7XG4gICAgdGhpcy5hdG4gPSBhdG47XG59XG5cbi8vKiBTcGVjaWFsIHZhbHVlIGFkZGVkIHRvIHRoZSBsb29rYWhlYWQgc2V0cyB0byBpbmRpY2F0ZSB0aGF0IHdlIGhpdFxuLy8gIGEgcHJlZGljYXRlIGR1cmluZyBhbmFseXNpcyBpZiB7QGNvZGUgc2VlVGhydVByZWRzPT1mYWxzZX0uXG4vLy9cbkxMMUFuYWx5emVyLkhJVF9QUkVEID0gVG9rZW4uSU5WQUxJRF9UWVBFO1xuXG5cbi8vKlxuLy8gQ2FsY3VsYXRlcyB0aGUgU0xMKDEpIGV4cGVjdGVkIGxvb2thaGVhZCBzZXQgZm9yIGVhY2ggb3V0Z29pbmcgdHJhbnNpdGlvblxuLy8gb2YgYW4ge0BsaW5rIEFUTlN0YXRlfS4gVGhlIHJldHVybmVkIGFycmF5IGhhcyBvbmUgZWxlbWVudCBmb3IgZWFjaFxuLy8gb3V0Z29pbmcgdHJhbnNpdGlvbiBpbiB7QGNvZGUgc30uIElmIHRoZSBjbG9zdXJlIGZyb20gdHJhbnNpdGlvblxuLy8gPGVtPmk8L2VtPiBsZWFkcyB0byBhIHNlbWFudGljIHByZWRpY2F0ZSBiZWZvcmUgbWF0Y2hpbmcgYSBzeW1ib2wsIHRoZVxuLy8gZWxlbWVudCBhdCBpbmRleCA8ZW0+aTwvZW0+IG9mIHRoZSByZXN1bHQgd2lsbCBiZSB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZVxuLy8gQHJldHVybiB0aGUgZXhwZWN0ZWQgc3ltYm9scyBmb3IgZWFjaCBvdXRnb2luZyB0cmFuc2l0aW9uIG9mIHtAY29kZSBzfS5cbi8vL1xuTEwxQW5hbHl6ZXIucHJvdG90eXBlLmdldERlY2lzaW9uTG9va2FoZWFkID0gZnVuY3Rpb24ocykge1xuICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgY291bnQgPSBzLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICB2YXIgbG9vayA9IFtdO1xuICAgIGZvcih2YXIgYWx0PTA7IGFsdDwgY291bnQ7IGFsdCsrKSB7XG4gICAgICAgIGxvb2tbYWx0XSA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgICAgICB2YXIgbG9va0J1c3kgPSBuZXcgU2V0KCk7XG4gICAgICAgIHZhciBzZWVUaHJ1UHJlZHMgPSBmYWxzZTsgLy8gZmFpbCB0byBnZXQgbG9va2FoZWFkIHVwb24gcHJlZFxuICAgICAgICB0aGlzLl9MT09LKHMudHJhbnNpdGlvbihhbHQpLnRhcmdldCwgbnVsbCwgUHJlZGljdGlvbkNvbnRleHQuRU1QVFksXG4gICAgICAgICAgICAgIGxvb2tbYWx0XSwgbG9va0J1c3ksIG5ldyBCaXRTZXQoKSwgc2VlVGhydVByZWRzLCBmYWxzZSk7XG4gICAgICAgIC8vIFdpcGUgb3V0IGxvb2thaGVhZCBmb3IgdGhpcyBhbHRlcm5hdGl2ZSBpZiB3ZSBmb3VuZCBub3RoaW5nXG4gICAgICAgIC8vIG9yIHdlIGhhZCBhIHByZWRpY2F0ZSB3aGVuIHdlICFzZWVUaHJ1UHJlZHNcbiAgICAgICAgaWYgKGxvb2tbYWx0XS5sZW5ndGg9PT0wIHx8IGxvb2tbYWx0XS5jb250YWlucyhMTDFBbmFseXplci5ISVRfUFJFRCkpIHtcbiAgICAgICAgICAgIGxvb2tbYWx0XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvb2s7XG59O1xuXG4vLypcbi8vIENvbXB1dGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vL1xuLy8gPHA+SWYge0Bjb2RlIGN0eH0gaXMge0Bjb2RlIG51bGx9IGFuZCB0aGUgZW5kIG9mIHRoZSBydWxlIGNvbnRhaW5pbmdcbi8vIHtAY29kZSBzfSBpcyByZWFjaGVkLCB7QGxpbmsgVG9rZW4vL0VQU0lMT059IGlzIGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0LlxuLy8gSWYge0Bjb2RlIGN0eH0gaXMgbm90IHtAY29kZSBudWxsfSBhbmQgdGhlIGVuZCBvZiB0aGUgb3V0ZXJtb3N0IHJ1bGUgaXNcbi8vIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRU9GfSBpcyBhZGRlZCB0byB0aGUgcmVzdWx0IHNldC48L3A+XG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZVxuLy8gQHBhcmFtIHN0b3BTdGF0ZSB0aGUgQVROIHN0YXRlIHRvIHN0b3AgYXQuIFRoaXMgY2FuIGJlIGFcbi8vIHtAbGluayBCbG9ja0VuZFN0YXRlfSB0byBkZXRlY3QgZXBzaWxvbiBwYXRocyB0aHJvdWdoIGEgY2xvc3VyZS5cbi8vIEBwYXJhbSBjdHggdGhlIGNvbXBsZXRlIHBhcnNlciBjb250ZXh0LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIGNvbnRleHRcbi8vIHNob3VsZCBiZSBpZ25vcmVkXG4vL1xuLy8gQHJldHVybiBUaGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vLy9cbkxMMUFuYWx5emVyLnByb3RvdHlwZS5MT09LID0gZnVuY3Rpb24ocywgc3RvcFN0YXRlLCBjdHgpIHtcbiAgICB2YXIgciA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHZhciBzZWVUaHJ1UHJlZHMgPSB0cnVlOyAvLyBpZ25vcmUgcHJlZHM7IGdldCBhbGwgbG9va2FoZWFkXG5cdGN0eCA9IGN0eCB8fCBudWxsO1xuICAgIHZhciBsb29rQ29udGV4dCA9IGN0eCE9PW51bGwgPyBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChzLmF0biwgY3R4KSA6IG51bGw7XG4gICAgdGhpcy5fTE9PSyhzLCBzdG9wU3RhdGUsIGxvb2tDb250ZXh0LCByLCBuZXcgU2V0KCksIG5ldyBCaXRTZXQoKSwgc2VlVGhydVByZWRzLCB0cnVlKTtcbiAgICByZXR1cm4gcjtcbn07XG5cbi8vKlxuLy8gQ29tcHV0ZSBzZXQgb2YgdG9rZW5zIHRoYXQgY2FuIGZvbGxvdyB7QGNvZGUgc30gaW4gdGhlIEFUTiBpbiB0aGVcbi8vIHNwZWNpZmllZCB7QGNvZGUgY3R4fS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY3R4fSBpcyB7QGNvZGUgbnVsbH0gYW5kIHtAY29kZSBzdG9wU3RhdGV9IG9yIHRoZSBlbmQgb2YgdGhlXG4vLyBydWxlIGNvbnRhaW5pbmcge0Bjb2RlIHN9IGlzIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgYWRkZWQgdG9cbi8vIHRoZSByZXN1bHQgc2V0LiBJZiB7QGNvZGUgY3R4fSBpcyBub3Qge0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgYWRkRU9GfSBpc1xuLy8ge0Bjb2RlIHRydWV9IGFuZCB7QGNvZGUgc3RvcFN0YXRlfSBvciB0aGUgZW5kIG9mIHRoZSBvdXRlcm1vc3QgcnVsZSBpc1xuLy8gcmVhY2hlZCwge0BsaW5rIFRva2VuLy9FT0Z9IGlzIGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0LjwvcD5cbi8vXG4vLyBAcGFyYW0gcyB0aGUgQVROIHN0YXRlLlxuLy8gQHBhcmFtIHN0b3BTdGF0ZSB0aGUgQVROIHN0YXRlIHRvIHN0b3AgYXQuIFRoaXMgY2FuIGJlIGFcbi8vIHtAbGluayBCbG9ja0VuZFN0YXRlfSB0byBkZXRlY3QgZXBzaWxvbiBwYXRocyB0aHJvdWdoIGEgY2xvc3VyZS5cbi8vIEBwYXJhbSBjdHggVGhlIG91dGVyIGNvbnRleHQsIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgb3V0ZXIgY29udGV4dCBzaG91bGRcbi8vIG5vdCBiZSB1c2VkLlxuLy8gQHBhcmFtIGxvb2sgVGhlIHJlc3VsdCBsb29rYWhlYWQgc2V0LlxuLy8gQHBhcmFtIGxvb2tCdXN5IEEgc2V0IHVzZWQgZm9yIHByZXZlbnRpbmcgZXBzaWxvbiBjbG9zdXJlcyBpbiB0aGUgQVROXG4vLyBmcm9tIGNhdXNpbmcgYSBzdGFjayBvdmVyZmxvdy4gT3V0c2lkZSBjb2RlIHNob3VsZCBwYXNzXG4vLyB7QGNvZGUgbmV3IFNldDxBVE5Db25maWc+fSBmb3IgdGhpcyBhcmd1bWVudC5cbi8vIEBwYXJhbSBjYWxsZWRSdWxlU3RhY2sgQSBzZXQgdXNlZCBmb3IgcHJldmVudGluZyBsZWZ0IHJlY3Vyc2lvbiBpbiB0aGVcbi8vIEFUTiBmcm9tIGNhdXNpbmcgYSBzdGFjayBvdmVyZmxvdy4gT3V0c2lkZSBjb2RlIHNob3VsZCBwYXNzXG4vLyB7QGNvZGUgbmV3IEJpdFNldCgpfSBmb3IgdGhpcyBhcmd1bWVudC5cbi8vIEBwYXJhbSBzZWVUaHJ1UHJlZHMge0Bjb2RlIHRydWV9IHRvIHRydWUgc2VtYW50aWMgcHJlZGljYXRlcyBhc1xuLy8gaW1wbGljaXRseSB7QGNvZGUgdHJ1ZX0gYW5kIFwic2VlIHRocm91Z2ggdGhlbVwiLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy8gdG8gdHJlYXQgc2VtYW50aWMgcHJlZGljYXRlcyBhcyBvcGFxdWUgYW5kIGFkZCB7QGxpbmsgLy9ISVRfUFJFRH0gdG8gdGhlXG4vLyByZXN1bHQgaWYgb25lIGlzIGVuY291bnRlcmVkLlxuLy8gQHBhcmFtIGFkZEVPRiBBZGQge0BsaW5rIFRva2VuLy9FT0Z9IHRvIHRoZSByZXN1bHQgaWYgdGhlIGVuZCBvZiB0aGVcbi8vIG91dGVybW9zdCBjb250ZXh0IGlzIHJlYWNoZWQuIFRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaWYge0Bjb2RlIGN0eH1cbi8vIGlzIHtAY29kZSBudWxsfS5cbi8vL1xuTEwxQW5hbHl6ZXIucHJvdG90eXBlLl9MT09LID0gZnVuY3Rpb24ocywgc3RvcFN0YXRlICwgY3R4LCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRikge1xuICAgIHZhciBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cywgYWx0OjAsIGNvbnRleHQ6IGN0eH0sIG51bGwpO1xuICAgIGlmIChsb29rQnVzeS5jb250YWlucyhjKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvb2tCdXN5LmFkZChjKTtcbiAgICBpZiAocyA9PT0gc3RvcFN0YXRlKSB7XG4gICAgICAgIGlmIChjdHggPT09bnVsbCkge1xuICAgICAgICAgICAgbG9vay5hZGRPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoY3R4LmlzRW1wdHkoKSAmJiBhZGRFT0YpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVPRik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlICkge1xuICAgICAgICBpZiAoY3R4ID09PW51bGwpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVQU0lMT04pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGN0eC5pc0VtcHR5KCkgJiYgYWRkRU9GKSB7XG4gICAgICAgICAgICBsb29rLmFkZE9uZShUb2tlbi5FT0YpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHggIT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG4gICAgICAgICAgICAvLyBydW4gdGhydSBhbGwgcG9zc2libGUgc3RhY2sgdG9wcyBpbiBjdHhcbiAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpPGN0eC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjdHguZ2V0UmV0dXJuU3RhdGUoaSldO1xuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkID0gY2FsbGVkUnVsZVN0YWNrLmNvbnRhaW5zKHJldHVyblN0YXRlLnJ1bGVJbmRleCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLnJlbW92ZShyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHJldHVyblN0YXRlLCBzdG9wU3RhdGUsIGN0eC5nZXRQYXJlbnQoaSksIGxvb2ssIGxvb2tCdXN5LCBjYWxsZWRSdWxlU3RhY2ssIHNlZVRocnVQcmVkcywgYWRkRU9GKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLmFkZChyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcih2YXIgaj0wOyBqPHMudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHQgPSBzLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICBpZiAodC5jb25zdHJ1Y3RvciA9PT0gUnVsZVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWRSdWxlU3RhY2suY29udGFpbnModC50YXJnZXQucnVsZUluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5ld0NvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUoY3R4LCB0LmZvbGxvd1N0YXRlLnN0YXRlTnVtYmVyKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLmFkZCh0LnRhcmdldC5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX0xPT0sodC50YXJnZXQsIHN0b3BTdGF0ZSwgbmV3Q29udGV4dCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjYWxsZWRSdWxlU3RhY2sucmVtb3ZlKHQudGFyZ2V0LnJ1bGVJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodCBpbnN0YW5jZW9mIEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiApIHtcbiAgICAgICAgICAgIGlmIChzZWVUaHJ1UHJlZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHQudGFyZ2V0LCBzdG9wU3RhdGUsIGN0eCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb29rLmFkZE9uZShMTDFBbmFseXplci5ISVRfUFJFRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiggdC5pc0Vwc2lsb24pIHtcbiAgICAgICAgICAgIHRoaXMuX0xPT0sodC50YXJnZXQsIHN0b3BTdGF0ZSwgY3R4LCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRik7XG4gICAgICAgIH0gZWxzZSBpZiAodC5jb25zdHJ1Y3RvciA9PT0gV2lsZGNhcmRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICBsb29rLmFkZFJhbmdlKCBUb2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFLCB0aGlzLmF0bi5tYXhUb2tlblR5cGUgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzZXQgPSB0LmxhYmVsO1xuICAgICAgICAgICAgaWYgKHNldCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgTm90U2V0VHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBzZXQgPSBzZXQuY29tcGxlbWVudChUb2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFLCB0aGlzLmF0bi5tYXhUb2tlblR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb29rLmFkZFNldChzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0cy5MTDFBbmFseXplciA9IExMMUFuYWx5emVyO1xuXG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gQSBsZXhlciBpcyByZWNvZ25pemVyIHRoYXQgZHJhd3MgaW5wdXQgc3ltYm9scyBmcm9tIGEgY2hhcmFjdGVyIHN0cmVhbS5cbi8vICBsZXhlciBncmFtbWFycyByZXN1bHQgaW4gYSBzdWJjbGFzcyBvZiB0aGlzIG9iamVjdC4gQSBMZXhlciBvYmplY3Rcbi8vICB1c2VzIHNpbXBsaWZpZWQgbWF0Y2goKSBhbmQgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcyBpbiB0aGUgaW50ZXJlc3Qgb2Ygc3BlZWQuXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSZWNvZ25pemVyID0gcmVxdWlyZSgnLi9SZWNvZ25pemVyJykuUmVjb2duaXplcjtcbnZhciBDb21tb25Ub2tlbkZhY3RvcnkgPSByZXF1aXJlKCcuL0NvbW1vblRva2VuRmFjdG9yeScpLkNvbW1vblRva2VuRmFjdG9yeTtcbnZhciBSZWNvZ25pdGlvbkV4Y2VwdGlvbiAgPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLlJlY29nbml0aW9uRXhjZXB0aW9uO1xudmFyIExleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb247XG5cbmZ1bmN0aW9uIFRva2VuU291cmNlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gTGV4ZXIoaW5wdXQpIHtcblx0UmVjb2duaXplci5jYWxsKHRoaXMpO1xuXHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHR0aGlzLl9mYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5LkRFRkFVTFQ7XG5cdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIGlucHV0IF07XG5cblx0dGhpcy5faW50ZXJwID0gbnVsbDsgLy8gY2hpbGQgY2xhc3NlcyBtdXN0IHBvcHVsYXRlIHRoaXNcblxuXHQvLyBUaGUgZ29hbCBvZiBhbGwgbGV4ZXIgcnVsZXMvbWV0aG9kcyBpcyB0byBjcmVhdGUgYSB0b2tlbiBvYmplY3QuXG5cdC8vIHRoaXMgaXMgYW4gaW5zdGFuY2UgdmFyaWFibGUgYXMgbXVsdGlwbGUgcnVsZXMgbWF5IGNvbGxhYm9yYXRlIHRvXG5cdC8vIGNyZWF0ZSBhIHNpbmdsZSB0b2tlbi4gbmV4dFRva2VuIHdpbGwgcmV0dXJuIHRoaXMgb2JqZWN0IGFmdGVyXG5cdC8vIG1hdGNoaW5nIGxleGVyIHJ1bGUocykuIElmIHlvdSBzdWJjbGFzcyB0byBhbGxvdyBtdWx0aXBsZSB0b2tlblxuXHQvLyBlbWlzc2lvbnMsIHRoZW4gc2V0IHRoaXMgdG8gdGhlIGxhc3QgdG9rZW4gdG8gYmUgbWF0Y2hlZCBvclxuXHQvLyBzb21ldGhpbmcgbm9ubnVsbCBzbyB0aGF0IHRoZSBhdXRvIHRva2VuIGVtaXQgbWVjaGFuaXNtIHdpbGwgbm90XG5cdC8vIGVtaXQgYW5vdGhlciB0b2tlbi5cblx0dGhpcy5fdG9rZW4gPSBudWxsO1xuXG5cdC8vIFdoYXQgY2hhcmFjdGVyIGluZGV4IGluIHRoZSBzdHJlYW0gZGlkIHRoZSBjdXJyZW50IHRva2VuIHN0YXJ0IGF0P1xuXHQvLyBOZWVkZWQsIGZvciBleGFtcGxlLCB0byBnZXQgdGhlIHRleHQgZm9yIGN1cnJlbnQgdG9rZW4uIFNldCBhdFxuXHQvLyB0aGUgc3RhcnQgb2YgbmV4dFRva2VuLlxuXHR0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4ID0gLTE7XG5cblx0Ly8gVGhlIGxpbmUgb24gd2hpY2ggdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdG9rZW4gcmVzaWRlcy8vL1xuXHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IC0xO1xuXG5cdC8vIFRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gb2YgZmlyc3QgY2hhcmFjdGVyIHdpdGhpbiB0aGUgbGluZS8vL1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cblx0Ly8gT25jZSB3ZSBzZWUgRU9GIG9uIGNoYXIgc3RyZWFtLCBuZXh0IHRva2VuIHdpbGwgYmUgRU9GLlxuXHQvLyBJZiB5b3UgaGF2ZSBET05FIDogRU9GIDsgdGhlbiB5b3Ugc2VlIERPTkUgRU9GLlxuXHR0aGlzLl9oaXRFT0YgPSBmYWxzZTtcblxuXHQvLyBUaGUgY2hhbm5lbCBudW1iZXIgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX2NoYW5uZWwgPSBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cblx0Ly8gVGhlIHRva2VuIHR5cGUgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX3R5cGUgPSBUb2tlbi5JTlZBTElEX1RZUEU7XG5cblx0dGhpcy5fbW9kZVN0YWNrID0gW107XG5cdHRoaXMuX21vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cblx0Ly8gWW91IGNhbiBzZXQgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHRva2VuIHRvIG92ZXJyaWRlIHdoYXQgaXMgaW5cblx0Ly8gdGhlIGlucHV0IGNoYXIgYnVmZmVyLiBVc2Ugc2V0VGV4dCgpIG9yIGNhbiBzZXQgdGhpcyBpbnN0YW5jZSB2YXIuXG5cdC8vIC9cblx0dGhpcy5fdGV4dCA9IG51bGw7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVjb2duaXplci5wcm90b3R5cGUpO1xuTGV4ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXI7XG5cbkxleGVyLkRFRkFVTFRfTU9ERSA9IDA7XG5MZXhlci5NT1JFID0gLTI7XG5MZXhlci5TS0lQID0gLTM7XG5cbkxleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcbkxleGVyLkhJRERFTiA9IFRva2VuLkhJRERFTl9DSEFOTkVMO1xuTGV4ZXIuTUlOX0NIQVJfVkFMVUUgPSAweDAwMDA7XG5MZXhlci5NQVhfQ0hBUl9WQUxVRSA9IDB4MTBGRkZGO1xuXG5MZXhlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0Ly8gd2FjayBMZXhlciBzdGF0ZSB2YXJpYWJsZXNcblx0aWYgKHRoaXMuX2lucHV0ICE9PSBudWxsKSB7XG5cdFx0dGhpcy5faW5wdXQuc2VlaygwKTsgLy8gcmV3aW5kIHRoZSBpbnB1dFxuXHR9XG5cdHRoaXMuX3Rva2VuID0gbnVsbDtcblx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0dGhpcy5fY2hhbm5lbCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcblx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IC0xO1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cdHRoaXMuX3Rva2VuU3RhcnRMaW5lID0gLTE7XG5cdHRoaXMuX3RleHQgPSBudWxsO1xuXG5cdHRoaXMuX2hpdEVPRiA9IGZhbHNlO1xuXHR0aGlzLl9tb2RlID0gTGV4ZXIuREVGQVVMVF9NT0RFO1xuXHR0aGlzLl9tb2RlU3RhY2sgPSBbXTtcblxuXHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcbn07XG5cbi8vIFJldHVybiBhIHRva2VuIGZyb20gdGhpcyBzb3VyY2U7IGkuZS4sIG1hdGNoIGEgdG9rZW4gb24gdGhlIGNoYXIgc3RyZWFtLlxuTGV4ZXIucHJvdG90eXBlLm5leHRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcIm5leHRUb2tlbiByZXF1aXJlcyBhIG5vbi1udWxsIGlucHV0IHN0cmVhbS5cIjtcblx0fVxuXG5cdC8vIE1hcmsgc3RhcnQgbG9jYXRpb24gaW4gY2hhciBzdHJlYW0gc28gdW5idWZmZXJlZCBzdHJlYW1zIGFyZVxuXHQvLyBndWFyYW50ZWVkIGF0IGxlYXN0IGhhdmUgdGV4dCBvZiBjdXJyZW50IHRva2VuXG5cdHZhciB0b2tlblN0YXJ0TWFya2VyID0gdGhpcy5faW5wdXQubWFyaygpO1xuXHR0cnkge1xuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAodGhpcy5faGl0RU9GKSB7XG5cdFx0XHRcdHRoaXMuZW1pdEVPRigpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fdG9rZW47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl90b2tlbiA9IG51bGw7XG5cdFx0XHR0aGlzLl9jaGFubmVsID0gVG9rZW4uREVGQVVMVF9DSEFOTkVMO1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENvbHVtbiA9IHRoaXMuX2ludGVycC5jb2x1bW47XG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IHRoaXMuX2ludGVycC5saW5lO1xuXHRcdFx0dGhpcy5fdGV4dCA9IG51bGw7XG5cdFx0XHR2YXIgY29udGludWVPdXRlciA9IGZhbHNlO1xuXHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0XHRcdFx0dmFyIHR0eXBlID0gTGV4ZXIuU0tJUDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0dHlwZSA9IHRoaXMuX2ludGVycC5tYXRjaCh0aGlzLl9pbnB1dCwgdGhpcy5fbW9kZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ICAgIGlmKGUgaW5zdGFuY2VvZiBSZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoZSk7IC8vIHJlcG9ydCBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvdmVyKGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX2lucHV0LkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0XHR0aGlzLl9oaXRFT0YgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl90eXBlID09PSBUb2tlbi5JTlZBTElEX1RZUEUpIHtcblx0XHRcdFx0XHR0aGlzLl90eXBlID0gdHR5cGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3R5cGUgPT09IExleGVyLlNLSVApIHtcblx0XHRcdFx0XHRjb250aW51ZU91dGVyID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fdHlwZSAhPT0gTGV4ZXIuTU9SRSkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29udGludWVPdXRlcikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLl90b2tlbiA9PT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLmVtaXQoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLl90b2tlbjtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0Ly8gbWFrZSBzdXJlIHdlIHJlbGVhc2UgbWFya2VyIGFmdGVyIG1hdGNoIG9yXG5cdFx0Ly8gdW5idWZmZXJlZCBjaGFyIHN0cmVhbSB3aWxsIGtlZXAgYnVmZmVyaW5nXG5cdFx0dGhpcy5faW5wdXQucmVsZWFzZSh0b2tlblN0YXJ0TWFya2VyKTtcblx0fVxufTtcblxuLy8gSW5zdHJ1Y3QgdGhlIGxleGVyIHRvIHNraXAgY3JlYXRpbmcgYSB0b2tlbiBmb3IgY3VycmVudCBsZXhlciBydWxlXG4vLyBhbmQgbG9vayBmb3IgYW5vdGhlciB0b2tlbi4gbmV4dFRva2VuKCkga25vd3MgdG8ga2VlcCBsb29raW5nIHdoZW5cbi8vIGEgbGV4ZXIgcnVsZSBmaW5pc2hlcyB3aXRoIHRva2VuIHNldCB0byBTS0lQX1RPS0VOLiBSZWNhbGwgdGhhdFxuLy8gaWYgdG9rZW49PW51bGwgYXQgZW5kIG9mIGFueSB0b2tlbiBydWxlLCBpdCBjcmVhdGVzIG9uZSBmb3IgeW91XG4vLyBhbmQgZW1pdHMgaXQuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLl90eXBlID0gTGV4ZXIuU0tJUDtcbn07XG5cbkxleGVyLnByb3RvdHlwZS5tb3JlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX3R5cGUgPSBMZXhlci5NT1JFO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLm1vZGUgPSBmdW5jdGlvbihtKSB7XG5cdHRoaXMuX21vZGUgPSBtO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLnB1c2hNb2RlID0gZnVuY3Rpb24obSkge1xuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwdXNoTW9kZSBcIiArIG0pO1xuXHR9XG5cdHRoaXMuX21vZGVTdGFjay5wdXNoKHRoaXMuX21vZGUpO1xuXHR0aGlzLm1vZGUobSk7XG59O1xuXG5MZXhlci5wcm90b3R5cGUucG9wTW9kZSA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fbW9kZVN0YWNrLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IFwiRW1wdHkgU3RhY2tcIjtcblx0fVxuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwb3BNb2RlIGJhY2sgdG8gXCIgKyB0aGlzLl9tb2RlU3RhY2suc2xpY2UoMCwgLTEpKTtcblx0fVxuXHR0aGlzLm1vZGUodGhpcy5fbW9kZVN0YWNrLnBvcCgpKTtcblx0cmV0dXJuIHRoaXMuX21vZGU7XG59O1xuXG4vLyBTZXQgdGhlIGNoYXIgc3RyZWFtIGFuZCByZXNldCB0aGUgbGV4ZXJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwiaW5wdXRTdHJlYW1cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5wdXQ7XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHRcdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIHRoaXMuX2lucHV0IF07XG5cdFx0dGhpcy5yZXNldCgpO1xuXHRcdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cdFx0dGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciA9IFsgdGhpcywgdGhpcy5faW5wdXQgXTtcblx0fVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwic291cmNlTmFtZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uIHNvdXJjZU5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG5cdH1cbn0pO1xuXG4vLyBCeSBkZWZhdWx0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgZW1pdHMgcGVyIG5leHRUb2tlbiBpbnZvY2F0aW9uXG4vLyBmb3IgZWZmaWNpZW5jeSByZWFzb25zLiBTdWJjbGFzcyBhbmQgb3ZlcnJpZGUgdGhpcyBtZXRob2QsIG5leHRUb2tlbixcbi8vIGFuZCBnZXRUb2tlbiAodG8gcHVzaCB0b2tlbnMgaW50byBhIGxpc3QgYW5kIHB1bGwgZnJvbSB0aGF0IGxpc3Rcbi8vIHJhdGhlciB0aGFuIGEgc2luZ2xlIHZhcmlhYmxlIGFzIHRoaXMgaW1wbGVtZW50YXRpb24gZG9lcykuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuZW1pdFRva2VuID0gZnVuY3Rpb24odG9rZW4pIHtcblx0dGhpcy5fdG9rZW4gPSB0b2tlbjtcbn07XG5cbi8vIFRoZSBzdGFuZGFyZCBtZXRob2QgY2FsbGVkIHRvIGF1dG9tYXRpY2FsbHkgZW1pdCBhIHRva2VuIGF0IHRoZVxuLy8gb3V0ZXJtb3N0IGxleGljYWwgcnVsZS4gVGhlIHRva2VuIG9iamVjdCBzaG91bGQgcG9pbnQgaW50byB0aGVcbi8vIGNoYXIgYnVmZmVyIHN0YXJ0Li5zdG9wLiBJZiB0aGVyZSBpcyBhIHRleHQgb3ZlcnJpZGUgaW4gJ3RleHQnLFxuLy8gdXNlIHRoYXQgdG8gc2V0IHRoZSB0b2tlbidzIHRleHQuIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGVtaXRcbi8vIGN1c3RvbSBUb2tlbiBvYmplY3RzIG9yIHByb3ZpZGUgYSBuZXcgZmFjdG9yeS5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gdGhpcy5fZmFjdG9yeS5jcmVhdGUodGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciwgdGhpcy5fdHlwZSxcblx0XHRcdHRoaXMuX3RleHQsIHRoaXMuX2NoYW5uZWwsIHRoaXMuX3Rva2VuU3RhcnRDaGFySW5kZXgsIHRoaXNcblx0XHRcdFx0XHQuZ2V0Q2hhckluZGV4KCkgLSAxLCB0aGlzLl90b2tlblN0YXJ0TGluZSxcblx0XHRcdHRoaXMuX3Rva2VuU3RhcnRDb2x1bW4pO1xuXHR0aGlzLmVtaXRUb2tlbih0KTtcblx0cmV0dXJuIHQ7XG59O1xuXG5MZXhlci5wcm90b3R5cGUuZW1pdEVPRiA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgY3BvcyA9IHRoaXMuY29sdW1uO1xuXHR2YXIgbHBvcyA9IHRoaXMubGluZTtcblx0dmFyIGVvZiA9IHRoaXMuX2ZhY3RvcnkuY3JlYXRlKHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIsIFRva2VuLkVPRixcblx0XHRcdG51bGwsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCwgdGhpcy5faW5wdXQuaW5kZXgsXG5cdFx0XHR0aGlzLl9pbnB1dC5pbmRleCAtIDEsIGxwb3MsIGNwb3MpO1xuXHR0aGlzLmVtaXRUb2tlbihlb2YpO1xuXHRyZXR1cm4gZW9mO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudHlwZTtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24odHlwZSkge1xuXHRcdHRoaXMuX3R5cGUgPSB0eXBlO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJsaW5lXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludGVycC5saW5lO1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbihsaW5lKSB7XG5cdFx0dGhpcy5faW50ZXJwLmxpbmUgPSBsaW5lO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJjb2x1bW5cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmNvbHVtbjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oY29sdW1uKSB7XG5cdFx0dGhpcy5faW50ZXJwLmNvbHVtbiA9IGNvbHVtbjtcblx0fVxufSk7XG5cblxuLy8gV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIG9mIGxvb2thaGVhZD8vLy9cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFySW5kZXggPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LmluZGV4O1xufTtcblxuLy8gUmV0dXJuIHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbiBvciBhbnkgdGV4dCBvdmVycmlkZS5cbi8vU2V0IHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoaXMgdG9rZW47IGl0IHdpcGVzIGFueSBwcmV2aW91cyBjaGFuZ2VzIHRvIHRoZSB0ZXh0LlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmdldFRleHQodGhpcy5faW5wdXQpO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIFRva2VuIG9iamVjdHMgaW4gaW5wdXQgY2hhciBzdHJlYW0uXG4vLyBGb3JjZXMgbG9hZCBvZiBhbGwgdG9rZW5zLiBEb2VzIG5vdCBpbmNsdWRlIEVPRiB0b2tlbi5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5nZXRBbGxUb2tlbnMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRva2VucyA9IFtdO1xuXHR2YXIgdCA9IHRoaXMubmV4dFRva2VuKCk7XG5cdHdoaWxlICh0LnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRva2Vucy5wdXNoKHQpO1xuXHRcdHQgPSB0aGlzLm5leHRUb2tlbigpO1xuXHR9XG5cdHJldHVybiB0b2tlbnM7XG59O1xuXG5MZXhlci5wcm90b3R5cGUubm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24oZSkge1xuXHR2YXIgc3RhcnQgPSB0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4O1xuXHR2YXIgc3RvcCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHR2YXIgdGV4dCA9IHRoaXMuX2lucHV0LmdldFRleHQoc3RhcnQsIHN0b3ApO1xuXHR2YXIgbXNnID0gXCJ0b2tlbiByZWNvZ25pdGlvbiBlcnJvciBhdDogJ1wiICsgdGhpcy5nZXRFcnJvckRpc3BsYXkodGV4dCkgKyBcIidcIjtcblx0dmFyIGxpc3RlbmVyID0gdGhpcy5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKTtcblx0bGlzdGVuZXIuc3ludGF4RXJyb3IodGhpcywgbnVsbCwgdGhpcy5fdG9rZW5TdGFydExpbmUsXG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uLCBtc2csIGUpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHMpIHtcblx0dmFyIGQgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZC5wdXNoKHNbaV0pO1xuXHR9XG5cdHJldHVybiBkLmpvaW4oJycpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheUZvckNoYXIgPSBmdW5jdGlvbihjKSB7XG5cdGlmIChjLmNoYXJDb2RlQXQoMCkgPT09IFRva2VuLkVPRikge1xuXHRcdHJldHVybiBcIjxFT0Y+XCI7XG5cdH0gZWxzZSBpZiAoYyA9PT0gJ1xcbicpIHtcblx0XHRyZXR1cm4gXCJcXFxcblwiO1xuXHR9IGVsc2UgaWYgKGMgPT09ICdcXHQnKSB7XG5cdFx0cmV0dXJuIFwiXFxcXHRcIjtcblx0fSBlbHNlIGlmIChjID09PSAnXFxyJykge1xuXHRcdHJldHVybiBcIlxcXFxyXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGM7XG5cdH1cbn07XG5cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFyRXJyb3JEaXNwbGF5ID0gZnVuY3Rpb24oYykge1xuXHRyZXR1cm4gXCInXCIgKyB0aGlzLmdldEVycm9yRGlzcGxheUZvckNoYXIoYykgKyBcIidcIjtcbn07XG5cbi8vIExleGVycyBjYW4gbm9ybWFsbHkgbWF0Y2ggYW55IGNoYXIgaW4gaXQncyB2b2NhYnVsYXJ5IGFmdGVyIG1hdGNoaW5nXG4vLyBhIHRva2VuLCBzbyBkbyB0aGUgZWFzeSB0aGluZyBhbmQganVzdCBraWxsIGEgY2hhcmFjdGVyIGFuZCBob3BlXG4vLyBpdCBhbGwgd29ya3Mgb3V0LiBZb3UgY2FuIGluc3RlYWQgdXNlIHRoZSBydWxlIGludm9jYXRpb24gc3RhY2tcbi8vIHRvIGRvIHNvcGhpc3RpY2F0ZWQgZXJyb3IgcmVjb3ZlcnkgaWYgeW91IGFyZSBpbiBhIGZyYWdtZW50IHJ1bGUuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlKSB7XG5cdGlmICh0aGlzLl9pbnB1dC5MQSgxKSAhPT0gVG9rZW4uRU9GKSB7XG5cdFx0aWYgKHJlIGluc3RhbmNlb2YgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbikge1xuXHRcdFx0Ly8gc2tpcCBhIGNoYXIgYW5kIHRyeSBhZ2FpblxuXHRcdFx0dGhpcy5faW50ZXJwLmNvbnN1bWUodGhpcy5faW5wdXQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUT0RPOiBEbyB3ZSBsb3NlIGNoYXJhY3RlciBvciBsaW5lIHBvc2l0aW9uIGluZm9ybWF0aW9uP1xuXHRcdFx0dGhpcy5faW5wdXQuY29uc3VtZSgpO1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0cy5MZXhlciA9IExleGVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgUGFyc2VUcmVlTGlzdGVuZXIgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlBhcnNlVHJlZUxpc3RlbmVyO1xudmFyIFJlY29nbml6ZXIgPSByZXF1aXJlKCcuL1JlY29nbml6ZXInKS5SZWNvZ25pemVyO1xudmFyIERlZmF1bHRFcnJvclN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9lcnJvci9FcnJvclN0cmF0ZWd5JykuRGVmYXVsdEVycm9yU3RyYXRlZ3k7XG52YXIgQVRORGVzZXJpYWxpemVyID0gcmVxdWlyZSgnLi9hdG4vQVRORGVzZXJpYWxpemVyJykuQVRORGVzZXJpYWxpemVyO1xudmFyIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMgPSByZXF1aXJlKCcuL2F0bi9BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zJykuQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbnZhciBUZXJtaW5hbE5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlRlcm1pbmFsTm9kZTtcbnZhciBFcnJvck5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLkVycm9yTm9kZTtcblxuZnVuY3Rpb24gVHJhY2VMaXN0ZW5lcihwYXJzZXIpIHtcblx0UGFyc2VUcmVlTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRyYWNlTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUpO1xuVHJhY2VMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFjZUxpc3RlbmVyO1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKGN0eCkge1xuXHRjb25zb2xlLmxvZyhcImVudGVyICAgXCIgKyB0aGlzLnBhcnNlci5ydWxlTmFtZXNbY3R4LnJ1bGVJbmRleF0gKyBcIiwgTFQoMSk9XCIgKyB0aGlzLnBhcnNlci5faW5wdXQuTFQoMSkudGV4dCk7XG59O1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24oIG5vZGUpIHtcblx0Y29uc29sZS5sb2coXCJjb25zdW1lIFwiICsgbm9kZS5zeW1ib2wgKyBcIiBydWxlIFwiICsgdGhpcy5wYXJzZXIucnVsZU5hbWVzW3RoaXMucGFyc2VyLl9jdHgucnVsZUluZGV4XSk7XG59O1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXZlcnlSdWxlID0gZnVuY3Rpb24oY3R4KSB7XG5cdGNvbnNvbGUubG9nKFwiZXhpdCAgICBcIiArIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1tjdHgucnVsZUluZGV4XSArIFwiLCBMVCgxKT1cIiArIHRoaXMucGFyc2VyLl9pbnB1dC5MVCgxKS50ZXh0KTtcbn07XG5cbi8vIHRoaXMgaXMgYWxsIHRoZSBwYXJzaW5nIHN1cHBvcnQgY29kZSBlc3NlbnRpYWxseTsgbW9zdCBvZiBpdCBpcyBlcnJvclxuLy8gcmVjb3Zlcnkgc3R1ZmYuLy9cbmZ1bmN0aW9uIFBhcnNlcihpbnB1dCkge1xuXHRSZWNvZ25pemVyLmNhbGwodGhpcyk7XG5cdC8vIFRoZSBpbnB1dCBzdHJlYW0uXG5cdHRoaXMuX2lucHV0ID0gbnVsbDtcblx0Ly8gVGhlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5IGZvciB0aGUgcGFyc2VyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhIG5ld1xuXHQvLyBpbnN0YW5jZSBvZiB7QGxpbmsgRGVmYXVsdEVycm9yU3RyYXRlZ3l9LlxuXHR0aGlzLl9lcnJIYW5kbGVyID0gbmV3IERlZmF1bHRFcnJvclN0cmF0ZWd5KCk7XG5cdHRoaXMuX3ByZWNlZGVuY2VTdGFjayA9IFtdO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sucHVzaCgwKTtcblx0Ly8gVGhlIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dH0gb2JqZWN0IGZvciB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBydWxlLlxuXHQvLyB0aGlzIGlzIGFsd2F5cyBub24tbnVsbCBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy5cblx0dGhpcy5fY3R4ID0gbnVsbDtcblx0Ly8gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBwYXJzZXIgc2hvdWxkIGNvbnN0cnVjdCBhIHBhcnNlIHRyZWUgZHVyaW5nXG5cdC8vIHRoZSBwYXJzaW5nIHByb2Nlc3MuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHtAY29kZSB0cnVlfS5cblx0dGhpcy5idWlsZFBhcnNlVHJlZXMgPSB0cnVlO1xuXHQvLyBXaGVuIHtAbGluayAvL3NldFRyYWNlfXtAY29kZSAodHJ1ZSl9IGlzIGNhbGxlZCwgYSByZWZlcmVuY2UgdG8gdGhlXG5cdC8vIHtAbGluayBUcmFjZUxpc3RlbmVyfSBpcyBzdG9yZWQgaGVyZSBzbyBpdCBjYW4gYmUgZWFzaWx5IHJlbW92ZWQgaW4gYVxuXHQvLyBsYXRlciBjYWxsIHRvIHtAbGluayAvL3NldFRyYWNlfXtAY29kZSAoZmFsc2UpfS4gVGhlIGxpc3RlbmVyIGl0c2VsZiBpc1xuXHQvLyBpbXBsZW1lbnRlZCBhcyBhIHBhcnNlciBsaXN0ZW5lciBzbyB0aGlzIGZpZWxkIGlzIG5vdCBkaXJlY3RseSB1c2VkIGJ5XG5cdC8vIG90aGVyIHBhcnNlciBtZXRob2RzLlxuXHR0aGlzLl90cmFjZXIgPSBudWxsO1xuXHQvLyBUaGUgbGlzdCBvZiB7QGxpbmsgUGFyc2VUcmVlTGlzdGVuZXJ9IGxpc3RlbmVycyByZWdpc3RlcmVkIHRvIHJlY2VpdmVcblx0Ly8gZXZlbnRzIGR1cmluZyB0aGUgcGFyc2UuXG5cdHRoaXMuX3BhcnNlTGlzdGVuZXJzID0gbnVsbDtcblx0Ly8gVGhlIG51bWJlciBvZiBzeW50YXggZXJyb3JzIHJlcG9ydGVkIGR1cmluZyBwYXJzaW5nLiB0aGlzIHZhbHVlIGlzXG5cdC8vIGluY3JlbWVudGVkIGVhY2ggdGltZSB7QGxpbmsgLy9ub3RpZnlFcnJvckxpc3RlbmVyc30gaXMgY2FsbGVkLlxuXHR0aGlzLl9zeW50YXhFcnJvcnMgPSAwO1xuXHR0aGlzLnNldElucHV0U3RyZWFtKGlucHV0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml6ZXIucHJvdG90eXBlKTtcblBhcnNlci5wcm90b3R5cGUuY29udHJ1Y3RvciA9IFBhcnNlcjtcblxuLy8gdGhpcyBmaWVsZCBtYXBzIGZyb20gdGhlIHNlcmlhbGl6ZWQgQVROIHN0cmluZyB0byB0aGUgZGVzZXJpYWxpemVkIHtAbGlua1xuLy8gQVROfSB3aXRoXG4vLyBieXBhc3MgYWx0ZXJuYXRpdmVzLlxuLy9cbi8vIEBzZWUgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy8vaXNHZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucygpXG4vL1xuUGFyc2VyLmJ5cGFzc0FsdHNBdG5DYWNoZSA9IHt9O1xuXG4vLyByZXNldCB0aGUgcGFyc2VyJ3Mgc3RhdGUvL1xuUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgIT09IG51bGwpIHtcblx0XHR0aGlzLl9pbnB1dC5zZWVrKDApO1xuXHR9XG5cdHRoaXMuX2VyckhhbmRsZXIucmVzZXQodGhpcyk7XG5cdHRoaXMuX2N0eCA9IG51bGw7XG5cdHRoaXMuX3N5bnRheEVycm9ycyA9IDA7XG5cdHRoaXMuc2V0VHJhY2UoZmFsc2UpO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sgPSBbXTtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnB1c2goMCk7XG5cdGlmICh0aGlzLl9pbnRlcnAgIT09IG51bGwpIHtcblx0XHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcblx0fVxufTtcblxuLy8gTWF0Y2ggY3VycmVudCBpbnB1dCBzeW1ib2wgYWdhaW5zdCB7QGNvZGUgdHR5cGV9LiBJZiB0aGUgc3ltYm9sIHR5cGVcbi8vIG1hdGNoZXMsIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlcG9ydE1hdGNofSBhbmQge0BsaW5rIC8vY29uc3VtZX0gYXJlXG4vLyBjYWxsZWQgdG8gY29tcGxldGUgdGhlIG1hdGNoIHByb2Nlc3MuXG4vL1xuLy8gPHA+SWYgdGhlIHN5bWJvbCB0eXBlIGRvZXMgbm90IG1hdGNoLFxuLy8ge0BsaW5rIEFOVExSRXJyb3JTdHJhdGVneS8vcmVjb3ZlcklubGluZX0gaXMgY2FsbGVkIG9uIHRoZSBjdXJyZW50IGVycm9yXG4vLyBzdHJhdGVneSB0byBhdHRlbXB0IHJlY292ZXJ5LiBJZiB7QGxpbmsgLy9nZXRCdWlsZFBhcnNlVHJlZX0gaXNcbi8vIHtAY29kZSB0cnVlfSBhbmQgdGhlIHRva2VuIGluZGV4IG9mIHRoZSBzeW1ib2wgcmV0dXJuZWQgYnlcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIC0xLCB0aGUgc3ltYm9sIGlzIGFkZGVkIHRvXG4vLyB0aGUgcGFyc2UgdHJlZSBieSBjYWxsaW5nIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vYWRkRXJyb3JOb2RlfS48L3A+XG4vL1xuLy8gQHBhcmFtIHR0eXBlIHRoZSB0b2tlbiB0eXBlIHRvIG1hdGNoXG4vLyBAcmV0dXJuIHRoZSBtYXRjaGVkIHN5bWJvbFxuLy8gQHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBpbnB1dCBzeW1ib2wgZGlkIG5vdCBtYXRjaFxuLy8ge0Bjb2RlIHR0eXBlfSBhbmQgdGhlIGVycm9yIHN0cmF0ZWd5IGNvdWxkIG5vdCByZWNvdmVyIGZyb20gdGhlXG4vLyBtaXNtYXRjaGVkIHN5bWJvbFxuXG5QYXJzZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24odHR5cGUpIHtcblx0dmFyIHQgPSB0aGlzLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpZiAodC50eXBlID09PSB0dHlwZSkge1xuXHRcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG5cdFx0dGhpcy5jb25zdW1lKCk7XG5cdH0gZWxzZSB7XG5cdFx0dCA9IHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcblx0XHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMgJiYgdC50b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Ly8gd2UgbXVzdCBoYXZlIGNvbmp1cmVkIHVwIGEgbmV3IHRva2VuIGR1cmluZyBzaW5nbGUgdG9rZW5cblx0XHRcdC8vIGluc2VydGlvblxuXHRcdFx0Ly8gaWYgaXQncyBub3QgdGhlIGN1cnJlbnQgc3ltYm9sXG5cdFx0XHR0aGlzLl9jdHguYWRkRXJyb3JOb2RlKHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdDtcbn07XG4vLyBNYXRjaCBjdXJyZW50IGlucHV0IHN5bWJvbCBhcyBhIHdpbGRjYXJkLiBJZiB0aGUgc3ltYm9sIHR5cGUgbWF0Y2hlc1xuLy8gKGkuZS4gaGFzIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDApLCB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZXBvcnRNYXRjaH1cbi8vIGFuZCB7QGxpbmsgLy9jb25zdW1lfSBhcmUgY2FsbGVkIHRvIGNvbXBsZXRlIHRoZSBtYXRjaCBwcm9jZXNzLlxuLy9cbi8vIDxwPklmIHRoZSBzeW1ib2wgdHlwZSBkb2VzIG5vdCBtYXRjaCxcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIGNhbGxlZCBvbiB0aGUgY3VycmVudCBlcnJvclxuLy8gc3RyYXRlZ3kgdG8gYXR0ZW1wdCByZWNvdmVyeS4gSWYge0BsaW5rIC8vZ2V0QnVpbGRQYXJzZVRyZWV9IGlzXG4vLyB7QGNvZGUgdHJ1ZX0gYW5kIHRoZSB0b2tlbiBpbmRleCBvZiB0aGUgc3ltYm9sIHJldHVybmVkIGJ5XG4vLyB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZWNvdmVySW5saW5lfSBpcyAtMSwgdGhlIHN5bWJvbCBpcyBhZGRlZCB0b1xuLy8gdGhlIHBhcnNlIHRyZWUgYnkgY2FsbGluZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZEVycm9yTm9kZX0uPC9wPlxuLy9cbi8vIEByZXR1cm4gdGhlIG1hdGNoZWQgc3ltYm9sXG4vLyBAdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIGlmIHRoZSBjdXJyZW50IGlucHV0IHN5bWJvbCBkaWQgbm90IG1hdGNoXG4vLyBhIHdpbGRjYXJkIGFuZCB0aGUgZXJyb3Igc3RyYXRlZ3kgY291bGQgbm90IHJlY292ZXIgZnJvbSB0aGUgbWlzbWF0Y2hlZFxuLy8gc3ltYm9sXG5cblBhcnNlci5wcm90b3R5cGUubWF0Y2hXaWxkY2FyZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdCA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlmICh0LnR5cGUgPiAwKSB7XG5cdFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcblx0XHR0aGlzLmNvbnN1bWUoKTtcblx0fSBlbHNlIHtcblx0XHR0ID0gdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuXHRcdGlmICh0aGlzLl9idWlsZFBhcnNlVHJlZXMgJiYgdC50b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Ly8gd2UgbXVzdCBoYXZlIGNvbmp1cmVkIHVwIGEgbmV3IHRva2VuIGR1cmluZyBzaW5nbGUgdG9rZW5cblx0XHRcdC8vIGluc2VydGlvblxuXHRcdFx0Ly8gaWYgaXQncyBub3QgdGhlIGN1cnJlbnQgc3ltYm9sXG5cdFx0XHR0aGlzLl9jdHguYWRkRXJyb3JOb2RlKHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuZ2V0UGFyc2VMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX3BhcnNlTGlzdGVuZXJzIHx8IFtdO1xufTtcblxuLy8gUmVnaXN0ZXJzIHtAY29kZSBsaXN0ZW5lcn0gdG8gcmVjZWl2ZSBldmVudHMgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuXG4vL1xuLy8gPHA+VG8gc3VwcG9ydCBvdXRwdXQtcHJlc2VydmluZyBncmFtbWFyIHRyYW5zZm9ybWF0aW9ucyAoaW5jbHVkaW5nIGJ1dCBub3Rcbi8vIGxpbWl0ZWQgdG8gbGVmdC1yZWN1cnNpb24gcmVtb3ZhbCwgYXV0b21hdGVkIGxlZnQtZmFjdG9yaW5nLCBhbmRcbi8vIG9wdGltaXplZCBjb2RlIGdlbmVyYXRpb24pLCBjYWxscyB0byBsaXN0ZW5lciBtZXRob2RzIGR1cmluZyB0aGUgcGFyc2Vcbi8vIG1heSBkaWZmZXIgc3Vic3RhbnRpYWxseSBmcm9tIGNhbGxzIG1hZGUgYnlcbi8vIHtAbGluayBQYXJzZVRyZWVXYWxrZXIvL0RFRkFVTFR9IHVzZWQgYWZ0ZXIgdGhlIHBhcnNlIGlzIGNvbXBsZXRlLiBJblxuLy8gcGFydGljdWxhciwgcnVsZSBlbnRyeSBhbmQgZXhpdCBldmVudHMgbWF5IG9jY3VyIGluIGEgZGlmZmVyZW50IG9yZGVyXG4vLyBkdXJpbmcgdGhlIHBhcnNlIHRoYW4gYWZ0ZXIgdGhlIHBhcnNlci4gSW4gYWRkaXRpb24sIGNhbGxzIHRvIGNlcnRhaW5cbi8vIHJ1bGUgZW50cnkgbWV0aG9kcyBtYXkgYmUgb21pdHRlZC48L3A+XG4vL1xuLy8gPHA+V2l0aCB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGV4Y2VwdGlvbnMsIGNhbGxzIHRvIGxpc3RlbmVyIGV2ZW50cyBhcmVcbi8vIDxlbT5kZXRlcm1pbmlzdGljPC9lbT4sIGkuZS4gZm9yIGlkZW50aWNhbCBpbnB1dCB0aGUgY2FsbHMgdG8gbGlzdGVuZXJcbi8vIG1ldGhvZHMgd2lsbCBiZSB0aGUgc2FtZS48L3A+XG4vL1xuLy8gPHVsPlxuLy8gPGxpPkFsdGVyYXRpb25zIHRvIHRoZSBncmFtbWFyIHVzZWQgdG8gZ2VuZXJhdGUgY29kZSBtYXkgY2hhbmdlIHRoZVxuLy8gYmVoYXZpb3Igb2YgdGhlIGxpc3RlbmVyIGNhbGxzLjwvbGk+XG4vLyA8bGk+QWx0ZXJhdGlvbnMgdG8gdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHBhc3NlZCB0byBBTlRMUiA0IHdoZW5cbi8vIGdlbmVyYXRpbmcgdGhlIHBhcnNlciBtYXkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgbGlzdGVuZXIgY2FsbHMuPC9saT5cbi8vIDxsaT5DaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgQU5UTFIgVG9vbCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwYXJzZXJcbi8vIG1heSBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBsaXN0ZW5lciBjYWxscy48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIGFkZFxuLy9cbi8vIEB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYge0Bjb2RlfSBsaXN0ZW5lciBpcyB7QGNvZGUgbnVsbH1cbi8vXG5QYXJzZXIucHJvdG90eXBlLmFkZFBhcnNlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRpZiAobGlzdGVuZXIgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcImxpc3RlbmVyXCI7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzID09PSBudWxsKSB7XG5cdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBbXTtcblx0fVxuXHR0aGlzLl9wYXJzZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbn07XG5cbi8vXG4vLyBSZW1vdmUge0Bjb2RlIGxpc3RlbmVyfSBmcm9tIHRoZSBsaXN0IG9mIHBhcnNlIGxpc3RlbmVycy5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgbGlzdGVuZXJ9IGlzIHtAY29kZSBudWxsfSBvciBoYXMgbm90IGJlZW4gYWRkZWQgYXMgYSBwYXJzZVxuLy8gbGlzdGVuZXIsIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy48L3A+XG4vLyBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIHJlbW92ZVxuLy9cblBhcnNlci5wcm90b3R5cGUucmVtb3ZlUGFyc2VMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuXHRcdHZhciBpZHggPSB0aGlzLl9wYXJzZUxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblx0XHRpZiAoaWR4ID49IDApIHtcblx0XHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLl9wYXJzZUxpc3RlbmVycyA9IG51bGw7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBSZW1vdmUgYWxsIHBhcnNlIGxpc3RlbmVycy5cblBhcnNlci5wcm90b3R5cGUucmVtb3ZlUGFyc2VMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBudWxsO1xufTtcblxuLy8gTm90aWZ5IGFueSBwYXJzZSBsaXN0ZW5lcnMgb2YgYW4gZW50ZXIgcnVsZSBldmVudC5cblBhcnNlci5wcm90b3R5cGUudHJpZ2dlckVudGVyUnVsZUV2ZW50ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0bGlzdGVuZXIuZW50ZXJFdmVyeVJ1bGUoY3R4KTtcblx0XHRcdGN0eC5lbnRlclJ1bGUobGlzdGVuZXIpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG4vL1xuLy8gTm90aWZ5IGFueSBwYXJzZSBsaXN0ZW5lcnMgb2YgYW4gZXhpdCBydWxlIGV2ZW50LlxuLy9cbi8vIEBzZWUgLy9hZGRQYXJzZUxpc3RlbmVyXG4vL1xuUGFyc2VyLnByb3RvdHlwZS50cmlnZ2VyRXhpdFJ1bGVFdmVudCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHQvLyByZXZlcnNlIG9yZGVyIHdhbGsgb2YgbGlzdGVuZXJzXG4gICAgICAgIHZhciBjdHggPSB0aGlzLl9jdHg7XG5cdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMuc2xpY2UoMCkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0Y3R4LmV4aXRSdWxlKGxpc3RlbmVyKTtcblx0XHRcdGxpc3RlbmVyLmV4aXRFdmVyeVJ1bGUoY3R4KTtcblx0XHR9KTtcblx0fVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRUb2tlbkZhY3RvcnkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LnRva2VuU291cmNlLl9mYWN0b3J5O1xufTtcblxuLy8gVGVsbCBvdXIgdG9rZW4gc291cmNlIGFuZCBlcnJvciBzdHJhdGVneSBhYm91dCBhIG5ldyB3YXkgdG8gY3JlYXRlIHRva2Vucy4vL1xuUGFyc2VyLnByb3RvdHlwZS5zZXRUb2tlbkZhY3RvcnkgPSBmdW5jdGlvbihmYWN0b3J5KSB7XG5cdHRoaXMuX2lucHV0LnRva2VuU291cmNlLl9mYWN0b3J5ID0gZmFjdG9yeTtcbn07XG5cbi8vIFRoZSBBVE4gd2l0aCBieXBhc3MgYWx0ZXJuYXRpdmVzIGlzIGV4cGVuc2l2ZSB0byBjcmVhdGUgc28gd2UgY3JlYXRlIGl0XG4vLyBsYXppbHkuXG4vL1xuLy8gQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBwYXJzZXIgZG9lcyBub3Rcbi8vIGltcGxlbWVudCB0aGUge0BsaW5rIC8vZ2V0U2VyaWFsaXplZEFUTigpfSBtZXRob2QuXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRBVE5XaXRoQnlwYXNzQWx0cyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2VyaWFsaXplZEF0biA9IHRoaXMuZ2V0U2VyaWFsaXplZEFUTigpO1xuXHRpZiAoc2VyaWFsaXplZEF0biA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhlIGN1cnJlbnQgcGFyc2VyIGRvZXMgbm90IHN1cHBvcnQgYW4gQVROIHdpdGggYnlwYXNzIGFsdGVybmF0aXZlcy5cIjtcblx0fVxuXHR2YXIgcmVzdWx0ID0gdGhpcy5ieXBhc3NBbHRzQXRuQ2FjaGVbc2VyaWFsaXplZEF0bl07XG5cdGlmIChyZXN1bHQgPT09IG51bGwpIHtcblx0XHR2YXIgZGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IG5ldyBBVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zKCk7XG5cdFx0ZGVzZXJpYWxpemF0aW9uT3B0aW9ucy5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IHRydWU7XG5cdFx0cmVzdWx0ID0gbmV3IEFUTkRlc2VyaWFsaXplcihkZXNlcmlhbGl6YXRpb25PcHRpb25zKVxuXHRcdFx0XHQuZGVzZXJpYWxpemUoc2VyaWFsaXplZEF0bik7XG5cdFx0dGhpcy5ieXBhc3NBbHRzQXRuQ2FjaGVbc2VyaWFsaXplZEF0bl0gPSByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIFRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGdldHRpbmcgYSB0cmVlIHBhdHRlcm4uIEZvciBleGFtcGxlLCBoZXJlJ3MgYVxuLy8gc2FtcGxlIHVzZTpcbi8vXG4vLyA8cHJlPlxuLy8gUGFyc2VUcmVlIHQgPSBwYXJzZXIuZXhwcigpO1xuLy8gUGFyc2VUcmVlUGF0dGVybiBwID0gcGFyc2VyLmNvbXBpbGVQYXJzZVRyZWVQYXR0ZXJuKFwiJmx0O0lEJmd0OyswXCIsXG4vLyBNeVBhcnNlci5SVUxFX2V4cHIpO1xuLy8gUGFyc2VUcmVlTWF0Y2ggbSA9IHAubWF0Y2godCk7XG4vLyBTdHJpbmcgaWQgPSBtLmdldChcIklEXCIpO1xuLy8gPC9wcmU+XG5cbnZhciBMZXhlciA9IHJlcXVpcmUoJy4vTGV4ZXInKS5MZXhlcjtcblxuUGFyc2VyLnByb3RvdHlwZS5jb21waWxlUGFyc2VUcmVlUGF0dGVybiA9IGZ1bmN0aW9uKHBhdHRlcm4sIHBhdHRlcm5SdWxlSW5kZXgsIGxleGVyKSB7XG5cdGxleGVyID0gbGV4ZXIgfHwgbnVsbDtcblx0aWYgKGxleGVyID09PSBudWxsKSB7XG5cdFx0aWYgKHRoaXMuZ2V0VG9rZW5TdHJlYW0oKSAhPT0gbnVsbCkge1xuXHRcdFx0dmFyIHRva2VuU291cmNlID0gdGhpcy5nZXRUb2tlblN0cmVhbSgpLnRva2VuU291cmNlO1xuXHRcdFx0aWYgKHRva2VuU291cmNlIGluc3RhbmNlb2YgTGV4ZXIpIHtcblx0XHRcdFx0bGV4ZXIgPSB0b2tlblNvdXJjZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGxleGVyID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJQYXJzZXIgY2FuJ3QgZGlzY292ZXIgYSBsZXhlciB0byB1c2VcIjtcblx0fVxuXHR2YXIgbSA9IG5ldyBQYXJzZVRyZWVQYXR0ZXJuTWF0Y2hlcihsZXhlciwgdGhpcyk7XG5cdHJldHVybiBtLmNvbXBpbGUocGF0dGVybiwgcGF0dGVyblJ1bGVJbmRleCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmdldFRva2VuU3RyZWFtKCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLnNldElucHV0U3RyZWFtID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dGhpcy5zZXRUb2tlblN0cmVhbShpbnB1dCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFRva2VuU3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLl9pbnB1dDtcbn07XG5cbi8vIFNldCB0aGUgdG9rZW4gc3RyZWFtIGFuZCByZXNldCB0aGUgcGFyc2VyLi8vXG5QYXJzZXIucHJvdG90eXBlLnNldFRva2VuU3RyZWFtID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHR0aGlzLnJlc2V0KCk7XG5cdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG59O1xuXG4vLyBNYXRjaCBuZWVkcyB0byByZXR1cm4gdGhlIGN1cnJlbnQgaW5wdXQgc3ltYm9sLCB3aGljaCBnZXRzIHB1dFxuLy8gaW50byB0aGUgbGFiZWwgZm9yIHRoZSBhc3NvY2lhdGVkIHRva2VuIHJlZjsgZS5nLiwgeD1JRC5cbi8vXG5QYXJzZXIucHJvdG90eXBlLmdldEN1cnJlbnRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW5wdXQuTFQoMSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLm5vdGlmeUVycm9yTGlzdGVuZXJzID0gZnVuY3Rpb24obXNnLCBvZmZlbmRpbmdUb2tlbiwgZXJyKSB7XG5cdG9mZmVuZGluZ1Rva2VuID0gb2ZmZW5kaW5nVG9rZW4gfHwgbnVsbDtcblx0ZXJyID0gZXJyIHx8IG51bGw7XG5cdGlmIChvZmZlbmRpbmdUb2tlbiA9PT0gbnVsbCkge1xuXHRcdG9mZmVuZGluZ1Rva2VuID0gdGhpcy5nZXRDdXJyZW50VG9rZW4oKTtcblx0fVxuXHR0aGlzLl9zeW50YXhFcnJvcnMgKz0gMTtcblx0dmFyIGxpbmUgPSBvZmZlbmRpbmdUb2tlbi5saW5lO1xuXHR2YXIgY29sdW1uID0gb2ZmZW5kaW5nVG9rZW4uY29sdW1uO1xuXHR2YXIgbGlzdGVuZXIgPSB0aGlzLmdldEVycm9yTGlzdGVuZXJEaXNwYXRjaCgpO1xuXHRsaXN0ZW5lci5zeW50YXhFcnJvcih0aGlzLCBvZmZlbmRpbmdUb2tlbiwgbGluZSwgY29sdW1uLCBtc2csIGVycik7XG59O1xuXG4vL1xuLy8gQ29uc3VtZSBhbmQgcmV0dXJuIHRoZSB7QGxpbmtwbGFpbiAvL2dldEN1cnJlbnRUb2tlbiBjdXJyZW50IHN5bWJvbH0uXG4vL1xuLy8gPHA+RS5nLiwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBpbnB1dCB3aXRoIHtAY29kZSBBfSBiZWluZyB0aGUgY3VycmVudFxuLy8gbG9va2FoZWFkIHN5bWJvbCwgdGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgY3Vyc29yIHRvIHtAY29kZSBCfSBhbmQgcmV0dXJuc1xuLy8ge0Bjb2RlIEF9LjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gQSBCXG4vLyBeXG4vLyA8L3ByZT5cbi8vXG4vLyBJZiB0aGUgcGFyc2VyIGlzIG5vdCBpbiBlcnJvciByZWNvdmVyeSBtb2RlLCB0aGUgY29uc3VtZWQgc3ltYm9sIGlzIGFkZGVkXG4vLyB0byB0aGUgcGFyc2UgdHJlZSB1c2luZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZENoaWxkKFRva2VuKX0sIGFuZFxuLy8ge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyLy92aXNpdFRlcm1pbmFsfSBpcyBjYWxsZWQgb24gYW55IHBhcnNlIGxpc3RlbmVycy5cbi8vIElmIHRoZSBwYXJzZXIgPGVtPmlzPC9lbT4gaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZSwgdGhlIGNvbnN1bWVkIHN5bWJvbCBpc1xuLy8gYWRkZWQgdG8gdGhlIHBhcnNlIHRyZWUgdXNpbmdcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vYWRkRXJyb3JOb2RlKFRva2VuKX0sIGFuZFxuLy8ge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyLy92aXNpdEVycm9yTm9kZX0gaXMgY2FsbGVkIG9uIGFueSBwYXJzZVxuLy8gbGlzdGVuZXJzLlxuLy9cblBhcnNlci5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbyA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlmIChvLnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRoaXMuZ2V0SW5wdXRTdHJlYW0oKS5jb25zdW1lKCk7XG5cdH1cblx0dmFyIGhhc0xpc3RlbmVyID0gdGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwgJiYgdGhpcy5fcGFyc2VMaXN0ZW5lcnMubGVuZ3RoID4gMDtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzIHx8IGhhc0xpc3RlbmVyKSB7XG5cdFx0dmFyIG5vZGU7XG5cdFx0aWYgKHRoaXMuX2VyckhhbmRsZXIuaW5FcnJvclJlY292ZXJ5TW9kZSh0aGlzKSkge1xuXHRcdFx0bm9kZSA9IHRoaXMuX2N0eC5hZGRFcnJvck5vZGUobyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vZGUgPSB0aGlzLl9jdHguYWRkVG9rZW5Ob2RlKG8pO1xuXHRcdH1cbiAgICAgICAgbm9kZS5pbnZva2luZ1N0YXRlID0gdGhpcy5zdGF0ZTtcblx0XHRpZiAoaGFzTGlzdGVuZXIpIHtcblx0XHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0XHRpZiAobm9kZSBpbnN0YW5jZW9mIEVycm9yTm9kZSB8fCAobm9kZS5pc0Vycm9yTm9kZSAhPT0gdW5kZWZpbmVkICYmIG5vZGUuaXNFcnJvck5vZGUoKSkpIHtcblx0XHRcdFx0XHRsaXN0ZW5lci52aXNpdEVycm9yTm9kZShub2RlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRcdFx0bGlzdGVuZXIudmlzaXRUZXJtaW5hbChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5hZGRDb250ZXh0VG9QYXJzZVRyZWUgPSBmdW5jdGlvbigpIHtcblx0Ly8gYWRkIGN1cnJlbnQgY29udGV4dCB0byBwYXJlbnQgaWYgd2UgaGF2ZSBhIHBhcmVudFxuXHRpZiAodGhpcy5fY3R4LnBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdHRoaXMuX2N0eC5wYXJlbnRDdHguYWRkQ2hpbGQodGhpcy5fY3R4KTtcblx0fVxufTtcblxuLy8gQWx3YXlzIGNhbGxlZCBieSBnZW5lcmF0ZWQgcGFyc2VycyB1cG9uIGVudHJ5IHRvIGEgcnVsZS4gQWNjZXNzIGZpZWxkXG4vLyB7QGxpbmsgLy9fY3R4fSBnZXQgdGhlIGN1cnJlbnQgY29udGV4dC5cblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsb2NhbGN0eCwgc3RhdGUsIHJ1bGVJbmRleCkge1xuXHR0aGlzLnN0YXRlID0gc3RhdGU7XG5cdHRoaXMuX2N0eCA9IGxvY2FsY3R4O1xuXHR0aGlzLl9jdHguc3RhcnQgPSB0aGlzLl9pbnB1dC5MVCgxKTtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzKSB7XG5cdFx0dGhpcy5hZGRDb250ZXh0VG9QYXJzZVRyZWUoKTtcblx0fVxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFbnRlclJ1bGVFdmVudCgpO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX2N0eC5zdG9wID0gdGhpcy5faW5wdXQuTFQoLTEpO1xuXHQvLyB0cmlnZ2VyIGV2ZW50IG9uIF9jdHgsIGJlZm9yZSBpdCByZXZlcnRzIHRvIHBhcmVudFxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG5cdH1cblx0dGhpcy5zdGF0ZSA9IHRoaXMuX2N0eC5pbnZva2luZ1N0YXRlO1xuXHR0aGlzLl9jdHggPSB0aGlzLl9jdHgucGFyZW50Q3R4O1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlck91dGVyQWx0ID0gZnVuY3Rpb24obG9jYWxjdHgsIGFsdE51bSkge1xuICAgXHRsb2NhbGN0eC5zZXRBbHROdW1iZXIoYWx0TnVtKTtcblx0Ly8gaWYgd2UgaGF2ZSBuZXcgbG9jYWxjdHgsIG1ha2Ugc3VyZSB3ZSByZXBsYWNlIGV4aXN0aW5nIGN0eFxuXHQvLyB0aGF0IGlzIHByZXZpb3VzIGNoaWxkIG9mIHBhcnNlIHRyZWVcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzICYmIHRoaXMuX2N0eCAhPT0gbG9jYWxjdHgpIHtcblx0XHRpZiAodGhpcy5fY3R4LnBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fY3R4LnBhcmVudEN0eC5yZW1vdmVMYXN0Q2hpbGQoKTtcblx0XHRcdHRoaXMuX2N0eC5wYXJlbnRDdHguYWRkQ2hpbGQobG9jYWxjdHgpO1xuXHRcdH1cblx0fVxuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcbn07XG5cbi8vIEdldCB0aGUgcHJlY2VkZW5jZSBsZXZlbCBmb3IgdGhlIHRvcC1tb3N0IHByZWNlZGVuY2UgcnVsZS5cbi8vXG4vLyBAcmV0dXJuIFRoZSBwcmVjZWRlbmNlIGxldmVsIGZvciB0aGUgdG9wLW1vc3QgcHJlY2VkZW5jZSBydWxlLCBvciAtMSBpZlxuLy8gdGhlIHBhcnNlciBjb250ZXh0IGlzIG5vdCBuZXN0ZWQgd2l0aGluIGEgcHJlY2VkZW5jZSBydWxlLlxuXG5QYXJzZXIucHJvdG90eXBlLmdldFByZWNlZGVuY2UgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX3ByZWNlZGVuY2VTdGFjay5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gLTE7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ByZWNlZGVuY2VTdGFja1t0aGlzLl9wcmVjZWRlbmNlU3RhY2subGVuZ3RoLTFdO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmVudGVyUmVjdXJzaW9uUnVsZSA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBzdGF0ZSwgcnVsZUluZGV4LFxuXHRcdHByZWNlZGVuY2UpIHtcblx0dGhpcy5zdGF0ZSA9IHN0YXRlO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sucHVzaChwcmVjZWRlbmNlKTtcblx0dGhpcy5fY3R4ID0gbG9jYWxjdHg7XG5cdHRoaXMuX2N0eC5zdGFydCA9IHRoaXMuX2lucHV0LkxUKDEpO1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFbnRlclJ1bGVFdmVudCgpOyAvLyBzaW11bGF0ZXMgcnVsZSBlbnRyeSBmb3Jcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gbGVmdC1yZWN1cnNpdmUgcnVsZXNcblx0fVxufTtcblxuLy9cbi8vIExpa2Uge0BsaW5rIC8vZW50ZXJSdWxlfSBidXQgZm9yIHJlY3Vyc2l2ZSBydWxlcy5cblxuUGFyc2VyLnByb3RvdHlwZS5wdXNoTmV3UmVjdXJzaW9uQ29udGV4dCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBzdGF0ZSwgcnVsZUluZGV4KSB7XG5cdHZhciBwcmV2aW91cyA9IHRoaXMuX2N0eDtcblx0cHJldmlvdXMucGFyZW50Q3R4ID0gbG9jYWxjdHg7XG5cdHByZXZpb3VzLmludm9raW5nU3RhdGUgPSBzdGF0ZTtcblx0cHJldmlvdXMuc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblxuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcblx0dGhpcy5fY3R4LnN0YXJ0ID0gcHJldmlvdXMuc3RhcnQ7XG5cdGlmICh0aGlzLmJ1aWxkUGFyc2VUcmVlcykge1xuXHRcdHRoaXMuX2N0eC5hZGRDaGlsZChwcmV2aW91cyk7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsKSB7XG5cdFx0dGhpcy50cmlnZ2VyRW50ZXJSdWxlRXZlbnQoKTsgLy8gc2ltdWxhdGVzIHJ1bGUgZW50cnkgZm9yXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGxlZnQtcmVjdXJzaXZlIHJ1bGVzXG5cdH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUudW5yb2xsUmVjdXJzaW9uQ29udGV4dHMgPSBmdW5jdGlvbihwYXJlbnRDdHgpIHtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnBvcCgpO1xuXHR0aGlzLl9jdHguc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblx0dmFyIHJldEN0eCA9IHRoaXMuX2N0eDsgLy8gc2F2ZSBjdXJyZW50IGN0eCAocmV0dXJuIHZhbHVlKVxuXHQvLyB1bnJvbGwgc28gX2N0eCBpcyBhcyBpdCB3YXMgYmVmb3JlIGNhbGwgdG8gcmVjdXJzaXZlIG1ldGhvZFxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR3aGlsZSAodGhpcy5fY3R4ICE9PSBwYXJlbnRDdHgpIHtcblx0XHRcdHRoaXMudHJpZ2dlckV4aXRSdWxlRXZlbnQoKTtcblx0XHRcdHRoaXMuX2N0eCA9IHRoaXMuX2N0eC5wYXJlbnRDdHg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMuX2N0eCA9IHBhcmVudEN0eDtcblx0fVxuXHQvLyBob29rIGludG8gdHJlZVxuXHRyZXRDdHgucGFyZW50Q3R4ID0gcGFyZW50Q3R4O1xuXHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMgJiYgcGFyZW50Q3R4ICE9PSBudWxsKSB7XG5cdFx0Ly8gYWRkIHJldHVybiBjdHggaW50byBpbnZva2luZyBydWxlJ3MgdHJlZVxuXHRcdHBhcmVudEN0eC5hZGRDaGlsZChyZXRDdHgpO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldEludm9raW5nQ29udGV4dCA9IGZ1bmN0aW9uKHJ1bGVJbmRleCkge1xuXHR2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHR3aGlsZSAoY3R4ICE9PSBudWxsKSB7XG5cdFx0aWYgKGN0eC5ydWxlSW5kZXggPT09IHJ1bGVJbmRleCkge1xuXHRcdFx0cmV0dXJuIGN0eDtcblx0XHR9XG5cdFx0Y3R4ID0gY3R4LnBhcmVudEN0eDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUucHJlY3ByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcHJlY2VkZW5jZSkge1xuXHRyZXR1cm4gcHJlY2VkZW5jZSA+PSB0aGlzLl9wcmVjZWRlbmNlU3RhY2tbdGhpcy5fcHJlY2VkZW5jZVN0YWNrLmxlbmd0aC0xXTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuaW5Db250ZXh0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXHQvLyBUT0RPOiB1c2VmdWwgaW4gcGFyc2VyP1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHtAY29kZSBzeW1ib2x9IGNhbiBmb2xsb3cgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlXG4vLyBBVE4uIFRoZSBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcsIGJ1dCBpc1xuLy8gaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZSBjb21wbGV0ZSBjb250ZXh0LXNlbnNpdGl2ZSBmb2xsb3cgc2V0IGRvZXMgbm90XG4vLyBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgY29uc3RydWN0ZWQuXG4vL1xuLy8gPHByZT5cbi8vIHJldHVybiBnZXRFeHBlY3RlZFRva2VucygpLmNvbnRhaW5zKHN5bWJvbCk7XG4vLyA8L3ByZT5cbi8vXG4vLyBAcGFyYW0gc3ltYm9sIHRoZSBzeW1ib2wgdHlwZSB0byBjaGVja1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYge0Bjb2RlIHN5bWJvbH0gY2FuIGZvbGxvdyB0aGUgY3VycmVudCBzdGF0ZSBpblxuLy8gdGhlIEFUTiwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX0uXG5cblBhcnNlci5wcm90b3R5cGUuaXNFeHBlY3RlZFRva2VuID0gZnVuY3Rpb24oc3ltYm9sKSB7XG5cdHZhciBhdG4gPSB0aGlzLl9pbnRlcnAuYXRuO1xuXHR2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHR2YXIgcyA9IGF0bi5zdGF0ZXNbdGhpcy5zdGF0ZV07XG5cdHZhciBmb2xsb3dpbmcgPSBhdG4ubmV4dFRva2VucyhzKTtcblx0aWYgKGZvbGxvd2luZy5jb250YWlucyhzeW1ib2wpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0d2hpbGUgKGN0eCAhPT0gbnVsbCAmJiBjdHguaW52b2tpbmdTdGF0ZSA+PSAwICYmIGZvbGxvd2luZy5jb250YWlucyhUb2tlbi5FUFNJTE9OKSkge1xuXHRcdHZhciBpbnZva2luZ1N0YXRlID0gYXRuLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG5cdFx0dmFyIHJ0ID0gaW52b2tpbmdTdGF0ZS50cmFuc2l0aW9uc1swXTtcblx0XHRmb2xsb3dpbmcgPSBhdG4ubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG5cdFx0aWYgKGZvbGxvd2luZy5jb250YWlucyhzeW1ib2wpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y3R4ID0gY3R4LnBhcmVudEN0eDtcblx0fVxuXHRpZiAoZm9sbG93aW5nLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pICYmIHN5bWJvbCA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vLyBDb21wdXRlcyB0aGUgc2V0IG9mIGlucHV0IHN5bWJvbHMgd2hpY2ggY291bGQgZm9sbG93IHRoZSBjdXJyZW50IHBhcnNlclxuLy8gc3RhdGUgYW5kIGNvbnRleHQsIGFzIGdpdmVuIGJ5IHtAbGluayAvL2dldFN0YXRlfSBhbmQge0BsaW5rIC8vZ2V0Q29udGV4dH0sXG4vLyByZXNwZWN0aXZlbHkuXG4vL1xuLy8gQHNlZSBBVE4vL2dldEV4cGVjdGVkVG9rZW5zKGludCwgUnVsZUNvbnRleHQpXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW50ZXJwLmF0bi5nZXRFeHBlY3RlZFRva2Vucyh0aGlzLnN0YXRlLCB0aGlzLl9jdHgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2Vuc1dpdGhpbkN1cnJlbnRSdWxlID0gZnVuY3Rpb24oKSB7XG5cdHZhciBhdG4gPSB0aGlzLl9pbnRlcnAuYXRuO1xuXHR2YXIgcyA9IGF0bi5zdGF0ZXNbdGhpcy5zdGF0ZV07XG5cdHJldHVybiBhdG4ubmV4dFRva2VucyhzKTtcbn07XG5cbi8vIEdldCBhIHJ1bGUncyBpbmRleCAoaS5lLiwge0Bjb2RlIFJVTEVfcnVsZU5hbWV9IGZpZWxkKSBvciAtMSBpZiBub3QgZm91bmQuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0UnVsZUluZGV4ID0gZnVuY3Rpb24ocnVsZU5hbWUpIHtcblx0dmFyIHJ1bGVJbmRleCA9IHRoaXMuZ2V0UnVsZUluZGV4TWFwKClbcnVsZU5hbWVdO1xuXHRpZiAocnVsZUluZGV4ICE9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHJ1bGVJbmRleDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gLTE7XG5cdH1cbn07XG5cbi8vIFJldHVybiBMaXN0Jmx0O1N0cmluZyZndDsgb2YgdGhlIHJ1bGUgbmFtZXMgaW4geW91ciBwYXJzZXIgaW5zdGFuY2Vcbi8vIGxlYWRpbmcgdXAgdG8gYSBjYWxsIHRvIHRoZSBjdXJyZW50IHJ1bGUuIFlvdSBjb3VsZCBvdmVycmlkZSBpZlxuLy8geW91IHdhbnQgbW9yZSBkZXRhaWxzIHN1Y2ggYXMgdGhlIGZpbGUvbGluZSBpbmZvIG9mIHdoZXJlXG4vLyBpbiB0aGUgQVROIGEgcnVsZSBpcyBpbnZva2VkLlxuLy9cbi8vIHRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIGVycm9yIG1lc3NhZ2VzLlxuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0UnVsZUludm9jYXRpb25TdGFjayA9IGZ1bmN0aW9uKHApIHtcblx0cCA9IHAgfHwgbnVsbDtcblx0aWYgKHAgPT09IG51bGwpIHtcblx0XHRwID0gdGhpcy5fY3R4O1xuXHR9XG5cdHZhciBzdGFjayA9IFtdO1xuXHR3aGlsZSAocCAhPT0gbnVsbCkge1xuXHRcdC8vIGNvbXB1dGUgd2hhdCBmb2xsb3dzIHdobyBpbnZva2VkIHVzXG5cdFx0dmFyIHJ1bGVJbmRleCA9IHAucnVsZUluZGV4O1xuXHRcdGlmIChydWxlSW5kZXggPCAwKSB7XG5cdFx0XHRzdGFjay5wdXNoKFwibi9hXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFjay5wdXNoKHRoaXMucnVsZU5hbWVzW3J1bGVJbmRleF0pO1xuXHRcdH1cblx0XHRwID0gcC5wYXJlbnRDdHg7XG5cdH1cblx0cmV0dXJuIHN0YWNrO1xufTtcblxuLy8gRm9yIGRlYnVnZ2luZyBhbmQgb3RoZXIgcHVycG9zZXMuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0REZBU3RyaW5ncyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkEudG9TdHJpbmcoKTtcbn07XG4vLyBGb3IgZGVidWdnaW5nIGFuZCBvdGhlciBwdXJwb3Nlcy4vL1xuUGFyc2VyLnByb3RvdHlwZS5kdW1wREZBID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzZWVuT25lID0gZmFsc2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkEubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgZGZhID0gdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkFbaV07XG5cdFx0aWYgKGRmYS5zdGF0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKHNlZW5PbmUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coKTtcblx0XHRcdH1cblx0XHRcdHRoaXMucHJpbnRlci5wcmludGxuKFwiRGVjaXNpb24gXCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIik7XG5cdFx0XHR0aGlzLnByaW50ZXIucHJpbnQoZGZhLnRvU3RyaW5nKHRoaXMubGl0ZXJhbE5hbWVzLCB0aGlzLnN5bWJvbGljTmFtZXMpKTtcblx0XHRcdHNlZW5PbmUgPSB0cnVlO1xuXHRcdH1cblx0fVxufTtcblxuLypcblwiXHRcdFx0cHJpbnRlciA9IGZ1bmN0aW9uKCkge1xcclxcblwiICtcblwiXHRcdFx0XHR0aGlzLnByaW50bG4gPSBmdW5jdGlvbihzKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdXRwdXQnKSArPSBzICsgJ1xcXFxuJzsgfVxcclxcblwiICtcblwiXHRcdFx0XHR0aGlzLnByaW50ID0gZnVuY3Rpb24ocykgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3V0cHV0JykgKz0gczsgfVxcclxcblwiICtcblwiXHRcdFx0fTtcXHJcXG5cIiArXG4qL1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFNvdXJjZU5hbWUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG59O1xuXG4vLyBEdXJpbmcgYSBwYXJzZSBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGxpc3RlbiBpbiBvbiB0aGUgcnVsZSBlbnRyeSBhbmQgZXhpdFxuLy8gZXZlbnRzIGFzIHdlbGwgYXMgdG9rZW4gbWF0Y2hlcy4gdGhpcyBpcyBmb3IgcXVpY2sgYW5kIGRpcnR5IGRlYnVnZ2luZy5cbi8vXG5QYXJzZXIucHJvdG90eXBlLnNldFRyYWNlID0gZnVuY3Rpb24odHJhY2UpIHtcblx0aWYgKCF0cmFjZSkge1xuXHRcdHRoaXMucmVtb3ZlUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHRcdHRoaXMuX3RyYWNlciA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKHRoaXMuX3RyYWNlciAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5yZW1vdmVQYXJzZUxpc3RlbmVyKHRoaXMuX3RyYWNlcik7XG5cdFx0fVxuXHRcdHRoaXMuX3RyYWNlciA9IG5ldyBUcmFjZUxpc3RlbmVyKHRoaXMpO1xuXHRcdHRoaXMuYWRkUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHR9XG59O1xuXG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vKiBBIHJ1bGUgaW52b2NhdGlvbiByZWNvcmQgZm9yIHBhcnNpbmcuXG4vL1xuLy8gIENvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcnVsZSBub3Qgc3RvcmVkIGluIHRoZVxuLy8gIFJ1bGVDb250ZXh0LiBJdCBoYW5kbGVzIHBhcnNlIHRyZWUgY2hpbGRyZW4gbGlzdCwgQW55IEFUTiBzdGF0ZVxuLy8gIHRyYWNpbmcsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMgYXZhaWxhYmxlIGZvciBydWxlIGluZGljYXRpb25zOlxuLy8gIHN0YXJ0LCBzdG9wLCBydWxlIGluZGV4LCBjdXJyZW50IGFsdCBudW1iZXIsIGN1cnJlbnRcbi8vICBBVE4gc3RhdGUuXG4vL1xuLy8gIFN1YmNsYXNzZXMgbWFkZSBmb3IgZWFjaCBydWxlIGFuZCBncmFtbWFyIHRyYWNrIHRoZSBwYXJhbWV0ZXJzLFxuLy8gIHJldHVybiB2YWx1ZXMsIGxvY2FscywgYW5kIGxhYmVscyBzcGVjaWZpYyB0byB0aGF0IHJ1bGUuIFRoZXNlXG4vLyAgYXJlIHRoZSBvYmplY3RzIHRoYXQgYXJlIHJldHVybmVkIGZyb20gcnVsZXMuXG4vL1xuLy8gIE5vdGUgdGV4dCBpcyBub3QgYW4gYWN0dWFsIGZpZWxkIG9mIGEgcnVsZSByZXR1cm4gdmFsdWU7IGl0IGlzIGNvbXB1dGVkXG4vLyAgZnJvbSBzdGFydCBhbmQgc3RvcCB1c2luZyB0aGUgaW5wdXQgc3RyZWFtJ3MgdG9TdHJpbmcoKSBtZXRob2QuICBJXG4vLyAgY291bGQgYWRkIGEgY3RvciB0byB0aGlzIHNvIHRoYXQgd2UgY2FuIHBhc3MgaW4gYW5kIHN0b3JlIHRoZSBpbnB1dFxuLy8gIHN0cmVhbSwgYnV0IEknbSBub3Qgc3VyZSB3ZSB3YW50IHRvIGRvIHRoYXQuICBJdCB3b3VsZCBzZWVtIHRvIGJlIHVuZGVmaW5lZFxuLy8gIHRvIGdldCB0aGUgLnRleHQgcHJvcGVydHkgYW55d2F5IGlmIHRoZSBydWxlIG1hdGNoZXMgdG9rZW5zIGZyb20gbXVsdGlwbGVcbi8vICBpbnB1dCBzdHJlYW1zLlxuLy9cbi8vICBJIGRvIG5vdCB1c2UgZ2V0dGVycyBmb3IgZmllbGRzIG9mIG9iamVjdHMgdGhhdCBhcmUgdXNlZCBzaW1wbHkgdG9cbi8vICBncm91cCB2YWx1ZXMgc3VjaCBhcyB0aGlzIGFnZ3JlZ2F0ZS4gIFRoZSBnZXR0ZXJzL3NldHRlcnMgYXJlIHRoZXJlIHRvXG4vLyAgc2F0aXNmeSB0aGUgc3VwZXJjbGFzcyBpbnRlcmZhY2UuXG5cbnZhciBSdWxlQ29udGV4dCA9IHJlcXVpcmUoJy4vUnVsZUNvbnRleHQnKS5SdWxlQ29udGV4dDtcbnZhciBUcmVlID0gcmVxdWlyZSgnLi90cmVlL1RyZWUnKTtcbnZhciBJTlZBTElEX0lOVEVSVkFMID0gVHJlZS5JTlZBTElEX0lOVEVSVkFMO1xudmFyIFRlcm1pbmFsTm9kZSA9IFRyZWUuVGVybWluYWxOb2RlO1xudmFyIFRlcm1pbmFsTm9kZUltcGwgPSBUcmVlLlRlcm1pbmFsTm9kZUltcGw7XG52YXIgRXJyb3JOb2RlSW1wbCA9IFRyZWUuRXJyb3JOb2RlSW1wbDtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoXCIuL0ludGVydmFsU2V0XCIpLkludGVydmFsO1xuXG5mdW5jdGlvbiBQYXJzZXJSdWxlQ29udGV4dChwYXJlbnQsIGludm9raW5nU3RhdGVOdW1iZXIpIHtcblx0cGFyZW50ID0gcGFyZW50IHx8IG51bGw7XG5cdGludm9raW5nU3RhdGVOdW1iZXIgPSBpbnZva2luZ1N0YXRlTnVtYmVyIHx8IG51bGw7XG5cdFJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyKTtcblx0dGhpcy5ydWxlSW5kZXggPSAtMTtcbiAgICAvLyAqIElmIHdlIGFyZSBkZWJ1Z2dpbmcgb3IgYnVpbGRpbmcgYSBwYXJzZSB0cmVlIGZvciBhIHZpc2l0b3IsXG4gICAgLy8gd2UgbmVlZCB0byB0cmFjayBhbGwgb2YgdGhlIHRva2VucyBhbmQgcnVsZSBpbnZvY2F0aW9ucyBhc3NvY2lhdGVkXG4gICAgLy8gd2l0aCB0aGlzIHJ1bGUncyBjb250ZXh0LiBUaGlzIGlzIGVtcHR5IGZvciBwYXJzaW5nIHcvbyB0cmVlIGNvbnN0ci5cbiAgICAvLyBvcGVyYXRpb24gYmVjYXVzZSB3ZSBkb24ndCB0aGUgbmVlZCB0byB0cmFjayB0aGUgZGV0YWlscyBhYm91dFxuICAgIC8vIGhvdyB3ZSBwYXJzZSB0aGlzIHJ1bGUuXG4gICAgLy8gL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICAgIHRoaXMuc3RhcnQgPSBudWxsO1xuICAgIHRoaXMuc3RvcCA9IG51bGw7XG4gICAgLy8gVGhlIGV4Y2VwdGlvbiB0aGF0IGZvcmNlZCB0aGlzIHJ1bGUgdG8gcmV0dXJuLiBJZiB0aGUgcnVsZSBzdWNjZXNzZnVsbHlcbiAgICAvLyBjb21wbGV0ZWQsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMuZXhjZXB0aW9uID0gbnVsbDtcbn1cblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VyUnVsZUNvbnRleHQ7XG5cbi8vICogQ09QWSBhIGN0eCAoSSdtIGRlbGliZXJhdGVseSBub3QgdXNpbmcgY29weSBjb25zdHJ1Y3RvcikvLy9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb3B5RnJvbSA9IGZ1bmN0aW9uKGN0eCkge1xuICAgIC8vIGZyb20gUnVsZUNvbnRleHRcbiAgICB0aGlzLnBhcmVudEN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgdGhpcy5pbnZva2luZ1N0YXRlID0gY3R4Lmludm9raW5nU3RhdGU7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG51bGw7XG4gICAgdGhpcy5zdGFydCA9IGN0eC5zdGFydDtcbiAgICB0aGlzLnN0b3AgPSBjdHguc3RvcDtcbiAgICAvLyBjb3B5IGFueSBlcnJvciBub2RlcyB0byBhbHQgbGFiZWwgbm9kZVxuICAgIGlmKGN0eC5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIC8vIHJlc2V0IHBhcmVudCBwb2ludGVyIGZvciBhbnkgZXJyb3Igbm9kZXNcbiAgICBcdGN0eC5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHtcbiAgICBcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgRXJyb3JOb2RlSW1wbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgY2hpbGQucGFyZW50Q3R4ID0gdGhpcztcbiAgICAgICAgICAgIH1cblx0XHR9LCB0aGlzKTtcblx0fVxufTtcblxuLy8gRG91YmxlIGRpc3BhdGNoIG1ldGhvZHMgZm9yIGxpc3RlbmVyc1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xufTtcblxuLy8gKiBEb2VzIG5vdCBzZXQgcGFyZW50IGxpbms7IG90aGVyIGFkZCBtZXRob2RzIGRvIHRoYXQvLy9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8vICogVXNlZCBieSBlbnRlck91dGVyQWx0IHRvIHRvc3Mgb3V0IGEgUnVsZUNvbnRleHQgcHJldmlvdXNseSBhZGRlZCBhc1xuLy8gd2UgZW50ZXJlZCBhIHJ1bGUuIElmIHdlIGhhdmUgLy8gbGFiZWwsIHdlIHdpbGwgbmVlZCB0byByZW1vdmVcbi8vIGdlbmVyaWMgcnVsZUNvbnRleHQgb2JqZWN0LlxuLy8gL1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLnJlbW92ZUxhc3RDaGlsZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucG9wKCk7XG4gICAgfVxufTtcblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmFkZFRva2VuTm9kZSA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgVGVybWluYWxOb2RlSW1wbCh0b2tlbik7XG4gICAgdGhpcy5hZGRDaGlsZChub2RlKTtcbiAgICBub2RlLnBhcmVudEN0eCA9IHRoaXM7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuYWRkRXJyb3JOb2RlID0gZnVuY3Rpb24oYmFkVG9rZW4pIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBFcnJvck5vZGVJbXBsKGJhZFRva2VuKTtcbiAgICB0aGlzLmFkZENoaWxkKG5vZGUpO1xuICAgIG5vZGUucGFyZW50Q3R4ID0gdGhpcztcbiAgICByZXR1cm4gbm9kZTtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGksIHR5cGUpIHtcblx0dHlwZSA9IHR5cGUgfHwgbnVsbDtcblx0aWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwgfHwgaSA8IDAgfHwgaSA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG5cdH0gZWxzZSB7XG5cdFx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltqXTtcblx0XHRcdGlmKGNoaWxkIGluc3RhbmNlb2YgdHlwZSkge1xuXHRcdFx0XHRpZihpPT09MCkge1xuXHRcdFx0XHRcdHJldHVybiBjaGlsZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpIC09IDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VG9rZW4gPSBmdW5jdGlvbih0dHlwZSwgaSkge1xuXHRpZiAodGhpcy5jaGlsZHJlbiA9PT0gbnVsbCB8fCBpIDwgMCB8fCBpID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRpZiAoY2hpbGQuc3ltYm9sLnR5cGUgPT09IHR0eXBlKSB7XG5cdFx0XHRcdGlmKGk9PT0wKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoaWxkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgLT0gMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRUb2tlbnMgPSBmdW5jdGlvbih0dHlwZSApIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuXHRcdHZhciB0b2tlbnMgPSBbXTtcblx0XHRmb3IodmFyIGo9MDsgajx0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2pdO1xuXHRcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRcdGlmIChjaGlsZC5zeW1ib2wudHlwZSA9PT0gdHR5cGUpIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaChjaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRva2VucztcbiAgICB9XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VHlwZWRSdWxlQ29udGV4dCA9IGZ1bmN0aW9uKGN0eFR5cGUsIGkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGlsZChpLCBjdHhUeXBlKTtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRUeXBlZFJ1bGVDb250ZXh0cyA9IGZ1bmN0aW9uKGN0eFR5cGUpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuXHRcdHZhciBjb250ZXh0cyA9IFtdO1xuXHRcdGZvcih2YXIgaj0wOyBqPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcblx0XHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0XHRpZiAoY2hpbGQgaW5zdGFuY2VvZiBjdHhUeXBlKSB7XG5cdFx0XHRcdGNvbnRleHRzLnB1c2goY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY29udGV4dHM7XG5cdH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZENvdW50ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLmNoaWxkcmVuPT09IG51bGwpIHtcblx0XHRyZXR1cm4gMDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG5cdH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRTb3VyY2VJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmKCB0aGlzLnN0YXJ0ID09PSBudWxsIHx8IHRoaXMuc3RvcCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gSU5WQUxJRF9JTlRFUlZBTDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEludGVydmFsKHRoaXMuc3RhcnQudG9rZW5JbmRleCwgdGhpcy5zdG9wLnRva2VuSW5kZXgpO1xuICAgIH1cbn07XG5cblJ1bGVDb250ZXh0LkVNUFRZID0gbmV3IFBhcnNlclJ1bGVDb250ZXh0KCk7XG5cbmZ1bmN0aW9uIEludGVycHJldGVyUnVsZUNvbnRleHQocGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyLCBydWxlSW5kZXgpIHtcblx0UGFyc2VyUnVsZUNvbnRleHQuY2FsbChwYXJlbnQsIGludm9raW5nU3RhdGVOdW1iZXIpO1xuICAgIHRoaXMucnVsZUluZGV4ID0gcnVsZUluZGV4O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5JbnRlcnByZXRlclJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkludGVycHJldGVyUnVsZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJwcmV0ZXJSdWxlQ29udGV4dDtcblxuZXhwb3J0cy5QYXJzZXJSdWxlQ29udGV4dCA9IFBhcnNlclJ1bGVDb250ZXh0OyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIFJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi9SdWxlQ29udGV4dCcpLlJ1bGVDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKCcuL1V0aWxzJykuSGFzaDtcblxuZnVuY3Rpb24gUHJlZGljdGlvbkNvbnRleHQoY2FjaGVkSGFzaENvZGUpIHtcblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IGNhY2hlZEhhc2hDb2RlO1xufVxuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBsb2NhbCBjb250ZXh0IHByZWRpY3Rpb24sIHdoaWNoIG1lYW5zIHdpbGRjYXJkLlxuLy8ge0Bjb2RlLy8reCA9Ly99LlxuLy8gL1xuUHJlZGljdGlvbkNvbnRleHQuRU1QVFkgPSBudWxsO1xuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBhbiBhcnJheSBpbiBmdWxsIGNvbnRleHQgbW9kZSwgd2hlbiB7QGNvZGUgJH1cbi8vIGRvZXNuJ3QgbWVhbiB3aWxkY2FyZDoge0Bjb2RlICQgKyB4ID0gWyQseF19LiBIZXJlLFxuLy8ge0Bjb2RlICR9ID0ge0BsaW5rIC8vRU1QVFlfUkVUVVJOX1NUQVRFfS5cbi8vIC9cblByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSA9IDB4N0ZGRkZGRkY7XG5cblByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudCA9IDE7XG5QcmVkaWN0aW9uQ29udGV4dC5pZCA9IFByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudDtcblxuLy8gU3RvcmVzIHRoZSBjb21wdXRlZCBoYXNoIGNvZGUgb2YgdGhpcyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9LiBUaGUgaGFzaFxuLy8gY29kZSBpcyBjb21wdXRlZCBpbiBwYXJ0cyB0byBtYXRjaCB0aGUgZm9sbG93aW5nIHJlZmVyZW5jZSBhbGdvcml0aG0uXG4vL1xuLy8gPHByZT5cbi8vIHByaXZhdGUgaW50IHJlZmVyZW5jZUhhc2hDb2RlKCkge1xuLy8gaW50IGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vaW5pdGlhbGl6ZSBNdXJtdXJIYXNoLmluaXRpYWxpemV9KHtAbGlua1xuLy8gLy9JTklUSUFMX0hBU0h9KTtcbi8vXG4vLyBmb3IgKGludCBpID0gMDsgaSAmbHQ7IHtAbGluayAvL3NpemUoKX07IGkrKykge1xuLy8gaGFzaCA9IHtAbGluayBNdXJtdXJIYXNoLy91cGRhdGUgTXVybXVySGFzaC51cGRhdGV9KGhhc2gsIHtAbGluayAvL2dldFBhcmVudFxuLy8gZ2V0UGFyZW50fShpKSk7XG4vLyB9XG4vL1xuLy8gZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB7QGxpbmsgLy9zaXplKCl9OyBpKyspIHtcbi8vIGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vdXBkYXRlIE11cm11ckhhc2gudXBkYXRlfShoYXNoLCB7QGxpbmtcbi8vIC8vZ2V0UmV0dXJuU3RhdGUgZ2V0UmV0dXJuU3RhdGV9KGkpKTtcbi8vIH1cbi8vXG4vLyBoYXNoID0ge0BsaW5rIE11cm11ckhhc2gvL2ZpbmlzaCBNdXJtdXJIYXNoLmZpbmlzaH0oaGFzaCwgMi8vIHtAbGlua1xuLy8gLy9zaXplKCl9KTtcbi8vIHJldHVybiBoYXNoO1xuLy8gfVxuLy8gPC9wcmU+XG4vLyAvXG5cbi8vIFRoaXMgbWVhbnMgb25seSB0aGUge0BsaW5rIC8vRU1QVFl9IGNvbnRleHQgaXMgaW4gc2V0LlxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xufTtcblxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmhhc0VtcHR5UGF0aCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5nZXRSZXR1cm5TdGF0ZSh0aGlzLmxlbmd0aCAtIDEpID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEU7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVkSGFzaENvZGU7XG59O1xuXG5cblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmNhY2hlZEhhc2hDb2RlKTtcbn07XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlSGFzaFN0cmluZyhwYXJlbnQsIHJldHVyblN0YXRlKSB7XG5cdHJldHVybiBcIlwiICsgcGFyZW50ICsgcmV0dXJuU3RhdGU7XG59XG4qL1xuXG4vLyBVc2VkIHRvIGNhY2hlIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cy4gSXRzIHVzZWQgZm9yIHRoZSBzaGFyZWRcbi8vIGNvbnRleHQgY2FzaCBhc3NvY2lhdGVkIHdpdGggY29udGV4dHMgaW4gREZBIHN0YXRlcy4gVGhpcyBjYWNoZVxuLy8gY2FuIGJlIHVzZWQgZm9yIGJvdGggbGV4ZXJzIGFuZCBwYXJzZXJzLlxuXG5mdW5jdGlvbiBQcmVkaWN0aW9uQ29udGV4dENhY2hlKCkge1xuXHR0aGlzLmNhY2hlID0ge307XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgYSBjb250ZXh0IHRvIHRoZSBjYWNoZSBhbmQgcmV0dXJuIGl0LiBJZiB0aGUgY29udGV4dCBhbHJlYWR5IGV4aXN0cyxcbi8vIHJldHVybiB0aGF0IG9uZSBpbnN0ZWFkIGFuZCBkbyBub3QgYWRkIGEgbmV3IGNvbnRleHQgdG8gdGhlIGNhY2hlLlxuLy8gUHJvdGVjdCBzaGFyZWQgY2FjaGUgZnJvbSB1bnNhZmUgdGhyZWFkIGFjY2Vzcy5cbi8vXG5QcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihjdHgpIHtcblx0aWYgKGN0eCA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdGhpcy5jYWNoZVtjdHhdIHx8IG51bGw7XG5cdGlmIChleGlzdGluZyAhPT0gbnVsbCkge1xuXHRcdHJldHVybiBleGlzdGluZztcblx0fVxuXHR0aGlzLmNhY2hlW2N0eF0gPSBjdHg7XG5cdHJldHVybiBjdHg7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihjdHgpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVbY3R4XSB8fCBudWxsO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFByZWRpY3Rpb25Db250ZXh0Q2FjaGUucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLmxlbmd0aDtcblx0fVxufSk7XG5cbmZ1bmN0aW9uIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0dmFyIGhhc2hDb2RlID0gMDtcblx0aWYocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0dmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuXHRcdGhhc2gudXBkYXRlKHBhcmVudCwgcmV0dXJuU3RhdGUpO1xuICAgICAgICBoYXNoQ29kZSA9IGhhc2guZmluaXNoKCk7XG5cdH1cblx0UHJlZGljdGlvbkNvbnRleHQuY2FsbCh0aGlzLCBoYXNoQ29kZSk7XG5cdHRoaXMucGFyZW50Q3R4ID0gcGFyZW50O1xuXHR0aGlzLnJldHVyblN0YXRlID0gcmV0dXJuU3RhdGU7XG59XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlKTtcblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5jb250cnVjdG9yID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQ7XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZSA9IGZ1bmN0aW9uKHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0aWYgKHJldHVyblN0YXRlID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgJiYgcGFyZW50ID09PSBudWxsKSB7XG5cdFx0Ly8gc29tZW9uZSBjYW4gcGFzcyBpbiB0aGUgYml0cyBvZiBhbiBhcnJheSBjdHggdGhhdCBtZWFuICRcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dChwYXJlbnQsIHJldHVyblN0YXRlKTtcblx0fVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxufSk7XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5wYXJlbnRDdHg7XG59O1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UmV0dXJuU3RhdGUgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZTtcbn07XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMuaGFzaENvZGUoKSAhPT0gb3RoZXIuaGFzaENvZGUoKSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gY2FuJ3QgYmUgc2FtZSBpZiBoYXNoIGlzIGRpZmZlcmVudFxuXHR9IGVsc2Uge1xuXHRcdGlmKHRoaXMucmV0dXJuU3RhdGUgIT09IG90aGVyLnJldHVyblN0YXRlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBlbHNlIGlmKHRoaXMucGFyZW50Q3R4PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIG90aGVyLnBhcmVudEN0eD09bnVsbFxuXHRcdGVsc2VcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudEN0eC5lcXVhbHMob3RoZXIucGFyZW50Q3R4KTtcblx0fVxufTtcblxuU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB1cCA9IHRoaXMucGFyZW50Q3R4ID09PSBudWxsID8gXCJcIiA6IHRoaXMucGFyZW50Q3R4LnRvU3RyaW5nKCk7XG5cdGlmICh1cC5sZW5ndGggPT09IDApIHtcblx0XHRpZiAodGhpcy5yZXR1cm5TdGF0ZSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG5cdFx0XHRyZXR1cm4gXCIkXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiICsgdGhpcy5yZXR1cm5TdGF0ZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCIgKyB0aGlzLnJldHVyblN0YXRlICsgXCIgXCIgKyB1cDtcblx0fVxufTtcblxuZnVuY3Rpb24gRW1wdHlQcmVkaWN0aW9uQ29udGV4dCgpIHtcblx0U2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY2FsbCh0aGlzLCBudWxsLCBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSk7XG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVtcHR5UHJlZGljdGlvbkNvbnRleHQ7XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRydWU7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmdldFJldHVyblN0YXRlID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGU7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcyA9PT0gb3RoZXI7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIkXCI7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5FTVBUWSA9IG5ldyBFbXB0eVByZWRpY3Rpb25Db250ZXh0KCk7XG5cbmZ1bmN0aW9uIEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcmV0dXJuU3RhdGVzKSB7XG5cdC8vIFBhcmVudCBjYW4gYmUgbnVsbCBvbmx5IGlmIGZ1bGwgY3R4IG1vZGUgYW5kIHdlIG1ha2UgYW4gYXJyYXlcblx0Ly8gZnJvbSB7QGxpbmsgLy9FTVBUWX0gYW5kIG5vbi1lbXB0eS4gV2UgbWVyZ2Uge0BsaW5rIC8vRU1QVFl9IGJ5IHVzaW5nXG5cdC8vIG51bGwgcGFyZW50IGFuZFxuXHQvLyByZXR1cm5TdGF0ZSA9PSB7QGxpbmsgLy9FTVBUWV9SRVRVUk5fU1RBVEV9LlxuXHR2YXIgaCA9IG5ldyBIYXNoKCk7XG5cdGgudXBkYXRlKHBhcmVudHMsIHJldHVyblN0YXRlcyk7XG5cdHZhciBoYXNoQ29kZSA9IGguZmluaXNoKCk7XG5cdFByZWRpY3Rpb25Db250ZXh0LmNhbGwodGhpcywgaGFzaENvZGUpO1xuXHR0aGlzLnBhcmVudHMgPSBwYXJlbnRzO1xuXHR0aGlzLnJldHVyblN0YXRlcyA9IHJldHVyblN0YXRlcztcblx0cmV0dXJuIHRoaXM7XG59XG5cbkFycmF5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUpO1xuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcnJheVByZWRpY3Rpb25Db250ZXh0O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdC8vIHNpbmNlIEVNUFRZX1JFVFVSTl9TVEFURSBjYW4gb25seSBhcHBlYXIgaW4gdGhlIGxhc3QgcG9zaXRpb24sIHdlXG5cdC8vIGRvbid0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgc2l6ZT09MVxuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXNbMF0gPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXMubGVuZ3RoO1xuXHR9XG59KTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucGFyZW50c1tpbmRleF07XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRSZXR1cm5TdGF0ZSA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHJldHVybiB0aGlzLnJldHVyblN0YXRlc1tpbmRleF07XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgQXJyYXlQcmVkaWN0aW9uQ29udGV4dCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAodGhpcy5oYXNoQ29kZSgpICE9PSBvdGhlci5oYXNoQ29kZSgpKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBjYW4ndCBiZSBzYW1lIGlmIGhhc2ggaXMgZGlmZmVyZW50XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGVzID09PSBvdGhlci5yZXR1cm5TdGF0ZXMgJiZcblx0XHRcdFx0dGhpcy5wYXJlbnRzID09PSBvdGhlci5wYXJlbnRzO1xuXHR9XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRyZXR1cm4gXCJbXVwiO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzID0gXCJbXCI7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJldHVyblN0YXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdHMgPSBzICsgXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucmV0dXJuU3RhdGVzW2ldID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpIHtcblx0XHRcdFx0cyA9IHMgKyBcIiRcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRzID0gcyArIHRoaXMucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0aWYgKHRoaXMucGFyZW50c1tpXSAhPT0gbnVsbCkge1xuXHRcdFx0XHRzID0gcyArIFwiIFwiICsgdGhpcy5wYXJlbnRzW2ldO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cyA9IHMgKyBcIm51bGxcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHMgKyBcIl1cIjtcblx0fVxufTtcblxuLy8gQ29udmVydCBhIHtAbGluayBSdWxlQ29udGV4dH0gdHJlZSB0byBhIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gZ3JhcGguXG4vLyBSZXR1cm4ge0BsaW5rIC8vRU1QVFl9IGlmIHtAY29kZSBvdXRlckNvbnRleHR9IGlzIGVtcHR5IG9yIG51bGwuXG4vLyAvXG5mdW5jdGlvbiBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChhdG4sIG91dGVyQ29udGV4dCkge1xuXHRpZiAob3V0ZXJDb250ZXh0ID09PSB1bmRlZmluZWQgfHwgb3V0ZXJDb250ZXh0ID09PSBudWxsKSB7XG5cdFx0b3V0ZXJDb250ZXh0ID0gUnVsZUNvbnRleHQuRU1QVFk7XG5cdH1cblx0Ly8gaWYgd2UgYXJlIGluIFJ1bGVDb250ZXh0IG9mIHN0YXJ0IHJ1bGUsIHMsIHRoZW4gUHJlZGljdGlvbkNvbnRleHRcblx0Ly8gaXMgRU1QVFkuIE5vYm9keSBjYWxsZWQgdXMuIChpZiB3ZSBhcmUgZW1wdHksIHJldHVybiBlbXB0eSlcblx0aWYgKG91dGVyQ29udGV4dC5wYXJlbnRDdHggPT09IG51bGwgfHwgb3V0ZXJDb250ZXh0ID09PSBSdWxlQ29udGV4dC5FTVBUWSkge1xuXHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTtcblx0fVxuXHQvLyBJZiB3ZSBoYXZlIGEgcGFyZW50LCBjb252ZXJ0IGl0IHRvIGEgUHJlZGljdGlvbkNvbnRleHQgZ3JhcGhcblx0dmFyIHBhcmVudCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0KGF0biwgb3V0ZXJDb250ZXh0LnBhcmVudEN0eCk7XG5cdHZhciBzdGF0ZSA9IGF0bi5zdGF0ZXNbb3V0ZXJDb250ZXh0Lmludm9raW5nU3RhdGVdO1xuXHR2YXIgdHJhbnNpdGlvbiA9IHN0YXRlLnRyYW5zaXRpb25zWzBdO1xuXHRyZXR1cm4gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKHBhcmVudCwgdHJhbnNpdGlvbi5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG59XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlTGlzdHNIYXNoU3RyaW5nKHBhcmVudHMsIHJldHVyblN0YXRlcykge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHBhcmVudHMubWFwKGZ1bmN0aW9uKHApIHtcblx0XHRzID0gcyArIHA7XG5cdH0pO1xuXHRyZXR1cm5TdGF0ZXMubWFwKGZ1bmN0aW9uKHIpIHtcblx0XHRzID0gcyArIHI7XG5cdH0pO1xuXHRyZXR1cm4gcztcbn1cbiovXG5mdW5jdGlvbiBtZXJnZShhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHQvLyBzaGFyZSBzYW1lIGdyYXBoIGlmIGJvdGggc2FtZVxuXHRpZiAoYSA9PT0gYikge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhIGluc3RhbmNlb2YgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQgJiYgYiBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0cmV0dXJuIG1lcmdlU2luZ2xldG9ucyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdH1cblx0Ly8gQXQgbGVhc3Qgb25lIG9mIGEgb3IgYiBpcyBhcnJheVxuXHQvLyBJZiBvbmUgaXMgJCBhbmQgcm9vdElzV2lsZGNhcmQsIHJldHVybiAkIGFzLy8gd2lsZGNhcmRcblx0aWYgKHJvb3RJc1dpbGRjYXJkKSB7XG5cdFx0aWYgKGEgaW5zdGFuY2VvZiBFbXB0eVByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gYTtcblx0XHR9XG5cdFx0aWYgKGIgaW5zdGFuY2VvZiBFbXB0eVByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gYjtcblx0XHR9XG5cdH1cblx0Ly8gY29udmVydCBzaW5nbGV0b24gc28gYm90aCBhcmUgYXJyYXlzIHRvIG5vcm1hbGl6ZVxuXHRpZiAoYSBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0YSA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KFthLmdldFBhcmVudCgpXSwgW2EucmV0dXJuU3RhdGVdKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0YiA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KFtiLmdldFBhcmVudCgpXSwgW2IucmV0dXJuU3RhdGVdKTtcblx0fVxuXHRyZXR1cm4gbWVyZ2VBcnJheXMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xufVxuXG4vL1xuLy8gTWVyZ2UgdHdvIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH0gaW5zdGFuY2VzLlxuLy9cbi8vIDxwPlN0YWNrIHRvcHMgZXF1YWwsIHBhcmVudHMgbWVyZ2UgaXMgc2FtZTsgcmV0dXJuIGxlZnQgZ3JhcGguPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9TaW5nbGV0b25NZXJnZV9TYW1lUm9vdFNhbWVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TYW1lIHN0YWNrIHRvcCwgcGFyZW50cyBkaWZmZXI7IG1lcmdlIHBhcmVudHMgZ2l2aW5nIGFycmF5IG5vZGUsIHRoZW5cbi8vIHJlbWFpbmRlcnMgb2YgdGhvc2UgZ3JhcGhzLiBBIG5ldyByb290IG5vZGUgaXMgY3JlYXRlZCB0byBwb2ludCB0byB0aGVcbi8vIG1lcmdlZCBwYXJlbnRzLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfU2FtZVJvb3REaWZmUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+RGlmZmVyZW50IHN0YWNrIHRvcHMgcG9pbnRpbmcgdG8gc2FtZSBwYXJlbnQuIE1ha2UgYXJyYXkgbm9kZSBmb3IgdGhlXG4vLyByb290IHdoZXJlIGJvdGggZWxlbWVudCBpbiB0aGUgcm9vdCBwb2ludCB0byB0aGUgc2FtZSAob3JpZ2luYWwpXG4vLyBwYXJlbnQuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9TaW5nbGV0b25NZXJnZV9EaWZmUm9vdFNhbWVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5EaWZmZXJlbnQgc3RhY2sgdG9wcyBwb2ludGluZyB0byBkaWZmZXJlbnQgcGFyZW50cy4gTWFrZSBhcnJheSBub2RlIGZvclxuLy8gdGhlIHJvb3Qgd2hlcmUgZWFjaCBlbGVtZW50IHBvaW50cyB0byB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW5hbFxuLy8gcGFyZW50Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfRGlmZlJvb3REaWZmUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gQHBhcmFtIGEgdGhlIGZpcnN0IHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSBiIHRoZSBzZWNvbmQge0BsaW5rIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0fVxuLy8gQHBhcmFtIHJvb3RJc1dpbGRjYXJkIHtAY29kZSB0cnVlfSBpZiB0aGlzIGlzIGEgbG9jYWwtY29udGV4dCBtZXJnZSxcbi8vIG90aGVyd2lzZSBmYWxzZSB0byBpbmRpY2F0ZSBhIGZ1bGwtY29udGV4dCBtZXJnZVxuLy8gQHBhcmFtIG1lcmdlQ2FjaGVcbi8vIC9cbmZ1bmN0aW9uIG1lcmdlU2luZ2xldG9ucyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdHZhciBwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGEsIGIpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGIsIGEpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0fVxuXG5cdHZhciByb290TWVyZ2UgPSBtZXJnZVJvb3QoYSwgYiwgcm9vdElzV2lsZGNhcmQpO1xuXHRpZiAocm9vdE1lcmdlICE9PSBudWxsKSB7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIHJvb3RNZXJnZSk7XG5cdFx0fVxuXHRcdHJldHVybiByb290TWVyZ2U7XG5cdH1cblx0aWYgKGEucmV0dXJuU3RhdGUgPT09IGIucmV0dXJuU3RhdGUpIHtcblx0XHR2YXIgcGFyZW50ID0gbWVyZ2UoYS5wYXJlbnRDdHgsIGIucGFyZW50Q3R4LCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdFx0Ly8gaWYgcGFyZW50IGlzIHNhbWUgYXMgZXhpc3RpbmcgYSBvciBiIHBhcmVudCBvciByZWR1Y2VkIHRvIGEgcGFyZW50LFxuXHRcdC8vIHJldHVybiBpdFxuXHRcdGlmIChwYXJlbnQgPT09IGEucGFyZW50Q3R4KSB7XG5cdFx0XHRyZXR1cm4gYTsgLy8gYXggKyBieCA9IGF4LCBpZiBhPWJcblx0XHR9XG5cdFx0aWYgKHBhcmVudCA9PT0gYi5wYXJlbnRDdHgpIHtcblx0XHRcdHJldHVybiBiOyAvLyBheCArIGJ4ID0gYngsIGlmIGE9YlxuXHRcdH1cblx0XHQvLyBlbHNlOiBheCArIGF5ID0gYSdbeCx5XVxuXHRcdC8vIG1lcmdlIHBhcmVudHMgeCBhbmQgeSwgZ2l2aW5nIGFycmF5IG5vZGUgd2l0aCB4LHkgdGhlbiByZW1haW5kZXJzXG5cdFx0Ly8gb2YgdGhvc2UgZ3JhcGhzLiBkdXAgYSwgYScgcG9pbnRzIGF0IG1lcmdlZCBhcnJheVxuXHRcdC8vIG5ldyBqb2luZWQgcGFyZW50IHNvIGNyZWF0ZSBuZXcgc2luZ2xldG9uIHBvaW50aW5nIHRvIGl0LCBhJ1xuXHRcdHZhciBzcGMgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUocGFyZW50LCBhLnJldHVyblN0YXRlKTtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgc3BjKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNwYztcblx0fSBlbHNlIHsgLy8gYSAhPSBiIHBheWxvYWRzIGRpZmZlclxuXHRcdC8vIHNlZSBpZiB3ZSBjYW4gY29sbGFwc2UgcGFyZW50cyBkdWUgdG8gJCt4IHBhcmVudHMgaWYgbG9jYWwgY3R4XG5cdFx0dmFyIHNpbmdsZVBhcmVudCA9IG51bGw7XG5cdFx0aWYgKGEgPT09IGIgfHwgKGEucGFyZW50Q3R4ICE9PSBudWxsICYmIGEucGFyZW50Q3R4ID09PSBiLnBhcmVudEN0eCkpIHsgLy8gYXggK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGJ4ID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBbYSxiXXhcblx0XHRcdHNpbmdsZVBhcmVudCA9IGEucGFyZW50Q3R4O1xuXHRcdH1cblx0XHRpZiAoc2luZ2xlUGFyZW50ICE9PSBudWxsKSB7IC8vIHBhcmVudHMgYXJlIHNhbWVcblx0XHRcdC8vIHNvcnQgcGF5bG9hZHMgYW5kIHVzZSBzYW1lIHBhcmVudFxuXHRcdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBiLnJldHVyblN0YXRlIF07XG5cdFx0XHRpZiAoYS5yZXR1cm5TdGF0ZSA+IGIucmV0dXJuU3RhdGUpIHtcblx0XHRcdFx0cGF5bG9hZHNbMF0gPSBiLnJldHVyblN0YXRlO1xuXHRcdFx0XHRwYXlsb2Fkc1sxXSA9IGEucmV0dXJuU3RhdGU7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcGFyZW50cyA9IFsgc2luZ2xlUGFyZW50LCBzaW5nbGVQYXJlbnQgXTtcblx0XHRcdHZhciBhcGMgPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhcGMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFwYztcblx0XHR9XG5cdFx0Ly8gcGFyZW50cyBkaWZmZXIgYW5kIGNhbid0IG1lcmdlIHRoZW0uIEp1c3QgcGFjayB0b2dldGhlclxuXHRcdC8vIGludG8gYXJyYXk7IGNhbid0IG1lcmdlLlxuXHRcdC8vIGF4ICsgYnkgPSBbYXgsYnldXG5cdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBiLnJldHVyblN0YXRlIF07XG5cdFx0dmFyIHBhcmVudHMgPSBbIGEucGFyZW50Q3R4LCBiLnBhcmVudEN0eCBdO1xuXHRcdGlmIChhLnJldHVyblN0YXRlID4gYi5yZXR1cm5TdGF0ZSkgeyAvLyBzb3J0IGJ5IHBheWxvYWRcblx0XHRcdHBheWxvYWRzWzBdID0gYi5yZXR1cm5TdGF0ZTtcblx0XHRcdHBheWxvYWRzWzFdID0gYS5yZXR1cm5TdGF0ZTtcblx0XHRcdHBhcmVudHMgPSBbIGIucGFyZW50Q3R4LCBhLnBhcmVudEN0eCBdO1xuXHRcdH1cblx0XHR2YXIgYV8gPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGFfKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFfO1xuXHR9XG59XG5cbi8vXG4vLyBIYW5kbGUgY2FzZSB3aGVyZSBhdCBsZWFzdCBvbmUgb2Yge0Bjb2RlIGF9IG9yIHtAY29kZSBifSBpc1xuLy8ge0BsaW5rIC8vRU1QVFl9LiBJbiB0aGUgZm9sbG93aW5nIGRpYWdyYW1zLCB0aGUgc3ltYm9sIHtAY29kZSAkfSBpcyB1c2VkXG4vLyB0byByZXByZXNlbnQge0BsaW5rIC8vRU1QVFl9LlxuLy9cbi8vIDxoMj5Mb2NhbC1Db250ZXh0IE1lcmdlczwvaDI+XG4vL1xuLy8gPHA+VGhlc2UgbG9jYWwtY29udGV4dCBtZXJnZSBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW4ge0Bjb2RlIHJvb3RJc1dpbGRjYXJkfVxuLy8gaXMgdHJ1ZS48L3A+XG4vL1xuLy8gPHA+e0BsaW5rIC8vRU1QVFl9IGlzIHN1cGVyc2V0IG9mIGFueSBncmFwaDsgcmV0dXJuIHtAbGluayAvL0VNUFRZfS48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0xvY2FsTWVyZ2VfRW1wdHlSb290LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD57QGxpbmsgLy9FTVBUWX0gYW5kIGFueXRoaW5nIGlzIHtAY29kZSAvL0VNUFRZfSwgc28gbWVyZ2VkIHBhcmVudCBpc1xuLy8ge0Bjb2RlIC8vRU1QVFl9OyByZXR1cm4gbGVmdCBncmFwaC48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0xvY2FsTWVyZ2VfRW1wdHlQYXJlbnQuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPlNwZWNpYWwgY2FzZSBvZiBsYXN0IG1lcmdlIGlmIGxvY2FsIGNvbnRleHQuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Mb2NhbE1lcmdlX0RpZmZSb290cy5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPGgyPkZ1bGwtQ29udGV4dCBNZXJnZXM8L2gyPlxuLy9cbi8vIDxwPlRoZXNlIGZ1bGwtY29udGV4dCBtZXJnZSBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW4ge0Bjb2RlIHJvb3RJc1dpbGRjYXJkfVxuLy8gaXMgZmFsc2UuPC9wPlxuLy9cbi8vIDxwPjxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX0VtcHR5Um9vdHMuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPk11c3Qga2VlcCBhbGwgY29udGV4dHM7IHtAbGluayAvL0VNUFRZfSBpbiBhcnJheSBpcyBhIHNwZWNpYWwgdmFsdWUgKGFuZFxuLy8gbnVsbCBwYXJlbnQpLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX0VtcHR5Um9vdC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+PGVtYmVkIHNyYz1cImltYWdlcy9GdWxsTWVyZ2VfU2FtZVJvb3Quc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIEBwYXJhbSBhIHRoZSBmaXJzdCB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9XG4vLyBAcGFyYW0gYiB0aGUgc2Vjb25kIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSByb290SXNXaWxkY2FyZCB7QGNvZGUgdHJ1ZX0gaWYgdGhpcyBpcyBhIGxvY2FsLWNvbnRleHQgbWVyZ2UsXG4vLyBvdGhlcndpc2UgZmFsc2UgdG8gaW5kaWNhdGUgYSBmdWxsLWNvbnRleHQgbWVyZ2Vcbi8vIC9cbmZ1bmN0aW9uIG1lcmdlUm9vdChhLCBiLCByb290SXNXaWxkY2FyZCkge1xuXHRpZiAocm9vdElzV2lsZGNhcmQpIHtcblx0XHRpZiAoYSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gLy8gKyBiID0vL1xuXHRcdH1cblx0XHRpZiAoYiA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gYSArLy8gPS8vXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChhID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSAmJiBiID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSkge1xuXHRcdFx0cmV0dXJuIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZOyAvLyAkICsgJCA9ICRcblx0XHR9IGVsc2UgaWYgKGEgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7IC8vICQgKyB4ID0gWyQseF1cblx0XHRcdHZhciBwYXlsb2FkcyA9IFsgYi5yZXR1cm5TdGF0ZSxcblx0XHRcdFx0XHRQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgXTtcblx0XHRcdHZhciBwYXJlbnRzID0gWyBiLnBhcmVudEN0eCwgbnVsbCBdO1xuXHRcdFx0cmV0dXJuIG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIHBheWxvYWRzKTtcblx0XHR9IGVsc2UgaWYgKGIgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7IC8vIHggKyAkID0gWyQseF0gKCQgaXMgYWx3YXlzIGZpcnN0IGlmIHByZXNlbnQpXG5cdFx0XHR2YXIgcGF5bG9hZHMgPSBbIGEucmV0dXJuU3RhdGUsIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSBdO1xuXHRcdFx0dmFyIHBhcmVudHMgPSBbIGEucGFyZW50Q3R4LCBudWxsIF07XG5cdFx0XHRyZXR1cm4gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcGF5bG9hZHMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuLy9cbi8vIE1lcmdlIHR3byB7QGxpbmsgQXJyYXlQcmVkaWN0aW9uQ29udGV4dH0gaW5zdGFuY2VzLlxuLy9cbi8vIDxwPkRpZmZlcmVudCB0b3BzLCBkaWZmZXJlbnQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfRGlmZlRvcERpZmZQYXIuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPlNoYXJlZCB0b3AsIHNhbWUgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfU2hhcmVUb3BTYW1lUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBkaWZmZXJlbnQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfU2hhcmVUb3BEaWZmUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBhbGwgc2hhcmVkIHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX1NoYXJlVG9wU2hhcmVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5FcXVhbCB0b3BzLCBtZXJnZSBwYXJlbnRzIGFuZCByZWR1Y2UgdG9wIHRvXG4vLyB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvQXJyYXlNZXJnZV9FcXVhbFRvcC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vLyAvXG5mdW5jdGlvbiBtZXJnZUFycmF5cyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdHZhciBwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGEsIGIpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGIsIGEpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0fVxuXHQvLyBtZXJnZSBzb3J0ZWQgcGF5bG9hZHMgYSArIGIgPT4gTVxuXHR2YXIgaSA9IDA7IC8vIHdhbGtzIGFcblx0dmFyIGogPSAwOyAvLyB3YWxrcyBiXG5cdHZhciBrID0gMDsgLy8gd2Fsa3MgdGFyZ2V0IE0gYXJyYXlcblxuXHR2YXIgbWVyZ2VkUmV0dXJuU3RhdGVzID0gW107XG5cdHZhciBtZXJnZWRQYXJlbnRzID0gW107XG5cdC8vIHdhbGsgYW5kIG1lcmdlIHRvIHlpZWxkIG1lcmdlZFBhcmVudHMsIG1lcmdlZFJldHVyblN0YXRlc1xuXHR3aGlsZSAoaSA8IGEucmV0dXJuU3RhdGVzLmxlbmd0aCAmJiBqIDwgYi5yZXR1cm5TdGF0ZXMubGVuZ3RoKSB7XG5cdFx0dmFyIGFfcGFyZW50ID0gYS5wYXJlbnRzW2ldO1xuXHRcdHZhciBiX3BhcmVudCA9IGIucGFyZW50c1tqXTtcblx0XHRpZiAoYS5yZXR1cm5TdGF0ZXNbaV0gPT09IGIucmV0dXJuU3RhdGVzW2pdKSB7XG5cdFx0XHQvLyBzYW1lIHBheWxvYWQgKHN0YWNrIHRvcHMgYXJlIGVxdWFsKSwgbXVzdCB5aWVsZCBtZXJnZWQgc2luZ2xldG9uXG5cdFx0XHR2YXIgcGF5bG9hZCA9IGEucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0Ly8gJCskID0gJFxuXHRcdFx0dmFyIGJvdGhEb2xsYXJzID0gcGF5bG9hZCA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFICYmXG5cdFx0XHRcdFx0YV9wYXJlbnQgPT09IG51bGwgJiYgYl9wYXJlbnQgPT09IG51bGw7XG5cdFx0XHR2YXIgYXhfYXggPSAoYV9wYXJlbnQgIT09IG51bGwgJiYgYl9wYXJlbnQgIT09IG51bGwgJiYgYV9wYXJlbnQgPT09IGJfcGFyZW50KTsgLy8gYXgrYXhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF4XG5cdFx0XHRpZiAoYm90aERvbGxhcnMgfHwgYXhfYXgpIHtcblx0XHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGFfcGFyZW50OyAvLyBjaG9vc2UgbGVmdFxuXHRcdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBwYXlsb2FkO1xuXHRcdFx0fSBlbHNlIHsgLy8gYXgrYXkgLT4gYSdbeCx5XVxuXHRcdFx0XHR2YXIgbWVyZ2VkUGFyZW50ID0gbWVyZ2UoYV9wYXJlbnQsIGJfcGFyZW50LCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdFx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBtZXJnZWRQYXJlbnQ7XG5cdFx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IHBheWxvYWQ7XG5cdFx0XHR9XG5cdFx0XHRpICs9IDE7IC8vIGhvcCBvdmVyIGxlZnQgb25lIGFzIHVzdWFsXG5cdFx0XHRqICs9IDE7IC8vIGJ1dCBhbHNvIHNraXAgb25lIGluIHJpZ2h0IHNpZGUgc2luY2Ugd2UgbWVyZ2Vcblx0XHR9IGVsc2UgaWYgKGEucmV0dXJuU3RhdGVzW2ldIDwgYi5yZXR1cm5TdGF0ZXNbal0pIHsgLy8gY29weSBhW2ldIHRvIE1cblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBhX3BhcmVudDtcblx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IGEucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0aSArPSAxO1xuXHRcdH0gZWxzZSB7IC8vIGIgPiBhLCBjb3B5IGJbal0gdG8gTVxuXHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGJfcGFyZW50O1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYi5yZXR1cm5TdGF0ZXNbal07XG5cdFx0XHRqICs9IDE7XG5cdFx0fVxuXHRcdGsgKz0gMTtcblx0fVxuXHQvLyBjb3B5IG92ZXIgYW55IHBheWxvYWRzIHJlbWFpbmluZyBpbiBlaXRoZXIgYXJyYXlcblx0aWYgKGkgPCBhLnJldHVyblN0YXRlcy5sZW5ndGgpIHtcblx0XHRmb3IgKHZhciBwID0gaTsgcCA8IGEucmV0dXJuU3RhdGVzLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gYS5wYXJlbnRzW3BdO1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYS5yZXR1cm5TdGF0ZXNbcF07XG5cdFx0XHRrICs9IDE7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvciAodmFyIHAgPSBqOyBwIDwgYi5yZXR1cm5TdGF0ZXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBiLnBhcmVudHNbcF07XG5cdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBiLnJldHVyblN0YXRlc1twXTtcblx0XHRcdGsgKz0gMTtcblx0XHR9XG5cdH1cblx0Ly8gdHJpbSBtZXJnZWQgaWYgd2UgY29tYmluZWQgYSBmZXcgdGhhdCBoYWQgc2FtZSBzdGFjayB0b3BzXG5cdGlmIChrIDwgbWVyZ2VkUGFyZW50cy5sZW5ndGgpIHsgLy8gd3JpdGUgaW5kZXggPCBsYXN0IHBvc2l0aW9uOyB0cmltXG5cdFx0aWYgKGsgPT09IDEpIHsgLy8gZm9yIGp1c3Qgb25lIG1lcmdlZCBlbGVtZW50LCByZXR1cm4gc2luZ2xldG9uIHRvcFxuXHRcdFx0dmFyIGFfID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKG1lcmdlZFBhcmVudHNbMF0sXG5cdFx0XHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzWzBdKTtcblx0XHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGFfKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhXztcblx0XHR9XG5cdFx0bWVyZ2VkUGFyZW50cyA9IG1lcmdlZFBhcmVudHMuc2xpY2UoMCwgayk7XG5cdFx0bWVyZ2VkUmV0dXJuU3RhdGVzID0gbWVyZ2VkUmV0dXJuU3RhdGVzLnNsaWNlKDAsIGspO1xuXHR9XG5cblx0dmFyIE0gPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChtZXJnZWRQYXJlbnRzLCBtZXJnZWRSZXR1cm5TdGF0ZXMpO1xuXG5cdC8vIGlmIHdlIGNyZWF0ZWQgc2FtZSBhcnJheSBhcyBhIG9yIGIsIHJldHVybiB0aGF0IGluc3RlYWRcblx0Ly8gVE9ETzogdHJhY2sgd2hldGhlciB0aGlzIGlzIHBvc3NpYmxlIGFib3ZlIGR1cmluZyBtZXJnZSBzb3J0IGZvciBzcGVlZFxuXHRpZiAoTSA9PT0gYSkge1xuXHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIGE7XG5cdH1cblx0aWYgKE0gPT09IGIpIHtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgYik7XG5cdFx0fVxuXHRcdHJldHVybiBiO1xuXHR9XG5cdGNvbWJpbmVDb21tb25QYXJlbnRzKG1lcmdlZFBhcmVudHMpO1xuXG5cdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgTSk7XG5cdH1cblx0cmV0dXJuIE07XG59XG5cbi8vXG4vLyBNYWtlIHBhc3Mgb3ZlciBhbGwgPGVtPk08L2VtPiB7QGNvZGUgcGFyZW50c307IG1lcmdlIGFueSB7QGNvZGUgZXF1YWxzKCl9XG4vLyBvbmVzLlxuLy8gL1xuZnVuY3Rpb24gY29tYmluZUNvbW1vblBhcmVudHMocGFyZW50cykge1xuXHR2YXIgdW5pcXVlUGFyZW50cyA9IHt9O1xuXG5cdGZvciAodmFyIHAgPSAwOyBwIDwgcGFyZW50cy5sZW5ndGg7IHArKykge1xuXHRcdHZhciBwYXJlbnQgPSBwYXJlbnRzW3BdO1xuXHRcdGlmICghKHBhcmVudCBpbiB1bmlxdWVQYXJlbnRzKSkge1xuXHRcdFx0dW5pcXVlUGFyZW50c1twYXJlbnRdID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXHRmb3IgKHZhciBxID0gMDsgcSA8IHBhcmVudHMubGVuZ3RoOyBxKyspIHtcblx0XHRwYXJlbnRzW3FdID0gdW5pcXVlUGFyZW50c1twYXJlbnRzW3FdXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dChjb250ZXh0LCBjb250ZXh0Q2FjaGUsIHZpc2l0ZWQpIHtcblx0aWYgKGNvbnRleHQuaXNFbXB0eSgpKSB7XG5cdFx0cmV0dXJuIGNvbnRleHQ7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdmlzaXRlZFtjb250ZXh0XSB8fCBudWxsO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gZXhpc3Rpbmc7XG5cdH1cblx0ZXhpc3RpbmcgPSBjb250ZXh0Q2FjaGUuZ2V0KGNvbnRleHQpO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHR2aXNpdGVkW2NvbnRleHRdID0gZXhpc3Rpbmc7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHZhciBjaGFuZ2VkID0gZmFsc2U7XG5cdHZhciBwYXJlbnRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwYXJlbnQgPSBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dChjb250ZXh0LmdldFBhcmVudChpKSwgY29udGV4dENhY2hlLCB2aXNpdGVkKTtcblx0XHRpZiAoY2hhbmdlZCB8fCBwYXJlbnQgIT09IGNvbnRleHQuZ2V0UGFyZW50KGkpKSB7XG5cdFx0XHRpZiAoIWNoYW5nZWQpIHtcblx0XHRcdFx0cGFyZW50cyA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNvbnRleHQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRwYXJlbnRzW2pdID0gY29udGV4dC5nZXRQYXJlbnQoaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYXJlbnRzW2ldID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXHRpZiAoIWNoYW5nZWQpIHtcblx0XHRjb250ZXh0Q2FjaGUuYWRkKGNvbnRleHQpO1xuXHRcdHZpc2l0ZWRbY29udGV4dF0gPSBjb250ZXh0O1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cdHZhciB1cGRhdGVkID0gbnVsbDtcblx0aWYgKHBhcmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0dXBkYXRlZCA9IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR9IGVsc2UgaWYgKHBhcmVudHMubGVuZ3RoID09PSAxKSB7XG5cdFx0dXBkYXRlZCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZShwYXJlbnRzWzBdLCBjb250ZXh0XG5cdFx0XHRcdC5nZXRSZXR1cm5TdGF0ZSgwKSk7XG5cdH0gZWxzZSB7XG5cdFx0dXBkYXRlZCA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIGNvbnRleHQucmV0dXJuU3RhdGVzKTtcblx0fVxuXHRjb250ZXh0Q2FjaGUuYWRkKHVwZGF0ZWQpO1xuXHR2aXNpdGVkW3VwZGF0ZWRdID0gdXBkYXRlZDtcblx0dmlzaXRlZFtjb250ZXh0XSA9IHVwZGF0ZWQ7XG5cblx0cmV0dXJuIHVwZGF0ZWQ7XG59XG5cbi8vIHRlcidzIHJlY3Vyc2l2ZSB2ZXJzaW9uIG9mIFNhbSdzIGdldEFsbE5vZGVzKClcbmZ1bmN0aW9uIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCkge1xuXHRpZiAobm9kZXMgPT09IG51bGwpIHtcblx0XHRub2RlcyA9IFtdO1xuXHRcdHJldHVybiBnZXRBbGxDb250ZXh0Tm9kZXMoY29udGV4dCwgbm9kZXMsIHZpc2l0ZWQpO1xuXHR9IGVsc2UgaWYgKHZpc2l0ZWQgPT09IG51bGwpIHtcblx0XHR2aXNpdGVkID0ge307XG5cdFx0cmV0dXJuIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGNvbnRleHQgPT09IG51bGwgfHwgdmlzaXRlZFtjb250ZXh0XSAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIG5vZGVzO1xuXHRcdH1cblx0XHR2aXNpdGVkW2NvbnRleHRdID0gY29udGV4dDtcblx0XHRub2Rlcy5wdXNoKGNvbnRleHQpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0Z2V0QWxsQ29udGV4dE5vZGVzKGNvbnRleHQuZ2V0UGFyZW50KGkpLCBub2RlcywgdmlzaXRlZCk7XG5cdFx0fVxuXHRcdHJldHVybiBub2Rlcztcblx0fVxufVxuXG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0ID0gUHJlZGljdGlvbkNvbnRleHQ7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0Q2FjaGUgPSBQcmVkaWN0aW9uQ29udGV4dENhY2hlO1xuZXhwb3J0cy5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuZXhwb3J0cy5wcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuZXhwb3J0cy5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IGdldENhY2hlZFByZWRpY3Rpb25Db250ZXh0O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBDb25zb2xlRXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JMaXN0ZW5lcicpLkNvbnNvbGVFcnJvckxpc3RlbmVyO1xudmFyIFByb3h5RXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JMaXN0ZW5lcicpLlByb3h5RXJyb3JMaXN0ZW5lcjtcblxuZnVuY3Rpb24gUmVjb2duaXplcigpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbIENvbnNvbGVFcnJvckxpc3RlbmVyLklOU1RBTkNFIF07XG4gICAgdGhpcy5faW50ZXJwID0gbnVsbDtcbiAgICB0aGlzLl9zdGF0ZU51bWJlciA9IC0xO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SZWNvZ25pemVyLnRva2VuVHlwZU1hcENhY2hlID0ge307XG5SZWNvZ25pemVyLnJ1bGVJbmRleE1hcENhY2hlID0ge307XG5cblxuUmVjb2duaXplci5wcm90b3R5cGUuY2hlY2tWZXJzaW9uID0gZnVuY3Rpb24odG9vbFZlcnNpb24pIHtcbiAgICB2YXIgcnVudGltZVZlcnNpb24gPSBcIjQuNy4yXCI7XG4gICAgaWYgKHJ1bnRpbWVWZXJzaW9uIT09dG9vbFZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJBTlRMUiBydW50aW1lIGFuZCBnZW5lcmF0ZWQgY29kZSB2ZXJzaW9ucyBkaXNhZ3JlZTogXCIrcnVudGltZVZlcnNpb24rXCIhPVwiK3Rvb2xWZXJzaW9uKTtcbiAgICB9XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5hZGRFcnJvckxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5yZW1vdmVFcnJvckxpc3RlbmVycyA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5UeXBlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRva2VuTmFtZXMgPSB0aGlzLmdldFRva2VuTmFtZXMoKTtcbiAgICBpZiAodG9rZW5OYW1lcz09PW51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgY3VycmVudCByZWNvZ25pemVyIGRvZXMgbm90IHByb3ZpZGUgYSBsaXN0IG9mIHRva2VuIG5hbWVzLlwiKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMudG9rZW5UeXBlTWFwQ2FjaGVbdG9rZW5OYW1lc107XG4gICAgaWYocmVzdWx0PT09dW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHRva2VuTmFtZXMucmVkdWNlKGZ1bmN0aW9uKG8sIGssIGkpIHsgb1trXSA9IGk7IH0pO1xuICAgICAgICByZXN1bHQuRU9GID0gVG9rZW4uRU9GO1xuICAgICAgICB0aGlzLnRva2VuVHlwZU1hcENhY2hlW3Rva2VuTmFtZXNdID0gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gR2V0IGEgbWFwIGZyb20gcnVsZSBuYW1lcyB0byBydWxlIGluZGV4ZXMuXG4vL1xuLy8gPHA+VXNlZCBmb3IgWFBhdGggYW5kIHRyZWUgcGF0dGVybiBjb21waWxhdGlvbi48L3A+XG4vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0UnVsZUluZGV4TWFwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJ1bGVOYW1lcyA9IHRoaXMucnVsZU5hbWVzO1xuICAgIGlmIChydWxlTmFtZXM9PT1udWxsKSB7XG4gICAgICAgIHRocm93KFwiVGhlIGN1cnJlbnQgcmVjb2duaXplciBkb2VzIG5vdCBwcm92aWRlIGEgbGlzdCBvZiBydWxlIG5hbWVzLlwiKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucnVsZUluZGV4TWFwQ2FjaGVbcnVsZU5hbWVzXTtcbiAgICBpZihyZXN1bHQ9PT11bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0ID0gcnVsZU5hbWVzLnJlZHVjZShmdW5jdGlvbihvLCBrLCBpKSB7IG9ba10gPSBpOyB9KTtcbiAgICAgICAgdGhpcy5ydWxlSW5kZXhNYXBDYWNoZVtydWxlTmFtZXNdID0gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW5OYW1lKSB7XG4gICAgdmFyIHR0eXBlID0gdGhpcy5nZXRUb2tlblR5cGVNYXAoKVt0b2tlbk5hbWVdO1xuICAgIGlmICh0dHlwZSAhPT11bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHR0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBUb2tlbi5JTlZBTElEX1RZUEU7XG4gICAgfVxufTtcblxuXG4vLyBXaGF0IGlzIHRoZSBlcnJvciBoZWFkZXIsIG5vcm1hbGx5IGxpbmUvY2hhcmFjdGVyIHBvc2l0aW9uIGluZm9ybWF0aW9uPy8vXG5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRFcnJvckhlYWRlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbGluZSA9IGUuZ2V0T2ZmZW5kaW5nVG9rZW4oKS5saW5lO1xuICAgIHZhciBjb2x1bW4gPSBlLmdldE9mZmVuZGluZ1Rva2VuKCkuY29sdW1uO1xuICAgIHJldHVybiBcImxpbmUgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW47XG59O1xuXG5cbi8vIEhvdyBzaG91bGQgYSB0b2tlbiBiZSBkaXNwbGF5ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZT8gVGhlIGRlZmF1bHRcbi8vICBpcyB0byBkaXNwbGF5IGp1c3QgdGhlIHRleHQsIGJ1dCBkdXJpbmcgZGV2ZWxvcG1lbnQgeW91IG1pZ2h0XG4vLyAgd2FudCB0byBoYXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIHNwaXQgb3V0LiAgT3ZlcnJpZGUgaW4gdGhhdCBjYXNlXG4vLyAgdG8gdXNlIHQudG9TdHJpbmcoKSAod2hpY2gsIGZvciBDb21tb25Ub2tlbiwgZHVtcHMgZXZlcnl0aGluZyBhYm91dFxuLy8gIHRoZSB0b2tlbikuIFRoaXMgaXMgYmV0dGVyIHRoYW4gZm9yY2luZyB5b3UgdG8gb3ZlcnJpZGUgYSBtZXRob2QgaW5cbi8vICB5b3VyIHRva2VuIG9iamVjdHMgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0byBnbyBtb2RpZnkgeW91ciBsZXhlclxuLy8gIHNvIHRoYXQgaXQgY3JlYXRlcyBhIG5ldyBKYXZhIHR5cGUuXG4vL1xuLy8gQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBieSB0aGUgQU5UTFIgNCBSdW50aW1lLiBTcGVjaWZpY1xuLy8gaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3l9IG1heSBwcm92aWRlIGEgc2ltaWxhclxuLy8gZmVhdHVyZSB3aGVuIG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUsIHNlZVxuLy8ge0BsaW5rIERlZmF1bHRFcnJvclN0cmF0ZWd5Ly9nZXRUb2tlbkVycm9yRGlzcGxheX0uXG4vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5FcnJvckRpc3BsYXkgPSBmdW5jdGlvbih0KSB7XG4gICAgaWYgKHQ9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiBcIjxubyB0b2tlbj5cIjtcbiAgICB9XG4gICAgdmFyIHMgPSB0LnRleHQ7XG4gICAgaWYgKHM9PT1udWxsKSB7XG4gICAgICAgIGlmICh0LnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHMgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gXCI8XCIgKyB0LnR5cGUgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzID0gcy5yZXBsYWNlKFwiXFxuXCIsXCJcXFxcblwiKS5yZXBsYWNlKFwiXFxyXCIsXCJcXFxcclwiKS5yZXBsYWNlKFwiXFx0XCIsXCJcXFxcdFwiKTtcbiAgICByZXR1cm4gXCInXCIgKyBzICsgXCInXCI7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb3h5RXJyb3JMaXN0ZW5lcih0aGlzLl9saXN0ZW5lcnMpO1xufTtcblxuLy8gc3ViY2xhc3MgbmVlZHMgdG8gb3ZlcnJpZGUgdGhlc2UgaWYgdGhlcmUgYXJlIHNlbXByZWRzIG9yIGFjdGlvbnNcbi8vIHRoYXQgdGhlIEFUTiBpbnRlcnAgbmVlZHMgdG8gZXhlY3V0ZVxuUmVjb2duaXplci5wcm90b3R5cGUuc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBydWxlSW5kZXgsIGFjdGlvbkluZGV4KSB7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5wcmVjcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4ICwgcHJlY2VkZW5jZSkge1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuLy9JbmRpY2F0ZSB0aGF0IHRoZSByZWNvZ25pemVyIGhhcyBjaGFuZ2VkIGludGVybmFsIHN0YXRlIHRoYXQgaXNcbi8vY29uc2lzdGVudCB3aXRoIHRoZSBBVE4gc3RhdGUgcGFzc2VkIGluLiAgVGhpcyB3YXkgd2UgYWx3YXlzIGtub3dcbi8vd2hlcmUgd2UgYXJlIGluIHRoZSBBVE4gYXMgdGhlIHBhcnNlciBnb2VzIGFsb25nLiBUaGUgcnVsZVxuLy9jb250ZXh0IG9iamVjdHMgZm9ybSBhIHN0YWNrIHRoYXQgbGV0cyB1cyBzZWUgdGhlIHN0YWNrIG9mXG4vL2ludm9raW5nIHJ1bGVzLiBDb21iaW5lIHRoaXMgYW5kIHdlIGhhdmUgY29tcGxldGUgQVROXG4vL2NvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWNvZ25pemVyLnByb3RvdHlwZSwgXCJzdGF0ZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZU51bWJlcjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oc3RhdGUpIHtcblx0XHR0aGlzLl9zdGF0ZU51bWJlciA9IHN0YXRlO1xuXHR9XG59KTtcblxuXG5leHBvcnRzLlJlY29nbml6ZXIgPSBSZWNvZ25pemVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vICBBIHJ1bGUgY29udGV4dCBpcyBhIHJlY29yZCBvZiBhIHNpbmdsZSBydWxlIGludm9jYXRpb24uIEl0IGtub3dzXG4vLyAgd2hpY2ggY29udGV4dCBpbnZva2VkIGl0LCBpZiBhbnkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCBjb250ZXh0LCB0aGVuXG4vLyAgbmF0dXJhbGx5IHRoZSBpbnZva2luZyBzdGF0ZSBpcyBub3QgdmFsaWQuICBUaGUgcGFyZW50IGxpbmtcbi8vICBwcm92aWRlcyBhIGNoYWluIHVwd2FyZHMgZnJvbSB0aGUgY3VycmVudCBydWxlIGludm9jYXRpb24gdG8gdGhlIHJvb3Rcbi8vICBvZiB0aGUgaW52b2NhdGlvbiB0cmVlLCBmb3JtaW5nIGEgc3RhY2suIFdlIGFjdHVhbGx5IGNhcnJ5IG5vXG4vLyAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dCAoZXhjZXB0XG4vLyAgd2hlbiBwYXJzaW5nKS4gV2Uga2VlcCBvbmx5IHRoZSBzdGF0ZSBudW1iZXIgb2YgdGhlIGludm9raW5nIHN0YXRlIGZyb21cbi8vICB0aGUgQVROIHN1Ym1hY2hpbmUgdGhhdCBpbnZva2VkIHRoaXMuIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgc1xuLy8gIHBvaW50ZXIgaW5zaWRlIFBhcnNlclJ1bGVDb250ZXh0IHRoYXQgdHJhY2tzIHRoZSBjdXJyZW50IHN0YXRlXG4vLyAgYmVpbmcgXCJleGVjdXRlZFwiIGZvciB0aGUgY3VycmVudCBydWxlLlxuLy9cbi8vICBUaGUgcGFyZW50IGNvbnRleHRzIGFyZSB1c2VmdWwgZm9yIGNvbXB1dGluZyBsb29rYWhlYWQgc2V0cyBhbmRcbi8vICBnZXR0aW5nIGVycm9yIGluZm9ybWF0aW9uLlxuLy9cbi8vICBUaGVzZSBvYmplY3RzIGFyZSB1c2VkIGR1cmluZyBwYXJzaW5nIGFuZCBwcmVkaWN0aW9uLlxuLy8gIEZvciB0aGUgc3BlY2lhbCBjYXNlIG9mIHBhcnNlcnMsIHdlIHVzZSB0aGUgc3ViY2xhc3Ncbi8vICBQYXJzZXJSdWxlQ29udGV4dC5cbi8vXG4vLyAgQHNlZSBQYXJzZXJSdWxlQ29udGV4dFxuLy8vXG5cbnZhciBSdWxlTm9kZSA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJykuUnVsZU5vZGU7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJykuSU5WQUxJRF9JTlRFUlZBTDtcbnZhciBJTlZBTElEX0FMVF9OVU1CRVIgPSByZXF1aXJlKCcuL2F0bi9BVE4nKS5JTlZBTElEX0FMVF9OVU1CRVI7XG5cbmZ1bmN0aW9uIFJ1bGVDb250ZXh0KHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRSdWxlTm9kZS5jYWxsKHRoaXMpO1xuXHQvLyBXaGF0IGNvbnRleHQgaW52b2tlZCB0aGlzIHJ1bGU/XG5cdHRoaXMucGFyZW50Q3R4ID0gcGFyZW50IHx8IG51bGw7XG5cdC8vIFdoYXQgc3RhdGUgaW52b2tlZCB0aGUgcnVsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0P1xuXHQvLyBUaGUgXCJyZXR1cm4gYWRkcmVzc1wiIGlzIHRoZSBmb2xsb3dTdGF0ZSBvZiBpbnZva2luZ1N0YXRlXG5cdC8vIElmIHBhcmVudCBpcyBudWxsLCB0aGlzIHNob3VsZCBiZSAtMS5cblx0dGhpcy5pbnZva2luZ1N0YXRlID0gaW52b2tpbmdTdGF0ZSB8fCAtMTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUnVsZU5vZGUucHJvdG90eXBlKTtcblJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVDb250ZXh0O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZGVwdGggPSBmdW5jdGlvbigpIHtcblx0dmFyIG4gPSAwO1xuXHR2YXIgcCA9IHRoaXM7XG5cdHdoaWxlIChwICE9PSBudWxsKSB7XG5cdFx0cCA9IHAucGFyZW50Q3R4O1xuXHRcdG4gKz0gMTtcblx0fVxuXHRyZXR1cm4gbjtcbn07XG5cbi8vIEEgY29udGV4dCBpcyBlbXB0eSBpZiB0aGVyZSBpcyBubyBpbnZva2luZyBzdGF0ZTsgbWVhbmluZyBub2JvZHkgY2FsbFxuLy8gY3VycmVudCBjb250ZXh0LlxuUnVsZUNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuaW52b2tpbmdTdGF0ZSA9PT0gLTE7XG59O1xuXG4vLyBzYXRpc2Z5IHRoZSBQYXJzZVRyZWUgLyBTeW50YXhUcmVlIGludGVyZmFjZVxuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0UnVsZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0UGF5bG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbi8vIFJldHVybiB0aGUgY29tYmluZWQgdGV4dCBvZiBhbGwgY2hpbGQgbm9kZXMuIFRoaXMgbWV0aG9kIG9ubHkgY29uc2lkZXJzXG4vLyB0b2tlbnMgd2hpY2ggaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlLlxuLy8gPHA+XG4vLyBTaW5jZSB0b2tlbnMgb24gaGlkZGVuIGNoYW5uZWxzIChlLmcuIHdoaXRlc3BhY2Ugb3IgY29tbWVudHMpIGFyZSBub3Rcbi8vIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlcywgdGhleSB3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIG91dHB1dCBvZiB0aGlzXG4vLyBtZXRob2QuXG4vLyAvXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5nZXRDaGlsZENvdW50KCkgPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHtcblx0XHRcdHJldHVybiBjaGlsZC5nZXRUZXh0KCk7XG5cdFx0fSkuam9pbihcIlwiKTtcblx0fVxufTtcblxuLy8gRm9yIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFyc2UgdHJlZSBpbnRlcm5hbCBub2RlLCByZXR1cm5cbi8vIHRoZSBvdXRlciBhbHRlcm5hdGl2ZSBudW1iZXIgdXNlZCB0byBtYXRjaCB0aGUgaW5wdXQuIERlZmF1bHRcbi8vIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGNvbXB1dGUgbm9yIHN0b3JlIHRoaXMgYWx0IG51bS4gQ3JlYXRlXG4vLyBhIHN1YmNsYXNzIG9mIFBhcnNlclJ1bGVDb250ZXh0IHdpdGggYmFja2luZyBmaWVsZCBhbmQgc2V0XG4vLyBvcHRpb24gY29udGV4dFN1cGVyQ2xhc3MuXG4vLyB0byBzZXQgaXQuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0QWx0TnVtYmVyID0gZnVuY3Rpb24oKSB7IHJldHVybiBJTlZBTElEX0FMVF9OVU1CRVI7IH1cblxuLy8gU2V0IHRoZSBvdXRlciBhbHRlcm5hdGl2ZSBudW1iZXIgZm9yIHRoaXMgY29udGV4dCBub2RlLiBEZWZhdWx0XG4vLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcgdG8gYXZvaWQgYmFja2luZyBmaWVsZCBvdmVyaGVhZCBmb3Jcbi8vIHRyZWVzIHRoYXQgZG9uJ3QgbmVlZCBpdC4gIENyZWF0ZVxuLy8gYSBzdWJjbGFzcyBvZiBQYXJzZXJSdWxlQ29udGV4dCB3aXRoIGJhY2tpbmcgZmllbGQgYW5kIHNldFxuLy8gb3B0aW9uIGNvbnRleHRTdXBlckNsYXNzLlxuUnVsZUNvbnRleHQucHJvdG90eXBlLnNldEFsdE51bWJlciA9IGZ1bmN0aW9uKGFsdE51bWJlcikgeyB9XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gMDtcbn07XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbih2aXNpdG9yKSB7XG5cdHJldHVybiB2aXNpdG9yLnZpc2l0Q2hpbGRyZW4odGhpcyk7XG59O1xuXG4vL25lZWQgdG8gbWFuYWdlIGNpcmN1bGFyIGRlcGVuZGVuY2llcywgc28gZXhwb3J0IG5vd1xuZXhwb3J0cy5SdWxlQ29udGV4dCA9IFJ1bGVDb250ZXh0O1xudmFyIFRyZWVzID0gcmVxdWlyZSgnLi90cmVlL1RyZWVzJykuVHJlZXM7XG5cblxuLy8gUHJpbnQgb3V0IGEgd2hvbGUgdHJlZSwgbm90IGp1c3QgYSBub2RlLCBpbiBMSVNQIGZvcm1hdFxuLy8gKHJvb3QgY2hpbGQxIC4uIGNoaWxkTikuIFByaW50IGp1c3QgYSBub2RlIGlmIHRoaXMgaXMgYSBsZWFmLlxuLy9cblxuUnVsZUNvbnRleHQucHJvdG90eXBlLnRvU3RyaW5nVHJlZSA9IGZ1bmN0aW9uKHJ1bGVOYW1lcywgcmVjb2cpIHtcblx0cmV0dXJuIFRyZWVzLnRvU3RyaW5nVHJlZSh0aGlzLCBydWxlTmFtZXMsIHJlY29nKTtcbn07XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKHJ1bGVOYW1lcywgc3RvcCkge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0c3RvcCA9IHN0b3AgfHwgbnVsbDtcblx0dmFyIHAgPSB0aGlzO1xuXHR2YXIgcyA9IFwiW1wiO1xuXHR3aGlsZSAocCAhPT0gbnVsbCAmJiBwICE9PSBzdG9wKSB7XG5cdFx0aWYgKHJ1bGVOYW1lcyA9PT0gbnVsbCkge1xuXHRcdFx0aWYgKCFwLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRzICs9IHAuaW52b2tpbmdTdGF0ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHJpID0gcC5ydWxlSW5kZXg7XG5cdFx0XHR2YXIgcnVsZU5hbWUgPSAocmkgPj0gMCAmJiByaSA8IHJ1bGVOYW1lcy5sZW5ndGgpID8gcnVsZU5hbWVzW3JpXVxuXHRcdFx0XHRcdDogXCJcIiArIHJpO1xuXHRcdFx0cyArPSBydWxlTmFtZTtcblx0XHR9XG5cdFx0aWYgKHAucGFyZW50Q3R4ICE9PSBudWxsICYmIChydWxlTmFtZXMgIT09IG51bGwgfHwgIXAucGFyZW50Q3R4LmlzRW1wdHkoKSkpIHtcblx0XHRcdHMgKz0gXCIgXCI7XG5cdFx0fVxuXHRcdHAgPSBwLnBhcmVudEN0eDtcblx0fVxuXHRzICs9IFwiXVwiO1xuXHRyZXR1cm4gcztcbn07XG5cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vIEEgdG9rZW4gaGFzIHByb3BlcnRpZXM6IHRleHQsIHR5cGUsIGxpbmUsIGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGUgbGluZVxuLy8gKHNvIHdlIGNhbiBpZ25vcmUgdGFicyksIHRva2VuIGNoYW5uZWwsIGluZGV4LCBhbmQgc291cmNlIGZyb20gd2hpY2hcbi8vIHdlIG9idGFpbmVkIHRoaXMgdG9rZW4uXG5cbmZ1bmN0aW9uIFRva2VuKCkge1xuXHR0aGlzLnNvdXJjZSA9IG51bGw7XG5cdHRoaXMudHlwZSA9IG51bGw7IC8vIHRva2VuIHR5cGUgb2YgdGhlIHRva2VuXG5cdHRoaXMuY2hhbm5lbCA9IG51bGw7IC8vIFRoZSBwYXJzZXIgaWdub3JlcyBldmVyeXRoaW5nIG5vdCBvbiBERUZBVUxUX0NIQU5ORUxcblx0dGhpcy5zdGFydCA9IG51bGw7IC8vIG9wdGlvbmFsOyByZXR1cm4gLTEgaWYgbm90IGltcGxlbWVudGVkLlxuXHR0aGlzLnN0b3AgPSBudWxsOyAvLyBvcHRpb25hbDsgcmV0dXJuIC0xIGlmIG5vdCBpbXBsZW1lbnRlZC5cblx0dGhpcy50b2tlbkluZGV4ID0gbnVsbDsgLy8gZnJvbSAwLi5uLTEgb2YgdGhlIHRva2VuIG9iamVjdCBpbiB0aGUgaW5wdXQgc3RyZWFtXG5cdHRoaXMubGluZSA9IG51bGw7IC8vIGxpbmU9MS4ubiBvZiB0aGUgMXN0IGNoYXJhY3RlclxuXHR0aGlzLmNvbHVtbiA9IG51bGw7IC8vIGJlZ2lubmluZyBvZiB0aGUgbGluZSBhdCB3aGljaCBpdCBvY2N1cnMsIDAuLm4tMVxuXHR0aGlzLl90ZXh0ID0gbnVsbDsgLy8gdGV4dCBvZiB0aGUgdG9rZW4uXG5cdHJldHVybiB0aGlzO1xufVxuXG5Ub2tlbi5JTlZBTElEX1RZUEUgPSAwO1xuXG4vLyBEdXJpbmcgbG9va2FoZWFkIG9wZXJhdGlvbnMsIHRoaXMgXCJ0b2tlblwiIHNpZ25pZmllcyB3ZSBoaXQgcnVsZSBlbmQgQVROIHN0YXRlXG4vLyBhbmQgZGlkIG5vdCBmb2xsb3cgaXQgZGVzcGl0ZSBuZWVkaW5nIHRvLlxuVG9rZW4uRVBTSUxPTiA9IC0yO1xuXG5Ub2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFID0gMTtcblxuVG9rZW4uRU9GID0gLTE7XG5cbi8vIEFsbCB0b2tlbnMgZ28gdG8gdGhlIHBhcnNlciAodW5sZXNzIHNraXAoKSBpcyBjYWxsZWQgaW4gdGhhdCBydWxlKVxuLy8gb24gYSBwYXJ0aWN1bGFyIFwiY2hhbm5lbFwiLiBUaGUgcGFyc2VyIHR1bmVzIHRvIGEgcGFydGljdWxhciBjaGFubmVsXG4vLyBzbyB0aGF0IHdoaXRlc3BhY2UgZXRjLi4uIGNhbiBnbyB0byB0aGUgcGFyc2VyIG9uIGEgXCJoaWRkZW5cIiBjaGFubmVsLlxuXG5Ub2tlbi5ERUZBVUxUX0NIQU5ORUwgPSAwO1xuXG4vLyBBbnl0aGluZyBvbiBkaWZmZXJlbnQgY2hhbm5lbCB0aGFuIERFRkFVTFRfQ0hBTk5FTCBpcyBub3QgcGFyc2VkXG4vLyBieSBwYXJzZXIuXG5cblRva2VuLkhJRERFTl9DSEFOTkVMID0gMTtcblxuLy8gRXhwbGljaXRseSBzZXQgdGhlIHRleHQgZm9yIHRoaXMgdG9rZW4uIElmIHtjb2RlIHRleHR9IGlzIG5vdFxuLy8ge0Bjb2RlIG51bGx9LCB0aGVuIHtAbGluayAvL2dldFRleHR9IHdpbGwgcmV0dXJuIHRoaXMgdmFsdWUgcmF0aGVyIHRoYW5cbi8vIGV4dHJhY3RpbmcgdGhlIHRleHQgZnJvbSB0aGUgaW5wdXQuXG4vL1xuLy8gQHBhcmFtIHRleHQgVGhlIGV4cGxpY2l0IHRleHQgb2YgdGhlIHRva2VuLCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRleHRcbi8vIHNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBpbnB1dCBhbG9uZyB3aXRoIHRoZSBzdGFydCBhbmQgc3RvcCBpbmRleGVzXG4vLyBvZiB0aGUgdG9rZW4uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb2tlbi5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0dGhpcy5fdGV4dCA9IHRleHQ7XG5cdH1cbn0pO1xuXG5Ub2tlbi5wcm90b3R5cGUuZ2V0VG9rZW5Tb3VyY2UgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc291cmNlWzBdO1xufTtcblxuVG9rZW4ucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnNvdXJjZVsxXTtcbn07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApIHtcblx0VG9rZW4uY2FsbCh0aGlzKTtcblx0dGhpcy5zb3VyY2UgPSBzb3VyY2UgIT09IHVuZGVmaW5lZCA/IHNvdXJjZSA6IENvbW1vblRva2VuLkVNUFRZX1NPVVJDRTtcblx0dGhpcy50eXBlID0gdHlwZSAhPT0gdW5kZWZpbmVkID8gdHlwZSA6IG51bGw7XG5cdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWwgIT09IHVuZGVmaW5lZCA/IGNoYW5uZWwgOiBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cdHRoaXMuc3RhcnQgPSBzdGFydCAhPT0gdW5kZWZpbmVkID8gc3RhcnQgOiAtMTtcblx0dGhpcy5zdG9wID0gc3RvcCAhPT0gdW5kZWZpbmVkID8gc3RvcCA6IC0xO1xuXHR0aGlzLnRva2VuSW5kZXggPSAtMTtcblx0aWYgKHRoaXMuc291cmNlWzBdICE9PSBudWxsKSB7XG5cdFx0dGhpcy5saW5lID0gc291cmNlWzBdLmxpbmU7XG5cdFx0dGhpcy5jb2x1bW4gPSBzb3VyY2VbMF0uY29sdW1uO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuY29sdW1uID0gLTE7XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVG9rZW4ucHJvdG90eXBlKTtcbkNvbW1vblRva2VuLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuO1xuXG4vLyBBbiBlbXB0eSB7QGxpbmsgUGFpcn0gd2hpY2ggaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZlxuLy8ge0BsaW5rIC8vc291cmNlfSBmb3IgdG9rZW5zIHRoYXQgZG8gbm90IGhhdmUgYSBzb3VyY2UuXG5Db21tb25Ub2tlbi5FTVBUWV9TT1VSQ0UgPSBbIG51bGwsIG51bGwgXTtcblxuLy8gQ29uc3RydWN0cyBhIG5ldyB7QGxpbmsgQ29tbW9uVG9rZW59IGFzIGEgY29weSBvZiBhbm90aGVyIHtAbGluayBUb2tlbn0uXG4vL1xuLy8gPHA+XG4vLyBJZiB7QGNvZGUgb2xkVG9rZW59IGlzIGFsc28gYSB7QGxpbmsgQ29tbW9uVG9rZW59IGluc3RhbmNlLCB0aGUgbmV3bHlcbi8vIGNvbnN0cnVjdGVkIHRva2VuIHdpbGwgc2hhcmUgYSByZWZlcmVuY2UgdG8gdGhlIHtAbGluayAvL3RleHR9IGZpZWxkIGFuZFxuLy8gdGhlIHtAbGluayBQYWlyfSBzdG9yZWQgaW4ge0BsaW5rIC8vc291cmNlfS4gT3RoZXJ3aXNlLCB7QGxpbmsgLy90ZXh0fSB3aWxsXG4vLyBiZSBhc3NpZ25lZCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vZ2V0VGV4dH0sIGFuZCB7QGxpbmsgLy9zb3VyY2V9XG4vLyB3aWxsIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJlc3VsdCBvZiB7QGxpbmsgVG9rZW4vL2dldFRva2VuU291cmNlfSBhbmRcbi8vIHtAbGluayBUb2tlbi8vZ2V0SW5wdXRTdHJlYW19LjwvcD5cbi8vXG4vLyBAcGFyYW0gb2xkVG9rZW4gVGhlIHRva2VuIHRvIGNvcHkuXG4vL1xuQ29tbW9uVG9rZW4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gbmV3IENvbW1vblRva2VuKHRoaXMuc291cmNlLCB0aGlzLnR5cGUsIHRoaXMuY2hhbm5lbCwgdGhpcy5zdGFydCxcblx0XHRcdHRoaXMuc3RvcCk7XG5cdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5JbmRleDtcblx0dC5saW5lID0gdGhpcy5saW5lO1xuXHR0LmNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR0LnRleHQgPSB0aGlzLnRleHQ7XG5cdHJldHVybiB0O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbW1vblRva2VuLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH1cblx0XHR2YXIgaW5wdXQgPSB0aGlzLmdldElucHV0U3RyZWFtKCk7XG5cdFx0aWYgKGlucHV0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dmFyIG4gPSBpbnB1dC5zaXplO1xuXHRcdGlmICh0aGlzLnN0YXJ0IDwgbiAmJiB0aGlzLnN0b3AgPCBuKSB7XG5cdFx0XHRyZXR1cm4gaW5wdXQuZ2V0VGV4dCh0aGlzLnN0YXJ0LCB0aGlzLnN0b3ApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCI8RU9GPlwiO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcblxuQ29tbW9uVG9rZW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0eHQgPSB0aGlzLnRleHQ7XG5cdGlmICh0eHQgIT09IG51bGwpIHtcblx0XHR0eHQgPSB0eHQucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIikucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIikucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIik7XG5cdH0gZWxzZSB7XG5cdFx0dHh0ID0gXCI8bm8gdGV4dD5cIjtcblx0fVxuXHRyZXR1cm4gXCJbQFwiICsgdGhpcy50b2tlbkluZGV4ICsgXCIsXCIgKyB0aGlzLnN0YXJ0ICsgXCI6XCIgKyB0aGlzLnN0b3AgKyBcIj0nXCIgK1xuXHRcdFx0dHh0ICsgXCInLDxcIiArIHRoaXMudHlwZSArIFwiPlwiICtcblx0XHRcdCh0aGlzLmNoYW5uZWwgPiAwID8gXCIsY2hhbm5lbD1cIiArIHRoaXMuY2hhbm5lbCA6IFwiXCIpICsgXCIsXCIgK1xuXHRcdFx0dGhpcy5saW5lICsgXCI6XCIgKyB0aGlzLmNvbHVtbiArIFwiXVwiO1xufTtcblxuZXhwb3J0cy5Ub2tlbiA9IFRva2VuO1xuZXhwb3J0cy5Db21tb25Ub2tlbiA9IENvbW1vblRva2VuO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5mdW5jdGlvbiBhcnJheVRvU3RyaW5nKGEpIHtcbiAgICByZXR1cm4gXCJbXCIgKyBhLmpvaW4oXCIsIFwiKSArIFwiXVwiO1xufVxuXG5TdHJpbmcucHJvdG90eXBlLnNlZWQgPSBTdHJpbmcucHJvdG90eXBlLnNlZWQgfHwgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgMzIpKTtcblxuU3RyaW5nLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVtYWluZGVyLCBieXRlcywgaDEsIGgxYiwgYzEsIGMxYiwgYzIsIGMyYiwgazEsIGksXG4gICAgICAgIGtleSA9IHRoaXMudG9TdHJpbmcoKTtcblxuICAgIHJlbWFpbmRlciA9IGtleS5sZW5ndGggJiAzOyAvLyBrZXkubGVuZ3RoICUgNFxuICAgIGJ5dGVzID0ga2V5Lmxlbmd0aCAtIHJlbWFpbmRlcjtcbiAgICBoMSA9IFN0cmluZy5wcm90b3R5cGUuc2VlZDtcbiAgICBjMSA9IDB4Y2M5ZTJkNTE7XG4gICAgYzIgPSAweDFiODczNTkzO1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBieXRlcykge1xuICAgICAgICBrMSA9XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZikpIHxcbiAgICAgICAgICAgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDgpIHxcbiAgICAgICAgICAgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNCk7XG4gICAgICAgICsraTtcblxuICAgICAgICBrMSA9ICgoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuICAgICAgICBrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcbiAgICAgICAgazEgPSAoKCgoazEgJiAweGZmZmYpICogYzIpICsgKCgoKGsxID4+PiAxNikgKiBjMikgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblxuICAgICAgICBoMSBePSBrMTtcbiAgICAgICAgaDEgPSAoaDEgPDwgMTMpIHwgKGgxID4+PiAxOSk7XG4gICAgICAgIGgxYiA9ICgoKChoMSAmIDB4ZmZmZikgKiA1KSArICgoKChoMSA+Pj4gMTYpICogNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgaDEgPSAoKChoMWIgJiAweGZmZmYpICsgMHg2YjY0KSArICgoKChoMWIgPj4+IDE2KSArIDB4ZTY1NCkgJiAweGZmZmYpIDw8IDE2KSk7XG4gICAgfVxuXG4gICAgazEgPSAwO1xuXG4gICAgc3dpdGNoIChyZW1haW5kZXIpIHtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBrMSBePSAoa2V5LmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZik7XG5cbiAgICAgICAgICAgIGsxID0gKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgICAgICAgICAgazEgPSAoazEgPDwgMTUpIHwgKGsxID4+PiAxNyk7XG4gICAgICAgICAgICBrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgICAgIGgxIF49IGsxO1xuICAgIH1cblxuICAgIGgxIF49IGtleS5sZW5ndGg7XG5cbiAgICBoMSBePSBoMSA+Pj4gMTY7XG4gICAgaDEgPSAoKChoMSAmIDB4ZmZmZikgKiAweDg1ZWJjYTZiKSArICgoKChoMSA+Pj4gMTYpICogMHg4NWViY2E2YikgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgIGgxIF49IGgxID4+PiAxMztcbiAgICBoMSA9ICgoKChoMSAmIDB4ZmZmZikgKiAweGMyYjJhZTM1KSArICgoKChoMSA+Pj4gMTYpICogMHhjMmIyYWUzNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICBoMSBePSBoMSA+Pj4gMTY7XG5cbiAgICByZXR1cm4gaDEgPj4+IDA7XG59O1xuXG5mdW5jdGlvbiBzdGFuZGFyZEVxdWFsc0Z1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYS5lcXVhbHMoYik7XG59XG5cbmZ1bmN0aW9uIHN0YW5kYXJkSGFzaENvZGVGdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuaGFzaENvZGUoKTtcbn1cblxuZnVuY3Rpb24gU2V0KGhhc2hGdW5jdGlvbiwgZXF1YWxzRnVuY3Rpb24pIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmhhc2hGdW5jdGlvbiA9IGhhc2hGdW5jdGlvbiB8fCBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb247XG4gICAgdGhpcy5lcXVhbHNGdW5jdGlvbiA9IGVxdWFsc0Z1bmN0aW9uIHx8IHN0YW5kYXJkRXF1YWxzRnVuY3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiaGFzaF9cIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsID0gbCArIHRoaXMuZGF0YVtrZXldLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICB9XG59KTtcblxuU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgaGFzaCA9IHRoaXMuaGFzaEZ1bmN0aW9uKHZhbHVlKTtcbiAgICB2YXIga2V5ID0gXCJoYXNoX1wiICsgaGFzaDtcbiAgICBpZiAoa2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5kYXRhW2tleV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbih2YWx1ZSwgdmFsdWVzW2ldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0gPSBbdmFsdWVdO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufTtcblxuU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmdldCh2YWx1ZSkgIT0gbnVsbDtcbn07XG5cblNldC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2hGdW5jdGlvbih2YWx1ZSk7XG4gICAgdmFyIGtleSA9IFwiaGFzaF9cIiArIGhhc2g7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24odmFsdWUsIHZhbHVlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGwgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihcImhhc2hfXCIpID09PSAwKSB7XG4gICAgICAgICAgICBsID0gbC5jb25jYXQodGhpcy5kYXRhW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsO1xufTtcblxuU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYXJyYXlUb1N0cmluZyh0aGlzLnZhbHVlcygpKTtcbn07XG5cbmZ1bmN0aW9uIEJpdFNldCgpIHtcbiAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuQml0U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbdmFsdWVdID0gdHJ1ZTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGJpdHMgPSB0aGlzO1xuICAgIE9iamVjdC5rZXlzKHNldC5kYXRhKS5tYXAoZnVuY3Rpb24gKGFsdCkge1xuICAgICAgICBiaXRzLmFkZChhbHQpO1xuICAgIH0pO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBkZWxldGUgdGhpcy5kYXRhW3ZhbHVlXTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3ZhbHVlXSA9PT0gdHJ1ZTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5taW5WYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gTWF0aC5taW4uYXBwbHkobnVsbCwgdGhpcy52YWx1ZXMoKSk7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnZhbHVlcygpKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBCaXRTZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzaENvZGUoKSA9PT0gb3RoZXIuaGFzaENvZGUoKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCaXRTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpLmxlbmd0aDtcbiAgICB9XG59KTtcblxuQml0U2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJ7XCIgKyB0aGlzLnZhbHVlcygpLmpvaW4oXCIsIFwiKSArIFwifVwiO1xufTtcblxuZnVuY3Rpb24gTWFwKGhhc2hGdW5jdGlvbiwgZXF1YWxzRnVuY3Rpb24pIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmhhc2hGdW5jdGlvbiA9IGhhc2hGdW5jdGlvbiB8fCBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb247XG4gICAgdGhpcy5lcXVhbHNGdW5jdGlvbiA9IGVxdWFsc0Z1bmN0aW9uIHx8IHN0YW5kYXJkRXF1YWxzRnVuY3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXAucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgZm9yICh2YXIgaGFzaEtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmIChoYXNoS2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGwgPSBsICsgdGhpcy5kYXRhW2hhc2hLZXldLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICB9XG59KTtcblxuTWFwLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBoYXNoS2V5ID0gXCJoYXNoX1wiICsgdGhpcy5oYXNoRnVuY3Rpb24oa2V5KTtcbiAgICBpZiAoaGFzaEtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmRhdGFbaGFzaEtleV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVxdWFsc0Z1bmN0aW9uKGtleSwgZW50cnkua2V5KSkge1xuICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9sZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVudHJpZXMucHVzaCh7a2V5OmtleSwgdmFsdWU6dmFsdWV9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtoYXNoS2V5XSA9IFt7a2V5OmtleSwgdmFsdWU6dmFsdWV9XTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn07XG5cbk1hcC5wcm90b3R5cGUuY29udGFpbnNLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGhhc2hLZXkgPSBcImhhc2hfXCIgKyB0aGlzLmhhc2hGdW5jdGlvbihrZXkpO1xuICAgIGlmKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGhhc2hLZXkgPSBcImhhc2hfXCIgKyB0aGlzLmhhc2hGdW5jdGlvbihrZXkpO1xuICAgIGlmKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuTWFwLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgbCA9IGwuY29uY2F0KHRoaXMuZGF0YVtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbDtcbn07XG5cblxuTWFwLnByb3RvdHlwZS5nZXRLZXlzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS5rZXk7XG4gICAgfSk7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUudmFsdWU7XG4gICAgfSk7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNzID0gdGhpcy5lbnRyaWVzKCkubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAneycgKyBlbnRyeS5rZXkgKyAnOicgKyBlbnRyeS52YWx1ZSArICd9JztcbiAgICB9KTtcbiAgICByZXR1cm4gJ1snICsgc3Muam9pbihcIiwgXCIpICsgJ10nO1xufTtcblxuXG5mdW5jdGlvbiBBbHREaWN0KCkge1xuICAgIHRoaXMuZGF0YSA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5cbkFsdERpY3QucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgPSBcImstXCIgKyBrZXk7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbkFsdERpY3QucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAga2V5ID0gXCJrLVwiICsga2V5O1xuICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWU7XG59O1xuXG5BbHREaWN0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xuICAgIHJldHVybiBrZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBkYXRhW2tleV07XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBEb3VibGVEaWN0KCkge1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBIYXNoKCkge1xuICAgIHRoaXMuY291bnQgPSAwO1xuICAgIHRoaXMuaGFzaCA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkhhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZS5hcHBseSh2YWx1ZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgICAgIGsgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgayA9IHZhbHVlLmhhc2hDb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnVwZGF0ZUhhc2hDb2RlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsgPSBrICogMHhDQzlFMkQ1MTtcbiAgICAgICAgICAgIGsgPSAoayA8PCAxNSkgfCAoayA+Pj4gKDMyIC0gMTUpKTtcbiAgICAgICAgICAgIGsgPSBrICogMHgxQjg3MzU5MztcbiAgICAgICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmNvdW50ICsgMTtcbiAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5oYXNoIF4gaztcbiAgICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCAxMykgfCAoaGFzaCA+Pj4gKDMyIC0gMTMpKTtcbiAgICAgICAgICAgIGhhc2ggPSBoYXNoICogNSArIDB4RTY1NDZCNjQ7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSBoYXNoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5IYXNoLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2ggXiAodGhpcy5jb3VudCAqIDQpO1xuICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4+IDE2KTtcbiAgICBoYXNoID0gaGFzaCAqIDB4ODVFQkNBNkI7XG4gICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+Pj4gMTMpO1xuICAgIGhhc2ggPSBoYXNoICogMHhDMkIyQUUzNTtcbiAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+PiAxNik7XG4gICAgcmV0dXJuIGhhc2g7XG59XG5cbmZ1bmN0aW9uIGhhc2hTdHVmZigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgaGFzaC51cGRhdGUuYXBwbHkoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn1cblxuRG91YmxlRGljdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgZCA9IHRoaXNbYV0gfHwgbnVsbDtcbiAgICByZXR1cm4gZCA9PT0gbnVsbCA/IG51bGwgOiAoZFtiXSB8fCBudWxsKTtcbn07XG5cbkRvdWJsZURpY3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBvKSB7XG4gICAgdmFyIGQgPSB0aGlzW2FdIHx8IG51bGw7XG4gICAgaWYgKGQgPT09IG51bGwpIHtcbiAgICAgICAgZCA9IHt9O1xuICAgICAgICB0aGlzW2FdID0gZDtcbiAgICB9XG4gICAgZFtiXSA9IG87XG59O1xuXG5cbmZ1bmN0aW9uIGVzY2FwZVdoaXRlc3BhY2UocywgZXNjYXBlU3BhY2VzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIilcbiAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKVxuICAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpO1xuICAgIGlmIChlc2NhcGVTcGFjZXMpIHtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvIC9nLCBcIlxcdTAwQjdcIik7XG4gICAgfVxuICAgIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiB0aXRsZUNhc2Uoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHdcXFMqL2csIGZ1bmN0aW9uICh0eHQpIHtcbiAgICAgICAgcmV0dXJuIHR4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSk7XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhLCBiKVxue1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSB8fCAhQXJyYXkuaXNBcnJheShiKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhID09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYVtpXSA9PSBiW2ldKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICghYVtpXS5lcXVhbHMoYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0cy5IYXNoID0gSGFzaDtcbmV4cG9ydHMuU2V0ID0gU2V0O1xuZXhwb3J0cy5NYXAgPSBNYXA7XG5leHBvcnRzLkJpdFNldCA9IEJpdFNldDtcbmV4cG9ydHMuQWx0RGljdCA9IEFsdERpY3Q7XG5leHBvcnRzLkRvdWJsZURpY3QgPSBEb3VibGVEaWN0O1xuZXhwb3J0cy5oYXNoU3R1ZmYgPSBoYXNoU3R1ZmY7XG5leHBvcnRzLmVzY2FwZVdoaXRlc3BhY2UgPSBlc2NhcGVXaGl0ZXNwYWNlO1xuZXhwb3J0cy5hcnJheVRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcbmV4cG9ydHMudGl0bGVDYXNlID0gdGl0bGVDYXNlO1xuZXhwb3J0cy5lcXVhbEFycmF5cyA9IGVxdWFsQXJyYXlzO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgTEwxQW5hbHl6ZXIgPSByZXF1aXJlKCcuLy4uL0xMMUFuYWx5emVyJykuTEwxQW5hbHl6ZXI7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEFUTihncmFtbWFyVHlwZSAsIG1heFRva2VuVHlwZSkge1xuXG4gICAgLy8gVXNlZCBmb3IgcnVudGltZSBkZXNlcmlhbGl6YXRpb24gb2YgQVROcyBmcm9tIHN0cmluZ3MvLy9cbiAgICAvLyBUaGUgdHlwZSBvZiB0aGUgQVROLlxuICAgIHRoaXMuZ3JhbW1hclR5cGUgPSBncmFtbWFyVHlwZTtcbiAgICAvLyBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYW55IHN5bWJvbCByZWNvZ25pemVkIGJ5IGEgdHJhbnNpdGlvbiBpbiB0aGUgQVROLlxuICAgIHRoaXMubWF4VG9rZW5UeXBlID0gbWF4VG9rZW5UeXBlO1xuICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgLy8gRWFjaCBzdWJydWxlL3J1bGUgaXMgYSBkZWNpc2lvbiBwb2ludCBhbmQgd2UgbXVzdCB0cmFjayB0aGVtIHNvIHdlXG4gICAgLy8gIGNhbiBnbyBiYWNrIGxhdGVyIGFuZCBidWlsZCBERkEgcHJlZGljdG9ycyBmb3IgdGhlbS4gIFRoaXMgaW5jbHVkZXNcbiAgICAvLyAgYWxsIHRoZSBydWxlcywgc3VicnVsZXMsIG9wdGlvbmFsIGJsb2NrcywgKCkrLCAoKSogZXRjLi4uXG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUgPSBbXTtcbiAgICAvLyBNYXBzIGZyb20gcnVsZSBpbmRleCB0byBzdGFydGluZyBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdGFydFN0YXRlID0gW107XG4gICAgLy8gTWFwcyBmcm9tIHJ1bGUgaW5kZXggdG8gc3RvcCBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdG9wU3RhdGUgPSBudWxsO1xuICAgIHRoaXMubW9kZU5hbWVUb1N0YXJ0U3RhdGUgPSB7fTtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBtYXBzIHRoZSBydWxlIGluZGV4IHRvIHRoZSByZXN1bHRpbmcgdG9rZW4gdHlwZS5cbiAgICAvLyBGb3IgcGFyc2VyIEFUTnMsIHRoaXMgbWFwcyB0aGUgcnVsZSBpbmRleCB0byB0aGUgZ2VuZXJhdGVkIGJ5cGFzcyB0b2tlblxuICAgIC8vIHR5cGUgaWYgdGhlXG4gICAgLy8ge0BsaW5rIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMvL2lzR2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnN9XG4gICAgLy8gZGVzZXJpYWxpemF0aW9uIG9wdGlvbiB3YXMgc3BlY2lmaWVkOyBvdGhlcndpc2UsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMucnVsZVRvVG9rZW5UeXBlID0gbnVsbDtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBpcyBhbiBhcnJheSBvZiB7QGxpbmsgTGV4ZXJBY3Rpb259IG9iamVjdHMgd2hpY2ggbWF5XG4gICAgLy8gYmUgcmVmZXJlbmNlZCBieSBhY3Rpb24gdHJhbnNpdGlvbnMgaW4gdGhlIEFUTi5cbiAgICB0aGlzLmxleGVyQWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5tb2RlVG9TdGFydFN0YXRlID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIHZhbGlkIHRva2VucyB0aGF0IGNhbiBvY2N1ciBzdGFydGluZyBpbiBzdGF0ZSB7QGNvZGUgc30uXG4vLyAgSWYge0Bjb2RlIGN0eH0gaXMgbnVsbCwgdGhlIHNldCBvZiB0b2tlbnMgd2lsbCBub3QgaW5jbHVkZSB3aGF0IGNhbiBmb2xsb3dcbi8vICB0aGUgcnVsZSBzdXJyb3VuZGluZyB7QGNvZGUgc30uIEluIG90aGVyIHdvcmRzLCB0aGUgc2V0IHdpbGwgYmVcbi8vICByZXN0cmljdGVkIHRvIHRva2VucyByZWFjaGFibGUgc3RheWluZyB3aXRoaW4ge0Bjb2RlIHN9J3MgcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc0luQ29udGV4dCA9IGZ1bmN0aW9uKHMsIGN0eCkge1xuICAgIHZhciBhbmFsID0gbmV3IExMMUFuYWx5emVyKHRoaXMpO1xuICAgIHJldHVybiBhbmFsLkxPT0socywgbnVsbCwgY3R4KTtcbn07XG5cbi8vIENvbXB1dGUgdGhlIHNldCBvZiB2YWxpZCB0b2tlbnMgdGhhdCBjYW4gb2NjdXIgc3RhcnRpbmcgaW4ge0Bjb2RlIHN9IGFuZFxuLy8gc3RheWluZyBpbiBzYW1lIHJ1bGUuIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgaW4gc2V0IGlmIHdlIHJlYWNoIGVuZCBvZlxuLy8gcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc05vQ29udGV4dCA9IGZ1bmN0aW9uKHMpIHtcbiAgICBpZiAocy5uZXh0VG9rZW5XaXRoaW5SdWxlICE9PSBudWxsICkge1xuICAgICAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xuICAgIH1cbiAgICBzLm5leHRUb2tlbldpdGhpblJ1bGUgPSB0aGlzLm5leHRUb2tlbnNJbkNvbnRleHQocywgbnVsbCk7XG4gICAgcy5uZXh0VG9rZW5XaXRoaW5SdWxlLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xufTtcblxuQVROLnByb3RvdHlwZS5uZXh0VG9rZW5zID0gZnVuY3Rpb24ocywgY3R4KSB7XG4gICAgaWYgKCBjdHg9PT11bmRlZmluZWQgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbnNOb0NvbnRleHQocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2Vuc0luQ29udGV4dChzLCBjdHgpO1xuICAgIH1cbn07XG5cbkFUTi5wcm90b3R5cGUuYWRkU3RhdGUgPSBmdW5jdGlvbiggc3RhdGUpIHtcbiAgICBpZiAoIHN0YXRlICE9PSBudWxsICkge1xuICAgICAgICBzdGF0ZS5hdG4gPSB0aGlzO1xuICAgICAgICBzdGF0ZS5zdGF0ZU51bWJlciA9IHRoaXMuc3RhdGVzLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZXMucHVzaChzdGF0ZSk7XG59O1xuXG5BVE4ucHJvdG90eXBlLnJlbW92ZVN0YXRlID0gZnVuY3Rpb24oIHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZXNbc3RhdGUuc3RhdGVOdW1iZXJdID0gbnVsbDsgLy8ganVzdCBmcmVlIG1lbSwgZG9uJ3Qgc2hpZnQgc3RhdGVzIGluIGxpc3Rcbn07XG5cbkFUTi5wcm90b3R5cGUuZGVmaW5lRGVjaXNpb25TdGF0ZSA9IGZ1bmN0aW9uKCBzKSB7XG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUucHVzaChzKTtcbiAgICBzLmRlY2lzaW9uID0gdGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoLTE7XG4gICAgcmV0dXJuIHMuZGVjaXNpb247XG59O1xuXG5BVE4ucHJvdG90eXBlLmdldERlY2lzaW9uU3RhdGUgPSBmdW5jdGlvbiggZGVjaXNpb24pIHtcbiAgICBpZiAodGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoPT09MCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWNpc2lvblRvU3RhdGVbZGVjaXNpb25dO1xuICAgIH1cbn07XG5cbi8vIENvbXB1dGVzIHRoZSBzZXQgb2YgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgQVROIHN0YXRlIG51bWJlclxuLy8ge0Bjb2RlIHN0YXRlTnVtYmVyfSBpbiB0aGUgc3BlY2lmaWVkIGZ1bGwge0Bjb2RlIGNvbnRleHR9LiBUaGlzIG1ldGhvZFxuLy8gY29uc2lkZXJzIHRoZSBjb21wbGV0ZSBwYXJzZXIgY29udGV4dCwgYnV0IGRvZXMgbm90IGV2YWx1YXRlIHNlbWFudGljXG4vLyBwcmVkaWNhdGVzIChpLmUuIGFsbCBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgY2FsY3VsYXRpb24gYXJlXG4vLyBhc3N1bWVkIHRydWUpLiBJZiBhIHBhdGggaW4gdGhlIEFUTiBleGlzdHMgZnJvbSB0aGUgc3RhcnRpbmcgc3RhdGUgdG8gdGhlXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0gb2YgdGhlIG91dGVybW9zdCBjb250ZXh0IHdpdGhvdXQgbWF0Y2hpbmcgYW55XG4vLyBzeW1ib2xzLCB7QGxpbmsgVG9rZW4vL0VPRn0gaXMgYWRkZWQgdG8gdGhlIHJldHVybmVkIHNldC5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY29udGV4dH0gaXMge0Bjb2RlIG51bGx9LCBpdCBpcyB0cmVhdGVkIGFzXG4vLyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL0VNUFRZfS48L3A+XG4vL1xuLy8gQHBhcmFtIHN0YXRlTnVtYmVyIHRoZSBBVE4gc3RhdGUgbnVtYmVyXG4vLyBAcGFyYW0gY29udGV4dCB0aGUgZnVsbCBwYXJzZSBjb250ZXh0XG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgcG90ZW50aWFsbHkgdmFsaWQgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgdGhlXG4vLyBzcGVjaWZpZWQgc3RhdGUgaW4gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxuLy8gQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIEFUTiBkb2VzIG5vdCBjb250YWluIGEgc3RhdGUgd2l0aFxuLy8gbnVtYmVyIHtAY29kZSBzdGF0ZU51bWJlcn1cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcblxuQVROLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCBzdGF0ZU51bWJlciwgY3R4ICkge1xuICAgIGlmICggc3RhdGVOdW1iZXIgPCAwIHx8IHN0YXRlTnVtYmVyID49IHRoaXMuc3RhdGVzLmxlbmd0aCApIHtcbiAgICAgICAgdGhyb3coXCJJbnZhbGlkIHN0YXRlIG51bWJlci5cIik7XG4gICAgfVxuICAgIHZhciBzID0gdGhpcy5zdGF0ZXNbc3RhdGVOdW1iZXJdO1xuICAgIHZhciBmb2xsb3dpbmcgPSB0aGlzLm5leHRUb2tlbnMocyk7XG4gICAgaWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgcmV0dXJuIGZvbGxvd2luZztcbiAgICB9XG4gICAgdmFyIGV4cGVjdGVkID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgZXhwZWN0ZWQuYWRkU2V0KGZvbGxvd2luZyk7XG4gICAgZXhwZWN0ZWQucmVtb3ZlT25lKFRva2VuLkVQU0lMT04pO1xuICAgIHdoaWxlIChjdHggIT09IG51bGwgJiYgY3R4Lmludm9raW5nU3RhdGUgPj0gMCAmJiBmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgdmFyIGludm9raW5nU3RhdGUgPSB0aGlzLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG4gICAgICAgIHZhciBydCA9IGludm9raW5nU3RhdGUudHJhbnNpdGlvbnNbMF07XG4gICAgICAgIGZvbGxvd2luZyA9IHRoaXMubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG4gICAgICAgIGV4cGVjdGVkLmFkZFNldChmb2xsb3dpbmcpO1xuICAgICAgICBleHBlY3RlZC5yZW1vdmVPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgIGN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgfVxuICAgIGlmIChmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgZXhwZWN0ZWQuYWRkT25lKFRva2VuLkVPRik7XG4gICAgfVxuICAgIHJldHVybiBleHBlY3RlZDtcbn07XG5cbkFUTi5JTlZBTElEX0FMVF9OVU1CRVIgPSAwO1xuXG5leHBvcnRzLkFUTiA9IEFUTjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIEEgdHVwbGU6IChBVE4gc3RhdGUsIHByZWRpY3RlZCBhbHQsIHN5bnRhY3RpYywgc2VtYW50aWMgY29udGV4dCkuXG4vLyAgVGhlIHN5bnRhY3RpYyBjb250ZXh0IGlzIGEgZ3JhcGgtc3RydWN0dXJlZCBzdGFjayBub2RlIHdob3NlXG4vLyAgcGF0aChzKSB0byB0aGUgcm9vdCBpcyB0aGUgcnVsZSBpbnZvY2F0aW9uKHMpXG4vLyAgY2hhaW4gdXNlZCB0byBhcnJpdmUgYXQgdGhlIHN0YXRlLiAgVGhlIHNlbWFudGljIGNvbnRleHQgaXNcbi8vICB0aGUgdHJlZSBvZiBzZW1hbnRpYyBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGJlZm9yZSByZWFjaGluZ1xuLy8gIGFuIEFUTiBzdGF0ZS5cbi8vL1xuXG52YXIgRGVjaXNpb25TdGF0ZSA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKS5EZWNpc2lvblN0YXRlO1xudmFyIFNlbWFudGljQ29udGV4dCA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuU2VtYW50aWNDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKFwiLi4vVXRpbHNcIikuSGFzaDtcblxuXG5mdW5jdGlvbiBjaGVja1BhcmFtcyhwYXJhbXMsIGlzQ2ZnKSB7XG5cdGlmKHBhcmFtcz09PW51bGwpIHtcblx0XHR2YXIgcmVzdWx0ID0geyBzdGF0ZTpudWxsLCBhbHQ6bnVsbCwgY29udGV4dDpudWxsLCBzZW1hbnRpY0NvbnRleHQ6bnVsbCB9O1xuXHRcdGlmKGlzQ2ZnKSB7XG5cdFx0XHRyZXN1bHQucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSAwO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9IGVsc2Uge1xuXHRcdHZhciBwcm9wcyA9IHt9O1xuXHRcdHByb3BzLnN0YXRlID0gcGFyYW1zLnN0YXRlIHx8IG51bGw7XG5cdFx0cHJvcHMuYWx0ID0gKHBhcmFtcy5hbHQgPT09IHVuZGVmaW5lZCkgPyBudWxsIDogcGFyYW1zLmFsdDtcblx0XHRwcm9wcy5jb250ZXh0ID0gcGFyYW1zLmNvbnRleHQgfHwgbnVsbDtcblx0XHRwcm9wcy5zZW1hbnRpY0NvbnRleHQgPSBwYXJhbXMuc2VtYW50aWNDb250ZXh0IHx8IG51bGw7XG5cdFx0aWYoaXNDZmcpIHtcblx0XHRcdHByb3BzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gcGFyYW1zLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0IHx8IDA7XG5cdFx0XHRwcm9wcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCA9IHBhcmFtcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCB8fCBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BzO1xuXHR9XG59XG5cbmZ1bmN0aW9uIEFUTkNvbmZpZyhwYXJhbXMsIGNvbmZpZykge1xuXHR0aGlzLmNoZWNrQ29udGV4dChwYXJhbXMsIGNvbmZpZyk7XG5cdHBhcmFtcyA9IGNoZWNrUGFyYW1zKHBhcmFtcyk7XG5cdGNvbmZpZyA9IGNoZWNrUGFyYW1zKGNvbmZpZywgdHJ1ZSk7XG4gICAgLy8gVGhlIEFUTiBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLy8vXG4gICAgdGhpcy5zdGF0ZSA9IHBhcmFtcy5zdGF0ZSE9PW51bGwgPyBwYXJhbXMuc3RhdGUgOiBjb25maWcuc3RhdGU7XG4gICAgLy8gV2hhdCBhbHQgKG9yIGxleGVyIHJ1bGUpIGlzIHByZWRpY3RlZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24vLy9cbiAgICB0aGlzLmFsdCA9IHBhcmFtcy5hbHQhPT1udWxsID8gcGFyYW1zLmFsdCA6IGNvbmZpZy5hbHQ7XG4gICAgLy8gVGhlIHN0YWNrIG9mIGludm9raW5nIHN0YXRlcyBsZWFkaW5nIHRvIHRoZSBydWxlL3N0YXRlcyBhc3NvY2lhdGVkXG4gICAgLy8gIHdpdGggdGhpcyBjb25maWcuICBXZSB0cmFjayBvbmx5IHRob3NlIGNvbnRleHRzIHB1c2hlZCBkdXJpbmdcbiAgICAvLyAgZXhlY3V0aW9uIG9mIHRoZSBBVE4gc2ltdWxhdG9yLlxuICAgIHRoaXMuY29udGV4dCA9IHBhcmFtcy5jb250ZXh0IT09bnVsbCA/IHBhcmFtcy5jb250ZXh0IDogY29uZmlnLmNvbnRleHQ7XG4gICAgdGhpcy5zZW1hbnRpY0NvbnRleHQgPSBwYXJhbXMuc2VtYW50aWNDb250ZXh0IT09bnVsbCA/IHBhcmFtcy5zZW1hbnRpY0NvbnRleHQgOlxuICAgICAgICAoY29uZmlnLnNlbWFudGljQ29udGV4dCE9PW51bGwgPyBjb25maWcuc2VtYW50aWNDb250ZXh0IDogU2VtYW50aWNDb250ZXh0Lk5PTkUpO1xuICAgIC8vIFdlIGNhbm5vdCBleGVjdXRlIHByZWRpY2F0ZXMgZGVwZW5kZW50IHVwb24gbG9jYWwgY29udGV4dCB1bmxlc3NcbiAgICAvLyB3ZSBrbm93IGZvciBzdXJlIHdlIGFyZSBpbiB0aGUgY29ycmVjdCBjb250ZXh0LiBCZWNhdXNlIHRoZXJlIGlzXG4gICAgLy8gbm8gd2F5IHRvIGRvIHRoaXMgZWZmaWNpZW50bHksIHdlIHNpbXBseSBjYW5ub3QgZXZhbHVhdGVcbiAgICAvLyBkZXBlbmRlbnQgcHJlZGljYXRlcyB1bmxlc3Mgd2UgYXJlIGluIHRoZSBydWxlIHRoYXQgaW5pdGlhbGx5XG4gICAgLy8gaW52b2tlcyB0aGUgQVROIHNpbXVsYXRvci5cbiAgICAvL1xuICAgIC8vIGNsb3N1cmUoKSB0cmFja3MgdGhlIGRlcHRoIG9mIGhvdyBmYXIgd2UgZGlwIGludG8gdGhlXG4gICAgLy8gb3V0ZXIgY29udGV4dDogZGVwdGggJmd0OyAwLiAgTm90ZSB0aGF0IGl0IG1heSBub3QgYmUgdG90YWxseVxuICAgIC8vIGFjY3VyYXRlIGRlcHRoIHNpbmNlIEkgZG9uJ3QgZXZlciBkZWNyZW1lbnQuIFRPRE86IG1ha2UgaXQgYSBib29sZWFuIHRoZW5cbiAgICB0aGlzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gY29uZmlnLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0O1xuICAgIHRoaXMucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSBjb25maWcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuY2hlY2tDb250ZXh0ID0gZnVuY3Rpb24ocGFyYW1zLCBjb25maWcpIHtcblx0aWYoKHBhcmFtcy5jb250ZXh0PT09bnVsbCB8fCBwYXJhbXMuY29udGV4dD09PXVuZGVmaW5lZCkgJiZcblx0XHRcdChjb25maWc9PT1udWxsIHx8IGNvbmZpZy5jb250ZXh0PT09bnVsbCB8fCBjb25maWcuY29udGV4dD09PXVuZGVmaW5lZCkpIHtcblx0XHR0aGlzLmNvbnRleHQgPSBudWxsO1xuXHR9XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cblxuQVROQ29uZmlnLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnN0YXRlLnN0YXRlTnVtYmVyLCB0aGlzLmFsdCwgdGhpcy5jb250ZXh0LCB0aGlzLnNlbWFudGljQ29udGV4dCk7XG59O1xuXG4vLyBBbiBBVE4gY29uZmlndXJhdGlvbiBpcyBlcXVhbCB0byBhbm90aGVyIGlmIGJvdGggaGF2ZVxuLy8gIHRoZSBzYW1lIHN0YXRlLCB0aGV5IHByZWRpY3QgdGhlIHNhbWUgYWx0ZXJuYXRpdmUsIGFuZFxuLy8gIHN5bnRhY3RpYy9zZW1hbnRpYyBjb250ZXh0cyBhcmUgdGhlIHNhbWUuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGUuc3RhdGVOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuYWx0PT09b3RoZXIuYWx0ICYmXG4gICAgICAgICAgICAodGhpcy5jb250ZXh0PT09bnVsbCA/IG90aGVyLmNvbnRleHQ9PT1udWxsIDogdGhpcy5jb250ZXh0LmVxdWFscyhvdGhlci5jb250ZXh0KSkgJiZcbiAgICAgICAgICAgIHRoaXMuc2VtYW50aWNDb250ZXh0LmVxdWFscyhvdGhlci5zZW1hbnRpY0NvbnRleHQpICYmXG4gICAgICAgICAgICB0aGlzLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkPT09b3RoZXIucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQ7XG4gICAgfVxufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlRm9yQ29uZmlnU2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuICAgIGhhc2gudXBkYXRlKHRoaXMuc3RhdGUuc3RhdGVOdW1iZXIsIHRoaXMuYWx0LCB0aGlzLnNlbWFudGljQ29udGV4dCk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzRm9yQ29uZmlnU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGUuc3RhdGVOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuYWx0PT09b3RoZXIuYWx0ICYmXG4gICAgICAgICAgICB0aGlzLnNlbWFudGljQ29udGV4dC5lcXVhbHMob3RoZXIuc2VtYW50aWNDb250ZXh0KTtcbiAgICB9XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCIoXCIgKyB0aGlzLnN0YXRlICsgXCIsXCIgKyB0aGlzLmFsdCArXG4gICAgICAgICh0aGlzLmNvbnRleHQhPT1udWxsID8gXCIsW1wiICsgdGhpcy5jb250ZXh0LnRvU3RyaW5nKCkgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgKHRoaXMuc2VtYW50aWNDb250ZXh0ICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSA/XG4gICAgICAgICAgICAgICAgKFwiLFwiICsgdGhpcy5zZW1hbnRpY0NvbnRleHQudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgKHRoaXMucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+MCA/XG4gICAgICAgICAgICAgICAgKFwiLHVwPVwiICsgdGhpcy5yZWFjaGVzSW50b091dGVyQ29udGV4dClcbiAgICAgICAgICAgICAgICA6IFwiXCIpICsgXCIpXCI7XG59O1xuXG5cbmZ1bmN0aW9uIExleGVyQVROQ29uZmlnKHBhcmFtcywgY29uZmlnKSB7XG5cdEFUTkNvbmZpZy5jYWxsKHRoaXMsIHBhcmFtcywgY29uZmlnKTtcblxuICAgIC8vIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmllbGQgZm9yIHtAbGluayAvL2dldExleGVyQWN0aW9uRXhlY3V0b3J9LlxuXHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IHBhcmFtcy5sZXhlckFjdGlvbkV4ZWN1dG9yIHx8IG51bGw7XG4gICAgdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID0gbGV4ZXJBY3Rpb25FeGVjdXRvciB8fCAoY29uZmlnIT09bnVsbCA/IGNvbmZpZy5sZXhlckFjdGlvbkV4ZWN1dG9yIDogbnVsbCk7XG4gICAgdGhpcy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gPSBjb25maWchPT1udWxsID8gdGhpcy5jaGVja05vbkdyZWVkeURlY2lzaW9uKGNvbmZpZywgdGhpcy5zdGF0ZSkgOiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5Db25maWcucHJvdG90eXBlKTtcbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQVROQ29uZmlnO1xuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5zdGF0ZS5zdGF0ZU51bWJlciwgdGhpcy5hbHQsIHRoaXMuY29udGV4dCwgdGhpcy5zZW1hbnRpY0NvbnRleHQsIHRoaXMucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uLCB0aGlzLmxleGVyQWN0aW9uRXhlY3V0b3IpO1xufTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG4gICAgICAgICAgICAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckFUTkNvbmZpZyAmJlxuICAgICAgICAgICAgdGhpcy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gPT0gb3RoZXIucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uICYmXG4gICAgICAgICAgICAodGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID8gdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yLmVxdWFscyhvdGhlci5sZXhlckFjdGlvbkV4ZWN1dG9yKSA6ICFvdGhlci5sZXhlckFjdGlvbkV4ZWN1dG9yKSAmJlxuICAgICAgICAgICAgQVROQ29uZmlnLnByb3RvdHlwZS5lcXVhbHMuY2FsbCh0aGlzLCBvdGhlcikpO1xufTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlRm9yQ29uZmlnU2V0ID0gTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlO1xuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzRm9yQ29uZmlnU2V0ID0gTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFscztcblxuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuY2hlY2tOb25HcmVlZHlEZWNpc2lvbiA9IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHNvdXJjZS5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gfHxcbiAgICAgICAgKHRhcmdldCBpbnN0YW5jZW9mIERlY2lzaW9uU3RhdGUpICYmIHRhcmdldC5ub25HcmVlZHk7XG59O1xuXG5leHBvcnRzLkFUTkNvbmZpZyA9IEFUTkNvbmZpZztcbmV4cG9ydHMuTGV4ZXJBVE5Db25maWcgPSBMZXhlckFUTkNvbmZpZzsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vL1xuLy8gU3BlY2lhbGl6ZWQge0BsaW5rIFNldH17QGNvZGUgPH17QGxpbmsgQVROQ29uZmlnfXtAY29kZSA+fSB0aGF0IGNhbiB0cmFja1xuLy8gaW5mbyBhYm91dCB0aGUgc2V0LCB3aXRoIHN1cHBvcnQgZm9yIGNvbWJpbmluZyBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zIHVzaW5nIGFcbi8vIGdyYXBoLXN0cnVjdHVyZWQgc3RhY2suXG4vLy9cblxudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIFV0aWxzID0gcmVxdWlyZSgnLi8uLi9VdGlscycpO1xudmFyIEhhc2ggPSBVdGlscy5IYXNoO1xudmFyIFNldCA9IFV0aWxzLlNldDtcbnZhciBTZW1hbnRpY0NvbnRleHQgPSByZXF1aXJlKCcuL1NlbWFudGljQ29udGV4dCcpLlNlbWFudGljQ29udGV4dDtcbnZhciBtZXJnZSA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5tZXJnZTtcblxuZnVuY3Rpb24gaGFzaEFUTkNvbmZpZyhjKSB7XG5cdHJldHVybiBjLmhhc2hDb2RlRm9yQ29uZmlnU2V0KCk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsQVROQ29uZmlncyhhLCBiKSB7XG5cdGlmICggYT09PWIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIGE9PT1udWxsIHx8IGI9PT1udWxsICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlXG4gICAgICAgcmV0dXJuIGEuZXF1YWxzRm9yQ29uZmlnU2V0KGIpO1xuIH1cblxuXG5mdW5jdGlvbiBBVE5Db25maWdTZXQoZnVsbEN0eCkge1xuXHQvL1xuXHQvLyBUaGUgcmVhc29uIHRoYXQgd2UgbmVlZCB0aGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgaGFzaCBtYXAgdG8gdXNlXG5cdC8vIHRoZSBzdGFuZGFyZCBoYXNoIGNvZGUgYW5kIGVxdWFscy4gV2UgbmVlZCBhbGwgY29uZmlndXJhdGlvbnMgd2l0aCB0aGVcblx0Ly8gc2FtZVxuXHQvLyB7QGNvZGUgKHMsaSxfLHNlbWN0eCl9IHRvIGJlIGVxdWFsLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGtleSBlZmZlY3RpdmVseVxuXHQvLyBkb3VibGVzXG5cdC8vIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggQVROQ29uZmlncy4gVGhlIG90aGVyIHNvbHV0aW9uIGlzXG5cdC8vIHRvXG5cdC8vIHVzZSBhIGhhc2ggdGFibGUgdGhhdCBsZXRzIHVzIHNwZWNpZnkgdGhlIGVxdWFscy9oYXNoY29kZSBvcGVyYXRpb24uXG5cdC8vIEFsbCBjb25maWdzIGJ1dCBoYXNoZWQgYnkgKHMsIGksIF8sIHBpKSBub3QgaW5jbHVkaW5nIGNvbnRleHQuIFdpcGVkIG91dFxuXHQvLyB3aGVuIHdlIGdvIHJlYWRvbmx5IGFzIHRoaXMgc2V0IGJlY29tZXMgYSBERkEgc3RhdGUuXG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldChoYXNoQVROQ29uZmlnLCBlcXVhbEFUTkNvbmZpZ3MpO1xuXHQvLyBJbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0IGlzIHBhcnQgb2YgYSBmdWxsIGNvbnRleHRcblx0Ly8gTEwgcHJlZGljdGlvbi4gSXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBob3cgdG8gbWVyZ2UgJC4gV2l0aCBTTExcblx0Ly8gaXQncyBhIHdpbGRjYXJkIHdoZXJlYXMgaXQgaXMgbm90IGZvciBMTCBjb250ZXh0IG1lcmdlLlxuXHR0aGlzLmZ1bGxDdHggPSBmdWxsQ3R4ID09PSB1bmRlZmluZWQgPyB0cnVlIDogZnVsbEN0eDtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhlIHNldCBvZiBjb25maWd1cmF0aW9ucyBpcyByZWFkLW9ubHkuIERvIG5vdFxuXHQvLyBhbGxvdyBhbnkgY29kZSB0byBtYW5pcHVsYXRlIHRoZSBzZXQ7IERGQSBzdGF0ZXMgd2lsbCBwb2ludCBhdFxuXHQvLyB0aGUgc2V0cyBhbmQgdGhleSBtdXN0IG5vdCBjaGFuZ2UuIFRoaXMgZG9lcyBub3QgcHJvdGVjdCB0aGUgb3RoZXJcblx0Ly8gZmllbGRzOyBpbiBwYXJ0aWN1bGFyLCBjb25mbGljdGluZ0FsdHMgaXMgc2V0IGFmdGVyXG5cdC8vIHdlJ3ZlIG1hZGUgdGhpcyByZWFkb25seS5cblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuXHQvLyBUcmFjayB0aGUgZWxlbWVudHMgYXMgdGhleSBhcmUgYWRkZWQgdG8gdGhlIHNldDsgc3VwcG9ydHMgZ2V0KGkpLy8vXG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXG5cdC8vIFRPRE86IHRoZXNlIGZpZWxkcyBtYWtlIG1lIHByZXR0eSB1bmNvbWZvcnRhYmxlIGJ1dCBuaWNlIHRvIHBhY2sgdXAgaW5mb1xuXHQvLyB0b2dldGhlciwgc2F2ZXMgcmVjb21wdXRhdGlvblxuXHQvLyBUT0RPOiBjYW4gd2UgdHJhY2sgY29uZmxpY3RzIGFzIHRoZXkgYXJlIGFkZGVkIHRvIHNhdmUgc2Nhbm5pbmcgY29uZmlnc1xuXHQvLyBsYXRlcj9cblx0dGhpcy51bmlxdWVBbHQgPSAwO1xuXHR0aGlzLmNvbmZsaWN0aW5nQWx0cyA9IG51bGw7XG5cblx0Ly8gVXNlZCBpbiBwYXJzZXIgYW5kIGxleGVyLiBJbiBsZXhlciwgaXQgaW5kaWNhdGVzIHdlIGhpdCBhIHByZWRcblx0Ly8gd2hpbGUgY29tcHV0aW5nIGEgY2xvc3VyZSBvcGVyYXRpb24uIERvbid0IG1ha2UgYSBERkEgc3RhdGUgZnJvbSB0aGlzLlxuXHR0aGlzLmhhc1NlbWFudGljQ29udGV4dCA9IGZhbHNlO1xuXHR0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID0gZmFsc2U7XG5cblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGRpbmcgYSBuZXcgY29uZmlnIG1lYW5zIG1lcmdpbmcgY29udGV4dHMgd2l0aCBleGlzdGluZyBjb25maWdzIGZvclxuLy8ge0Bjb2RlIChzLCBpLCBwaSwgXyl9LCB3aGVyZSB7QGNvZGUgc30gaXMgdGhlXG4vLyB7QGxpbmsgQVROQ29uZmlnLy9zdGF0ZX0sIHtAY29kZSBpfSBpcyB0aGUge0BsaW5rIEFUTkNvbmZpZy8vYWx0fSwgYW5kXG4vLyB7QGNvZGUgcGl9IGlzIHRoZSB7QGxpbmsgQVROQ29uZmlnLy9zZW1hbnRpY0NvbnRleHR9LiBXZSB1c2Vcbi8vIHtAY29kZSAocyxpLHBpKX0gYXMga2V5LlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIHVwZGF0ZXMge0BsaW5rIC8vZGlwc0ludG9PdXRlckNvbnRleHR9IGFuZFxuLy8ge0BsaW5rIC8vaGFzU2VtYW50aWNDb250ZXh0fSB3aGVuIG5lY2Vzc2FyeS48L3A+XG4vLyAvXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGNvbmZpZywgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWVyZ2VDYWNoZSA9IG51bGw7XG5cdH1cblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHR0aHJvdyBcIlRoaXMgc2V0IGlzIHJlYWRvbmx5XCI7XG5cdH1cblx0aWYgKGNvbmZpZy5zZW1hbnRpY0NvbnRleHQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG5cdFx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPSB0cnVlO1xuXHR9XG5cdGlmIChjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPiAwKSB7XG5cdFx0dGhpcy5kaXBzSW50b091dGVyQ29udGV4dCA9IHRydWU7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdGhpcy5jb25maWdMb29rdXAuYWRkKGNvbmZpZyk7XG5cdGlmIChleGlzdGluZyA9PT0gY29uZmlnKSB7XG5cdFx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXHRcdHRoaXMuY29uZmlncy5wdXNoKGNvbmZpZyk7IC8vIHRyYWNrIG9yZGVyIGhlcmVcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvLyBhIHByZXZpb3VzIChzLGkscGksXyksIG1lcmdlIHdpdGggaXQgYW5kIHNhdmUgcmVzdWx0XG5cdHZhciByb290SXNXaWxkY2FyZCA9ICF0aGlzLmZ1bGxDdHg7XG5cdHZhciBtZXJnZWQgPSBtZXJnZShleGlzdGluZy5jb250ZXh0LCBjb25maWcuY29udGV4dCwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHQvLyBubyBuZWVkIHRvIGNoZWNrIGZvciBleGlzdGluZy5jb250ZXh0LCBjb25maWcuY29udGV4dCBpbiBjYWNoZVxuXHQvLyBzaW5jZSBvbmx5IHdheSB0byBjcmVhdGUgbmV3IGdyYXBocyBpcyBcImNhbGwgcnVsZVwiIGFuZCBoZXJlLiBXZVxuXHQvLyBjYWNoZSBhdCBib3RoIHBsYWNlcy5cblx0ZXhpc3RpbmcucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSBNYXRoLm1heCggZXhpc3RpbmcucmVhY2hlc0ludG9PdXRlckNvbnRleHQsIGNvbmZpZy5yZWFjaGVzSW50b091dGVyQ29udGV4dCk7XG5cdC8vIG1ha2Ugc3VyZSB0byBwcmVzZXJ2ZSB0aGUgcHJlY2VkZW5jZSBmaWx0ZXIgc3VwcHJlc3Npb24gZHVyaW5nIHRoZSBtZXJnZVxuXHRpZiAoY29uZmlnLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkKSB7XG5cdFx0ZXhpc3RpbmcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSB0cnVlO1xuXHR9XG5cdGV4aXN0aW5nLmNvbnRleHQgPSBtZXJnZWQ7IC8vIHJlcGxhY2UgY29udGV4dDsgbm8gbmVlZCB0byBhbHQgbWFwcGluZ1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuZ2V0U3RhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzdGF0ZXMgPSBuZXcgU2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0c3RhdGVzLmFkZCh0aGlzLmNvbmZpZ3NbaV0uc3RhdGUpO1xuXHR9XG5cdHJldHVybiBzdGF0ZXM7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmdldFByZWRpY2F0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHByZWRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGMgPSB0aGlzLmNvbmZpZ3NbaV0uc2VtYW50aWNDb250ZXh0O1xuXHRcdGlmIChjICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0cHJlZHMucHVzaChjLnNlbWFudGljQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcmVkcztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcIml0ZW1zXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uZmlncztcblx0fVxufSk7XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUub3B0aW1pemVDb25maWdzID0gZnVuY3Rpb24oaW50ZXJwcmV0ZXIpIHtcblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHR0aHJvdyBcIlRoaXMgc2V0IGlzIHJlYWRvbmx5XCI7XG5cdH1cblx0aWYgKHRoaXMuY29uZmlnTG9va3VwLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZmlncy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb25maWcgPSB0aGlzLmNvbmZpZ3NbaV07XG5cdFx0Y29uZmlnLmNvbnRleHQgPSBpbnRlcnByZXRlci5nZXRDYWNoZWRDb250ZXh0KGNvbmZpZy5jb250ZXh0KTtcblx0fVxufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5hZGRBbGwgPSBmdW5jdGlvbihjb2xsKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29sbC5sZW5ndGg7IGkrKykge1xuXHRcdHRoaXMuYWRkKGNvbGxbaV0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0cmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG5cdFx0KG90aGVyIGluc3RhbmNlb2YgQVROQ29uZmlnU2V0ICYmXG5cdFx0VXRpbHMuZXF1YWxBcnJheXModGhpcy5jb25maWdzLCBvdGhlci5jb25maWdzKSAmJlxuXHRcdHRoaXMuZnVsbEN0eCA9PT0gb3RoZXIuZnVsbEN0eCAmJlxuXHRcdHRoaXMudW5pcXVlQWx0ID09PSBvdGhlci51bmlxdWVBbHQgJiZcblx0XHR0aGlzLmNvbmZsaWN0aW5nQWx0cyA9PT0gb3RoZXIuY29uZmxpY3RpbmdBbHRzICYmXG5cdFx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPT09IG90aGVyLmhhc1NlbWFudGljQ29udGV4dCAmJlxuXHRcdHRoaXMuZGlwc0ludG9PdXRlckNvbnRleHQgPT09IG90aGVyLmRpcHNJbnRvT3V0ZXJDb250ZXh0KTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHRpZiAodGhpcy5jYWNoZWRIYXNoQ29kZSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY29uZmlncyk7XG5cdFx0XHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gaGFzaC5maW5pc2goKTtcblx0XHR9XG4gICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY2FjaGVkSGFzaENvZGUpO1xuXHR9IGVsc2Uge1xuICAgICAgICBoYXNoLnVwZGF0ZSh0aGlzLmNvbmZpZ3MpO1xuXHR9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoO1xuXHR9XG59KTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoID09PSAwO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0aWYgKHRoaXMuY29uZmlnTG9va3VwID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlYWRvbmx5IHNldHMuXCI7XG5cdH1cblx0cmV0dXJuIHRoaXMuY29uZmlnTG9va3VwLmNvbnRhaW5zKGl0ZW0pO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWluc0Zhc3QgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmNvbmZpZ0xvb2t1cCA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhpcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkb25seSBzZXRzLlwiO1xuXHR9XG5cdHJldHVybiB0aGlzLmNvbmZpZ0xvb2t1cC5jb250YWluc0Zhc3QoaXRlbSk7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0dGhyb3cgXCJUaGlzIHNldCBpcyByZWFkb25seVwiO1xuXHR9XG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gLTE7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5zZXRSZWFkb25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG5cdHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcblx0aWYgKHJlYWRPbmx5KSB7XG5cdFx0dGhpcy5jb25maWdMb29rdXAgPSBudWxsOyAvLyBjYW4ndCBtb2QsIG5vIG5lZWQgZm9yIGxvb2t1cCBjYWNoZVxuXHR9XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMuY29uZmlncykgK1xuXHRcdCh0aGlzLmhhc1NlbWFudGljQ29udGV4dCA/IFwiLGhhc1NlbWFudGljQ29udGV4dD1cIiArIHRoaXMuaGFzU2VtYW50aWNDb250ZXh0IDogXCJcIikgK1xuXHRcdCh0aGlzLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiA/IFwiLHVuaXF1ZUFsdD1cIiArIHRoaXMudW5pcXVlQWx0IDogXCJcIikgK1xuXHRcdCh0aGlzLmNvbmZsaWN0aW5nQWx0cyAhPT0gbnVsbCA/IFwiLGNvbmZsaWN0aW5nQWx0cz1cIiArIHRoaXMuY29uZmxpY3RpbmdBbHRzIDogXCJcIikgK1xuXHRcdCh0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID8gXCIsZGlwc0ludG9PdXRlckNvbnRleHRcIiA6IFwiXCIpO1xufTtcblxuZnVuY3Rpb24gT3JkZXJlZEFUTkNvbmZpZ1NldCgpIHtcblx0QVROQ29uZmlnU2V0LmNhbGwodGhpcyk7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTkNvbmZpZ1NldC5wcm90b3R5cGUpO1xuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPcmRlcmVkQVROQ29uZmlnU2V0O1xuXG5leHBvcnRzLkFUTkNvbmZpZ1NldCA9IEFUTkNvbmZpZ1NldDtcbmV4cG9ydHMuT3JkZXJlZEFUTkNvbmZpZ1NldCA9IE9yZGVyZWRBVE5Db25maWdTZXQ7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmZ1bmN0aW9uIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMoY29weUZyb20pIHtcblx0aWYoY29weUZyb209PT11bmRlZmluZWQpIHtcblx0XHRjb3B5RnJvbSA9IG51bGw7XG5cdH1cblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuICAgIHRoaXMudmVyaWZ5QVROID0gY29weUZyb209PT1udWxsID8gdHJ1ZSA6IGNvcHlGcm9tLnZlcmlmeUFUTjtcbiAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zID0gY29weUZyb209PT1udWxsID8gZmFsc2UgOiBjb3B5RnJvbS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucztcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zLmRlZmF1bHRPcHRpb25zID0gbmV3IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMoKTtcbkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZGVmYXVsdE9wdGlvbnMucmVhZE9ubHkgPSB0cnVlO1xuXG4vLyAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwga2V5LCB2YWx1ZSk6XG4vLyAgICAgICAgaWYga2V5IT1cInJlYWRPbmx5XCIgYW5kIHNlbGYucmVhZE9ubHk6XG4vLyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihcIlRoZSBvYmplY3QgaXMgcmVhZCBvbmx5LlwiKVxuLy8gICAgICAgIHN1cGVyKHR5cGUoc2VsZiksIHNlbGYpLl9fc2V0YXR0cl9fKGtleSx2YWx1ZSlcblxuZXhwb3J0cy5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zID0gQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlR5cGUgPSByZXF1aXJlKCcuL0FUTlR5cGUnKS5BVE5UeXBlO1xudmFyIEFUTlN0YXRlcyA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKTtcbnZhciBBVE5TdGF0ZSA9IEFUTlN0YXRlcy5BVE5TdGF0ZTtcbnZhciBCYXNpY1N0YXRlID0gQVROU3RhdGVzLkJhc2ljU3RhdGU7XG52YXIgRGVjaXNpb25TdGF0ZSA9IEFUTlN0YXRlcy5EZWNpc2lvblN0YXRlO1xudmFyIEJsb2NrU3RhcnRTdGF0ZSA9IEFUTlN0YXRlcy5CbG9ja1N0YXJ0U3RhdGU7XG52YXIgQmxvY2tFbmRTdGF0ZSA9IEFUTlN0YXRlcy5CbG9ja0VuZFN0YXRlO1xudmFyIExvb3BFbmRTdGF0ZSA9IEFUTlN0YXRlcy5Mb29wRW5kU3RhdGU7XG52YXIgUnVsZVN0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuUnVsZVN0YXJ0U3RhdGU7XG52YXIgUnVsZVN0b3BTdGF0ZSA9IEFUTlN0YXRlcy5SdWxlU3RvcFN0YXRlO1xudmFyIFRva2Vuc1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuVG9rZW5zU3RhcnRTdGF0ZTtcbnZhciBQbHVzTG9vcGJhY2tTdGF0ZSA9IEFUTlN0YXRlcy5QbHVzTG9vcGJhY2tTdGF0ZTtcbnZhciBTdGFyTG9vcGJhY2tTdGF0ZSA9IEFUTlN0YXRlcy5TdGFyTG9vcGJhY2tTdGF0ZTtcbnZhciBTdGFyTG9vcEVudHJ5U3RhdGUgPSBBVE5TdGF0ZXMuU3Rhckxvb3BFbnRyeVN0YXRlO1xudmFyIFBsdXNCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcbnZhciBTdGFyQmxvY2tTdGFydFN0YXRlID0gQVROU3RhdGVzLlN0YXJCbG9ja1N0YXJ0U3RhdGU7XG52YXIgQmFzaWNCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG52YXIgVHJhbnNpdGlvbnMgPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKTtcbnZhciBUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuVHJhbnNpdGlvbjtcbnZhciBBdG9tVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLkF0b21UcmFuc2l0aW9uO1xudmFyIFNldFRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5TZXRUcmFuc2l0aW9uO1xudmFyIE5vdFNldFRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5Ob3RTZXRUcmFuc2l0aW9uO1xudmFyIFJ1bGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUnVsZVRyYW5zaXRpb247XG52YXIgUmFuZ2VUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUmFuZ2VUcmFuc2l0aW9uO1xudmFyIEFjdGlvblRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BY3Rpb25UcmFuc2l0aW9uO1xudmFyIEVwc2lsb25UcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuRXBzaWxvblRyYW5zaXRpb247XG52YXIgV2lsZGNhcmRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuV2lsZGNhcmRUcmFuc2l0aW9uO1xudmFyIFByZWRpY2F0ZVRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5QcmVkaWNhdGVUcmFuc2l0aW9uO1xudmFyIFByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IHJlcXVpcmUoJy4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucycpLkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnM7XG52YXIgTGV4ZXJBY3Rpb25zID0gcmVxdWlyZSgnLi9MZXhlckFjdGlvbicpO1xudmFyIExleGVyQWN0aW9uVHlwZSA9IExleGVyQWN0aW9ucy5MZXhlckFjdGlvblR5cGU7XG52YXIgTGV4ZXJTa2lwQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyU2tpcEFjdGlvbjtcbnZhciBMZXhlckNoYW5uZWxBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJDaGFubmVsQWN0aW9uO1xudmFyIExleGVyQ3VzdG9tQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyQ3VzdG9tQWN0aW9uO1xudmFyIExleGVyTW9yZUFjdGlvbiA9IExleGVyQWN0aW9ucy5MZXhlck1vcmVBY3Rpb247XG52YXIgTGV4ZXJUeXBlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyVHlwZUFjdGlvbjtcbnZhciBMZXhlclB1c2hNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyUHVzaE1vZGVBY3Rpb247XG52YXIgTGV4ZXJQb3BNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyUG9wTW9kZUFjdGlvbjtcbnZhciBMZXhlck1vZGVBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJNb2RlQWN0aW9uO1xuLy8gVGhpcyBpcyB0aGUgZWFybGllc3Qgc3VwcG9ydGVkIHNlcmlhbGl6ZWQgVVVJRC5cbi8vIHN0aWNrIHRvIHNlcmlhbGl6ZWQgdmVyc2lvbiBmb3Igbm93LCB3ZSBkb24ndCBuZWVkIGEgVVVJRCBpbnN0YW5jZVxudmFyIEJBU0VfU0VSSUFMSVpFRF9VVUlEID0gXCJBQURCOEQ3RS1BRUVGLTQ0MTUtQUQyQi04MjA0RDZDRjA0MkVcIjtcblxuLy9cbi8vIFRoaXMgVVVJRCBpbmRpY2F0ZXMgdGhlIHNlcmlhbGl6ZWQgQVROIGNvbnRhaW5zIHR3byBzZXRzIG9mXG4vLyBJbnRlcnZhbFNldHMsIHdoZXJlIHRoZSBzZWNvbmQgc2V0J3MgdmFsdWVzIGFyZSBlbmNvZGVkIGFzXG4vLyAzMi1iaXQgaW50ZWdlcnMgdG8gc3VwcG9ydCB0aGUgZnVsbCBVbmljb2RlIFNNUCByYW5nZSB1cCB0byBVKzEwRkZGRi5cbi8vXG52YXIgQURERURfVU5JQ09ERV9TTVAgPSBcIjU5NjI3Nzg0LTNCRTUtNDE3QS1COUVCLTgxMzFBNzI4NjA4OVwiO1xuXG4vLyBUaGlzIGxpc3QgY29udGFpbnMgYWxsIG9mIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIFVVSURzLCBvcmRlcmVkIGJ5IHdoZW5cbi8vIHRoZSBmZWF0dXJlIGZpcnN0IGFwcGVhcmVkIGluIHRoaXMgYnJhbmNoLlxudmFyIFNVUFBPUlRFRF9VVUlEUyA9IFsgQkFTRV9TRVJJQUxJWkVEX1VVSUQsIEFEREVEX1VOSUNPREVfU01QIF07XG5cbnZhciBTRVJJQUxJWkVEX1ZFUlNJT04gPSAzO1xuXG4vLyBUaGlzIGlzIHRoZSBjdXJyZW50IHNlcmlhbGl6ZWQgVVVJRC5cbnZhciBTRVJJQUxJWkVEX1VVSUQgPSBBRERFRF9VTklDT0RFX1NNUDtcblxuZnVuY3Rpb24gaW5pdEFycmF5KCBsZW5ndGgsIHZhbHVlKSB7XG5cdHZhciB0bXAgPSBbXTtcblx0dG1wW2xlbmd0aC0xXSA9IHZhbHVlO1xuXHRyZXR1cm4gdG1wLm1hcChmdW5jdGlvbihpKSB7cmV0dXJuIHZhbHVlO30pO1xufVxuXG5mdW5jdGlvbiBBVE5EZXNlcmlhbGl6ZXIgKG9wdGlvbnMpIHtcblxuICAgIGlmICggb3B0aW9ucz09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbCApIHtcbiAgICAgICAgb3B0aW9ucyA9IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuICAgIHRoaXMuZGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zdGF0ZUZhY3RvcmllcyA9IG51bGw7XG4gICAgdGhpcy5hY3Rpb25GYWN0b3JpZXMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIERldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgYW4gQVROIHN1cHBvcnRzXG4vLyBhIHBhcnRpY3VsYXIgZmVhdHVyZSwgaWRlbnRpZmllZCBieSB0aGUge0BsaW5rIFVVSUR9IHVzZWQgZm9yIHNlcmlhbGl6aW5nXG4vLyB0aGUgQVROIGF0IHRoZSB0aW1lIHRoZSBmZWF0dXJlIHdhcyBmaXJzdCBpbnRyb2R1Y2VkLlxuLy9cbi8vIEBwYXJhbSBmZWF0dXJlIFRoZSB7QGxpbmsgVVVJRH0gbWFya2luZyB0aGUgZmlyc3QgdGltZSB0aGUgZmVhdHVyZSB3YXNcbi8vIHN1cHBvcnRlZCBpbiB0aGUgc2VyaWFsaXplZCBBVE4uXG4vLyBAcGFyYW0gYWN0dWFsVXVpZCBUaGUge0BsaW5rIFVVSUR9IG9mIHRoZSBhY3R1YWwgc2VyaWFsaXplZCBBVE4gd2hpY2ggaXNcbi8vIGN1cnJlbnRseSBiZWluZyBkZXNlcmlhbGl6ZWQuXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUge0Bjb2RlIGFjdHVhbFV1aWR9IHZhbHVlIHJlcHJlc2VudHMgYVxuLy8gc2VyaWFsaXplZCBBVE4gYXQgb3IgYWZ0ZXIgdGhlIGZlYXR1cmUgaWRlbnRpZmllZCBieSB7QGNvZGUgZmVhdHVyZX0gd2FzXG4vLyBpbnRyb2R1Y2VkOyBvdGhlcndpc2UsIHtAY29kZSBmYWxzZX0uXG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuaXNGZWF0dXJlU3VwcG9ydGVkID0gZnVuY3Rpb24oZmVhdHVyZSwgYWN0dWFsVXVpZCkge1xuICAgIHZhciBpZHgxID0gU1VQUE9SVEVEX1VVSURTLmluZGV4T2YoZmVhdHVyZSk7XG4gICAgaWYgKGlkeDE8MCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBpZHgyID0gU1VQUE9SVEVEX1VVSURTLmluZGV4T2YoYWN0dWFsVXVpZCk7XG4gICAgcmV0dXJuIGlkeDIgPj0gaWR4MTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuZGVzZXJpYWxpemUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgdGhpcy5yZXNldChkYXRhKTtcbiAgICB0aGlzLmNoZWNrVmVyc2lvbigpO1xuICAgIHRoaXMuY2hlY2tVVUlEKCk7XG4gICAgdmFyIGF0biA9IHRoaXMucmVhZEFUTigpO1xuICAgIHRoaXMucmVhZFN0YXRlcyhhdG4pO1xuICAgIHRoaXMucmVhZFJ1bGVzKGF0bik7XG4gICAgdGhpcy5yZWFkTW9kZXMoYXRuKTtcbiAgICB2YXIgc2V0cyA9IFtdO1xuICAgIC8vIEZpcnN0LCBkZXNlcmlhbGl6ZSBzZXRzIHdpdGggMTYtYml0IGFyZ3VtZW50cyA8PSBVK0ZGRkYuXG4gICAgdGhpcy5yZWFkU2V0cyhhdG4sIHNldHMsIHRoaXMucmVhZEludC5iaW5kKHRoaXMpKTtcbiAgICAvLyBOZXh0LCBpZiB0aGUgQVROIHdhcyBzZXJpYWxpemVkIHdpdGggdGhlIFVuaWNvZGUgU01QIGZlYXR1cmUsXG4gICAgLy8gZGVzZXJpYWxpemUgc2V0cyB3aXRoIDMyLWJpdCBhcmd1bWVudHMgPD0gVSsxMEZGRkYuXG4gICAgaWYgKHRoaXMuaXNGZWF0dXJlU3VwcG9ydGVkKEFEREVEX1VOSUNPREVfU01QLCB0aGlzLnV1aWQpKSB7XG4gICAgICAgIHRoaXMucmVhZFNldHMoYXRuLCBzZXRzLCB0aGlzLnJlYWRJbnQzMi5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgdGhpcy5yZWFkRWRnZXMoYXRuLCBzZXRzKTtcbiAgICB0aGlzLnJlYWREZWNpc2lvbnMoYXRuKTtcbiAgICB0aGlzLnJlYWRMZXhlckFjdGlvbnMoYXRuKTtcbiAgICB0aGlzLm1hcmtQcmVjZWRlbmNlRGVjaXNpb25zKGF0bik7XG4gICAgdGhpcy52ZXJpZnlBVE4oYXRuKTtcbiAgICBpZiAodGhpcy5kZXNlcmlhbGl6YXRpb25PcHRpb25zLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zICYmIGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5QQVJTRVIgKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnMoYXRuKTtcbiAgICAgICAgLy8gcmUtdmVyaWZ5IGFmdGVyIG1vZGlmaWNhdGlvblxuICAgICAgICB0aGlzLnZlcmlmeUFUTihhdG4pO1xuICAgIH1cbiAgICByZXR1cm4gYXRuO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKGRhdGEpIHtcblx0dmFyIGFkanVzdCA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdmFyIHYgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIHJldHVybiB2PjEgID8gdi0yIDogdiArIDY1NTMzO1xuXHR9O1xuICAgIHZhciB0ZW1wID0gZGF0YS5zcGxpdChcIlwiKS5tYXAoYWRqdXN0KTtcbiAgICAvLyBkb24ndCBhZGp1c3QgdGhlIGZpcnN0IHZhbHVlIHNpbmNlIHRoYXQncyB0aGUgdmVyc2lvbiBudW1iZXJcbiAgICB0ZW1wWzBdID0gZGF0YS5jaGFyQ29kZUF0KDApO1xuICAgIHRoaXMuZGF0YSA9IHRlbXA7XG4gICAgdGhpcy5wb3MgPSAwO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5jaGVja1ZlcnNpb24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmVyc2lvbiA9IHRoaXMucmVhZEludCgpO1xuICAgIGlmICggdmVyc2lvbiAhPT0gU0VSSUFMSVpFRF9WRVJTSU9OICkge1xuICAgICAgICB0aHJvdyAoXCJDb3VsZCBub3QgZGVzZXJpYWxpemUgQVROIHdpdGggdmVyc2lvbiBcIiArIHZlcnNpb24gKyBcIiAoZXhwZWN0ZWQgXCIgKyBTRVJJQUxJWkVEX1ZFUlNJT04gKyBcIikuXCIpO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuY2hlY2tVVUlEID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHV1aWQgPSB0aGlzLnJlYWRVVUlEKCk7XG4gICAgaWYgKFNVUFBPUlRFRF9VVUlEUy5pbmRleE9mKHV1aWQpPDApIHtcbiAgICAgICAgdGhyb3cgKFwiQ291bGQgbm90IGRlc2VyaWFsaXplIEFUTiB3aXRoIFVVSUQ6IFwiICsgdXVpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiAoZXhwZWN0ZWQgXCIgKyBTRVJJQUxJWkVEX1VVSUQgKyBcIiBvciBhIGxlZ2FjeSBVVUlEKS5cIiwgdXVpZCwgU0VSSUFMSVpFRF9VVUlEKTtcbiAgICB9XG4gICAgdGhpcy51dWlkID0gdXVpZDtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZEFUTiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBncmFtbWFyVHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgIHZhciBtYXhUb2tlblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICByZXR1cm4gbmV3IEFUTihncmFtbWFyVHlwZSwgbWF4VG9rZW5UeXBlKTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFN0YXRlcyA9IGZ1bmN0aW9uKGF0bikge1xuXHR2YXIgaiwgcGFpciwgc3RhdGVOdW1iZXI7XG4gICAgdmFyIGxvb3BCYWNrU3RhdGVOdW1iZXJzID0gW107XG4gICAgdmFyIGVuZFN0YXRlTnVtYmVycyA9IFtdO1xuICAgIHZhciBuc3RhdGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yKHZhciBpPTA7IGk8bnN0YXRlczsgaSsrKSB7XG4gICAgICAgIHZhciBzdHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAvLyBpZ25vcmUgYmFkIHR5cGUgb2Ygc3RhdGVzXG4gICAgICAgIGlmIChzdHlwZT09PUFUTlN0YXRlLklOVkFMSURfVFlQRSkge1xuICAgICAgICAgICAgYXRuLmFkZFN0YXRlKG51bGwpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVJbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICBpZiAocnVsZUluZGV4ID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgIHJ1bGVJbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzID0gdGhpcy5zdGF0ZUZhY3Rvcnkoc3R5cGUsIHJ1bGVJbmRleCk7XG4gICAgICAgIGlmIChzdHlwZSA9PT0gQVROU3RhdGUuTE9PUF9FTkQpIHsgLy8gc3BlY2lhbCBjYXNlXG4gICAgICAgICAgICB2YXIgbG9vcEJhY2tTdGF0ZU51bWJlciA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgbG9vcEJhY2tTdGF0ZU51bWJlcnMucHVzaChbcywgbG9vcEJhY2tTdGF0ZU51bWJlcl0pO1xuICAgICAgICB9IGVsc2UgaWYocyBpbnN0YW5jZW9mIEJsb2NrU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdmFyIGVuZFN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBlbmRTdGF0ZU51bWJlcnMucHVzaChbcywgZW5kU3RhdGVOdW1iZXJdKTtcbiAgICAgICAgfVxuICAgICAgICBhdG4uYWRkU3RhdGUocyk7XG4gICAgfVxuICAgIC8vIGRlbGF5IHRoZSBhc3NpZ25tZW50IG9mIGxvb3AgYmFjayBhbmQgZW5kIHN0YXRlcyB1bnRpbCB3ZSBrbm93IGFsbCB0aGVcblx0Ly8gc3RhdGUgaW5zdGFuY2VzIGhhdmUgYmVlbiBpbml0aWFsaXplZFxuICAgIGZvciAoaj0wOyBqPGxvb3BCYWNrU3RhdGVOdW1iZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhaXIgPSBsb29wQmFja1N0YXRlTnVtYmVyc1tqXTtcbiAgICAgICAgcGFpclswXS5sb29wQmFja1N0YXRlID0gYXRuLnN0YXRlc1twYWlyWzFdXTtcbiAgICB9XG5cbiAgICBmb3IgKGo9MDsgajxlbmRTdGF0ZU51bWJlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFpciA9IGVuZFN0YXRlTnVtYmVyc1tqXTtcbiAgICAgICAgcGFpclswXS5lbmRTdGF0ZSA9IGF0bi5zdGF0ZXNbcGFpclsxXV07XG4gICAgfVxuXG4gICAgdmFyIG51bU5vbkdyZWVkeVN0YXRlcyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAoaj0wOyBqPG51bU5vbkdyZWVkeVN0YXRlczsgaisrKSB7XG4gICAgICAgIHN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5zdGF0ZXNbc3RhdGVOdW1iZXJdLm5vbkdyZWVkeSA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG51bVByZWNlZGVuY2VTdGF0ZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGo9MDsgajxudW1QcmVjZWRlbmNlU3RhdGVzOyBqKyspIHtcbiAgICAgICAgc3RhdGVOdW1iZXIgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgYXRuLnN0YXRlc1tzdGF0ZU51bWJlcl0uaXNQcmVjZWRlbmNlUnVsZSA9IHRydWU7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkUnVsZXMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgbnJ1bGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgaWYgKGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5MRVhFUiApIHtcbiAgICAgICAgYXRuLnJ1bGVUb1Rva2VuVHlwZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIH1cbiAgICBhdG4ucnVsZVRvU3RhcnRTdGF0ZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIGZvciAoaT0wOyBpPG5ydWxlczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBzdGFydFN0YXRlID0gYXRuLnN0YXRlc1tzXTtcbiAgICAgICAgYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbaV0gPSBzdGFydFN0YXRlO1xuICAgICAgICBpZiAoIGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5MRVhFUiApIHtcbiAgICAgICAgICAgIHZhciB0b2tlblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09IDB4RkZGRikge1xuICAgICAgICAgICAgICAgIHRva2VuVHlwZSA9IFRva2VuLkVPRjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGVbaV0gPSB0b2tlblR5cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIGZvciAoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKCEoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZVtzdGF0ZS5ydWxlSW5kZXhdID0gc3RhdGU7XG4gICAgICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW3N0YXRlLnJ1bGVJbmRleF0uc3RvcFN0YXRlID0gc3RhdGU7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkTW9kZXMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgbm1vZGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yICh2YXIgaT0wOyBpPG5tb2RlczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5tb2RlVG9TdGFydFN0YXRlLnB1c2goYXRuLnN0YXRlc1tzXSk7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkU2V0cyA9IGZ1bmN0aW9uKGF0biwgc2V0cywgcmVhZFVuaWNvZGUpIHtcbiAgICB2YXIgbSA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxtOyBpKyspIHtcbiAgICAgICAgdmFyIGlzZXQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgc2V0cy5wdXNoKGlzZXQpO1xuICAgICAgICB2YXIgbiA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB2YXIgY29udGFpbnNFb2YgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgaWYgKGNvbnRhaW5zRW9mIT09MCkge1xuICAgICAgICAgICAgaXNldC5hZGRPbmUoLTEpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGo9MDsgajxuOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBpMSA9IHJlYWRVbmljb2RlKCk7XG4gICAgICAgICAgICB2YXIgaTIgPSByZWFkVW5pY29kZSgpO1xuICAgICAgICAgICAgaXNldC5hZGRSYW5nZShpMSwgaTIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkRWRnZXMgPSBmdW5jdGlvbihhdG4sIHNldHMpIHtcblx0dmFyIGksIGosIHN0YXRlLCB0cmFucywgdGFyZ2V0O1xuICAgIHZhciBuZWRnZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGk9MDsgaTxuZWRnZXM7IGkrKykge1xuICAgICAgICB2YXIgc3JjID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciB0cmcgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIHR0eXBlID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmcxID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmcyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmczID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHRyYW5zID0gdGhpcy5lZGdlRmFjdG9yeShhdG4sIHR0eXBlLCBzcmMsIHRyZywgYXJnMSwgYXJnMiwgYXJnMywgc2V0cyk7XG4gICAgICAgIHZhciBzcmNTdGF0ZSA9IGF0bi5zdGF0ZXNbc3JjXTtcbiAgICAgICAgc3JjU3RhdGUuYWRkVHJhbnNpdGlvbih0cmFucyk7XG4gICAgfVxuICAgIC8vIGVkZ2VzIGZvciBydWxlIHN0b3Agc3RhdGVzIGNhbiBiZSBkZXJpdmVkLCBzbyB0aGV5IGFyZW4ndCBzZXJpYWxpemVkXG4gICAgZm9yIChpPTA7IGk8YXRuLnN0YXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgdCA9IHN0YXRlLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICAgICAgaWYgKCEodCBpbnN0YW5jZW9mIFJ1bGVUcmFuc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXHRcdFx0dmFyIG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSAtMTtcblx0XHRcdGlmIChhdG4ucnVsZVRvU3RhcnRTdGF0ZVt0LnRhcmdldC5ydWxlSW5kZXhdLmlzUHJlY2VkZW5jZVJ1bGUpIHtcblx0XHRcdFx0aWYgKHQucHJlY2VkZW5jZSA9PT0gMCkge1xuXHRcdFx0XHRcdG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSB0LnRhcmdldC5ydWxlSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dHJhbnMgPSBuZXcgRXBzaWxvblRyYW5zaXRpb24odC5mb2xsb3dTdGF0ZSwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybik7XG4gICAgICAgICAgICBhdG4ucnVsZVRvU3RvcFN0YXRlW3QudGFyZ2V0LnJ1bGVJbmRleF0uYWRkVHJhbnNpdGlvbih0cmFucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGtub3cgdGhlIGVuZCBzdGF0ZSB0byBzZXQgaXRzIHN0YXJ0IHN0YXRlXG4gICAgICAgICAgICBpZiAoc3RhdGUuZW5kU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBibG9jayBlbmQgc3RhdGVzIGNhbiBvbmx5IGJlIGFzc29jaWF0ZWQgdG8gYSBzaW5nbGUgYmxvY2sgc3RhcnRcblx0XHRcdC8vIHN0YXRlXG4gICAgICAgICAgICBpZiAoIHN0YXRlLmVuZFN0YXRlLnN0YXJ0U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5lbmRTdGF0ZS5zdGFydFN0YXRlID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgUGx1c0xvb3BiYWNrU3RhdGUpIHtcbiAgICAgICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudHJhbnNpdGlvbnNbal0udGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQbHVzQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5sb29wQmFja1N0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgU3Rhckxvb3BiYWNrU3RhdGUpIHtcbiAgICAgICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudHJhbnNpdGlvbnNbal0udGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTdGFyTG9vcEVudHJ5U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Lmxvb3BCYWNrU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWREZWNpc2lvbnMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgbmRlY2lzaW9ucyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxuZGVjaXNpb25zOyBpKyspIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIGRlY1N0YXRlID0gYXRuLnN0YXRlc1tzXTtcbiAgICAgICAgYXRuLmRlY2lzaW9uVG9TdGF0ZS5wdXNoKGRlY1N0YXRlKTtcbiAgICAgICAgZGVjU3RhdGUuZGVjaXNpb24gPSBpO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZExleGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuICAgIGlmIChhdG4uZ3JhbW1hclR5cGUgPT09IEFUTlR5cGUuTEVYRVIpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5sZXhlckFjdGlvbnMgPSBpbml0QXJyYXkoY291bnQsIG51bGwpO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICAgICAgdmFyIGFjdGlvblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIHZhciBkYXRhMSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgaWYgKGRhdGExID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICBkYXRhMSA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRhdGEyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBpZiAoZGF0YTIgPT09IDB4RkZGRikge1xuICAgICAgICAgICAgICAgIGRhdGEyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbGV4ZXJBY3Rpb24gPSB0aGlzLmxleGVyQWN0aW9uRmFjdG9yeShhY3Rpb25UeXBlLCBkYXRhMSwgZGF0YTIpO1xuICAgICAgICAgICAgYXRuLmxleGVyQWN0aW9uc1tpXSA9IGxleGVyQWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuXHR2YXIgaTtcbiAgICB2YXIgY291bnQgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZS5sZW5ndGg7XG4gICAgZm9yKGk9MDsgaTxjb3VudDsgaSsrKSB7XG4gICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGVbaV0gPSBhdG4ubWF4VG9rZW5UeXBlICsgaSArIDE7XG4gICAgfVxuICAgIGZvcihpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb24oYXRuLCBpKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb24gPSBmdW5jdGlvbihhdG4sIGlkeCkge1xuXHR2YXIgaSwgc3RhdGU7XG4gICAgdmFyIGJ5cGFzc1N0YXJ0ID0gbmV3IEJhc2ljQmxvY2tTdGFydFN0YXRlKCk7XG4gICAgYnlwYXNzU3RhcnQucnVsZUluZGV4ID0gaWR4O1xuICAgIGF0bi5hZGRTdGF0ZShieXBhc3NTdGFydCk7XG5cbiAgICB2YXIgYnlwYXNzU3RvcCA9IG5ldyBCbG9ja0VuZFN0YXRlKCk7XG4gICAgYnlwYXNzU3RvcC5ydWxlSW5kZXggPSBpZHg7XG4gICAgYXRuLmFkZFN0YXRlKGJ5cGFzc1N0b3ApO1xuXG4gICAgYnlwYXNzU3RhcnQuZW5kU3RhdGUgPSBieXBhc3NTdG9wO1xuICAgIGF0bi5kZWZpbmVEZWNpc2lvblN0YXRlKGJ5cGFzc1N0YXJ0KTtcblxuICAgIGJ5cGFzc1N0b3Auc3RhcnRTdGF0ZSA9IGJ5cGFzc1N0YXJ0O1xuXG4gICAgdmFyIGV4Y2x1ZGVUcmFuc2l0aW9uID0gbnVsbDtcbiAgICB2YXIgZW5kU3RhdGUgPSBudWxsO1xuXG4gICAgaWYgKGF0bi5ydWxlVG9TdGFydFN0YXRlW2lkeF0uaXNQcmVjZWRlbmNlUnVsZSkge1xuICAgICAgICAvLyB3cmFwIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVsZSB0byB0aGUgU3Rhckxvb3BFbnRyeVN0YXRlXG4gICAgICAgIGVuZFN0YXRlID0gbnVsbDtcbiAgICAgICAgZm9yKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZUlzRW5kU3RhdGVGb3Ioc3RhdGUsIGlkeCkpIHtcbiAgICAgICAgICAgICAgICBlbmRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGVUcmFuc2l0aW9uID0gc3RhdGUubG9vcEJhY2tTdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhjbHVkZVRyYW5zaXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IChcIkNvdWxkbid0IGlkZW50aWZ5IGZpbmFsIHN0YXRlIG9mIHRoZSBwcmVjZWRlbmNlIHJ1bGUgcHJlZml4IHNlY3Rpb24uXCIpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZW5kU3RhdGUgPSBhdG4ucnVsZVRvU3RvcFN0YXRlW2lkeF07XG4gICAgfVxuXG4gICAgLy8gYWxsIG5vbi1leGNsdWRlZCB0cmFuc2l0aW9ucyB0aGF0IGN1cnJlbnRseSB0YXJnZXQgZW5kIHN0YXRlIG5lZWQgdG9cblx0Ly8gdGFyZ2V0IGJsb2NrRW5kIGluc3RlYWRcbiAgICBmb3IoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuICAgICAgICBmb3IodmFyIGo9MDsgajxzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHRyYW5zaXRpb24gPSBzdGF0ZS50cmFuc2l0aW9uc1tqXTtcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uID09PSBleGNsdWRlVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24udGFyZ2V0ID09PSBlbmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24udGFyZ2V0ID0gYnlwYXNzU3RvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsbCB0cmFuc2l0aW9ucyBsZWF2aW5nIHRoZSBydWxlIHN0YXJ0IHN0YXRlIG5lZWQgdG8gbGVhdmUgYmxvY2tTdGFydFxuXHQvLyBpbnN0ZWFkXG4gICAgdmFyIHJ1bGVUb1N0YXJ0U3RhdGUgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZVtpZHhdO1xuICAgIHZhciBjb3VudCA9IHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoO1xuICAgIHdoaWxlICggY291bnQgPiAwKSB7XG4gICAgICAgIGJ5cGFzc1N0YXJ0LmFkZFRyYW5zaXRpb24ocnVsZVRvU3RhcnRTdGF0ZS50cmFuc2l0aW9uc1tjb3VudC0xXSk7XG4gICAgICAgIHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnMgPSBydWxlVG9TdGFydFN0YXRlLnRyYW5zaXRpb25zLnNsaWNlKC0xKTtcbiAgICB9XG4gICAgLy8gbGluayB0aGUgbmV3IHN0YXRlc1xuICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW2lkeF0uYWRkVHJhbnNpdGlvbihuZXcgRXBzaWxvblRyYW5zaXRpb24oYnlwYXNzU3RhcnQpKTtcbiAgICBieXBhc3NTdG9wLmFkZFRyYW5zaXRpb24obmV3IEVwc2lsb25UcmFuc2l0aW9uKGVuZFN0YXRlKSk7XG5cbiAgICB2YXIgbWF0Y2hTdGF0ZSA9IG5ldyBCYXNpY1N0YXRlKCk7XG4gICAgYXRuLmFkZFN0YXRlKG1hdGNoU3RhdGUpO1xuICAgIG1hdGNoU3RhdGUuYWRkVHJhbnNpdGlvbihuZXcgQXRvbVRyYW5zaXRpb24oYnlwYXNzU3RvcCwgYXRuLnJ1bGVUb1Rva2VuVHlwZVtpZHhdKSk7XG4gICAgYnlwYXNzU3RhcnQuYWRkVHJhbnNpdGlvbihuZXcgRXBzaWxvblRyYW5zaXRpb24obWF0Y2hTdGF0ZSkpO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5zdGF0ZUlzRW5kU3RhdGVGb3IgPSBmdW5jdGlvbihzdGF0ZSwgaWR4KSB7XG4gICAgaWYgKCBzdGF0ZS5ydWxlSW5kZXggIT09IGlkeCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCEoIHN0YXRlIGluc3RhbmNlb2YgU3Rhckxvb3BFbnRyeVN0YXRlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG1heWJlTG9vcEVuZFN0YXRlID0gc3RhdGUudHJhbnNpdGlvbnNbc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIC0gMV0udGFyZ2V0O1xuICAgIGlmICghKCBtYXliZUxvb3BFbmRTdGF0ZSBpbnN0YW5jZW9mIExvb3BFbmRTdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChtYXliZUxvb3BFbmRTdGF0ZS5lcHNpbG9uT25seVRyYW5zaXRpb25zICYmXG4gICAgICAgIChtYXliZUxvb3BFbmRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLy9cbi8vIEFuYWx5emUgdGhlIHtAbGluayBTdGFyTG9vcEVudHJ5U3RhdGV9IHN0YXRlcyBpbiB0aGUgc3BlY2lmaWVkIEFUTiB0byBzZXRcbi8vIHRoZSB7QGxpbmsgU3Rhckxvb3BFbnRyeVN0YXRlLy9pc1ByZWNlZGVuY2VEZWNpc2lvbn0gZmllbGQgdG8gdGhlXG4vLyBjb3JyZWN0IHZhbHVlLlxuLy9cbi8vIEBwYXJhbSBhdG4gVGhlIEFUTi5cbi8vXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLm1hcmtQcmVjZWRlbmNlRGVjaXNpb25zID0gZnVuY3Rpb24oYXRuKSB7XG5cdGZvcih2YXIgaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuXHRcdGlmICghKCBzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIGFuYWx5emUgdGhlIEFUTiB0byBkZXRlcm1pbmUgaWYgdGhpcyBBVE4gZGVjaXNpb24gc3RhdGUgaXMgdGhlXG4gICAgICAgIC8vIGRlY2lzaW9uIGZvciB0aGUgY2xvc3VyZSBibG9jayB0aGF0IGRldGVybWluZXMgd2hldGhlciBhXG4gICAgICAgIC8vIHByZWNlZGVuY2UgcnVsZSBzaG91bGQgY29udGludWUgb3IgY29tcGxldGUuXG4gICAgICAgIC8vXG4gICAgICAgIGlmICggYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbc3RhdGUucnVsZUluZGV4XS5pc1ByZWNlZGVuY2VSdWxlKSB7XG4gICAgICAgICAgICB2YXIgbWF5YmVMb29wRW5kU3RhdGUgPSBzdGF0ZS50cmFuc2l0aW9uc1tzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggLSAxXS50YXJnZXQ7XG4gICAgICAgICAgICBpZiAobWF5YmVMb29wRW5kU3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIG1heWJlTG9vcEVuZFN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYXliZUxvb3BFbmRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pc1ByZWNlZGVuY2VEZWNpc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUudmVyaWZ5QVROID0gZnVuY3Rpb24oYXRuKSB7XG4gICAgaWYgKCF0aGlzLmRlc2VyaWFsaXphdGlvbk9wdGlvbnMudmVyaWZ5QVROKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdmVyaWZ5IGFzc3VtcHRpb25zXG5cdGZvcih2YXIgaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKHN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgfHwgc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIDw9IDEpO1xuICAgICAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBQbHVzQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmxvb3BCYWNrU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5sb29wQmFja1N0YXRlICE9PSBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoID09PSAyKTtcbiAgICAgICAgICAgIGlmIChzdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBTdGFyQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9uc1sxXS50YXJnZXQgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oIXN0YXRlLm5vbkdyZWVkeSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldCBpbnN0YW5jZW9mIExvb3BFbmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnNbMV0udGFyZ2V0IGluc3RhbmNlb2YgU3RhckJsb2NrU3RhcnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5ub25HcmVlZHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyhcIklsbGVnYWxTdGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wYmFja1N0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA9PT0gMSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldCBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUubG9vcEJhY2tTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5zdG9wU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmVuZFN0YXRlICE9PSBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEJsb2NrRW5kU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUuc3RhcnRTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBEZWNpc2lvblN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA8PSAxIHx8IHN0YXRlLmRlY2lzaW9uID49IDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggPD0gMSB8fCAoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSk7XG4gICAgICAgIH1cblx0fVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5jaGVja0NvbmRpdGlvbiA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZT09PW51bGwpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIklsbGVnYWxTdGF0ZVwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IChtZXNzYWdlKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWRJbnQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkSW50MzIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbG93ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgdmFyIGhpZ2ggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICByZXR1cm4gbG93IHwgKGhpZ2ggPDwgMTYpO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkTG9uZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsb3cgPSB0aGlzLnJlYWRJbnQzMigpO1xuICAgIHZhciBoaWdoID0gdGhpcy5yZWFkSW50MzIoKTtcbiAgICByZXR1cm4gKGxvdyAmIDB4MDAwMDAwMDBGRkZGRkZGRikgfCAoaGlnaCA8PCAzMik7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCeXRlVG9IZXgoKSB7XG5cdHZhciBidGggPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHRcdGJ0aFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkudG9VcHBlckNhc2UoKTtcblx0fVxuXHRyZXR1cm4gYnRoO1xufVxuXG52YXIgYnl0ZVRvSGV4ID0gY3JlYXRlQnl0ZVRvSGV4KCk7XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFVVSUQgPSBmdW5jdGlvbigpIHtcblx0dmFyIGJiID0gW107XG5cdGZvcih2YXIgaT03O2k+PTA7aS0tKSB7XG5cdFx0dmFyIGludCA9IHRoaXMucmVhZEludCgpO1xuXHRcdC8qIGpzaGludCBiaXR3aXNlOiBmYWxzZSAqL1xuXHRcdGJiWygyKmkpKzFdID0gaW50ICYgMHhGRjtcblx0XHRiYlsyKmldID0gKGludCA+PiA4KSAmIDB4RkY7XG5cdH1cbiAgICByZXR1cm4gYnl0ZVRvSGV4W2JiWzBdXSArIGJ5dGVUb0hleFtiYlsxXV0gK1xuICAgIGJ5dGVUb0hleFtiYlsyXV0gKyBieXRlVG9IZXhbYmJbM11dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbNF1dICsgYnl0ZVRvSGV4W2JiWzVdXSArICctJyArXG4gICAgYnl0ZVRvSGV4W2JiWzZdXSArIGJ5dGVUb0hleFtiYls3XV0gKyAnLScgK1xuICAgIGJ5dGVUb0hleFtiYls4XV0gKyBieXRlVG9IZXhbYmJbOV1dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbMTBdXSArIGJ5dGVUb0hleFtiYlsxMV1dICtcbiAgICBieXRlVG9IZXhbYmJbMTJdXSArIGJ5dGVUb0hleFtiYlsxM11dICtcbiAgICBieXRlVG9IZXhbYmJbMTRdXSArIGJ5dGVUb0hleFtiYlsxNV1dO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5lZGdlRmFjdG9yeSA9IGZ1bmN0aW9uKGF0biwgdHlwZSwgc3JjLCB0cmcsIGFyZzEsIGFyZzIsIGFyZzMsIHNldHMpIHtcbiAgICB2YXIgdGFyZ2V0ID0gYXRuLnN0YXRlc1t0cmddO1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkVQU0lMT046XG4gICAgICAgIHJldHVybiBuZXcgRXBzaWxvblRyYW5zaXRpb24odGFyZ2V0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUkFOR0U6XG4gICAgICAgIHJldHVybiBhcmczICE9PSAwID8gbmV3IFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIFRva2VuLkVPRiwgYXJnMikgOiBuZXcgUmFuZ2VUcmFuc2l0aW9uKHRhcmdldCwgYXJnMSwgYXJnMik7XG4gICAgY2FzZSBUcmFuc2l0aW9uLlJVTEU6XG4gICAgICAgIHJldHVybiBuZXcgUnVsZVRyYW5zaXRpb24oYXRuLnN0YXRlc1thcmcxXSwgYXJnMiwgYXJnMywgdGFyZ2V0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFRElDQVRFOlxuICAgICAgICByZXR1cm4gbmV3IFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxLCBhcmcyLCBhcmczICE9PSAwKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFQ0VERU5DRTpcbiAgICAgICAgcmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIGFyZzEpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BVE9NOlxuICAgICAgICByZXR1cm4gYXJnMyAhPT0gMCA/IG5ldyBBdG9tVHJhbnNpdGlvbih0YXJnZXQsIFRva2VuLkVPRikgOiBuZXcgQXRvbVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uQUNUSU9OOlxuICAgICAgICByZXR1cm4gbmV3IEFjdGlvblRyYW5zaXRpb24odGFyZ2V0LCBhcmcxLCBhcmcyLCBhcmczICE9PSAwKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uU0VUOlxuICAgICAgICByZXR1cm4gbmV3IFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXRzW2FyZzFdKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uTk9UX1NFVDpcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RTZXRUcmFuc2l0aW9uKHRhcmdldCwgc2V0c1thcmcxXSk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLldJTERDQVJEOlxuICAgICAgICByZXR1cm4gbmV3IFdpbGRjYXJkVHJhbnNpdGlvbih0YXJnZXQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFwiVGhlIHNwZWNpZmllZCB0cmFuc2l0aW9uIHR5cGU6IFwiICsgdHlwZSArIFwiIGlzIG5vdCB2YWxpZC5cIjtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnN0YXRlRmFjdG9yeSA9IGZ1bmN0aW9uKHR5cGUsIHJ1bGVJbmRleCkge1xuICAgIGlmICh0aGlzLnN0YXRlRmFjdG9yaWVzID09PSBudWxsKSB7XG4gICAgICAgIHZhciBzZiA9IFtdO1xuICAgICAgICBzZltBVE5TdGF0ZS5JTlZBTElEX1RZUEVdID0gbnVsbDtcbiAgICAgICAgc2ZbQVROU3RhdGUuQkFTSUNdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgQmFzaWNTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5SVUxFX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFJ1bGVTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLkJMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IEJhc2ljQmxvY2tTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUGx1c0Jsb2NrU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFN0YXJCbG9ja1N0YXJ0U3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuVE9LRU5fU1RBUlRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgVG9rZW5zU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5SVUxFX1NUT1BdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUnVsZVN0b3BTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5CTE9DS19FTkRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgQmxvY2tFbmRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0xPT1BfQkFDS10gPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBTdGFyTG9vcGJhY2tTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlldID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgU3Rhckxvb3BFbnRyeVN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlBMVVNfTE9PUF9CQUNLXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFBsdXNMb29wYmFja1N0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLkxPT1BfRU5EXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IExvb3BFbmRTdGF0ZSgpOyB9O1xuICAgICAgICB0aGlzLnN0YXRlRmFjdG9yaWVzID0gc2Y7XG4gICAgfVxuICAgIGlmICh0eXBlPnRoaXMuc3RhdGVGYWN0b3JpZXMubGVuZ3RoIHx8IHRoaXMuc3RhdGVGYWN0b3JpZXNbdHlwZV0gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgc3BlY2lmaWVkIHN0YXRlIHR5cGUgXCIgKyB0eXBlICsgXCIgaXMgbm90IHZhbGlkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcyA9IHRoaXMuc3RhdGVGYWN0b3JpZXNbdHlwZV0oKTtcbiAgICAgICAgaWYgKHMhPT1udWxsKSB7XG4gICAgICAgICAgICBzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5sZXhlckFjdGlvbkZhY3RvcnkgPSBmdW5jdGlvbih0eXBlLCBkYXRhMSwgZGF0YTIpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25GYWN0b3JpZXMgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIGFmID0gW107XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5DSEFOTkVMXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyQ2hhbm5lbEFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5DVVNUT01dID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJDdXN0b21BY3Rpb24oZGF0YTEsIGRhdGEyKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLk1PREVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJNb2RlQWN0aW9uKGRhdGExKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLk1PUkVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlck1vcmVBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5QT1BfTU9ERV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIExleGVyUG9wTW9kZUFjdGlvbi5JTlNUQU5DRTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIG5ldyBMZXhlclB1c2hNb2RlQWN0aW9uKGRhdGExKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLlNLSVBdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlclNraXBBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5UWVBFXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyVHlwZUFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIHRoaXMuYWN0aW9uRmFjdG9yaWVzID0gYWY7XG4gICAgfVxuICAgIGlmICh0eXBlPnRoaXMuYWN0aW9uRmFjdG9yaWVzLmxlbmd0aCB8fCB0aGlzLmFjdGlvbkZhY3Rvcmllc1t0eXBlXSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyhcIlRoZSBzcGVjaWZpZWQgbGV4ZXIgYWN0aW9uIHR5cGUgXCIgKyB0eXBlICsgXCIgaXMgbm90IHZhbGlkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25GYWN0b3JpZXNbdHlwZV0oZGF0YTEsIGRhdGEyKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydHMuQVRORGVzZXJpYWxpemVyID0gQVRORGVzZXJpYWxpemVyOyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dDtcblxuZnVuY3Rpb24gQVROU2ltdWxhdG9yKGF0biwgc2hhcmVkQ29udGV4dENhY2hlKSB7XG5cbiAgICAvLyBUaGUgY29udGV4dCBjYWNoZSBtYXBzIGFsbCBQcmVkaWN0aW9uQ29udGV4dCBvYmplY3RzIHRoYXQgYXJlID09XG4gICAgLy8gIHRvIGEgc2luZ2xlIGNhY2hlZCBjb3B5LiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGNvbnRleHRzXG4gICAgLy8gIGluIGFsbCBBVE5Db25maWdzIGluIGFsbCBERkEgc3RhdGVzLiAgV2UgcmVidWlsZCBlYWNoIEFUTkNvbmZpZ1NldFxuICAgIC8vICB0byB1c2Ugb25seSBjYWNoZWQgbm9kZXMvZ3JhcGhzIGluIGFkZERGQVN0YXRlKCkuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAvLyAgZmlsbCB0aGlzIGR1cmluZyBjbG9zdXJlKCkgc2luY2UgdGhlcmUgYXJlIGxvdHMgb2YgY29udGV4dHMgdGhhdFxuICAgIC8vICBwb3AgdXAgYnV0IGFyZSBub3QgdXNlZCBldmVyIGFnYWluLiBJdCBhbHNvIGdyZWF0bHkgc2xvd3MgZG93biBjbG9zdXJlKCkuXG4gICAgLy9cbiAgICAvLyAgPHA+VGhpcyBjYWNoZSBtYWtlcyBhIGh1Z2UgZGlmZmVyZW5jZSBpbiBtZW1vcnkgYW5kIGEgbGl0dGxlIGJpdCBpbiBzcGVlZC5cbiAgICAvLyAgRm9yIHRoZSBKYXZhIGdyYW1tYXIgb24gamF2YS4qLCBpdCBkcm9wcGVkIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzXG4gICAgLy8gIGF0IHRoZSBlbmQgZnJvbSAyNU0gdG8gMTZNLiBXZSBkb24ndCBzdG9yZSBhbnkgb2YgdGhlIGZ1bGwgY29udGV4dFxuICAgIC8vICBncmFwaHMgaW4gdGhlIERGQSBiZWNhdXNlIHRoZXkgYXJlIGxpbWl0ZWQgdG8gbG9jYWwgY29udGV4dCBvbmx5LFxuICAgIC8vICBidXQgYXBwYXJlbnRseSB0aGVyZSdzIGEgbG90IG9mIHJlcGV0aXRpb24gdGhlcmUgYXMgd2VsbC4gV2Ugb3B0aW1pemVcbiAgICAvLyAgdGhlIGNvbmZpZyBjb250ZXh0cyBiZWZvcmUgc3RvcmluZyB0aGUgY29uZmlnIHNldCBpbiB0aGUgREZBIHN0YXRlc1xuICAgIC8vICBieSBsaXRlcmFsbHkgcmVidWlsZGluZyB0aGVtIHdpdGggY2FjaGVkIHN1YmdyYXBocyBvbmx5LjwvcD5cbiAgICAvL1xuICAgIC8vICA8cD5JIHRyaWVkIGEgY2FjaGUgZm9yIHVzZSBkdXJpbmcgY2xvc3VyZSBvcGVyYXRpb25zLCB0aGF0IHdhc1xuICAgIC8vICB3aGFja2VkIGFmdGVyIGVhY2ggYWRhcHRpdmVQcmVkaWN0KCkuIEl0IGNvc3QgYSBsaXR0bGUgYml0XG4gICAgLy8gIG1vcmUgdGltZSBJIHRoaW5rIGFuZCBkb2Vzbid0IHNhdmUgb24gdGhlIG92ZXJhbGwgZm9vdHByaW50XG4gICAgLy8gIHNvIGl0J3Mgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5LjwvcD5cbiAgICAvLy9cbiAgICB0aGlzLmF0biA9IGF0bjtcbiAgICB0aGlzLnNoYXJlZENvbnRleHRDYWNoZSA9IHNoYXJlZENvbnRleHRDYWNoZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gTXVzdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1pc3NpbmcgZWRnZSBhbmQgZWRnZSB3ZSBrbm93IGxlYWRzIG5vd2hlcmUvLy9cbkFUTlNpbXVsYXRvci5FUlJPUiA9IG5ldyBERkFTdGF0ZSgweDdGRkZGRkZGLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuXG5cbkFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q2FjaGVkQ29udGV4dCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUgPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gICAgdmFyIHZpc2l0ZWQgPSB7fTtcbiAgICByZXR1cm4gZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQoY29udGV4dCwgdGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUsIHZpc2l0ZWQpO1xufTtcblxuZXhwb3J0cy5BVE5TaW11bGF0b3IgPSBBVE5TaW11bGF0b3I7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy8gVGhlIGZvbGxvd2luZyBpbWFnZXMgc2hvdyB0aGUgcmVsYXRpb24gb2Ygc3RhdGVzIGFuZFxuLy8ge0BsaW5rIEFUTlN0YXRlLy90cmFuc2l0aW9uc30gZm9yIHZhcmlvdXMgZ3JhbW1hciBjb25zdHJ1Y3RzLlxuLy9cbi8vIDx1bD5cbi8vXG4vLyA8bGk+U29saWQgZWRnZXMgbWFya2VkIHdpdGggYW4gJi8vMDk0OTsgaW5kaWNhdGUgYSByZXF1aXJlZFxuLy8ge0BsaW5rIEVwc2lsb25UcmFuc2l0aW9ufS48L2xpPlxuLy9cbi8vIDxsaT5EYXNoZWQgZWRnZXMgaW5kaWNhdGUgbG9jYXRpb25zIHdoZXJlIGFueSB0cmFuc2l0aW9uIGRlcml2ZWQgZnJvbVxuLy8ge0BsaW5rIFRyYW5zaXRpb259IG1pZ2h0IGFwcGVhci48L2xpPlxuLy9cbi8vIDxsaT5EYXNoZWQgbm9kZXMgYXJlIHBsYWNlIGhvbGRlcnMgZm9yIGVpdGhlciBhIHNlcXVlbmNlIG9mIGxpbmtlZFxuLy8ge0BsaW5rIEJhc2ljU3RhdGV9IHN0YXRlcyBvciB0aGUgaW5jbHVzaW9uIG9mIGEgYmxvY2sgcmVwcmVzZW50aW5nIGEgbmVzdGVkXG4vLyBjb25zdHJ1Y3QgaW4gb25lIG9mIHRoZSBmb3JtcyBiZWxvdy48L2xpPlxuLy9cbi8vIDxsaT5Ob2RlcyBzaG93aW5nIG11bHRpcGxlIG91dGdvaW5nIGFsdGVybmF0aXZlcyB3aXRoIGEge0Bjb2RlIC4uLn0gc3VwcG9ydFxuLy8gYW55IG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgKG9uZSBvciBtb3JlKS4gTm9kZXMgd2l0aG91dCB0aGUge0Bjb2RlIC4uLn0gb25seVxuLy8gc3VwcG9ydCB0aGUgZXhhY3QgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBzaG93biBpbiB0aGUgZGlhZ3JhbS48L2xpPlxuLy9cbi8vIDwvdWw+XG4vL1xuLy8gPGgyPkJhc2ljIEJsb2NrczwvaDI+XG4vL1xuLy8gPGgzPlJ1bGU8L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvUnVsZS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDM+QmxvY2sgb2YgMSBvciBtb3JlIGFsdGVybmF0aXZlczwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9CbG9jay5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDI+R3JlZWR5IExvb3BzPC9oMj5cbi8vXG4vLyA8aDM+R3JlZWR5IENsb3N1cmU6IHtAY29kZSAoLi4uKSp9PC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0Nsb3N1cmVHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkdyZWVkeSBQb3NpdGl2ZSBDbG9zdXJlOiB7QGNvZGUgKC4uLikrfTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Qb3NpdGl2ZUNsb3N1cmVHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkdyZWVkeSBPcHRpb25hbDoge0Bjb2RlICguLi4pP308L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvT3B0aW9uYWxHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgyPk5vbi1HcmVlZHkgTG9vcHM8L2gyPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IENsb3N1cmU6IHtAY29kZSAoLi4uKSo/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9DbG9zdXJlTm9uR3JlZWR5LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IFBvc2l0aXZlIENsb3N1cmU6IHtAY29kZSAoLi4uKSs/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Qb3NpdGl2ZUNsb3N1cmVOb25HcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPk5vbi1HcmVlZHkgT3B0aW9uYWw6IHtAY29kZSAoLi4uKT8/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9PcHRpb25hbE5vbkdyZWVkeS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG5cbnZhciBJTklUSUFMX05VTV9UUkFOU0lUSU9OUyA9IDQ7XG5cbmZ1bmN0aW9uIEFUTlN0YXRlKCkge1xuICAgIC8vIFdoaWNoIEFUTiBhcmUgd2UgaW4/XG4gICAgdGhpcy5hdG4gPSBudWxsO1xuICAgIHRoaXMuc3RhdGVOdW1iZXIgPSBBVE5TdGF0ZS5JTlZBTElEX1NUQVRFX05VTUJFUjtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IG51bGw7XG4gICAgdGhpcy5ydWxlSW5kZXggPSAwOyAvLyBhdCBydW50aW1lLCB3ZSBkb24ndCBoYXZlIFJ1bGUgb2JqZWN0c1xuICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIC8vIFRyYWNrIHRoZSB0cmFuc2l0aW9ucyBlbWFuYXRpbmcgZnJvbSB0aGlzIEFUTiBzdGF0ZS5cbiAgICB0aGlzLnRyYW5zaXRpb25zID0gW107XG4gICAgLy8gVXNlZCB0byBjYWNoZSBsb29rYWhlYWQgZHVyaW5nIHBhcnNpbmcsIG5vdCB1c2VkIGR1cmluZyBjb25zdHJ1Y3Rpb25cbiAgICB0aGlzLm5leHRUb2tlbldpdGhpblJ1bGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG4vLyBjb25zdGFudHMgZm9yIHNlcmlhbGl6YXRpb25cbkFUTlN0YXRlLklOVkFMSURfVFlQRSA9IDA7XG5BVE5TdGF0ZS5CQVNJQyA9IDE7XG5BVE5TdGF0ZS5SVUxFX1NUQVJUID0gMjtcbkFUTlN0YXRlLkJMT0NLX1NUQVJUID0gMztcbkFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQgPSA0O1xuQVROU3RhdGUuU1RBUl9CTE9DS19TVEFSVCA9IDU7XG5BVE5TdGF0ZS5UT0tFTl9TVEFSVCA9IDY7XG5BVE5TdGF0ZS5SVUxFX1NUT1AgPSA3O1xuQVROU3RhdGUuQkxPQ0tfRU5EID0gODtcbkFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLID0gOTtcbkFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWSA9IDEwO1xuQVROU3RhdGUuUExVU19MT09QX0JBQ0sgPSAxMTtcbkFUTlN0YXRlLkxPT1BfRU5EID0gMTI7XG5cbkFUTlN0YXRlLnNlcmlhbGl6YXRpb25OYW1lcyA9IFtcbiAgICAgICAgICAgIFwiSU5WQUxJRFwiLFxuICAgICAgICAgICAgXCJCQVNJQ1wiLFxuICAgICAgICAgICAgXCJSVUxFX1NUQVJUXCIsXG4gICAgICAgICAgICBcIkJMT0NLX1NUQVJUXCIsXG4gICAgICAgICAgICBcIlBMVVNfQkxPQ0tfU1RBUlRcIixcbiAgICAgICAgICAgIFwiU1RBUl9CTE9DS19TVEFSVFwiLFxuICAgICAgICAgICAgXCJUT0tFTl9TVEFSVFwiLFxuICAgICAgICAgICAgXCJSVUxFX1NUT1BcIixcbiAgICAgICAgICAgIFwiQkxPQ0tfRU5EXCIsXG4gICAgICAgICAgICBcIlNUQVJfTE9PUF9CQUNLXCIsXG4gICAgICAgICAgICBcIlNUQVJfTE9PUF9FTlRSWVwiLFxuICAgICAgICAgICAgXCJQTFVTX0xPT1BfQkFDS1wiLFxuICAgICAgICAgICAgXCJMT09QX0VORFwiIF07XG5cbkFUTlN0YXRlLklOVkFMSURfU1RBVEVfTlVNQkVSID0gLTE7XG5cbkFUTlN0YXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5zdGF0ZU51bWJlcjtcbn07XG5cbkFUTlN0YXRlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIEFUTlN0YXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGVOdW1iZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn07XG5cbkFUTlN0YXRlLnByb3RvdHlwZS5pc05vbkdyZWVkeUV4aXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblxuQVROU3RhdGUucHJvdG90eXBlLmFkZFRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFucywgaW5kZXgpIHtcblx0aWYoaW5kZXg9PT11bmRlZmluZWQpIHtcblx0XHRpbmRleCA9IC0xO1xuXHR9XG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbnMubGVuZ3RoPT09MCkge1xuICAgICAgICB0aGlzLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgPSB0cmFucy5pc0Vwc2lsb247XG4gICAgfSBlbHNlIGlmKHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyAhPT0gdHJhbnMuaXNFcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXg9PT0tMSkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25zLnB1c2godHJhbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvbnMuc3BsaWNlKGluZGV4LCAxLCB0cmFucyk7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gQmFzaWNTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJBU0lDO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5CYXNpY1N0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkJhc2ljU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzaWNTdGF0ZTtcblxuXG5mdW5jdGlvbiBEZWNpc2lvblN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuICAgIHRoaXMuZGVjaXNpb24gPSAtMTtcbiAgICB0aGlzLm5vbkdyZWVkeSA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWNpc2lvblN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkRlY2lzaW9uU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGVjaXNpb25TdGF0ZTtcblxuXG4vLyAgVGhlIHN0YXJ0IG9mIGEgcmVndWxhciB7QGNvZGUgKC4uLil9IGJsb2NrLlxuZnVuY3Rpb24gQmxvY2tTdGFydFN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuZW5kU3RhdGUgPSBudWxsO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjaXNpb25TdGF0ZS5wcm90b3R5cGUpO1xuQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb2NrU3RhcnRTdGF0ZTtcblxuXG5mdW5jdGlvbiBCYXNpY0Jsb2NrU3RhcnRTdGF0ZSgpIHtcblx0QmxvY2tTdGFydFN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuQkxPQ0tfU1RBUlQ7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CYXNpY0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuQmFzaWNCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG5cblxuLy8gVGVybWluYWwgbm9kZSBvZiBhIHNpbXBsZSB7QGNvZGUgKGF8YnxjKX0gYmxvY2suXG5mdW5jdGlvbiBCbG9ja0VuZFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJMT0NLX0VORDtcbiAgICB0aGlzLnN0YXJ0U3RhdGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5CbG9ja0VuZFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkJsb2NrRW5kU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvY2tFbmRTdGF0ZTtcblxuXG4vLyBUaGUgbGFzdCBub2RlIGluIHRoZSBBVE4gZm9yIGEgcnVsZSwgdW5sZXNzIHRoYXQgcnVsZSBpcyB0aGUgc3RhcnQgc3ltYm9sLlxuLy8gIEluIHRoYXQgY2FzZSwgdGhlcmUgaXMgb25lIHRyYW5zaXRpb24gdG8gRU9GLiBMYXRlciwgd2UgbWlnaHQgZW5jb2RlXG4vLyAgcmVmZXJlbmNlcyB0byBhbGwgY2FsbHMgdG8gdGhpcyBydWxlIHRvIGNvbXB1dGUgRk9MTE9XIHNldHMgZm9yXG4vLyAgZXJyb3IgaGFuZGxpbmcuXG4vL1xuZnVuY3Rpb24gUnVsZVN0b3BTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlJVTEVfU1RPUDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUnVsZVN0b3BTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5SdWxlU3RvcFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVTdG9wU3RhdGU7XG5cbmZ1bmN0aW9uIFJ1bGVTdGFydFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlJVTEVfU1RBUlQ7XG5cdHRoaXMuc3RvcFN0YXRlID0gbnVsbDtcblx0dGhpcy5pc1ByZWNlZGVuY2VSdWxlID0gZmFsc2U7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5SdWxlU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSdWxlU3RhcnRTdGF0ZTtcblxuLy8gRGVjaXNpb24gc3RhdGUgZm9yIHtAY29kZSBBK30gYW5kIHtAY29kZSAoQXxCKSt9LiAgSXQgaGFzIHR3byB0cmFuc2l0aW9uczpcbi8vICBvbmUgdG8gdGhlIGxvb3AgYmFjayB0byBzdGFydCBvZiB0aGUgYmxvY2sgYW5kIG9uZSB0byBleGl0LlxuLy9cbmZ1bmN0aW9uIFBsdXNMb29wYmFja1N0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuUExVU19MT09QX0JBQ0s7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QbHVzTG9vcGJhY2tTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblBsdXNMb29wYmFja1N0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsdXNMb29wYmFja1N0YXRlO1xuXG5cbi8vIFN0YXJ0IG9mIHtAY29kZSAoQXxCfC4uLikrfSBsb29wLiBUZWNobmljYWxseSBhIGRlY2lzaW9uIHN0YXRlLCBidXRcbi8vICB3ZSBkb24ndCB1c2UgZm9yIGNvZGUgZ2VuZXJhdGlvbjsgc29tZWJvZHkgbWlnaHQgbmVlZCBpdCwgc28gSSdtIGRlZmluaW5nXG4vLyAgaXQgZm9yIGNvbXBsZXRlbmVzcy4gSW4gcmVhbGl0eSwgdGhlIHtAbGluayBQbHVzTG9vcGJhY2tTdGF0ZX0gbm9kZSBpcyB0aGVcbi8vICByZWFsIGRlY2lzaW9uLW1ha2luZyBub3RlIGZvciB7QGNvZGUgQSt9LlxuLy9cbmZ1bmN0aW9uIFBsdXNCbG9ja1N0YXJ0U3RhdGUoKSB7XG5cdEJsb2NrU3RhcnRTdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQ7XG4gICAgdGhpcy5sb29wQmFja1N0YXRlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUGx1c0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuUGx1c0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbHVzQmxvY2tTdGFydFN0YXRlO1xuXG4vLyBUaGUgYmxvY2sgdGhhdCBiZWdpbnMgYSBjbG9zdXJlIGxvb3AuXG5mdW5jdGlvbiBTdGFyQmxvY2tTdGFydFN0YXRlKCkge1xuXHRCbG9ja1N0YXJ0U3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3RhckJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuU3RhckJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyQmxvY2tTdGFydFN0YXRlO1xuXG5cbmZ1bmN0aW9uIFN0YXJMb29wYmFja1N0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3Rhckxvb3BiYWNrU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuU3Rhckxvb3BiYWNrU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3Rhckxvb3BiYWNrU3RhdGU7XG5cblxuZnVuY3Rpb24gU3Rhckxvb3BFbnRyeVN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuU1RBUl9MT09QX0VOVFJZO1xuICAgIHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG4gICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBzdGF0ZSBjYW4gYmVuZWZpdCBmcm9tIGEgcHJlY2VkZW5jZSBERkEgZHVyaW5nIFNMTCBkZWNpc2lvbiBtYWtpbmcuXG4gICAgdGhpcy5pc1ByZWNlZGVuY2VEZWNpc2lvbiA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblN0YXJMb29wRW50cnlTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblN0YXJMb29wRW50cnlTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyTG9vcEVudHJ5U3RhdGU7XG5cblxuLy8gTWFyayB0aGUgZW5kIG9mIGEgKiBvciArIGxvb3AuXG5mdW5jdGlvbiBMb29wRW5kU3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuTE9PUF9FTkQ7XG5cdHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG5Mb29wRW5kU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuTG9vcEVuZFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvb3BFbmRTdGF0ZTtcblxuXG4vLyBUaGUgVG9rZW5zIHJ1bGUgc3RhcnQgc3RhdGUgbGlua2luZyB0byBlYWNoIGxleGVyIHJ1bGUgc3RhcnQgc3RhdGUgKi9cbmZ1bmN0aW9uIFRva2Vuc1N0YXJ0U3RhdGUoKSB7XG5cdERlY2lzaW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5UT0tFTl9TVEFSVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRva2Vuc1N0YXJ0U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNpc2lvblN0YXRlLnByb3RvdHlwZSk7XG5Ub2tlbnNTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRva2Vuc1N0YXJ0U3RhdGU7XG5cbmV4cG9ydHMuQVROU3RhdGUgPSBBVE5TdGF0ZTtcbmV4cG9ydHMuQmFzaWNTdGF0ZSA9IEJhc2ljU3RhdGU7XG5leHBvcnRzLkRlY2lzaW9uU3RhdGUgPSBEZWNpc2lvblN0YXRlO1xuZXhwb3J0cy5CbG9ja1N0YXJ0U3RhdGUgPSBCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLkJsb2NrRW5kU3RhdGUgPSBCbG9ja0VuZFN0YXRlO1xuZXhwb3J0cy5Mb29wRW5kU3RhdGUgPSBMb29wRW5kU3RhdGU7XG5leHBvcnRzLlJ1bGVTdGFydFN0YXRlID0gUnVsZVN0YXJ0U3RhdGU7XG5leHBvcnRzLlJ1bGVTdG9wU3RhdGUgPSBSdWxlU3RvcFN0YXRlO1xuZXhwb3J0cy5Ub2tlbnNTdGFydFN0YXRlID0gVG9rZW5zU3RhcnRTdGF0ZTtcbmV4cG9ydHMuUGx1c0xvb3BiYWNrU3RhdGUgPSBQbHVzTG9vcGJhY2tTdGF0ZTtcbmV4cG9ydHMuU3Rhckxvb3BiYWNrU3RhdGUgPSBTdGFyTG9vcGJhY2tTdGF0ZTtcbmV4cG9ydHMuU3Rhckxvb3BFbnRyeVN0YXRlID0gU3Rhckxvb3BFbnRyeVN0YXRlO1xuZXhwb3J0cy5QbHVzQmxvY2tTdGFydFN0YXRlID0gUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcbmV4cG9ydHMuU3RhckJsb2NrU3RhcnRTdGF0ZSA9IFN0YXJCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLkJhc2ljQmxvY2tTdGFydFN0YXRlID0gQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gUmVwcmVzZW50cyB0aGUgdHlwZSBvZiByZWNvZ25pemVyIGFuIEFUTiBhcHBsaWVzIHRvLlxuXG5mdW5jdGlvbiBBVE5UeXBlKCkge1xuXG59XG5cbkFUTlR5cGUuTEVYRVIgPSAwO1xuQVROVHlwZS5QQVJTRVIgPSAxO1xuXG5leHBvcnRzLkFUTlR5cGUgPSBBVE5UeXBlO1xuXG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIFdoZW4gd2UgaGl0IGFuIGFjY2VwdCBzdGF0ZSBpbiBlaXRoZXIgdGhlIERGQSBvciB0aGUgQVROLCB3ZVxuLy8gIGhhdmUgdG8gbm90aWZ5IHRoZSBjaGFyYWN0ZXIgc3RyZWFtIHRvIHN0YXJ0IGJ1ZmZlcmluZyBjaGFyYWN0ZXJzXG4vLyAgdmlhIHtAbGluayBJbnRTdHJlYW0vL21hcmt9IGFuZCByZWNvcmQgdGhlIGN1cnJlbnQgc3RhdGUuIFRoZSBjdXJyZW50IHNpbSBzdGF0ZVxuLy8gIGluY2x1ZGVzIHRoZSBjdXJyZW50IGluZGV4IGludG8gdGhlIGlucHV0LCB0aGUgY3VycmVudCBsaW5lLFxuLy8gIGFuZCBjdXJyZW50IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGF0IGxpbmUuIE5vdGUgdGhhdCB0aGUgTGV4ZXIgaXNcbi8vICB0cmFja2luZyB0aGUgc3RhcnRpbmcgbGluZSBhbmQgY2hhcmFjdGVyaXphdGlvbiBvZiB0aGUgdG9rZW4uIFRoZXNlXG4vLyAgdmFyaWFibGVzIHRyYWNrIHRoZSBcInN0YXRlXCIgb2YgdGhlIHNpbXVsYXRvciB3aGVuIGl0IGhpdHMgYW4gYWNjZXB0IHN0YXRlLlxuLy9cbi8vICA8cD5XZSB0cmFjayB0aGVzZSB2YXJpYWJsZXMgc2VwYXJhdGVseSBmb3IgdGhlIERGQSBhbmQgQVROIHNpbXVsYXRpb25cbi8vICBiZWNhdXNlIHRoZSBERkEgc2ltdWxhdGlvbiBvZnRlbiBoYXMgdG8gZmFpbCBvdmVyIHRvIHRoZSBBVE5cbi8vICBzaW11bGF0aW9uLiBJZiB0aGUgQVROIHNpbXVsYXRpb24gZmFpbHMsIHdlIG5lZWQgdGhlIERGQSB0byBmYWxsXG4vLyAgYmFjayB0byBpdHMgcHJldmlvdXNseSBhY2NlcHRlZCBzdGF0ZSwgaWYgYW55LiBJZiB0aGUgQVROIHN1Y2NlZWRzLFxuLy8gIHRoZW4gdGhlIEFUTiBkb2VzIHRoZSBhY2NlcHQgYW5kIHRoZSBERkEgc2ltdWxhdG9yIHRoYXQgaW52b2tlZCBpdFxuLy8gIGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBwcmVkaWN0ZWQgdG9rZW4gdHlwZS48L3A+XG4vLy9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIExleGVyID0gcmVxdWlyZSgnLi8uLi9MZXhlcicpLkxleGVyO1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vQVROU2ltdWxhdG9yJykuQVROU2ltdWxhdG9yO1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBPcmRlcmVkQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5PcmRlcmVkQVROQ29uZmlnU2V0O1xudmFyIFByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlByZWRpY3Rpb25Db250ZXh0O1xudmFyIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xudmFyIFJ1bGVTdG9wU3RhdGUgPSByZXF1aXJlKCcuL0FUTlN0YXRlJykuUnVsZVN0b3BTdGF0ZTtcbnZhciBMZXhlckFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuTGV4ZXJBVE5Db25maWc7XG52YXIgVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNpdGlvbicpLlRyYW5zaXRpb247XG52YXIgTGV4ZXJBY3Rpb25FeGVjdXRvciA9IHJlcXVpcmUoJy4vTGV4ZXJBY3Rpb25FeGVjdXRvcicpLkxleGVyQWN0aW9uRXhlY3V0b3I7XG52YXIgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vLi4vZXJyb3IvRXJyb3JzJykuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuZnVuY3Rpb24gcmVzZXRTaW1TdGF0ZShzaW0pIHtcblx0c2ltLmluZGV4ID0gLTE7XG5cdHNpbS5saW5lID0gMDtcblx0c2ltLmNvbHVtbiA9IC0xO1xuXHRzaW0uZGZhU3RhdGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBTaW1TdGF0ZSgpIHtcblx0cmVzZXRTaW1TdGF0ZSh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNpbVN0YXRlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHRyZXNldFNpbVN0YXRlKHRoaXMpO1xufTtcblxuZnVuY3Rpb24gTGV4ZXJBVE5TaW11bGF0b3IocmVjb2csIGF0biwgZGVjaXNpb25Ub0RGQSwgc2hhcmVkQ29udGV4dENhY2hlKSB7XG5cdEFUTlNpbXVsYXRvci5jYWxsKHRoaXMsIGF0biwgc2hhcmVkQ29udGV4dENhY2hlKTtcblx0dGhpcy5kZWNpc2lvblRvREZBID0gZGVjaXNpb25Ub0RGQTtcblx0dGhpcy5yZWNvZyA9IHJlY29nO1xuXHQvLyBUaGUgY3VycmVudCB0b2tlbidzIHN0YXJ0aW5nIGluZGV4IGludG8gdGhlIGNoYXJhY3RlciBzdHJlYW0uXG5cdC8vIFNoYXJlZCBhY3Jvc3MgREZBIHRvIEFUTiBzaW11bGF0aW9uIGluIGNhc2UgdGhlIEFUTiBmYWlscyBhbmQgdGhlXG5cdC8vIERGQSBkaWQgbm90IGhhdmUgYSBwcmV2aW91cyBhY2NlcHQgc3RhdGUuIEluIHRoaXMgY2FzZSwgd2UgdXNlIHRoZVxuXHQvLyBBVE4tZ2VuZXJhdGVkIGV4Y2VwdGlvbiBvYmplY3QuXG5cdHRoaXMuc3RhcnRJbmRleCA9IC0xO1xuXHQvLyBsaW5lIG51bWJlciAxLi5uIHdpdGhpbiB0aGUgaW5wdXQvLy9cblx0dGhpcy5saW5lID0gMTtcblx0Ly8gVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuXHQvLyAwLi5uLTEvLy9cblx0dGhpcy5jb2x1bW4gPSAwO1xuXHR0aGlzLm1vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cdC8vIFVzZWQgZHVyaW5nIERGQS9BVE4gZXhlYyB0byByZWNvcmQgdGhlIG1vc3QgcmVjZW50IGFjY2VwdCBjb25maWd1cmF0aW9uXG5cdC8vIGluZm9cblx0dGhpcy5wcmV2QWNjZXB0ID0gbmV3IFNpbVN0YXRlKCk7XG5cdC8vIGRvbmVcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU2ltdWxhdG9yLnByb3RvdHlwZSk7XG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckFUTlNpbXVsYXRvcjtcblxuTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcgPSBmYWxzZTtcbkxleGVyQVROU2ltdWxhdG9yLmRmYV9kZWJ1ZyA9IGZhbHNlO1xuXG5MZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0UgPSAwO1xuTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFID0gMTI3OyAvLyBmb3JjZXMgdW5pY29kZSB0byBzdGF5IGluIEFUTlxuXG5MZXhlckFUTlNpbXVsYXRvci5tYXRjaF9jYWxscyA9IDA7XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb3B5U3RhdGUgPSBmdW5jdGlvbihzaW11bGF0b3IpIHtcblx0dGhpcy5jb2x1bW4gPSBzaW11bGF0b3IuY29sdW1uO1xuXHR0aGlzLmxpbmUgPSBzaW11bGF0b3IubGluZTtcblx0dGhpcy5tb2RlID0gc2ltdWxhdG9yLm1vZGU7XG5cdHRoaXMuc3RhcnRJbmRleCA9IHNpbXVsYXRvci5zdGFydEluZGV4O1xufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24oaW5wdXQsIG1vZGUpIHtcblx0dGhpcy5tYXRjaF9jYWxscyArPSAxO1xuXHR0aGlzLm1vZGUgPSBtb2RlO1xuXHR2YXIgbWFyayA9IGlucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR0aGlzLnN0YXJ0SW5kZXggPSBpbnB1dC5pbmRleDtcblx0XHR0aGlzLnByZXZBY2NlcHQucmVzZXQoKTtcblx0XHR2YXIgZGZhID0gdGhpcy5kZWNpc2lvblRvREZBW21vZGVdO1xuXHRcdGlmIChkZmEuczAgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQVROKGlucHV0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXhlY0FUTihpbnB1dCwgZGZhLnMwKTtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0aW5wdXQucmVsZWFzZShtYXJrKTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucHJldkFjY2VwdC5yZXNldCgpO1xuXHR0aGlzLnN0YXJ0SW5kZXggPSAtMTtcblx0dGhpcy5saW5lID0gMTtcblx0dGhpcy5jb2x1bW4gPSAwO1xuXHR0aGlzLm1vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUubWF0Y2hBVE4gPSBmdW5jdGlvbihpbnB1dCkge1xuXHR2YXIgc3RhcnRTdGF0ZSA9IHRoaXMuYXRuLm1vZGVUb1N0YXJ0U3RhdGVbdGhpcy5tb2RlXTtcblxuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIm1hdGNoQVROIG1vZGUgXCIgKyB0aGlzLm1vZGUgKyBcIiBzdGFydDogXCIgKyBzdGFydFN0YXRlKTtcblx0fVxuXHR2YXIgb2xkX21vZGUgPSB0aGlzLm1vZGU7XG5cdHZhciBzMF9jbG9zdXJlID0gdGhpcy5jb21wdXRlU3RhcnRTdGF0ZShpbnB1dCwgc3RhcnRTdGF0ZSk7XG5cdHZhciBzdXBwcmVzc0VkZ2UgPSBzMF9jbG9zdXJlLmhhc1NlbWFudGljQ29udGV4dDtcblx0czBfY2xvc3VyZS5oYXNTZW1hbnRpY0NvbnRleHQgPSBmYWxzZTtcblxuXHR2YXIgbmV4dCA9IHRoaXMuYWRkREZBU3RhdGUoczBfY2xvc3VyZSk7XG5cdGlmICghc3VwcHJlc3NFZGdlKSB7XG5cdFx0dGhpcy5kZWNpc2lvblRvREZBW3RoaXMubW9kZV0uczAgPSBuZXh0O1xuXHR9XG5cblx0dmFyIHByZWRpY3QgPSB0aGlzLmV4ZWNBVE4oaW5wdXQsIG5leHQpO1xuXG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiREZBIGFmdGVyIG1hdGNoQVROOiBcIiArIHRoaXMuZGVjaXNpb25Ub0RGQVtvbGRfbW9kZV0udG9MZXhlclN0cmluZygpKTtcblx0fVxuXHRyZXR1cm4gcHJlZGljdDtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROID0gZnVuY3Rpb24oaW5wdXQsIGRzMCkge1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcInN0YXJ0IHN0YXRlIGNsb3N1cmU9XCIgKyBkczAuY29uZmlncyk7XG5cdH1cblx0aWYgKGRzMC5pc0FjY2VwdFN0YXRlKSB7XG5cdFx0Ly8gYWxsb3cgemVyby1sZW5ndGggdG9rZW5zXG5cdFx0dGhpcy5jYXB0dXJlU2ltU3RhdGUodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgZHMwKTtcblx0fVxuXHR2YXIgdCA9IGlucHV0LkxBKDEpO1xuXHR2YXIgcyA9IGRzMDsgLy8gcyBpcyBjdXJyZW50L2Zyb20gREZBIHN0YXRlXG5cblx0d2hpbGUgKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcImV4ZWNBVE4gbG9vcCBzdGFydGluZyBjbG9zdXJlOiBcIiArIHMuY29uZmlncyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbW92ZSBzcmMtPnRyZywgc3JjLT50cmcsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIHRyZyB0b1xuXHRcdC8vIGF2b2lkIGxvb2tpbmcgdXAgdGhlIERGQSBzdGF0ZSBhZ2Fpbiwgd2hpY2ggaXMgZXhwZW5zaXZlLlxuXHRcdC8vIElmIHRoZSBwcmV2aW91cyB0YXJnZXQgd2FzIGFscmVhZHkgcGFydCBvZiB0aGUgREZBLCB3ZSBtaWdodFxuXHRcdC8vIGJlIGFibGUgdG8gYXZvaWQgZG9pbmcgYSByZWFjaCBvcGVyYXRpb24gdXBvbiB0LiBJZiBzIT1udWxsLFxuXHRcdC8vIGl0IG1lYW5zIHRoYXQgc2VtYW50aWMgcHJlZGljYXRlcyBkaWRuJ3QgcHJldmVudCB1cyBmcm9tXG5cdFx0Ly8gY3JlYXRpbmcgYSBERkEgc3RhdGUuIE9uY2Ugd2Uga25vdyBzIT1udWxsLCB3ZSBjaGVjayB0byBzZWUgaWZcblx0XHQvLyB0aGUgREZBIHN0YXRlIGhhcyBhbiBlZGdlIGFscmVhZHkgZm9yIHQuIElmIHNvLCB3ZSBjYW4ganVzdCByZXVzZVxuXHRcdC8vIGl0J3MgY29uZmlndXJhdGlvbiBzZXQ7IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gcmUtY29tcHV0aW5nIGl0LlxuXHRcdC8vIFRoaXMgaXMga2luZCBvZiBsaWtlIGRvaW5nIERGQSBzaW11bGF0aW9uIHdpdGhpbiB0aGUgQVROXG5cdFx0Ly8gc2ltdWxhdGlvbiBiZWNhdXNlIERGQSBzaW11bGF0aW9uIGlzIHJlYWxseSBqdXN0IGEgd2F5IHRvIGF2b2lkXG5cdFx0Ly8gY29tcHV0aW5nIHJlYWNoL2Nsb3N1cmUgc2V0cy4gVGVjaG5pY2FsbHksIG9uY2Ugd2Uga25vdyB0aGF0XG5cdFx0Ly8gd2UgaGF2ZSBhIHByZXZpb3VzbHkgYWRkZWQgREZBIHN0YXRlLCB3ZSBjb3VsZCBqdW1wIG92ZXIgdG9cblx0XHQvLyB0aGUgREZBIHNpbXVsYXRvci4gQnV0LCB0aGF0IHdvdWxkIG1lYW4gcG9wcGluZyBiYWNrIGFuZCBmb3J0aFxuXHRcdC8vIGEgbG90IGFuZCBtYWtpbmcgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQgYWxnb3JpdGhtaWNhbGx5LlxuXHRcdC8vIFRoaXMgb3B0aW1pemF0aW9uIG1ha2VzIGEgbG90IG9mIHNlbnNlIGZvciBsb29wcyB3aXRoaW4gREZBLlxuXHRcdC8vIEEgY2hhcmFjdGVyIHdpbGwgdGFrZSB1cyBiYWNrIHRvIGFuIGV4aXN0aW5nIERGQSBzdGF0ZVxuXHRcdC8vIHRoYXQgYWxyZWFkeSBoYXMgbG90cyBvZiBlZGdlcyBvdXQgb2YgaXQuIGUuZy4sIC4qIGluIGNvbW1lbnRzLlxuXHRcdC8vIHByaW50KFwiVGFyZ2V0IGZvcjpcIiArIHN0cihzKSArIFwiIGFuZDpcIiArIHN0cih0KSlcblx0XHR2YXIgdGFyZ2V0ID0gdGhpcy5nZXRFeGlzdGluZ1RhcmdldFN0YXRlKHMsIHQpO1xuXHRcdC8vIHByaW50KFwiRXhpc3Rpbmc6XCIgKyBzdHIodGFyZ2V0KSlcblx0XHRpZiAodGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHR0YXJnZXQgPSB0aGlzLmNvbXB1dGVUYXJnZXRTdGF0ZShpbnB1dCwgcywgdCk7XG5cdFx0XHQvLyBwcmludChcIkNvbXB1dGVkOlwiICsgc3RyKHRhcmdldCkpXG5cdFx0fVxuXHRcdGlmICh0YXJnZXQgPT09IEFUTlNpbXVsYXRvci5FUlJPUikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdC8vIElmIHRoaXMgaXMgYSBjb25zdW1hYmxlIGlucHV0IGVsZW1lbnQsIG1ha2Ugc3VyZSB0byBjb25zdW1lIGJlZm9yZVxuXHRcdC8vIGNhcHR1cmluZyB0aGUgYWNjZXB0IHN0YXRlIHNvIHRoZSBpbnB1dCBpbmRleCwgbGluZSwgYW5kIGNoYXJcblx0XHQvLyBwb3NpdGlvbiBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnByZXRlciBhdCB0aGVcblx0XHQvLyBlbmQgb2YgdGhlIHRva2VuLlxuXHRcdGlmICh0ICE9PSBUb2tlbi5FT0YpIHtcblx0XHRcdHRoaXMuY29uc3VtZShpbnB1dCk7XG5cdFx0fVxuXHRcdGlmICh0YXJnZXQuaXNBY2NlcHRTdGF0ZSkge1xuXHRcdFx0dGhpcy5jYXB0dXJlU2ltU3RhdGUodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgdGFyZ2V0KTtcblx0XHRcdGlmICh0ID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHQgPSBpbnB1dC5MQSgxKTtcblx0XHRzID0gdGFyZ2V0OyAvLyBmbGlwOyBjdXJyZW50IERGQSB0YXJnZXQgYmVjb21lcyBuZXcgc3JjL2Zyb20gc3RhdGVcblx0fVxuXHRyZXR1cm4gdGhpcy5mYWlsT3JBY2NlcHQodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgcy5jb25maWdzLCB0KTtcbn07XG5cbi8vIEdldCBhbiBleGlzdGluZyB0YXJnZXQgc3RhdGUgZm9yIGFuIGVkZ2UgaW4gdGhlIERGQS4gSWYgdGhlIHRhcmdldCBzdGF0ZVxuLy8gZm9yIHRoZSBlZGdlIGhhcyBub3QgeWV0IGJlZW4gY29tcHV0ZWQgb3IgaXMgb3RoZXJ3aXNlIG5vdCBhdmFpbGFibGUsXG4vLyB0aGlzIG1ldGhvZCByZXR1cm5zIHtAY29kZSBudWxsfS5cbi8vXG4vLyBAcGFyYW0gcyBUaGUgY3VycmVudCBERkEgc3RhdGVcbi8vIEBwYXJhbSB0IFRoZSBuZXh0IGlucHV0IHN5bWJvbFxuLy8gQHJldHVybiBUaGUgZXhpc3RpbmcgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRhcmdldCBzdGF0ZSBmb3IgdGhpcyBlZGdlIGlzIG5vdFxuLy8gYWxyZWFkeSBjYWNoZWRcbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFeGlzdGluZ1RhcmdldFN0YXRlID0gZnVuY3Rpb24ocywgdCkge1xuXHRpZiAocy5lZGdlcyA9PT0gbnVsbCB8fCB0IDwgTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFIHx8IHQgPiBMZXhlckFUTlNpbXVsYXRvci5NQVhfREZBX0VER0UpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciB0YXJnZXQgPSBzLmVkZ2VzW3QgLSBMZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0VdO1xuXHRpZih0YXJnZXQ9PT11bmRlZmluZWQpIHtcblx0XHR0YXJnZXQgPSBudWxsO1xuXHR9XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1ZyAmJiB0YXJnZXQgIT09IG51bGwpIHtcblx0XHRjb25zb2xlLmxvZyhcInJldXNlIHN0YXRlIFwiICsgcy5zdGF0ZU51bWJlciArIFwiIGVkZ2UgdG8gXCIgKyB0YXJnZXQuc3RhdGVOdW1iZXIpO1xuXHR9XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG4vLyBDb21wdXRlIGEgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEsIGFuZCBhdHRlbXB0IHRvIGFkZCB0aGVcbi8vIGNvbXB1dGVkIHN0YXRlIGFuZCBjb3JyZXNwb25kaW5nIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbVxuLy8gQHBhcmFtIHMgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vXG4vLyBAcmV0dXJuIFRoZSBjb21wdXRlZCB0YXJnZXQgREZBIHN0YXRlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgc3ltYm9sXG4vLyB7QGNvZGUgdH0uIElmIHtAY29kZSB0fSBkb2VzIG5vdCBsZWFkIHRvIGEgdmFsaWQgREZBIHN0YXRlLCB0aGlzIG1ldGhvZFxuLy8gcmV0dXJucyB7QGxpbmsgLy9FUlJPUn0uXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVRhcmdldFN0YXRlID0gZnVuY3Rpb24oaW5wdXQsIHMsIHQpIHtcblx0dmFyIHJlYWNoID0gbmV3IE9yZGVyZWRBVE5Db25maWdTZXQoKTtcblx0Ly8gaWYgd2UgZG9uJ3QgZmluZCBhbiBleGlzdGluZyBERkEgc3RhdGVcblx0Ly8gRmlsbCByZWFjaCBzdGFydGluZyBmcm9tIGNsb3N1cmUsIGZvbGxvd2luZyB0IHRyYW5zaXRpb25zXG5cdHRoaXMuZ2V0UmVhY2hhYmxlQ29uZmlnU2V0KGlucHV0LCBzLmNvbmZpZ3MsIHJlYWNoLCB0KTtcblxuXHRpZiAocmVhY2guaXRlbXMubGVuZ3RoID09PSAwKSB7IC8vIHdlIGdvdCBub3doZXJlIG9uIHQgZnJvbSBzXG5cdFx0aWYgKCFyZWFjaC5oYXNTZW1hbnRpY0NvbnRleHQpIHtcblx0XHRcdC8vIHdlIGdvdCBub3doZXJlIG9uIHQsIGRvbid0IHRocm93IG91dCB0aGlzIGtub3dsZWRnZTsgaXQnZFxuXHRcdFx0Ly8gY2F1c2UgYSBmYWlsb3ZlciBmcm9tIERGQSBsYXRlci5cblx0XHRcdHRoaXMuYWRkREZBRWRnZShzLCB0LCBBVE5TaW11bGF0b3IuRVJST1IpO1xuXHRcdH1cblx0XHQvLyBzdG9wIHdoZW4gd2UgY2FuJ3QgbWF0Y2ggYW55IG1vcmUgY2hhclxuXHRcdHJldHVybiBBVE5TaW11bGF0b3IuRVJST1I7XG5cdH1cblx0Ly8gQWRkIGFuIGVkZ2UgZnJvbSBzIHRvIHRhcmdldCBERkEgZm91bmQvY3JlYXRlZCBmb3IgcmVhY2hcblx0cmV0dXJuIHRoaXMuYWRkREZBRWRnZShzLCB0LCBudWxsLCByZWFjaCk7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZmFpbE9yQWNjZXB0ID0gZnVuY3Rpb24ocHJldkFjY2VwdCwgaW5wdXQsIHJlYWNoLCB0KSB7XG5cdGlmICh0aGlzLnByZXZBY2NlcHQuZGZhU3RhdGUgIT09IG51bGwpIHtcblx0XHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IHByZXZBY2NlcHQuZGZhU3RhdGUubGV4ZXJBY3Rpb25FeGVjdXRvcjtcblx0XHR0aGlzLmFjY2VwdChpbnB1dCwgbGV4ZXJBY3Rpb25FeGVjdXRvciwgdGhpcy5zdGFydEluZGV4LFxuXHRcdFx0XHRwcmV2QWNjZXB0LmluZGV4LCBwcmV2QWNjZXB0LmxpbmUsIHByZXZBY2NlcHQuY29sdW1uKTtcblx0XHRyZXR1cm4gcHJldkFjY2VwdC5kZmFTdGF0ZS5wcmVkaWN0aW9uO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGlmIG5vIGFjY2VwdCBhbmQgRU9GIGlzIGZpcnN0IGNoYXIsIHJldHVybiBFT0Zcblx0XHRpZiAodCA9PT0gVG9rZW4uRU9GICYmIGlucHV0LmluZGV4ID09PSB0aGlzLnN0YXJ0SW5kZXgpIHtcblx0XHRcdHJldHVybiBUb2tlbi5FT0Y7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMucmVjb2csIGlucHV0LCB0aGlzLnN0YXJ0SW5kZXgsIHJlYWNoKTtcblx0fVxufTtcblxuLy8gR2l2ZW4gYSBzdGFydGluZyBjb25maWd1cmF0aW9uIHNldCwgZmlndXJlIG91dCBhbGwgQVROIGNvbmZpZ3VyYXRpb25zXG4vLyB3ZSBjYW4gcmVhY2ggdXBvbiBpbnB1dCB7QGNvZGUgdH0uIFBhcmFtZXRlciB7QGNvZGUgcmVhY2h9IGlzIGEgcmV0dXJuXG4vLyBwYXJhbWV0ZXIuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UmVhY2hhYmxlQ29uZmlnU2V0ID0gZnVuY3Rpb24oaW5wdXQsIGNsb3N1cmUsXG5cdFx0cmVhY2gsIHQpIHtcblx0Ly8gdGhpcyBpcyB1c2VkIHRvIHNraXAgcHJvY2Vzc2luZyBmb3IgY29uZmlncyB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHlcblx0Ly8gdGhhbiBhIGNvbmZpZyB0aGF0IGFscmVhZHkgcmVhY2hlZCBhbiBhY2NlcHQgc3RhdGUgZm9yIHRoZSBzYW1lIHJ1bGVcblx0dmFyIHNraXBBbHQgPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNsb3N1cmUuaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY2ZnID0gY2xvc3VyZS5pdGVtc1tpXTtcblx0XHR2YXIgY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSA9IChjZmcuYWx0ID09PSBza2lwQWx0KTtcblx0XHRpZiAoY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSAmJiBjZmcucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcInRlc3RpbmcgJXMgYXQgJXNcXG5cIiwgdGhpcy5nZXRUb2tlbk5hbWUodCksIGNmZ1xuXHRcdFx0XHRcdC50b1N0cmluZyh0aGlzLnJlY29nLCB0cnVlKSk7XG5cdFx0fVxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2ZnLnN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgdHJhbnMgPSBjZmcuc3RhdGUudHJhbnNpdGlvbnNbal07IC8vIGZvciBlYWNoIHRyYW5zaXRpb25cblx0XHRcdHZhciB0YXJnZXQgPSB0aGlzLmdldFJlYWNoYWJsZVRhcmdldCh0cmFucywgdCk7XG5cdFx0XHRpZiAodGFyZ2V0ICE9PSBudWxsKSB7XG5cdFx0XHRcdHZhciBsZXhlckFjdGlvbkV4ZWN1dG9yID0gY2ZnLmxleGVyQWN0aW9uRXhlY3V0b3I7XG5cdFx0XHRcdGlmIChsZXhlckFjdGlvbkV4ZWN1dG9yICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0bGV4ZXJBY3Rpb25FeGVjdXRvciA9IGxleGVyQWN0aW9uRXhlY3V0b3IuZml4T2Zmc2V0QmVmb3JlTWF0Y2goaW5wdXQuaW5kZXggLSB0aGlzLnN0YXJ0SW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciB0cmVhdEVvZkFzRXBzaWxvbiA9ICh0ID09PSBUb2tlbi5FT0YpO1xuXHRcdFx0XHR2YXIgY29uZmlnID0gbmV3IExleGVyQVROQ29uZmlnKHtzdGF0ZTp0YXJnZXQsIGxleGVyQWN0aW9uRXhlY3V0b3I6bGV4ZXJBY3Rpb25FeGVjdXRvcn0sIGNmZyk7XG5cdFx0XHRcdGlmICh0aGlzLmNsb3N1cmUoaW5wdXQsIGNvbmZpZywgcmVhY2gsXG5cdFx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCB0cnVlLCB0cmVhdEVvZkFzRXBzaWxvbikpIHtcblx0XHRcdFx0XHQvLyBhbnkgcmVtYWluaW5nIGNvbmZpZ3MgZm9yIHRoaXMgYWx0IGhhdmUgYSBsb3dlciBwcmlvcml0eVxuXHRcdFx0XHRcdC8vIHRoYW4gdGhlIG9uZSB0aGF0IGp1c3QgcmVhY2hlZCBhbiBhY2NlcHQgc3RhdGUuXG5cdFx0XHRcdFx0c2tpcEFsdCA9IGNmZy5hbHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihpbnB1dCwgbGV4ZXJBY3Rpb25FeGVjdXRvcixcblx0XHRzdGFydEluZGV4LCBpbmRleCwgbGluZSwgY2hhclBvcykge1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIkFDVElPTiAlc1xcblwiLCBsZXhlckFjdGlvbkV4ZWN1dG9yKTtcblx0fVxuXHQvLyBzZWVrIHRvIGFmdGVyIGxhc3QgY2hhciBpbiB0b2tlblxuXHRpbnB1dC5zZWVrKGluZGV4KTtcblx0dGhpcy5saW5lID0gbGluZTtcblx0dGhpcy5jb2x1bW4gPSBjaGFyUG9zO1xuXHRpZiAobGV4ZXJBY3Rpb25FeGVjdXRvciAhPT0gbnVsbCAmJiB0aGlzLnJlY29nICE9PSBudWxsKSB7XG5cdFx0bGV4ZXJBY3Rpb25FeGVjdXRvci5leGVjdXRlKHRoaXMucmVjb2csIGlucHV0LCBzdGFydEluZGV4KTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFJlYWNoYWJsZVRhcmdldCA9IGZ1bmN0aW9uKHRyYW5zLCB0KSB7XG5cdGlmICh0cmFucy5tYXRjaGVzKHQsIDAsIExleGVyLk1BWF9DSEFSX1ZBTFVFKSkge1xuXHRcdHJldHVybiB0cmFucy50YXJnZXQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlU3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBwKSB7XG5cdHZhciBpbml0aWFsQ29udGV4dCA9IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR2YXIgY29uZmlncyA9IG5ldyBPcmRlcmVkQVROQ29uZmlnU2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcC50cmFuc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB0YXJnZXQgPSBwLnRyYW5zaXRpb25zW2ldLnRhcmdldDtcbiAgICAgICAgdmFyIGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7c3RhdGU6dGFyZ2V0LCBhbHQ6aSsxLCBjb250ZXh0OmluaXRpYWxDb250ZXh0fSwgbnVsbCk7XG5cdFx0dGhpcy5jbG9zdXJlKGlucHV0LCBjZmcsIGNvbmZpZ3MsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXHR9XG5cdHJldHVybiBjb25maWdzO1xufTtcblxuLy8gU2luY2UgdGhlIGFsdGVybmF0aXZlcyB3aXRoaW4gYW55IGxleGVyIGRlY2lzaW9uIGFyZSBvcmRlcmVkIGJ5XG4vLyBwcmVmZXJlbmNlLCB0aGlzIG1ldGhvZCBzdG9wcyBwdXJzdWluZyB0aGUgY2xvc3VyZSBhcyBzb29uIGFzIGFuIGFjY2VwdFxuLy8gc3RhdGUgaXMgcmVhY2hlZC4gQWZ0ZXIgdGhlIGZpcnN0IGFjY2VwdCBzdGF0ZSBpcyByZWFjaGVkIGJ5IGRlcHRoLWZpcnN0XG4vLyBzZWFyY2ggZnJvbSB7QGNvZGUgY29uZmlnfSwgYWxsIG90aGVyIChwb3RlbnRpYWxseSByZWFjaGFibGUpIHN0YXRlcyBmb3Jcbi8vIHRoaXMgcnVsZSB3b3VsZCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYW4gYWNjZXB0IHN0YXRlIGlzIHJlYWNoZWQsIG90aGVyd2lzZVxuLy8ge0Bjb2RlIGZhbHNlfS5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jbG9zdXJlID0gZnVuY3Rpb24oaW5wdXQsIGNvbmZpZywgY29uZmlncyxcblx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcblx0dmFyIGNmZyA9IG51bGw7XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZShcIiArIGNvbmZpZy50b1N0cmluZyh0aGlzLnJlY29nLCB0cnVlKSArIFwiKVwiKTtcblx0fVxuXHRpZiAoY29uZmlnLnN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkge1xuXHRcdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdFx0aWYgKHRoaXMucmVjb2cgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJjbG9zdXJlIGF0ICVzIHJ1bGUgc3RvcCAlc1xcblwiLCB0aGlzLnJlY29nLnJ1bGVOYW1lc1tjb25maWcuc3RhdGUucnVsZUluZGV4XSwgY29uZmlnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZSBhdCBydWxlIHN0b3AgJXNcXG5cIiwgY29uZmlnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNvbmZpZy5jb250ZXh0ID09PSBudWxsIHx8IGNvbmZpZy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKSB7XG5cdFx0XHRpZiAoY29uZmlnLmNvbnRleHQgPT09IG51bGwgfHwgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpKSB7XG5cdFx0XHRcdGNvbmZpZ3MuYWRkKGNvbmZpZyk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uZmlncy5hZGQobmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6Y29uZmlnLnN0YXRlLCBjb250ZXh0OlByZWRpY3Rpb25Db250ZXh0LkVNUFRZfSwgY29uZmlnKSk7XG5cdFx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY29uZmlnLmNvbnRleHQgIT09IG51bGwgJiYgIWNvbmZpZy5jb250ZXh0LmlzRW1wdHkoKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWcuY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoY29uZmlnLmNvbnRleHQuZ2V0UmV0dXJuU3RhdGUoaSkgIT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSkge1xuXHRcdFx0XHRcdHZhciBuZXdDb250ZXh0ID0gY29uZmlnLmNvbnRleHQuZ2V0UGFyZW50KGkpOyAvLyBcInBvcFwiIHJldHVybiBzdGF0ZVxuXHRcdFx0XHRcdHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG5cdFx0XHRcdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6cmV0dXJuU3RhdGUsIGNvbnRleHQ6bmV3Q29udGV4dCB9LCBjb25maWcpO1xuXHRcdFx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0aGlzLmNsb3N1cmUoaW5wdXQsIGNmZyxcblx0XHRcdFx0XHRcdFx0Y29uZmlncywgY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSwgc3BlY3VsYXRpdmUsXG5cdFx0XHRcdFx0XHRcdHRyZWF0RW9mQXNFcHNpbG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZTtcblx0fVxuXHQvLyBvcHRpbWl6YXRpb25cblx0aWYgKCFjb25maWcuc3RhdGUuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucykge1xuXHRcdGlmICghY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSB8fCAhY29uZmlnLnBhc3NlZFRocm91Z2hOb25HcmVlZHlEZWNpc2lvbikge1xuXHRcdFx0Y29uZmlncy5hZGQoY29uZmlnKTtcblx0XHR9XG5cdH1cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBjb25maWcuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgdHJhbnMgPSBjb25maWcuc3RhdGUudHJhbnNpdGlvbnNbal07XG5cdFx0Y2ZnID0gdGhpcy5nZXRFcHNpbG9uVGFyZ2V0KGlucHV0LCBjb25maWcsIHRyYW5zLCBjb25maWdzLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuXHRcdGlmIChjZmcgIT09IG51bGwpIHtcblx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0aGlzLmNsb3N1cmUoaW5wdXQsIGNmZywgY29uZmlncyxcblx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZTtcbn07XG5cbi8vIHNpZGUtZWZmZWN0OiBjYW4gYWx0ZXIgY29uZmlncy5oYXNTZW1hbnRpY0NvbnRleHRcbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFcHNpbG9uVGFyZ2V0ID0gZnVuY3Rpb24oaW5wdXQsIGNvbmZpZywgdHJhbnMsXG5cdFx0Y29uZmlncywgc3BlY3VsYXRpdmUsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG5cdHZhciBjZmcgPSBudWxsO1xuXHRpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uUlVMRSkge1xuXHRcdHZhciBuZXdDb250ZXh0ID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKGNvbmZpZy5jb250ZXh0LCB0cmFucy5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG5cdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKCB7IHN0YXRlOnRyYW5zLnRhcmdldCwgY29udGV4dDpuZXdDb250ZXh0fSwgY29uZmlnKTtcblx0fSBlbHNlIGlmICh0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5QUkVDRURFTkNFKSB7XG5cdFx0dGhyb3cgXCJQcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gbGV4ZXJzLlwiO1xuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLlBSRURJQ0FURSkge1xuXHRcdC8vIFRyYWNrIHRyYXZlcnNpbmcgc2VtYW50aWMgcHJlZGljYXRlcy4gSWYgd2UgdHJhdmVyc2UsXG5cdFx0Ly8gd2UgY2Fubm90IGFkZCBhIERGQSBzdGF0ZSBmb3IgdGhpcyBcInJlYWNoXCIgY29tcHV0YXRpb25cblx0XHQvLyBiZWNhdXNlIHRoZSBERkEgd291bGQgbm90IHRlc3QgdGhlIHByZWRpY2F0ZSBhZ2FpbiBpbiB0aGVcblx0XHQvLyBmdXR1cmUuIFJhdGhlciB0aGFuIGNyZWF0aW5nIGNvbGxlY3Rpb25zIG9mIHNlbWFudGljIHByZWRpY2F0ZXNcblx0XHQvLyBsaWtlIHYzIGFuZCB0ZXN0aW5nIHRoZW0gb24gcHJlZGljdGlvbiwgdjQgd2lsbCB0ZXN0IHRoZW0gb24gdGhlXG5cdFx0Ly8gZmx5IGFsbCB0aGUgdGltZSB1c2luZyB0aGUgQVROIG5vdCB0aGUgREZBLiBUaGlzIGlzIHNsb3dlciBidXRcblx0XHQvLyBzZW1hbnRpY2FsbHkgaXQncyBub3QgdXNlZCB0aGF0IG9mdGVuLiBPbmUgb2YgdGhlIGtleSBlbGVtZW50cyB0b1xuXHRcdC8vIHRoaXMgcHJlZGljYXRlIG1lY2hhbmlzbSBpcyBub3QgYWRkaW5nIERGQSBzdGF0ZXMgdGhhdCBzZWVcblx0XHQvLyBwcmVkaWNhdGVzIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMgaW4gdGhlIEFUTi4gRm9yIGV4YW1wbGUsXG5cblx0XHQvLyBhIDogSUQge3AxfT8gfCBJRCB7cDJ9PyA7XG5cblx0XHQvLyBzaG91bGQgY3JlYXRlIHRoZSBzdGFydCBzdGF0ZSBmb3IgcnVsZSAnYScgKHRvIHNhdmUgc3RhcnQgc3RhdGVcblx0XHQvLyBjb21wZXRpdGlvbiksIGJ1dCBzaG91bGQgbm90IGNyZWF0ZSB0YXJnZXQgb2YgSUQgc3RhdGUuIFRoZVxuXHRcdC8vIGNvbGxlY3Rpb24gb2YgQVROIHN0YXRlcyB0aGUgZm9sbG93aW5nIElEIHJlZmVyZW5jZXMgaW5jbHVkZXNcblx0XHQvLyBzdGF0ZXMgcmVhY2hlZCBieSB0cmF2ZXJzaW5nIHByZWRpY2F0ZXMuIFNpbmNlIHRoaXMgaXMgd2hlbiB3ZVxuXHRcdC8vIHRlc3QgdGhlbSwgd2UgY2Fubm90IGNhc2ggdGhlIERGQSBzdGF0ZSB0YXJnZXQgb2YgSUQuXG5cblx0XHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiRVZBTCBydWxlIFwiICsgdHJhbnMucnVsZUluZGV4ICsgXCI6XCIgKyB0cmFucy5wcmVkSW5kZXgpO1xuXHRcdH1cblx0XHRjb25maWdzLmhhc1NlbWFudGljQ29udGV4dCA9IHRydWU7XG5cdFx0aWYgKHRoaXMuZXZhbHVhdGVQcmVkaWNhdGUoaW5wdXQsIHRyYW5zLnJ1bGVJbmRleCwgdHJhbnMucHJlZEluZGV4LCBzcGVjdWxhdGl2ZSkpIHtcblx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLkFDVElPTikge1xuXHRcdGlmIChjb25maWcuY29udGV4dCA9PT0gbnVsbCB8fCBjb25maWcuY29udGV4dC5oYXNFbXB0eVBhdGgoKSkge1xuXHRcdFx0Ly8gZXhlY3V0ZSBhY3Rpb25zIGFueXdoZXJlIGluIHRoZSBzdGFydCBydWxlIGZvciBhIHRva2VuLlxuXHRcdFx0Ly9cblx0XHRcdC8vIFRPRE86IGlmIHRoZSBlbnRyeSBydWxlIGlzIGludm9rZWQgcmVjdXJzaXZlbHksIHNvbWVcblx0XHRcdC8vIGFjdGlvbnMgbWF5IGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgcmVjdXJzaXZlIGNhbGwuIFRoZVxuXHRcdFx0Ly8gcHJvYmxlbSBjYW4gYXBwZWFyIHdoZW4gaGFzRW1wdHlQYXRoKCkgaXMgdHJ1ZSBidXRcblx0XHRcdC8vIGlzRW1wdHkoKSBpcyBmYWxzZS4gSW4gdGhpcyBjYXNlLCB0aGUgY29uZmlnIG5lZWRzIHRvIGJlXG5cdFx0XHQvLyBzcGxpdCBpbnRvIHR3byBjb250ZXh0cyAtIG9uZSB3aXRoIGp1c3QgdGhlIGVtcHR5IHBhdGhcblx0XHRcdC8vIGFuZCBhbm90aGVyIHdpdGggZXZlcnl0aGluZyBidXQgdGhlIGVtcHR5IHBhdGguXG5cdFx0XHQvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgY3VycmVudCBhbGdvcml0aG0gZG9lcyBub3QgYWxsb3dcblx0XHRcdC8vIGdldEVwc2lsb25UYXJnZXQgdG8gcmV0dXJuIHR3byBjb25maWd1cmF0aW9ucywgc29cblx0XHRcdC8vIGFkZGl0aW9uYWwgbW9kaWZpY2F0aW9ucyBhcmUgbmVlZGVkIGJlZm9yZSB3ZSBjYW4gc3VwcG9ydFxuXHRcdFx0Ly8gdGhlIHNwbGl0IG9wZXJhdGlvbi5cblx0XHRcdHZhciBsZXhlckFjdGlvbkV4ZWN1dG9yID0gTGV4ZXJBY3Rpb25FeGVjdXRvci5hcHBlbmQoY29uZmlnLmxleGVyQWN0aW9uRXhlY3V0b3IsXG5cdFx0XHRcdFx0dGhpcy5hdG4ubGV4ZXJBY3Rpb25zW3RyYW5zLmFjdGlvbkluZGV4XSk7XG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoeyBzdGF0ZTp0cmFucy50YXJnZXQsIGxleGVyQWN0aW9uRXhlY3V0b3I6bGV4ZXJBY3Rpb25FeGVjdXRvciB9LCBjb25maWcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZ25vcmUgYWN0aW9ucyBpbiByZWZlcmVuY2VkIHJ1bGVzXG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoIHsgc3RhdGU6dHJhbnMudGFyZ2V0fSwgY29uZmlnKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uRVBTSUxPTikge1xuXHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uQVRPTSB8fFxuXHRcdFx0XHR0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5SQU5HRSB8fFxuXHRcdFx0XHR0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5TRVQpIHtcblx0XHRpZiAodHJlYXRFb2ZBc0Vwc2lsb24pIHtcblx0XHRcdGlmICh0cmFucy5tYXRjaGVzKFRva2VuLkVPRiwgMCwgTGV4ZXIuTUFYX0NIQVJfVkFMVUUpKSB7XG5cdFx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyggeyBzdGF0ZTp0cmFucy50YXJnZXQgfSwgY29uZmlnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGNmZztcbn07XG5cbi8vIEV2YWx1YXRlIGEgcHJlZGljYXRlIHNwZWNpZmllZCBpbiB0aGUgbGV4ZXIuXG4vL1xuLy8gPHA+SWYge0Bjb2RlIHNwZWN1bGF0aXZlfSBpcyB7QGNvZGUgdHJ1ZX0sIHRoaXMgbWV0aG9kIHdhcyBjYWxsZWQgYmVmb3JlXG4vLyB7QGxpbmsgLy9jb25zdW1lfSBmb3IgdGhlIG1hdGNoZWQgY2hhcmFjdGVyLiBUaGlzIG1ldGhvZCBzaG91bGQgY2FsbFxuLy8ge0BsaW5rIC8vY29uc3VtZX0gYmVmb3JlIGV2YWx1YXRpbmcgdGhlIHByZWRpY2F0ZSB0byBlbnN1cmUgcG9zaXRpb25cbi8vIHNlbnNpdGl2ZSB2YWx1ZXMsIGluY2x1ZGluZyB7QGxpbmsgTGV4ZXIvL2dldFRleHR9LCB7QGxpbmsgTGV4ZXIvL2dldExpbmV9LFxuLy8gYW5kIHtAbGluayBMZXhlci8vZ2V0Y29sdW1ufSwgcHJvcGVybHkgcmVmbGVjdCB0aGUgY3VycmVudFxuLy8gbGV4ZXIgc3RhdGUuIFRoaXMgbWV0aG9kIHNob3VsZCByZXN0b3JlIHtAY29kZSBpbnB1dH0gYW5kIHRoZSBzaW11bGF0b3Jcbi8vIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZSBiZWZvcmUgcmV0dXJuaW5nIChpLmUuIHVuZG8gdGhlIGFjdGlvbnMgbWFkZSBieSB0aGVcbi8vIGNhbGwgdG8ge0BsaW5rIC8vY29uc3VtZX0uPC9wPlxuLy9cbi8vIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgc3RyZWFtLlxuLy8gQHBhcmFtIHJ1bGVJbmRleCBUaGUgcnVsZSBjb250YWluaW5nIHRoZSBwcmVkaWNhdGUuXG4vLyBAcGFyYW0gcHJlZEluZGV4IFRoZSBpbmRleCBvZiB0aGUgcHJlZGljYXRlIHdpdGhpbiB0aGUgcnVsZS5cbi8vIEBwYXJhbSBzcGVjdWxhdGl2ZSB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGN1cnJlbnQgaW5kZXggaW4ge0Bjb2RlIGlucHV0fSBpc1xuLy8gb25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIHByZWRpY2F0ZSdzIGxvY2F0aW9uLlxuLy9cbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBzcGVjaWZpZWQgcHJlZGljYXRlIGV2YWx1YXRlcyB0b1xuLy8ge0Bjb2RlIHRydWV9LlxuLy8gL1xuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmV2YWx1YXRlUHJlZGljYXRlID0gZnVuY3Rpb24oaW5wdXQsIHJ1bGVJbmRleCxcblx0XHRwcmVkSW5kZXgsIHNwZWN1bGF0aXZlKSB7XG5cdC8vIGFzc3VtZSB0cnVlIGlmIG5vIHJlY29nbml6ZXIgd2FzIHByb3ZpZGVkXG5cdGlmICh0aGlzLnJlY29nID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFzcGVjdWxhdGl2ZSkge1xuXHRcdHJldHVybiB0aGlzLnJlY29nLnNlbXByZWQobnVsbCwgcnVsZUluZGV4LCBwcmVkSW5kZXgpO1xuXHR9XG5cdHZhciBzYXZlZGNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR2YXIgc2F2ZWRMaW5lID0gdGhpcy5saW5lO1xuXHR2YXIgaW5kZXggPSBpbnB1dC5pbmRleDtcblx0dmFyIG1hcmtlciA9IGlucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR0aGlzLmNvbnN1bWUoaW5wdXQpO1xuXHRcdHJldHVybiB0aGlzLnJlY29nLnNlbXByZWQobnVsbCwgcnVsZUluZGV4LCBwcmVkSW5kZXgpO1xuXHR9IGZpbmFsbHkge1xuXHRcdHRoaXMuY29sdW1uID0gc2F2ZWRjb2x1bW47XG5cdFx0dGhpcy5saW5lID0gc2F2ZWRMaW5lO1xuXHRcdGlucHV0LnNlZWsoaW5kZXgpO1xuXHRcdGlucHV0LnJlbGVhc2UobWFya2VyKTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNhcHR1cmVTaW1TdGF0ZSA9IGZ1bmN0aW9uKHNldHRpbmdzLCBpbnB1dCwgZGZhU3RhdGUpIHtcblx0c2V0dGluZ3MuaW5kZXggPSBpbnB1dC5pbmRleDtcblx0c2V0dGluZ3MubGluZSA9IHRoaXMubGluZTtcblx0c2V0dGluZ3MuY29sdW1uID0gdGhpcy5jb2x1bW47XG5cdHNldHRpbmdzLmRmYVN0YXRlID0gZGZhU3RhdGU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBRWRnZSA9IGZ1bmN0aW9uKGZyb21fLCB0aywgdG8sIGNmZ3MpIHtcblx0aWYgKHRvID09PSB1bmRlZmluZWQpIHtcblx0XHR0byA9IG51bGw7XG5cdH1cblx0aWYgKGNmZ3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNmZ3MgPSBudWxsO1xuXHR9XG5cdGlmICh0byA9PT0gbnVsbCAmJiBjZmdzICE9PSBudWxsKSB7XG5cdFx0Ly8gbGVhZGluZyB0byB0aGlzIGNhbGwsIEFUTkNvbmZpZ1NldC5oYXNTZW1hbnRpY0NvbnRleHQgaXMgdXNlZCBhcyBhXG5cdFx0Ly8gbWFya2VyIGluZGljYXRpbmcgZHluYW1pYyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBtYWtlcyB0aGlzIGVkZ2Vcblx0XHQvLyBkZXBlbmRlbnQgb24gdGhlIHNwZWNpZmljIGlucHV0IHNlcXVlbmNlLCBzbyB0aGUgc3RhdGljIGVkZ2UgaW4gdGhlXG5cdFx0Ly8gREZBIHNob3VsZCBiZSBvbWl0dGVkLiBUaGUgdGFyZ2V0IERGQVN0YXRlIGlzIHN0aWxsIGNyZWF0ZWQgc2luY2Vcblx0XHQvLyBleGVjQVROIGhhcyB0aGUgYWJpbGl0eSB0byByZXN5bmNocm9uaXplIHdpdGggdGhlIERGQSBzdGF0ZSBjYWNoZVxuXHRcdC8vIGZvbGxvd2luZyB0aGUgcHJlZGljYXRlIGV2YWx1YXRpb24gc3RlcC5cblx0XHQvL1xuXHRcdC8vIFRKUCBub3RlczogbmV4dCB0aW1lIHRocm91Z2ggdGhlIERGQSwgd2Ugc2VlIGEgcHJlZCBhZ2FpbiBhbmQgZXZhbC5cblx0XHQvLyBJZiB0aGF0IGdldHMgdXMgdG8gYSBwcmV2aW91c2x5IGNyZWF0ZWQgKGJ1dCBkYW5nbGluZykgREZBXG5cdFx0Ly8gc3RhdGUsIHdlIGNhbiBjb250aW51ZSBpbiBwdXJlIERGQSBtb2RlIGZyb20gdGhlcmUuXG5cdFx0Ly8gL1xuXHRcdHZhciBzdXBwcmVzc0VkZ2UgPSBjZmdzLmhhc1NlbWFudGljQ29udGV4dDtcblx0XHRjZmdzLmhhc1NlbWFudGljQ29udGV4dCA9IGZhbHNlO1xuXG5cdFx0dG8gPSB0aGlzLmFkZERGQVN0YXRlKGNmZ3MpO1xuXG5cdFx0aWYgKHN1cHByZXNzRWRnZSkge1xuXHRcdFx0cmV0dXJuIHRvO1xuXHRcdH1cblx0fVxuXHQvLyBhZGQgdGhlIGVkZ2Vcblx0aWYgKHRrIDwgTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFIHx8IHRrID4gTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFKSB7XG5cdFx0Ly8gT25seSB0cmFjayBlZGdlcyB3aXRoaW4gdGhlIERGQSBib3VuZHNcblx0XHRyZXR1cm4gdG87XG5cdH1cblx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJFREdFIFwiICsgZnJvbV8gKyBcIiAtPiBcIiArIHRvICsgXCIgdXBvbiBcIiArIHRrKTtcblx0fVxuXHRpZiAoZnJvbV8uZWRnZXMgPT09IG51bGwpIHtcblx0XHQvLyBtYWtlIHJvb20gZm9yIHRva2VucyAxLi5uIGFuZCAtMSBtYXNxdWVyYWRpbmcgYXMgaW5kZXggMFxuXHRcdGZyb21fLmVkZ2VzID0gW107XG5cdH1cblx0ZnJvbV8uZWRnZXNbdGsgLSBMZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0VdID0gdG87IC8vIGNvbm5lY3RcblxuXHRyZXR1cm4gdG87XG59O1xuXG4vLyBBZGQgYSBuZXcgREZBIHN0YXRlIGlmIHRoZXJlIGlzbid0IG9uZSB3aXRoIHRoaXMgc2V0IG9mXG4vLyBjb25maWd1cmF0aW9ucyBhbHJlYWR5LiBUaGlzIG1ldGhvZCBhbHNvIGRldGVjdHMgdGhlIGZpcnN0XG4vLyBjb25maWd1cmF0aW9uIGNvbnRhaW5pbmcgYW4gQVROIHJ1bGUgc3RvcCBzdGF0ZS4gTGF0ZXIsIHdoZW5cbi8vIHRyYXZlcnNpbmcgdGhlIERGQSwgd2Ugd2lsbCBrbm93IHdoaWNoIHJ1bGUgdG8gYWNjZXB0LlxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFkZERGQVN0YXRlID0gZnVuY3Rpb24oY29uZmlncykge1xuXHR2YXIgcHJvcG9zZWQgPSBuZXcgREZBU3RhdGUobnVsbCwgY29uZmlncyk7XG5cdHZhciBmaXJzdENvbmZpZ1dpdGhSdWxlU3RvcFN0YXRlID0gbnVsbDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGNmZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG5cdFx0aWYgKGNmZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcblx0XHRcdGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUgPSBjZmc7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0aWYgKGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUgIT09IG51bGwpIHtcblx0XHRwcm9wb3NlZC5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcblx0XHRwcm9wb3NlZC5sZXhlckFjdGlvbkV4ZWN1dG9yID0gZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZS5sZXhlckFjdGlvbkV4ZWN1dG9yO1xuXHRcdHByb3Bvc2VkLnByZWRpY3Rpb24gPSB0aGlzLmF0bi5ydWxlVG9Ub2tlblR5cGVbZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZS5zdGF0ZS5ydWxlSW5kZXhdO1xuXHR9XG5cdHZhciBkZmEgPSB0aGlzLmRlY2lzaW9uVG9ERkFbdGhpcy5tb2RlXTtcblx0dmFyIGV4aXN0aW5nID0gZGZhLnN0YXRlcy5nZXQocHJvcG9zZWQpO1xuXHRpZiAoZXhpc3RpbmchPT1udWxsKSB7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHZhciBuZXdTdGF0ZSA9IHByb3Bvc2VkO1xuXHRuZXdTdGF0ZS5zdGF0ZU51bWJlciA9IGRmYS5zdGF0ZXMubGVuZ3RoO1xuXHRjb25maWdzLnNldFJlYWRvbmx5KHRydWUpO1xuXHRuZXdTdGF0ZS5jb25maWdzID0gY29uZmlncztcblx0ZGZhLnN0YXRlcy5hZGQobmV3U3RhdGUpO1xuXHRyZXR1cm4gbmV3U3RhdGU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0REZBID0gZnVuY3Rpb24obW9kZSkge1xuXHRyZXR1cm4gdGhpcy5kZWNpc2lvblRvREZBW21vZGVdO1xufTtcblxuLy8gR2V0IHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbi5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0Ly8gaW5kZXggaXMgZmlyc3QgbG9va2FoZWFkIGNoYXIsIGRvbid0IGluY2x1ZGUuXG5cdHJldHVybiBpbnB1dC5nZXRUZXh0KHRoaXMuc3RhcnRJbmRleCwgaW5wdXQuaW5kZXggLSAxKTtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb25zdW1lID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dmFyIGN1ckNoYXIgPSBpbnB1dC5MQSgxKTtcblx0aWYgKGN1ckNoYXIgPT09IFwiXFxuXCIuY2hhckNvZGVBdCgwKSkge1xuXHRcdHRoaXMubGluZSArPSAxO1xuXHRcdHRoaXMuY29sdW1uID0gMDtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmNvbHVtbiArPSAxO1xuXHR9XG5cdGlucHV0LmNvbnN1bWUoKTtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRUb2tlbk5hbWUgPSBmdW5jdGlvbih0dCkge1xuXHRpZiAodHQgPT09IC0xKSB7XG5cdFx0cmV0dXJuIFwiRU9GXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0dCkgKyBcIidcIjtcblx0fVxufTtcblxuZXhwb3J0cy5MZXhlckFUTlNpbXVsYXRvciA9IExleGVyQVROU2ltdWxhdG9yO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbiAvL1xuXG5mdW5jdGlvbiBMZXhlckFjdGlvblR5cGUoKSB7XG59XG5cbkxleGVyQWN0aW9uVHlwZS5DSEFOTkVMID0gMDsgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJDaGFubmVsQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuQ1VTVE9NID0gMTsgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyQ3VzdG9tQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuTU9ERSA9IDI7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyTW9kZUFjdGlvbn0gYWN0aW9uLlxuTGV4ZXJBY3Rpb25UeXBlLk1PUkUgPSAzOyAgICAgICAgLy9UaGUgdHlwZSBvZiBhIHtAbGluayBMZXhlck1vcmVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5QT1BfTU9ERSA9IDQ7ICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJQb3BNb2RlQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuUFVTSF9NT0RFID0gNTsgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyUHVzaE1vZGVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5TS0lQID0gNjsgICAgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJTa2lwQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuVFlQRSA9IDc7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyVHlwZUFjdGlvbn0gYWN0aW9uLlxuXG5mdW5jdGlvbiBMZXhlckFjdGlvbihhY3Rpb24pIHtcbiAgICB0aGlzLmFjdGlvblR5cGUgPSBhY3Rpb247XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQWN0aW9uLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICB0aGlzLnVwZGF0ZUhhc2hDb2RlKGhhc2gpO1xuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpXG59O1xuXG5MZXhlckFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlKTtcbn07XG5cbkxleGVyQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIHJldHVybiB0aGlzID09PSBvdGhlcjtcbn07XG5cblxuXG4vL1xuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHNraXB9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vc2tpcH0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBza2lwfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlclNraXBBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLlNLSVApO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJTa2lwQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclNraXBBY3Rpb247XG5cbi8vIFByb3ZpZGVzIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGFyYW1ldGVybGVzcyBsZXhlciBhY3Rpb24uXG5MZXhlclNraXBBY3Rpb24uSU5TVEFOQ0UgPSBuZXcgTGV4ZXJTa2lwQWN0aW9uKCk7XG5cbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIuc2tpcCgpO1xufTtcblxuTGV4ZXJTa2lwQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJza2lwXCI7XG59O1xuXG4vLyAgSW1wbGVtZW50cyB0aGUge0Bjb2RlIHR5cGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vc2V0VHlwZX1cbi8vIHdpdGggdGhlIGFzc2lnbmVkIHR5cGUuXG5mdW5jdGlvbiBMZXhlclR5cGVBY3Rpb24odHlwZSkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5UWVBFKTtcblx0dGhpcy50eXBlID0gdHlwZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJUeXBlQWN0aW9uO1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnR5cGUgPSB0aGlzLnR5cGU7XG59O1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuYWN0aW9uVHlwZSwgdGhpcy50eXBlKTtcbn07XG5cblxuTGV4ZXJUeXBlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlclR5cGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBvdGhlci50eXBlO1xuICAgIH1cbn07XG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0eXBlKFwiICsgdGhpcy50eXBlICsgXCIpXCI7XG59O1xuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgcHVzaE1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXIvL3B1c2hNb2RlfSB3aXRoIHRoZSBhc3NpZ25lZCBtb2RlLlxuZnVuY3Rpb24gTGV4ZXJQdXNoTW9kZUFjdGlvbihtb2RlKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERSk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyUHVzaE1vZGVBY3Rpb247XG5cbi8vIDxwPlRoaXMgYWN0aW9uIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9wdXNoTW9kZX0gd2l0aCB0aGVcbi8vIHZhbHVlIHByb3ZpZGVkIGJ5IHtAbGluayAvL2dldE1vZGV9LjwvcD5cbkxleGVyUHVzaE1vZGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnB1c2hNb2RlKHRoaXMubW9kZSk7XG59O1xuXG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMubW9kZSk7XG59O1xuXG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJQdXNoTW9kZUFjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IG90aGVyLm1vZGU7XG4gICAgfVxufTtcblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwicHVzaE1vZGUoXCIgKyB0aGlzLm1vZGUgKyBcIilcIjtcbn07XG5cblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHBvcE1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcG9wTW9kZX0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBwb3BNb2RlfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlclBvcE1vZGVBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcyxMZXhlckFjdGlvblR5cGUuUE9QX01PREUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJQb3BNb2RlQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclBvcE1vZGVBY3Rpb247XG5cbkxleGVyUG9wTW9kZUFjdGlvbi5JTlNUQU5DRSA9IG5ldyBMZXhlclBvcE1vZGVBY3Rpb24oKTtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3BvcE1vZGV9LjwvcD5cbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIucG9wTW9kZSgpO1xufTtcblxuTGV4ZXJQb3BNb2RlQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwb3BNb2RlXCI7XG59O1xuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgbW9yZX0gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9tb3JlfS5cbi8vXG4vLyA8cD5UaGUge0Bjb2RlIG1vcmV9IGNvbW1hbmQgZG9lcyBub3QgaGF2ZSBhbnkgcGFyYW1ldGVycywgc28gdGhpcyBhY3Rpb24gaXNcbi8vIGltcGxlbWVudGVkIGFzIGEgc2luZ2xldG9uIGluc3RhbmNlIGV4cG9zZWQgYnkge0BsaW5rIC8vSU5TVEFOQ0V9LjwvcD5cbmZ1bmN0aW9uIExleGVyTW9yZUFjdGlvbigpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuTU9SRSk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5MZXhlck1vcmVBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyTW9yZUFjdGlvbjtcblxuTGV4ZXJNb3JlQWN0aW9uLklOU1RBTkNFID0gbmV3IExleGVyTW9yZUFjdGlvbigpO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcG9wTW9kZX0uPC9wPlxuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICBsZXhlci5tb3JlKCk7XG59O1xuXG5MZXhlck1vcmVBY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwibW9yZVwiO1xufTtcblxuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgbW9kZX0gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9tb2RlfSB3aXRoXG4vLyB0aGUgYXNzaWduZWQgbW9kZS5cbmZ1bmN0aW9uIExleGVyTW9kZUFjdGlvbihtb2RlKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLk1PREUpO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJNb2RlQWN0aW9uO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vbW9kZX0gd2l0aCB0aGVcbi8vIHZhbHVlIHByb3ZpZGVkIGJ5IHtAbGluayAvL2dldE1vZGV9LjwvcD5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIubW9kZSh0aGlzLm1vZGUpO1xufTtcblxuTGV4ZXJNb2RlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMubW9kZSk7XG59O1xuXG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlck1vZGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBvdGhlci5tb2RlO1xuICAgIH1cbn07XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJtb2RlKFwiICsgdGhpcy5tb2RlICsgXCIpXCI7XG59O1xuXG4vLyBFeGVjdXRlcyBhIGN1c3RvbSBsZXhlciBhY3Rpb24gYnkgY2FsbGluZyB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufSB3aXRoIHRoZVxuLy8gcnVsZSBhbmQgYWN0aW9uIGluZGV4ZXMgYXNzaWduZWQgdG8gdGhlIGN1c3RvbSBhY3Rpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBvZlxuLy8gYSBjdXN0b20gYWN0aW9uIGlzIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGxleGVyIGluIGFuIG92ZXJyaWRlXG4vLyBvZiB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufSB3aGVuIHRoZSBncmFtbWFyIGlzIGNvbXBpbGVkLlxuLy9cbi8vIDxwPlRoaXMgY2xhc3MgbWF5IHJlcHJlc2VudCBlbWJlZGRlZCBhY3Rpb25zIGNyZWF0ZWQgd2l0aCB0aGUgPGNvZGU+ey4uLn08L2NvZGU+XG4vLyBzeW50YXggaW4gQU5UTFIgNCwgYXMgd2VsbCBhcyBhY3Rpb25zIGNyZWF0ZWQgZm9yIGxleGVyIGNvbW1hbmRzIHdoZXJlIHRoZVxuLy8gY29tbWFuZCBhcmd1bWVudCBjb3VsZCBub3QgYmUgZXZhbHVhdGVkIHdoZW4gdGhlIGdyYW1tYXIgd2FzIGNvbXBpbGVkLjwvcD5cblxuXG4gICAgLy8gQ29uc3RydWN0cyBhIGN1c3RvbSBsZXhlciBhY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIHJ1bGUgYW5kIGFjdGlvblxuICAgIC8vIGluZGV4ZXMuXG4gICAgLy9cbiAgICAvLyBAcGFyYW0gcnVsZUluZGV4IFRoZSBydWxlIGluZGV4IHRvIHVzZSBmb3IgY2FsbHMgdG9cbiAgICAvLyB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufS5cbiAgICAvLyBAcGFyYW0gYWN0aW9uSW5kZXggVGhlIGFjdGlvbiBpbmRleCB0byB1c2UgZm9yIGNhbGxzIHRvXG4gICAgLy8ge0BsaW5rIFJlY29nbml6ZXIvL2FjdGlvbn0uXG5cbmZ1bmN0aW9uIExleGVyQ3VzdG9tQWN0aW9uKHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuQ1VTVE9NKTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg7XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJDdXN0b21BY3Rpb247XG5cbi8vIDxwPkN1c3RvbSBhY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vYWN0aW9ufSB3aXRoIHRoZVxuLy8gYXBwcm9wcmlhdGUgcnVsZSBhbmQgYWN0aW9uIGluZGV4ZXMuPC9wPlxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLmFjdGlvbihudWxsLCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5hY3Rpb25JbmRleCk7XG59O1xuXG5MZXhlckN1c3RvbUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5hY3Rpb25JbmRleCk7XG59O1xuXG5MZXhlckN1c3RvbUFjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIExleGVyQ3VzdG9tQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiYgdGhpcy5hY3Rpb25JbmRleCA9PT0gb3RoZXIuYWN0aW9uSW5kZXg7XG4gICAgfVxufTtcblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIGNoYW5uZWx9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9IHdpdGggdGhlIGFzc2lnbmVkIGNoYW5uZWwuXG4vLyBDb25zdHJ1Y3RzIGEgbmV3IHtAY29kZSBjaGFubmVsfSBhY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgdmFsdWUuXG4vLyBAcGFyYW0gY2hhbm5lbCBUaGUgY2hhbm5lbCB2YWx1ZSB0byBwYXNzIHRvIHtAbGluayBMZXhlci8vc2V0Q2hhbm5lbH0uXG5mdW5jdGlvbiBMZXhlckNoYW5uZWxBY3Rpb24oY2hhbm5lbCkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5DSEFOTkVMKTtcbiAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQ2hhbm5lbEFjdGlvbjtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9IHdpdGggdGhlXG4vLyB2YWx1ZSBwcm92aWRlZCBieSB7QGxpbmsgLy9nZXRDaGFubmVsfS48L3A+XG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLl9jaGFubmVsID0gdGhpcy5jaGFubmVsO1xufTtcblxuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMuY2hhbm5lbCk7XG59O1xuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckNoYW5uZWxBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsID09PSBvdGhlci5jaGFubmVsO1xuICAgIH1cbn07XG5cbkxleGVyQ2hhbm5lbEFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJjaGFubmVsKFwiICsgdGhpcy5jaGFubmVsICsgXCIpXCI7XG59O1xuXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBMZXhlckFjdGlvbn0gaXMgdXNlZCBmb3IgdHJhY2tpbmcgaW5wdXQgb2Zmc2V0c1xuLy8gZm9yIHBvc2l0aW9uLWRlcGVuZGVudCBhY3Rpb25zIHdpdGhpbiBhIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yfS5cbi8vXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBub3Qgc2VyaWFsaXplZCBhcyBwYXJ0IG9mIHRoZSBBVE4sIGFuZCBpcyBvbmx5IHJlcXVpcmVkIGZvclxuLy8gcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMgd2hpY2ggYXBwZWFyIGF0IGEgbG9jYXRpb24gb3RoZXIgdGhhbiB0aGVcbi8vIGVuZCBvZiBhIHJ1bGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IERGQSBvcHRpbWl6YXRpb25zIGVtcGxveWVkIGZvclxuLy8gbGV4ZXIgYWN0aW9ucywgc2VlIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yLy9hcHBlbmR9IGFuZFxuLy8ge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3IvL2ZpeE9mZnNldEJlZm9yZU1hdGNofS48L3A+XG5cbi8vIENvbnN0cnVjdHMgYSBuZXcgaW5kZXhlZCBjdXN0b20gYWN0aW9uIGJ5IGFzc29jaWF0aW5nIGEgY2hhcmFjdGVyIG9mZnNldFxuLy8gd2l0aCBhIHtAbGluayBMZXhlckFjdGlvbn0uXG4vL1xuLy8gPHA+Tm90ZTogVGhpcyBjbGFzcyBpcyBvbmx5IHJlcXVpcmVkIGZvciBsZXhlciBhY3Rpb25zIGZvciB3aGljaFxuLy8ge0BsaW5rIExleGVyQWN0aW9uLy9pc1Bvc2l0aW9uRGVwZW5kZW50fSByZXR1cm5zIHtAY29kZSB0cnVlfS48L3A+XG4vL1xuLy8gQHBhcmFtIG9mZnNldCBUaGUgb2Zmc2V0IGludG8gdGhlIGlucHV0IHtAbGluayBDaGFyU3RyZWFtfSwgcmVsYXRpdmUgdG9cbi8vIHRoZSB0b2tlbiBzdGFydCBpbmRleCwgYXQgd2hpY2ggdGhlIHNwZWNpZmllZCBsZXhlciBhY3Rpb24gc2hvdWxkIGJlXG4vLyBleGVjdXRlZC5cbi8vIEBwYXJhbSBhY3Rpb24gVGhlIGxleGVyIGFjdGlvbiB0byBleGVjdXRlIGF0IGEgcGFydGljdWxhciBvZmZzZXQgaW4gdGhlXG4vLyBpbnB1dCB7QGxpbmsgQ2hhclN0cmVhbX0uXG5mdW5jdGlvbiBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24ob2Zmc2V0LCBhY3Rpb24pIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBhY3Rpb24uYWN0aW9uVHlwZSk7XG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb247XG5cbi8vIDxwPlRoaXMgbWV0aG9kIGNhbGxzIHtAbGluayAvL2V4ZWN1dGV9IG9uIHRoZSByZXN1bHQgb2Yge0BsaW5rIC8vZ2V0QWN0aW9ufVxuLy8gdXNpbmcgdGhlIHByb3ZpZGVkIHtAY29kZSBsZXhlcn0uPC9wPlxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICAvLyBhc3N1bWUgdGhlIGlucHV0IHN0cmVhbSBwb3NpdGlvbiB3YXMgcHJvcGVybHkgc2V0IGJ5IHRoZSBjYWxsaW5nIGNvZGVcbiAgICB0aGlzLmFjdGlvbi5leGVjdXRlKGxleGVyKTtcbn07XG5cbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLm9mZnNldCwgdGhpcy5hY3Rpb24pO1xufTtcblxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0ID09PSBvdGhlci5vZmZzZXQgJiYgdGhpcy5hY3Rpb24gPT09IG90aGVyLmFjdGlvbjtcbiAgICB9XG59O1xuXG5cbmV4cG9ydHMuTGV4ZXJBY3Rpb25UeXBlID0gTGV4ZXJBY3Rpb25UeXBlO1xuZXhwb3J0cy5MZXhlclNraXBBY3Rpb24gPSBMZXhlclNraXBBY3Rpb247XG5leHBvcnRzLkxleGVyQ2hhbm5lbEFjdGlvbiA9IExleGVyQ2hhbm5lbEFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJDdXN0b21BY3Rpb24gPSBMZXhlckN1c3RvbUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uID0gTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuZXhwb3J0cy5MZXhlck1vcmVBY3Rpb24gPSBMZXhlck1vcmVBY3Rpb247XG5leHBvcnRzLkxleGVyVHlwZUFjdGlvbiA9IExleGVyVHlwZUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJQdXNoTW9kZUFjdGlvbiA9IExleGVyUHVzaE1vZGVBY3Rpb247XG5leHBvcnRzLkxleGVyUG9wTW9kZUFjdGlvbiA9IExleGVyUG9wTW9kZUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJNb2RlQWN0aW9uID0gTGV4ZXJNb2RlQWN0aW9uOyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gUmVwcmVzZW50cyBhbiBleGVjdXRvciBmb3IgYSBzZXF1ZW5jZSBvZiBsZXhlciBhY3Rpb25zIHdoaWNoIHRyYXZlcnNlZCBkdXJpbmdcbi8vIHRoZSBtYXRjaGluZyBvcGVyYXRpb24gb2YgYSBsZXhlciBydWxlICh0b2tlbikuXG4vL1xuLy8gPHA+VGhlIGV4ZWN1dG9yIHRyYWNrcyBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3IgcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnNcbi8vIGVmZmljaWVudGx5LCBlbnN1cmluZyB0aGF0IGFjdGlvbnMgYXBwZWFyaW5nIG9ubHkgYXQgdGhlIGVuZCBvZiB0aGUgcnVsZSBkb1xuLy8gbm90IGNhdXNlIGJsb2F0aW5nIG9mIHRoZSB7QGxpbmsgREZBfSBjcmVhdGVkIGZvciB0aGUgbGV4ZXIuPC9wPlxuXG52YXIgaGFzaFN0dWZmID0gcmVxdWlyZShcIi4uL1V0aWxzXCIpLmhhc2hTdHVmZjtcbnZhciBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24gPSByZXF1aXJlKCcuL0xleGVyQWN0aW9uJykuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuXG5mdW5jdGlvbiBMZXhlckFjdGlvbkV4ZWN1dG9yKGxleGVyQWN0aW9ucykge1xuXHR0aGlzLmxleGVyQWN0aW9ucyA9IGxleGVyQWN0aW9ucyA9PT0gbnVsbCA/IFtdIDogbGV4ZXJBY3Rpb25zO1xuXHQvLyBDYWNoZXMgdGhlIHJlc3VsdCBvZiB7QGxpbmsgLy9oYXNoQ29kZX0gc2luY2UgdGhlIGhhc2ggY29kZSBpcyBhbiBlbGVtZW50XG5cdC8vIG9mIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCB7QGxpbmsgTGV4ZXJBVE5Db25maWcvL2hhc2hDb2RlfSBvcGVyYXRpb24uXG5cdHRoaXMuY2FjaGVkSGFzaENvZGUgPSBoYXNoU3R1ZmYobGV4ZXJBY3Rpb25zKTsgLy8gXCJcIi5qb2luKFtzdHIobGEpIGZvciBsYSBpblxuXHQvLyBsZXhlckFjdGlvbnNdKSlcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8vIENyZWF0ZXMgYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gd2hpY2ggZXhlY3V0ZXMgdGhlIGFjdGlvbnMgZm9yXG4vLyB0aGUgaW5wdXQge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9IGZvbGxvd2VkIGJ5IGEgc3BlY2lmaWVkXG4vLyB7QGNvZGUgbGV4ZXJBY3Rpb259LlxuLy9cbi8vIEBwYXJhbSBsZXhlckFjdGlvbkV4ZWN1dG9yIFRoZSBleGVjdXRvciBmb3IgYWN0aW9ucyBhbHJlYWR5IHRyYXZlcnNlZCBieVxuLy8gdGhlIGxleGVyIHdoaWxlIG1hdGNoaW5nIGEgdG9rZW4gd2l0aGluIGEgcGFydGljdWxhclxuLy8ge0BsaW5rIExleGVyQVROQ29uZmlnfS4gSWYgdGhpcyBpcyB7QGNvZGUgbnVsbH0sIHRoZSBtZXRob2QgYmVoYXZlcyBhc1xuLy8gdGhvdWdoIGl0IHdlcmUgYW4gZW1wdHkgZXhlY3V0b3IuXG4vLyBAcGFyYW0gbGV4ZXJBY3Rpb24gVGhlIGxleGVyIGFjdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBhY3Rpb25zXG4vLyBzcGVjaWZpZWQgaW4ge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9LlxuLy9cbi8vIEByZXR1cm4gQSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gZm9yIGV4ZWN1dGluZyB0aGUgY29tYmluZSBhY3Rpb25zXG4vLyBvZiB7QGNvZGUgbGV4ZXJBY3Rpb25FeGVjdXRvcn0gYW5kIHtAY29kZSBsZXhlckFjdGlvbn0uXG5MZXhlckFjdGlvbkV4ZWN1dG9yLmFwcGVuZCA9IGZ1bmN0aW9uKGxleGVyQWN0aW9uRXhlY3V0b3IsIGxleGVyQWN0aW9uKSB7XG5cdGlmIChsZXhlckFjdGlvbkV4ZWN1dG9yID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKFsgbGV4ZXJBY3Rpb24gXSk7XG5cdH1cblx0dmFyIGxleGVyQWN0aW9ucyA9IGxleGVyQWN0aW9uRXhlY3V0b3IubGV4ZXJBY3Rpb25zLmNvbmNhdChbIGxleGVyQWN0aW9uIF0pO1xuXHRyZXR1cm4gbmV3IExleGVyQWN0aW9uRXhlY3V0b3IobGV4ZXJBY3Rpb25zKTtcbn07XG5cbi8vIENyZWF0ZXMgYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gd2hpY2ggZW5jb2RlcyB0aGUgY3VycmVudCBvZmZzZXRcbi8vIGZvciBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXIgYWN0aW9ucy5cbi8vXG4vLyA8cD5Ob3JtYWxseSwgd2hlbiB0aGUgZXhlY3V0b3IgZW5jb3VudGVycyBsZXhlciBhY3Rpb25zIHdoZXJlXG4vLyB7QGxpbmsgTGV4ZXJBY3Rpb24vL2lzUG9zaXRpb25EZXBlbmRlbnR9IHJldHVybnMge0Bjb2RlIHRydWV9LCBpdCBjYWxsc1xuLy8ge0BsaW5rIEludFN0cmVhbS8vc2Vla30gb24gdGhlIGlucHV0IHtAbGluayBDaGFyU3RyZWFtfSB0byBzZXQgdGhlIGlucHV0XG4vLyBwb3NpdGlvbiB0byB0aGUgPGVtPmVuZDwvZW0+IG9mIHRoZSBjdXJyZW50IHRva2VuLiBUaGlzIGJlaGF2aW9yIHByb3ZpZGVzXG4vLyBmb3IgZWZmaWNpZW50IERGQSByZXByZXNlbnRhdGlvbiBvZiBsZXhlciBhY3Rpb25zIHdoaWNoIGFwcGVhciBhdCB0aGUgZW5kXG4vLyBvZiBhIGxleGVyIHJ1bGUsIGV2ZW4gd2hlbiB0aGUgbGV4ZXIgcnVsZSBtYXRjaGVzIGEgdmFyaWFibGUgbnVtYmVyIG9mXG4vLyBjaGFyYWN0ZXJzLjwvcD5cbi8vXG4vLyA8cD5QcmlvciB0byB0cmF2ZXJzaW5nIGEgbWF0Y2ggdHJhbnNpdGlvbiBpbiB0aGUgQVROLCB0aGUgY3VycmVudCBvZmZzZXRcbi8vIGZyb20gdGhlIHRva2VuIHN0YXJ0IGluZGV4IGlzIGFzc2lnbmVkIHRvIGFsbCBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXJcbi8vIGFjdGlvbnMgd2hpY2ggaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGFzc2lnbmVkIGEgZml4ZWQgb2Zmc2V0LiBCeSBzdG9yaW5nXG4vLyB0aGUgb2Zmc2V0cyByZWxhdGl2ZSB0byB0aGUgdG9rZW4gc3RhcnQgaW5kZXgsIHRoZSBERkEgcmVwcmVzZW50YXRpb24gb2Zcbi8vIGxleGVyIGFjdGlvbnMgd2hpY2ggYXBwZWFyIGluIHRoZSBtaWRkbGUgb2YgdG9rZW5zIHJlbWFpbnMgZWZmaWNpZW50IGR1ZVxuLy8gdG8gc2hhcmluZyBhbW9uZyB0b2tlbnMgb2YgdGhlIHNhbWUgbGVuZ3RoLCByZWdhcmRsZXNzIG9mIHRoZWlyIGFic29sdXRlXG4vLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyZWFtLjwvcD5cbi8vXG4vLyA8cD5JZiB0aGUgY3VycmVudCBleGVjdXRvciBhbHJlYWR5IGhhcyBvZmZzZXRzIGFzc2lnbmVkIHRvIGFsbFxuLy8gcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMsIHRoZSBtZXRob2QgcmV0dXJucyB7QGNvZGUgdGhpc30uPC9wPlxuLy9cbi8vIEBwYXJhbSBvZmZzZXQgVGhlIGN1cnJlbnQgb2Zmc2V0IHRvIGFzc2lnbiB0byBhbGwgcG9zaXRpb24tZGVwZW5kZW50XG4vLyBsZXhlciBhY3Rpb25zIHdoaWNoIGRvIG5vdCBhbHJlYWR5IGhhdmUgb2Zmc2V0cyBhc3NpZ25lZC5cbi8vXG4vLyBAcmV0dXJuIEEge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3J9IHdoaWNoIHN0b3JlcyBpbnB1dCBzdHJlYW0gb2Zmc2V0c1xuLy8gZm9yIGFsbCBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXIgYWN0aW9ucy5cbi8vIC9cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmZpeE9mZnNldEJlZm9yZU1hdGNoID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdHZhciB1cGRhdGVkTGV4ZXJBY3Rpb25zID0gbnVsbDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxleGVyQWN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICh0aGlzLmxleGVyQWN0aW9uc1tpXS5pc1Bvc2l0aW9uRGVwZW5kZW50ICYmXG5cdFx0XHRcdCEodGhpcy5sZXhlckFjdGlvbnNbaV0gaW5zdGFuY2VvZiBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24pKSB7XG5cdFx0XHRpZiAodXBkYXRlZExleGVyQWN0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHR1cGRhdGVkTGV4ZXJBY3Rpb25zID0gdGhpcy5sZXhlckFjdGlvbnMuY29uY2F0KFtdKTtcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRMZXhlckFjdGlvbnNbaV0gPSBuZXcgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKG9mZnNldCxcblx0XHRcdFx0XHR0aGlzLmxleGVyQWN0aW9uc1tpXSk7XG5cdFx0fVxuXHR9XG5cdGlmICh1cGRhdGVkTGV4ZXJBY3Rpb25zID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKHVwZGF0ZWRMZXhlckFjdGlvbnMpO1xuXHR9XG59O1xuXG4vLyBFeGVjdXRlIHRoZSBhY3Rpb25zIGVuY2Fwc3VsYXRlZCBieSB0aGlzIGV4ZWN1dG9yIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhXG4vLyBwYXJ0aWN1bGFyIHtAbGluayBMZXhlcn0uXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgY2FsbHMge0BsaW5rIEludFN0cmVhbS8vc2Vla30gdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGVcbi8vIHtAY29kZSBpbnB1dH0ge0BsaW5rIENoYXJTdHJlYW19IHByaW9yIHRvIGNhbGxpbmdcbi8vIHtAbGluayBMZXhlckFjdGlvbi8vZXhlY3V0ZX0gb24gYSBwb3NpdGlvbi1kZXBlbmRlbnQgYWN0aW9uLiBCZWZvcmUgdGhlXG4vLyBtZXRob2QgcmV0dXJucywgdGhlIGlucHV0IHBvc2l0aW9uIHdpbGwgYmUgcmVzdG9yZWQgdG8gdGhlIHNhbWUgcG9zaXRpb25cbi8vIGl0IHdhcyBpbiB3aGVuIHRoZSBtZXRob2Qgd2FzIGludm9rZWQuPC9wPlxuLy9cbi8vIEBwYXJhbSBsZXhlciBUaGUgbGV4ZXIgaW5zdGFuY2UuXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbSB3aGljaCBpcyB0aGUgc291cmNlIGZvciB0aGUgY3VycmVudCB0b2tlbi5cbi8vIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgY3VycmVudCB7QGxpbmsgSW50U3RyZWFtLy9pbmRleH0gZm9yXG4vLyB7QGNvZGUgaW5wdXR9IHNob3VsZCBiZSB0aGUgc3RhcnQgb2YgdGhlIGZvbGxvd2luZyB0b2tlbiwgaS5lLiAxXG4vLyBjaGFyYWN0ZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRva2VuLlxuLy8gQHBhcmFtIHN0YXJ0SW5kZXggVGhlIHRva2VuIHN0YXJ0IGluZGV4LiBUaGlzIHZhbHVlIG1heSBiZSBwYXNzZWQgdG9cbi8vIHtAbGluayBJbnRTdHJlYW0vL3NlZWt9IHRvIHNldCB0aGUge0Bjb2RlIGlucHV0fSBwb3NpdGlvbiB0byB0aGUgYmVnaW5uaW5nXG4vLyBvZiB0aGUgdG9rZW4uXG4vLyAvXG5MZXhlckFjdGlvbkV4ZWN1dG9yLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIsIGlucHV0LCBzdGFydEluZGV4KSB7XG5cdHZhciByZXF1aXJlc1NlZWsgPSBmYWxzZTtcblx0dmFyIHN0b3BJbmRleCA9IGlucHV0LmluZGV4O1xuXHR0cnkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBsZXhlckFjdGlvbiA9IHRoaXMubGV4ZXJBY3Rpb25zW2ldO1xuXHRcdFx0aWYgKGxleGVyQWN0aW9uIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSB7XG5cdFx0XHRcdHZhciBvZmZzZXQgPSBsZXhlckFjdGlvbi5vZmZzZXQ7XG5cdFx0XHRcdGlucHV0LnNlZWsoc3RhcnRJbmRleCArIG9mZnNldCk7XG5cdFx0XHRcdGxleGVyQWN0aW9uID0gbGV4ZXJBY3Rpb24uYWN0aW9uO1xuXHRcdFx0XHRyZXF1aXJlc1NlZWsgPSAoc3RhcnRJbmRleCArIG9mZnNldCkgIT09IHN0b3BJbmRleDtcblx0XHRcdH0gZWxzZSBpZiAobGV4ZXJBY3Rpb24uaXNQb3NpdGlvbkRlcGVuZGVudCkge1xuXHRcdFx0XHRpbnB1dC5zZWVrKHN0b3BJbmRleCk7XG5cdFx0XHRcdHJlcXVpcmVzU2VlayA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0bGV4ZXJBY3Rpb24uZXhlY3V0ZShsZXhlcik7XG5cdFx0fVxuXHR9IGZpbmFsbHkge1xuXHRcdGlmIChyZXF1aXJlc1NlZWspIHtcblx0XHRcdGlucHV0LnNlZWsoc3RvcEluZGV4KTtcblx0XHR9XG5cdH1cbn07XG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNhY2hlZEhhc2hDb2RlO1xufTtcblxuTGV4ZXJBY3Rpb25FeGVjdXRvci5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5jYWNoZWRIYXNoQ29kZSk7XG59O1xuXG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBMZXhlckFjdGlvbkV4ZWN1dG9yKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmICh0aGlzLmNhY2hlZEhhc2hDb2RlICE9IG90aGVyLmNhY2hlZEhhc2hDb2RlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMubGV4ZXJBY3Rpb25zLmxlbmd0aCAhPSBvdGhlci5sZXhlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBudW1BY3Rpb25zID0gdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoXG5cdFx0Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbnVtQWN0aW9uczsgKytpZHgpIHtcblx0XHRcdGlmICghdGhpcy5sZXhlckFjdGlvbnNbaWR4XS5lcXVhbHMob3RoZXIubGV4ZXJBY3Rpb25zW2lkeF0pKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbmV4cG9ydHMuTGV4ZXJBY3Rpb25FeGVjdXRvciA9IExleGVyQWN0aW9uRXhlY3V0b3I7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vIFRoZSBlbWJvZGltZW50IG9mIHRoZSBhZGFwdGl2ZSBMTCgqKSwgQUxMKCopLCBwYXJzaW5nIHN0cmF0ZWd5LlxuLy9cbi8vIDxwPlxuLy8gVGhlIGJhc2ljIGNvbXBsZXhpdHkgb2YgdGhlIGFkYXB0aXZlIHN0cmF0ZWd5IG1ha2VzIGl0IGhhcmRlciB0byB1bmRlcnN0YW5kLlxuLy8gV2UgYmVnaW4gd2l0aCBBVE4gc2ltdWxhdGlvbiB0byBidWlsZCBwYXRocyBpbiBhIERGQS4gU3Vic2VxdWVudCBwcmVkaWN0aW9uXG4vLyByZXF1ZXN0cyBnbyB0aHJvdWdoIHRoZSBERkEgZmlyc3QuIElmIHRoZXkgcmVhY2ggYSBzdGF0ZSB3aXRob3V0IGFuIGVkZ2UgZm9yXG4vLyB0aGUgY3VycmVudCBzeW1ib2wsIHRoZSBhbGdvcml0aG0gZmFpbHMgb3ZlciB0byB0aGUgQVROIHNpbXVsYXRpb24gdG9cbi8vIGNvbXBsZXRlIHRoZSBERkEgcGF0aCBmb3IgdGhlIGN1cnJlbnQgaW5wdXQgKHVudGlsIGl0IGZpbmRzIGEgY29uZmxpY3Qgc3RhdGVcbi8vIG9yIHVuaXF1ZWx5IHByZWRpY3Rpbmcgc3RhdGUpLjwvcD5cbi8vXG4vLyA8cD5cbi8vIEFsbCBvZiB0aGF0IGlzIGRvbmUgd2l0aG91dCB1c2luZyB0aGUgb3V0ZXIgY29udGV4dCBiZWNhdXNlIHdlIHdhbnQgdG8gY3JlYXRlXG4vLyBhIERGQSB0aGF0IGlzIG5vdCBkZXBlbmRlbnQgdXBvbiB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrIHdoZW4gd2UgZG8gYVxuLy8gcHJlZGljdGlvbi4gT25lIERGQSB3b3JrcyBpbiBhbGwgY29udGV4dHMuIFdlIGF2b2lkIHVzaW5nIGNvbnRleHQgbm90XG4vLyBuZWNlc3NhcmlseSBiZWNhdXNlIGl0J3Mgc2xvd2VyLCBhbHRob3VnaCBpdCBjYW4gYmUsIGJ1dCBiZWNhdXNlIG9mIHRoZSBERkFcbi8vIGNhY2hpbmcgcHJvYmxlbS4gVGhlIGNsb3N1cmUgcm91dGluZSBvbmx5IGNvbnNpZGVycyB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrXG4vLyBjcmVhdGVkIGR1cmluZyBwcmVkaWN0aW9uIGJlZ2lubmluZyBpbiB0aGUgZGVjaXNpb24gcnVsZS4gRm9yIGV4YW1wbGUsIGlmXG4vLyBwcmVkaWN0aW9uIG9jY3VycyB3aXRob3V0IGludm9raW5nIGFub3RoZXIgcnVsZSdzIEFUTiwgdGhlcmUgYXJlIG5vIGNvbnRleHRcbi8vIHN0YWNrcyBpbiB0aGUgY29uZmlndXJhdGlvbnMuIFdoZW4gbGFjayBvZiBjb250ZXh0IGxlYWRzIHRvIGEgY29uZmxpY3QsIHdlXG4vLyBkb24ndCBrbm93IGlmIGl0J3MgYW4gYW1iaWd1aXR5IG9yIGEgd2Vha25lc3MgaW4gdGhlIHN0cm9uZyBMTCgqKSBwYXJzaW5nXG4vLyBzdHJhdGVneSAodmVyc3VzIGZ1bGwgTEwoKikpLjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdoZW4gU0xMIHlpZWxkcyBhIGNvbmZpZ3VyYXRpb24gc2V0IHdpdGggY29uZmxpY3QsIHdlIHJld2luZCB0aGUgaW5wdXQgYW5kXG4vLyByZXRyeSB0aGUgQVROIHNpbXVsYXRpb24sIHRoaXMgdGltZSB1c2luZyBmdWxsIG91dGVyIGNvbnRleHQgd2l0aG91dCBhZGRpbmdcbi8vIHRvIHRoZSBERkEuIENvbmZpZ3VyYXRpb24gY29udGV4dCBzdGFja3Mgd2lsbCBiZSB0aGUgZnVsbCBpbnZvY2F0aW9uIHN0YWNrc1xuLy8gZnJvbSB0aGUgc3RhcnQgcnVsZS4gSWYgd2UgZ2V0IGEgY29uZmxpY3QgdXNpbmcgZnVsbCBjb250ZXh0LCB0aGVuIHdlIGNhblxuLy8gZGVmaW5pdGl2ZWx5IHNheSB3ZSBoYXZlIGEgdHJ1ZSBhbWJpZ3VpdHkgZm9yIHRoYXQgaW5wdXQgc2VxdWVuY2UuIElmIHdlXG4vLyBkb24ndCBnZXQgYSBjb25mbGljdCwgaXQgaW1wbGllcyB0aGF0IHRoZSBkZWNpc2lvbiBpcyBzZW5zaXRpdmUgdG8gdGhlIG91dGVyXG4vLyBjb250ZXh0LiAoSXQgaXMgbm90IGNvbnRleHQtc2Vuc2l0aXZlIGluIHRoZSBzZW5zZSBvZiBjb250ZXh0LXNlbnNpdGl2ZVxuLy8gZ3JhbW1hcnMuKTwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZSBuZXh0IHRpbWUgd2UgcmVhY2ggdGhpcyBERkEgc3RhdGUgd2l0aCBhbiBTTEwgY29uZmxpY3QsIHRocm91Z2ggREZBXG4vLyBzaW11bGF0aW9uLCB3ZSB3aWxsIGFnYWluIHJldHJ5IHRoZSBBVE4gc2ltdWxhdGlvbiB1c2luZyBmdWxsIGNvbnRleHQgbW9kZS5cbi8vIFRoaXMgaXMgc2xvdyBiZWNhdXNlIHdlIGNhbid0IHNhdmUgdGhlIHJlc3VsdHMgYW5kIGhhdmUgdG8gXCJpbnRlcnByZXRcIiB0aGVcbi8vIEFUTiBlYWNoIHRpbWUgd2UgZ2V0IHRoYXQgaW5wdXQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5DQUNISU5HIEZVTEwgQ09OVEVYVCBQUkVESUNUSU9OUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdlIGNvdWxkIGNhY2hlIHJlc3VsdHMgZnJvbSBmdWxsIGNvbnRleHQgdG8gcHJlZGljdGVkIGFsdGVybmF0aXZlIGVhc2lseSBhbmRcbi8vIHRoYXQgc2F2ZXMgYSBsb3Qgb2YgdGltZSBidXQgZG9lc24ndCB3b3JrIGluIHByZXNlbmNlIG9mIHByZWRpY2F0ZXMuIFRoZSBzZXRcbi8vIG9mIHZpc2libGUgcHJlZGljYXRlcyBmcm9tIHRoZSBBVE4gc3RhcnQgc3RhdGUgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlXG4vLyBjb250ZXh0LCBiZWNhdXNlIGNsb3N1cmUgY2FuIGZhbGwgb2ZmIHRoZSBlbmQgb2YgYSBydWxlLiBJIHRyaWVkIHRvIGNhY2hlXG4vLyB0dXBsZXMgKHN0YWNrIGNvbnRleHQsIHNlbWFudGljIGNvbnRleHQsIHByZWRpY3RlZCBhbHQpIGJ1dCBpdCB3YXMgc2xvd2VyXG4vLyB0aGFuIGludGVycHJldGluZyBhbmQgbXVjaCBtb3JlIGNvbXBsaWNhdGVkLiBBbHNvIHJlcXVpcmVkIGEgaHVnZSBhbW91bnQgb2Zcbi8vIG1lbW9yeS4gVGhlIGdvYWwgaXMgbm90IHRvIGNyZWF0ZSB0aGUgd29ybGQncyBmYXN0ZXN0IHBhcnNlciBhbnl3YXkuIEknZCBsaWtlXG4vLyB0byBrZWVwIHRoaXMgYWxnb3JpdGhtIHNpbXBsZS4gQnkgbGF1bmNoaW5nIG11bHRpcGxlIHRocmVhZHMsIHdlIGNhbiBpbXByb3ZlXG4vLyB0aGUgc3BlZWQgb2YgcGFyc2luZyBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2YgZmlsZXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhlcmUgaXMgbm8gc3RyaWN0IG9yZGVyaW5nIGJldHdlZW4gdGhlIGFtb3VudCBvZiBpbnB1dCB1c2VkIGJ5IFNMTCB2cyBMTCxcbi8vIHdoaWNoIG1ha2VzIGl0IHJlYWxseSBoYXJkIHRvIGJ1aWxkIGEgY2FjaGUgZm9yIGZ1bGwgY29udGV4dC4gTGV0J3Mgc2F5IHRoYXRcbi8vIHdlIGhhdmUgaW5wdXQgQSBCIEMgdGhhdCBsZWFkcyB0byBhbiBTTEwgY29uZmxpY3Qgd2l0aCBmdWxsIGNvbnRleHQgWC4gVGhhdFxuLy8gaW1wbGllcyB0aGF0IHVzaW5nIFggd2UgbWlnaHQgb25seSB1c2UgQSBCIGJ1dCB3ZSBjb3VsZCBhbHNvIHVzZSBBIEIgQyBEIHRvXG4vLyByZXNvbHZlIGNvbmZsaWN0LiBJbnB1dCBBIEIgQyBEIGNvdWxkIHByZWRpY3QgYWx0ZXJuYXRpdmUgMSBpbiBvbmUgcG9zaXRpb25cbi8vIGluIHRoZSBpbnB1dCBhbmQgQSBCIEMgRSBjb3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDIgaW4gYW5vdGhlciBwb3NpdGlvbiBpblxuLy8gaW5wdXQuIFRoZSBjb25mbGljdGluZyBTTEwgY29uZmlndXJhdGlvbnMgY291bGQgc3RpbGwgYmUgbm9uLXVuaXF1ZSBpbiB0aGVcbi8vIGZ1bGwgY29udGV4dCBwcmVkaWN0aW9uLCB3aGljaCB3b3VsZCBsZWFkIHVzIHRvIHJlcXVpcmluZyBtb3JlIGlucHV0IHRoYW4gdGhlXG4vLyBvcmlnaW5hbCBBIEIgQy5cdFRvIG1ha2UgYVx0cHJlZGljdGlvbiBjYWNoZSB3b3JrLCB3ZSBoYXZlIHRvIHRyYWNrXHR0aGUgZXhhY3Rcbi8vIGlucHV0XHR1c2VkIGR1cmluZyB0aGUgcHJldmlvdXMgcHJlZGljdGlvbi4gVGhhdCBhbW91bnRzIHRvIGEgY2FjaGUgdGhhdCBtYXBzXG4vLyBYIHRvIGEgc3BlY2lmaWMgREZBIGZvciB0aGF0IGNvbnRleHQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gU29tZXRoaW5nIHNob3VsZCBiZSBkb25lIGZvciBsZWZ0LXJlY3Vyc2l2ZSBleHByZXNzaW9uIHByZWRpY3Rpb25zLiBUaGV5IGFyZVxuLy8gbGlrZWx5IExMKDEpICsgcHJlZCBldmFsLiBFYXNpZXIgdG8gZG8gdGhlIHdob2xlIFNMTCB1bmxlc3MgZXJyb3IgYW5kIHJldHJ5XG4vLyB3aXRoIGZ1bGwgTEwgdGhpbmcgU2FtIGRvZXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5BVk9JRElORyBGVUxMIENPTlRFWFQgUFJFRElDVElPTjwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdlIGF2b2lkIGRvaW5nIGZ1bGwgY29udGV4dCByZXRyeSB3aGVuIHRoZSBvdXRlciBjb250ZXh0IGlzIGVtcHR5LCB3ZSBkaWQgbm90XG4vLyBkaXAgaW50byB0aGUgb3V0ZXIgY29udGV4dCBieSBmYWxsaW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBzdGF0ZSBydWxlLFxuLy8gb3Igd2hlbiB3ZSBmb3JjZSBTTEwgbW9kZS48L3A+XG4vL1xuLy8gPHA+XG4vLyBBcyBhbiBleGFtcGxlIG9mIHRoZSBub3QgZGlwIGludG8gb3V0ZXIgY29udGV4dCBjYXNlLCBjb25zaWRlciBhcyBzdXBlclxuLy8gY29uc3RydWN0b3IgY2FsbHMgdmVyc3VzIGZ1bmN0aW9uIGNhbGxzLiBPbmUgZ3JhbW1hciBtaWdodCBsb29rIGxpa2Vcbi8vIHRoaXM6PC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBjdG9yQm9keVxuLy8gICA6ICd7JyBzdXBlckNhbGw/IHN0YXQqICd9J1xuLy8gICA7XG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5cbi8vIE9yLCB5b3UgbWlnaHQgc2VlIHNvbWV0aGluZyBsaWtlPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBzdGF0XG4vLyAgIDogc3VwZXJDYWxsICc7J1xuLy8gICB8IGV4cHJlc3Npb24gJzsnXG4vLyAgIHwgLi4uXG4vLyAgIDtcbi8vIDwvcHJlPlxuLy9cbi8vIDxwPlxuLy8gSW4gYm90aCBjYXNlcyBJIGJlbGlldmUgdGhhdCBubyBjbG9zdXJlIG9wZXJhdGlvbnMgd2lsbCBkaXAgaW50byB0aGUgb3V0ZXJcbi8vIGNvbnRleHQuIEluIHRoZSBmaXJzdCBjYXNlIGN0b3JCb2R5IGluIHRoZSB3b3JzdCBjYXNlIHdpbGwgc3RvcCBhdCB0aGUgJ30nLlxuLy8gSW4gdGhlIDJuZCBjYXNlIGl0IHNob3VsZCBzdG9wIGF0IHRoZSAnOycuIEJvdGggY2FzZXMgc2hvdWxkIHN0YXkgd2l0aGluIHRoZVxuLy8gZW50cnkgcnVsZSBhbmQgbm90IGRpcCBpbnRvIHRoZSBvdXRlciBjb250ZXh0LjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+UFJFRElDQVRFUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFByZWRpY2F0ZXMgYXJlIGFsd2F5cyBldmFsdWF0ZWQgaWYgcHJlc2VudCBpbiBlaXRoZXIgU0xMIG9yIExMIGJvdGguIFNMTCBhbmRcbi8vIExMIHNpbXVsYXRpb24gZGVhbHMgd2l0aCBwcmVkaWNhdGVzIGRpZmZlcmVudGx5LiBTTEwgY29sbGVjdHMgcHJlZGljYXRlcyBhc1xuLy8gaXQgcGVyZm9ybXMgY2xvc3VyZSBvcGVyYXRpb25zIGxpa2UgQU5UTFIgdjMgZGlkLiBJdCBkZWxheXMgcHJlZGljYXRlXG4vLyBldmFsdWF0aW9uIHVudGlsIGl0IHJlYWNoZXMgYW5kIGFjY2VwdCBzdGF0ZS4gVGhpcyBhbGxvd3MgdXMgdG8gY2FjaGUgdGhlIFNMTFxuLy8gQVROIHNpbXVsYXRpb24gd2hlcmVhcywgaWYgd2UgaGFkIGV2YWx1YXRlZCBwcmVkaWNhdGVzIG9uLXRoZS1mbHkgZHVyaW5nXG4vLyBjbG9zdXJlLCB0aGUgREZBIHN0YXRlIGNvbmZpZ3VyYXRpb24gc2V0cyB3b3VsZCBiZSBkaWZmZXJlbnQgYW5kIHdlIGNvdWxkbid0XG4vLyBidWlsZCB1cCBhIHN1aXRhYmxlIERGQS48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIGJ1aWxkaW5nIGEgREZBIGFjY2VwdCBzdGF0ZSBkdXJpbmcgQVROIHNpbXVsYXRpb24sIHdlIGV2YWx1YXRlIGFueVxuLy8gcHJlZGljYXRlcyBhbmQgcmV0dXJuIHRoZSBzb2xlIHNlbWFudGljYWxseSB2YWxpZCBhbHRlcm5hdGl2ZS4gSWYgdGhlcmUgaXNcbi8vIG1vcmUgdGhhbiAxIGFsdGVybmF0aXZlLCB3ZSByZXBvcnQgYW4gYW1iaWd1aXR5LiBJZiB0aGVyZSBhcmUgMCBhbHRlcm5hdGl2ZXMsXG4vLyB3ZSB0aHJvdyBhbiBleGNlcHRpb24uIEFsdGVybmF0aXZlcyB3aXRob3V0IHByZWRpY2F0ZXMgYWN0IGxpa2UgdGhleSBoYXZlXG4vLyB0cnVlIHByZWRpY2F0ZXMuIFRoZSBzaW1wbGUgd2F5IHRvIHRoaW5rIGFib3V0IGl0IGlzIHRvIHN0cmlwIGF3YXkgYWxsXG4vLyBhbHRlcm5hdGl2ZXMgd2l0aCBmYWxzZSBwcmVkaWNhdGVzIGFuZCBjaG9vc2UgdGhlIG1pbmltdW0gYWx0ZXJuYXRpdmUgdGhhdFxuLy8gcmVtYWlucy48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIHdlIHN0YXJ0IGluIHRoZSBERkEgYW5kIHJlYWNoIGFuIGFjY2VwdCBzdGF0ZSB0aGF0J3MgcHJlZGljYXRlZCwgd2UgdGVzdFxuLy8gdGhvc2UgYW5kIHJldHVybiB0aGUgbWluaW11bSBzZW1hbnRpY2FsbHkgdmlhYmxlIGFsdGVybmF0aXZlLiBJZiBub1xuLy8gYWx0ZXJuYXRpdmVzIGFyZSB2aWFibGUsIHdlIHRocm93IGFuIGV4Y2VwdGlvbi48L3A+XG4vL1xuLy8gPHA+XG4vLyBEdXJpbmcgZnVsbCBMTCBBVE4gc2ltdWxhdGlvbiwgY2xvc3VyZSBhbHdheXMgZXZhbHVhdGVzIHByZWRpY2F0ZXMgYW5kXG4vLyBvbi10aGUtZmx5LiBUaGlzIGlzIGNydWNpYWwgdG8gcmVkdWNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHNpemUgZHVyaW5nXG4vLyBjbG9zdXJlLiBJdCBoaXRzIGEgbGFuZG1pbmUgd2hlbiBwYXJzaW5nIHdpdGggdGhlIEphdmEgZ3JhbW1hciwgZm9yIGV4YW1wbGUsXG4vLyB3aXRob3V0IHRoaXMgb24tdGhlLWZseSBldmFsdWF0aW9uLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+U0hBUklORyBERkE8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+XG4vLyBBbGwgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHBhcnNlciBzaGFyZSB0aGUgc2FtZSBkZWNpc2lvbiBERkFzIHRocm91Z2ggYVxuLy8gc3RhdGljIGZpZWxkLiBFYWNoIGluc3RhbmNlIGdldHMgaXRzIG93biBBVE4gc2ltdWxhdG9yIGJ1dCB0aGV5IHNoYXJlIHRoZVxuLy8gc2FtZSB7QGxpbmsgLy9kZWNpc2lvblRvREZBfSBmaWVsZC4gVGhleSBhbHNvIHNoYXJlIGFcbi8vIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dENhY2hlfSBvYmplY3QgdGhhdCBtYWtlcyBzdXJlIHRoYXQgYWxsXG4vLyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9IG9iamVjdHMgYXJlIHNoYXJlZCBhbW9uZyB0aGUgREZBIHN0YXRlcy4gVGhpcyBtYWtlc1xuLy8gYSBiaWcgc2l6ZSBkaWZmZXJlbmNlLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+VEhSRUFEIFNBRkVUWTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZSB7QGxpbmsgUGFyc2VyQVROU2ltdWxhdG9yfSBsb2NrcyBvbiB0aGUge0BsaW5rIC8vZGVjaXNpb25Ub0RGQX0gZmllbGQgd2hlblxuLy8gaXQgYWRkcyBhIG5ldyBERkEgb2JqZWN0IHRvIHRoYXQgYXJyYXkuIHtAbGluayAvL2FkZERGQUVkZ2V9XG4vLyBsb2NrcyBvbiB0aGUgREZBIGZvciB0aGUgY3VycmVudCBkZWNpc2lvbiB3aGVuIHNldHRpbmcgdGhlXG4vLyB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBmaWVsZC4ge0BsaW5rIC8vYWRkREZBU3RhdGV9IGxvY2tzIG9uXG4vLyB0aGUgREZBIGZvciB0aGUgY3VycmVudCBkZWNpc2lvbiB3aGVuIGxvb2tpbmcgdXAgYSBERkEgc3RhdGUgdG8gc2VlIGlmIGl0XG4vLyBhbHJlYWR5IGV4aXN0cy4gV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBhbGwgcmVxdWVzdHMgdG8gYWRkIERGQSBzdGF0ZXMgdGhhdFxuLy8gYXJlIGVxdWl2YWxlbnQgcmVzdWx0IGluIHRoZSBzYW1lIHNoYXJlZCBERkEgb2JqZWN0LiBUaGlzIGlzIGJlY2F1c2UgbG90cyBvZlxuLy8gdGhyZWFkcyB3aWxsIGJlIHRyeWluZyB0byB1cGRhdGUgdGhlIERGQSBhdCBvbmNlLiBUaGVcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSBtZXRob2QgYWxzbyBsb2NrcyBpbnNpZGUgdGhlIERGQSBsb2NrXG4vLyBidXQgdGhpcyB0aW1lIG9uIHRoZSBzaGFyZWQgY29udGV4dCBjYWNoZSB3aGVuIGl0IHJlYnVpbGRzIHRoZVxuLy8gY29uZmlndXJhdGlvbnMnIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cyB1c2luZyBjYWNoZWRcbi8vIHN1YmdyYXBocy9ub2Rlcy4gTm8gb3RoZXIgbG9ja2luZyBvY2N1cnMsIGV2ZW4gZHVyaW5nIERGQSBzaW11bGF0aW9uLiBUaGlzIGlzXG4vLyBzYWZlIGFzIGxvbmcgYXMgd2UgY2FuIGd1YXJhbnRlZSB0aGF0IGFsbCB0aHJlYWRzIHJlZmVyZW5jaW5nXG4vLyB7QGNvZGUgcy5lZGdlW3RdfSBnZXQgdGhlIHNhbWUgcGh5c2ljYWwgdGFyZ2V0IHtAbGluayBERkFTdGF0ZX0sIG9yXG4vLyB7QGNvZGUgbnVsbH0uIE9uY2UgaW50byB0aGUgREZBLCB0aGUgREZBIHNpbXVsYXRpb24gZG9lcyBub3QgcmVmZXJlbmNlIHRoZVxuLy8ge0BsaW5rIERGQS8vc3RhdGVzfSBtYXAuIEl0IGZvbGxvd3MgdGhlIHtAbGluayBERkFTdGF0ZS8vZWRnZXN9IGZpZWxkIHRvIG5ld1xuLy8gdGFyZ2V0cy4gVGhlIERGQSBzaW11bGF0b3Igd2lsbCBlaXRoZXIgZmluZCB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSB0byBiZVxuLy8ge0Bjb2RlIG51bGx9LCB0byBiZSBub24te0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgZGZhLmVkZ2VzW3RdfSBudWxsLCBvclxuLy8ge0Bjb2RlIGRmYS5lZGdlc1t0XX0gdG8gYmUgbm9uLW51bGwuIFRoZVxuLy8ge0BsaW5rIC8vYWRkREZBRWRnZX0gbWV0aG9kIGNvdWxkIGJlIHJhY2luZyB0byBzZXQgdGhlIGZpZWxkXG4vLyBidXQgaW4gZWl0aGVyIGNhc2UgdGhlIERGQSBzaW11bGF0b3Igd29ya3M7IGlmIHtAY29kZSBudWxsfSwgYW5kIHJlcXVlc3RzIEFUTlxuLy8gc2ltdWxhdGlvbi4gSXQgY291bGQgYWxzbyByYWNlIHRyeWluZyB0byBnZXQge0Bjb2RlIGRmYS5lZGdlc1t0XX0sIGJ1dCBlaXRoZXJcbi8vIHdheSBpdCB3aWxsIHdvcmsgYmVjYXVzZSBpdCdzIG5vdCBkb2luZyBhIHRlc3QgYW5kIHNldCBvcGVyYXRpb24uPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5TdGFydGluZyB3aXRoIFNMTCB0aGVuIGZhaWxpbmcgdG8gY29tYmluZWQgU0xML0xMIChUd28tU3RhZ2Vcbi8vIFBhcnNpbmcpPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlxuLy8gU2FtIHBvaW50ZWQgb3V0IHRoYXQgaWYgU0xMIGRvZXMgbm90IGdpdmUgYSBzeW50YXggZXJyb3IsIHRoZW4gdGhlcmUgaXMgbm9cbi8vIHBvaW50IGluIGRvaW5nIGZ1bGwgTEwsIHdoaWNoIGlzIHNsb3dlci4gV2Ugb25seSBoYXZlIHRvIHRyeSBMTCBpZiB3ZSBnZXQgYVxuLy8gc3ludGF4IGVycm9yLiBGb3IgbWF4aW11bSBzcGVlZCwgU2FtIHN0YXJ0cyB0aGUgcGFyc2VyIHNldCB0byBwdXJlIFNMTFxuLy8gbW9kZSB3aXRoIHRoZSB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3l9OjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gcGFyc2VyLntAbGluayBQYXJzZXIvL2dldEludGVycHJldGVyKCkgZ2V0SW50ZXJwcmV0ZXIoKX0ue0BsaW5rIC8vc2V0UHJlZGljdGlvbk1vZGUgc2V0UHJlZGljdGlvbk1vZGV9e0Bjb2RlICh9e0BsaW5rIFByZWRpY3Rpb25Nb2RlLy9TTEx9e0Bjb2RlICl9O1xuLy8gcGFyc2VyLntAbGluayBQYXJzZXIvL3NldEVycm9ySGFuZGxlciBzZXRFcnJvckhhbmRsZXJ9KG5ldyB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3l9KCkpO1xuLy8gPC9wcmU+XG4vL1xuLy8gPHA+XG4vLyBJZiBpdCBkb2VzIG5vdCBnZXQgYSBzeW50YXggZXJyb3IsIHRoZW4gd2UncmUgZG9uZS4gSWYgaXQgZG9lcyBnZXQgYSBzeW50YXhcbi8vIGVycm9yLCB3ZSBuZWVkIHRvIHJldHJ5IHdpdGggdGhlIGNvbWJpbmVkIFNMTC9MTCBzdHJhdGVneS48L3A+XG4vL1xuLy8gPHA+XG4vLyBUaGUgcmVhc29uIHRoaXMgd29ya3MgaXMgYXMgZm9sbG93cy4gSWYgdGhlcmUgYXJlIG5vIFNMTCBjb25mbGljdHMsIHRoZW4gdGhlXG4vLyBncmFtbWFyIGlzIFNMTCAoYXQgbGVhc3QgZm9yIHRoYXQgaW5wdXQgc2V0KS4gSWYgdGhlcmUgaXMgYW4gU0xMIGNvbmZsaWN0LFxuLy8gdGhlIGZ1bGwgTEwgYW5hbHlzaXMgbXVzdCB5aWVsZCBhIHNldCBvZiB2aWFibGUgYWx0ZXJuYXRpdmVzIHdoaWNoIGlzIGFcbi8vIHN1YnNldCBvZiB0aGUgYWx0ZXJuYXRpdmVzIHJlcG9ydGVkIGJ5IFNMTC4gSWYgdGhlIExMIHNldCBpcyBhIHNpbmdsZXRvbixcbi8vIHRoZW4gdGhlIGdyYW1tYXIgaXMgTEwgYnV0IG5vdCBTTEwuIElmIHRoZSBMTCBzZXQgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgU0xMXG4vLyBzZXQsIHRoZSBkZWNpc2lvbiBpcyBTTEwuIElmIHRoZSBMTCBzZXQgaGFzIHNpemUgJmd0OyAxLCB0aGVuIHRoYXQgZGVjaXNpb25cbi8vIGlzIHRydWx5IGFtYmlndW91cyBvbiB0aGUgY3VycmVudCBpbnB1dC4gSWYgdGhlIExMIHNldCBpcyBzbWFsbGVyLCB0aGVuIHRoZVxuLy8gU0xMIGNvbmZsaWN0IHJlc29sdXRpb24gbWlnaHQgY2hvb3NlIGFuIGFsdGVybmF0aXZlIHRoYXQgdGhlIGZ1bGwgTEwgd291bGRcbi8vIHJ1bGUgb3V0IGFzIGEgcG9zc2liaWxpdHkgYmFzZWQgdXBvbiBiZXR0ZXIgY29udGV4dCBpbmZvcm1hdGlvbi4gSWYgdGhhdCdzXG4vLyB0aGUgY2FzZSwgdGhlbiB0aGUgU0xMIHBhcnNlIHdpbGwgZGVmaW5pdGVseSBnZXQgYW4gZXJyb3IgYmVjYXVzZSB0aGUgZnVsbCBMTFxuLy8gYW5hbHlzaXMgc2F5cyBpdCdzIG5vdCB2aWFibGUuIElmIFNMTCBjb25mbGljdCByZXNvbHV0aW9uIGNob29zZXMgYW5cbi8vIGFsdGVybmF0aXZlIHdpdGhpbiB0aGUgTEwgc2V0LCB0aGVtIGJvdGggU0xMIGFuZCBMTCB3b3VsZCBjaG9vc2UgdGhlIHNhbWVcbi8vIGFsdGVybmF0aXZlIGJlY2F1c2UgdGhleSBib3RoIGNob29zZSB0aGUgbWluaW11bSBvZiBtdWx0aXBsZSBjb25mbGljdGluZ1xuLy8gYWx0ZXJuYXRpdmVzLjwvcD5cbi8vXG4vLyA8cD5cbi8vIExldCdzIHNheSB3ZSBoYXZlIGEgc2V0IG9mIFNMTCBjb25mbGljdGluZyBhbHRlcm5hdGl2ZXMge0Bjb2RlIHsxLCAyLCAzfX0gYW5kXG4vLyBhIHNtYWxsZXIgTEwgc2V0IGNhbGxlZCA8ZW0+czwvZW0+LiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7MiwgM319LCB0aGVuIFNMTFxuLy8gcGFyc2luZyB3aWxsIGdldCBhbiBlcnJvciBiZWNhdXNlIFNMTCB3aWxsIHB1cnN1ZSBhbHRlcm5hdGl2ZSAxLiBJZlxuLy8gPGVtPnM8L2VtPiBpcyB7QGNvZGUgezEsIDJ9fSBvciB7QGNvZGUgezEsIDN9fSB0aGVuIGJvdGggU0xMIGFuZCBMTCB3aWxsXG4vLyBjaG9vc2UgdGhlIHNhbWUgYWx0ZXJuYXRpdmUgYmVjYXVzZSBhbHRlcm5hdGl2ZSBvbmUgaXMgdGhlIG1pbmltdW0gb2YgZWl0aGVyXG4vLyBzZXQuIElmIDxlbT5zPC9lbT4gaXMge0Bjb2RlIHsyfX0gb3Ige0Bjb2RlIHszfX0gdGhlbiBTTEwgd2lsbCBnZXQgYSBzeW50YXhcbi8vIGVycm9yLiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7MX19IHRoZW4gU0xMIHdpbGwgc3VjY2VlZC48L3A+XG4vL1xuLy8gPHA+XG4vLyBPZiBjb3Vyc2UsIGlmIHRoZSBpbnB1dCBpcyBpbnZhbGlkLCB0aGVuIHdlIHdpbGwgZ2V0IGFuIGVycm9yIGZvciBzdXJlIGluXG4vLyBib3RoIFNMTCBhbmQgTEwgcGFyc2luZy4gRXJyb25lb3VzIGlucHV0IHdpbGwgdGhlcmVmb3JlIHJlcXVpcmUgMiBwYXNzZXMgb3ZlclxuLy8gdGhlIGlucHV0LjwvcD5cbi8vXG5cbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG52YXIgQml0U2V0ID0gVXRpbHMuQml0U2V0O1xudmFyIERvdWJsZURpY3QgPSBVdGlscy5Eb3VibGVEaWN0O1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLkFUTlN0YXRlO1xudmFyIEFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vQVROQ29uZmlnU2V0JykuQVROQ29uZmlnU2V0O1xudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBQcmVkUHJlZGljdGlvbiA9IHJlcXVpcmUoJy4vLi4vZGZhL0RGQVN0YXRlJykuUHJlZFByZWRpY3Rpb247XG52YXIgQVROU2ltdWxhdG9yID0gcmVxdWlyZSgnLi9BVE5TaW11bGF0b3InKS5BVE5TaW11bGF0b3I7XG52YXIgUHJlZGljdGlvbk1vZGUgPSByZXF1aXJlKCcuL1ByZWRpY3Rpb25Nb2RlJykuUHJlZGljdGlvbk1vZGU7XG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgUGFyc2VyUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1BhcnNlclJ1bGVDb250ZXh0JykuUGFyc2VyUnVsZUNvbnRleHQ7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlN0YXJMb29wRW50cnlTdGF0ZTtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgUHJlZGljdGlvbkNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1ByZWRpY3Rpb25Db250ZXh0JykuUHJlZGljdGlvbkNvbnRleHQ7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgVHJhbnNpdGlvbnMgPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKTtcbnZhciBUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuVHJhbnNpdGlvbjtcbnZhciBTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuU2V0VHJhbnNpdGlvbjtcbnZhciBOb3RTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuTm90U2V0VHJhbnNpdGlvbjtcbnZhciBSdWxlVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlJ1bGVUcmFuc2l0aW9uO1xudmFyIEFjdGlvblRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BY3Rpb25UcmFuc2l0aW9uO1xudmFyIE5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi8uLi9lcnJvci9FcnJvcnMnKS5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxudmFyIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xudmFyIHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLnByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuXG5mdW5jdGlvbiBQYXJzZXJBVE5TaW11bGF0b3IocGFyc2VyLCBhdG4sIGRlY2lzaW9uVG9ERkEsIHNoYXJlZENvbnRleHRDYWNoZSkge1xuXHRBVE5TaW11bGF0b3IuY2FsbCh0aGlzLCBhdG4sIHNoYXJlZENvbnRleHRDYWNoZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5kZWNpc2lvblRvREZBID0gZGVjaXNpb25Ub0RGQTtcbiAgICAvLyBTTEwsIExMLCBvciBMTCArIGV4YWN0IGFtYmlnIGRldGVjdGlvbj8vL1xuICAgIHRoaXMucHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZS5MTDtcbiAgICAvLyBMQU1FIGdsb2JhbHMgdG8gYXZvaWQgcGFyYW1ldGVycyEhISEhIEkgbmVlZCB0aGVzZSBkb3duIGRlZXAgaW4gcHJlZFRyYW5zaXRpb25cbiAgICB0aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgdGhpcy5fc3RhcnRJbmRleCA9IDA7XG4gICAgdGhpcy5fb3V0ZXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9kZmEgPSBudWxsO1xuICAgIC8vIEVhY2ggcHJlZGljdGlvbiBvcGVyYXRpb24gdXNlcyBhIGNhY2hlIGZvciBtZXJnZSBvZiBwcmVkaWN0aW9uIGNvbnRleHRzLlxuICAgIC8vICBEb24ndCBrZWVwIGFyb3VuZCBhcyBpdCB3YXN0ZXMgaHVnZSBhbW91bnRzIG9mIG1lbW9yeS4gRG91YmxlS2V5TWFwXG4gICAgLy8gIGlzbid0IHN5bmNocm9uaXplZCBidXQgd2UncmUgb2sgc2luY2UgdHdvIHRocmVhZHMgc2hvdWxkbid0IHJldXNlIHNhbWVcbiAgICAvLyAgcGFyc2VyL2F0bnNpbSBvYmplY3QgYmVjYXVzZSBpdCBjYW4gb25seSBoYW5kbGUgb25lIGlucHV0IGF0IGEgdGltZS5cbiAgICAvLyAgVGhpcyBtYXBzIGdyYXBocyBhIGFuZCBiIHRvIG1lcmdlZCByZXN1bHQgYy4gKGEsYikmcmFycjtjLiBXZSBjYW4gYXZvaWRcbiAgICAvLyAgdGhlIG1lcmdlIGlmIHdlIGV2ZXIgc2VlIGEgYW5kIGIgYWdhaW4uICBOb3RlIHRoYXQgKGIsYSkmcmFycjtjIHNob3VsZFxuICAgIC8vICBhbHNvIGJlIGV4YW1pbmVkIGR1cmluZyBjYWNoZSBsb29rdXAuXG4gICAgLy9cbiAgICB0aGlzLm1lcmdlQ2FjaGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TaW11bGF0b3IucHJvdG90eXBlKTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJzZXJBVE5TaW11bGF0b3I7XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWcgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfY2xvc3VyZSA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5kZWJ1Z19hZGQgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfbGlzdF9hdG5fZGVjaXNpb25zID0gZmFsc2U7XG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmRmYV9kZWJ1ZyA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXRyeV9kZWJ1ZyA9IGZhbHNlO1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRhcHRpdmVQcmVkaWN0ID0gZnVuY3Rpb24oaW5wdXQsIGRlY2lzaW9uLCBvdXRlckNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImFkYXB0aXZlUHJlZGljdCBkZWNpc2lvbiBcIiArIGRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBleGVjIExBKDEpPT1cIiArIHRoaXMuZ2V0TG9va2FoZWFkTmFtZShpbnB1dCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGxpbmUgXCIgKyBpbnB1dC5MVCgxKS5saW5lICsgXCI6XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LkxUKDEpLmNvbHVtbik7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5fc3RhcnRJbmRleCA9IGlucHV0LmluZGV4O1xuICAgIHRoaXMuX291dGVyQ29udGV4dCA9IG91dGVyQ29udGV4dDtcblxuICAgIHZhciBkZmEgPSB0aGlzLmRlY2lzaW9uVG9ERkFbZGVjaXNpb25dO1xuICAgIHRoaXMuX2RmYSA9IGRmYTtcbiAgICB2YXIgbSA9IGlucHV0Lm1hcmsoKTtcbiAgICB2YXIgaW5kZXggPSBpbnB1dC5pbmRleDtcblxuICAgIC8vIE5vdyB3ZSBhcmUgY2VydGFpbiB0byBoYXZlIGEgc3BlY2lmaWMgZGVjaXNpb24ncyBERkFcbiAgICAvLyBCdXQsIGRvIHdlIHN0aWxsIG5lZWQgYW4gaW5pdGlhbCBzdGF0ZT9cbiAgICB0cnkge1xuICAgICAgICB2YXIgczA7XG4gICAgICAgIGlmIChkZmEucHJlY2VkZW5jZURmYSkge1xuICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHByZWNlZGVuY2UgREZBIGRlcGVuZHMgb24gdGhlIGN1cnJlbnRcbiAgICAgICAgICAgIC8vIHBhcnNlciBwcmVjZWRlbmNlLCBhbmQgaXMgcHJvdmlkZWQgYnkgYSBERkEgbWV0aG9kLlxuICAgICAgICAgICAgczAgPSBkZmEuZ2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUodGhpcy5wYXJzZXIuZ2V0UHJlY2VkZW5jZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZSBzdGFydCBzdGF0ZSBmb3IgYSBcInJlZ3VsYXJcIiBERkEgaXMganVzdCBzMFxuICAgICAgICAgICAgczAgPSBkZmEuczA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMwPT09bnVsbCkge1xuICAgICAgICAgICAgaWYgKG91dGVyQ29udGV4dD09PW51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRlckNvbnRleHQgPSBSdWxlQ29udGV4dC5FTVBUWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGVidWdfbGlzdF9hdG5fZGVjaXNpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJwcmVkaWN0QVROIGRlY2lzaW9uIFwiICsgZGZhLmRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgZXhlYyBMQSgxKT09XCIgKyB0aGlzLmdldExvb2thaGVhZE5hbWUoaW5wdXQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIG91dGVyQ29udGV4dD1cIiArIG91dGVyQ29udGV4dC50b1N0cmluZyh0aGlzLnBhcnNlci5ydWxlTmFtZXMpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZ1bGxDdHggPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBzMF9jbG9zdXJlID0gdGhpcy5jb21wdXRlU3RhcnRTdGF0ZShkZmEuYXRuU3RhcnRTdGF0ZSwgUnVsZUNvbnRleHQuRU1QVFksIGZ1bGxDdHgpO1xuXG4gICAgICAgICAgICBpZiggZGZhLnByZWNlZGVuY2VEZmEpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkEsIHdlIHVzZSBhcHBseVByZWNlZGVuY2VGaWx0ZXJcbiAgICAgICAgICAgICAgICAvLyB0byBjb252ZXJ0IHRoZSBjb21wdXRlZCBzdGFydCBzdGF0ZSB0byBhIHByZWNlZGVuY2Ugc3RhcnRcbiAgICAgICAgICAgICAgICAvLyBzdGF0ZS4gV2UgdGhlbiB1c2UgREZBLnNldFByZWNlZGVuY2VTdGFydFN0YXRlIHRvIHNldCB0aGVcbiAgICAgICAgICAgICAgICAvLyBhcHByb3ByaWF0ZSBzdGFydCBzdGF0ZSBmb3IgdGhlIHByZWNlZGVuY2UgbGV2ZWwgcmF0aGVyXG4gICAgICAgICAgICAgICAgLy8gdGhhbiBzaW1wbHkgc2V0dGluZyBERkEuczAuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICBkZmEuczAuY29uZmlncyA9IHMwX2Nsb3N1cmU7IC8vIG5vdCB1c2VkIGZvciBwcmVkaWN0aW9uIGJ1dCB1c2VmdWwgdG8ga25vdyBzdGFydCBjb25maWdzIGFueXdheVxuICAgICAgICAgICAgICAgIHMwX2Nsb3N1cmUgPSB0aGlzLmFwcGx5UHJlY2VkZW5jZUZpbHRlcihzMF9jbG9zdXJlKTtcbiAgICAgICAgICAgICAgICBzMCA9IHRoaXMuYWRkREZBU3RhdGUoZGZhLCBuZXcgREZBU3RhdGUobnVsbCwgczBfY2xvc3VyZSkpO1xuICAgICAgICAgICAgICAgIGRmYS5zZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSh0aGlzLnBhcnNlci5nZXRQcmVjZWRlbmNlKCksIHMwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczAgPSB0aGlzLmFkZERGQVN0YXRlKGRmYSwgbmV3IERGQVN0YXRlKG51bGwsIHMwX2Nsb3N1cmUpKTtcbiAgICAgICAgICAgICAgICBkZmEuczAgPSBzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgYWx0ID0gdGhpcy5leGVjQVROKGRmYSwgczAsIGlucHV0LCBpbmRleCwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiREZBIGFmdGVyIHByZWRpY3RBVE46IFwiICsgZGZhLnRvU3RyaW5nKHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fZGZhID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZXJnZUNhY2hlID0gbnVsbDsgLy8gd2FjayBjYWNoZSBhZnRlciBlYWNoIHByZWRpY3Rpb25cbiAgICAgICAgaW5wdXQuc2VlayhpbmRleCk7XG4gICAgICAgIGlucHV0LnJlbGVhc2UobSk7XG4gICAgfVxufTtcbi8vIFBlcmZvcm1zIEFUTiBzaW11bGF0aW9uIHRvIGNvbXB1dGUgYSBwcmVkaWN0ZWQgYWx0ZXJuYXRpdmUgYmFzZWRcbi8vICB1cG9uIHRoZSByZW1haW5pbmcgaW5wdXQsIGJ1dCBhbHNvIHVwZGF0ZXMgdGhlIERGQSBjYWNoZSB0byBhdm9pZFxuLy8gIGhhdmluZyB0byB0cmF2ZXJzZSB0aGUgQVROIGFnYWluIGZvciB0aGUgc2FtZSBpbnB1dCBzZXF1ZW5jZS5cblxuLy8gVGhlcmUgYXJlIHNvbWUga2V5IGNvbmRpdGlvbnMgd2UncmUgbG9va2luZyBmb3IgYWZ0ZXIgY29tcHV0aW5nIGEgbmV3XG4vLyBzZXQgb2YgQVROIGNvbmZpZ3MgKHByb3Bvc2VkIERGQSBzdGF0ZSk6XG4gICAgICAvLyBpZiB0aGUgc2V0IGlzIGVtcHR5LCB0aGVyZSBpcyBubyB2aWFibGUgYWx0ZXJuYXRpdmUgZm9yIGN1cnJlbnQgc3ltYm9sXG4gICAgICAvLyBkb2VzIHRoZSBzdGF0ZSB1bmlxdWVseSBwcmVkaWN0IGFuIGFsdGVybmF0aXZlP1xuICAgICAgLy8gZG9lcyB0aGUgc3RhdGUgaGF2ZSBhIGNvbmZsaWN0IHRoYXQgd291bGQgcHJldmVudCB1cyBmcm9tXG4gICAgICAvLyAgIHB1dHRpbmcgaXQgb24gdGhlIHdvcmsgbGlzdD9cblxuLy8gV2UgYWxzbyBoYXZlIHNvbWUga2V5IG9wZXJhdGlvbnMgdG8gZG86XG4gICAgICAvLyBhZGQgYW4gZWRnZSBmcm9tIHByZXZpb3VzIERGQSBzdGF0ZSB0byBwb3RlbnRpYWxseSBuZXcgREZBIHN0YXRlLCBELFxuICAgICAgLy8gICB1cG9uIGN1cnJlbnQgc3ltYm9sIGJ1dCBvbmx5IGlmIGFkZGluZyB0byB3b3JrIGxpc3QsIHdoaWNoIG1lYW5zIGluIGFsbFxuICAgICAgLy8gICBjYXNlcyBleGNlcHQgbm8gdmlhYmxlIGFsdGVybmF0aXZlIChhbmQgcG9zc2libHkgbm9uLWdyZWVkeSBkZWNpc2lvbnM/KVxuICAgICAgLy8gY29sbGVjdGluZyBwcmVkaWNhdGVzIGFuZCBhZGRpbmcgc2VtYW50aWMgY29udGV4dCB0byBERkEgYWNjZXB0IHN0YXRlc1xuICAgICAgLy8gYWRkaW5nIHJ1bGUgY29udGV4dCB0byBjb250ZXh0LXNlbnNpdGl2ZSBERkEgYWNjZXB0IHN0YXRlc1xuICAgICAgLy8gY29uc3VtaW5nIGFuIGlucHV0IHN5bWJvbFxuICAgICAgLy8gcmVwb3J0aW5nIGEgY29uZmxpY3RcbiAgICAgIC8vIHJlcG9ydGluZyBhbiBhbWJpZ3VpdHlcbiAgICAgIC8vIHJlcG9ydGluZyBhIGNvbnRleHQgc2Vuc2l0aXZpdHlcbiAgICAgIC8vIHJlcG9ydGluZyBpbnN1ZmZpY2llbnQgcHJlZGljYXRlc1xuXG4vLyBjb3ZlciB0aGVzZSBjYXNlczpcbi8vICAgIGRlYWQgZW5kXG4vLyAgICBzaW5nbGUgYWx0XG4vLyAgICBzaW5nbGUgYWx0ICsgcHJlZHNcbi8vICAgIGNvbmZsaWN0XG4vLyAgICBjb25mbGljdCArIHByZWRzXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROID0gZnVuY3Rpb24oZGZhLCBzMCwgaW5wdXQsIHN0YXJ0SW5kZXgsIG91dGVyQ29udGV4dCApIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImV4ZWNBVE4gZGVjaXNpb24gXCIgKyBkZmEuZGVjaXNpb24gK1xuICAgICAgICAgICAgICAgIFwiIGV4ZWMgTEEoMSk9PVwiICsgdGhpcy5nZXRMb29rYWhlYWROYW1lKGlucHV0KSArXG4gICAgICAgICAgICAgICAgXCIgbGluZSBcIiArIGlucHV0LkxUKDEpLmxpbmUgKyBcIjpcIiArIGlucHV0LkxUKDEpLmNvbHVtbik7XG4gICAgfVxuICAgIHZhciBhbHQ7XG4gICAgdmFyIHByZXZpb3VzRCA9IHMwO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJzMCA9IFwiICsgczApO1xuICAgIH1cbiAgICB2YXIgdCA9IGlucHV0LkxBKDEpO1xuICAgIHdoaWxlKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG4gICAgICAgIHZhciBEID0gdGhpcy5nZXRFeGlzdGluZ1RhcmdldFN0YXRlKHByZXZpb3VzRCwgdCk7XG4gICAgICAgIGlmKEQ9PT1udWxsKSB7XG4gICAgICAgICAgICBEID0gdGhpcy5jb21wdXRlVGFyZ2V0U3RhdGUoZGZhLCBwcmV2aW91c0QsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmKEQ9PT1BVE5TaW11bGF0b3IuRVJST1IpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBjb25maWdzIGluIHByZXZpb3VzIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHQsIHRoYXRcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgaW5wdXQgdXAgdG8gdCBhY3R1YWxseSBmaW5pc2hlZCBlbnRyeSBydWxlXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBmb3IgU0xMIGRlY2lzaW9uLiBGdWxsIExMIGRvZXNuJ3QgZGlwIGludG8gb3V0ZXJcbiAgICAgICAgICAgIC8vIHNvIGRvbid0IG5lZWQgc3BlY2lhbCBjYXNlLlxuICAgICAgICAgICAgLy8gV2Ugd2lsbCBnZXQgYW4gZXJyb3Igbm8gbWF0dGVyIHdoYXQgc28gZGVsYXkgdW50aWwgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGRlY2lzaW9uOyBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4gQWxzbywgbm8gcmVhY2hhYmxlIHRhcmdldFxuICAgICAgICAgICAgLy8gQVROIHN0YXRlcyBpbiBTTEwgaW1wbGllcyBMTCB3aWxsIGFsc28gZ2V0IG5vd2hlcmUuXG4gICAgICAgICAgICAvLyBJZiBjb25mbGljdCBpbiBzdGF0ZXMgdGhhdCBkaXAgb3V0LCBjaG9vc2UgbWluIHNpbmNlIHdlXG4gICAgICAgICAgICAvLyB3aWxsIGdldCBlcnJvciBubyBtYXR0ZXIgd2hhdC5cbiAgICAgICAgICAgIHZhciBlID0gdGhpcy5ub1ZpYWJsZUFsdChpbnB1dCwgb3V0ZXJDb250ZXh0LCBwcmV2aW91c0QuY29uZmlncywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICBpbnB1dC5zZWVrKHN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgYWx0ID0gdGhpcy5nZXRTeW5WYWxpZE9yU2VtSW52YWxpZEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHByZXZpb3VzRC5jb25maWdzLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoRC5yZXF1aXJlc0Z1bGxDb250ZXh0ICYmIHRoaXMucHJlZGljdGlvbk1vZGUgIT09IFByZWRpY3Rpb25Nb2RlLlNMTCkge1xuICAgICAgICAgICAgLy8gSUYgUFJFRFMsIE1JR0hUIFJFU09MVkUgVE8gU0lOR0xFIEFMVCA9PiBTTEwgKG9yIHN5bnRheCBlcnJvcilcbiAgICAgICAgICAgIHZhciBjb25mbGljdGluZ0FsdHMgPSBudWxsO1xuICAgICAgICAgICAgaWYgKEQucHJlZGljYXRlcyE9PW51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRGQSBzdGF0ZSBoYXMgcHJlZHMgaW4gREZBIHNpbSBMTCBmYWlsb3ZlclwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNvbmZsaWN0SW5kZXggPSBpbnB1dC5pbmRleDtcbiAgICAgICAgICAgICAgICBpZihjb25mbGljdEluZGV4ICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nQWx0cyA9IHRoaXMuZXZhbFNlbWFudGljQ29udGV4dChELnByZWRpY2F0ZXMsIG91dGVyQ29udGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZsaWN0aW5nQWx0cy5sZW5ndGg9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRnVsbCBMTCBhdm9pZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25mbGljdGluZ0FsdHMubWluVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZsaWN0SW5kZXggIT09IHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzdG9yZSB0aGUgaW5kZXggc28gcmVwb3J0aW5nIHRoZSBmYWxsYmFjayB0byBmdWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgb2NjdXJzIHdpdGggdGhlIGluZGV4IGF0IHRoZSBjb3JyZWN0IHNwb3RcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2Vlayhjb25mbGljdEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZmFfZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImN0eCBzZW5zaXRpdmUgc3RhdGUgXCIgKyBvdXRlckNvbnRleHQgK1wiIGluIFwiICsgRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZnVsbEN0eCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgczBfY2xvc3VyZSA9IHRoaXMuY29tcHV0ZVN0YXJ0U3RhdGUoZGZhLmF0blN0YXJ0U3RhdGUsIG91dGVyQ29udGV4dCwgZnVsbEN0eCk7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dChkZmEsIGNvbmZsaWN0aW5nQWx0cywgRC5jb25maWdzLCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCk7XG4gICAgICAgICAgICBhbHQgPSB0aGlzLmV4ZWNBVE5XaXRoRnVsbENvbnRleHQoZGZhLCBELCBzMF9jbG9zdXJlLCBpbnB1dCwgc3RhcnRJbmRleCwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEQuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKEQucHJlZGljYXRlcz09PW51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRC5wcmVkaWN0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN0b3BJbmRleCA9IGlucHV0LmluZGV4O1xuICAgICAgICAgICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICAgICAgICAgIHZhciBhbHRzID0gdGhpcy5ldmFsU2VtYW50aWNDb250ZXh0KEQucHJlZGljYXRlcywgb3V0ZXJDb250ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChhbHRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLm5vVmlhYmxlQWx0KGlucHV0LCBvdXRlckNvbnRleHQsIEQuY29uZmlncywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFsdHMubGVuZ3RoPT09MSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHRzLm1pblZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBhbWJpZ3VpdHkgYWZ0ZXIgcHJlZGljYXRlIGV2YWx1YXRpb24gdG8gbWFrZSBzdXJlIHRoZSBjb3JyZWN0IHNldCBvZiBhbWJpZyBhbHRzIGlzIHJlcG9ydGVkLlxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0QW1iaWd1aXR5KGRmYSwgRCwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBmYWxzZSwgYWx0cywgRC5jb25maWdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWx0cy5taW5WYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzRCA9IEQ7XG5cbiAgICAgICAgaWYgKHQgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQuY29uc3VtZSgpO1xuICAgICAgICAgICAgdCA9IGlucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfVxufTtcbi8vXG4vLyBHZXQgYW4gZXhpc3RpbmcgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEuIElmIHRoZSB0YXJnZXQgc3RhdGVcbi8vIGZvciB0aGUgZWRnZSBoYXMgbm90IHlldCBiZWVuIGNvbXB1dGVkIG9yIGlzIG90aGVyd2lzZSBub3QgYXZhaWxhYmxlLFxuLy8gdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHByZXZpb3VzRCBUaGUgY3VycmVudCBERkEgc3RhdGVcbi8vIEBwYXJhbSB0IFRoZSBuZXh0IGlucHV0IHN5bWJvbFxuLy8gQHJldHVybiBUaGUgZXhpc3RpbmcgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRhcmdldCBzdGF0ZSBmb3IgdGhpcyBlZGdlIGlzIG5vdFxuLy8gYWxyZWFkeSBjYWNoZWRcbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEV4aXN0aW5nVGFyZ2V0U3RhdGUgPSBmdW5jdGlvbihwcmV2aW91c0QsIHQpIHtcbiAgICB2YXIgZWRnZXMgPSBwcmV2aW91c0QuZWRnZXM7XG4gICAgaWYgKGVkZ2VzPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWRnZXNbdCArIDFdIHx8IG51bGw7XG4gICAgfVxufTtcbi8vXG4vLyBDb21wdXRlIGEgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEsIGFuZCBhdHRlbXB0IHRvIGFkZCB0aGVcbi8vIGNvbXB1dGVkIHN0YXRlIGFuZCBjb3JyZXNwb25kaW5nIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyBAcGFyYW0gZGZhIFRoZSBERkFcbi8vIEBwYXJhbSBwcmV2aW91c0QgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vXG4vLyBAcmV0dXJuIFRoZSBjb21wdXRlZCB0YXJnZXQgREZBIHN0YXRlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgc3ltYm9sXG4vLyB7QGNvZGUgdH0uIElmIHtAY29kZSB0fSBkb2VzIG5vdCBsZWFkIHRvIGEgdmFsaWQgREZBIHN0YXRlLCB0aGlzIG1ldGhvZFxuLy8gcmV0dXJucyB7QGxpbmsgLy9FUlJPUn0uXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlVGFyZ2V0U3RhdGUgPSBmdW5jdGlvbihkZmEsIHByZXZpb3VzRCwgdCkge1xuICAgdmFyIHJlYWNoID0gdGhpcy5jb21wdXRlUmVhY2hTZXQocHJldmlvdXNELmNvbmZpZ3MsIHQsIGZhbHNlKTtcbiAgICBpZihyZWFjaD09PW51bGwpIHtcbiAgICAgICAgdGhpcy5hZGRERkFFZGdlKGRmYSwgcHJldmlvdXNELCB0LCBBVE5TaW11bGF0b3IuRVJST1IpO1xuICAgICAgICByZXR1cm4gQVROU2ltdWxhdG9yLkVSUk9SO1xuICAgIH1cbiAgICAvLyBjcmVhdGUgbmV3IHRhcmdldCBzdGF0ZTsgd2UnbGwgYWRkIHRvIERGQSBhZnRlciBpdCdzIGNvbXBsZXRlXG4gICAgdmFyIEQgPSBuZXcgREZBU3RhdGUobnVsbCwgcmVhY2gpO1xuXG4gICAgdmFyIHByZWRpY3RlZEFsdCA9IHRoaXMuZ2V0VW5pcXVlQWx0KHJlYWNoKTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHZhciBhbHRTdWJTZXRzID0gUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzKHJlYWNoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJTTEwgYWx0U3ViU2V0cz1cIiArIFV0aWxzLmFycmF5VG9TdHJpbmcoYWx0U3ViU2V0cykgK1xuICAgICAgICAgICAgICAgICAgICBcIiwgcHJldmlvdXM9XCIgKyBwcmV2aW91c0QuY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgIFwiLCBjb25maWdzPVwiICsgcmVhY2ggK1xuICAgICAgICAgICAgICAgICAgICBcIiwgcHJlZGljdD1cIiArIHByZWRpY3RlZEFsdCArXG4gICAgICAgICAgICAgICAgICAgIFwiLCBhbGxTdWJzZXRzQ29uZmxpY3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgICBQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzQ29uZmxpY3QoYWx0U3ViU2V0cykgKyBcIiwgY29uZmxpY3RpbmdBbHRzPVwiICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb25mbGljdGluZ0FsdHMocmVhY2gpKTtcbiAgICB9XG4gICAgaWYgKHByZWRpY3RlZEFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgLy8gTk8gQ09ORkxJQ1QsIFVOSVFVRUxZIFBSRURJQ1RFRCBBTFRcbiAgICAgICAgRC5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgRC5jb25maWdzLnVuaXF1ZUFsdCA9IHByZWRpY3RlZEFsdDtcbiAgICAgICAgRC5wcmVkaWN0aW9uID0gcHJlZGljdGVkQWx0O1xuICAgIH0gZWxzZSBpZiAoUHJlZGljdGlvbk1vZGUuaGFzU0xMQ29uZmxpY3RUZXJtaW5hdGluZ1ByZWRpY3Rpb24odGhpcy5wcmVkaWN0aW9uTW9kZSwgcmVhY2gpKSB7XG4gICAgICAgIC8vIE1PUkUgVEhBTiBPTkUgVklBQkxFIEFMVEVSTkFUSVZFXG4gICAgICAgIEQuY29uZmlncy5jb25mbGljdGluZ0FsdHMgPSB0aGlzLmdldENvbmZsaWN0aW5nQWx0cyhyZWFjaCk7XG4gICAgICAgIEQucmVxdWlyZXNGdWxsQ29udGV4dCA9IHRydWU7XG4gICAgICAgIC8vIGluIFNMTC1vbmx5IG1vZGUsIHdlIHdpbGwgc3RvcCBhdCB0aGlzIHN0YXRlIGFuZCByZXR1cm4gdGhlIG1pbmltdW0gYWx0XG4gICAgICAgIEQuaXNBY2NlcHRTdGF0ZSA9IHRydWU7XG4gICAgICAgIEQucHJlZGljdGlvbiA9IEQuY29uZmlncy5jb25mbGljdGluZ0FsdHMubWluVmFsdWUoKTtcbiAgICB9XG4gICAgaWYgKEQuaXNBY2NlcHRTdGF0ZSAmJiBELmNvbmZpZ3MuaGFzU2VtYW50aWNDb250ZXh0KSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlREZBU3RhdGUoRCwgdGhpcy5hdG4uZ2V0RGVjaXNpb25TdGF0ZShkZmEuZGVjaXNpb24pKTtcbiAgICAgICAgaWYoIEQucHJlZGljYXRlcyE9PW51bGwpIHtcbiAgICAgICAgICAgIEQucHJlZGljdGlvbiA9IEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWxsIGFkZHMgdG8gZGZhIGFyZSBkb25lIGFmdGVyIHdlJ3ZlIGNyZWF0ZWQgZnVsbCBEIHN0YXRlXG4gICAgRCA9IHRoaXMuYWRkREZBRWRnZShkZmEsIHByZXZpb3VzRCwgdCwgRCk7XG4gICAgcmV0dXJuIEQ7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnByZWRpY2F0ZURGQVN0YXRlID0gZnVuY3Rpb24oZGZhU3RhdGUsIGRlY2lzaW9uU3RhdGUpIHtcbiAgICAvLyBXZSBuZWVkIHRvIHRlc3QgYWxsIHByZWRpY2F0ZXMsIGV2ZW4gaW4gREZBIHN0YXRlcyB0aGF0XG4gICAgLy8gdW5pcXVlbHkgcHJlZGljdCBhbHRlcm5hdGl2ZS5cbiAgICB2YXIgbmFsdHMgPSBkZWNpc2lvblN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICAvLyBVcGRhdGUgREZBIHNvIHJlYWNoIGJlY29tZXMgYWNjZXB0IHN0YXRlIHdpdGggKHByZWRpY2F0ZSxhbHQpXG4gICAgLy8gcGFpcnMgaWYgcHJlZHMgZm91bmQgZm9yIGNvbmZsaWN0aW5nIGFsdHNcbiAgICB2YXIgYWx0c1RvQ29sbGVjdFByZWRzRnJvbSA9IHRoaXMuZ2V0Q29uZmxpY3RpbmdBbHRzT3JVbmlxdWVBbHQoZGZhU3RhdGUuY29uZmlncyk7XG4gICAgdmFyIGFsdFRvUHJlZCA9IHRoaXMuZ2V0UHJlZHNGb3JBbWJpZ0FsdHMoYWx0c1RvQ29sbGVjdFByZWRzRnJvbSwgZGZhU3RhdGUuY29uZmlncywgbmFsdHMpO1xuICAgIGlmIChhbHRUb1ByZWQhPT1udWxsKSB7XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY2F0ZXMgPSB0aGlzLmdldFByZWRpY2F0ZVByZWRpY3Rpb25zKGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20sIGFsdFRvUHJlZCk7XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY3Rpb24gPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSOyAvLyBtYWtlIHN1cmUgd2UgdXNlIHByZWRzXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHByZWRzIGluIGNvbmZpZ3MgYnV0IHRoZXkgbWlnaHQgZ28gYXdheVxuICAgICAgICAvLyB3aGVuIE9SJ2QgdG9nZXRoZXIgbGlrZSB7cH0/IHx8IE5PTkUgPT0gTk9ORS4gSWYgbmVpdGhlclxuICAgICAgICAvLyBhbHQgaGFzIHByZWRzLCByZXNvbHZlIHRvIG1pbiBhbHRcbiAgICAgICAgZGZhU3RhdGUucHJlZGljdGlvbiA9IGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20ubWluVmFsdWUoKTtcbiAgICB9XG59O1xuXG4vLyBjb21lcyBiYWNrIHdpdGggcmVhY2gudW5pcXVlQWx0IHNldCB0byBhIHZhbGlkIGFsdFxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROV2l0aEZ1bGxDb250ZXh0ID0gZnVuY3Rpb24oZGZhLCBELCAvLyBob3cgZmFyIHdlIGdvdCBiZWZvcmUgZmFpbGluZyBvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImV4ZWNBVE5XaXRoRnVsbENvbnRleHQgXCIrczApO1xuICAgIH1cbiAgICB2YXIgZnVsbEN0eCA9IHRydWU7XG4gICAgdmFyIGZvdW5kRXhhY3RBbWJpZyA9IGZhbHNlO1xuICAgIHZhciByZWFjaCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gczA7XG4gICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICB2YXIgdCA9IGlucHV0LkxBKDEpO1xuICAgIHZhciBwcmVkaWN0ZWRBbHQgPSAtMTtcbiAgICB3aGlsZSAodHJ1ZSkgeyAvLyB3aGlsZSBtb3JlIHdvcmtcbiAgICAgICAgcmVhY2ggPSB0aGlzLmNvbXB1dGVSZWFjaFNldChwcmV2aW91cywgdCwgZnVsbEN0eCk7XG4gICAgICAgIGlmIChyZWFjaD09PW51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBjb25maWdzIGluIHByZXZpb3VzIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHQsIHRoYXRcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgaW5wdXQgdXAgdG8gdCBhY3R1YWxseSBmaW5pc2hlZCBlbnRyeSBydWxlXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBmb3IgTEwgZGVjaXNpb24uIEZ1bGwgTEwgZG9lc24ndCBkaXAgaW50byBvdXRlclxuICAgICAgICAgICAgLy8gc28gZG9uJ3QgbmVlZCBzcGVjaWFsIGNhc2UuXG4gICAgICAgICAgICAvLyBXZSB3aWxsIGdldCBhbiBlcnJvciBubyBtYXR0ZXIgd2hhdCBzbyBkZWxheSB1bnRpbCBhZnRlclxuICAgICAgICAgICAgLy8gZGVjaXNpb247IGJldHRlciBlcnJvciBtZXNzYWdlLiBBbHNvLCBubyByZWFjaGFibGUgdGFyZ2V0XG4gICAgICAgICAgICAvLyBBVE4gc3RhdGVzIGluIFNMTCBpbXBsaWVzIExMIHdpbGwgYWxzbyBnZXQgbm93aGVyZS5cbiAgICAgICAgICAgIC8vIElmIGNvbmZsaWN0IGluIHN0YXRlcyB0aGF0IGRpcCBvdXQsIGNob29zZSBtaW4gc2luY2Ugd2VcbiAgICAgICAgICAgIC8vIHdpbGwgZ2V0IGVycm9yIG5vIG1hdHRlciB3aGF0LlxuICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm5vVmlhYmxlQWx0KGlucHV0LCBvdXRlckNvbnRleHQsIHByZXZpb3VzLCBzdGFydEluZGV4KTtcbiAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgYWx0ID0gdGhpcy5nZXRTeW5WYWxpZE9yU2VtSW52YWxpZEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHByZXZpb3VzLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFsdFN1YlNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMocmVhY2gpO1xuICAgICAgICBpZih0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkxMIGFsdFN1YlNldHM9XCIgKyBhbHRTdWJTZXRzICsgXCIsIHByZWRpY3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgUHJlZGljdGlvbk1vZGUuZ2V0VW5pcXVlQWx0KGFsdFN1YlNldHMpICsgXCIsIHJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0PVwiICtcbiAgICAgICAgICAgICAgICAgIFByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0KGFsdFN1YlNldHMpKTtcbiAgICAgICAgfVxuICAgICAgICByZWFjaC51bmlxdWVBbHQgPSB0aGlzLmdldFVuaXF1ZUFsdChyZWFjaCk7XG4gICAgICAgIC8vIHVuaXF1ZSBwcmVkaWN0aW9uP1xuICAgICAgICBpZihyZWFjaC51bmlxdWVBbHQhPT1BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBwcmVkaWN0ZWRBbHQgPSByZWFjaC51bmlxdWVBbHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZWRpY3Rpb25Nb2RlICE9PSBQcmVkaWN0aW9uTW9kZS5MTF9FWEFDVF9BTUJJR19ERVRFQ1RJT04pIHtcbiAgICAgICAgICAgIHByZWRpY3RlZEFsdCA9IFByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0KGFsdFN1YlNldHMpO1xuICAgICAgICAgICAgaWYocHJlZGljdGVkQWx0ICE9PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbiBleGFjdCBhbWJpZ3VpdHkgbW9kZSwgd2UgbmV2ZXIgdHJ5IHRvIHRlcm1pbmF0ZSBlYXJseS5cbiAgICAgICAgICAgIC8vIEp1c3Qga2VlcHMgc2NhcmZpbmcgdW50aWwgd2Uga25vdyB3aGF0IHRoZSBjb25mbGljdCBpc1xuICAgICAgICAgICAgaWYgKFByZWRpY3Rpb25Nb2RlLmFsbFN1YnNldHNDb25mbGljdChhbHRTdWJTZXRzKSAmJiBQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzRXF1YWwoYWx0U3ViU2V0cykpIHtcbiAgICAgICAgICAgICAgICBmb3VuZEV4YWN0QW1iaWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZWRpY3RlZEFsdCA9IFByZWRpY3Rpb25Nb2RlLmdldFNpbmdsZVZpYWJsZUFsdChhbHRTdWJTZXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsc2UgdGhlcmUgYXJlIG11bHRpcGxlIG5vbi1jb25mbGljdGluZyBzdWJzZXRzIG9yXG4gICAgICAgICAgICAvLyB3ZSdyZSBub3Qgc3VyZSB3aGF0IHRoZSBhbWJpZ3VpdHkgaXMgeWV0LlxuICAgICAgICAgICAgLy8gU28sIGtlZXAgZ29pbmcuXG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSByZWFjaDtcbiAgICAgICAgaWYoIHQgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQuY29uc3VtZSgpO1xuICAgICAgICAgICAgdCA9IGlucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSBjb25maWd1cmF0aW9uIHNldCB1bmlxdWVseSBwcmVkaWN0cyBhbiBhbHRlcm5hdGl2ZSxcbiAgICAvLyB3aXRob3V0IGNvbmZsaWN0LCB0aGVuIHdlIGtub3cgdGhhdCBpdCdzIGEgZnVsbCBMTCBkZWNpc2lvblxuICAgIC8vIG5vdCBTTEwuXG4gICAgaWYgKHJlYWNoLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiApIHtcbiAgICAgICAgdGhpcy5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkoZGZhLCBwcmVkaWN0ZWRBbHQsIHJlYWNoLCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCk7XG4gICAgICAgIHJldHVybiBwcmVkaWN0ZWRBbHQ7XG4gICAgfVxuICAgIC8vIFdlIGRvIG5vdCBjaGVjayBwcmVkaWNhdGVzIGhlcmUgYmVjYXVzZSB3ZSBoYXZlIGNoZWNrZWQgdGhlbVxuICAgIC8vIG9uLXRoZS1mbHkgd2hlbiBkb2luZyBmdWxsIGNvbnRleHQgcHJlZGljdGlvbi5cblxuICAgIC8vXG4gICAgLy8gSW4gbm9uLWV4YWN0IGFtYmlndWl0eSBkZXRlY3Rpb24gbW9kZSwgd2UgbWlnaHRcdGFjdHVhbGx5IGJlIGFibGUgdG9cbiAgICAvLyBkZXRlY3QgYW4gZXhhY3QgYW1iaWd1aXR5LCBidXQgSSdtIG5vdCBnb2luZyB0byBzcGVuZCB0aGUgY3ljbGVzXG4gICAgLy8gbmVlZGVkIHRvIGNoZWNrLiBXZSBvbmx5IGVtaXQgYW1iaWd1aXR5IHdhcm5pbmdzIGluIGV4YWN0IGFtYmlndWl0eVxuICAgIC8vIG1vZGUuXG4gICAgLy9cbiAgICAvLyBGb3IgZXhhbXBsZSwgd2UgbWlnaHQga25vdyB0aGF0IHdlIGhhdmUgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMuXG4gICAgLy8gQnV0LCB0aGF0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGVyZSBpcyBubyB3YXkgZm9yd2FyZCB3aXRob3V0IGFcbiAgICAvLyBjb25mbGljdC4gSXQncyBwb3NzaWJsZSB0byBoYXZlIG5vbmNvbmZsaWN0aW5nIGFsdCBzdWJzZXRzIGFzIGluOlxuXG4gICAgLy8gYWx0U3ViU2V0cz1bezEsIDJ9LCB7MSwgMn0sIHsxfSwgezEsIDJ9XVxuXG4gICAgLy8gZnJvbVxuICAgIC8vXG4gICAgLy8gICAgWygxNywxLFs1ICRdKSwgKDEzLDEsWzUgMTAgJF0pLCAoMjEsMSxbNSAxMCAkXSksICgxMSwxLFskXSksXG4gICAgLy8gICAgICgxMywyLFs1IDEwICRdKSwgKDIxLDIsWzUgMTAgJF0pLCAoMTEsMixbJF0pXVxuICAgIC8vXG4gICAgLy8gSW4gdGhpcyBjYXNlLCAoMTcsMSxbNSAkXSkgaW5kaWNhdGVzIHRoZXJlIGlzIHNvbWUgbmV4dCBzZXF1ZW5jZSB0aGF0XG4gICAgLy8gd291bGQgcmVzb2x2ZSB0aGlzIHdpdGhvdXQgY29uZmxpY3QgdG8gYWx0ZXJuYXRpdmUgMS4gQW55IG90aGVyIHZpYWJsZVxuICAgIC8vIG5leHQgc2VxdWVuY2UsIGhvd2V2ZXIsIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGNvbmZsaWN0LiAgV2Ugc3RvcFxuICAgIC8vIGxvb2tpbmcgZm9yIGlucHV0IGJlY2F1c2Ugbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgYWx0ZXJcbiAgICAvLyB0aGUgZmFjdCB0aGF0IHdlIHNob3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDEuICBXZSBqdXN0IGNhbid0IHNheSBmb3JcbiAgICAvLyBzdXJlIHRoYXQgdGhlcmUgaXMgYW4gYW1iaWd1aXR5IHdpdGhvdXQgbG9va2luZyBmdXJ0aGVyLlxuXG4gICAgdGhpcy5yZXBvcnRBbWJpZ3VpdHkoZGZhLCBELCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCwgZm91bmRFeGFjdEFtYmlnLCBudWxsLCByZWFjaCk7XG5cbiAgICByZXR1cm4gcHJlZGljdGVkQWx0O1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlUmVhY2hTZXQgPSBmdW5jdGlvbihjbG9zdXJlLCB0LCBmdWxsQ3R4KSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJpbiBjb21wdXRlUmVhY2hTZXQsIHN0YXJ0aW5nIGNsb3N1cmU6IFwiICsgY2xvc3VyZSk7XG4gICAgfVxuICAgIGlmKCB0aGlzLm1lcmdlQ2FjaGU9PT1udWxsKSB7XG4gICAgICAgIHRoaXMubWVyZ2VDYWNoZSA9IG5ldyBEb3VibGVEaWN0KCk7XG4gICAgfVxuICAgIHZhciBpbnRlcm1lZGlhdGUgPSBuZXcgQVROQ29uZmlnU2V0KGZ1bGxDdHgpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvbnMgYWxyZWFkeSBpbiBhIHJ1bGUgc3RvcCBzdGF0ZSBpbmRpY2F0ZSByZWFjaGluZyB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIGRlY2lzaW9uIHJ1bGUgKGxvY2FsIGNvbnRleHQpIG9yIGVuZCBvZiB0aGUgc3RhcnQgcnVsZSAoZnVsbFxuICAgIC8vIGNvbnRleHQpLiBPbmNlIHJlYWNoZWQsIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBuZXZlciB1cGRhdGVkIGJ5IGFcbiAgICAvLyBjbG9zdXJlIG9wZXJhdGlvbiwgc28gdGhleSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGZvciB0aGUgcGVyZm9ybWFuY2VcbiAgICAvLyBhZHZhbnRhZ2Ugb2YgaGF2aW5nIGEgc21hbGxlciBpbnRlcm1lZGlhdGUgc2V0IHdoZW4gY2FsbGluZyBjbG9zdXJlLlxuICAgIC8vXG4gICAgLy8gRm9yIGZ1bGwtY29udGV4dCByZWFjaCBvcGVyYXRpb25zLCBzZXBhcmF0ZSBoYW5kbGluZyBpcyByZXF1aXJlZCB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyB0aGUgbG9uZ2VzdCBvdmVyYWxsIHNlcXVlbmNlIGlzXG4gICAgLy8gY2hvc2VuIHdoZW4gbXVsdGlwbGUgc3VjaCBjb25maWd1cmF0aW9ucyBjYW4gbWF0Y2ggdGhlIGlucHV0LlxuXG4gICAgdmFyIHNraXBwZWRTdG9wU3RhdGVzID0gbnVsbDtcblxuICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hlcmUgd2UgY2FuIHJlYWNoIG9uIGlucHV0IHRcbiAgICBmb3IgKHZhciBpPTA7IGk8Y2xvc3VyZS5pdGVtcy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBjID0gY2xvc3VyZS5pdGVtc1tpXTtcbiAgICAgICAgaWYodGhpcy5kZWJ1Z19hZGQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGVzdGluZyBcIiArIHRoaXMuZ2V0VG9rZW5OYW1lKHQpICsgXCIgYXQgXCIgKyBjKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChmdWxsQ3R4IHx8IHQgPT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcz09PW51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZFN0b3BTdGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2tpcHBlZFN0b3BTdGF0ZXMucHVzaChjKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnX2FkZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImFkZGVkIFwiICsgYyArIFwiIHRvIHNraXBwZWRTdG9wU3RhdGVzXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcih2YXIgaj0wO2o8Yy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7aisrKSB7XG4gICAgICAgICAgICB2YXIgdHJhbnMgPSBjLnN0YXRlLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZ2V0UmVhY2hhYmxlVGFyZ2V0KHRyYW5zLCB0KTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQhPT1udWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNmZyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnRhcmdldH0sIGMpO1xuICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZS5hZGQoY2ZnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWdfYWRkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWRkZWQgXCIgKyBjZmcgKyBcIiB0byBpbnRlcm1lZGlhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE5vdyBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWFjaCBvcGVyYXRpb24gY2FuIHRha2UgdXMuLi5cbiAgICB2YXIgcmVhY2ggPSBudWxsO1xuXG4gICAgLy8gVGhpcyBibG9jayBvcHRpbWl6ZXMgdGhlIHJlYWNoIG9wZXJhdGlvbiBmb3IgaW50ZXJtZWRpYXRlIHNldHMgd2hpY2hcbiAgICAvLyB0cml2aWFsbHkgaW5kaWNhdGUgYSB0ZXJtaW5hdGlvbiBzdGF0ZSBmb3IgdGhlIG92ZXJhbGxcbiAgICAvLyBhZGFwdGl2ZVByZWRpY3Qgb3BlcmF0aW9uLlxuICAgIC8vXG4gICAgLy8gVGhlIGNvbmRpdGlvbnMgYXNzdW1lIHRoYXQgaW50ZXJtZWRpYXRlXG4gICAgLy8gY29udGFpbnMgYWxsIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHRoZSByZWFjaCBzZXQsIGJ1dCB0aGlzXG4gICAgLy8gY29uZGl0aW9uIGlzIG5vdCB0cnVlIHdoZW4gb25lIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgaGF2ZSBiZWVuXG4gICAgLy8gd2l0aGhlbGQgaW4gc2tpcHBlZFN0b3BTdGF0ZXMsIG9yIHdoZW4gdGhlIGN1cnJlbnQgc3ltYm9sIGlzIEVPRi5cbiAgICAvL1xuICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcz09PW51bGwgJiYgdCE9PVRva2VuLkVPRikge1xuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlLml0ZW1zLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIC8vIERvbid0IHB1cnN1ZSB0aGUgY2xvc3VyZSBpZiB0aGVyZSBpcyBqdXN0IG9uZSBzdGF0ZS5cbiAgICAgICAgICAgIC8vIEl0IGNhbiBvbmx5IGhhdmUgb25lIGFsdGVybmF0aXZlOyBqdXN0IGFkZCB0byByZXN1bHRcbiAgICAgICAgICAgIC8vIEFsc28gZG9uJ3QgcHVyc3VlIHRoZSBjbG9zdXJlIGlmIHRoZXJlIGlzIHVuaXF1ZSBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgcmVhY2ggPSBpbnRlcm1lZGlhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRVbmlxdWVBbHQoaW50ZXJtZWRpYXRlKSE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIC8vIEFsc28gZG9uJ3QgcHVyc3VlIHRoZSBjbG9zdXJlIGlmIHRoZXJlIGlzIHVuaXF1ZSBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgcmVhY2ggPSBpbnRlcm1lZGlhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHJlYWNoIHNldCBjb3VsZCBub3QgYmUgdHJpdmlhbGx5IGRldGVybWluZWQsIHBlcmZvcm0gYSBjbG9zdXJlXG4gICAgLy8gb3BlcmF0aW9uIG9uIHRoZSBpbnRlcm1lZGlhdGUgc2V0IHRvIGNvbXB1dGUgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAgLy9cbiAgICBpZiAocmVhY2g9PT1udWxsKSB7XG4gICAgICAgIHJlYWNoID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcbiAgICAgICAgdmFyIGNsb3N1cmVCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgdHJlYXRFb2ZBc0Vwc2lsb24gPSB0ID09PSBUb2tlbi5FT0Y7XG4gICAgICAgIGZvciAodmFyIGs9MDsgazxpbnRlcm1lZGlhdGUuaXRlbXMubGVuZ3RoO2srKykge1xuICAgICAgICAgICAgdGhpcy5jbG9zdXJlKGludGVybWVkaWF0ZS5pdGVtc1trXSwgcmVhY2gsIGNsb3N1cmVCdXN5LCBmYWxzZSwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0ID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgLy8gQWZ0ZXIgY29uc3VtaW5nIEVPRiBubyBhZGRpdGlvbmFsIGlucHV0IGlzIHBvc3NpYmxlLCBzbyB3ZSBhcmVcbiAgICAgICAgLy8gb25seSBpbnRlcmVzdGVkIGluIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGVcbiAgICAgICAgLy8gZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHRoZSBzdGFydCBydWxlIChmdWxsXG4gICAgICAgIC8vIGNvbnRleHQpLiBVcGRhdGUgcmVhY2ggdG8gY29udGFpbiBvbmx5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBUaGlzXG4gICAgICAgIC8vIGhhbmRsZXMgYm90aCBleHBsaWNpdCBFT0YgdHJhbnNpdGlvbnMgaW4gdGhlIGdyYW1tYXIgYW5kIGltcGxpY2l0XG4gICAgICAgIC8vIEVPRiB0cmFuc2l0aW9ucyBmb2xsb3dpbmcgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gb3Igc3RhcnQgcnVsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlbiByZWFjaD09aW50ZXJtZWRpYXRlLCBubyBjbG9zdXJlIG9wZXJhdGlvbiB3YXMgcGVyZm9ybWVkLiBJblxuICAgICAgICAvLyB0aGlzIGNhc2UsIHJlbW92ZUFsbENvbmZpZ3NOb3RJblJ1bGVTdG9wU3RhdGUgbmVlZHMgdG8gY2hlY2sgZm9yXG4gICAgICAgIC8vIHJlYWNoYWJsZSBydWxlIHN0b3Agc3RhdGVzIGFzIHdlbGwgYXMgY29uZmlndXJhdGlvbnMgYWxyZWFkeSBpblxuICAgICAgICAvLyBhIHJ1bGUgc3RvcCBzdGF0ZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBpcyBoYW5kbGVkIGJlZm9yZSB0aGUgY29uZmlndXJhdGlvbnMgaW4gc2tpcHBlZFN0b3BTdGF0ZXMsXG4gICAgICAgIC8vIGJlY2F1c2UgYW55IGNvbmZpZ3VyYXRpb25zIHBvdGVudGlhbGx5IGFkZGVkIGZyb20gdGhhdCBsaXN0IGFyZVxuICAgICAgICAvLyBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiB3aGV0aGVyIG9yIG5vdCBpdCdzXG4gICAgICAgIC8vIHJlcXVpcmVkLlxuICAgICAgICAvL1xuICAgICAgICByZWFjaCA9IHRoaXMucmVtb3ZlQWxsQ29uZmlnc05vdEluUnVsZVN0b3BTdGF0ZShyZWFjaCwgcmVhY2ggPT09IGludGVybWVkaWF0ZSk7XG4gICAgfVxuICAgIC8vIElmIHNraXBwZWRTdG9wU3RhdGVzIT09bnVsbCwgdGhlbiBpdCBjb250YWlucyBhdCBsZWFzdCBvbmVcbiAgICAvLyBjb25maWd1cmF0aW9uLiBGb3IgZnVsbC1jb250ZXh0IHJlYWNoIG9wZXJhdGlvbnMsIHRoZXNlXG4gICAgLy8gY29uZmlndXJhdGlvbnMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzdGFydCBydWxlLCBpbiB3aGljaCBjYXNlIHdlXG4gICAgLy8gb25seSBhZGQgdGhlbSBiYWNrIHRvIHJlYWNoIGlmIG5vIGNvbmZpZ3VyYXRpb24gZHVyaW5nIHRoZSBjdXJyZW50XG4gICAgLy8gY2xvc3VyZSBvcGVyYXRpb24gcmVhY2hlZCBzdWNoIGEgc3RhdGUuIFRoaXMgZW5zdXJlcyBhZGFwdGl2ZVByZWRpY3RcbiAgICAvLyBjaG9vc2VzIGFuIGFsdGVybmF0aXZlIG1hdGNoaW5nIHRoZSBsb25nZXN0IG92ZXJhbGwgc2VxdWVuY2Ugd2hlblxuICAgIC8vIG11bHRpcGxlIGFsdGVybmF0aXZlcyBhcmUgdmlhYmxlLlxuICAgIC8vXG4gICAgaWYgKHNraXBwZWRTdG9wU3RhdGVzIT09bnVsbCAmJiAoICghIGZ1bGxDdHgpIHx8ICghIFByZWRpY3Rpb25Nb2RlLmhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZShyZWFjaCkpKSkge1xuICAgICAgICBmb3IgKHZhciBsPTA7IGw8c2tpcHBlZFN0b3BTdGF0ZXMubGVuZ3RoO2wrKykge1xuICAgICAgICAgICAgcmVhY2guYWRkKHNraXBwZWRTdG9wU3RhdGVzW2xdLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZWFjaC5pdGVtcy5sZW5ndGg9PT0wKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWFjaDtcbiAgICB9XG59O1xuLy9cbi8vIFJldHVybiBhIGNvbmZpZ3VyYXRpb24gc2V0IGNvbnRhaW5pbmcgb25seSB0aGUgY29uZmlndXJhdGlvbnMgZnJvbVxuLy8ge0Bjb2RlIGNvbmZpZ3N9IHdoaWNoIGFyZSBpbiBhIHtAbGluayBSdWxlU3RvcFN0YXRlfS4gSWYgYWxsXG4vLyBjb25maWd1cmF0aW9ucyBpbiB7QGNvZGUgY29uZmlnc30gYXJlIGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUsIHRoaXNcbi8vIG1ldGhvZCBzaW1wbHkgcmV0dXJucyB7QGNvZGUgY29uZmlnc30uXG4vL1xuLy8gPHA+V2hlbiB7QGNvZGUgbG9va1RvRW5kT2ZSdWxlfSBpcyB0cnVlLCB0aGlzIG1ldGhvZCB1c2VzXG4vLyB7QGxpbmsgQVROLy9uZXh0VG9rZW5zfSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSB3aGljaCBpc1xuLy8gbm90IGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUgdG8gc2VlIGlmIGEgcnVsZSBzdG9wIHN0YXRlIGlzIHJlYWNoYWJsZVxuLy8gZnJvbSB0aGUgY29uZmlndXJhdGlvbiB2aWEgZXBzaWxvbi1vbmx5IHRyYW5zaXRpb25zLjwvcD5cbi8vXG4vLyBAcGFyYW0gY29uZmlncyB0aGUgY29uZmlndXJhdGlvbiBzZXQgdG8gdXBkYXRlXG4vLyBAcGFyYW0gbG9va1RvRW5kT2ZSdWxlIHdoZW4gdHJ1ZSwgdGhpcyBtZXRob2QgY2hlY2tzIGZvciBydWxlIHN0b3Agc3RhdGVzXG4vLyByZWFjaGFibGUgYnkgZXBzaWxvbi1vbmx5IHRyYW5zaXRpb25zIGZyb20gZWFjaCBjb25maWd1cmF0aW9uIGluXG4vLyB7QGNvZGUgY29uZmlnc30uXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgY29uZmlnc30gaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8gcnVsZSBzdG9wIHN0YXRlLCBvdGhlcndpc2UgcmV0dXJuIGEgbmV3IGNvbmZpZ3VyYXRpb24gc2V0IGNvbnRhaW5pbmcgb25seVxuLy8gdGhlIGNvbmZpZ3VyYXRpb25zIGZyb20ge0Bjb2RlIGNvbmZpZ3N9IHdoaWNoIGFyZSBpbiBhIHJ1bGUgc3RvcCBzdGF0ZVxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVtb3ZlQWxsQ29uZmlnc05vdEluUnVsZVN0b3BTdGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZ3MsIGxvb2tUb0VuZE9mUnVsZSkge1xuICAgIGlmIChQcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyhjb25maWdzKSkge1xuICAgICAgICByZXR1cm4gY29uZmlncztcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmIChjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgICAgICByZXN1bHQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb29rVG9FbmRPZlJ1bGUgJiYgY29uZmlnLnN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBuZXh0VG9rZW5zID0gdGhpcy5hdG4ubmV4dFRva2Vucyhjb25maWcuc3RhdGUpO1xuICAgICAgICAgICAgaWYgKG5leHRUb2tlbnMuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW5kT2ZSdWxlU3RhdGUgPSB0aGlzLmF0bi5ydWxlVG9TdG9wU3RhdGVbY29uZmlnLnN0YXRlLnJ1bGVJbmRleF07XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChuZXcgQVROQ29uZmlnKHtzdGF0ZTplbmRPZlJ1bGVTdGF0ZX0sIGNvbmZpZyksIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwLCBjdHgsIGZ1bGxDdHgpIHtcbiAgICAvLyBhbHdheXMgYXQgbGVhc3QgdGhlIGltcGxpY2l0IGNhbGwgdG8gc3RhcnQgcnVsZVxuICAgIHZhciBpbml0aWFsQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0KHRoaXMuYXRuLCBjdHgpO1xuICAgIHZhciBjb25maWdzID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDtpPHAudHJhbnNpdGlvbnMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gcC50cmFuc2l0aW9uc1tpXS50YXJnZXQ7XG4gICAgICAgIHZhciBjID0gbmV3IEFUTkNvbmZpZyh7IHN0YXRlOnRhcmdldCwgYWx0OmkrMSwgY29udGV4dDppbml0aWFsQ29udGV4dCB9LCBudWxsKTtcbiAgICAgICAgdmFyIGNsb3N1cmVCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLmNsb3N1cmUoYywgY29uZmlncywgY2xvc3VyZUJ1c3ksIHRydWUsIGZ1bGxDdHgsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ3M7XG59O1xuXG4vL1xuLy8gVGhpcyBtZXRob2QgdHJhbnNmb3JtcyB0aGUgc3RhcnQgc3RhdGUgY29tcHV0ZWQgYnlcbi8vIHtAbGluayAvL2NvbXB1dGVTdGFydFN0YXRlfSB0byB0aGUgc3BlY2lhbCBzdGFydCBzdGF0ZSB1c2VkIGJ5IGFcbi8vIHByZWNlZGVuY2UgREZBIGZvciBhIHBhcnRpY3VsYXIgcHJlY2VkZW5jZSB2YWx1ZS4gVGhlIHRyYW5zZm9ybWF0aW9uXG4vLyBwcm9jZXNzIGFwcGxpZXMgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIHRoZSBzdGFydCBzdGF0ZSdzIGNvbmZpZ3VyYXRpb25cbi8vIHNldC5cbi8vXG4vLyA8b2w+XG4vLyA8bGk+RXZhbHVhdGUgdGhlIHByZWNlZGVuY2UgcHJlZGljYXRlcyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIHVzaW5nXG4vLyB7QGxpbmsgU2VtYW50aWNDb250ZXh0Ly9ldmFsUHJlY2VkZW5jZX0uPC9saT5cbi8vIDxsaT5SZW1vdmUgYWxsIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHByZWRpY3QgYW4gYWx0ZXJuYXRpdmUgZ3JlYXRlciB0aGFuXG4vLyAxLCBmb3Igd2hpY2ggYW5vdGhlciBjb25maWd1cmF0aW9uIHRoYXQgcHJlZGljdHMgYWx0ZXJuYXRpdmUgMSBpcyBpbiB0aGVcbi8vIHNhbWUgQVROIHN0YXRlIHdpdGggdGhlIHNhbWUgcHJlZGljdGlvbiBjb250ZXh0LiBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzXG4vLyB2YWxpZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxuLy8gPHVsPlxuLy8gPGxpPlRoZSBjbG9zdXJlIGJsb2NrIGNhbm5vdCBjb250YWluIGFueSBlcHNpbG9uIHRyYW5zaXRpb25zIHdoaWNoIGJ5cGFzc1xuLy8gdGhlIGJvZHkgb2YgdGhlIGNsb3N1cmUsIHNvIGFsbCBzdGF0ZXMgcmVhY2hhYmxlIHZpYSBhbHRlcm5hdGl2ZSAxIGFyZVxuLy8gcGFydCBvZiB0aGUgcHJlY2VkZW5jZSBhbHRlcm5hdGl2ZXMgb2YgdGhlIHRyYW5zZm9ybWVkIGxlZnQtcmVjdXJzaXZlXG4vLyBydWxlLjwvbGk+XG4vLyA8bGk+VGhlIFwicHJpbWFyeVwiIHBvcnRpb24gb2YgYSBsZWZ0IHJlY3Vyc2l2ZSBydWxlIGNhbm5vdCBjb250YWluIGFuXG4vLyBlcHNpbG9uIHRyYW5zaXRpb24sIHNvIHRoZSBvbmx5IHdheSBhbiBhbHRlcm5hdGl2ZSBvdGhlciB0aGFuIDEgY2FuIGV4aXN0XG4vLyBpbiBhIHN0YXRlIHRoYXQgaXMgYWxzbyByZWFjaGFibGUgdmlhIGFsdGVybmF0aXZlIDEgaXMgYnkgbmVzdGluZyBjYWxsc1xuLy8gdG8gdGhlIGxlZnQtcmVjdXJzaXZlIHJ1bGUsIHdpdGggdGhlIG91dGVyIGNhbGxzIG5vdCBiZWluZyBhdCB0aGVcbi8vIHByZWZlcnJlZCBwcmVjZWRlbmNlIGxldmVsLjwvbGk+XG4vLyA8L3VsPlxuLy8gPC9saT5cbi8vIDwvb2w+XG4vL1xuLy8gPHA+XG4vLyBUaGUgcHJlZGljdGlvbiBjb250ZXh0IG11c3QgYmUgY29uc2lkZXJlZCBieSB0aGlzIGZpbHRlciB0byBhZGRyZXNzXG4vLyBzaXR1YXRpb25zIGxpa2UgdGhlIGZvbGxvd2luZy5cbi8vIDwvcD5cbi8vIDxjb2RlPlxuLy8gPHByZT5cbi8vIGdyYW1tYXIgVEE7XG4vLyBwcm9nOiBzdGF0ZW1lbnQqIEVPRjtcbi8vIHN0YXRlbWVudDogbGV0dGVyQSB8IHN0YXRlbWVudCBsZXR0ZXJBICdiJyA7XG4vLyBsZXR0ZXJBOiAnYSc7XG4vLyA8L3ByZT5cbi8vIDwvY29kZT5cbi8vIDxwPlxuLy8gSWYgdGhlIGFib3ZlIGdyYW1tYXIsIHRoZSBBVE4gc3RhdGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSB0b2tlblxuLy8gcmVmZXJlbmNlIHtAY29kZSAnYSd9IGluIHtAY29kZSBsZXR0ZXJBfSBpcyByZWFjaGFibGUgZnJvbSB0aGUgbGVmdCBlZGdlXG4vLyBvZiBib3RoIHRoZSBwcmltYXJ5IGFuZCBjbG9zdXJlIGJsb2NrcyBvZiB0aGUgbGVmdC1yZWN1cnNpdmUgcnVsZVxuLy8ge0Bjb2RlIHN0YXRlbWVudH0uIFRoZSBwcmVkaWN0aW9uIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhlc2Vcbi8vIGNvbmZpZ3VyYXRpb25zIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0aGVtLCBhbmQgcHJldmVudHMgdGhlIGFsdGVybmF0aXZlXG4vLyB3aGljaCBzdGVwcGVkIG91dCB0byB7QGNvZGUgcHJvZ30gKGFuZCB0aGVuIGJhY2sgaW4gdG8ge0Bjb2RlIHN0YXRlbWVudH1cbi8vIGZyb20gYmVpbmcgZWxpbWluYXRlZCBieSB0aGUgZmlsdGVyLlxuLy8gPC9wPlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBjb25maWd1cmF0aW9uIHNldCBjb21wdXRlZCBieVxuLy8ge0BsaW5rIC8vY29tcHV0ZVN0YXJ0U3RhdGV9IGFzIHRoZSBzdGFydCBzdGF0ZSBmb3IgdGhlIERGQS5cbi8vIEByZXR1cm4gVGhlIHRyYW5zZm9ybWVkIGNvbmZpZ3VyYXRpb24gc2V0IHJlcHJlc2VudGluZyB0aGUgc3RhcnQgc3RhdGVcbi8vIGZvciBhIHByZWNlZGVuY2UgREZBIGF0IGEgcGFydGljdWxhciBwcmVjZWRlbmNlIGxldmVsIChkZXRlcm1pbmVkIGJ5XG4vLyBjYWxsaW5nIHtAbGluayBQYXJzZXIvL2dldFByZWNlZGVuY2V9KS5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFwcGx5UHJlY2VkZW5jZUZpbHRlciA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0dmFyIGNvbmZpZztcblx0dmFyIHN0YXRlc0Zyb21BbHQxID0gW107XG4gICAgdmFyIGNvbmZpZ1NldCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIC8vIGhhbmRsZSBhbHQgMSBmaXJzdFxuICAgICAgICBpZiAoY29uZmlnLmFsdCAhPT0gMSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVwZGF0ZWRDb250ZXh0ID0gY29uZmlnLnNlbWFudGljQ29udGV4dC5ldmFsUHJlY2VkZW5jZSh0aGlzLnBhcnNlciwgdGhpcy5fb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgaWYgKHVwZGF0ZWRDb250ZXh0PT09bnVsbCkge1xuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZ3VyYXRpb24gd2FzIGVsaW1pbmF0ZWRcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlc0Zyb21BbHQxW2NvbmZpZy5zdGF0ZS5zdGF0ZU51bWJlcl0gPSBjb25maWcuY29udGV4dDtcbiAgICAgICAgaWYgKHVwZGF0ZWRDb250ZXh0ICE9PSBjb25maWcuc2VtYW50aWNDb250ZXh0KSB7XG4gICAgICAgICAgICBjb25maWdTZXQuYWRkKG5ldyBBVE5Db25maWcoe3NlbWFudGljQ29udGV4dDp1cGRhdGVkQ29udGV4dH0sIGNvbmZpZyksIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdTZXQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IoaT0wOyBpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uZmlnID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGNvbmZpZy5hbHQgPT09IDEpIHtcbiAgICAgICAgICAgIC8vIGFscmVhZHkgaGFuZGxlZFxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW4gdGhlIGZ1dHVyZSwgdGhpcyBlbGltaW5hdGlvbiBzdGVwIGNvdWxkIGJlIHVwZGF0ZWQgdG8gYWxzb1xuICAgICAgICAvLyBmaWx0ZXIgdGhlIHByZWRpY3Rpb24gY29udGV4dCBmb3IgYWx0ZXJuYXRpdmVzIHByZWRpY3RpbmcgYWx0PjFcbiAgICAgICAgLy8gKGJhc2ljYWxseSBhIGdyYXBoIHN1YnRyYWN0aW9uIGFsZ29yaXRobSkuXG5cdFx0aWYgKCFjb25maWcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gc3RhdGVzRnJvbUFsdDFbY29uZmlnLnN0YXRlLnN0YXRlTnVtYmVyXSB8fCBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbnRleHQhPT1udWxsICYmIGNvbnRleHQuZXF1YWxzKGNvbmZpZy5jb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZWRcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblx0XHR9XG4gICAgICAgIGNvbmZpZ1NldC5hZGQoY29uZmlnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnU2V0O1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSZWFjaGFibGVUYXJnZXQgPSBmdW5jdGlvbih0cmFucywgdHR5cGUpIHtcbiAgICBpZiAodHJhbnMubWF0Y2hlcyh0dHlwZSwgMCwgdGhpcy5hdG4ubWF4VG9rZW5UeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJhbnMudGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UHJlZHNGb3JBbWJpZ0FsdHMgPSBmdW5jdGlvbihhbWJpZ0FsdHMsIGNvbmZpZ3MsIG5hbHRzKSB7XG4gICAgLy8gUkVBQ0g9WzF8MXxbXXwwOjAsIDF8MnxbXXwwOjFdXG4gICAgLy8gYWx0VG9QcmVkIHN0YXJ0cyBhcyBhbiBhcnJheSBvZiBhbGwgbnVsbCBjb250ZXh0cy4gVGhlIGVudHJ5IGF0IGluZGV4IGlcbiAgICAvLyBjb3JyZXNwb25kcyB0byBhbHRlcm5hdGl2ZSBpLiBhbHRUb1ByZWRbaV0gbWF5IGhhdmUgb25lIG9mIHRocmVlIHZhbHVlczpcbiAgICAvLyAgIDEuIG51bGw6IG5vIEFUTkNvbmZpZyBjIGlzIGZvdW5kIHN1Y2ggdGhhdCBjLmFsdD09aVxuICAgIC8vICAgMi4gU2VtYW50aWNDb250ZXh0Lk5PTkU6IEF0IGxlYXN0IG9uZSBBVE5Db25maWcgYyBleGlzdHMgc3VjaCB0aGF0XG4gICAgLy8gICAgICBjLmFsdD09aSBhbmQgYy5zZW1hbnRpY0NvbnRleHQ9PVNlbWFudGljQ29udGV4dC5OT05FLiBJbiBvdGhlciB3b3JkcyxcbiAgICAvLyAgICAgIGFsdCBpIGhhcyBhdCBsZWFzdCBvbmUgdW5wcmVkaWNhdGVkIGNvbmZpZy5cbiAgICAvLyAgIDMuIE5vbi1OT05FIFNlbWFudGljIENvbnRleHQ6IFRoZXJlIGV4aXN0cyBhdCBsZWFzdCBvbmUsIGFuZCBmb3IgYWxsXG4gICAgLy8gICAgICBBVE5Db25maWcgYyBzdWNoIHRoYXQgYy5hbHQ9PWksIGMuc2VtYW50aWNDb250ZXh0IT1TZW1hbnRpY0NvbnRleHQuTk9ORS5cbiAgICAvL1xuICAgIC8vIEZyb20gdGhpcywgaXQgaXMgY2xlYXIgdGhhdCBOT05FfHxhbnl0aGluZz09Tk9ORS5cbiAgICAvL1xuICAgIHZhciBhbHRUb1ByZWQgPSBbXTtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmKGFtYmlnQWx0cy5jb250YWlucyggYy5hbHQgKSkge1xuICAgICAgICAgICAgYWx0VG9QcmVkW2MuYWx0XSA9IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQoYWx0VG9QcmVkW2MuYWx0XSB8fCBudWxsLCBjLnNlbWFudGljQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG5QcmVkQWx0cyA9IDA7XG4gICAgZm9yIChpID0xO2k8IG5hbHRzKzE7aSsrKSB7XG4gICAgICAgIHZhciBwcmVkID0gYWx0VG9QcmVkW2ldIHx8IG51bGw7XG4gICAgICAgIGlmIChwcmVkPT09bnVsbCkge1xuICAgICAgICAgICAgYWx0VG9QcmVkW2ldID0gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJlZCAhPT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcbiAgICAgICAgICAgIG5QcmVkQWx0cyArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vbmFtYmlnIGFsdHMgYXJlIG51bGwgaW4gYWx0VG9QcmVkXG4gICAgaWYgKG5QcmVkQWx0cz09PTApIHtcbiAgICAgICAgYWx0VG9QcmVkID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcmVkc0ZvckFtYmlnQWx0cyByZXN1bHQgXCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKGFsdFRvUHJlZCkpO1xuICAgIH1cbiAgICByZXR1cm4gYWx0VG9QcmVkO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRQcmVkaWNhdGVQcmVkaWN0aW9ucyA9IGZ1bmN0aW9uKGFtYmlnQWx0cywgYWx0VG9QcmVkKSB7XG4gICAgdmFyIHBhaXJzID0gW107XG4gICAgdmFyIGNvbnRhaW5zUHJlZGljYXRlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaT0xOyBpPGFsdFRvUHJlZC5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBwcmVkID0gYWx0VG9QcmVkW2ldO1xuICAgICAgICAvLyB1bnByZWRpY2F0ZWQgaXMgaW5kaWNhdGVkIGJ5IFNlbWFudGljQ29udGV4dC5OT05FXG4gICAgICAgIGlmKCBhbWJpZ0FsdHMhPT1udWxsICYmIGFtYmlnQWx0cy5jb250YWlucyggaSApKSB7XG4gICAgICAgICAgICBwYWlycy5wdXNoKG5ldyBQcmVkUHJlZGljdGlvbihwcmVkLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICBjb250YWluc1ByZWRpY2F0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEgY29udGFpbnNQcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGltcHJvdmUgdGhlIGxvY2FsaXphdGlvbiBvZiBlcnJvciBtZXNzYWdlcyBieVxuLy8gY2hvb3NpbmcgYW4gYWx0ZXJuYXRpdmUgcmF0aGVyIHRoYW4gdGhyb3dpbmcgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSBpbiBwYXJ0aWN1bGFyIHByZWRpY3Rpb24gc2NlbmFyaW9zIHdoZXJlIHRoZVxuLy8ge0BsaW5rIC8vRVJST1J9IHN0YXRlIHdhcyByZWFjaGVkIGR1cmluZyBBVE4gc2ltdWxhdGlvbi5cbi8vXG4vLyA8cD5cbi8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHVzZXMgdGhlIGZvbGxvd2luZ1xuLy8gYWxnb3JpdGhtIHRvIGlkZW50aWZ5IGFuIEFUTiBjb25maWd1cmF0aW9uIHdoaWNoIHN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlXG4vLyBkZWNpc2lvbiBlbnRyeSBydWxlLiBDaG9vc2luZyBzdWNoIGFuIGFsdGVybmF0aXZlIGVuc3VyZXMgdGhhdCB0aGVcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dH0gcmV0dXJuZWQgYnkgdGhlIGNhbGxpbmcgcnVsZSB3aWxsIGJlIGNvbXBsZXRlXG4vLyBhbmQgdmFsaWQsIGFuZCB0aGUgc3ludGF4IGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgbGF0ZXIgYXQgYSBtb3JlXG4vLyBsb2NhbGl6ZWQgbG9jYXRpb24uPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT5JZiBhIHN5bnRhY3RpY2FsbHkgdmFsaWQgcGF0aCBvciBwYXRocyByZWFjaCB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIGFuZFxuLy8gdGhleSBhcmUgc2VtYW50aWNhbGx5IHZhbGlkIGlmIHByZWRpY2F0ZWQsIHJldHVybiB0aGUgbWluIGFzc29jaWF0ZWQgYWx0LjwvbGk+XG4vLyA8bGk+RWxzZSwgaWYgYSBzZW1hbnRpY2FsbHkgaW52YWxpZCBidXQgc3ludGFjdGljYWxseSB2YWxpZCBwYXRoIGV4aXN0XG4vLyBvciBwYXRocyBleGlzdCwgcmV0dXJuIHRoZSBtaW5pbXVtIGFzc29jaWF0ZWQgYWx0LlxuLy8gPC9saT5cbi8vIDxsaT5PdGhlcndpc2UsIHJldHVybiB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LjwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIDxwPlxuLy8gSW4gc29tZSBzY2VuYXJpb3MsIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGFib3ZlIGNvdWxkIHByZWRpY3QgYW5cbi8vIGFsdGVybmF0aXZlIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0gaW5cbi8vIHRoZSBwYXJzZXIuIFNwZWNpZmljYWxseSwgdGhpcyBjb3VsZCBvY2N1ciBpZiB0aGUgPGVtPm9ubHk8L2VtPiBjb25maWd1cmF0aW9uXG4vLyBjYXBhYmxlIG9mIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGRlY2lzaW9uIHJ1bGUgaXNcbi8vIGJsb2NrZWQgYnkgYSBzZW1hbnRpYyBwcmVkaWNhdGUuIEJ5IGNob29zaW5nIHRoaXMgYWx0ZXJuYXRpdmUgd2l0aGluXG4vLyB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9IGluc3RlYWQgb2YgdGhyb3dpbmcgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSwgdGhlIHJlc3VsdGluZ1xuLy8ge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0gaW4gdGhlIHBhcnNlciB3aWxsIGlkZW50aWZ5IHRoZSBzcGVjaWZpY1xuLy8gcHJlZGljYXRlIHdoaWNoIGlzIHByZXZlbnRpbmcgdGhlIHBhcnNlciBmcm9tIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRoZVxuLy8gZGVjaXNpb24gcnVsZSwgd2hpY2ggaGVscHMgZGV2ZWxvcGVycyBpZGVudGlmeSBhbmQgY29ycmVjdCBsb2dpYyBlcnJvcnNcbi8vIGluIHNlbWFudGljIHByZWRpY2F0ZXMuXG4vLyA8L3A+XG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgVGhlIEFUTiBjb25maWd1cmF0aW9ucyB3aGljaCB3ZXJlIHZhbGlkIGltbWVkaWF0ZWx5IGJlZm9yZVxuLy8gdGhlIHtAbGluayAvL0VSUk9SfSBzdGF0ZSB3YXMgcmVhY2hlZFxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgaXMgdGhlIFxcZ2FtbWFfMCBpbml0aWFsIHBhcnNlciBjb250ZXh0IGZyb20gdGhlIHBhcGVyXG4vLyBvciB0aGUgcGFyc2VyIHN0YWNrIGF0IHRoZSBpbnN0YW50IGJlZm9yZSBwcmVkaWN0aW9uIGNvbW1lbmNlcy5cbi8vXG4vLyBAcmV0dXJuIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9LCBvclxuLy8ge0BsaW5rIEFUTi8vSU5WQUxJRF9BTFRfTlVNQkVSfSBpZiBhIHN1aXRhYmxlIGFsdGVybmF0aXZlIHdhcyBub3Rcbi8vIGlkZW50aWZpZWQgYW5kIHtAbGluayAvL2FkYXB0aXZlUHJlZGljdH0gc2hvdWxkIHJlcG9ydCBhbiBlcnJvciBpbnN0ZWFkLlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0U3luVmFsaWRPclNlbUludmFsaWRBbHRUaGF0RmluaXNoZWREZWNpc2lvbkVudHJ5UnVsZSA9IGZ1bmN0aW9uKGNvbmZpZ3MsIG91dGVyQ29udGV4dCkge1xuICAgIHZhciBjZmdzID0gdGhpcy5zcGxpdEFjY29yZGluZ1RvU2VtYW50aWNWYWxpZGl0eShjb25maWdzLCBvdXRlckNvbnRleHQpO1xuICAgIHZhciBzZW1WYWxpZENvbmZpZ3MgPSBjZmdzWzBdO1xuICAgIHZhciBzZW1JbnZhbGlkQ29uZmlncyA9IGNmZ3NbMV07XG4gICAgdmFyIGFsdCA9IHRoaXMuZ2V0QWx0VGhhdEZpbmlzaGVkRGVjaXNpb25FbnRyeVJ1bGUoc2VtVmFsaWRDb25maWdzKTtcbiAgICBpZiAoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikgeyAvLyBzZW1hbnRpY2FsbHkvc3ludGFjdGljYWxseSB2aWFibGUgcGF0aCBleGlzdHNcbiAgICAgICAgcmV0dXJuIGFsdDtcbiAgICB9XG4gICAgLy8gSXMgdGhlcmUgYSBzeW50YWN0aWNhbGx5IHZhbGlkIHBhdGggd2l0aCBhIGZhaWxlZCBwcmVkP1xuICAgIGlmIChzZW1JbnZhbGlkQ29uZmlncy5pdGVtcy5sZW5ndGg+MCkge1xuICAgICAgICBhbHQgPSB0aGlzLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHNlbUludmFsaWRDb25maWdzKTtcbiAgICAgICAgaWYgKGFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHsgLy8gc3ludGFjdGljYWxseSB2aWFibGUgcGF0aCBleGlzdHNcbiAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBhbHRzID0gW107XG4gICAgZm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGMucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+MCB8fCAoKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSAmJiBjLmNvbnRleHQuaGFzRW1wdHlQYXRoKCkpKSB7XG4gICAgICAgICAgICBpZihhbHRzLmluZGV4T2YoYy5hbHQpPDApIHtcbiAgICAgICAgICAgICAgICBhbHRzLnB1c2goYy5hbHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhbHRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KG51bGwsIGFsdHMpO1xuICAgIH1cbn07XG4vLyBXYWxrIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIGFuZCBzcGxpdCB0aGVtIGFjY29yZGluZyB0b1xuLy8gIHRob3NlIHRoYXQgaGF2ZSBwcmVkcyBldmFsdWF0aW5nIHRvIHRydWUvZmFsc2UuICBJZiBubyBwcmVkLCBhc3N1bWVcbi8vICB0cnVlIHByZWQgYW5kIGluY2x1ZGUgaW4gc3VjY2VlZGVkIHNldC4gIFJldHVybnMgUGFpciBvZiBzZXRzLlxuLy9cbi8vICBDcmVhdGUgYSBuZXcgc2V0IHNvIGFzIG5vdCB0byBhbHRlciB0aGUgaW5jb21pbmcgcGFyYW1ldGVyLlxuLy9cbi8vICBBc3N1bXB0aW9uOiB0aGUgaW5wdXQgc3RyZWFtIGhhcyBiZWVuIHJlc3RvcmVkIHRvIHRoZSBzdGFydGluZyBwb2ludFxuLy8gIHByZWRpY3Rpb24sIHdoaWNoIGlzIHdoZXJlIHByZWRpY2F0ZXMgbmVlZCB0byBldmFsdWF0ZS5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnNwbGl0QWNjb3JkaW5nVG9TZW1hbnRpY1ZhbGlkaXR5ID0gZnVuY3Rpb24oIGNvbmZpZ3MsIG91dGVyQ29udGV4dCkge1xuICAgIHZhciBzdWNjZWVkZWQgPSBuZXcgQVROQ29uZmlnU2V0KGNvbmZpZ3MuZnVsbEN0eCk7XG4gICAgdmFyIGZhaWxlZCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYy5zZW1hbnRpY0NvbnRleHQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICB2YXIgcHJlZGljYXRlRXZhbHVhdGlvblJlc3VsdCA9IGMuc2VtYW50aWNDb250ZXh0LmV2YWx1YXRlKHRoaXMucGFyc2VyLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBzdWNjZWVkZWQuYWRkKGMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmYWlsZWQuYWRkKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VjY2VlZGVkLmFkZChjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3N1Y2NlZWRlZCwgZmFpbGVkXTtcbn07XG5cbi8vIExvb2sgdGhyb3VnaCBhIGxpc3Qgb2YgcHJlZGljYXRlL2FsdCBwYWlycywgcmV0dXJuaW5nIGFsdHMgZm9yIHRoZVxuLy8gIHBhaXJzIHRoYXQgd2luLiBBIHtAY29kZSBOT05FfSBwcmVkaWNhdGUgaW5kaWNhdGVzIGFuIGFsdCBjb250YWluaW5nIGFuXG4vLyAgdW5wcmVkaWNhdGVkIGNvbmZpZyB3aGljaCBiZWhhdmVzIGFzIFwiYWx3YXlzIHRydWUuXCIgSWYgIWNvbXBsZXRlXG4vLyAgdGhlbiB3ZSBzdG9wIGF0IHRoZSBmaXJzdCBwcmVkaWNhdGUgdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZS4gVGhpc1xuLy8gIGluY2x1ZGVzIHBhaXJzIHdpdGggbnVsbCBwcmVkaWNhdGVzLlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZXZhbFNlbWFudGljQ29udGV4dCA9IGZ1bmN0aW9uKHByZWRQcmVkaWN0aW9ucywgb3V0ZXJDb250ZXh0LCBjb21wbGV0ZSkge1xuICAgIHZhciBwcmVkaWN0aW9ucyA9IG5ldyBCaXRTZXQoKTtcbiAgICBmb3IodmFyIGk9MDtpPHByZWRQcmVkaWN0aW9ucy5sZW5ndGg7aSsrKSB7XG4gICAgXHR2YXIgcGFpciA9IHByZWRQcmVkaWN0aW9uc1tpXTtcbiAgICAgICAgaWYgKHBhaXIucHJlZCA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcbiAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZChwYWlyLmFsdCk7XG4gICAgICAgICAgICBpZiAoISBjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQgPSBwYWlyLnByZWQuZXZhbHVhdGUodGhpcy5wYXJzZXIsIG91dGVyQ29udGV4dCk7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGZhX2RlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImV2YWwgcHJlZCBcIiArIHBhaXIgKyBcIj1cIiArIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkaWNhdGVFdmFsdWF0aW9uUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRmYV9kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUFJFRElDVCBcIiArIHBhaXIuYWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZChwYWlyLmFsdCk7XG4gICAgICAgICAgICBpZiAoISBjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVkaWN0aW9ucztcbn07XG5cbi8vIFRPRE86IElmIHdlIGFyZSBkb2luZyBwcmVkaWNhdGVzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBwdXJzdWluZ1xuLy8gICAgIGNsb3N1cmUgb3BlcmF0aW9ucyBpZiB3ZSByZWFjaCBhIERGQSBzdGF0ZSB0aGF0IHVuaXF1ZWx5IHByZWRpY3RzXG4vLyAgICAgYWx0ZXJuYXRpdmUuIFdlIHdpbGwgbm90IGJlIGNhY2hpbmcgdGhhdCBERkEgc3RhdGUgYW5kIGl0IGlzIGFcbi8vICAgICB3YXN0ZSB0byBwdXJzdWUgdGhlIGNsb3N1cmUuIE1pZ2h0IGhhdmUgdG8gYWR2YW5jZSB3aGVuIHdlIGRvXG4vLyAgICAgYW1iaWcgZGV0ZWN0aW9uIHRob3VnaHQgOihcbi8vXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZSA9IGZ1bmN0aW9uKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCB0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgIHZhciBpbml0aWFsRGVwdGggPSAwO1xuICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ3R4LCBpbml0aWFsRGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbn07XG5cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jbG9zdXJlQ2hlY2tpbmdTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgaWYgKHRoaXMuZGVidWcgfHwgdGhpcy5kZWJ1Z19jbG9zdXJlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2xvc3VyZShcIiArIGNvbmZpZy50b1N0cmluZyh0aGlzLnBhcnNlcix0cnVlKSArIFwiKVwiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb25maWdzKFwiICsgY29uZmlncy50b1N0cmluZygpICsgXCIpXCIpO1xuICAgICAgICBpZihjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+NTApIHtcbiAgICAgICAgICAgIHRocm93IFwicHJvYmxlbVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgIC8vIFdlIGhpdCBydWxlIGVuZC4gSWYgd2UgaGF2ZSBjb250ZXh0IGluZm8sIHVzZSBpdFxuICAgICAgICAvLyBydW4gdGhydSBhbGwgcG9zc2libGUgc3RhY2sgdG9wcyBpbiBjdHhcbiAgICAgICAgaWYgKCEgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBmb3IgKCB2YXIgaSA9MDsgaTxjb25maWcuY29udGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdWxsQ3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzLmFkZChuZXcgQVROQ29uZmlnKHtzdGF0ZTpjb25maWcuc3RhdGUsIGNvbnRleHQ6UHJlZGljdGlvbkNvbnRleHQuRU1QVFl9LCBjb25maWcpLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIG5vIGNvbnRleHQgaW5mbywganVzdCBjaGFzZSBmb2xsb3cgbGlua3MgKGlmIGdyZWVkeSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUxMSU5HIG9mZiBydWxlIFwiICsgdGhpcy5nZXRSdWxlTmFtZShjb25maWcuc3RhdGUucnVsZUluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3N1cmVfKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJldHVyblN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW2NvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpXTtcbiAgICAgICAgICAgICAgICB2YXIgbmV3Q29udGV4dCA9IGNvbmZpZy5jb250ZXh0LmdldFBhcmVudChpKTsgLy8gXCJwb3BcIiByZXR1cm4gc3RhdGVcbiAgICAgICAgICAgICAgICB2YXIgcGFybXMgPSB7c3RhdGU6cmV0dXJuU3RhdGUsIGFsdDpjb25maWcuYWx0LCBjb250ZXh0Om5ld0NvbnRleHQsIHNlbWFudGljQ29udGV4dDpjb25maWcuc2VtYW50aWNDb250ZXh0fTtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IG5ldyBBVE5Db25maWcocGFybXMsIG51bGwpO1xuICAgICAgICAgICAgICAgIC8vIFdoaWxlIHdlIGhhdmUgY29udGV4dCB0byBwb3AgYmFjayBmcm9tLCB3ZSBtYXkgaGF2ZVxuICAgICAgICAgICAgICAgIC8vIGdvdHRlbiB0aGF0IGNvbnRleHQgQUZURVIgaGF2aW5nIGZhbGxpbmcgb2ZmIGEgcnVsZS5cbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgdHJhY2sgdGhhdCB3ZSBhcmUgbm93IG91dCBvZiBjb250ZXh0LlxuICAgICAgICAgICAgICAgIGMucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSBjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zdXJlQ2hlY2tpbmdTdG9wU3RhdGUoYywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCBkZXB0aCAtIDEsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmKCBmdWxsQ3R4KSB7XG4gICAgICAgICAgICAvLyByZWFjaGVkIGVuZCBvZiBzdGFydCBydWxlXG4gICAgICAgICAgICBjb25maWdzLmFkZChjb25maWcsIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbHNlIGlmIHdlIGhhdmUgbm8gY29udGV4dCBpbmZvLCBqdXN0IGNoYXNlIGZvbGxvdyBsaW5rcyAoaWYgZ3JlZWR5KVxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBTExJTkcgb2ZmIHJ1bGUgXCIgKyB0aGlzLmdldFJ1bGVOYW1lKGNvbmZpZy5zdGF0ZS5ydWxlSW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsb3N1cmVfKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCBkZXB0aCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xufTtcblxuXG4vLyBEbyB0aGUgYWN0dWFsIHdvcmsgb2Ygd2Fsa2luZyBlcHNpbG9uIGVkZ2VzLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZV8gPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgdmFyIHAgPSBjb25maWcuc3RhdGU7XG4gICAgLy8gb3B0aW1pemF0aW9uXG4gICAgaWYgKCEgcC5lcHNpbG9uT25seVRyYW5zaXRpb25zKSB7XG4gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIG5vdCByZXR1cm4gaGVyZSwgYmVjYXVzZSBFT0YgdHJhbnNpdGlvbnMgY2FuIGFjdCBhc1xuICAgICAgICAvLyBib3RoIGVwc2lsb24gdHJhbnNpdGlvbnMgYW5kIG5vbi1lcHNpbG9uIHRyYW5zaXRpb25zLlxuICAgIH1cbiAgICBmb3IodmFyIGkgPSAwO2k8cC50cmFuc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZihpPT0wICYmIHRoaXMuY2FuRHJvcExvb3BFbnRyeUVkZ2VJbkxlZnRSZWN1cnNpdmVSdWxlKGNvbmZpZykpXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB2YXIgdCA9IHAudHJhbnNpdGlvbnNbaV07XG4gICAgICAgIHZhciBjb250aW51ZUNvbGxlY3RpbmcgPSBjb2xsZWN0UHJlZGljYXRlcyAmJiAhKHQgaW5zdGFuY2VvZiBBY3Rpb25UcmFuc2l0aW9uKTtcbiAgICAgICAgdmFyIGMgPSB0aGlzLmdldEVwc2lsb25UYXJnZXQoY29uZmlnLCB0LCBjb250aW51ZUNvbGxlY3RpbmcsIGRlcHRoID09PSAwLCBmdWxsQ3R4LCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgIGlmIChjIT09bnVsbCkge1xuICAgICAgICAgICAgdmFyIG5ld0RlcHRoID0gZGVwdGg7XG4gICAgICAgICAgICBpZiAoIGNvbmZpZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyB0YXJnZXQgZmVsbCBvZmYgZW5kIG9mIHJ1bGU7IG1hcmsgcmVzdWx0aW5nIGMgYXMgaGF2aW5nIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBnZXQgaGVyZSBpZiBpbmNvbWluZyBjb25maWcgd2FzIHJ1bGUgc3RvcCBhbmQgd2UgaGFkIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyB0cmFjayBob3cgZmFyIHdlIGRpcCBpbnRvIG91dGVyIGNvbnRleHQuICBNaWdodFxuICAgICAgICAgICAgICAgIC8vIGNvbWUgaW4gaGFuZHkgYW5kIHdlIGF2b2lkIGV2YWx1YXRpbmcgY29udGV4dCBkZXBlbmRlbnRcbiAgICAgICAgICAgICAgICAvLyBwcmVkcyBpZiB0aGlzIGlzID4gMC5cblx0XHRcdFx0aWYgKHRoaXMuX2RmYSAhPT0gbnVsbCAmJiB0aGlzLl9kZmEucHJlY2VkZW5jZURmYSkge1xuXHRcdFx0XHRcdGlmICh0Lm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPT09IHRoaXMuX2RmYS5hdG5TdGFydFN0YXRlLnJ1bGVJbmRleCkge1xuXHRcdFx0XHRcdFx0Yy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cbiAgICAgICAgICAgICAgICBjLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGNsb3N1cmVCdXN5LmFkZChjKSE9PWMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGZvciByaWdodC1yZWN1cnNpdmUgcnVsZXNcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZ3MuZGlwc0ludG9PdXRlckNvbnRleHQgPSB0cnVlOyAvLyBUT0RPOiBjYW4gcmVtb3ZlPyBvbmx5IGNhcmUgd2hlbiB3ZSBhZGQgdG8gc2V0IHBlciBtaWRkbGUgb2YgdGhpcyBtZXRob2RcbiAgICAgICAgICAgICAgICBuZXdEZXB0aCAtPSAxO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlwcyBpbnRvIG91dGVyIGN0eDogXCIgKyBjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdC5pc0Vwc2lsb24gJiYgY2xvc3VyZUJ1c3kuYWRkKGMpIT09Yyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBmb3IgRU9GKiBhbmQgRU9GK1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBSdWxlVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBsYXRjaCB3aGVuIG5ld0RlcHRoIGdvZXMgbmVnYXRpdmUgLSBvbmNlIHdlIHN0ZXAgb3V0IG9mIHRoZSBlbnRyeSBjb250ZXh0IHdlIGNhbid0IHJldHVyblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3RGVwdGggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVwdGggKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGMsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb250aW51ZUNvbGxlY3RpbmcsIGZ1bGxDdHgsIG5ld0RlcHRoLCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2FuRHJvcExvb3BFbnRyeUVkZ2VJbkxlZnRSZWN1cnNpdmVSdWxlID0gZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgLy8gcmV0dXJuIEZhbHNlXG4gICAgdmFyIHAgPSBjb25maWcuc3RhdGU7XG4gICAgLy8gRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBpbiBTdGFyTG9vcEVudHJ5U3RhdGUgZ2VuZXJhdGVkIGR1cmluZ1xuICAgIC8vIGxlZnQtcmVjdXJzaW9uIGVsaW1pbmF0aW9uLiBGb3IgZWZmaWNpZW5jeSwgYWxzbyBjaGVjayBpZlxuICAgIC8vIHRoZSBjb250ZXh0IGhhcyBhbiBlbXB0eSBzdGFjayBjYXNlLiBJZiBzbywgaXQgd291bGQgbWVhblxuICAgIC8vIGdsb2JhbCBGT0xMT1cgc28gd2UgY2FuJ3QgcGVyZm9ybSBvcHRpbWl6YXRpb25cbiAgICAvLyBBcmUgd2UgdGhlIHNwZWNpYWwgbG9vcCBlbnRyeS9leGl0IHN0YXRlPyBvciBTTEwgd2lsZGNhcmRcbiAgICBpZihwLnN0YXRlVHlwZSAhPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZihwLnN0YXRlVHlwZSAhPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkgfHwgIXAuaXNQcmVjZWRlbmNlRGVjaXNpb24gfHxcbiAgICAgICAgICAgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpIHx8IGNvbmZpZy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBSZXF1aXJlIGFsbCByZXR1cm4gc3RhdGVzIHRvIHJldHVybiBiYWNrIHRvIHRoZSBzYW1lIHJ1bGUgdGhhdCBwIGlzIGluLlxuICAgIHZhciBudW1DdHhzID0gY29uZmlnLmNvbnRleHQubGVuZ3RoO1xuICAgIGZvcih2YXIgaT0wOyBpPG51bUN0eHM7IGkrKykgeyAvLyBmb3IgZWFjaCBzdGFjayBjb250ZXh0XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZS5ydWxlSW5kZXggIT0gcC5ydWxlSW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGRlY2lzaW9uU3RhcnRTdGF0ZSA9IHAudHJhbnNpdGlvbnNbMF0udGFyZ2V0O1xuICAgIHZhciBibG9ja0VuZFN0YXRlTnVtID0gZGVjaXNpb25TdGFydFN0YXRlLmVuZFN0YXRlLnN0YXRlTnVtYmVyO1xuICAgIHZhciBibG9ja0VuZFN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW2Jsb2NrRW5kU3RhdGVOdW1dO1xuXG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRvcCBvZiBlYWNoIHN0YWNrIGNvbnRleHQgbGVhZHMgdG8gbG9vcCBlbnRyeS9leGl0XG4gICAgLy8gc3RhdGUgdGhyb3VnaCBlcHNpbG9uIGVkZ2VzIGFuZCB3L28gbGVhdmluZyBydWxlLlxuICAgIGZvcih2YXIgaT0wOyBpPG51bUN0eHM7IGkrKykgeyAvLyBmb3IgZWFjaCBzdGFjayBjb250ZXh0XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZU51bWJlciA9IGNvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpO1xuICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSB0aGlzLmF0bi5zdGF0ZXNbcmV0dXJuU3RhdGVOdW1iZXJdO1xuICAgICAgICAvLyBhbGwgc3RhdGVzIG11c3QgaGF2ZSBzaW5nbGUgb3V0Z29pbmcgZXBzaWxvbiBlZGdlXG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggIT0gMSB8fCAhcmV0dXJuU3RhdGUudHJhbnNpdGlvbnNbMF0uaXNFcHNpbG9uKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIHByZWZpeCBvcCBjYXNlIGxpa2UgJ25vdCBleHByJywgKCcgdHlwZSAnKScgZXhwclxuICAgICAgICB2YXIgcmV0dXJuU3RhdGVUYXJnZXQgPSByZXR1cm5TdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQ7XG4gICAgICAgIGlmICggcmV0dXJuU3RhdGUuc3RhdGVUeXBlID09IEFUTlN0YXRlLkJMT0NLX0VORCAmJiByZXR1cm5TdGF0ZVRhcmdldCA9PSBwIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yICdleHByIG9wIGV4cHInIG9yIGNhc2Ugd2hlcmUgZXhwcidzIHJldHVybiBzdGF0ZSBpcyBibG9jayBlbmRcbiAgICAgICAgLy8gb2YgKC4uLikqIGludGVybmFsIGJsb2NrOyB0aGUgYmxvY2sgZW5kIHBvaW50cyB0byBsb29wIGJhY2tcbiAgICAgICAgLy8gd2hpY2ggcG9pbnRzIHRvIHAgYnV0IHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhhdFxuICAgICAgICBpZiAoIHJldHVyblN0YXRlID09IGJsb2NrRW5kU3RhdGUgKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gTG9vayBmb3IgdGVybmFyeSBleHByID8gZXhwciA6IGV4cHIuIFRoZSByZXR1cm4gc3RhdGUgcG9pbnRzIGF0IGJsb2NrIGVuZCxcbiAgICAgICAgLy8gd2hpY2ggcG9pbnRzIGF0IGxvb3AgZW50cnkgc3RhdGVcbiAgICAgICAgaWYgKCByZXR1cm5TdGF0ZVRhcmdldCA9PSBibG9ja0VuZFN0YXRlIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIGNvbXBsZXggcHJlZml4ICdiZXR3ZWVuIGV4cHIgYW5kIGV4cHInIGNhc2Ugd2hlcmUgMm5kIGV4cHInc1xuICAgICAgICAvLyByZXR1cm4gc3RhdGUgcG9pbnRzIGF0IGJsb2NrIGVuZCBzdGF0ZSBvZiAoLi4uKSogaW50ZXJuYWwgYmxvY2tcbiAgICAgICAgaWYgKHJldHVyblN0YXRlVGFyZ2V0LnN0YXRlVHlwZSA9PSBBVE5TdGF0ZS5CTE9DS19FTkQgJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnMubGVuZ3RoID09IDFcbiAgICAgICAgICAgICAgICAmJiByZXR1cm5TdGF0ZVRhcmdldC50cmFuc2l0aW9uc1swXS5pc0Vwc2lsb24gJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnNbMF0udGFyZ2V0ID09IHApXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBhbnl0aGluZyBlbHNlIGFpbid0IGNvbmZvcm1pbmdcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSdWxlTmFtZSA9IGZ1bmN0aW9uKCBpbmRleCkge1xuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwgJiYgaW5kZXg+PTApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1tpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiPHJ1bGUgXCIgKyBpbmRleCArIFwiPlwiO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0RXBzaWxvblRhcmdldCA9IGZ1bmN0aW9uKGNvbmZpZywgdCwgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcbiAgICBzd2l0Y2godC5zZXJpYWxpemF0aW9uVHlwZSkge1xuICAgIGNhc2UgVHJhbnNpdGlvbi5SVUxFOlxuICAgICAgICByZXR1cm4gdGhpcy5ydWxlVHJhbnNpdGlvbihjb25maWcsIHQpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5QUkVDRURFTkNFOlxuICAgICAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlVHJhbnNpdGlvbihjb25maWcsIHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5QUkVESUNBVEU6XG4gICAgICAgIHJldHVybiB0aGlzLnByZWRUcmFuc2l0aW9uKGNvbmZpZywgdCwgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkFDVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uVHJhbnNpdGlvbihjb25maWcsIHQpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5FUFNJTE9OOlxuICAgICAgICByZXR1cm4gbmV3IEFUTkNvbmZpZyh7c3RhdGU6dC50YXJnZXR9LCBjb25maWcpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BVE9NOlxuICAgIGNhc2UgVHJhbnNpdGlvbi5SQU5HRTpcbiAgICBjYXNlIFRyYW5zaXRpb24uU0VUOlxuICAgICAgICAvLyBFT0YgdHJhbnNpdGlvbnMgYWN0IGxpa2UgZXBzaWxvbiB0cmFuc2l0aW9ucyBhZnRlciB0aGUgZmlyc3QgRU9GXG4gICAgICAgIC8vIHRyYW5zaXRpb24gaXMgdHJhdmVyc2VkXG4gICAgICAgIGlmICh0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgICAgICAgICAgaWYgKHQubWF0Y2hlcyhUb2tlbi5FT0YsIDAsIDEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOiB0LnRhcmdldH0sIGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgZGVmYXVsdDpcbiAgICBcdHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWN0aW9uVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZywgdCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHQuYWN0aW9uSW5kZXg9PS0xID8gNjU1MzUgOiB0LmFjdGlvbkluZGV4O1xuICAgICAgICBjb25zb2xlLmxvZyhcIkFDVElPTiBlZGdlIFwiICsgdC5ydWxlSW5kZXggKyBcIjpcIiArIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOnQudGFyZ2V0fSwgY29uZmlnKTtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucHJlY2VkZW5jZVRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHB0LCAgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiUFJFRCAoY29sbGVjdFByZWRpY2F0ZXM9XCIgKyBjb2xsZWN0UHJlZGljYXRlcyArIFwiKSBcIiArXG4gICAgICAgICAgICAgICAgcHQucHJlY2VkZW5jZSArIFwiPj1fcCwgY3R4IGRlcGVuZGVudD10cnVlXCIpO1xuICAgICAgICBpZiAodGhpcy5wYXJzZXIhPT1udWxsKSB7XG4gICAgICAgIFx0Y29uc29sZS5sb2coXCJjb250ZXh0IHN1cnJvdW5kaW5nIHByZWQgaXMgXCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMucGFyc2VyLmdldFJ1bGVJbnZvY2F0aW9uU3RhY2soKSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBjID0gbnVsbDtcbiAgICBpZiAoY29sbGVjdFByZWRpY2F0ZXMgJiYgaW5Db250ZXh0KSB7XG4gICAgICAgIGlmIChmdWxsQ3R4KSB7XG4gICAgICAgICAgICAvLyBJbiBmdWxsIGNvbnRleHQgbW9kZSwgd2UgY2FuIGV2YWx1YXRlIHByZWRpY2F0ZXMgb24tdGhlLWZseVxuICAgICAgICAgICAgLy8gZHVyaW5nIGNsb3N1cmUsIHdoaWNoIGRyYW1hdGljYWxseSByZWR1Y2VzIHRoZSBzaXplIG9mXG4gICAgICAgICAgICAvLyB0aGUgY29uZmlnIHNldHMuIEl0IGFsc28gb2J2aWF0ZXMgdGhlIG5lZWQgdG8gdGVzdCBwcmVkaWNhdGVzXG4gICAgICAgICAgICAvLyBsYXRlciBkdXJpbmcgY29uZmxpY3QgcmVzb2x1dGlvbi5cbiAgICAgICAgICAgIHZhciBjdXJyZW50UG9zaXRpb24gPSB0aGlzLl9pbnB1dC5pbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnNlZWsodGhpcy5fc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgcHJlZFN1Y2NlZWRzID0gcHQuZ2V0UHJlZGljYXRlKCkuZXZhbHVhdGUodGhpcy5wYXJzZXIsIHRoaXMuX291dGVyQ29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKGN1cnJlbnRQb3NpdGlvbik7XG4gICAgICAgICAgICBpZiAocHJlZFN1Y2NlZWRzKSB7XG4gICAgICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldH0sIGNvbmZpZyk7IC8vIG5vIHByZWQgY29udGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5ld1NlbUN0eCA9IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KGNvbmZpZy5zZW1hbnRpY0NvbnRleHQsIHB0LmdldFByZWRpY2F0ZSgpKTtcbiAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXQsIHNlbWFudGljQ29udGV4dDpuZXdTZW1DdHh9LCBjb25maWcpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldH0sIGNvbmZpZyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29uZmlnIGZyb20gcHJlZCB0cmFuc2l0aW9uPVwiICsgYyk7XG4gICAgfVxuICAgIHJldHVybiBjO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5wcmVkVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZywgcHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlBSRUQgKGNvbGxlY3RQcmVkaWNhdGVzPVwiICsgY29sbGVjdFByZWRpY2F0ZXMgKyBcIikgXCIgKyBwdC5ydWxlSW5kZXggK1xuICAgICAgICAgICAgICAgIFwiOlwiICsgcHQucHJlZEluZGV4ICsgXCIsIGN0eCBkZXBlbmRlbnQ9XCIgKyBwdC5pc0N0eERlcGVuZGVudCk7XG4gICAgICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29udGV4dCBzdXJyb3VuZGluZyBwcmVkIGlzIFwiICsgVXRpbHMuYXJyYXlUb1N0cmluZyh0aGlzLnBhcnNlci5nZXRSdWxlSW52b2NhdGlvblN0YWNrKCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgYyA9IG51bGw7XG4gICAgaWYgKGNvbGxlY3RQcmVkaWNhdGVzICYmICgocHQuaXNDdHhEZXBlbmRlbnQgJiYgaW5Db250ZXh0KSB8fCAhIHB0LmlzQ3R4RGVwZW5kZW50KSkge1xuICAgICAgICBpZiAoZnVsbEN0eCkge1xuICAgICAgICAgICAgLy8gSW4gZnVsbCBjb250ZXh0IG1vZGUsIHdlIGNhbiBldmFsdWF0ZSBwcmVkaWNhdGVzIG9uLXRoZS1mbHlcbiAgICAgICAgICAgIC8vIGR1cmluZyBjbG9zdXJlLCB3aGljaCBkcmFtYXRpY2FsbHkgcmVkdWNlcyB0aGUgc2l6ZSBvZlxuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZyBzZXRzLiBJdCBhbHNvIG9idmlhdGVzIHRoZSBuZWVkIHRvIHRlc3QgcHJlZGljYXRlc1xuICAgICAgICAgICAgLy8gbGF0ZXIgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24uXG4gICAgICAgICAgICB2YXIgY3VycmVudFBvc2l0aW9uID0gdGhpcy5faW5wdXQuaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKHRoaXMuX3N0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgdmFyIHByZWRTdWNjZWVkcyA9IHB0LmdldFByZWRpY2F0ZSgpLmV2YWx1YXRlKHRoaXMucGFyc2VyLCB0aGlzLl9vdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQuc2VlayhjdXJyZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKHByZWRTdWNjZWVkcykge1xuICAgICAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpOyAvLyBubyBwcmVkIGNvbnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuZXdTZW1DdHggPSBTZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dChjb25maWcuc2VtYW50aWNDb250ZXh0LCBwdC5nZXRQcmVkaWNhdGUoKSk7XG4gICAgICAgICAgICBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cHQudGFyZ2V0LCBzZW1hbnRpY0NvbnRleHQ6bmV3U2VtQ3R4fSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImNvbmZpZyBmcm9tIHByZWQgdHJhbnNpdGlvbj1cIiArIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucnVsZVRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNBTEwgcnVsZSBcIiArIHRoaXMuZ2V0UnVsZU5hbWUodC50YXJnZXQucnVsZUluZGV4KSArIFwiLCBjdHg9XCIgKyBjb25maWcuY29udGV4dCk7XG4gICAgfVxuICAgIHZhciByZXR1cm5TdGF0ZSA9IHQuZm9sbG93U3RhdGU7XG4gICAgdmFyIG5ld0NvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUoY29uZmlnLmNvbnRleHQsIHJldHVyblN0YXRlLnN0YXRlTnVtYmVyKTtcbiAgICByZXR1cm4gbmV3IEFUTkNvbmZpZyh7c3RhdGU6dC50YXJnZXQsIGNvbnRleHQ6bmV3Q29udGV4dH0sIGNvbmZpZyApO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRDb25mbGljdGluZ0FsdHMgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGFsdHNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMoY29uZmlncyk7XG4gICAgcmV0dXJuIFByZWRpY3Rpb25Nb2RlLmdldEFsdHMoYWx0c2V0cyk7XG59O1xuXG4gLy8gU2FtIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aXRoIHRoZSBwcmV2aW91cyBkZWZpbml0aW9uLCB2Mywgb2ZcbiAvLyBhbWJpZ3VvdXMgc3RhdGVzLiBJZiB3ZSBoYXZlIGFub3RoZXIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGNvbmZsaWN0aW5nXG4gLy8gYWx0ZXJuYXRpdmVzLCB3ZSBzaG91bGQga2VlcCBnb2luZy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZ3JhbW1hclxuIC8vXG4gLy8gcyA6IChJRCB8IElEIElEPykgJzsnIDtcbiAvL1xuIC8vIFdoZW4gdGhlIEFUTiBzaW11bGF0aW9uIHJlYWNoZXMgdGhlIHN0YXRlIGJlZm9yZSAnOycsIGl0IGhhcyBhIERGQVxuIC8vIHN0YXRlIHRoYXQgbG9va3MgbGlrZTogWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV0uIE5hdHVyYWxseVxuIC8vIDEyfDF8W10gYW5kIDEyfDJ8W10gY29uZmxpY3QsIGJ1dCB3ZSBjYW5ub3Qgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbm9kZVxuIC8vIGJlY2F1c2UgYWx0ZXJuYXRpdmUgdG8gaGFzIGFub3RoZXIgd2F5IHRvIGNvbnRpbnVlLCB2aWEgWzZ8MnxbXV0uXG4gLy8gVGhlIGtleSBpcyB0aGF0IHdlIGhhdmUgYSBzaW5nbGUgc3RhdGUgdGhhdCBoYXMgY29uZmlnJ3Mgb25seSBhc3NvY2lhdGVkXG4gLy8gd2l0aCBhIHNpbmdsZSBhbHRlcm5hdGl2ZSwgMiwgYW5kIGNydWNpYWxseSB0aGUgc3RhdGUgdHJhbnNpdGlvbnNcbiAvLyBhbW9uZyB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGFsbCBub24tZXBzaWxvbiB0cmFuc2l0aW9ucy4gVGhhdCBtZWFuc1xuIC8vIHdlIGRvbid0IGNvbnNpZGVyIGFueSBjb25mbGljdHMgdGhhdCBpbmNsdWRlIGFsdGVybmF0aXZlIDIuIFNvLCB3ZVxuIC8vIGlnbm9yZSB0aGUgY29uZmxpY3QgYmV0d2VlbiBhbHRzIDEgYW5kIDIuIFdlIGlnbm9yZSBhIHNldCBvZlxuIC8vIGNvbmZsaWN0aW5nIGFsdHMgd2hlbiB0aGVyZSBpcyBhbiBpbnRlcnNlY3Rpb24gd2l0aCBhbiBhbHRlcm5hdGl2ZVxuIC8vIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBhbHQgc3RhdGUgaW4gdGhlIHN0YXRlJnJhcnI7Y29uZmlnLWxpc3QgbWFwLlxuIC8vXG4gLy8gSXQncyBhbHNvIHRoZSBjYXNlIHRoYXQgd2UgbWlnaHQgaGF2ZSB0d28gY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMgYnV0XG4gLy8gYWxzbyBhIDNyZCBub25jb25mbGljdGluZyBjb25maWd1cmF0aW9uIGZvciBhIGRpZmZlcmVudCBhbHRlcm5hdGl2ZTpcbiAvLyBbMXwxfFtdLCAxfDJ8W10sIDh8M3xbXV0uIFRoaXMgY2FuIGNvbWUgYWJvdXQgZnJvbSBncmFtbWFyOlxuIC8vXG4gLy8gYSA6IEEgfCBBIHwgQSBCIDtcbiAvL1xuIC8vIEFmdGVyIG1hdGNoaW5nIGlucHV0IEEsIHdlIHJlYWNoIHRoZSBzdG9wIHN0YXRlIGZvciBydWxlIEEsIHN0YXRlIDEuXG4gLy8gU3RhdGUgOCBpcyB0aGUgc3RhdGUgcmlnaHQgYmVmb3JlIEIuIENsZWFybHkgYWx0ZXJuYXRpdmVzIDEgYW5kIDJcbiAvLyBjb25mbGljdCBhbmQgbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgc2VwYXJhdGUgdGhlIHR3by5cbiAvLyBIb3dldmVyLCBhbHRlcm5hdGl2ZSAzIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSBhbmQgc28gd2UgZG8gbm90XG4gLy8gc3RvcCB3b3JraW5nIG9uIHRoaXMgc3RhdGUuIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB3ZSdyZSBjb25jZXJuZWRcbiAvLyB3aXRoIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlcy4gSGVyZSBhbHRcbiAvLyAzIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGNvbmZpZ3MsIGJ1dCBzaW5jZSB3ZSBjYW4gY29udGludWVcbiAvLyBsb29raW5nIGZvciBpbnB1dCByZWFzb25hYmx5LCBJIGRvbid0IGRlY2xhcmUgdGhlIHN0YXRlIGRvbmUuIFdlXG4gLy8gaWdub3JlIGEgc2V0IG9mIGNvbmZsaWN0aW5nIGFsdHMgd2hlbiB3ZSBoYXZlIGFuIGFsdGVybmF0aXZlXG4gLy8gdGhhdCB3ZSBzdGlsbCBuZWVkIHRvIHB1cnN1ZS5cbi8vXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzT3JVbmlxdWVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGNvbmZsaWN0aW5nQWx0cyA9IG51bGw7XG4gICAgaWYgKGNvbmZpZ3MudW5pcXVlQWx0IT09IEFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgY29uZmxpY3RpbmdBbHRzID0gbmV3IEJpdFNldCgpO1xuICAgICAgICBjb25mbGljdGluZ0FsdHMuYWRkKGNvbmZpZ3MudW5pcXVlQWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25mbGljdGluZ0FsdHMgPSBjb25maWdzLmNvbmZsaWN0aW5nQWx0cztcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZsaWN0aW5nQWx0cztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0VG9rZW5OYW1lID0gZnVuY3Rpb24oIHQpIHtcbiAgICBpZiAodD09PVRva2VuLkVPRikge1xuICAgICAgICByZXR1cm4gXCJFT0ZcIjtcbiAgICB9XG4gICAgaWYoIHRoaXMucGFyc2VyIT09bnVsbCAmJiB0aGlzLnBhcnNlci5saXRlcmFsTmFtZXMhPT1udWxsKSB7XG4gICAgICAgIGlmICh0ID49IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcy5sZW5ndGggJiYgdCA+PSB0aGlzLnBhcnNlci5zeW1ib2xpY05hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJcIiArIHQgKyBcIiB0dHlwZSBvdXQgb2YgcmFuZ2U6IFwiICsgdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiXCIgKyB0aGlzLnBhcnNlci5nZXRJbnB1dFN0cmVhbSgpLmdldFRva2VucygpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzW3RdIHx8IHRoaXMucGFyc2VyLnN5bWJvbGljTmFtZXNbdF07XG4gICAgICAgICAgICByZXR1cm4gbmFtZSArIFwiPFwiICsgdCArIFwiPlwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiICsgdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0TG9va2FoZWFkTmFtZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5OYW1lKGlucHV0LkxBKDEpKTtcbn07XG5cbi8vIFVzZWQgZm9yIGRlYnVnZ2luZyBpbiBhZGFwdGl2ZVByZWRpY3QgYXJvdW5kIGV4ZWNBVE4gYnV0IEkgY3V0XG4vLyAgaXQgb3V0IGZvciBjbGFyaXR5IG5vdyB0aGF0IGFsZy4gd29ya3Mgd2VsbC4gV2UgY2FuIGxlYXZlIHRoaXNcbi8vICBcImRlYWRcIiBjb2RlIGZvciBhIGJpdC5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmR1bXBEZWFkRW5kQ29uZmlncyA9IGZ1bmN0aW9uKG52YWUpIHtcbiAgICBjb25zb2xlLmxvZyhcImRlYWQgZW5kIGNvbmZpZ3M6IFwiKTtcbiAgICB2YXIgZGVjcyA9IG52YWUuZ2V0RGVhZEVuZENvbmZpZ3MoKTtcbiAgICBmb3IodmFyIGk9MDsgaTxkZWNzLmxlbmd0aDsgaSsrKSB7XG4gICAgXHR2YXIgYyA9IGRlY3NbaV07XG4gICAgICAgIHZhciB0cmFucyA9IFwibm8gZWRnZXNcIjtcbiAgICAgICAgaWYgKGMuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoPjApIHtcbiAgICAgICAgICAgIHZhciB0ID0gYy5zdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgQXRvbVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0cmFucyA9IFwiQXRvbSBcIisgdGhpcy5nZXRUb2tlbk5hbWUodC5sYWJlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHQgaW5zdGFuY2VvZiBTZXRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5lZyA9ICh0IGluc3RhbmNlb2YgTm90U2V0VHJhbnNpdGlvbik7XG4gICAgICAgICAgICAgICAgdHJhbnMgPSAobmVnID8gXCJ+XCIgOiBcIlwiKSArIFwiU2V0IFwiICsgdC5zZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihjLnRvU3RyaW5nKHRoaXMucGFyc2VyLCB0cnVlKSArIFwiOlwiICsgdHJhbnMpO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUubm9WaWFibGVBbHQgPSBmdW5jdGlvbihpbnB1dCwgb3V0ZXJDb250ZXh0LCBjb25maWdzLCBzdGFydEluZGV4KSB7XG4gICAgcmV0dXJuIG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzLnBhcnNlciwgaW5wdXQsIGlucHV0LmdldChzdGFydEluZGV4KSwgaW5wdXQuTFQoMSksIGNvbmZpZ3MsIG91dGVyQ29udGV4dCk7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFVuaXF1ZUFsdCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgYWx0ID0gQVROLklOVkFMSURfQUxUX05VTUJFUjtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgIFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYWx0ID09PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBhbHQgPSBjLmFsdCAvLyBmb3VuZCBmaXJzdCBhbHRcbiAgICAgICAgfSBlbHNlIGlmKCBjLmFsdCE9PWFsdCkge1xuICAgICAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsdDtcbn07XG5cbi8vXG4vLyBBZGQgYW4gZWRnZSB0byB0aGUgREZBLCBpZiBwb3NzaWJsZS4gVGhpcyBtZXRob2QgY2FsbHNcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSB0byBlbnN1cmUgdGhlIHtAY29kZSB0b30gc3RhdGUgaXMgcHJlc2VudCBpbiB0aGVcbi8vIERGQS4gSWYge0Bjb2RlIGZyb219IGlzIHtAY29kZSBudWxsfSwgb3IgaWYge0Bjb2RlIHR9IGlzIG91dHNpZGUgdGhlXG4vLyByYW5nZSBvZiBlZGdlcyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUgREZBIHRhYmxlcywgdGhpcyBtZXRob2Rcbi8vIHJldHVybnMgd2l0aG91dCBhZGRpbmcgdGhlIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgdG99IGlzIHtAY29kZSBudWxsfSwgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vLyBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHtAbGluayBERkFTdGF0ZX0gcmV0dXJuZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIC8vYWRkREZBU3RhdGV9IGZvciB0aGUge0Bjb2RlIHRvfSBzdGF0ZS48L3A+XG4vL1xuLy8gQHBhcmFtIGRmYSBUaGUgREZBXG4vLyBAcGFyYW0gZnJvbSBUaGUgc291cmNlIHN0YXRlIGZvciB0aGUgZWRnZVxuLy8gQHBhcmFtIHQgVGhlIGlucHV0IHN5bWJvbFxuLy8gQHBhcmFtIHRvIFRoZSB0YXJnZXQgc3RhdGUgZm9yIHRoZSBlZGdlXG4vL1xuLy8gQHJldHVybiBJZiB7QGNvZGUgdG99IGlzIHtAY29kZSBudWxsfSwgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH07XG4vLyBvdGhlcndpc2UgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vYWRkREZBU3RhdGV9XG4vLyBvbiB7QGNvZGUgdG99XG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hZGRERkFFZGdlID0gZnVuY3Rpb24oZGZhLCBmcm9tXywgdCwgdG8pIHtcbiAgICBpZiggdGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkVER0UgXCIgKyBmcm9tXyArIFwiIC0+IFwiICsgdG8gKyBcIiB1cG9uIFwiICsgdGhpcy5nZXRUb2tlbk5hbWUodCkpO1xuICAgIH1cbiAgICBpZiAodG89PT1udWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0byA9IHRoaXMuYWRkREZBU3RhdGUoZGZhLCB0byk7IC8vIHVzZWQgZXhpc3RpbmcgaWYgcG9zc2libGUgbm90IGluY29taW5nXG4gICAgaWYgKGZyb21fPT09bnVsbCB8fCB0IDwgLTEgfHwgdCA+IHRoaXMuYXRuLm1heFRva2VuVHlwZSkge1xuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuICAgIGlmIChmcm9tXy5lZGdlcz09PW51bGwpIHtcbiAgICAgICAgZnJvbV8uZWRnZXMgPSBbXTtcbiAgICB9XG4gICAgZnJvbV8uZWRnZXNbdCsxXSA9IHRvOyAvLyBjb25uZWN0XG5cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICB2YXIgbGl0ZXJhbE5hbWVzID0gdGhpcy5wYXJzZXI9PT1udWxsID8gbnVsbCA6IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcztcbiAgICAgICAgdmFyIHN5bWJvbGljTmFtZXMgPSB0aGlzLnBhcnNlcj09PW51bGwgPyBudWxsIDogdGhpcy5wYXJzZXIuc3ltYm9saWNOYW1lcztcbiAgICAgICAgY29uc29sZS5sb2coXCJERkE9XFxuXCIgKyBkZmEudG9TdHJpbmcobGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSk7XG4gICAgfVxuICAgIHJldHVybiB0bztcbn07XG4vL1xuLy8gQWRkIHN0YXRlIHtAY29kZSBEfSB0byB0aGUgREZBIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQsIGFuZCByZXR1cm5cbi8vIHRoZSBhY3R1YWwgaW5zdGFuY2Ugc3RvcmVkIGluIHRoZSBERkEuIElmIGEgc3RhdGUgZXF1aXZhbGVudCB0byB7QGNvZGUgRH1cbi8vIGlzIGFscmVhZHkgaW4gdGhlIERGQSwgdGhlIGV4aXN0aW5nIHN0YXRlIGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhpc1xuLy8gbWV0aG9kIHJldHVybnMge0Bjb2RlIER9IGFmdGVyIGFkZGluZyBpdCB0byB0aGUgREZBLlxuLy9cbi8vIDxwPklmIHtAY29kZSBEfSBpcyB7QGxpbmsgLy9FUlJPUn0sIHRoaXMgbWV0aG9kIHJldHVybnMge0BsaW5rIC8vRVJST1J9IGFuZFxuLy8gZG9lcyBub3QgY2hhbmdlIHRoZSBERkEuPC9wPlxuLy9cbi8vIEBwYXJhbSBkZmEgVGhlIGRmYVxuLy8gQHBhcmFtIEQgVGhlIERGQSBzdGF0ZSB0byBhZGRcbi8vIEByZXR1cm4gVGhlIHN0YXRlIHN0b3JlZCBpbiB0aGUgREZBLiBUaGlzIHdpbGwgYmUgZWl0aGVyIHRoZSBleGlzdGluZ1xuLy8gc3RhdGUgaWYge0Bjb2RlIER9IGlzIGFscmVhZHkgaW4gdGhlIERGQSwgb3Ige0Bjb2RlIER9IGl0c2VsZiBpZiB0aGVcbi8vIHN0YXRlIHdhcyBub3QgYWxyZWFkeSBwcmVzZW50LlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBU3RhdGUgPSBmdW5jdGlvbihkZmEsIEQpIHtcbiAgICBpZiAoRCA9PSBBVE5TaW11bGF0b3IuRVJST1IpIHtcbiAgICAgICAgcmV0dXJuIEQ7XG4gICAgfVxuICAgIHZhciBleGlzdGluZyA9IGRmYS5zdGF0ZXMuZ2V0KEQpO1xuICAgIGlmKGV4aXN0aW5nIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIEQuc3RhdGVOdW1iZXIgPSBkZmEuc3RhdGVzLmxlbmd0aDtcbiAgICBpZiAoISBELmNvbmZpZ3MucmVhZE9ubHkpIHtcbiAgICAgICAgRC5jb25maWdzLm9wdGltaXplQ29uZmlncyh0aGlzKTtcbiAgICAgICAgRC5jb25maWdzLnNldFJlYWRvbmx5KHRydWUpO1xuICAgIH1cbiAgICBkZmEuc3RhdGVzLmFkZChEKTtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImFkZGluZyBuZXcgREZBIHN0YXRlOiBcIiArIEQpO1xuICAgIH1cbiAgICByZXR1cm4gRDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24oZGZhLCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMucmV0cnlfZGVidWcpIHtcbiAgICAgICAgdmFyIGludGVydmFsID0gbmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCArIDEpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCBkZWNpc2lvbj1cIiArIGRmYS5kZWNpc2lvbiArIFwiOlwiICsgY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgaW5wdXQ9XCIgKyB0aGlzLnBhcnNlci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQoaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlci5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQodGhpcy5wYXJzZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5ID0gZnVuY3Rpb24oZGZhLCBwcmVkaWN0aW9uLCBjb25maWdzLCBzdGFydEluZGV4LCBzdG9wSW5kZXgpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLnJldHJ5X2RlYnVnKSB7XG4gICAgICAgIHZhciBpbnRlcnZhbCA9IG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXggKyAxKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgZGVjaXNpb249XCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIiArIGNvbmZpZ3MgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIGlucHV0PVwiICsgdGhpcy5wYXJzZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KGludGVydmFsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJzZXIuZ2V0RXJyb3JMaXN0ZW5lckRpc3BhdGNoKCkucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KHRoaXMucGFyc2VyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncyk7XG4gICAgfVxufTtcblxuLy8gSWYgY29udGV4dCBzZW5zaXRpdmUgcGFyc2luZywgd2Uga25vdyBpdCdzIGFtYmlndWl0eSBub3QgY29uZmxpY3QvL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihkZmEsIEQsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzICkge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMucmV0cnlfZGVidWcpIHtcbiAgICAgICAgdmFyIGludGVydmFsID0gbmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCArIDEpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlcG9ydEFtYmlndWl0eSBcIiArIGFtYmlnQWx0cyArIFwiOlwiICsgY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgaW5wdXQ9XCIgKyB0aGlzLnBhcnNlci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQoaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlci5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKS5yZXBvcnRBbWJpZ3VpdHkodGhpcy5wYXJzZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKTtcbiAgICB9XG59O1xuXG5leHBvcnRzLlBhcnNlckFUTlNpbXVsYXRvciA9IFBhcnNlckFUTlNpbXVsYXRvcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cbi8vXG4vLyBUaGlzIGVudW1lcmF0aW9uIGRlZmluZXMgdGhlIHByZWRpY3Rpb24gbW9kZXMgYXZhaWxhYmxlIGluIEFOVExSIDQgYWxvbmcgd2l0aFxuLy8gdXRpbGl0eSBtZXRob2RzIGZvciBhbmFseXppbmcgY29uZmlndXJhdGlvbiBzZXRzIGZvciBjb25mbGljdHMgYW5kL29yXG4vLyBhbWJpZ3VpdGllcy5cblxudmFyIFNldCA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5TZXQ7XG52YXIgTWFwID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLk1hcDtcbnZhciBCaXRTZXQgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuQml0U2V0O1xudmFyIEFsdERpY3QgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuQWx0RGljdDtcbnZhciBBVE4gPSByZXF1aXJlKCcuL0FUTicpLkFUTjtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5BVE5Db25maWdTZXQ7XG52YXIgQVROQ29uZmlnID0gcmVxdWlyZSgnLi9BVE5Db25maWcnKS5BVE5Db25maWc7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgSGFzaCA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5IYXNoO1xudmFyIGhhc2hTdHVmZiA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5oYXNoU3R1ZmY7XG52YXIgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuZXF1YWxBcnJheXM7XG5cbmZ1bmN0aW9uIFByZWRpY3Rpb25Nb2RlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLy9cbi8vIFRoZSBTTEwoKikgcHJlZGljdGlvbiBtb2RlLiBUaGlzIHByZWRpY3Rpb24gbW9kZSBpZ25vcmVzIHRoZSBjdXJyZW50XG4vLyBwYXJzZXIgY29udGV4dCB3aGVuIG1ha2luZyBwcmVkaWN0aW9ucy4gVGhpcyBpcyB0aGUgZmFzdGVzdCBwcmVkaWN0aW9uXG4vLyBtb2RlLCBhbmQgcHJvdmlkZXMgY29ycmVjdCByZXN1bHRzIGZvciBtYW55IGdyYW1tYXJzLiBUaGlzIHByZWRpY3Rpb25cbi8vIG1vZGUgaXMgbW9yZSBwb3dlcmZ1bCB0aGFuIHRoZSBwcmVkaWN0aW9uIG1vZGUgcHJvdmlkZWQgYnkgQU5UTFIgMywgYnV0XG4vLyBtYXkgcmVzdWx0IGluIHN5bnRheCBlcnJvcnMgZm9yIGdyYW1tYXIgYW5kIGlucHV0IGNvbWJpbmF0aW9ucyB3aGljaCBhcmVcbi8vIG5vdCBTTEwuXG4vL1xuLy8gPHA+XG4vLyBXaGVuIHVzaW5nIHRoaXMgcHJlZGljdGlvbiBtb2RlLCB0aGUgcGFyc2VyIHdpbGwgZWl0aGVyIHJldHVybiBhIGNvcnJlY3Rcbi8vIHBhcnNlIHRyZWUgKGkuZS4gdGhlIHNhbWUgcGFyc2UgdHJlZSB0aGF0IHdvdWxkIGJlIHJldHVybmVkIHdpdGggdGhlXG4vLyB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBtb2RlKSwgb3IgaXQgd2lsbCByZXBvcnQgYSBzeW50YXggZXJyb3IuIElmIGFcbi8vIHN5bnRheCBlcnJvciBpcyBlbmNvdW50ZXJlZCB3aGVuIHVzaW5nIHRoZSB7QGxpbmsgLy9TTEx9IHByZWRpY3Rpb24gbW9kZSxcbi8vIGl0IG1heSBiZSBkdWUgdG8gZWl0aGVyIGFuIGFjdHVhbCBzeW50YXggZXJyb3IgaW4gdGhlIGlucHV0IG9yIGluZGljYXRlXG4vLyB0aGF0IHRoZSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIGdyYW1tYXIgYW5kIGlucHV0IHJlcXVpcmVzIHRoZSBtb3JlXG4vLyBwb3dlcmZ1bCB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBhYmlsaXRpZXMgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLlNMTCA9IDA7XG4vL1xuLy8gVGhlIExMKCopIHByZWRpY3Rpb24gbW9kZS4gVGhpcyBwcmVkaWN0aW9uIG1vZGUgYWxsb3dzIHRoZSBjdXJyZW50IHBhcnNlclxuLy8gY29udGV4dCB0byBiZSB1c2VkIGZvciByZXNvbHZpbmcgU0xMIGNvbmZsaWN0cyB0aGF0IG9jY3VyIGR1cmluZ1xuLy8gcHJlZGljdGlvbi4gVGhpcyBpcyB0aGUgZmFzdGVzdCBwcmVkaWN0aW9uIG1vZGUgdGhhdCBndWFyYW50ZWVzIGNvcnJlY3Rcbi8vIHBhcnNlIHJlc3VsdHMgZm9yIGFsbCBjb21iaW5hdGlvbnMgb2YgZ3JhbW1hcnMgd2l0aCBzeW50YWN0aWNhbGx5IGNvcnJlY3Rcbi8vIGlucHV0cy5cbi8vXG4vLyA8cD5cbi8vIFdoZW4gdXNpbmcgdGhpcyBwcmVkaWN0aW9uIG1vZGUsIHRoZSBwYXJzZXIgd2lsbCBtYWtlIGNvcnJlY3QgZGVjaXNpb25zXG4vLyBmb3IgYWxsIHN5bnRhY3RpY2FsbHktY29ycmVjdCBncmFtbWFyIGFuZCBpbnB1dCBjb21iaW5hdGlvbnMuIEhvd2V2ZXIsIGluXG4vLyBjYXNlcyB3aGVyZSB0aGUgZ3JhbW1hciBpcyB0cnVseSBhbWJpZ3VvdXMgdGhpcyBwcmVkaWN0aW9uIG1vZGUgbWlnaHQgbm90XG4vLyByZXBvcnQgYSBwcmVjaXNlIGFuc3dlciBmb3IgPGVtPmV4YWN0bHkgd2hpY2g8L2VtPiBhbHRlcm5hdGl2ZXMgYXJlXG4vLyBhbWJpZ3VvdXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBwcmVkaWN0aW9uIG1vZGUgZG9lcyBub3QgcHJvdmlkZSBhbnkgZ3VhcmFudGVlcyBmb3IgcHJlZGljdGlvblxuLy8gYmVoYXZpb3IgZm9yIHN5bnRhY3RpY2FsbHktaW5jb3JyZWN0IGlucHV0cy48L3A+XG4vL1xuUHJlZGljdGlvbk1vZGUuTEwgPSAxO1xuLy9cbi8vIFRoZSBMTCgqKSBwcmVkaWN0aW9uIG1vZGUgd2l0aCBleGFjdCBhbWJpZ3VpdHkgZGV0ZWN0aW9uLiBJbiBhZGRpdGlvbiB0b1xuLy8gdGhlIGNvcnJlY3RuZXNzIGd1YXJhbnRlZXMgcHJvdmlkZWQgYnkgdGhlIHtAbGluayAvL0xMfSBwcmVkaWN0aW9uIG1vZGUsXG4vLyB0aGlzIHByZWRpY3Rpb24gbW9kZSBpbnN0cnVjdHMgdGhlIHByZWRpY3Rpb24gYWxnb3JpdGhtIHRvIGRldGVybWluZSB0aGVcbi8vIGNvbXBsZXRlIGFuZCBleGFjdCBzZXQgb2YgYW1iaWd1b3VzIGFsdGVybmF0aXZlcyBmb3IgZXZlcnkgYW1iaWd1b3VzXG4vLyBkZWNpc2lvbiBlbmNvdW50ZXJlZCB3aGlsZSBwYXJzaW5nLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBwcmVkaWN0aW9uIG1vZGUgbWF5IGJlIHVzZWQgZm9yIGRpYWdub3NpbmcgYW1iaWd1aXRpZXMgZHVyaW5nXG4vLyBncmFtbWFyIGRldmVsb3BtZW50LiBEdWUgdG8gdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIG9mIGNhbGN1bGF0aW5nIHNldHNcbi8vIG9mIGFtYmlndW91cyBhbHRlcm5hdGl2ZXMsIHRoaXMgcHJlZGljdGlvbiBtb2RlIHNob3VsZCBiZSBhdm9pZGVkIHdoZW5cbi8vIHRoZSBleGFjdCByZXN1bHRzIGFyZSBub3QgbmVjZXNzYXJ5LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLkxMX0VYQUNUX0FNQklHX0RFVEVDVElPTiA9IDI7XG5cblxuLy9cbi8vIENvbXB1dGVzIHRoZSBTTEwgcHJlZGljdGlvbiB0ZXJtaW5hdGlvbiBjb25kaXRpb24uXG4vL1xuLy8gPHA+XG4vLyBUaGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgU0xMIHByZWRpY3Rpb24gdGVybWluYXRpb24gY29uZGl0aW9uIGZvciBib3RoIG9mXG4vLyB0aGUgZm9sbG93aW5nIGNhc2VzLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+VGhlIHVzdWFsIFNMTCtMTCBmYWxsYmFjayB1cG9uIFNMTCBjb25mbGljdDwvbGk+XG4vLyA8bGk+UHVyZSBTTEwgd2l0aG91dCBMTCBmYWxsYmFjazwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIDxwPjxzdHJvbmc+Q09NQklORUQgU0xMK0xMIFBBUlNJTkc8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+V2hlbiBMTC1mYWxsYmFjayBpcyBlbmFibGVkIHVwb24gU0xMIGNvbmZsaWN0LCBjb3JyZWN0IHByZWRpY3Rpb25zIGFyZVxuLy8gZW5zdXJlZCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uIGlzIGNvbXB1dGVkIGJ5IHRoaXNcbi8vIG1ldGhvZC4gRHVlIHRvIHRoZSBzdWJzdGFudGlhbGx5IGhpZ2hlciBjb3N0IG9mIExMIHByZWRpY3Rpb24sIHRoZVxuLy8gcHJlZGljdGlvbiBzaG91bGQgb25seSBmYWxsIGJhY2sgdG8gTEwgd2hlbiB0aGUgYWRkaXRpb25hbCBsb29rYWhlYWRcbi8vIGNhbm5vdCBsZWFkIHRvIGEgdW5pcXVlIFNMTCBwcmVkaWN0aW9uLjwvcD5cbi8vXG4vLyA8cD5Bc3N1bWluZyBjb21iaW5lZCBTTEwrTEwgcGFyc2luZywgYW4gU0xMIGNvbmZpZ3VyYXRpb24gc2V0IHdpdGggb25seVxuLy8gY29uZmxpY3Rpbmcgc3Vic2V0cyBzaG91bGQgZmFsbCBiYWNrIHRvIGZ1bGwgTEwsIGV2ZW4gaWYgdGhlXG4vLyBjb25maWd1cmF0aW9uIHNldHMgZG9uJ3QgcmVzb2x2ZSB0byB0aGUgc2FtZSBhbHRlcm5hdGl2ZSAoZS5nLlxuLy8ge0Bjb2RlIHsxLDJ9fSBhbmQge0Bjb2RlIHszLDR9fS4gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG5vbi1jb25mbGljdGluZ1xuLy8gY29uZmlndXJhdGlvbiwgU0xMIGNvdWxkIGNvbnRpbnVlIHdpdGggdGhlIGhvcGVzIHRoYXQgbW9yZSBsb29rYWhlYWQgd2lsbFxuLy8gcmVzb2x2ZSB2aWEgb25lIG9mIHRob3NlIG5vbi1jb25mbGljdGluZyBjb25maWd1cmF0aW9ucy48L3A+XG4vL1xuLy8gPHA+SGVyZSdzIHRoZSBwcmVkaWN0aW9uIHRlcm1pbmF0aW9uIHJ1bGUgdGhlbTogU0xMIChmb3IgU0xMK0xMIHBhcnNpbmcpXG4vLyBzdG9wcyB3aGVuIGl0IHNlZXMgb25seSBjb25mbGljdGluZyBjb25maWd1cmF0aW9uIHN1YnNldHMuIEluIGNvbnRyYXN0LFxuLy8gZnVsbCBMTCBrZWVwcyBnb2luZyB3aGVuIHRoZXJlIGlzIHVuY2VydGFpbnR5LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkhFVVJJU1RJQzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5BcyBhIGhldXJpc3RpYywgd2Ugc3RvcCBwcmVkaWN0aW9uIHdoZW4gd2Ugc2VlIGFueSBjb25mbGljdGluZyBzdWJzZXRcbi8vIHVubGVzcyB3ZSBzZWUgYSBzdGF0ZSB0aGF0IG9ubHkgaGFzIG9uZSBhbHRlcm5hdGl2ZSBhc3NvY2lhdGVkIHdpdGggaXQuXG4vLyBUaGUgc2luZ2xlLWFsdC1zdGF0ZSB0aGluZyBsZXRzIHByZWRpY3Rpb24gY29udGludWUgdXBvbiBydWxlcyBsaWtlXG4vLyAob3RoZXJ3aXNlLCBpdCB3b3VsZCBhZG1pdCBkZWZlYXQgdG9vIHNvb24pOjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV0uIHMgOiAoSUQgfCBJRCBJRD8pICc7JyA7fTwvcD5cbi8vXG4vLyA8cD5XaGVuIHRoZSBBVE4gc2ltdWxhdGlvbiByZWFjaGVzIHRoZSBzdGF0ZSBiZWZvcmUge0Bjb2RlICc7J30sIGl0IGhhcyBhXG4vLyBERkEgc3RhdGUgdGhhdCBsb29rcyBsaWtlOiB7QGNvZGUgWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV19LiBOYXR1cmFsbHlcbi8vIHtAY29kZSAxMnwxfFtdfSBhbmQge0Bjb2RlIDEyfDJ8W119IGNvbmZsaWN0LCBidXQgd2UgY2Fubm90IHN0b3Bcbi8vIHByb2Nlc3NpbmcgdGhpcyBub2RlIGJlY2F1c2UgYWx0ZXJuYXRpdmUgdG8gaGFzIGFub3RoZXIgd2F5IHRvIGNvbnRpbnVlLFxuLy8gdmlhIHtAY29kZSBbNnwyfFtdXX0uPC9wPlxuLy9cbi8vIDxwPkl0IGFsc28gbGV0J3MgdXMgY29udGludWUgZm9yIHRoaXMgcnVsZTo8L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIFsxfDF8W10sIDF8MnxbXSwgOHwzfFtdXSBhIDogQSB8IEEgfCBBIEIgO308L3A+XG4vL1xuLy8gPHA+QWZ0ZXIgbWF0Y2hpbmcgaW5wdXQgQSwgd2UgcmVhY2ggdGhlIHN0b3Agc3RhdGUgZm9yIHJ1bGUgQSwgc3RhdGUgMS5cbi8vIFN0YXRlIDggaXMgdGhlIHN0YXRlIHJpZ2h0IGJlZm9yZSBCLiBDbGVhcmx5IGFsdGVybmF0aXZlcyAxIGFuZCAyXG4vLyBjb25mbGljdCBhbmQgbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgc2VwYXJhdGUgdGhlIHR3by5cbi8vIEhvd2V2ZXIsIGFsdGVybmF0aXZlIDMgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIGFuZCBzbyB3ZSBkbyBub3Qgc3RvcFxuLy8gd29ya2luZyBvbiB0aGlzIHN0YXRlLiBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2UncmUgY29uY2VybmVkIHdpdGhcbi8vIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlcy4gSGVyZSBhbHQgMyBpcyBub3Rcbi8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29uZmxpY3RpbmcgY29uZmlncywgYnV0IHNpbmNlIHdlIGNhbiBjb250aW51ZVxuLy8gbG9va2luZyBmb3IgaW5wdXQgcmVhc29uYWJseSwgZG9uJ3QgZGVjbGFyZSB0aGUgc3RhdGUgZG9uZS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5QVVJFIFNMTCBQQVJTSU5HPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlRvIGhhbmRsZSBwdXJlIFNMTCBwYXJzaW5nLCBhbGwgd2UgaGF2ZSB0byBkbyBpcyBtYWtlIHN1cmUgdGhhdCB3ZVxuLy8gY29tYmluZSBzdGFjayBjb250ZXh0cyBmb3IgY29uZmlndXJhdGlvbnMgdGhhdCBkaWZmZXIgb25seSBieSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlLiBGcm9tIHRoZXJlLCB3ZSBjYW4gZG8gdGhlIHVzdWFsIFNMTCB0ZXJtaW5hdGlvbiBoZXVyaXN0aWMuPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+UFJFRElDQVRFUyBJTiBTTEwrTEwgUEFSU0lORzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5TTEwgZGVjaXNpb25zIGRvbid0IGV2YWx1YXRlIHByZWRpY2F0ZXMgdW50aWwgYWZ0ZXIgdGhleSByZWFjaCBERkEgc3RvcFxuLy8gc3RhdGVzIGJlY2F1c2UgdGhleSBuZWVkIHRvIGNyZWF0ZSB0aGUgREZBIGNhY2hlIHRoYXQgd29ya3MgaW4gYWxsXG4vLyBzZW1hbnRpYyBzaXR1YXRpb25zLiBJbiBjb250cmFzdCwgZnVsbCBMTCBldmFsdWF0ZXMgcHJlZGljYXRlcyBjb2xsZWN0ZWRcbi8vIGR1cmluZyBzdGFydCBzdGF0ZSBjb21wdXRhdGlvbiBzbyBpdCBjYW4gaWdub3JlIHByZWRpY2F0ZXMgdGhlcmVhZnRlci5cbi8vIFRoaXMgbWVhbnMgdGhhdCBTTEwgdGVybWluYXRpb24gZGV0ZWN0aW9uIGNhbiB0b3RhbGx5IGlnbm9yZSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlcy48L3A+XG4vL1xuLy8gPHA+SW1wbGVtZW50YXRpb24td2lzZSwge0BsaW5rIEFUTkNvbmZpZ1NldH0gY29tYmluZXMgc3RhY2sgY29udGV4dHMgYnV0IG5vdFxuLy8gc2VtYW50aWMgcHJlZGljYXRlIGNvbnRleHRzIHNvIHdlIG1pZ2h0IHNlZSB0d28gY29uZmlndXJhdGlvbnMgbGlrZSB0aGVcbi8vIGZvbGxvd2luZy48L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIChzLCAxLCB4LCB7fSksIChzLCAxLCB4Jywge3B9KX08L3A+XG4vL1xuLy8gPHA+QmVmb3JlIHRlc3RpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgYWdhaW5zdCBvdGhlcnMsIHdlIGhhdmUgdG8gbWVyZ2Vcbi8vIHtAY29kZSB4fSBhbmQge0Bjb2RlIHgnfSAod2l0aG91dCBtb2RpZnlpbmcgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zKS5cbi8vIEZvciBleGFtcGxlLCB3ZSB0ZXN0IHtAY29kZSAoeCt4Jyk9PXgnJ30gd2hlbiBsb29raW5nIGZvciBjb25mbGljdHMgaW5cbi8vIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMuPC9wPlxuLy9cbi8vIDxwPntAY29kZSAocywgMSwgeCwge30pLCAocywgMSwgeCcsIHtwfSksIChzLCAyLCB4JycsIHt9KX08L3A+XG4vL1xuLy8gPHA+SWYgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IGhhcyBwcmVkaWNhdGVzIChhcyBpbmRpY2F0ZWQgYnlcbi8vIHtAbGluayBBVE5Db25maWdTZXQvL2hhc1NlbWFudGljQ29udGV4dH0pLCB0aGlzIGFsZ29yaXRobSBtYWtlcyBhIGNvcHkgb2Zcbi8vIHRoZSBjb25maWd1cmF0aW9ucyB0byBzdHJpcCBvdXQgYWxsIG9mIHRoZSBwcmVkaWNhdGVzIHNvIHRoYXQgYSBzdGFuZGFyZFxuLy8ge0BsaW5rIEFUTkNvbmZpZ1NldH0gd2lsbCBtZXJnZSBldmVyeXRoaW5nIGlnbm9yaW5nIHByZWRpY2F0ZXMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLmhhc1NMTENvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uID0gZnVuY3Rpb24oIG1vZGUsIGNvbmZpZ3MpIHtcbiAgICAvLyBDb25maWdzIGluIHJ1bGUgc3RvcCBzdGF0ZXMgaW5kaWNhdGUgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb25cbiAgICAvLyBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2Ygc3RhcnQgcnVsZSAoZnVsbCBjb250ZXh0KS4gSWYgYWxsXG4gICAgLy8gY29uZmlncyBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGVuIG5vbmUgb2YgdGhlIGNvbmZpZ3VyYXRpb25zIGlzIGFibGVcbiAgICAvLyB0byBtYXRjaCBhZGRpdGlvbmFsIGlucHV0IHNvIHdlIHRlcm1pbmF0ZSBwcmVkaWN0aW9uLlxuICAgIC8vXG4gICAgaWYgKFByZWRpY3Rpb25Nb2RlLmFsbENvbmZpZ3NJblJ1bGVTdG9wU3RhdGVzKGNvbmZpZ3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBwdXJlIFNMTCBtb2RlIHBhcnNpbmdcbiAgICBpZiAobW9kZSA9PT0gUHJlZGljdGlvbk1vZGUuU0xMKSB7XG4gICAgICAgIC8vIERvbid0IGJvdGhlciB3aXRoIGNvbWJpbmluZyBjb25maWdzIGZyb20gZGlmZmVyZW50IHNlbWFudGljXG4gICAgICAgIC8vIGNvbnRleHRzIGlmIHdlIGNhbiBmYWlsIG92ZXIgdG8gZnVsbCBMTDsgY29zdHMgbW9yZSB0aW1lXG4gICAgICAgIC8vIHNpbmNlIHdlJ2xsIG9mdGVuIGZhaWwgb3ZlciBhbnl3YXkuXG4gICAgICAgIGlmIChjb25maWdzLmhhc1NlbWFudGljQ29udGV4dCkge1xuICAgICAgICAgICAgLy8gZHVwIGNvbmZpZ3MsIHRvc3Npbmcgb3V0IHNlbWFudGljIHByZWRpY2F0ZXNcbiAgICAgICAgICAgIHZhciBkdXAgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgICAgICAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICAgICAgXHR2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3NlbWFudGljQ29udGV4dDpTZW1hbnRpY0NvbnRleHQuTk9ORX0sIGMpO1xuICAgICAgICAgICAgICAgIGR1cC5hZGQoYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWdzID0gZHVwO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB3ZSBoYXZlIGNvbWJpbmVkIGNvbnRleHRzIGZvciBjb25maWdzIHdpdGggZGlzc2ltaWxhciBwcmVkc1xuICAgIH1cbiAgICAvLyBwdXJlIFNMTCBvciBjb21iaW5lZCBTTEwrTEwgbW9kZSBwYXJzaW5nXG4gICAgdmFyIGFsdHNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMoY29uZmlncyk7XG4gICAgcmV0dXJuIFByZWRpY3Rpb25Nb2RlLmhhc0NvbmZsaWN0aW5nQWx0U2V0KGFsdHNldHMpICYmICFQcmVkaWN0aW9uTW9kZS5oYXNTdGF0ZUFzc29jaWF0ZWRXaXRoT25lQWx0KGNvbmZpZ3MpO1xufTtcblxuLy8gQ2hlY2tzIGlmIGFueSBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSBpcyBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0uIENvbmZpZ3VyYXRpb25zIG1lZXRpbmcgdGhpcyBjb25kaXRpb24gaGF2ZSByZWFjaGVkXG4vLyB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2Ygc3RhcnQgcnVsZSAoZnVsbFxuLy8gY29udGV4dCkuXG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHRvIHRlc3Rcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGFueSBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSBpcyBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG5QcmVkaWN0aW9uTW9kZS5oYXNDb25maWdJblJ1bGVTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWdzKSB7XG5cdGZvcih2YXIgaT0wO2k8Y29uZmlncy5pdGVtcy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBDaGVja3MgaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8ge0BsaW5rIFJ1bGVTdG9wU3RhdGV9LiBDb25maWd1cmF0aW9ucyBtZWV0aW5nIHRoaXMgY29uZGl0aW9uIGhhdmUgcmVhY2hlZFxuLy8gdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHN0YXJ0IHJ1bGUgKGZ1bGxcbi8vIGNvbnRleHQpLlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIHRoZSBjb25maWd1cmF0aW9uIHNldCB0byB0ZXN0XG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBhbGwgY29uZmlndXJhdGlvbnMgaW4ge0Bjb2RlIGNvbmZpZ3N9IGFyZSBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG5QcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0Zm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmICghKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vXG4vLyBGdWxsIExMIHByZWRpY3Rpb24gdGVybWluYXRpb24uXG4vL1xuLy8gPHA+Q2FuIHdlIHN0b3AgbG9va2luZyBhaGVhZCBkdXJpbmcgQVROIHNpbXVsYXRpb24gb3IgaXMgdGhlcmUgc29tZVxuLy8gdW5jZXJ0YWludHkgYXMgdG8gd2hpY2ggYWx0ZXJuYXRpdmUgd2Ugd2lsbCB1bHRpbWF0ZWx5IHBpY2ssIGFmdGVyXG4vLyBjb25zdW1pbmcgbW9yZSBpbnB1dD8gRXZlbiBpZiB0aGVyZSBhcmUgcGFydGlhbCBjb25mbGljdHMsIHdlIG1pZ2h0IGtub3dcbi8vIHRoYXQgZXZlcnl0aGluZyBpcyBnb2luZyB0byByZXNvbHZlIHRvIHRoZSBzYW1lIG1pbmltdW0gYWx0ZXJuYXRpdmUuIFRoYXRcbi8vIG1lYW5zIHdlIGNhbiBzdG9wIHNpbmNlIG5vIG1vcmUgbG9va2FoZWFkIHdpbGwgY2hhbmdlIHRoYXQgZmFjdC4gT24gdGhlXG4vLyBvdGhlciBoYW5kLCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBjb25mbGljdHMgdGhhdCByZXNvbHZlIHRvIGRpZmZlcmVudFxuLy8gbWluaW11bXMuIFRoYXQgbWVhbnMgd2UgbmVlZCBtb3JlIGxvb2sgYWhlYWQgdG8gZGVjaWRlIHdoaWNoIG9mIHRob3NlXG4vLyBhbHRlcm5hdGl2ZXMgd2Ugc2hvdWxkIHByZWRpY3QuPC9wPlxuLy9cbi8vIDxwPlRoZSBiYXNpYyBpZGVhIGlzIHRvIHNwbGl0IHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMge0Bjb2RlIEN9LCBpbnRvXG4vLyBjb25mbGljdGluZyBzdWJzZXRzIHtAY29kZSAocywgXywgY3R4LCBfKX0gYW5kIHNpbmdsZXRvbiBzdWJzZXRzIHdpdGhcbi8vIG5vbi1jb25mbGljdGluZyBjb25maWd1cmF0aW9ucy4gVHdvIGNvbmZpZ3VyYXRpb25zIGNvbmZsaWN0IGlmIHRoZXkgaGF2ZVxuLy8gaWRlbnRpY2FsIHtAbGluayBBVE5Db25maWcvL3N0YXRlfSBhbmQge0BsaW5rIEFUTkNvbmZpZy8vY29udGV4dH0gdmFsdWVzXG4vLyBidXQgZGlmZmVyZW50IHtAbGluayBBVE5Db25maWcvL2FsdH0gdmFsdWUsIGUuZy4ge0Bjb2RlIChzLCBpLCBjdHgsIF8pfVxuLy8gYW5kIHtAY29kZSAocywgaiwgY3R4LCBfKX0gZm9yIHtAY29kZSBpIT1qfS48L3A+XG4vL1xuLy8gPHA+UmVkdWNlIHRoZXNlIGNvbmZpZ3VyYXRpb24gc3Vic2V0cyB0byB0aGUgc2V0IG9mIHBvc3NpYmxlIGFsdGVybmF0aXZlcy5cbi8vIFlvdSBjYW4gY29tcHV0ZSB0aGUgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpbiBvbmUgcGFzcyBhcyBmb2xsb3dzOjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgQV9zLGN0eCA9IHtpIHwgKHMsIGksIGN0eCwgXyl9fSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGluXG4vLyB7QGNvZGUgQ30gaG9sZGluZyB7QGNvZGUgc30gYW5kIHtAY29kZSBjdHh9IGZpeGVkLjwvcD5cbi8vXG4vLyA8cD5PciBpbiBwc2V1ZG8tY29kZSwgZm9yIGVhY2ggY29uZmlndXJhdGlvbiB7QGNvZGUgY30gaW4ge0Bjb2RlIEN9OjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gbWFwW2NdIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH0gLy8gbWFwIGhhc2gvZXF1YWxzIHVzZXMgcyBhbmQgeCwgbm90XG4vLyBhbHQgYW5kIG5vdCBwcmVkXG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5UaGUgdmFsdWVzIGluIHtAY29kZSBtYXB9IGFyZSB0aGUgc2V0IG9mIHtAY29kZSBBX3MsY3R4fSBzZXRzLjwvcD5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgfEFfcyxjdHh8PTF9IHRoZW4gdGhlcmUgaXMgbm8gY29uZmxpY3QgYXNzb2NpYXRlZCB3aXRoXG4vLyB7QGNvZGUgc30gYW5kIHtAY29kZSBjdHh9LjwvcD5cbi8vXG4vLyA8cD5SZWR1Y2UgdGhlIHN1YnNldHMgdG8gc2luZ2xldG9ucyBieSBjaG9vc2luZyBhIG1pbmltdW0gb2YgZWFjaCBzdWJzZXQuIElmXG4vLyB0aGUgdW5pb24gb2YgdGhlc2UgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpcyBhIHNpbmdsZXRvbiwgdGhlbiBubyBhbW91bnQgb2Zcbi8vIG1vcmUgbG9va2FoZWFkIHdpbGwgaGVscCB1cy4gV2Ugd2lsbCBhbHdheXMgcGljayB0aGF0IGFsdGVybmF0aXZlLiBJZixcbi8vIGhvd2V2ZXIsIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUsIHRoZW4gd2UgYXJlIHVuY2VydGFpbiB3aGljaFxuLy8gYWx0ZXJuYXRpdmUgdG8gcHJlZGljdCBhbmQgbXVzdCBjb250aW51ZSBsb29raW5nIGZvciByZXNvbHV0aW9uLiBXZSBtYXlcbi8vIG9yIG1heSBub3QgZGlzY292ZXIgYW4gYW1iaWd1aXR5IGluIHRoZSBmdXR1cmUsIGV2ZW4gaWYgdGhlcmUgYXJlIG5vXG4vLyBjb25mbGljdGluZyBzdWJzZXRzIHRoaXMgcm91bmQuPC9wPlxuLy9cbi8vIDxwPlRoZSBiaWdnZXN0IHNpbiBpcyB0byB0ZXJtaW5hdGUgZWFybHkgYmVjYXVzZSBpdCBtZWFucyB3ZSd2ZSBtYWRlIGFcbi8vIGRlY2lzaW9uIGJ1dCB3ZXJlIHVuY2VydGFpbiBhcyB0byB0aGUgZXZlbnR1YWwgb3V0Y29tZS4gV2UgaGF2ZW4ndCB1c2VkXG4vLyBlbm91Z2ggbG9va2FoZWFkLiBPbiB0aGUgb3RoZXIgaGFuZCwgYW5ub3VuY2luZyBhIGNvbmZsaWN0IHRvbyBsYXRlIGlzIG5vXG4vLyBiaWcgZGVhbDsgeW91IHdpbGwgc3RpbGwgaGF2ZSB0aGUgY29uZmxpY3QuIEl0J3MganVzdCBpbmVmZmljaWVudC4gSXRcbi8vIG1pZ2h0IGV2ZW4gbG9vayB1bnRpbCB0aGUgZW5kIG9mIGZpbGUuPC9wPlxuLy9cbi8vIDxwPk5vIHNwZWNpYWwgY29uc2lkZXJhdGlvbiBmb3Igc2VtYW50aWMgcHJlZGljYXRlcyBpcyByZXF1aXJlZCBiZWNhdXNlXG4vLyBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQgb24tdGhlLWZseSBmb3IgZnVsbCBMTCBwcmVkaWN0aW9uLCBlbnN1cmluZyB0aGF0XG4vLyBubyBjb25maWd1cmF0aW9uIGNvbnRhaW5zIGEgc2VtYW50aWMgY29udGV4dCBkdXJpbmcgdGhlIHRlcm1pbmF0aW9uXG4vLyBjaGVjay48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5DT05GTElDVElORyBDT05GSUdTPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlR3byBjb25maWd1cmF0aW9ucyB7QGNvZGUgKHMsIGksIHgpfSBhbmQge0Bjb2RlIChzLCBqLCB4Jyl9LCBjb25mbGljdFxuLy8gd2hlbiB7QGNvZGUgaSE9an0gYnV0IHtAY29kZSB4PXgnfS4gQmVjYXVzZSB3ZSBtZXJnZSBhbGxcbi8vIHtAY29kZSAocywgaSwgXyl9IGNvbmZpZ3VyYXRpb25zIHRvZ2V0aGVyLCB0aGF0IG1lYW5zIHRoYXQgdGhlcmUgYXJlIGF0XG4vLyBtb3N0IHtAY29kZSBufSBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggc3RhdGUge0Bjb2RlIHN9IGZvclxuLy8ge0Bjb2RlIG59IHBvc3NpYmxlIGFsdGVybmF0aXZlcyBpbiB0aGUgZGVjaXNpb24uIFRoZSBtZXJnZWQgc3RhY2tzXG4vLyBjb21wbGljYXRlIHRoZSBjb21wYXJpc29uIG9mIGNvbmZpZ3VyYXRpb24gY29udGV4dHMge0Bjb2RlIHh9IGFuZFxuLy8ge0Bjb2RlIHgnfS4gU2FtIGNoZWNrcyB0byBzZWUgaWYgb25lIGlzIGEgc3Vic2V0IG9mIHRoZSBvdGhlciBieSBjYWxsaW5nXG4vLyBtZXJnZSBhbmQgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZSBtZXJnZWQgcmVzdWx0IGlzIGVpdGhlciB7QGNvZGUgeH0gb3Jcbi8vIHtAY29kZSB4J30uIElmIHRoZSB7QGNvZGUgeH0gYXNzb2NpYXRlZCB3aXRoIGxvd2VzdCBhbHRlcm5hdGl2ZSB7QGNvZGUgaX1cbi8vIGlzIHRoZSBzdXBlcnNldCwgdGhlbiB7QGNvZGUgaX0gaXMgdGhlIG9ubHkgcG9zc2libGUgcHJlZGljdGlvbiBzaW5jZSB0aGVcbi8vIG90aGVycyByZXNvbHZlIHRvIHtAY29kZSBtaW4oaSl9IGFzIHdlbGwuIEhvd2V2ZXIsIGlmIHtAY29kZSB4fSBpc1xuLy8gYXNzb2NpYXRlZCB3aXRoIHtAY29kZSBqPml9IHRoZW4gYXQgbGVhc3Qgb25lIHN0YWNrIGNvbmZpZ3VyYXRpb24gZm9yXG4vLyB7QGNvZGUgan0gaXMgbm90IGluIGNvbmZsaWN0IHdpdGggYWx0ZXJuYXRpdmUge0Bjb2RlIGl9LiBUaGUgYWxnb3JpdGhtXG4vLyBzaG91bGQga2VlcCBnb2luZywgbG9va2luZyBmb3IgbW9yZSBsb29rYWhlYWQgZHVlIHRvIHRoZSB1bmNlcnRhaW50eS48L3A+XG4vL1xuLy8gPHA+Rm9yIHNpbXBsaWNpdHksIEknbSBkb2luZyBhIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4ge0Bjb2RlIHh9IGFuZFxuLy8ge0Bjb2RlIHgnfSB0aGF0IGxldHMgdGhlIGFsZ29yaXRobSBjb250aW51ZSB0byBjb25zdW1lIGxvb2thaGVhZCBsb25nZXJcbi8vIHRoYW4gbmVjZXNzYXJ5LiBUaGUgcmVhc29uIEkgbGlrZSB0aGUgZXF1YWxpdHkgaXMgb2YgY291cnNlIHRoZVxuLy8gc2ltcGxpY2l0eSBidXQgYWxzbyBiZWNhdXNlIHRoYXQgaXMgdGhlIHRlc3QgeW91IG5lZWQgdG8gZGV0ZWN0IHRoZVxuLy8gYWx0ZXJuYXRpdmVzIHRoYXQgYXJlIGFjdHVhbGx5IGluIGNvbmZsaWN0LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkNPTlRJTlVFL1NUT1AgUlVMRTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Db250aW51ZSBpZiB1bmlvbiBvZiByZXNvbHZlZCBhbHRlcm5hdGl2ZSBzZXRzIGZyb20gbm9uLWNvbmZsaWN0aW5nIGFuZFxuLy8gY29uZmxpY3RpbmcgYWx0ZXJuYXRpdmUgc3Vic2V0cyBoYXMgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZS4gV2UgYXJlXG4vLyB1bmNlcnRhaW4gYWJvdXQgd2hpY2ggYWx0ZXJuYXRpdmUgdG8gcHJlZGljdC48L3A+XG4vL1xuLy8gPHA+VGhlIGNvbXBsZXRlIHNldCBvZiBhbHRlcm5hdGl2ZXMsIHtAY29kZSBbaSBmb3IgKF8saSxfKV19LCB0ZWxscyB1cyB3aGljaFxuLy8gYWx0ZXJuYXRpdmVzIGFyZSBzdGlsbCBpbiB0aGUgcnVubmluZyBmb3IgdGhlIGFtb3VudCBvZiBpbnB1dCB3ZSd2ZVxuLy8gY29uc3VtZWQgYXQgdGhpcyBwb2ludC4gVGhlIGNvbmZsaWN0aW5nIHNldHMgbGV0IHVzIHRvIHN0cmlwIGF3YXlcbi8vIGNvbmZpZ3VyYXRpb25zIHRoYXQgd29uJ3QgbGVhZCB0byBtb3JlIHN0YXRlcyBiZWNhdXNlIHdlIHJlc29sdmVcbi8vIGNvbmZsaWN0cyB0byB0aGUgY29uZmlndXJhdGlvbiB3aXRoIGEgbWluaW11bSBhbHRlcm5hdGUgZm9yIHRoZVxuLy8gY29uZmxpY3Rpbmcgc2V0LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkNBU0VTPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDx1bD5cbi8vXG4vLyA8bGk+bm8gY29uZmxpY3RzIGFuZCBtb3JlIHRoYW4gMSBhbHRlcm5hdGl2ZSBpbiBzZXQgPSZndDsgY29udGludWU8L2xpPlxuLy9cbi8vIDxsaT4ge0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMsIDMsIHopfSxcbi8vIHtAY29kZSAocycsIDEsIHkpfSwge0Bjb2RlIChzJywgMiwgeSl9IHlpZWxkcyBub24tY29uZmxpY3Rpbmcgc2V0XG4vLyB7QGNvZGUgezN9fSBVIGNvbmZsaWN0aW5nIHNldHMge0Bjb2RlIG1pbih7MSwyfSl9IFUge0Bjb2RlIG1pbih7MSwyfSl9ID1cbi8vIHtAY29kZSB7MSwzfX0gPSZndDsgY29udGludWVcbi8vIDwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMSwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMiwgeSl9LCB7QGNvZGUgKHMnJywgMSwgeil9IHlpZWxkcyBub24tY29uZmxpY3Rpbmcgc2V0XG4vLyB7QGNvZGUgezF9fSBVIGNvbmZsaWN0aW5nIHNldHMge0Bjb2RlIG1pbih7MSwyfSl9IFUge0Bjb2RlIG1pbih7MSwyfSl9ID1cbi8vIHtAY29kZSB7MX19ID0mZ3Q7IHN0b3AgYW5kIHByZWRpY3QgMTwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMSwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMiwgeSl9IHlpZWxkcyBjb25mbGljdGluZywgcmVkdWNlZCBzZXRzIHtAY29kZSB7MX19IFVcbi8vIHtAY29kZSB7MX19ID0ge0Bjb2RlIHsxfX0gPSZndDsgc3RvcCBhbmQgcHJlZGljdCAxLCBjYW4gYW5ub3VuY2Vcbi8vIGFtYmlndWl0eSB7QGNvZGUgezEsMn19PC9saT5cbi8vXG4vLyA8bGk+e0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMnLCAyLCB5KX0sXG4vLyB7QGNvZGUgKHMnLCAzLCB5KX0geWllbGRzIGNvbmZsaWN0aW5nLCByZWR1Y2VkIHNldHMge0Bjb2RlIHsxfX0gVVxuLy8ge0Bjb2RlIHsyfX0gPSB7QGNvZGUgezEsMn19ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8bGk+e0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMnLCAzLCB5KX0sXG4vLyB7QGNvZGUgKHMnLCA0LCB5KX0geWllbGRzIGNvbmZsaWN0aW5nLCByZWR1Y2VkIHNldHMge0Bjb2RlIHsxfX0gVVxuLy8ge0Bjb2RlIHszfX0gPSB7QGNvZGUgezEsM319ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8L3VsPlxuLy9cbi8vIDxwPjxzdHJvbmc+RVhBQ1QgQU1CSUdVSVRZIERFVEVDVElPTjwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5JZiBhbGwgc3RhdGVzIHJlcG9ydCB0aGUgc2FtZSBjb25mbGljdGluZyBzZXQgb2YgYWx0ZXJuYXRpdmVzLCB0aGVuIHdlXG4vLyBrbm93IHdlIGhhdmUgdGhlIGV4YWN0IGFtYmlndWl0eSBzZXQuPC9wPlxuLy9cbi8vIDxwPjxjb2RlPnxBXzxlbT5pPC9lbT58Jmd0OzE8L2NvZGU+IGFuZFxuLy8gPGNvZGU+QV88ZW0+aTwvZW0+ID0gQV88ZW0+ajwvZW0+PC9jb2RlPiBmb3IgYWxsIDxlbT5pPC9lbT4sIDxlbT5qPC9lbT4uPC9wPlxuLy9cbi8vIDxwPkluIG90aGVyIHdvcmRzLCB3ZSBjb250aW51ZSBleGFtaW5pbmcgbG9va2FoZWFkIHVudGlsIGFsbCB7QGNvZGUgQV9pfVxuLy8gaGF2ZSBtb3JlIHRoYW4gb25lIGFsdGVybmF0aXZlIGFuZCBhbGwge0Bjb2RlIEFfaX0gYXJlIHRoZSBzYW1lLiBJZlxuLy8ge0Bjb2RlIEE9e3sxLDJ9LCB7MSwzfX19LCB0aGVuIHJlZ3VsYXIgTEwgcHJlZGljdGlvbiB3b3VsZCB0ZXJtaW5hdGVcbi8vIGJlY2F1c2UgdGhlIHJlc29sdmVkIHNldCBpcyB7QGNvZGUgezF9fS4gVG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHJlYWxcbi8vIGFtYmlndWl0eSBpcywgd2UgaGF2ZSB0byBrbm93IHdoZXRoZXIgdGhlIGFtYmlndWl0eSBpcyBiZXR3ZWVuIG9uZSBhbmRcbi8vIHR3byBvciBvbmUgYW5kIHRocmVlIHNvIHdlIGtlZXAgZ29pbmcuIFdlIGNhbiBvbmx5IHN0b3AgcHJlZGljdGlvbiB3aGVuXG4vLyB3ZSBuZWVkIGV4YWN0IGFtYmlndWl0eSBkZXRlY3Rpb24gd2hlbiB0aGUgc2V0cyBsb29rIGxpa2Vcbi8vIHtAY29kZSBBPXt7MSwyfX19IG9yIHtAY29kZSB7ezEsMn0sezEsMn19fSwgZXRjLi4uPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHJldHVybiBQcmVkaWN0aW9uTW9kZS5nZXRTaW5nbGVWaWFibGVBbHQoYWx0c2V0cyk7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBldmVyeSBhbHRlcm5hdGl2ZSBzdWJzZXQgaW4ge0Bjb2RlIGFsdHNldHN9IGNvbnRhaW5zIG1vcmVcbi8vIHRoYW4gb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBldmVyeSB7QGxpbmsgQml0U2V0fSBpbiB7QGNvZGUgYWx0c2V0c30gaGFzXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gJmd0OyAxLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy9cblByZWRpY3Rpb25Nb2RlLmFsbFN1YnNldHNDb25mbGljdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICByZXR1cm4gISBQcmVkaWN0aW9uTW9kZS5oYXNOb25Db25mbGljdGluZ0FsdFNldChhbHRzZXRzKTtcbn07XG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBhbnkgc2luZ2xlIGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnNcbi8vIGV4YWN0bHkgb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnMgYSB7QGxpbmsgQml0U2V0fSB3aXRoXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gMSwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5oYXNOb25Db25mbGljdGluZ0FsdFNldCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIGlmIChhbHRzLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBhbnkgc2luZ2xlIGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnNcbi8vIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUuXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHtAY29kZSBhbHRzZXRzfSBjb250YWlucyBhIHtAbGluayBCaXRTZXR9IHdpdGhcbi8vIHtAbGluayBCaXRTZXQvL2NhcmRpbmFsaXR5IGNhcmRpbmFsaXR5fSAmZ3Q7IDEsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuUHJlZGljdGlvbk1vZGUuaGFzQ29uZmxpY3RpbmdBbHRTZXQgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG5cdGZvcih2YXIgaT0wO2k8YWx0c2V0cy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGFsdHMgPSBhbHRzZXRzW2ldO1xuICAgICAgICBpZiAoYWx0cy5sZW5ndGg+MSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblx0fVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vXG4vLyBEZXRlcm1pbmVzIGlmIGV2ZXJ5IGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gaXMgZXF1aXZhbGVudC5cbi8vXG4vLyBAcGFyYW0gYWx0c2V0cyBhIGNvbGxlY3Rpb24gb2YgYWx0ZXJuYXRpdmUgc3Vic2V0c1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgZXZlcnkgbWVtYmVyIG9mIHtAY29kZSBhbHRzZXRzfSBpcyBlcXVhbCB0byB0aGVcbi8vIG90aGVycywgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzRXF1YWwgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG4gICAgdmFyIGZpcnN0ID0gbnVsbDtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIGlmIChmaXJzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmlyc3QgPSBhbHRzO1xuICAgICAgICB9IGVsc2UgaWYgKGFsdHMhPT1maXJzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vXG4vLyBSZXR1cm5zIHRoZSB1bmlxdWUgYWx0ZXJuYXRpdmUgcHJlZGljdGVkIGJ5IGFsbCBhbHRlcm5hdGl2ZSBzdWJzZXRzIGluXG4vLyB7QGNvZGUgYWx0c2V0c30uIElmIG5vIHN1Y2ggYWx0ZXJuYXRpdmUgZXhpc3RzLCB0aGlzIG1ldGhvZCByZXR1cm5zXG4vLyB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0VW5pcXVlQWx0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHZhciBhbGwgPSBQcmVkaWN0aW9uTW9kZS5nZXRBbHRzKGFsdHNldHMpO1xuICAgIGlmIChhbGwubGVuZ3RoPT09MSkge1xuICAgICAgICByZXR1cm4gYWxsLm1pblZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgfVxufTtcblxuLy8gR2V0cyB0aGUgY29tcGxldGUgc2V0IG9mIHJlcHJlc2VudGVkIGFsdGVybmF0aXZlcyBmb3IgYSBjb2xsZWN0aW9uIG9mXG4vLyBhbHRlcm5hdGl2ZSBzdWJzZXRzLiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB1bmlvbiBvZiBlYWNoIHtAbGluayBCaXRTZXR9XG4vLyBpbiB7QGNvZGUgYWx0c2V0c30uXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4gdGhlIHNldCBvZiByZXByZXNlbnRlZCBhbHRlcm5hdGl2ZXMgaW4ge0Bjb2RlIGFsdHNldHN9XG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0QWx0cyA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgYWxsID0gbmV3IEJpdFNldCgpO1xuICAgIGFsdHNldHMubWFwKCBmdW5jdGlvbihhbHRzKSB7IGFsbC5vcihhbHRzKTsgfSk7XG4gICAgcmV0dXJuIGFsbDtcbn07XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGNvbmZsaWN0aW5nIGFsdCBzdWJzZXRzIGZyb20gYSBjb25maWd1cmF0aW9uIHNldC5cbi8vIEZvciBlYWNoIGNvbmZpZ3VyYXRpb24ge0Bjb2RlIGN9IGluIHtAY29kZSBjb25maWdzfTpcbi8vXG4vLyA8cHJlPlxuLy8gbWFwW2NdIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH0gLy8gbWFwIGhhc2gvZXF1YWxzIHVzZXMgcyBhbmQgeCwgbm90XG4vLyBhbHQgYW5kIG5vdCBwcmVkXG4vLyA8L3ByZT5cblxuUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBjb25maWdUb0FsdHMgPSBuZXcgTWFwKCk7XG4gICAgY29uZmlnVG9BbHRzLmhhc2hGdW5jdGlvbiA9IGZ1bmN0aW9uKGNmZykgeyBoYXNoU3R1ZmYoY2ZnLnN0YXRlLnN0YXRlTnVtYmVyLCBjZmcuY29udGV4dCk7IH07XG4gICAgY29uZmlnVG9BbHRzLmVxdWFsc0Z1bmN0aW9uID0gZnVuY3Rpb24oYzEsIGMyKSB7IHJldHVybiBjMS5zdGF0ZS5zdGF0ZU51bWJlcj09YzIuc3RhdGUuc3RhdGVOdW1iZXIgJiYgYzEuY29udGV4dC5lcXVhbHMoYzIuY29udGV4dCk7fVxuICAgIGNvbmZpZ3MuaXRlbXMubWFwKGZ1bmN0aW9uKGNmZykge1xuICAgICAgICB2YXIgYWx0cyA9IGNvbmZpZ1RvQWx0cy5nZXQoY2ZnKTtcbiAgICAgICAgaWYgKGFsdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdHMgPSBuZXcgQml0U2V0KCk7XG4gICAgICAgICAgICBjb25maWdUb0FsdHMucHV0KGNmZywgYWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgYWx0cy5hZGQoY2ZnLmFsdCk7XG5cdH0pO1xuICAgIHJldHVybiBjb25maWdUb0FsdHMuZ2V0VmFsdWVzKCk7XG59O1xuXG4vL1xuLy8gR2V0IGEgbWFwIGZyb20gc3RhdGUgdG8gYWx0IHN1YnNldCBmcm9tIGEgY29uZmlndXJhdGlvbiBzZXQuIEZvciBlYWNoXG4vLyBjb25maWd1cmF0aW9uIHtAY29kZSBjfSBpbiB7QGNvZGUgY29uZmlnc306XG4vL1xuLy8gPHByZT5cbi8vIG1hcFtjLntAbGluayBBVE5Db25maWcvL3N0YXRlIHN0YXRlfV0gVT0gYy57QGxpbmsgQVROQ29uZmlnLy9hbHQgYWx0fVxuLy8gPC9wcmU+XG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0U3RhdGVUb0FsdE1hcCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgbSA9IG5ldyBBbHREaWN0KCk7XG4gICAgY29uZmlncy5pdGVtcy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgYWx0cyA9IG0uZ2V0KGMuc3RhdGUpO1xuICAgICAgICBpZiAoYWx0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0cyA9IG5ldyBCaXRTZXQoKTtcbiAgICAgICAgICAgIG0ucHV0KGMuc3RhdGUsIGFsdHMpO1xuICAgICAgICB9XG4gICAgICAgIGFsdHMuYWRkKGMuYWx0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbn07XG5cblByZWRpY3Rpb25Nb2RlLmhhc1N0YXRlQXNzb2NpYXRlZFdpdGhPbmVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIHZhbHVlcyA9IFByZWRpY3Rpb25Nb2RlLmdldFN0YXRlVG9BbHRNYXAoY29uZmlncykudmFsdWVzKCk7XG4gICAgZm9yKHZhciBpPTA7aTx2YWx1ZXMubGVuZ3RoO2krKykge1xuICAgICAgICBpZiAodmFsdWVzW2ldLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblByZWRpY3Rpb25Nb2RlLmdldFNpbmdsZVZpYWJsZUFsdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gbnVsbDtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIHZhciBtaW5BbHQgPSBhbHRzLm1pblZhbHVlKCk7XG4gICAgICAgIGlmKHJlc3VsdD09PW51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1pbkFsdDtcbiAgICAgICAgfSBlbHNlIGlmKHJlc3VsdCE9PW1pbkFsdCkgeyAvLyBtb3JlIHRoYW4gMSB2aWFibGUgYWx0XG4gICAgICAgICAgICByZXR1cm4gQVROLklOVkFMSURfQUxUX05VTUJFUjtcbiAgICAgICAgfVxuXHR9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydHMuUHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZTtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyBBIHRyZWUgc3RydWN0dXJlIHVzZWQgdG8gcmVjb3JkIHRoZSBzZW1hbnRpYyBjb250ZXh0IGluIHdoaWNoXG4vLyAgYW4gQVROIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQuICBJdCdzIGVpdGhlciBhIHNpbmdsZSBwcmVkaWNhdGUsXG4vLyAgYSBjb25qdW5jdGlvbiB7QGNvZGUgcDEmJnAyfSwgb3IgYSBzdW0gb2YgcHJvZHVjdHMge0Bjb2RlIHAxfHxwMn0uXG4vL1xuLy8gIDxwPkkgaGF2ZSBzY29wZWQgdGhlIHtAbGluayBBTkR9LCB7QGxpbmsgT1J9LCBhbmQge0BsaW5rIFByZWRpY2F0ZX0gc3ViY2xhc3NlcyBvZlxuLy8gIHtAbGluayBTZW1hbnRpY0NvbnRleHR9IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBvdXRlciBjbGFzcy48L3A+XG4vL1xuXG52YXIgU2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLlNldDtcbnZhciBIYXNoID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkhhc2g7XG5cbmZ1bmN0aW9uIFNlbWFudGljQ29udGV4dCgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNlbWFudGljQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbi8vIEZvciBjb250ZXh0IGluZGVwZW5kZW50IHByZWRpY2F0ZXMsIHdlIGV2YWx1YXRlIHRoZW0gd2l0aG91dCBhIGxvY2FsXG4vLyBjb250ZXh0IChpLmUuLCBudWxsIGNvbnRleHQpLiBUaGF0IHdheSwgd2UgY2FuIGV2YWx1YXRlIHRoZW0gd2l0aG91dFxuLy8gaGF2aW5nIHRvIGNyZWF0ZSBwcm9wZXIgcnVsZS1zcGVjaWZpYyBjb250ZXh0IGR1cmluZyBwcmVkaWN0aW9uIChhc1xuLy8gb3Bwb3NlZCB0byB0aGUgcGFyc2VyLCB3aGljaCBjcmVhdGVzIHRoZW0gbmF0dXJhbGx5KS4gSW4gYSBwcmFjdGljYWxcbi8vIHNlbnNlLCB0aGlzIGF2b2lkcyBhIGNhc3QgZXhjZXB0aW9uIGZyb20gUnVsZUNvbnRleHQgdG8gbXlydWxlQ29udGV4dC5cbi8vXG4vLyA8cD5Gb3IgY29udGV4dCBkZXBlbmRlbnQgcHJlZGljYXRlcywgd2UgbXVzdCBwYXNzIGluIGEgbG9jYWwgY29udGV4dCBzbyB0aGF0XG4vLyByZWZlcmVuY2VzIHN1Y2ggYXMgJGFyZyBldmFsdWF0ZSBwcm9wZXJseSBhcyBfbG9jYWxjdHguYXJnLiBXZSBvbmx5XG4vLyBjYXB0dXJlIGNvbnRleHQgZGVwZW5kZW50IHByZWRpY2F0ZXMgaW4gdGhlIGNvbnRleHQgaW4gd2hpY2ggd2UgYmVnaW5cbi8vIHByZWRpY3Rpb24sIHNvIHdlIHBhc3NlZCBpbiB0aGUgb3V0ZXIgY29udGV4dCBoZXJlIGluIGNhc2Ugb2YgY29udGV4dFxuLy8gZGVwZW5kZW50IHByZWRpY2F0ZSBldmFsdWF0aW9uLjwvcD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcbn07XG5cbi8vXG4vLyBFdmFsdWF0ZSB0aGUgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGZvciB0aGUgY29udGV4dCBhbmQgcmVkdWNlIHRoZSByZXN1bHQuXG4vL1xuLy8gQHBhcmFtIHBhcnNlciBUaGUgcGFyc2VyIGluc3RhbmNlLlxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgY3VycmVudCBwYXJzZXIgY29udGV4dCBvYmplY3QuXG4vLyBAcmV0dXJuIFRoZSBzaW1wbGlmaWVkIHNlbWFudGljIGNvbnRleHQgYWZ0ZXIgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZVxuLy8gZXZhbHVhdGVkLCB3aGljaCB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy5cbi8vIDx1bD5cbi8vIDxsaT57QGxpbmsgLy9OT05FfTogaWYgdGhlIHByZWRpY2F0ZSBzaW1wbGlmaWVzIHRvIHtAY29kZSB0cnVlfSBhZnRlclxuLy8gcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQuPC9saT5cbi8vIDxsaT57QGNvZGUgbnVsbH06IGlmIHRoZSBwcmVkaWNhdGUgc2ltcGxpZmllcyB0byB7QGNvZGUgZmFsc2V9IGFmdGVyXG4vLyBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPGxpPntAY29kZSB0aGlzfTogaWYgdGhlIHNlbWFudGljIGNvbnRleHQgaXMgbm90IGNoYW5nZWQgYXMgYSByZXN1bHQgb2Zcbi8vIHByZWNlZGVuY2UgcHJlZGljYXRlIGV2YWx1YXRpb24uPC9saT5cbi8vIDxsaT5BIG5vbi17QGNvZGUgbnVsbH0ge0BsaW5rIFNlbWFudGljQ29udGV4dH06IHRoZSBuZXcgc2ltcGxpZmllZFxuLy8gc2VtYW50aWMgY29udGV4dCBhZnRlciBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPC91bD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwgfHwgYSA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQU5EKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuU2VtYW50aWNDb250ZXh0Lm9yQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBTZW1hbnRpY0NvbnRleHQuTk9ORTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbmV3IE9SKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuZnVuY3Rpb24gUHJlZGljYXRlKHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXggPT09IHVuZGVmaW5lZCA/IC0xIDogcnVsZUluZGV4O1xuXHR0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleCA9PT0gdW5kZWZpbmVkID8gLTEgOiBwcmVkSW5kZXg7XG5cdHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBpc0N0eERlcGVuZGVudDsgLy8gZS5nLiwgJGkgcmVmIGluIHByZWRcblx0cmV0dXJuIHRoaXM7XG59XG5cblByZWRpY2F0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNlbWFudGljQ29udGV4dC5wcm90b3R5cGUpO1xuUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZTtcblxuLy9UaGUgZGVmYXVsdCB7QGxpbmsgU2VtYW50aWNDb250ZXh0fSwgd2hpY2ggaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG9cbi8vYSBwcmVkaWNhdGUgb2YgdGhlIGZvcm0ge0Bjb2RlIHt0cnVlfT99LlxuLy9cblNlbWFudGljQ29udGV4dC5OT05FID0gbmV3IFByZWRpY2F0ZSgpO1xuXG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbihwYXJzZXIsIG91dGVyQ29udGV4dCkge1xuXHR2YXIgbG9jYWxjdHggPSB0aGlzLmlzQ3R4RGVwZW5kZW50ID8gb3V0ZXJDb250ZXh0IDogbnVsbDtcblx0cmV0dXJuIHBhcnNlci5zZW1wcmVkKGxvY2FsY3R4LCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5wcmVkSW5kZXgpO1xufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aGFzaC51cGRhdGUodGhpcy5ydWxlSW5kZXgsIHRoaXMucHJlZEluZGV4LCB0aGlzLmlzQ3R4RGVwZW5kZW50KTtcbn07XG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFByZWRpY2F0ZSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiZcblx0XHRcdFx0dGhpcy5wcmVkSW5kZXggPT09IG90aGVyLnByZWRJbmRleCAmJlxuXHRcdFx0XHR0aGlzLmlzQ3R4RGVwZW5kZW50ID09PSBvdGhlci5pc0N0eERlcGVuZGVudDtcblx0fVxufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIgKyB0aGlzLnJ1bGVJbmRleCArIFwiOlwiICsgdGhpcy5wcmVkSW5kZXggKyBcIn0/XCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlKHByZWNlZGVuY2UpIHtcblx0U2VtYW50aWNDb250ZXh0LmNhbGwodGhpcyk7XG5cdHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCA/IDAgOiBwcmVjZWRlbmNlO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWNlZGVuY2VQcmVkaWNhdGU7XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHBhcnNlci5wcmVjcHJlZChvdXRlckNvbnRleHQsIHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5ldmFsUHJlY2VkZW5jZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGlmIChwYXJzZXIucHJlY3ByZWQob3V0ZXJDb250ZXh0LCB0aGlzLnByZWNlZGVuY2UpKSB7XG5cdFx0cmV0dXJuIFNlbWFudGljQ29udGV4dC5OT05FO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb21wYXJlVG8gPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlIC0gb3RoZXIucHJlY2VkZW5jZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKDMxKTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQcmVjZWRlbmNlUHJlZGljYXRlKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlID09PSBvdGhlci5wcmVjZWRlbmNlO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIrdGhpcy5wcmVjZWRlbmNlK1wiPj1wcmVjfT9cIjtcbn07XG5cblxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLmZpbHRlclByZWNlZGVuY2VQcmVkaWNhdGVzID0gZnVuY3Rpb24oc2V0KSB7XG5cdHZhciByZXN1bHQgPSBbXTtcblx0c2V0LnZhbHVlcygpLm1hcCggZnVuY3Rpb24oY29udGV4dCkge1xuXHRcdGlmIChjb250ZXh0IGluc3RhbmNlb2YgUHJlY2VkZW5jZVByZWRpY2F0ZSkge1xuXHRcdFx0cmVzdWx0LnB1c2goY29udGV4dCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgbm9uZSBvZiB0aGUgY29udGFpbmVkIGNvbnRleHRzXG4vLyBpcyBmYWxzZS5cbi8vXG5mdW5jdGlvbiBBTkQoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIEFORCkge1xuXHRcdGEub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRcdG9wZXJhbmRzLmFkZChvKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvcGVyYW5kcy5hZGQoYSk7XG5cdH1cblx0aWYgKGIgaW5zdGFuY2VvZiBBTkQpIHtcblx0XHRiLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0XHRvcGVyYW5kcy5hZGQobyk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3BlcmFuZHMuYWRkKGIpO1xuXHR9XG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgbG93ZXN0IHByZWNlZGVuY2Vcblx0XHR2YXIgcmVkdWNlZCA9IG51bGw7XG5cdFx0cHJlY2VkZW5jZVByZWRpY2F0ZXMubWFwKCBmdW5jdGlvbihwKSB7XG5cdFx0XHRpZihyZWR1Y2VkPT09bnVsbCB8fCBwLnByZWNlZGVuY2U8cmVkdWNlZC5wcmVjZWRlbmNlKSB7XG5cdFx0XHRcdHJlZHVjZWQgPSBwO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9wZXJhbmRzLmFkZChyZWR1Y2VkKTtcblx0fVxuXHR0aGlzLm9wbmRzID0gb3BlcmFuZHMudmFsdWVzKCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5BTkQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZW1hbnRpY0NvbnRleHQucHJvdG90eXBlKTtcbkFORC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBTkQ7XG5cbkFORC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFORCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMub3BuZHMgPT09IG90aGVyLm9wbmRzO1xuXHR9XG59O1xuXG5BTkQucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMub3BuZHMsIFwiQU5EXCIpO1xufTtcbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuQU5ELnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICghdGhpcy5vcG5kc1tpXS5ldmFsdWF0ZShwYXJzZXIsIG91dGVyQ29udGV4dCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG5BTkQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBudWxsKSB7XG5cdFx0XHQvLyBUaGUgQU5EIGNvbnRleHQgaXMgZmFsc2UgaWYgYW55IGVsZW1lbnQgaXMgZmFsc2Vcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gZWxzZSBpZiAoZXZhbHVhdGVkICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gUmVkdWNlIHRoZSByZXN1bHQgYnkgc2tpcHBpbmcgdHJ1ZSBlbGVtZW50c1xuXHRcdFx0b3BlcmFuZHMucHVzaChldmFsdWF0ZWQpO1xuXHRcdH1cblx0fVxuXHRpZiAoIWRpZmZlcnMpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRpZiAob3BlcmFuZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gYWxsIGVsZW1lbnRzIHdlcmUgdHJ1ZSwgc28gdGhlIEFORCBjb250ZXh0IGlzIHRydWVcblx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdH1cblx0dmFyIHJlc3VsdCA9IG51bGw7XG5cdG9wZXJhbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KHJlc3VsdCwgbyk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuQU5ELnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHRoaXMub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRzICs9IFwiJiYgXCIgKyBvLnRvU3RyaW5nKCk7XG5cdH0pO1xuXHRyZXR1cm4gcy5sZW5ndGggPiAzID8gcy5zbGljZSgzKSA6IHM7XG59O1xuXG4vL1xuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgYXQgbGVhc3Qgb25lIG9mIHRoZSBjb250YWluZWRcbi8vIGNvbnRleHRzIGlzIHRydWUuXG4vL1xuZnVuY3Rpb24gT1IoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0YS5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChhKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0Yi5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChiKTtcblx0fVxuXG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgaGlnaGVzdCBwcmVjZWRlbmNlXG5cdFx0dmFyIHMgPSBwcmVjZWRlbmNlUHJlZGljYXRlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHJldHVybiBhLmNvbXBhcmVUbyhiKTtcblx0XHR9KTtcblx0XHR2YXIgcmVkdWNlZCA9IHNbcy5sZW5ndGgtMV07XG5cdFx0b3BlcmFuZHMuYWRkKHJlZHVjZWQpO1xuXHR9XG5cdHRoaXMub3BuZHMgPSBvcGVyYW5kcy52YWx1ZXMoKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9SLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5PUi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPUjtcblxuT1IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIE9SKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5vcG5kcyA9PT0gb3RoZXIub3BuZHM7XG5cdH1cbn07XG5cbk9SLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLm9wbmRzLCBcIk9SXCIpO1xufTtcblxuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuT1IucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wbmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHRoaXMub3BuZHNbaV0uZXZhbHVhdGUocGFyc2VyLCBvdXRlckNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuT1IucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gVGhlIE9SIGNvbnRleHQgaXMgdHJ1ZSBpZiBhbnkgZWxlbWVudCBpcyB0cnVlXG5cdFx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdFx0fSBlbHNlIGlmIChldmFsdWF0ZWQgIT09IG51bGwpIHtcblx0XHRcdC8vIFJlZHVjZSB0aGUgcmVzdWx0IGJ5IHNraXBwaW5nIGZhbHNlIGVsZW1lbnRzXG5cdFx0XHRvcGVyYW5kcy5wdXNoKGV2YWx1YXRlZCk7XG5cdFx0fVxuXHR9XG5cdGlmICghZGlmZmVycykge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGlmIChvcGVyYW5kcy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBhbGwgZWxlbWVudHMgd2VyZSBmYWxzZSwgc28gdGhlIE9SIGNvbnRleHQgaXMgZmFsc2Vcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbnVsbDtcblx0b3BlcmFuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRyZXR1cm4gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQocmVzdWx0LCBvKTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5PUi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiO1xuXHR0aGlzLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cyArPSBcInx8IFwiICsgby50b1N0cmluZygpO1xuXHR9KTtcblx0cmV0dXJuIHMubGVuZ3RoID4gMyA/IHMuc2xpY2UoMykgOiBzO1xufTtcblxuZXhwb3J0cy5TZW1hbnRpY0NvbnRleHQgPSBTZW1hbnRpY0NvbnRleHQ7XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGUgPSBQcmVjZWRlbmNlUHJlZGljYXRlO1xuZXhwb3J0cy5QcmVkaWNhdGUgPSBQcmVkaWNhdGU7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyAgQW4gQVROIHRyYW5zaXRpb24gYmV0d2VlbiBhbnkgdHdvIEFUTiBzdGF0ZXMuICBTdWJjbGFzc2VzIGRlZmluZVxuLy8gIGF0b20sIHNldCwgZXBzaWxvbiwgYWN0aW9uLCBwcmVkaWNhdGUsIHJ1bGUgdHJhbnNpdGlvbnMuXG4vL1xuLy8gIDxwPlRoaXMgaXMgYSBvbmUgd2F5IGxpbmsuICBJdCBlbWFuYXRlcyBmcm9tIGEgc3RhdGUgKHVzdWFsbHkgdmlhIGEgbGlzdCBvZlxuLy8gIHRyYW5zaXRpb25zKSBhbmQgaGFzIGEgdGFyZ2V0IHN0YXRlLjwvcD5cbi8vXG4vLyAgPHA+U2luY2Ugd2UgbmV2ZXIgaGF2ZSB0byBjaGFuZ2UgdGhlIEFUTiB0cmFuc2l0aW9ucyBvbmNlIHdlIGNvbnN0cnVjdCBpdCxcbi8vICB3ZSBjYW4gZml4IHRoZXNlIHRyYW5zaXRpb25zIGFzIHNwZWNpZmljIGNsYXNzZXMuIFRoZSBERkEgdHJhbnNpdGlvbnNcbi8vICBvbiB0aGUgb3RoZXIgaGFuZCBuZWVkIHRvIHVwZGF0ZSB0aGUgbGFiZWxzIGFzIGl0IGFkZHMgdHJhbnNpdGlvbnMgdG9cbi8vICB0aGUgc3RhdGVzLiBXZSdsbCB1c2UgdGhlIHRlcm0gRWRnZSBmb3IgdGhlIERGQSB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb21cbi8vICBBVE4gdHJhbnNpdGlvbnMuPC9wPlxuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgUHJlZGljYXRlID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5QcmVkaWNhdGU7XG52YXIgUHJlY2VkZW5jZVByZWRpY2F0ZSA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuUHJlY2VkZW5jZVByZWRpY2F0ZTtcblxuZnVuY3Rpb24gVHJhbnNpdGlvbiAodGFyZ2V0KSB7XG4gICAgLy8gVGhlIHRhcmdldCBvZiB0aGlzIHRyYW5zaXRpb24uXG4gICAgaWYgKHRhcmdldD09PXVuZGVmaW5lZCB8fCB0YXJnZXQ9PT1udWxsKSB7XG4gICAgICAgIHRocm93IFwidGFyZ2V0IGNhbm5vdCBiZSBudWxsLlwiO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAvLyBBcmUgd2UgZXBzaWxvbiwgYWN0aW9uLCBzZW1wcmVkP1xuICAgIHRoaXMuaXNFcHNpbG9uID0gZmFsc2U7XG4gICAgdGhpcy5sYWJlbCA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG4gICAgLy8gY29uc3RhbnRzIGZvciBzZXJpYWxpemF0aW9uXG5UcmFuc2l0aW9uLkVQU0lMT04gPSAxO1xuVHJhbnNpdGlvbi5SQU5HRSA9IDI7XG5UcmFuc2l0aW9uLlJVTEUgPSAzO1xuVHJhbnNpdGlvbi5QUkVESUNBVEUgPSA0OyAvLyBlLmcuLCB7aXNUeXBlKGlucHV0LkxUKDEpKX0/XG5UcmFuc2l0aW9uLkFUT00gPSA1O1xuVHJhbnNpdGlvbi5BQ1RJT04gPSA2O1xuVHJhbnNpdGlvbi5TRVQgPSA3OyAvLyB+KEF8Qikgb3IgfmF0b20sIHdpbGRjYXJkLCB3aGljaCBjb252ZXJ0IHRvIG5leHQgMlxuVHJhbnNpdGlvbi5OT1RfU0VUID0gODtcblRyYW5zaXRpb24uV0lMRENBUkQgPSA5O1xuVHJhbnNpdGlvbi5QUkVDRURFTkNFID0gMTA7XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvbk5hbWVzID0gW1xuICAgICAgICAgICAgXCJJTlZBTElEXCIsXG4gICAgICAgICAgICBcIkVQU0lMT05cIixcbiAgICAgICAgICAgIFwiUkFOR0VcIixcbiAgICAgICAgICAgIFwiUlVMRVwiLFxuICAgICAgICAgICAgXCJQUkVESUNBVEVcIixcbiAgICAgICAgICAgIFwiQVRPTVwiLFxuICAgICAgICAgICAgXCJBQ1RJT05cIixcbiAgICAgICAgICAgIFwiU0VUXCIsXG4gICAgICAgICAgICBcIk5PVF9TRVRcIixcbiAgICAgICAgICAgIFwiV0lMRENBUkRcIixcbiAgICAgICAgICAgIFwiUFJFQ0VERU5DRVwiXG4gICAgICAgIF07XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvblR5cGVzID0ge1xuICAgICAgICBFcHNpbG9uVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5FUFNJTE9OLFxuICAgICAgICBSYW5nZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUkFOR0UsXG4gICAgICAgIFJ1bGVUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLlJVTEUsXG4gICAgICAgIFByZWRpY2F0ZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUFJFRElDQVRFLFxuICAgICAgICBBdG9tVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5BVE9NLFxuICAgICAgICBBY3Rpb25UcmFuc2l0aW9uOiBUcmFuc2l0aW9uLkFDVElPTixcbiAgICAgICAgU2V0VHJhbnNpdGlvbjogVHJhbnNpdGlvbi5TRVQsXG4gICAgICAgIE5vdFNldFRyYW5zaXRpb246IFRyYW5zaXRpb24uTk9UX1NFVCxcbiAgICAgICAgV2lsZGNhcmRUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLldJTERDQVJELFxuICAgICAgICBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5QUkVDRURFTkNFXG4gICAgfTtcblxuXG4vLyBUT0RPOiBtYWtlIGFsbCB0cmFuc2l0aW9ucyBzZXRzPyBubywgc2hvdWxkIHJlbW92ZSBzZXQgZWRnZXNcbmZ1bmN0aW9uIEF0b21UcmFuc2l0aW9uKHRhcmdldCwgbGFiZWwpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMubGFiZWxfID0gbGFiZWw7IC8vIFRoZSB0b2tlbiB0eXBlIG9yIGNoYXJhY3RlciB2YWx1ZTsgb3IsIHNpZ25pZmllcyBzcGVjaWFsIGxhYmVsLlxuICAgIHRoaXMubGFiZWwgPSB0aGlzLm1ha2VMYWJlbCgpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFUT007XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQXRvbVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbVRyYW5zaXRpb247XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICBzLmFkZE9uZSh0aGlzLmxhYmVsXyk7XG4gICAgcmV0dXJuIHM7XG59O1xuXG5BdG9tVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbF8gPT09IHN5bWJvbDtcbn07XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5sYWJlbF87XG59O1xuXG5mdW5jdGlvbiBSdWxlVHJhbnNpdGlvbihydWxlU3RhcnQsIHJ1bGVJbmRleCwgcHJlY2VkZW5jZSwgZm9sbG93U3RhdGUpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHJ1bGVTdGFydCk7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXg7IC8vIHB0ciB0byB0aGUgcnVsZSBkZWZpbml0aW9uIG9iamVjdCBmb3IgdGhpcyBydWxlIHJlZlxuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5mb2xsb3dTdGF0ZSA9IGZvbGxvd1N0YXRlOyAvLyB3aGF0IG5vZGUgdG8gYmVnaW4gY29tcHV0YXRpb25zIGZvbGxvd2luZyByZWYgdG8gcnVsZVxuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlJVTEU7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcblJ1bGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVUcmFuc2l0aW9uO1xuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5cbmZ1bmN0aW9uIEVwc2lsb25UcmFuc2l0aW9uKHRhcmdldCwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybikge1xuXHRUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5FUFNJTE9OO1xuICAgIHRoaXMuaXNFcHNpbG9uID0gdHJ1ZTtcbiAgICB0aGlzLm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSBvdXRlcm1vc3RQcmVjZWRlbmNlUmV0dXJuO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbkVwc2lsb25UcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVwc2lsb25UcmFuc2l0aW9uO1xuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuRXBzaWxvblRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcImVwc2lsb25cIjtcbn07XG5cbmZ1bmN0aW9uIFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIHN0YXJ0LCBzdG9wKSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5SQU5HRTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5zdG9wID0gc3RvcDtcbiAgICB0aGlzLmxhYmVsID0gdGhpcy5tYWtlTGFiZWwoKTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmdlVHJhbnNpdGlvbjtcblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHMuYWRkUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5zdG9wKTtcbiAgICByZXR1cm4gcztcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gc3ltYm9sID49IHRoaXMuc3RhcnQgJiYgc3ltYm9sIDw9IHRoaXMuc3RvcDtcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0YXJ0KSArIFwiJy4uJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0b3ApICsgXCInXCI7XG59O1xuXG5mdW5jdGlvbiBBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlBSRURJQ0FURTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleDtcbiAgICB0aGlzLmlzQ3R4RGVwZW5kZW50ID0gaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUuZ2V0UHJlZGljYXRlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBuZXcgUHJlZGljYXRlKHRoaXMucnVsZUluZGV4LCB0aGlzLnByZWRJbmRleCwgdGhpcy5pc0N0eERlcGVuZGVudCk7XG59O1xuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwcmVkX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMucHJlZEluZGV4O1xufTtcblxuZnVuY3Rpb24gQWN0aW9uVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgsIGlzQ3R4RGVwZW5kZW50KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFDVElPTjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg9PT11bmRlZmluZWQgPyAtMSA6IGFjdGlvbkluZGV4O1xuICAgIHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudD09PXVuZGVmaW5lZCA/IGZhbHNlIDogaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BY3Rpb25UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY3Rpb25UcmFuc2l0aW9uO1xuXG5cbkFjdGlvblRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiYWN0aW9uX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMuYWN0aW9uSW5kZXg7XG59O1xuXG5cbi8vIEEgdHJhbnNpdGlvbiBjb250YWluaW5nIGEgc2V0IG9mIHZhbHVlcy5cbmZ1bmN0aW9uIFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlNFVDtcbiAgICBpZiAoc2V0ICE9PXVuZGVmaW5lZCAmJiBzZXQgIT09bnVsbCkge1xuICAgICAgICB0aGlzLmxhYmVsID0gc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFiZWwgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgdGhpcy5sYWJlbC5hZGRPbmUoVG9rZW4uSU5WQUxJRF9UWVBFKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5TZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNldFRyYW5zaXRpb247XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwuY29udGFpbnMoc3ltYm9sKTtcbn07XG5cblxuU2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwudG9TdHJpbmcoKTtcbn07XG5cbmZ1bmN0aW9uIE5vdFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0U2V0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCwgc2V0KTtcblx0dGhpcy5zZXJpYWxpemF0aW9uVHlwZSA9IFRyYW5zaXRpb24uTk9UX1NFVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZXRUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5Ob3RTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vdFNldFRyYW5zaXRpb247XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHN5bWJvbCA+PSBtaW5Wb2NhYlN5bWJvbCAmJiBzeW1ib2wgPD0gbWF4Vm9jYWJTeW1ib2wgJiZcblx0XHRcdCFTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzLmNhbGwodGhpcywgc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgbWF4Vm9jYWJTeW1ib2wpO1xufTtcblxuTm90U2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuICd+JyArIFNldFRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyk7XG59O1xuXG5mdW5jdGlvbiBXaWxkY2FyZFRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5XSUxEQ0FSRDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXaWxkY2FyZFRyYW5zaXRpb247XG5cblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBzeW1ib2wgPj0gbWluVm9jYWJTeW1ib2wgJiYgc3ltYm9sIDw9IG1heFZvY2FiU3ltYm9sO1xufTtcblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIuXCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHByZWNlZGVuY2UpIHtcblx0QWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5QUkVDRURFTkNFO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5nZXRQcmVkaWNhdGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlKHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucHJlY2VkZW5jZSArIFwiID49IF9wXCI7XG59O1xuXG5leHBvcnRzLlRyYW5zaXRpb24gPSBUcmFuc2l0aW9uO1xuZXhwb3J0cy5BdG9tVHJhbnNpdGlvbiA9IEF0b21UcmFuc2l0aW9uO1xuZXhwb3J0cy5TZXRUcmFuc2l0aW9uID0gU2V0VHJhbnNpdGlvbjtcbmV4cG9ydHMuTm90U2V0VHJhbnNpdGlvbiA9IE5vdFNldFRyYW5zaXRpb247XG5leHBvcnRzLlJ1bGVUcmFuc2l0aW9uID0gUnVsZVRyYW5zaXRpb247XG5leHBvcnRzLkFjdGlvblRyYW5zaXRpb24gPSBBY3Rpb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5FcHNpbG9uVHJhbnNpdGlvbiA9IEVwc2lsb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5SYW5nZVRyYW5zaXRpb24gPSBSYW5nZVRyYW5zaXRpb247XG5leHBvcnRzLldpbGRjYXJkVHJhbnNpdGlvbiA9IFdpbGRjYXJkVHJhbnNpdGlvbjtcbmV4cG9ydHMuUHJlZGljYXRlVHJhbnNpdGlvbiA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydHMuQVROID0gcmVxdWlyZSgnLi9BVE4nKS5BVE47XG5leHBvcnRzLkFUTkRlc2VyaWFsaXplciA9IHJlcXVpcmUoJy4vQVRORGVzZXJpYWxpemVyJykuQVRORGVzZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vTGV4ZXJBVE5TaW11bGF0b3InKS5MZXhlckFUTlNpbXVsYXRvcjtcbmV4cG9ydHMuUGFyc2VyQVROU2ltdWxhdG9yID0gcmVxdWlyZSgnLi9QYXJzZXJBVE5TaW11bGF0b3InKS5QYXJzZXJBVE5TaW11bGF0b3I7XG5leHBvcnRzLlByZWRpY3Rpb25Nb2RlID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uTW9kZScpLlByZWRpY3Rpb25Nb2RlO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFNldCA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5TZXQ7XG52YXIgREZBU3RhdGUgPSByZXF1aXJlKCcuL0RGQVN0YXRlJykuREZBU3RhdGU7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gcmVxdWlyZSgnLi4vYXRuL0FUTlN0YXRlJykuU3Rhckxvb3BFbnRyeVN0YXRlO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBERkFTZXJpYWxpemVyID0gcmVxdWlyZSgnLi9ERkFTZXJpYWxpemVyJykuREZBU2VyaWFsaXplcjtcbnZhciBMZXhlckRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5MZXhlckRGQVNlcmlhbGl6ZXI7XG5cblxuXG5mdW5jdGlvbiBERkEoYXRuU3RhcnRTdGF0ZSwgZGVjaXNpb24pIHtcblx0aWYgKGRlY2lzaW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRkZWNpc2lvbiA9IDA7XG5cdH1cblx0Ly8gRnJvbSB3aGljaCBBVE4gc3RhdGUgZGlkIHdlIGNyZWF0ZSB0aGlzIERGQT9cblx0dGhpcy5hdG5TdGFydFN0YXRlID0gYXRuU3RhcnRTdGF0ZTtcblx0dGhpcy5kZWNpc2lvbiA9IGRlY2lzaW9uO1xuXHQvLyBBIHNldCBvZiBhbGwgREZBIHN0YXRlcy4gVXNlIHtAbGluayBNYXB9IHNvIHdlIGNhbiBnZXQgb2xkIHN0YXRlIGJhY2tcblx0Ly8gKHtAbGluayBTZXR9IG9ubHkgYWxsb3dzIHlvdSB0byBzZWUgaWYgaXQncyB0aGVyZSkuXG5cdHRoaXMuX3N0YXRlcyA9IG5ldyBTZXQoKTtcblx0dGhpcy5zMCA9IG51bGw7XG5cdC8vIHtAY29kZSB0cnVlfSBpZiB0aGlzIERGQSBpcyBmb3IgYSBwcmVjZWRlbmNlIGRlY2lzaW9uOyBvdGhlcndpc2UsXG5cdC8vIHtAY29kZSBmYWxzZX0uIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmllbGQgZm9yIHtAbGluayAvL2lzUHJlY2VkZW5jZURmYX0sXG5cdC8vIHtAbGluayAvL3NldFByZWNlZGVuY2VEZmF9LlxuXHR0aGlzLnByZWNlZGVuY2VEZmEgPSBmYWxzZTtcbiAgICBpZiAoYXRuU3RhcnRTdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSlcbiAgICB7XG4gICAgICAgIGlmIChhdG5TdGFydFN0YXRlLmlzUHJlY2VkZW5jZURlY2lzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnByZWNlZGVuY2VEZmEgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHByZWNlZGVuY2VTdGF0ZSA9IG5ldyBERkFTdGF0ZShudWxsLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLmVkZ2VzID0gW107XG4gICAgICAgICAgICBwcmVjZWRlbmNlU3RhdGUuaXNBY2NlcHRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLnJlcXVpcmVzRnVsbENvbnRleHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuczAgPSBwcmVjZWRlbmNlU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBHZXQgdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHNwZWNpZmljIHByZWNlZGVuY2UgdmFsdWUuXG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2UgVGhlIGN1cnJlbnQgcHJlY2VkZW5jZS5cbi8vIEByZXR1cm4gVGhlIHN0YXJ0IHN0YXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwcmVjZWRlbmNlLCBvclxuLy8ge0Bjb2RlIG51bGx9IGlmIG5vIHN0YXJ0IHN0YXRlIGV4aXN0cyBmb3IgdGhlIHNwZWNpZmllZCBwcmVjZWRlbmNlLlxuLy9cbi8vIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgaXMgbm90IGEgcHJlY2VkZW5jZSBERkEuXG4vLyBAc2VlIC8vaXNQcmVjZWRlbmNlRGZhKClcblxuREZBLnByb3RvdHlwZS5nZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKHByZWNlZGVuY2UpIHtcblx0aWYgKCEodGhpcy5wcmVjZWRlbmNlRGZhKSkge1xuXHRcdHRocm93IChcIk9ubHkgcHJlY2VkZW5jZSBERkFzIG1heSBjb250YWluIGEgcHJlY2VkZW5jZSBzdGFydCBzdGF0ZS5cIik7XG5cdH1cblx0Ly8gczAuZWRnZXMgaXMgbmV2ZXIgbnVsbCBmb3IgYSBwcmVjZWRlbmNlIERGQVxuXHRpZiAocHJlY2VkZW5jZSA8IDAgfHwgcHJlY2VkZW5jZSA+PSB0aGlzLnMwLmVkZ2VzLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiB0aGlzLnMwLmVkZ2VzW3ByZWNlZGVuY2VdIHx8IG51bGw7XG59O1xuXG4vLyBTZXQgdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHNwZWNpZmljIHByZWNlZGVuY2UgdmFsdWUuXG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2UgVGhlIGN1cnJlbnQgcHJlY2VkZW5jZS5cbi8vIEBwYXJhbSBzdGFydFN0YXRlIFRoZSBzdGFydCBzdGF0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWRcbi8vIHByZWNlZGVuY2UuXG4vL1xuLy8gQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhpcyBpcyBub3QgYSBwcmVjZWRlbmNlIERGQS5cbi8vIEBzZWUgLy9pc1ByZWNlZGVuY2VEZmEoKVxuLy9cbkRGQS5wcm90b3R5cGUuc2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwcmVjZWRlbmNlLCBzdGFydFN0YXRlKSB7XG5cdGlmICghKHRoaXMucHJlY2VkZW5jZURmYSkpIHtcblx0XHR0aHJvdyAoXCJPbmx5IHByZWNlZGVuY2UgREZBcyBtYXkgY29udGFpbiBhIHByZWNlZGVuY2Ugc3RhcnQgc3RhdGUuXCIpO1xuXHR9XG5cdGlmIChwcmVjZWRlbmNlIDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIHN5bmNocm9uaXphdGlvbiBvbiBzMCBoZXJlIGlzIG9rLiB3aGVuIHRoZSBERkEgaXMgdHVybmVkIGludG8gYVxuXHQvLyBwcmVjZWRlbmNlIERGQSwgczAgd2lsbCBiZSBpbml0aWFsaXplZCBvbmNlIGFuZCBub3QgdXBkYXRlZCBhZ2FpblxuXHQvLyBzMC5lZGdlcyBpcyBuZXZlciBudWxsIGZvciBhIHByZWNlZGVuY2UgREZBXG5cdHRoaXMuczAuZWRnZXNbcHJlY2VkZW5jZV0gPSBzdGFydFN0YXRlO1xufTtcblxuLy9cbi8vIFNldHMgd2hldGhlciB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkEuIElmIHRoZSBzcGVjaWZpZWQgdmFsdWUgZGlmZmVyc1xuLy8gZnJvbSB0aGUgY3VycmVudCBERkEgY29uZmlndXJhdGlvbiwgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSB0YWtlbjtcbi8vIG90aGVyd2lzZSBubyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBjdXJyZW50IERGQS5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+VGhlIHtAbGluayAvL3N0YXRlc30gbWFwIGlzIGNsZWFyZWQ8L2xpPlxuLy8gPGxpPklmIHtAY29kZSBwcmVjZWRlbmNlRGZhfSBpcyB7QGNvZGUgZmFsc2V9LCB0aGUgaW5pdGlhbCBzdGF0ZVxuLy8ge0BsaW5rIC8vczB9IGlzIHNldCB0byB7QGNvZGUgbnVsbH07IG90aGVyd2lzZSwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbi8vIHtAbGluayBERkFTdGF0ZX0gd2l0aCBhbiBlbXB0eSBvdXRnb2luZyB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBhcnJheSB0b1xuLy8gc3RvcmUgdGhlIHN0YXJ0IHN0YXRlcyBmb3IgaW5kaXZpZHVhbCBwcmVjZWRlbmNlIHZhbHVlcy48L2xpPlxuLy8gPGxpPlRoZSB7QGxpbmsgLy9wcmVjZWRlbmNlRGZhfSBmaWVsZCBpcyB1cGRhdGVkPC9saT5cbi8vIDwvdWw+XG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2VEZmEge0Bjb2RlIHRydWV9IGlmIHRoaXMgaXMgYSBwcmVjZWRlbmNlIERGQTsgb3RoZXJ3aXNlLFxuLy8ge0Bjb2RlIGZhbHNlfVxuXG5ERkEucHJvdG90eXBlLnNldFByZWNlZGVuY2VEZmEgPSBmdW5jdGlvbihwcmVjZWRlbmNlRGZhKSB7XG5cdGlmICh0aGlzLnByZWNlZGVuY2VEZmEhPT1wcmVjZWRlbmNlRGZhKSB7XG5cdFx0dGhpcy5fc3RhdGVzID0gbmV3IERGQVN0YXRlc1NldCgpO1xuXHRcdGlmIChwcmVjZWRlbmNlRGZhKSB7XG5cdFx0XHR2YXIgcHJlY2VkZW5jZVN0YXRlID0gbmV3IERGQVN0YXRlKG51bGwsIG5ldyBBVE5Db25maWdTZXQoKSk7XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUuZWRnZXMgPSBbXTtcblx0XHRcdHByZWNlZGVuY2VTdGF0ZS5pc0FjY2VwdFN0YXRlID0gZmFsc2U7XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUucmVxdWlyZXNGdWxsQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zMCA9IHByZWNlZGVuY2VTdGF0ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zMCA9IG51bGw7XG5cdFx0fVxuXHRcdHRoaXMucHJlY2VkZW5jZURmYSA9IHByZWNlZGVuY2VEZmE7XG5cdH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShERkEucHJvdG90eXBlLCBcInN0YXRlc1wiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZXM7XG5cdH1cbn0pO1xuXG4vLyBSZXR1cm4gYSBsaXN0IG9mIGFsbCBzdGF0ZXMgaW4gdGhpcyBERkEsIG9yZGVyZWQgYnkgc3RhdGUgbnVtYmVyLlxuREZBLnByb3RvdHlwZS5zb3J0ZWRTdGF0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGxpc3QgPSB0aGlzLl9zdGF0ZXMudmFsdWVzKCk7XG5cdHJldHVybiBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xuXHRcdHJldHVybiBhLnN0YXRlTnVtYmVyIC0gYi5zdGF0ZU51bWJlcjtcblx0fSk7XG59O1xuXG5ERkEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24obGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRpZiAodGhpcy5zMCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHZhciBzZXJpYWxpemVyID0gbmV3IERGQVNlcmlhbGl6ZXIodGhpcywgbGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZXIudG9TdHJpbmcoKTtcbn07XG5cbkRGQS5wcm90b3R5cGUudG9MZXhlclN0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5zMCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHZhciBzZXJpYWxpemVyID0gbmV3IExleGVyREZBU2VyaWFsaXplcih0aGlzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZXIudG9TdHJpbmcoKTtcbn07XG5cbmV4cG9ydHMuREZBID0gREZBO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBBIERGQSB3YWxrZXIgdGhhdCBrbm93cyBob3cgdG8gZHVtcCB0aGVtIHRvIHNlcmlhbGl6ZWQgc3RyaW5ncy4jL1xuXG5cbmZ1bmN0aW9uIERGQVNlcmlhbGl6ZXIoZGZhLCBsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dGhpcy5kZmEgPSBkZmE7XG5cdHRoaXMubGl0ZXJhbE5hbWVzID0gbGl0ZXJhbE5hbWVzIHx8IFtdO1xuXHR0aGlzLnN5bWJvbGljTmFtZXMgPSBzeW1ib2xpY05hbWVzIHx8IFtdO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuREZBU2VyaWFsaXplci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgIGlmKHRoaXMuZGZhLnMwID09PSBudWxsKSB7XG4gICAgICAgcmV0dXJuIG51bGw7XG4gICB9XG4gICB2YXIgYnVmID0gXCJcIjtcbiAgIHZhciBzdGF0ZXMgPSB0aGlzLmRmYS5zb3J0ZWRTdGF0ZXMoKTtcbiAgIGZvcih2YXIgaT0wO2k8c3RhdGVzLmxlbmd0aDtpKyspIHtcbiAgICAgICB2YXIgcyA9IHN0YXRlc1tpXTtcbiAgICAgICBpZihzLmVkZ2VzIT09bnVsbCkge1xuICAgICAgICAgICAgdmFyIG4gPSBzLmVkZ2VzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcih2YXIgaj0wO2o8bjtqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9IHMuZWRnZXNbal0gfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBpZih0IT09bnVsbCAmJiB0LnN0YXRlTnVtYmVyICE9PSAweDdGRkZGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQodGhpcy5nZXRTdGF0ZVN0cmluZyhzKSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQoXCItXCIpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0RWRnZUxhYmVsKGopKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdChcIi0+XCIpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0U3RhdGVTdHJpbmcodCkpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KCdcXG4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgfVxuICAgfVxuICAgcmV0dXJuIGJ1Zi5sZW5ndGg9PT0wID8gbnVsbCA6IGJ1Zjtcbn07XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldEVkZ2VMYWJlbCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZiAoaT09PTApIHtcbiAgICAgICAgcmV0dXJuIFwiRU9GXCI7XG4gICAgfSBlbHNlIGlmKHRoaXMubGl0ZXJhbE5hbWVzICE9PW51bGwgfHwgdGhpcy5zeW1ib2xpY05hbWVzIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXRlcmFsTmFtZXNbaS0xXSB8fCB0aGlzLnN5bWJvbGljTmFtZXNbaS0xXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShpLTEpO1xuICAgIH1cbn07XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldFN0YXRlU3RyaW5nID0gZnVuY3Rpb24ocykge1xuICAgIHZhciBiYXNlU3RhdGVTdHIgPSAoIHMuaXNBY2NlcHRTdGF0ZSA/IFwiOlwiIDogXCJcIikgKyBcInNcIiArIHMuc3RhdGVOdW1iZXIgKyAoIHMucmVxdWlyZXNGdWxsQ29udGV4dCA/IFwiXlwiIDogXCJcIik7XG4gICAgaWYocy5pc0FjY2VwdFN0YXRlKSB7XG4gICAgICAgIGlmIChzLnByZWRpY2F0ZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHIgKyBcIj0+XCIgKyBzLnByZWRpY2F0ZXMudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHIgKyBcIj0+XCIgKyBzLnByZWRpY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHI7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gTGV4ZXJERkFTZXJpYWxpemVyKGRmYSkge1xuXHRERkFTZXJpYWxpemVyLmNhbGwodGhpcywgZGZhLCBudWxsKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERGQVNlcmlhbGl6ZXIucHJvdG90eXBlKTtcbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckRGQVNlcmlhbGl6ZXI7XG5cbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUuZ2V0RWRnZUxhYmVsID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpICsgXCInXCI7XG59O1xuXG5leHBvcnRzLkRGQVNlcmlhbGl6ZXIgPSBERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckRGQVNlcmlhbGl6ZXIgPSBMZXhlckRGQVNlcmlhbGl6ZXI7XG5cbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBIYXNoID0gVXRpbHMuSGFzaDtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG5cbi8vIE1hcCBhIHByZWRpY2F0ZSB0byBhIHByZWRpY3RlZCBhbHRlcm5hdGl2ZS4vLy9cblxuZnVuY3Rpb24gUHJlZFByZWRpY3Rpb24ocHJlZCwgYWx0KSB7XG5cdHRoaXMuYWx0ID0gYWx0O1xuXHR0aGlzLnByZWQgPSBwcmVkO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUHJlZFByZWRpY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcIihcIiArIHRoaXMucHJlZCArIFwiLCBcIiArIHRoaXMuYWx0ICsgXCIpXCI7XG59O1xuXG4vLyBBIERGQSBzdGF0ZSByZXByZXNlbnRzIGEgc2V0IG9mIHBvc3NpYmxlIEFUTiBjb25maWd1cmF0aW9ucy5cbi8vIEFzIEFobywgU2V0aGksIFVsbG1hbiBwLiAxMTcgc2F5cyBcIlRoZSBERkEgdXNlcyBpdHMgc3RhdGVcbi8vIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIHN0YXRlcyB0aGUgQVROIGNhbiBiZSBpbiBhZnRlclxuLy8gcmVhZGluZyBlYWNoIGlucHV0IHN5bWJvbC4gVGhhdCBpcyB0byBzYXksIGFmdGVyIHJlYWRpbmdcbi8vIGlucHV0IGExYTIuLmFuLCB0aGUgREZBIGlzIGluIGEgc3RhdGUgdGhhdCByZXByZXNlbnRzIHRoZVxuLy8gc3Vic2V0IFQgb2YgdGhlIHN0YXRlcyBvZiB0aGUgQVROIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZVxuLy8gQVROJ3Mgc3RhcnQgc3RhdGUgYWxvbmcgc29tZSBwYXRoIGxhYmVsZWQgYTFhMi4uYW4uXCJcbi8vIEluIGNvbnZlbnRpb25hbCBORkEmcmFycjtERkEgY29udmVyc2lvbiwgdGhlcmVmb3JlLCB0aGUgc3Vic2V0IFRcbi8vIHdvdWxkIGJlIGEgYml0c2V0IHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIHN0YXRlcyB0aGVcbi8vIEFUTiBjb3VsZCBiZSBpbi4gV2UgbmVlZCB0byB0cmFjayB0aGUgYWx0IHByZWRpY3RlZCBieSBlYWNoXG4vLyBzdGF0ZSBhcyB3ZWxsLCBob3dldmVyLiBNb3JlIGltcG9ydGFudGx5LCB3ZSBuZWVkIHRvIG1haW50YWluXG4vLyBhIHN0YWNrIG9mIHN0YXRlcywgdHJhY2tpbmcgdGhlIGNsb3N1cmUgb3BlcmF0aW9ucyBhcyB0aGV5XG4vLyBqdW1wIGZyb20gcnVsZSB0byBydWxlLCBlbXVsYXRpbmcgcnVsZSBpbnZvY2F0aW9ucyAobWV0aG9kIGNhbGxzKS5cbi8vIEkgaGF2ZSB0byBhZGQgYSBzdGFjayB0byBzaW11bGF0ZSB0aGUgcHJvcGVyIGxvb2thaGVhZCBzZXF1ZW5jZXMgZm9yXG4vLyB0aGUgdW5kZXJseWluZyBMTCBncmFtbWFyIGZyb20gd2hpY2ggdGhlIEFUTiB3YXMgZGVyaXZlZC5cbi8vXG4vLyA8cD5JIHVzZSBhIHNldCBvZiBBVE5Db25maWcgb2JqZWN0cyBub3Qgc2ltcGxlIHN0YXRlcy4gQW4gQVROQ29uZmlnXG4vLyBpcyBib3RoIGEgc3RhdGUgKGFsYSBub3JtYWwgY29udmVyc2lvbikgYW5kIGEgUnVsZUNvbnRleHQgZGVzY3JpYmluZ1xuLy8gdGhlIGNoYWluIG9mIHJ1bGVzIChpZiBhbnkpIGZvbGxvd2VkIHRvIGFycml2ZSBhdCB0aGF0IHN0YXRlLjwvcD5cbi8vXG4vLyA8cD5BIERGQSBzdGF0ZSBtYXkgaGF2ZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgcGFydGljdWxhciBzdGF0ZSxcbi8vIGJ1dCB3aXRoIGRpZmZlcmVudCBBVE4gY29udGV4dHMgKHdpdGggc2FtZSBvciBkaWZmZXJlbnQgYWx0cylcbi8vIG1lYW5pbmcgdGhhdCBzdGF0ZSB3YXMgcmVhY2hlZCB2aWEgYSBkaWZmZXJlbnQgc2V0IG9mIHJ1bGUgaW52b2NhdGlvbnMuPC9wPlxuLy8gL1xuXG5mdW5jdGlvbiBERkFTdGF0ZShzdGF0ZU51bWJlciwgY29uZmlncykge1xuXHRpZiAoc3RhdGVOdW1iZXIgPT09IG51bGwpIHtcblx0XHRzdGF0ZU51bWJlciA9IC0xO1xuXHR9XG5cdGlmIChjb25maWdzID09PSBudWxsKSB7XG5cdFx0Y29uZmlncyA9IG5ldyBBVE5Db25maWdTZXQoKTtcblx0fVxuXHR0aGlzLnN0YXRlTnVtYmVyID0gc3RhdGVOdW1iZXI7XG5cdHRoaXMuY29uZmlncyA9IGNvbmZpZ3M7XG5cdC8vIHtAY29kZSBlZGdlc1tzeW1ib2xdfSBwb2ludHMgdG8gdGFyZ2V0IG9mIHN5bWJvbC4gU2hpZnQgdXAgYnkgMSBzbyAoLTEpXG5cdC8vIHtAbGluayBUb2tlbi8vRU9GfSBtYXBzIHRvIHtAY29kZSBlZGdlc1swXX0uXG5cdHRoaXMuZWRnZXMgPSBudWxsO1xuXHR0aGlzLmlzQWNjZXB0U3RhdGUgPSBmYWxzZTtcblx0Ly8gaWYgYWNjZXB0IHN0YXRlLCB3aGF0IHR0eXBlIGRvIHdlIG1hdGNoIG9yIGFsdCBkbyB3ZSBwcmVkaWN0P1xuXHQvLyBUaGlzIGlzIHNldCB0byB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9IHdoZW4ge0BsaW5rXG5cdC8vIC8vcHJlZGljYXRlc317QGNvZGUgIT1udWxsfSBvclxuXHQvLyB7QGxpbmsgLy9yZXF1aXJlc0Z1bGxDb250ZXh0fS5cblx0dGhpcy5wcmVkaWN0aW9uID0gMDtcblx0dGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID0gbnVsbDtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhpcyBzdGF0ZSB3YXMgY3JlYXRlZCBkdXJpbmcgU0xMIHByZWRpY3Rpb24gdGhhdFxuXHQvLyBkaXNjb3ZlcmVkIGEgY29uZmxpY3QgYmV0d2VlbiB0aGUgY29uZmlndXJhdGlvbnMgaW4gdGhlIHN0YXRlLiBGdXR1cmVcblx0Ly8ge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvci8vZXhlY0FUTn0gaW52b2NhdGlvbnMgaW1tZWRpYXRlbHkganVtcGVkIGRvaW5nXG5cdC8vIGZ1bGwgY29udGV4dCBwcmVkaWN0aW9uIGlmIHRoaXMgZmllbGQgaXMgdHJ1ZS5cblx0dGhpcy5yZXF1aXJlc0Z1bGxDb250ZXh0ID0gZmFsc2U7XG5cdC8vIER1cmluZyBTTEwgcGFyc2luZywgdGhpcyBpcyBhIGxpc3Qgb2YgcHJlZGljYXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlXG5cdC8vIEFUTiBjb25maWd1cmF0aW9ucyBvZiB0aGUgREZBIHN0YXRlLiBXaGVuIHdlIGhhdmUgcHJlZGljYXRlcyxcblx0Ly8ge0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0gaXMge0Bjb2RlIGZhbHNlfSBzaW5jZSBmdWxsIGNvbnRleHRcblx0Ly8gcHJlZGljdGlvbiBldmFsdWF0ZXMgcHJlZGljYXRlc1xuXHQvLyBvbi10aGUtZmx5LiBJZiB0aGlzIGlzIG5vdCBudWxsLCB0aGVuIHtAbGluayAvL3ByZWRpY3Rpb259IGlzXG5cdC8vIHtAbGluayBBVE4vL0lOVkFMSURfQUxUX05VTUJFUn0uXG5cdC8vXG5cdC8vIDxwPldlIG9ubHkgdXNlIHRoZXNlIGZvciBub24te0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0gYnV0XG5cdC8vIGNvbmZsaWN0aW5nIHN0YXRlcy4gVGhhdFxuXHQvLyBtZWFucyB3ZSBrbm93IGZyb20gdGhlIGNvbnRleHQgKGl0J3MgJCBvciB3ZSBkb24ndCBkaXAgaW50byBvdXRlclxuXHQvLyBjb250ZXh0KSB0aGF0IGl0J3MgYW4gYW1iaWd1aXR5IG5vdCBhIGNvbmZsaWN0LjwvcD5cblx0Ly9cblx0Ly8gPHA+VGhpcyBsaXN0IGlzIGNvbXB1dGVkIGJ5IHtAbGlua1xuXHQvLyBQYXJzZXJBVE5TaW11bGF0b3IvL3ByZWRpY2F0ZURGQVN0YXRlfS48L3A+XG5cdHRoaXMucHJlZGljYXRlcyA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBHZXQgdGhlIHNldCBvZiBhbGwgYWx0cyBtZW50aW9uZWQgYnkgYWxsIEFUTiBjb25maWd1cmF0aW9ucyBpbiB0aGlzXG4vLyBERkEgc3RhdGUuXG5ERkFTdGF0ZS5wcm90b3R5cGUuZ2V0QWx0U2V0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBhbHRzID0gbmV3IFNldCgpO1xuXHRpZiAodGhpcy5jb25maWdzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjID0gdGhpcy5jb25maWdzW2ldO1xuXHRcdFx0YWx0cy5hZGQoYy5hbHQpO1xuXHRcdH1cblx0fVxuXHRpZiAoYWx0cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYWx0cztcblx0fVxufTtcblxuLy8gVHdvIHtAbGluayBERkFTdGF0ZX0gaW5zdGFuY2VzIGFyZSBlcXVhbCBpZiB0aGVpciBBVE4gY29uZmlndXJhdGlvbiBzZXRzXG4vLyBhcmUgdGhlIHNhbWUuIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2VlIGlmIGEgc3RhdGUgYWxyZWFkeSBleGlzdHMuXG4vL1xuLy8gPHA+QmVjYXVzZSB0aGUgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBhbmQgbnVtYmVyIG9mIEFUTiBjb25maWd1cmF0aW9ucyBhcmVcbi8vIGZpbml0ZSwgdGhlcmUgaXMgYSBmaW5pdGUgbnVtYmVyIG9mIERGQSBzdGF0ZXMgdGhhdCBjYW4gYmUgcHJvY2Vzc2VkLlxuLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc2hvdyB0aGF0IHRoZSBhbGdvcml0aG0gdGVybWluYXRlcy48L3A+XG4vL1xuLy8gPHA+Q2Fubm90IHRlc3QgdGhlIERGQSBzdGF0ZSBudW1iZXJzIGhlcmUgYmVjYXVzZSBpblxuLy8ge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvci8vYWRkREZBU3RhdGV9IHdlIG5lZWQgdG8ga25vdyBpZiBhbnkgb3RoZXIgc3RhdGVcbi8vIGV4aXN0cyB0aGF0IGhhcyB0aGlzIGV4YWN0IHNldCBvZiBBVE4gY29uZmlndXJhdGlvbnMuIFRoZVxuLy8ge0BsaW5rIC8vc3RhdGVOdW1iZXJ9IGlzIGlycmVsZXZhbnQuPC9wPlxuREZBU3RhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdC8vIGNvbXBhcmUgc2V0IG9mIEFUTiBjb25maWd1cmF0aW9ucyBpbiB0aGlzIHNldCB3aXRoIG90aGVyXG5cdHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuXHRcdFx0KG90aGVyIGluc3RhbmNlb2YgREZBU3RhdGUgJiZcblx0XHRcdFx0dGhpcy5jb25maWdzLmVxdWFscyhvdGhlci5jb25maWdzKSk7XG59O1xuXG5ERkFTdGF0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiICsgdGhpcy5zdGF0ZU51bWJlciArIFwiOlwiICsgdGhpcy5jb25maWdzO1xuXHRpZih0aGlzLmlzQWNjZXB0U3RhdGUpIHtcbiAgICAgICAgcyA9IHMgKyBcIj0+XCI7XG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZXMgIT09IG51bGwpXG4gICAgICAgICAgICBzID0gcyArIHRoaXMucHJlZGljYXRlcztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcyA9IHMgKyB0aGlzLnByZWRpY3Rpb247XG4gICAgfVxuXHRyZXR1cm4gcztcbn07XG5cbkRGQVN0YXRlLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG5cdGhhc2gudXBkYXRlKHRoaXMuY29uZmlncyk7XG5cdGlmKHRoaXMuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGVzICE9PSBudWxsKVxuICAgICAgICAgICAgaGFzaC51cGRhdGUodGhpcy5wcmVkaWNhdGVzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGFzaC51cGRhdGUodGhpcy5wcmVkaWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5leHBvcnRzLkRGQVN0YXRlID0gREZBU3RhdGU7XG5leHBvcnRzLlByZWRQcmVkaWN0aW9uID0gUHJlZFByZWRpY3Rpb247XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydHMuREZBID0gcmVxdWlyZSgnLi9ERkEnKS5ERkE7XG5leHBvcnRzLkRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5ERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5MZXhlckRGQVNlcmlhbGl6ZXI7XG5leHBvcnRzLlByZWRQcmVkaWN0aW9uID0gcmVxdWlyZSgnLi9ERkFTdGF0ZScpLlByZWRQcmVkaWN0aW9uO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yTGlzdGVuZXJ9IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5XG4vLyBjZXJ0YWluIHBvdGVudGlhbCBjb3JyZWN0bmVzcyBhbmQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgaW4gZ3JhbW1hcnMuIFwiUmVwb3J0c1wiXG4vLyBhcmUgbWFkZSBieSBjYWxsaW5nIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfSB3aXRoIHRoZSBhcHByb3ByaWF0ZVxuLy8gbWVzc2FnZS5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+PGI+QW1iaWd1aXRpZXM8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgbW9yZSB0aGFuIG9uZSBwYXRoIHRocm91Z2ggdGhlXG4vLyBncmFtbWFyIGNhbiBtYXRjaCB0aGUgaW5wdXQuPC9saT5cbi8vIDxsaT48Yj5XZWFrIGNvbnRleHQgc2Vuc2l0aXZpdHk8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgZnVsbC1jb250ZXh0XG4vLyBwcmVkaWN0aW9uIHJlc29sdmVkIGFuIFNMTCBjb25mbGljdCB0byBhIHVuaXF1ZSBhbHRlcm5hdGl2ZSB3aGljaCBlcXVhbGVkIHRoZVxuLy8gbWluaW11bSBhbHRlcm5hdGl2ZSBvZiB0aGUgU0xMIGNvbmZsaWN0LjwvbGk+XG4vLyA8bGk+PGI+U3Ryb25nIChmb3JjZWQpIGNvbnRleHQgc2Vuc2l0aXZpdHk8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgdGhlXG4vLyBmdWxsLWNvbnRleHQgcHJlZGljdGlvbiByZXNvbHZlZCBhbiBTTEwgY29uZmxpY3QgdG8gYSB1bmlxdWUgYWx0ZXJuYXRpdmUsXG4vLyA8ZW0+YW5kPC9lbT4gdGhlIG1pbmltdW0gYWx0ZXJuYXRpdmUgb2YgdGhlIFNMTCBjb25mbGljdCB3YXMgZm91bmQgdG8gbm90IGJlXG4vLyBhIHRydWx5IHZpYWJsZSBhbHRlcm5hdGl2ZS4gVHdvLXN0YWdlIHBhcnNpbmcgY2Fubm90IGJlIHVzZWQgZm9yIGlucHV0cyB3aGVyZVxuLy8gdGhpcyBzaXR1YXRpb24gb2NjdXJzLjwvbGk+XG4vLyA8L3VsPlxuXG52YXIgQml0U2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkJpdFNldDtcbnZhciBFcnJvckxpc3RlbmVyID0gcmVxdWlyZSgnLi9FcnJvckxpc3RlbmVyJykuRXJyb3JMaXN0ZW5lcjtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoJy4vLi4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcblxuZnVuY3Rpb24gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIoZXhhY3RPbmx5KSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0ZXhhY3RPbmx5ID0gZXhhY3RPbmx5IHx8IHRydWU7XG5cdC8vIHdoZXRoZXIgYWxsIGFtYmlndWl0aWVzIG9yIG9ubHkgZXhhY3QgYW1iaWd1aXRpZXMgYXJlIHJlcG9ydGVkLlxuXHR0aGlzLmV4YWN0T25seSA9IGV4YWN0T25seTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsXG5cdFx0c3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG5cdGlmICh0aGlzLmV4YWN0T25seSAmJiAhZXhhY3QpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG1zZyA9IFwicmVwb3J0QW1iaWd1aXR5IGQ9XCIgK1xuXHRcdFx0dGhpcy5nZXREZWNpc2lvbkRlc2NyaXB0aW9uKHJlY29nbml6ZXIsIGRmYSkgK1xuXHRcdFx0XCI6IGFtYmlnQWx0cz1cIiArXG5cdFx0XHR0aGlzLmdldENvbmZsaWN0aW5nQWx0cyhhbWJpZ0FsdHMsIGNvbmZpZ3MpICtcblx0XHRcdFwiLCBpbnB1dD0nXCIgK1xuXHRcdFx0cmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQobmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkpICsgXCInXCI7XG5cdHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnKTtcbn07XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQgPSBmdW5jdGlvbihcblx0XHRyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKSB7XG5cdHZhciBtc2cgPSBcInJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCBkPVwiICtcblx0XHRcdHRoaXMuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbihyZWNvZ25pemVyLCBkZmEpICtcblx0XHRcdFwiLCBpbnB1dD0nXCIgK1xuXHRcdFx0cmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQobmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkpICsgXCInXCI7XG5cdHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnKTtcbn07XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgPSBmdW5jdGlvbihcblx0XHRyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncykge1xuXHR2YXIgbXNnID0gXCJyZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgZD1cIiArXG5cdFx0XHR0aGlzLmdldERlY2lzaW9uRGVzY3JpcHRpb24ocmVjb2duaXplciwgZGZhKSArXG5cdFx0XHRcIiwgaW5wdXQ9J1wiICtcblx0XHRcdHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXgpKSArIFwiJ1wiO1xuXHRyZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZyk7XG59O1xuXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSkge1xuXHR2YXIgZGVjaXNpb24gPSBkZmEuZGVjaXNpb247XG5cdHZhciBydWxlSW5kZXggPSBkZmEuYXRuU3RhcnRTdGF0ZS5ydWxlSW5kZXg7XG5cblx0dmFyIHJ1bGVOYW1lcyA9IHJlY29nbml6ZXIucnVsZU5hbWVzO1xuXHRpZiAocnVsZUluZGV4IDwgMCB8fCBydWxlSW5kZXggPj0gcnVsZU5hbWVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBcIlwiICsgZGVjaXNpb247XG5cdH1cblx0dmFyIHJ1bGVOYW1lID0gcnVsZU5hbWVzW3J1bGVJbmRleF0gfHwgbnVsbDtcblx0aWYgKHJ1bGVOYW1lID09PSBudWxsIHx8IHJ1bGVOYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiICsgZGVjaXNpb247XG5cdH1cblx0cmV0dXJuIFwiXCIgKyBkZWNpc2lvbiArIFwiIChcIiArIHJ1bGVOYW1lICsgXCIpXCI7XG59O1xuXG4vL1xuLy8gQ29tcHV0ZXMgdGhlIHNldCBvZiBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzIGZyb20gYVxuLy8gY29uZmlndXJhdGlvbiBzZXQsIGlmIHRoYXQgaW5mb3JtYXRpb24gd2FzIG5vdCBhbHJlYWR5IHByb3ZpZGVkIGJ5IHRoZVxuLy8gcGFyc2VyLlxuLy9cbi8vIEBwYXJhbSByZXBvcnRlZEFsdHMgVGhlIHNldCBvZiBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzLCBhc1xuLy8gcmVwb3J0ZWQgYnkgdGhlIHBhcnNlci5cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgY29uZmlndXJhdGlvbiBzZXQuXG4vLyBAcmV0dXJuIFJldHVybnMge0Bjb2RlIHJlcG9ydGVkQWx0c30gaWYgaXQgaXMgbm90IHtAY29kZSBudWxsfSwgb3RoZXJ3aXNlXG4vLyByZXR1cm5zIHRoZSBzZXQgb2YgYWx0ZXJuYXRpdmVzIHJlcHJlc2VudGVkIGluIHtAY29kZSBjb25maWdzfS5cbi8vXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzID0gZnVuY3Rpb24ocmVwb3J0ZWRBbHRzLCBjb25maWdzKSB7XG5cdGlmIChyZXBvcnRlZEFsdHMgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gcmVwb3J0ZWRBbHRzO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQml0U2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlncy5pdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdC5hZGQoY29uZmlncy5pdGVtc1tpXS5hbHQpO1xuXHR9XG5cdHJldHVybiBcIntcIiArIHJlc3VsdC52YWx1ZXMoKS5qb2luKFwiLCBcIikgKyBcIn1cIjtcbn07XG5cbmV4cG9ydHMuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIgPSBEaWFnbm9zdGljRXJyb3JMaXN0ZW5lcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBQcm92aWRlcyBhbiBlbXB0eSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yTGlzdGVuZXJ9LiBUaGVcbi8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBtZXRob2QgZG9lcyBub3RoaW5nLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYXNcbi8vIG5lY2Vzc2FyeS5cblxuZnVuY3Rpb24gRXJyb3JMaXN0ZW5lcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnN5bnRheEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSkge1xufTtcblxuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QW1iaWd1aXR5ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGV4YWN0LCBhbWJpZ0FsdHMsIGNvbmZpZ3MpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKSB7XG59O1xuXG5mdW5jdGlvbiBDb25zb2xlRXJyb3JMaXN0ZW5lcigpIHtcblx0RXJyb3JMaXN0ZW5lci5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQ29uc29sZUVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvckxpc3RlbmVyLnByb3RvdHlwZSk7XG5Db25zb2xlRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zb2xlRXJyb3JMaXN0ZW5lcjtcblxuLy9cbi8vIFByb3ZpZGVzIGEgZGVmYXVsdCBpbnN0YW5jZSBvZiB7QGxpbmsgQ29uc29sZUVycm9yTGlzdGVuZXJ9LlxuLy9cbkNvbnNvbGVFcnJvckxpc3RlbmVyLklOU1RBTkNFID0gbmV3IENvbnNvbGVFcnJvckxpc3RlbmVyKCk7XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIHByaW50cyBtZXNzYWdlcyB0byB7QGxpbmsgU3lzdGVtLy9lcnJ9IGNvbnRhaW5pbmcgdGhlXG4vLyB2YWx1ZXMgb2Yge0Bjb2RlIGxpbmV9LCB7QGNvZGUgY2hhclBvc2l0aW9uSW5MaW5lfSwgYW5kIHtAY29kZSBtc2d9IHVzaW5nXG4vLyB0aGUgZm9sbG93aW5nIGZvcm1hdC48L3A+XG4vL1xuLy8gPHByZT5cbi8vIGxpbmUgPGVtPmxpbmU8L2VtPjo8ZW0+Y2hhclBvc2l0aW9uSW5MaW5lPC9lbT4gPGVtPm1zZzwvZW0+XG4vLyA8L3ByZT5cbi8vXG5Db25zb2xlRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKSB7XG4gICAgY29uc29sZS5lcnJvcihcImxpbmUgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW4gKyBcIiBcIiArIG1zZyk7XG59O1xuXG5mdW5jdGlvbiBQcm94eUVycm9yTGlzdGVuZXIoZGVsZWdhdGVzKSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgICBpZiAoZGVsZWdhdGVzPT09bnVsbCkge1xuICAgICAgICB0aHJvdyBcImRlbGVnYXRlc1wiO1xuICAgIH1cbiAgICB0aGlzLmRlbGVnYXRlcyA9IGRlbGVnYXRlcztcblx0cmV0dXJuIHRoaXM7XG59XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yTGlzdGVuZXIucHJvdG90eXBlKTtcblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm94eUVycm9yTGlzdGVuZXI7XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKSB7XG4gICAgdGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5zeW50YXhFcnJvcihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEFtYmlndWl0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG4gICAgdGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5yZXBvcnRBbWJpZ3VpdHkocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGV4YWN0LCBhbWJpZ0FsdHMsIGNvbmZpZ3MpOyB9KTtcbn07XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGNvbmZsaWN0aW5nQWx0cywgY29uZmlncykge1xuXHR0aGlzLmRlbGVnYXRlcy5tYXAoZnVuY3Rpb24oZCkgeyBkLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dChyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKSB7XG5cdHRoaXMuZGVsZWdhdGVzLm1hcChmdW5jdGlvbihkKSB7IGQucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKTsgfSk7XG59O1xuXG5leHBvcnRzLkVycm9yTGlzdGVuZXIgPSBFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5Db25zb2xlRXJyb3JMaXN0ZW5lciA9IENvbnNvbGVFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5Qcm94eUVycm9yTGlzdGVuZXIgPSBQcm94eUVycm9yTGlzdGVuZXI7XG5cbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgRXJyb3JzID0gcmVxdWlyZSgnLi9FcnJvcnMnKTtcbnZhciBOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IEVycm9ycy5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcbnZhciBJbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gRXJyb3JzLklucHV0TWlzbWF0Y2hFeGNlcHRpb247XG52YXIgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gRXJyb3JzLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbnZhciBQYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbiA9IEVycm9ycy5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbjtcbnZhciBBVE5TdGF0ZSA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTlN0YXRlJykuQVROU3RhdGU7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEVycm9yU3RyYXRlZ3koKSB7XG5cbn1cblxuRXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXIgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmluRXJyb3JSZWNvdmVyeU1vZGUgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplcil7XG59O1xuXG5cblxuLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5fSB1c2VkIGZvclxuLy8gZXJyb3IgcmVwb3J0aW5nIGFuZCByZWNvdmVyeSBpbiBBTlRMUiBwYXJzZXJzLlxuLy9cbmZ1bmN0aW9uIERlZmF1bHRFcnJvclN0cmF0ZWd5KCkge1xuXHRFcnJvclN0cmF0ZWd5LmNhbGwodGhpcyk7XG4gICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVycm9yIHN0cmF0ZWd5IGlzIGN1cnJlbnRseSBcInJlY292ZXJpbmcgZnJvbSBhblxuICAgIC8vIGVycm9yXCIuIFRoaXMgaXMgdXNlZCB0byBzdXBwcmVzcyByZXBvcnRpbmcgbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hpbGVcbiAgICAvLyBhdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSBhIGRldGVjdGVkIHN5bnRheCBlcnJvci5cbiAgICAvL1xuICAgIC8vIEBzZWUgLy9pbkVycm9yUmVjb3ZlcnlNb2RlXG4gICAgLy9cbiAgICB0aGlzLmVycm9yUmVjb3ZlcnlNb2RlID0gZmFsc2U7XG5cbiAgICAvLyBUaGUgaW5kZXggaW50byB0aGUgaW5wdXQgc3RyZWFtIHdoZXJlIHRoZSBsYXN0IGVycm9yIG9jY3VycmVkLlxuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIHdoZXJlIGFuIGVycm9yIGlzIGZvdW5kXG4gICAgLy8gYnV0IG5vIHRva2VuIGlzIGNvbnN1bWVkIGR1cmluZyByZWNvdmVyeS4uLmFub3RoZXIgZXJyb3IgaXMgZm91bmQsXG4gICAgLy8gYWQgbmF1c2V1bS4gVGhpcyBpcyBhIGZhaWxzYWZlIG1lY2hhbmlzbSB0byBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdFxuICAgIC8vIG9uZSB0b2tlbi90cmVlIG5vZGUgaXMgY29uc3VtZWQgZm9yIHR3byBlcnJvcnMuXG4gICAgLy9cbiAgICB0aGlzLmxhc3RFcnJvckluZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0RXJyb3JTdGF0ZXMgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yU3RyYXRlZ3kucHJvdG90eXBlKTtcbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERlZmF1bHRFcnJvclN0cmF0ZWd5O1xuXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMge0BsaW5rIC8vZW5kRXJyb3JDb25kaXRpb259IHRvXG4vLyBlbnN1cmUgdGhhdCB0aGUgaGFuZGxlciBpcyBub3QgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS48L3A+XG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lbmRFcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSB3aGVuIGEgcmVjb2duaXRpb25cbi8vIGV4Y2VwdGlvbiBpcyByZXBvcnRlZC5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmJlZ2luRXJyb3JDb25kaXRpb24gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lcnJvclJlY292ZXJ5TW9kZSA9IHRydWU7XG59O1xuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuaW5FcnJvclJlY292ZXJ5TW9kZSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclJlY292ZXJ5TW9kZTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gbGVhdmUgZXJyb3IgcmVjb3ZlcnkgbW9kZSBhZnRlciByZWNvdmVyaW5nIGZyb21cbi8vIGEgcmVjb2duaXRpb24gZXhjZXB0aW9uLlxuLy9cbi8vIEBwYXJhbSByZWNvZ25pemVyXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmVuZEVycm9yQ29uZGl0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHRoaXMuZXJyb3JSZWNvdmVyeU1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IC0xO1xufTtcblxuLy9cbi8vIHtAaW5oZXJpdERvY31cbi8vXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMge0BsaW5rIC8vZW5kRXJyb3JDb25kaXRpb259LjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVwb3J0TWF0Y2ggPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lbmRFcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgaGFuZGxlciBpcyBhbHJlYWR5XG4vLyBpbiBlcnJvciByZWNvdmVyeSBtb2RlLiBPdGhlcndpc2UsIGl0IGNhbGxzIHtAbGluayAvL2JlZ2luRXJyb3JDb25kaXRpb259XG4vLyBhbmQgZGlzcGF0Y2hlcyB0aGUgcmVwb3J0aW5nIHRhc2sgYmFzZWQgb24gdGhlIHJ1bnRpbWUgdHlwZSBvZiB7QGNvZGUgZX1cbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+e0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0Tm9WaWFibGVBbHRlcm5hdGl2ZX08L2xpPlxuLy8gPGxpPntAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0SW5wdXRNaXNtYXRjaH08L2xpPlxuLy8gPGxpPntAbGluayBGYWlsZWRQcmVkaWNhdGVFeGNlcHRpb259OiBEaXNwYXRjaGVzIHRoZSBjYWxsIHRvXG4vLyB7QGxpbmsgLy9yZXBvcnRGYWlsZWRQcmVkaWNhdGV9PC9saT5cbi8vIDxsaT5BbGwgb3RoZXIgdHlwZXM6IGNhbGxzIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfSB0byByZXBvcnRcbi8vIHRoZSBleGNlcHRpb248L2xpPlxuLy8gPC91bD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVwb3J0RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIGFuIGVycm9yIGFuZCBoYXZlIG5vdCBtYXRjaGVkIGEgdG9rZW5cbiAgIC8vIHlldCBzdWNjZXNzZnVsbHksIGRvbid0IHJlcG9ydCBhbnkgZXJyb3JzLlxuICAgIGlmKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47IC8vIGRvbid0IHJlcG9ydCBzcHVyaW91cyBlcnJvcnNcbiAgICB9XG4gICAgdGhpcy5iZWdpbkVycm9yQ29uZGl0aW9uKHJlY29nbml6ZXIpO1xuICAgIGlmICggZSBpbnN0YW5jZW9mIE5vVmlhYmxlQWx0RXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUocmVjb2duaXplciwgZSk7XG4gICAgfSBlbHNlIGlmICggZSBpbnN0YW5jZW9mIElucHV0TWlzbWF0Y2hFeGNlcHRpb24gKSB7XG4gICAgICAgIHRoaXMucmVwb3J0SW5wdXRNaXNtYXRjaChyZWNvZ25pemVyLCBlKTtcbiAgICB9IGVsc2UgaWYgKCBlIGluc3RhbmNlb2YgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydEZhaWxlZFByZWRpY2F0ZShyZWNvZ25pemVyLCBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcInVua25vd24gcmVjb2duaXRpb24gZXJyb3IgdHlwZTogXCIgKyBlLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICBjb25zb2xlLmxvZyhlLnN0YWNrKTtcbiAgICAgICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhlLmdldE9mZmVuZGluZ1Rva2VuKCksIGUuZ2V0TWVzc2FnZSgpLCBlKTtcbiAgICB9XG59O1xuLy9cbi8vIHtAaW5oZXJpdERvY31cbi8vXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXN5bmNocm9uaXplcyB0aGUgcGFyc2VyIGJ5IGNvbnN1bWluZyB0b2tlbnNcbi8vIHVudGlsIHdlIGZpbmQgb25lIGluIHRoZSByZXN5bmNocm9uaXphdGlvbiBzZXQtLWxvb3NlbHkgdGhlIHNldCBvZiB0b2tlbnNcbi8vIHRoYXQgY2FuIGZvbGxvdyB0aGUgY3VycmVudCBydWxlLjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICBpZiAodGhpcy5sYXN0RXJyb3JJbmRleD09PXJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKS5pbmRleCAmJlxuICAgICAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyAhPT0gbnVsbCAmJiB0aGlzLmxhc3RFcnJvclN0YXRlcy5pbmRleE9mKHJlY29nbml6ZXIuc3RhdGUpPj0wKSB7XG5cdFx0Ly8gdWggb2gsIGFub3RoZXIgZXJyb3IgYXQgc2FtZSB0b2tlbiBpbmRleCBhbmQgcHJldmlvdXNseS12aXNpdGVkXG5cdFx0Ly8gc3RhdGUgaW4gQVROOyBtdXN0IGJlIGEgY2FzZSB3aGVyZSBMVCgxKSBpcyBpbiB0aGUgcmVjb3Zlcnlcblx0XHQvLyB0b2tlbiBzZXQgc28gbm90aGluZyBnb3QgY29uc3VtZWQuIENvbnN1bWUgYSBzaW5nbGUgdG9rZW5cblx0XHQvLyBhdCBsZWFzdCB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3A7IHRoaXMgaXMgYSBmYWlsc2FmZS5cblx0XHRyZWNvZ25pemVyLmNvbnN1bWUoKTtcbiAgICB9XG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IHJlY29nbml6ZXIuX2lucHV0LmluZGV4O1xuICAgIGlmICh0aGlzLmxhc3RFcnJvclN0YXRlcyA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmxhc3RFcnJvclN0YXRlcy5wdXNoKHJlY29nbml6ZXIuc3RhdGUpO1xuICAgIHZhciBmb2xsb3dTZXQgPSB0aGlzLmdldEVycm9yUmVjb3ZlcnlTZXQocmVjb2duaXplcik7XG4gICAgdGhpcy5jb25zdW1lVW50aWwocmVjb2duaXplciwgZm9sbG93U2V0KTtcbn07XG5cbi8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3N5bmN9IG1ha2VzIHN1cmVcbi8vIHRoYXQgdGhlIGN1cnJlbnQgbG9va2FoZWFkIHN5bWJvbCBpcyBjb25zaXN0ZW50IHdpdGggd2hhdCB3ZXJlIGV4cGVjdGluZ1xuLy8gYXQgdGhpcyBwb2ludCBpbiB0aGUgQVROLiBZb3UgY2FuIGNhbGwgdGhpcyBhbnl0aW1lIGJ1dCBBTlRMUiBvbmx5XG4vLyBnZW5lcmF0ZXMgY29kZSB0byBjaGVjayBiZWZvcmUgc3VicnVsZXMvbG9vcHMgYW5kIGVhY2ggaXRlcmF0aW9uLlxuLy9cbi8vIDxwPkltcGxlbWVudHMgSmltIElkbGUncyBtYWdpYyBzeW5jIG1lY2hhbmlzbSBpbiBjbG9zdXJlcyBhbmQgb3B0aW9uYWxcbi8vIHN1YnJ1bGVzLiBFLmcuLDwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gYSA6IHN5bmMgKCBzdHVmZiBzeW5jICkqIDtcbi8vIHN5bmMgOiB7Y29uc3VtZSB0byB3aGF0IGNhbiBmb2xsb3cgc3luY30gO1xuLy8gPC9wcmU+XG4vL1xuLy8gQXQgdGhlIHN0YXJ0IG9mIGEgc3ViIHJ1bGUgdXBvbiBlcnJvciwge0BsaW5rIC8vc3luY30gcGVyZm9ybXMgc2luZ2xlXG4vLyB0b2tlbiBkZWxldGlvbiwgaWYgcG9zc2libGUuIElmIGl0IGNhbid0IGRvIHRoYXQsIGl0IGJhaWxzIG9uIHRoZSBjdXJyZW50XG4vLyBydWxlIGFuZCB1c2VzIHRoZSBkZWZhdWx0IGVycm9yIHJlY292ZXJ5LCB3aGljaCBjb25zdW1lcyB1bnRpbCB0aGVcbi8vIHJlc3luY2hyb25pemF0aW9uIHNldCBvZiB0aGUgY3VycmVudCBydWxlLlxuLy9cbi8vIDxwPklmIHRoZSBzdWIgcnVsZSBpcyBvcHRpb25hbCAoe0Bjb2RlICguLi4pP30sIHtAY29kZSAoLi4uKSp9LCBvciBibG9ja1xuLy8gd2l0aCBhbiBlbXB0eSBhbHRlcm5hdGl2ZSksIHRoZW4gdGhlIGV4cGVjdGVkIHNldCBpbmNsdWRlcyB3aGF0IGZvbGxvd3Ncbi8vIHRoZSBzdWJydWxlLjwvcD5cbi8vXG4vLyA8cD5EdXJpbmcgbG9vcCBpdGVyYXRpb24sIGl0IGNvbnN1bWVzIHVudGlsIGl0IHNlZXMgYSB0b2tlbiB0aGF0IGNhbiBzdGFydCBhXG4vLyBzdWIgcnVsZSBvciB3aGF0IGZvbGxvd3MgbG9vcC4gWWVzLCB0aGF0IGlzIHByZXR0eSBhZ2dyZXNzaXZlLiBXZSBvcHQgdG9cbi8vIHN0YXkgaW4gdGhlIGxvb3AgYXMgbG9uZyBhcyBwb3NzaWJsZS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5PUklHSU5TPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlByZXZpb3VzIHZlcnNpb25zIG9mIEFOVExSIGRpZCBhIHBvb3Igam9iIG9mIHRoZWlyIHJlY292ZXJ5IHdpdGhpbiBsb29wcy5cbi8vIEEgc2luZ2xlIG1pc21hdGNoIHRva2VuIG9yIG1pc3NpbmcgdG9rZW4gd291bGQgZm9yY2UgdGhlIHBhcnNlciB0byBiYWlsXG4vLyBvdXQgb2YgdGhlIGVudGlyZSBydWxlcyBzdXJyb3VuZGluZyB0aGUgbG9vcC4gU28sIGZvciBydWxlPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBjbGFzc0RlZiA6ICdjbGFzcycgSUQgJ3snIG1lbWJlciogJ30nXG4vLyA8L3ByZT5cbi8vXG4vLyBpbnB1dCB3aXRoIGFuIGV4dHJhIHRva2VuIGJldHdlZW4gbWVtYmVycyB3b3VsZCBmb3JjZSB0aGUgcGFyc2VyIHRvXG4vLyBjb25zdW1lIHVudGlsIGl0IGZvdW5kIHRoZSBuZXh0IGNsYXNzIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gdGhlIG5leHRcbi8vIG1lbWJlciBkZWZpbml0aW9uIG9mIHRoZSBjdXJyZW50IGNsYXNzLlxuLy9cbi8vIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBjb3N0IGEgbGl0dGxlIGJpdCBvZiBlZmZvcnQgYmVjYXVzZSB0aGUgcGFyc2VyIGhhcyB0b1xuLy8gY29tcGFyZSB0b2tlbiBzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsb29wIGFuZCBhdCBlYWNoIGl0ZXJhdGlvbi4gSWYgZm9yXG4vLyBzb21lIHJlYXNvbiBzcGVlZCBpcyBzdWZmZXJpbmcgZm9yIHlvdSwgeW91IGNhbiB0dXJuIG9mZiB0aGlzXG4vLyBmdW5jdGlvbmFsaXR5IGJ5IHNpbXBseSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIGFzIGEgYmxhbmsgeyB9LjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICAvLyBJZiBhbHJlYWR5IHJlY292ZXJpbmcsIGRvbid0IHRyeSB0byBzeW5jXG4gICAgaWYgKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBzID0gcmVjb2duaXplci5faW50ZXJwLmF0bi5zdGF0ZXNbcmVjb2duaXplci5zdGF0ZV07XG4gICAgdmFyIGxhID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIC8vIHRyeSBjaGVhcGVyIHN1YnNldCBmaXJzdDsgbWlnaHQgZ2V0IGx1Y2t5LiBzZWVtcyB0byBzaGF2ZSBhIHdlZSBiaXQgb2ZmXG4gICAgdmFyIG5leHRUb2tlbnMgPSByZWNvZ25pemVyLmF0bi5uZXh0VG9rZW5zKHMpO1xuICAgIGlmIChuZXh0VG9rZW5zLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pIHx8IG5leHRUb2tlbnMuY29udGFpbnMobGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChzLnN0YXRlVHlwZSkge1xuICAgIGNhc2UgQVROU3RhdGUuQkxPQ0tfU1RBUlQ6XG4gICAgY2FzZSBBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUOlxuICAgIGNhc2UgQVROU3RhdGUuUExVU19CTE9DS19TVEFSVDpcbiAgICBjYXNlIEFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWTpcbiAgICAgICAvLyByZXBvcnQgZXJyb3IgYW5kIHJlY292ZXIgaWYgcG9zc2libGVcbiAgICAgICAgaWYoIHRoaXMuc2luZ2xlVG9rZW5EZWxldGlvbihyZWNvZ25pemVyKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSBBVE5TdGF0ZS5QTFVTX0xPT1BfQkFDSzpcbiAgICBjYXNlIEFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLOlxuICAgICAgICB0aGlzLnJlcG9ydFVud2FudGVkVG9rZW4ocmVjb2duaXplcik7XG4gICAgICAgIHZhciBleHBlY3RpbmcgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgZXhwZWN0aW5nLmFkZFNldChyZWNvZ25pemVyLmdldEV4cGVjdGVkVG9rZW5zKCkpO1xuICAgICAgICB2YXIgd2hhdEZvbGxvd3NMb29wSXRlcmF0aW9uT3JSdWxlID0gZXhwZWN0aW5nLmFkZFNldCh0aGlzLmdldEVycm9yUmVjb3ZlcnlTZXQocmVjb2duaXplcikpO1xuICAgICAgICB0aGlzLmNvbnN1bWVVbnRpbChyZWNvZ25pemVyLCB3aGF0Rm9sbG93c0xvb3BJdGVyYXRpb25PclJ1bGUpO1xuICAgICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgICAvLyBkbyBub3RoaW5nIGlmIHdlIGNhbid0IGlkZW50aWZ5IHRoZSBleGFjdCBraW5kIG9mIEFUTiBzdGF0ZVxuICAgIH1cbn07XG5cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIHRva2VucyA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKTtcbiAgICB2YXIgaW5wdXQ7XG4gICAgaWYodG9rZW5zICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChlLnN0YXJ0VG9rZW4udHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dCA9IHRva2Vucy5nZXRUZXh0KG5ldyBJbnRlcnZhbChlLnN0YXJ0VG9rZW4udG9rZW5JbmRleCwgZS5vZmZlbmRpbmdUb2tlbi50b2tlbkluZGV4KSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dCA9IFwiPHVua25vd24gaW5wdXQ+XCI7XG4gICAgfVxuICAgIHZhciBtc2cgPSBcIm5vIHZpYWJsZSBhbHRlcm5hdGl2ZSBhdCBpbnB1dCBcIiArIHRoaXMuZXNjYXBlV1NBbmRRdW90ZShpbnB1dCk7XG4gICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhtc2csIGUub2ZmZW5kaW5nVG9rZW4sIGUpO1xufTtcblxuLy9cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYW5cbi8vIHtAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydElucHV0TWlzbWF0Y2ggPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIG1zZyA9IFwibWlzbWF0Y2hlZCBpbnB1dCBcIiArIHRoaXMuZ2V0VG9rZW5FcnJvckRpc3BsYXkoZS5vZmZlbmRpbmdUb2tlbikgK1xuICAgICAgICAgIFwiIGV4cGVjdGluZyBcIiArIGUuZ2V0RXhwZWN0ZWRUb2tlbnMoKS50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgZS5vZmZlbmRpbmdUb2tlbiwgZSk7XG59O1xuXG4vL1xuLy8gVGhpcyBpcyBjYWxsZWQgYnkge0BsaW5rIC8vcmVwb3J0RXJyb3J9IHdoZW4gdGhlIGV4Y2VwdGlvbiBpcyBhXG4vLyB7QGxpbmsgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEZhaWxlZFByZWRpY2F0ZSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICB2YXIgcnVsZU5hbWUgPSByZWNvZ25pemVyLnJ1bGVOYW1lc1tyZWNvZ25pemVyLl9jdHgucnVsZUluZGV4XTtcbiAgICB2YXIgbXNnID0gXCJydWxlIFwiICsgcnVsZU5hbWUgKyBcIiBcIiArIGUubWVzc2FnZTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgZS5vZmZlbmRpbmdUb2tlbiwgZSk7XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmVwb3J0IGEgc3ludGF4IGVycm9yIHdoaWNoIHJlcXVpcmVzIHRoZSByZW1vdmFsXG4vLyBvZiBhIHRva2VuIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gQXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGVcbi8vIGVycm9uZW91cyBzeW1ib2wgaXMgY3VycmVudCB7QGNvZGUgTFQoMSl9IHN5bWJvbCBhbmQgaGFzIG5vdCB5ZXQgYmVlblxuLy8gcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uIFdoZW4gdGhpcyBtZXRob2QgcmV0dXJucyxcbi8vIHtAY29kZSByZWNvZ25pemVyfSBpcyBpbiBlcnJvciByZWNvdmVyeSBtb2RlLlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHtAbGluayAvL3NpbmdsZVRva2VuRGVsZXRpb259IGlkZW50aWZpZXNcbi8vIHNpbmdsZS10b2tlbiBkZWxldGlvbiBhcyBhIHZpYWJsZSByZWNvdmVyeSBzdHJhdGVneSBmb3IgYSBtaXNtYXRjaGVkXG4vLyBpbnB1dCBlcnJvci48L3A+XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeSBpblxuLy8gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSwgZm9sbG93ZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIFBhcnNlci8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydFVud2FudGVkVG9rZW4gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgaWYgKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICB2YXIgdCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgdmFyIHRva2VuTmFtZSA9IHRoaXMuZ2V0VG9rZW5FcnJvckRpc3BsYXkodCk7XG4gICAgdmFyIGV4cGVjdGluZyA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlbnMocmVjb2duaXplcik7XG4gICAgdmFyIG1zZyA9IFwiZXh0cmFuZW91cyBpbnB1dCBcIiArIHRva2VuTmFtZSArIFwiIGV4cGVjdGluZyBcIiArXG4gICAgICAgIGV4cGVjdGluZy50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgdCwgbnVsbCk7XG59O1xuLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJlcG9ydCBhIHN5bnRheCBlcnJvciB3aGljaCByZXF1aXJlcyB0aGVcbi8vIGluc2VydGlvbiBvZiBhIG1pc3NpbmcgdG9rZW4gaW50byB0aGUgaW5wdXQgc3RyZWFtLiBBdCB0aGUgdGltZSB0aGlzXG4vLyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgbWlzc2luZyB0b2tlbiBoYXMgbm90IHlldCBiZWVuIGluc2VydGVkLiBXaGVuIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zLCB7QGNvZGUgcmVjb2duaXplcn0gaXMgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS5cbi8vXG4vLyA8cD5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB7QGxpbmsgLy9zaW5nbGVUb2tlbkluc2VydGlvbn0gaWRlbnRpZmllc1xuLy8gc2luZ2xlLXRva2VuIGluc2VydGlvbiBhcyBhIHZpYWJsZSByZWNvdmVyeSBzdHJhdGVneSBmb3IgYSBtaXNtYXRjaGVkXG4vLyBpbnB1dCBlcnJvci48L3A+XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeSBpblxuLy8gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSwgZm9sbG93ZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIFBhcnNlci8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE1pc3NpbmdUb2tlbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoIHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICB2YXIgdCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgdmFyIGV4cGVjdGluZyA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlbnMocmVjb2duaXplcik7XG4gICAgdmFyIG1zZyA9IFwibWlzc2luZyBcIiArIGV4cGVjdGluZy50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKSArXG4gICAgICAgICAgXCIgYXQgXCIgKyB0aGlzLmdldFRva2VuRXJyb3JEaXNwbGF5KHQpO1xuICAgIHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnLCB0LCBudWxsKTtcbn07XG5cbi8vIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSB0aGUgbWlzbWF0Y2hlZCBpbnB1dFxuLy8gYnkgdXNpbmcgc2luZ2xlIHRva2VuIGluc2VydGlvbiBhbmQgZGVsZXRpb24gYXMgZGVzY3JpYmVkIGJlbG93LiBJZiB0aGVcbi8vIHJlY292ZXJ5IGF0dGVtcHQgZmFpbHMsIHRoaXMgbWV0aG9kIHRocm93cyBhblxuLy8ge0BsaW5rIElucHV0TWlzbWF0Y2hFeGNlcHRpb259LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkVYVFJBIFRPS0VOPC9zdHJvbmc+IChzaW5nbGUgdG9rZW4gZGVsZXRpb24pPC9wPlxuLy9cbi8vIDxwPntAY29kZSBMQSgxKX0gaXMgbm90IHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLiBJZiB7QGNvZGUgTEEoMil9IGhhcyB0aGVcbi8vIHJpZ2h0IHRva2VuLCBob3dldmVyLCB0aGVuIGFzc3VtZSB7QGNvZGUgTEEoMSl9IGlzIHNvbWUgZXh0cmEgc3B1cmlvdXNcbi8vIHRva2VuIGFuZCBkZWxldGUgaXQuIFRoZW4gY29uc3VtZSBhbmQgcmV0dXJuIHRoZSBuZXh0IHRva2VuICh3aGljaCB3YXNcbi8vIHRoZSB7QGNvZGUgTEEoMil9IHRva2VuKSBhcyB0aGUgc3VjY2Vzc2Z1bCByZXN1bHQgb2YgdGhlIG1hdGNoIG9wZXJhdGlvbi48L3A+XG4vL1xuLy8gPHA+VGhpcyByZWNvdmVyeSBzdHJhdGVneSBpcyBpbXBsZW1lbnRlZCBieSB7QGxpbmtcbi8vIC8vc2luZ2xlVG9rZW5EZWxldGlvbn0uPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+TUlTU0lORyBUT0tFTjwvc3Ryb25nPiAoc2luZ2xlIHRva2VuIGluc2VydGlvbik8L3A+XG4vL1xuLy8gPHA+SWYgY3VycmVudCB0b2tlbiAoYXQge0Bjb2RlIExBKDEpfSkgaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgY291bGQgY29tZVxuLy8gYWZ0ZXIgdGhlIGV4cGVjdGVkIHtAY29kZSBMQSgxKX0gdG9rZW4sIHRoZW4gYXNzdW1lIHRoZSB0b2tlbiBpcyBtaXNzaW5nXG4vLyBhbmQgdXNlIHRoZSBwYXJzZXIncyB7QGxpbmsgVG9rZW5GYWN0b3J5fSB0byBjcmVhdGUgaXQgb24gdGhlIGZseS4gVGhlXG4vLyBcImluc2VydGlvblwiIGlzIHBlcmZvcm1lZCBieSByZXR1cm5pbmcgdGhlIGNyZWF0ZWQgdG9rZW4gYXMgdGhlIHN1Y2Nlc3NmdWxcbi8vIHJlc3VsdCBvZiB0aGUgbWF0Y2ggb3BlcmF0aW9uLjwvcD5cbi8vXG4vLyA8cD5UaGlzIHJlY292ZXJ5IHN0cmF0ZWd5IGlzIGltcGxlbWVudGVkIGJ5IHtAbGlua1xuLy8gLy9zaW5nbGVUb2tlbkluc2VydGlvbn0uPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+RVhBTVBMRTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Gb3IgZXhhbXBsZSwgSW5wdXQge0Bjb2RlIGk9KDM7fSBpcyBjbGVhcmx5IG1pc3NpbmcgdGhlIHtAY29kZSAnKSd9LiBXaGVuXG4vLyB0aGUgcGFyc2VyIHJldHVybnMgZnJvbSB0aGUgbmVzdGVkIGNhbGwgdG8ge0Bjb2RlIGV4cHJ9LCBpdCB3aWxsIGhhdmVcbi8vIGNhbGwgY2hhaW46PC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBzdGF0ICZyYXJyOyBleHByICZyYXJyOyBhdG9tXG4vLyA8L3ByZT5cbi8vXG4vLyBhbmQgaXQgd2lsbCBiZSB0cnlpbmcgdG8gbWF0Y2ggdGhlIHtAY29kZSAnKSd9IGF0IHRoaXMgcG9pbnQgaW4gdGhlXG4vLyBkZXJpdmF0aW9uOlxuLy9cbi8vIDxwcmU+XG4vLyA9Jmd0OyBJRCAnPScgJygnIElOVCAnKScgKCcrJyBhdG9tKSogJzsnXG4vLyBeXG4vLyA8L3ByZT5cbi8vXG4vLyBUaGUgYXR0ZW1wdCB0byBtYXRjaCB7QGNvZGUgJyknfSB3aWxsIGZhaWwgd2hlbiBpdCBzZWVzIHtAY29kZSAnOyd9IGFuZFxuLy8gY2FsbCB7QGxpbmsgLy9yZWNvdmVySW5saW5lfS4gVG8gcmVjb3ZlciwgaXQgc2VlcyB0aGF0IHtAY29kZSBMQSgxKT09JzsnfVxuLy8gaXMgaW4gdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW4gZm9sbG93IHRoZSB7QGNvZGUgJyknfSB0b2tlbiByZWZlcmVuY2Vcbi8vIGluIHJ1bGUge0Bjb2RlIGF0b219LiBJdCBjYW4gYXNzdW1lIHRoYXQgeW91IGZvcmdvdCB0aGUge0Bjb2RlICcpJ30uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gU0lOR0xFIFRPS0VOIERFTEVUSU9OXG4gICAgdmFyIG1hdGNoZWRTeW1ib2wgPSB0aGlzLnNpbmdsZVRva2VuRGVsZXRpb24ocmVjb2duaXplcik7XG4gICAgaWYgKG1hdGNoZWRTeW1ib2wgIT09IG51bGwpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBkZWxldGVkIHRoZSBleHRyYSB0b2tlbi5cbiAgICAgICAgLy8gbm93LCBtb3ZlIHBhc3QgdHR5cGUgdG9rZW4gYXMgaWYgYWxsIHdlcmUgb2tcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgICAgIHJldHVybiBtYXRjaGVkU3ltYm9sO1xuICAgIH1cbiAgICAvLyBTSU5HTEUgVE9LRU4gSU5TRVJUSU9OXG4gICAgaWYgKHRoaXMuc2luZ2xlVG9rZW5JbnNlcnRpb24ocmVjb2duaXplcikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWlzc2luZ1N5bWJvbChyZWNvZ25pemVyKTtcbiAgICB9XG4gICAgLy8gZXZlbiB0aGF0IGRpZG4ndCB3b3JrOyBtdXN0IHRocm93IHRoZSBleGNlcHRpb25cbiAgICB0aHJvdyBuZXcgSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBzaW5nbGUtdG9rZW4gaW5zZXJ0aW9uIGlubGluZSBlcnJvciByZWNvdmVyeVxuLy8gc3RyYXRlZ3kuIEl0IGlzIGNhbGxlZCBieSB7QGxpbmsgLy9yZWNvdmVySW5saW5lfSBpZiB0aGUgc2luZ2xlLXRva2VuXG4vLyBkZWxldGlvbiBzdHJhdGVneSBmYWlscyB0byByZWNvdmVyIGZyb20gdGhlIG1pc21hdGNoZWQgaW5wdXQuIElmIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zIHtAY29kZSB0cnVlfSwge0Bjb2RlIHJlY29nbml6ZXJ9IHdpbGwgYmUgaW4gZXJyb3IgcmVjb3Zlcnlcbi8vIG1vZGUuXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBzaW5nbGUtdG9rZW4gaW5zZXJ0aW9uIGlzIHZpYWJsZSBieVxuLy8gY2hlY2tpbmcgaWYgdGhlIHtAY29kZSBMQSgxKX0gaW5wdXQgc3ltYm9sIGNvdWxkIGJlIHN1Y2Nlc3NmdWxseSBtYXRjaGVkXG4vLyBpZiBpdCB3ZXJlIGluc3RlYWQgdGhlIHtAY29kZSBMQSgyKX0gc3ltYm9sLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zXG4vLyB7QGNvZGUgdHJ1ZX0sIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuZCBpbnNlcnRpbmcgYVxuLy8gdG9rZW4gd2l0aCB0aGUgY29ycmVjdCB0eXBlIHRvIHByb2R1Y2UgdGhpcyBiZWhhdmlvci48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgc2luZ2xlLXRva2VuIGluc2VydGlvbiBpcyBhIHZpYWJsZSByZWNvdmVyeVxuLy8gc3RyYXRlZ3kgZm9yIHRoZSBjdXJyZW50IG1pc21hdGNoZWQgaW5wdXQsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnNpbmdsZVRva2VuSW5zZXJ0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBjdXJyZW50U3ltYm9sVHlwZSA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MQSgxKTtcbiAgICAvLyBpZiBjdXJyZW50IHRva2VuIGlzIGNvbnNpc3RlbnQgd2l0aCB3aGF0IGNvdWxkIGNvbWUgYWZ0ZXIgY3VycmVudFxuICAgIC8vIEFUTiBzdGF0ZSwgdGhlbiB3ZSBrbm93IHdlJ3JlIG1pc3NpbmcgYSB0b2tlbjsgZXJyb3IgcmVjb3ZlcnlcbiAgICAvLyBpcyBmcmVlIHRvIGNvbmp1cmUgdXAgYW5kIGluc2VydCB0aGUgbWlzc2luZyB0b2tlblxuICAgIHZhciBhdG4gPSByZWNvZ25pemVyLl9pbnRlcnAuYXRuO1xuICAgIHZhciBjdXJyZW50U3RhdGUgPSBhdG4uc3RhdGVzW3JlY29nbml6ZXIuc3RhdGVdO1xuICAgIHZhciBuZXh0ID0gY3VycmVudFN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldDtcbiAgICB2YXIgZXhwZWN0aW5nQXRMTDIgPSBhdG4ubmV4dFRva2VucyhuZXh0LCByZWNvZ25pemVyLl9jdHgpO1xuICAgIGlmIChleHBlY3RpbmdBdExMMi5jb250YWlucyhjdXJyZW50U3ltYm9sVHlwZSkgKXtcbiAgICAgICAgdGhpcy5yZXBvcnRNaXNzaW5nVG9rZW4ocmVjb2duaXplcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBzaW5nbGUtdG9rZW4gZGVsZXRpb24gaW5saW5lIGVycm9yIHJlY292ZXJ5XG4vLyBzdHJhdGVneS4gSXQgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlY292ZXJJbmxpbmV9IHRvIGF0dGVtcHQgdG8gcmVjb3ZlclxuLy8gZnJvbSBtaXNtYXRjaGVkIGlucHV0LiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIG51bGwsIHRoZSBwYXJzZXIgYW5kIGVycm9yXG4vLyBoYW5kbGVyIHN0YXRlIHdpbGwgbm90IGhhdmUgY2hhbmdlZC4gSWYgdGhpcyBtZXRob2QgcmV0dXJucyBub24tbnVsbCxcbi8vIHtAY29kZSByZWNvZ25pemVyfSB3aWxsIDxlbT5ub3Q8L2VtPiBiZSBpbiBlcnJvciByZWNvdmVyeSBtb2RlIHNpbmNlIHRoZVxuLy8gcmV0dXJuZWQgdG9rZW4gd2FzIGEgc3VjY2Vzc2Z1bCBtYXRjaC5cbi8vXG4vLyA8cD5JZiB0aGUgc2luZ2xlLXRva2VuIGRlbGV0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoaXMgbWV0aG9kIGNhbGxzXG4vLyB7QGxpbmsgLy9yZXBvcnRVbndhbnRlZFRva2VufSB0byByZXBvcnQgdGhlIGVycm9yLCBmb2xsb3dlZCBieVxuLy8ge0BsaW5rIFBhcnNlci8vY29uc3VtZX0gdG8gYWN0dWFsbHkgXCJkZWxldGVcIiB0aGUgZXh0cmFuZW91cyB0b2tlbi4gVGhlbixcbi8vIGJlZm9yZSByZXR1cm5pbmcge0BsaW5rIC8vcmVwb3J0TWF0Y2h9IGlzIGNhbGxlZCB0byBzaWduYWwgYSBzdWNjZXNzZnVsXG4vLyBtYXRjaC48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHJldHVybiB0aGUgc3VjY2Vzc2Z1bGx5IG1hdGNoZWQge0BsaW5rIFRva2VufSBpbnN0YW5jZSBpZiBzaW5nbGUtdG9rZW5cbi8vIGRlbGV0aW9uIHN1Y2Nlc3NmdWxseSByZWNvdmVycyBmcm9tIHRoZSBtaXNtYXRjaGVkIGlucHV0LCBvdGhlcndpc2Vcbi8vIHtAY29kZSBudWxsfVxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5zaW5nbGVUb2tlbkRlbGV0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBuZXh0VG9rZW5UeXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDIpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIGlmIChleHBlY3RpbmcuY29udGFpbnMobmV4dFRva2VuVHlwZSkpIHtcbiAgICAgICAgdGhpcy5yZXBvcnRVbndhbnRlZFRva2VuKHJlY29nbml6ZXIpO1xuICAgICAgICAvLyBwcmludChcInJlY292ZXJGcm9tTWlzbWF0Y2hlZFRva2VuIGRlbGV0aW5nIFwiIFxcXG4gICAgICAgIC8vICsgc3RyKHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MVCgxKSkgXFxcbiAgICAgICAgLy8gKyBcIiBzaW5jZSBcIiArIHN0cihyZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoMikpIFxcXG4gICAgICAgIC8vICsgXCIgaXMgd2hhdCB3ZSB3YW50XCIsIGZpbGU9c3lzLnN0ZGVycilcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7IC8vIHNpbXBseSBkZWxldGUgZXh0cmEgdG9rZW5cbiAgICAgICAgLy8gd2Ugd2FudCB0byByZXR1cm4gdGhlIHRva2VuIHdlJ3JlIGFjdHVhbGx5IG1hdGNoaW5nXG4gICAgICAgIHZhciBtYXRjaGVkU3ltYm9sID0gcmVjb2duaXplci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yZXBvcnRNYXRjaChyZWNvZ25pemVyKTsgLy8gd2Uga25vdyBjdXJyZW50IHRva2VuIGlzIGNvcnJlY3RcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRTeW1ib2w7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLy8gQ29uanVyZSB1cCBhIG1pc3NpbmcgdG9rZW4gZHVyaW5nIGVycm9yIHJlY292ZXJ5LlxuLy9cbi8vIFRoZSByZWNvZ25pemVyIGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSBzaW5nbGUgbWlzc2luZ1xuLy8gc3ltYm9scy4gQnV0LCBhY3Rpb25zIG1pZ2h0IHJlZmVyIHRvIHRoYXQgbWlzc2luZyBzeW1ib2wuXG4vLyBGb3IgZXhhbXBsZSwgeD1JRCB7ZigkeCk7fS4gVGhlIGFjdGlvbiBjbGVhcmx5IGFzc3VtZXNcbi8vIHRoYXQgdGhlcmUgaGFzIGJlZW4gYW4gaWRlbnRpZmllciBtYXRjaGVkIHByZXZpb3VzbHkgYW5kIHRoYXRcbi8vICR4IHBvaW50cyBhdCB0aGF0IHRva2VuLiBJZiB0aGF0IHRva2VuIGlzIG1pc3NpbmcsIGJ1dFxuLy8gdGhlIG5leHQgdG9rZW4gaW4gdGhlIHN0cmVhbSBpcyB3aGF0IHdlIHdhbnQgd2UgYXNzdW1lIHRoYXRcbi8vIHRoaXMgdG9rZW4gaXMgbWlzc2luZyBhbmQgd2Uga2VlcCBnb2luZy4gQmVjYXVzZSB3ZVxuLy8gaGF2ZSB0byByZXR1cm4gc29tZSB0b2tlbiB0byByZXBsYWNlIHRoZSBtaXNzaW5nIHRva2VuLFxuLy8gd2UgaGF2ZSB0byBjb25qdXJlIG9uZSB1cC4gVGhpcyBtZXRob2QgZ2l2ZXMgdGhlIHVzZXIgY29udHJvbFxuLy8gb3ZlciB0aGUgdG9rZW5zIHJldHVybmVkIGZvciBtaXNzaW5nIHRva2Vucy4gTW9zdGx5LFxuLy8geW91IHdpbGwgd2FudCB0byBjcmVhdGUgc29tZXRoaW5nIHNwZWNpYWwgZm9yIGlkZW50aWZpZXJcbi8vIHRva2Vucy4gRm9yIGxpdGVyYWxzIHN1Y2ggYXMgJ3snIGFuZCAnLCcsIHRoZSBkZWZhdWx0XG4vLyBhY3Rpb24gaW4gdGhlIHBhcnNlciBvciB0cmVlIHBhcnNlciB3b3Jrcy4gSXQgc2ltcGx5IGNyZWF0ZXNcbi8vIGEgQ29tbW9uVG9rZW4gb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuIFRoZSB0ZXh0IHdpbGwgYmUgdGhlIHRva2VuLlxuLy8gSWYgeW91IGNoYW5nZSB3aGF0IHRva2VucyBtdXN0IGJlIGNyZWF0ZWQgYnkgdGhlIGxleGVyLFxuLy8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB0b2tlbnMuXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmdldE1pc3NpbmdTeW1ib2wgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdmFyIGN1cnJlbnRTeW1ib2wgPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIHZhciBleHBlY3RlZFRva2VuVHlwZSA9IGV4cGVjdGluZy5maXJzdCgpOyAvLyBnZXQgYW55IGVsZW1lbnRcbiAgICB2YXIgdG9rZW5UZXh0O1xuICAgIGlmIChleHBlY3RlZFRva2VuVHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICB0b2tlblRleHQgPSBcIjxtaXNzaW5nIEVPRj5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlblRleHQgPSBcIjxtaXNzaW5nIFwiICsgcmVjb2duaXplci5saXRlcmFsTmFtZXNbZXhwZWN0ZWRUb2tlblR5cGVdICsgXCI+XCI7XG4gICAgfVxuICAgIHZhciBjdXJyZW50ID0gY3VycmVudFN5bWJvbDtcbiAgICB2YXIgbG9va2JhY2sgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoLTEpO1xuICAgIGlmIChjdXJyZW50LnR5cGU9PT1Ub2tlbi5FT0YgJiYgbG9va2JhY2sgIT09IG51bGwpIHtcbiAgICAgICAgY3VycmVudCA9IGxvb2tiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb2duaXplci5nZXRUb2tlbkZhY3RvcnkoKS5jcmVhdGUoY3VycmVudC5zb3VyY2UsXG4gICAgICAgIGV4cGVjdGVkVG9rZW5UeXBlLCB0b2tlblRleHQsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCxcbiAgICAgICAgLTEsIC0xLCBjdXJyZW50LmxpbmUsIGN1cnJlbnQuY29sdW1uKTtcbn07XG5cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gcmVjb2duaXplci5nZXRFeHBlY3RlZFRva2VucygpO1xufTtcblxuLy8gSG93IHNob3VsZCBhIHRva2VuIGJlIGRpc3BsYXllZCBpbiBhbiBlcnJvciBtZXNzYWdlPyBUaGUgZGVmYXVsdFxuLy8gaXMgdG8gZGlzcGxheSBqdXN0IHRoZSB0ZXh0LCBidXQgZHVyaW5nIGRldmVsb3BtZW50IHlvdSBtaWdodFxuLy8gd2FudCB0byBoYXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIHNwaXQgb3V0LiBPdmVycmlkZSBpbiB0aGF0IGNhc2Vcbi8vIHRvIHVzZSB0LnRvU3RyaW5nKCkgKHdoaWNoLCBmb3IgQ29tbW9uVG9rZW4sIGR1bXBzIGV2ZXJ5dGhpbmcgYWJvdXRcbi8vIHRoZSB0b2tlbikuIFRoaXMgaXMgYmV0dGVyIHRoYW4gZm9yY2luZyB5b3UgdG8gb3ZlcnJpZGUgYSBtZXRob2QgaW5cbi8vIHlvdXIgdG9rZW4gb2JqZWN0cyBiZWNhdXNlIHlvdSBkb24ndCBoYXZlIHRvIGdvIG1vZGlmeSB5b3VyIGxleGVyXG4vLyBzbyB0aGF0IGl0IGNyZWF0ZXMgYSBuZXcgSmF2YSB0eXBlLlxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRUb2tlbkVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAodCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCI8bm8gdG9rZW4+XCI7XG4gICAgfVxuICAgIHZhciBzID0gdC50ZXh0O1xuICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgIGlmICh0LnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHMgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gXCI8XCIgKyB0LnR5cGUgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lc2NhcGVXU0FuZFF1b3RlKHMpO1xufTtcblxuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmVzY2FwZVdTQW5kUXVvdGUgPSBmdW5jdGlvbihzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFxuL2csXCJcXFxcblwiKTtcbiAgICBzID0gcy5yZXBsYWNlKC9cXHIvZyxcIlxcXFxyXCIpO1xuICAgIHMgPSBzLnJlcGxhY2UoL1xcdC9nLFwiXFxcXHRcIik7XG4gICAgcmV0dXJuIFwiJ1wiICsgcyArIFwiJ1wiO1xufTtcblxuLy8gQ29tcHV0ZSB0aGUgZXJyb3IgcmVjb3Zlcnkgc2V0IGZvciB0aGUgY3VycmVudCBydWxlLiBEdXJpbmdcbi8vIHJ1bGUgaW52b2NhdGlvbiwgdGhlIHBhcnNlciBwdXNoZXMgdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW5cbi8vIGZvbGxvdyB0aGF0IHJ1bGUgcmVmZXJlbmNlIG9uIHRoZSBzdGFjazsgdGhpcyBhbW91bnRzIHRvXG4vLyBjb21wdXRpbmcgRklSU1Qgb2Ygd2hhdCBmb2xsb3dzIHRoZSBydWxlIHJlZmVyZW5jZSBpbiB0aGVcbi8vIGVuY2xvc2luZyBydWxlLiBTZWUgTGluZWFyQXBwcm94aW1hdG9yLkZJUlNUKCkuXG4vLyBUaGlzIGxvY2FsIGZvbGxvdyBzZXQgb25seSBpbmNsdWRlcyB0b2tlbnNcbi8vIGZyb20gd2l0aGluIHRoZSBydWxlOyBpLmUuLCB0aGUgRklSU1QgY29tcHV0YXRpb24gZG9uZSBieVxuLy8gQU5UTFIgc3RvcHMgYXQgdGhlIGVuZCBvZiBhIHJ1bGUuXG4vL1xuLy8gRVhBTVBMRVxuLy9cbi8vIFdoZW4geW91IGZpbmQgYSBcIm5vIHZpYWJsZSBhbHQgZXhjZXB0aW9uXCIsIHRoZSBpbnB1dCBpcyBub3Rcbi8vIGNvbnNpc3RlbnQgd2l0aCBhbnkgb2YgdGhlIGFsdGVybmF0aXZlcyBmb3IgcnVsZSByLiBUaGUgYmVzdFxuLy8gdGhpbmcgdG8gZG8gaXMgdG8gY29uc3VtZSB0b2tlbnMgdW50aWwgeW91IHNlZSBzb21ldGhpbmcgdGhhdFxuLy8gY2FuIGxlZ2FsbHkgZm9sbG93IGEgY2FsbCB0byByLy9vciogYW55IHJ1bGUgdGhhdCBjYWxsZWQgci5cbi8vIFlvdSBkb24ndCB3YW50IHRoZSBleGFjdCBzZXQgb2YgdmlhYmxlIG5leHQgdG9rZW5zIGJlY2F1c2UgdGhlXG4vLyBpbnB1dCBtaWdodCBqdXN0IGJlIG1pc3NpbmcgYSB0b2tlbi0teW91IG1pZ2h0IGNvbnN1bWUgdGhlXG4vLyByZXN0IG9mIHRoZSBpbnB1dCBsb29raW5nIGZvciBvbmUgb2YgdGhlIG1pc3NpbmcgdG9rZW5zLlxuLy9cbi8vIENvbnNpZGVyIGdyYW1tYXI6XG4vL1xuLy8gYSA6ICdbJyBiICddJ1xuLy8gfCAnKCcgYiAnKSdcbi8vIDtcbi8vIGIgOiBjICdeJyBJTlQgO1xuLy8gYyA6IElEXG4vLyB8IElOVFxuLy8gO1xuLy9cbi8vIEF0IGVhY2ggcnVsZSBpbnZvY2F0aW9uLCB0aGUgc2V0IG9mIHRva2VucyB0aGF0IGNvdWxkIGZvbGxvd1xuLy8gdGhhdCBydWxlIGlzIHB1c2hlZCBvbiBhIHN0YWNrLiBIZXJlIGFyZSB0aGUgdmFyaW91c1xuLy8gY29udGV4dC1zZW5zaXRpdmUgZm9sbG93IHNldHM6XG4vL1xuLy8gRk9MTE9XKGIxX2luX2EpID0gRklSU1QoJ10nKSA9ICddJ1xuLy8gRk9MTE9XKGIyX2luX2EpID0gRklSU1QoJyknKSA9ICcpJ1xuLy8gRk9MTE9XKGNfaW5fYikgPSBGSVJTVCgnXicpID0gJ14nXG4vL1xuLy8gVXBvbiBlcnJvbmVvdXMgaW5wdXQgXCJbXVwiLCB0aGUgY2FsbCBjaGFpbiBpc1xuLy9cbi8vIGEgLT4gYiAtPiBjXG4vL1xuLy8gYW5kLCBoZW5jZSwgdGhlIGZvbGxvdyBjb250ZXh0IHN0YWNrIGlzOlxuLy9cbi8vIGRlcHRoIGZvbGxvdyBzZXQgc3RhcnQgb2YgcnVsZSBleGVjdXRpb25cbi8vIDAgPEVPRj4gYSAoZnJvbSBtYWluKCkpXG4vLyAxICddJyBiXG4vLyAyICdeJyBjXG4vL1xuLy8gTm90aWNlIHRoYXQgJyknIGlzIG5vdCBpbmNsdWRlZCwgYmVjYXVzZSBiIHdvdWxkIGhhdmUgdG8gaGF2ZVxuLy8gYmVlbiBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCBjb250ZXh0IGluIHJ1bGUgYSBmb3IgJyknIHRvIGJlXG4vLyBpbmNsdWRlZC5cbi8vXG4vLyBGb3IgZXJyb3IgcmVjb3ZlcnksIHdlIGNhbm5vdCBjb25zaWRlciBGT0xMT1coYylcbi8vIChjb250ZXh0LXNlbnNpdGl2ZSBvciBvdGhlcndpc2UpLiBXZSBuZWVkIHRoZSBjb21iaW5lZCBzZXQgb2Zcbi8vIGFsbCBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1cgc2V0cy0tdGhlIHNldCBvZiBhbGwgdG9rZW5zIHRoYXRcbi8vIGNvdWxkIGZvbGxvdyBhbnkgcmVmZXJlbmNlIGluIHRoZSBjYWxsIGNoYWluLiBXZSBuZWVkIHRvXG4vLyByZXN5bmMgdG8gb25lIG9mIHRob3NlIHRva2Vucy4gTm90ZSB0aGF0IEZPTExPVyhjKT0nXicgYW5kIGlmXG4vLyB3ZSByZXN5bmMnZCB0byB0aGF0IHRva2VuLCB3ZSdkIGNvbnN1bWUgdW50aWwgRU9GLiBXZSBuZWVkIHRvXG4vLyBzeW5jIHRvIGNvbnRleHQtc2Vuc2l0aXZlIEZPTExPV3MgZm9yIGEsIGIsIGFuZCBjOiB7J10nLCdeJ30uXG4vLyBJbiB0aGlzIGNhc2UsIGZvciBpbnB1dCBcIltdXCIsIExBKDEpIGlzICddJyBhbmQgaW4gdGhlIHNldCwgc28gd2Ugd291bGRcbi8vIG5vdCBjb25zdW1lIGFueXRoaW5nLiBBZnRlciBwcmludGluZyBhbiBlcnJvciwgcnVsZSBjIHdvdWxkXG4vLyByZXR1cm4gbm9ybWFsbHkuIFJ1bGUgYiB3b3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ14nIHRob3VnaC5cbi8vIEF0IHRoaXMgcG9pbnQsIGl0IGdldHMgYSBtaXNtYXRjaGVkIHRva2VuIGVycm9yIGFuZCB0aHJvd3MgYW5cbi8vIGV4Y2VwdGlvbiAoc2luY2UgTEEoMSkgaXMgbm90IGluIHRoZSB2aWFibGUgZm9sbG93aW5nIHRva2VuXG4vLyBzZXQpLiBUaGUgcnVsZSBleGNlcHRpb24gaGFuZGxlciB0cmllcyB0byByZWNvdmVyLCBidXQgZmluZHNcbi8vIHRoZSBzYW1lIHJlY292ZXJ5IHNldCBhbmQgZG9lc24ndCBjb25zdW1lIGFueXRoaW5nLiBSdWxlIGJcbi8vIGV4aXRzIG5vcm1hbGx5IHJldHVybmluZyB0byBydWxlIGEuIE5vdyBpdCBmaW5kcyB0aGUgJ10nIChhbmRcbi8vIHdpdGggdGhlIHN1Y2Nlc3NmdWwgbWF0Y2ggZXhpdHMgZXJyb3JSZWNvdmVyeSBtb2RlKS5cbi8vXG4vLyBTbywgeW91IGNhbiBzZWUgdGhhdCB0aGUgcGFyc2VyIHdhbGtzIHVwIHRoZSBjYWxsIGNoYWluIGxvb2tpbmdcbi8vIGZvciB0aGUgdG9rZW4gdGhhdCB3YXMgYSBtZW1iZXIgb2YgdGhlIHJlY292ZXJ5IHNldC5cbi8vXG4vLyBFcnJvcnMgYXJlIG5vdCBnZW5lcmF0ZWQgaW4gZXJyb3JSZWNvdmVyeSBtb2RlLlxuLy9cbi8vIEFOVExSJ3MgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIGJhc2VkIHVwb24gb3JpZ2luYWwgaWRlYXM6XG4vL1xuLy8gXCJBbGdvcml0aG1zICsgRGF0YSBTdHJ1Y3R1cmVzID0gUHJvZ3JhbXNcIiBieSBOaWtsYXVzIFdpcnRoXG4vL1xuLy8gYW5kXG4vL1xuLy8gXCJBIG5vdGUgb24gZXJyb3IgcmVjb3ZlcnkgaW4gcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2Vyc1wiOlxuLy8gaHR0cDovL3BvcnRhbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD05NDc5MDIuOTQ3OTA1XG4vL1xuLy8gTGF0ZXIsIEpvc2VmIEdyb3NjaCBoYWQgc29tZSBnb29kIGlkZWFzOlxuLy9cbi8vIFwiRWZmaWNpZW50IGFuZCBDb21mb3J0YWJsZSBFcnJvciBSZWNvdmVyeSBpbiBSZWN1cnNpdmUgRGVzY2VudFxuLy8gUGFyc2Vyc1wiOlxuLy8gZnRwOi8vd3d3LmNvY29sYWIuY29tL3Byb2R1Y3RzL2NvY2t0YWlsL2RvY2E0LnBzL2VsbC5wcy56aXBcbi8vXG4vLyBMaWtlIEdyb3NjaCBJIGltcGxlbWVudCBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1cgc2V0cyB0aGF0IGFyZSBjb21iaW5lZFxuLy8gYXQgcnVuLXRpbWUgdXBvbiBlcnJvciB0byBhdm9pZCBvdmVyaGVhZCBkdXJpbmcgcGFyc2luZy5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuZ2V0RXJyb3JSZWNvdmVyeVNldCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICB2YXIgYXRuID0gcmVjb2duaXplci5faW50ZXJwLmF0bjtcbiAgICB2YXIgY3R4ID0gcmVjb2duaXplci5fY3R4O1xuICAgIHZhciByZWNvdmVyU2V0ID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgd2hpbGUgKGN0eCAhPT0gbnVsbCAmJiBjdHguaW52b2tpbmdTdGF0ZT49MCkge1xuICAgICAgICAvLyBjb21wdXRlIHdoYXQgZm9sbG93cyB3aG8gaW52b2tlZCB1c1xuICAgICAgICB2YXIgaW52b2tpbmdTdGF0ZSA9IGF0bi5zdGF0ZXNbY3R4Lmludm9raW5nU3RhdGVdO1xuICAgICAgICB2YXIgcnQgPSBpbnZva2luZ1N0YXRlLnRyYW5zaXRpb25zWzBdO1xuICAgICAgICB2YXIgZm9sbG93ID0gYXRuLm5leHRUb2tlbnMocnQuZm9sbG93U3RhdGUpO1xuICAgICAgICByZWNvdmVyU2V0LmFkZFNldChmb2xsb3cpO1xuICAgICAgICBjdHggPSBjdHgucGFyZW50Q3R4O1xuICAgIH1cbiAgICByZWNvdmVyU2V0LnJlbW92ZU9uZShUb2tlbi5FUFNJTE9OKTtcbiAgICByZXR1cm4gcmVjb3ZlclNldDtcbn07XG5cbi8vIENvbnN1bWUgdG9rZW5zIHVudGlsIG9uZSBtYXRjaGVzIHRoZSBnaXZlbiB0b2tlbiBzZXQuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5jb25zdW1lVW50aWwgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBzZXQpIHtcbiAgICB2YXIgdHR5cGUgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTEEoMSk7XG4gICAgd2hpbGUoIHR0eXBlICE9PSBUb2tlbi5FT0YgJiYgIXNldC5jb250YWlucyh0dHlwZSkpIHtcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgICAgIHR0eXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIH1cbn07XG5cbi8vXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3l9IHJlc3BvbmRzIHRvIHN5bnRheCBlcnJvcnNcbi8vIGJ5IGltbWVkaWF0ZWx5IGNhbmNlbGluZyB0aGUgcGFyc2Ugb3BlcmF0aW9uIHdpdGggYVxuLy8ge0BsaW5rIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9ufS4gVGhlIGltcGxlbWVudGF0aW9uIGVuc3VyZXMgdGhhdCB0aGVcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vZXhjZXB0aW9ufSBmaWVsZCBpcyBzZXQgZm9yIGFsbCBwYXJzZSB0cmVlIG5vZGVzXG4vLyB0aGF0IHdlcmUgbm90IGNvbXBsZXRlZCBwcmlvciB0byBlbmNvdW50ZXJpbmcgdGhlIGVycm9yLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBlcnJvciBzdHJhdGVneSBpcyB1c2VmdWwgaW4gdGhlIGZvbGxvd2luZyBzY2VuYXJpb3MuPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT48c3Ryb25nPlR3by1zdGFnZSBwYXJzaW5nOjwvc3Ryb25nPiBUaGlzIGVycm9yIHN0cmF0ZWd5IGFsbG93cyB0aGUgZmlyc3Rcbi8vIHN0YWdlIG9mIHR3by1zdGFnZSBwYXJzaW5nIHRvIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBpZiBhbiBlcnJvciBpc1xuLy8gZW5jb3VudGVyZWQsIGFuZCBpbW1lZGlhdGVseSBmYWxsIGJhY2sgdG8gdGhlIHNlY29uZCBzdGFnZS4gSW4gYWRkaXRpb24gdG9cbi8vIGF2b2lkaW5nIHdhc3RlZCB3b3JrIGJ5IGF0dGVtcHRpbmcgdG8gcmVjb3ZlciBmcm9tIGVycm9ycyBoZXJlLCB0aGUgZW1wdHlcbi8vIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBCYWlsRXJyb3JTdHJhdGVneS8vc3luY30gaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mXG4vLyB0aGUgZmlyc3Qgc3RhZ2UuPC9saT5cbi8vIDxsaT48c3Ryb25nPlNpbGVudCB2YWxpZGF0aW9uOjwvc3Ryb25nPiBXaGVuIHN5bnRheCBlcnJvcnMgYXJlIG5vdCBiZWluZ1xuLy8gcmVwb3J0ZWQgb3IgbG9nZ2VkLCBhbmQgdGhlIHBhcnNlIHJlc3VsdCBpcyBzaW1wbHkgaWdub3JlZCBpZiBlcnJvcnMgb2NjdXIsXG4vLyB0aGUge0BsaW5rIEJhaWxFcnJvclN0cmF0ZWd5fSBhdm9pZHMgd2FzdGluZyB3b3JrIG9uIHJlY292ZXJpbmcgZnJvbSBlcnJvcnNcbi8vIHdoZW4gdGhlIHJlc3VsdCB3aWxsIGJlIGlnbm9yZWQgZWl0aGVyIHdheS48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyA8cD5cbi8vIHtAY29kZSBteXBhcnNlci5zZXRFcnJvckhhbmRsZXIobmV3IEJhaWxFcnJvclN0cmF0ZWd5KCkpO308L3A+XG4vL1xuLy8gQHNlZSBQYXJzZXIvL3NldEVycm9ySGFuZGxlcihBTlRMUkVycm9yU3RyYXRlZ3kpXG4vL1xuZnVuY3Rpb24gQmFpbEVycm9yU3RyYXRlZ3koKSB7XG5cdERlZmF1bHRFcnJvclN0cmF0ZWd5LmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZSk7XG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYWlsRXJyb3JTdHJhdGVneTtcblxuLy8gSW5zdGVhZCBvZiByZWNvdmVyaW5nIGZyb20gZXhjZXB0aW9uIHtAY29kZSBlfSwgcmUtdGhyb3cgaXQgd3JhcHBlZFxuLy8gaW4gYSB7QGxpbmsgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb259IHNvIGl0IGlzIG5vdCBjYXVnaHQgYnkgdGhlXG4vLyBydWxlIGZ1bmN0aW9uIGNhdGNoZXMuIFVzZSB7QGxpbmsgRXhjZXB0aW9uLy9nZXRDYXVzZSgpfSB0byBnZXQgdGhlXG4vLyBvcmlnaW5hbCB7QGxpbmsgUmVjb2duaXRpb25FeGNlcHRpb259LlxuLy9cbkJhaWxFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZWNvdmVyID0gZnVuY3Rpb24ocmVjb2duaXplciwgZSkge1xuICAgIHZhciBjb250ZXh0ID0gcmVjb2duaXplci5fY3R4O1xuICAgIHdoaWxlIChjb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gZTtcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50Q3R4O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24oZSk7XG59O1xuXG4vLyBNYWtlIHN1cmUgd2UgZG9uJ3QgYXR0ZW1wdCB0byByZWNvdmVyIGlubGluZTsgaWYgdGhlIHBhcnNlclxuLy8gc3VjY2Vzc2Z1bGx5IHJlY292ZXJzLCBpdCB3b24ndCB0aHJvdyBhbiBleGNlcHRpb24uXG4vL1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5yZWNvdmVyKHJlY29nbml6ZXIsIG5ldyBJbnB1dE1pc21hdGNoRXhjZXB0aW9uKHJlY29nbml6ZXIpKTtcbn07XG5cbi8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBhdHRlbXB0IHRvIHJlY292ZXIgZnJvbSBwcm9ibGVtcyBpbiBzdWJydWxlcy4vL1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gcGFzc1xufTtcblxuZXhwb3J0cy5CYWlsRXJyb3JTdHJhdGVneSA9IEJhaWxFcnJvclN0cmF0ZWd5O1xuZXhwb3J0cy5EZWZhdWx0RXJyb3JTdHJhdGVneSA9IERlZmF1bHRFcnJvclN0cmF0ZWd5O1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBUaGUgcm9vdCBvZiB0aGUgQU5UTFIgZXhjZXB0aW9uIGhpZXJhcmNoeS4gSW4gZ2VuZXJhbCwgQU5UTFIgdHJhY2tzIGp1c3Rcbi8vICAzIGtpbmRzIG9mIGVycm9yczogcHJlZGljdGlvbiBlcnJvcnMsIGZhaWxlZCBwcmVkaWNhdGUgZXJyb3JzLCBhbmRcbi8vICBtaXNtYXRjaGVkIGlucHV0IGVycm9ycy4gSW4gZWFjaCBjYXNlLCB0aGUgcGFyc2VyIGtub3dzIHdoZXJlIGl0IGlzXG4vLyAgaW4gdGhlIGlucHV0LCB3aGVyZSBpdCBpcyBpbiB0aGUgQVROLCB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrLFxuLy8gIGFuZCB3aGF0IGtpbmQgb2YgcHJvYmxlbSBvY2N1cnJlZC5cblxudmFyIFByZWRpY2F0ZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuLy4uL2F0bi9UcmFuc2l0aW9uJykuUHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUmVjb2duaXRpb25FeGNlcHRpb24ocGFyYW1zKSB7XG5cdEVycm9yLmNhbGwodGhpcyk7XG5cdGlmICghIUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlY29nbml0aW9uRXhjZXB0aW9uKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcblx0fVxuXHR0aGlzLm1lc3NhZ2UgPSBwYXJhbXMubWVzc2FnZTtcbiAgICB0aGlzLnJlY29nbml6ZXIgPSBwYXJhbXMucmVjb2duaXplcjtcbiAgICB0aGlzLmlucHV0ID0gcGFyYW1zLmlucHV0O1xuICAgIHRoaXMuY3R4ID0gcGFyYW1zLmN0eDtcbiAgICAvLyBUaGUgY3VycmVudCB7QGxpbmsgVG9rZW59IHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuIFNpbmNlIG5vdCBhbGwgc3RyZWFtc1xuICAgIC8vIHN1cHBvcnQgYWNjZXNzaW5nIHN5bWJvbHMgYnkgaW5kZXgsIHdlIGhhdmUgdG8gdHJhY2sgdGhlIHtAbGluayBUb2tlbn1cbiAgICAvLyBpbnN0YW5jZSBpdHNlbGYuXG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IG51bGw7XG4gICAgLy8gR2V0IHRoZSBBVE4gc3RhdGUgbnVtYmVyIHRoZSBwYXJzZXIgd2FzIGluIGF0IHRoZSB0aW1lIHRoZSBlcnJvclxuICAgIC8vIG9jY3VycmVkLiBGb3Ige0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSBhbmRcbiAgICAvLyB7QGxpbmsgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbn0gZXhjZXB0aW9ucywgdGhpcyBpcyB0aGVcbiAgICAvLyB7QGxpbmsgRGVjaXNpb25TdGF0ZX0gbnVtYmVyLiBGb3Igb3RoZXJzLCBpdCBpcyB0aGUgc3RhdGUgd2hvc2Ugb3V0Z29pbmdcbiAgICAvLyBlZGdlIHdlIGNvdWxkbid0IG1hdGNoLlxuICAgIHRoaXMub2ZmZW5kaW5nU3RhdGUgPSAtMTtcbiAgICBpZiAodGhpcy5yZWNvZ25pemVyIT09bnVsbCkge1xuICAgICAgICB0aGlzLm9mZmVuZGluZ1N0YXRlID0gdGhpcy5yZWNvZ25pemVyLnN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjb2duaXRpb25FeGNlcHRpb247XG5cbi8vIDxwPklmIHRoZSBzdGF0ZSBudW1iZXIgaXMgbm90IGtub3duLCB0aGlzIG1ldGhvZCByZXR1cm5zIC0xLjwvcD5cblxuLy9cbi8vIEdldHMgdGhlIHNldCBvZiBpbnB1dCBzeW1ib2xzIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGZvbGxvdyB0aGVcbi8vIHByZXZpb3VzbHkgbWF0Y2hlZCBzeW1ib2wgYXQgdGhlIHRpbWUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93bi5cbi8vXG4vLyA8cD5JZiB0aGUgc2V0IG9mIGV4cGVjdGVkIHRva2VucyBpcyBub3Qga25vd24gYW5kIGNvdWxkIG5vdCBiZSBjb21wdXRlZCxcbi8vIHRoaXMgbWV0aG9kIHJldHVybnMge0Bjb2RlIG51bGx9LjwvcD5cbi8vXG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgdG9rZW4gdHlwZXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBmb2xsb3cgdGhlIGN1cnJlbnRcbi8vIHN0YXRlIGluIHRoZSBBVE4sIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS5cbi8vIC9cblJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnJlY29nbml6ZXIhPT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY29nbml6ZXIuYXRuLmdldEV4cGVjdGVkVG9rZW5zKHRoaXMub2ZmZW5kaW5nU3RhdGUsIHRoaXMuY3R4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5SZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xufTtcblxuZnVuY3Rpb24gTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbihsZXhlciwgaW5wdXQsIHN0YXJ0SW5kZXgsIGRlYWRFbmRDb25maWdzKSB7XG5cdFJlY29nbml0aW9uRXhjZXB0aW9uLmNhbGwodGhpcywge21lc3NhZ2U6XCJcIiwgcmVjb2duaXplcjpsZXhlciwgaW5wdXQ6aW5wdXQsIGN0eDpudWxsfSk7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICB0aGlzLmRlYWRFbmRDb25maWdzID0gZGVhZEVuZENvbmZpZ3M7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuXG5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzeW1ib2wgPSBcIlwiO1xuICAgIGlmICh0aGlzLnN0YXJ0SW5kZXggPj0gMCAmJiB0aGlzLnN0YXJ0SW5kZXggPCB0aGlzLmlucHV0LnNpemUpIHtcbiAgICAgICAgc3ltYm9sID0gdGhpcy5pbnB1dC5nZXRUZXh0KCh0aGlzLnN0YXJ0SW5kZXgsdGhpcy5zdGFydEluZGV4KSk7XG4gICAgfVxuICAgIHJldHVybiBcIkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb25cIiArIHN5bWJvbDtcbn07XG5cbi8vIEluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgY291bGQgbm90IGRlY2lkZSB3aGljaCBvZiB0d28gb3IgbW9yZSBwYXRoc1xuLy8gdG8gdGFrZSBiYXNlZCB1cG9uIHRoZSByZW1haW5pbmcgaW5wdXQuIEl0IHRyYWNrcyB0aGUgc3RhcnRpbmcgdG9rZW5cbi8vIG9mIHRoZSBvZmZlbmRpbmcgaW5wdXQgYW5kIGFsc28ga25vd3Mgd2hlcmUgdGhlIHBhcnNlciB3YXNcbi8vIGluIHRoZSB2YXJpb3VzIHBhdGhzIHdoZW4gdGhlIGVycm9yLiBSZXBvcnRlZCBieSByZXBvcnROb1ZpYWJsZUFsdGVybmF0aXZlKClcbi8vXG5mdW5jdGlvbiBOb1ZpYWJsZUFsdEV4Y2VwdGlvbihyZWNvZ25pemVyLCBpbnB1dCwgc3RhcnRUb2tlbiwgb2ZmZW5kaW5nVG9rZW4sIGRlYWRFbmRDb25maWdzLCBjdHgpIHtcblx0Y3R4ID0gY3R4IHx8IHJlY29nbml6ZXIuX2N0eDtcblx0b2ZmZW5kaW5nVG9rZW4gPSBvZmZlbmRpbmdUb2tlbiB8fCByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuXHRzdGFydFRva2VuID0gc3RhcnRUb2tlbiB8fCByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpbnB1dCA9IGlucHV0IHx8IHJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKTtcblx0UmVjb2duaXRpb25FeGNlcHRpb24uY2FsbCh0aGlzLCB7bWVzc2FnZTpcIlwiLCByZWNvZ25pemVyOnJlY29nbml6ZXIsIGlucHV0OmlucHV0LCBjdHg6Y3R4fSk7XG4gICAgLy8gV2hpY2ggY29uZmlndXJhdGlvbnMgZGlkIHdlIHRyeSBhdCBpbnB1dC5pbmRleCgpIHRoYXQgY291bGRuJ3QgbWF0Y2hcblx0Ly8gaW5wdXQuTFQoMSk/Ly9cbiAgICB0aGlzLmRlYWRFbmRDb25maWdzID0gZGVhZEVuZENvbmZpZ3M7XG4gICAgLy8gVGhlIHRva2VuIG9iamVjdCBhdCB0aGUgc3RhcnQgaW5kZXg7IHRoZSBpbnB1dCBzdHJlYW0gbWlnaHRcbiAgICAvLyBub3QgYmUgYnVmZmVyaW5nIHRva2VucyBzbyBnZXQgYSByZWZlcmVuY2UgdG8gaXQuIChBdCB0aGVcbiAgICAvLyB0aW1lIHRoZSBlcnJvciBvY2N1cnJlZCwgb2YgY291cnNlIHRoZSBzdHJlYW0gbmVlZHMgdG8ga2VlcCBhXG4gICAgLy8gYnVmZmVyIGFsbCBvZiB0aGUgdG9rZW5zIGJ1dCBsYXRlciB3ZSBtaWdodCBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhvc2UuKVxuICAgIHRoaXMuc3RhcnRUb2tlbiA9IHN0YXJ0VG9rZW47XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IG9mZmVuZGluZ1Rva2VuO1xufVxuXG5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSk7XG5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuLy8gVGhpcyBzaWduaWZpZXMgYW55IGtpbmQgb2YgbWlzbWF0Y2hlZCBpbnB1dCBleGNlcHRpb25zIHN1Y2ggYXNcbi8vIHdoZW4gdGhlIGN1cnJlbnQgaW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHRva2VuLlxuLy9cbmZ1bmN0aW9uIElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcikge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOlwiXCIsIHJlY29nbml6ZXI6cmVjb2duaXplciwgaW5wdXQ6cmVjb2duaXplci5nZXRJbnB1dFN0cmVhbSgpLCBjdHg6cmVjb2duaXplci5fY3R4fSk7XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG59XG5cbklucHV0TWlzbWF0Y2hFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuXG4vLyBBIHNlbWFudGljIHByZWRpY2F0ZSBmYWlsZWQgZHVyaW5nIHZhbGlkYXRpb24uIFZhbGlkYXRpb24gb2YgcHJlZGljYXRlc1xuLy8gb2NjdXJzIHdoZW4gbm9ybWFsbHkgcGFyc2luZyB0aGUgYWx0ZXJuYXRpdmUganVzdCBsaWtlIG1hdGNoaW5nIGEgdG9rZW4uXG4vLyBEaXNhbWJpZ3VhdGluZyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBvY2N1cnMgd2hlbiB3ZSB0ZXN0IGEgcHJlZGljYXRlIGR1cmluZ1xuLy8gcHJlZGljdGlvbi5cblxuZnVuY3Rpb24gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHJlY29nbml6ZXIsIHByZWRpY2F0ZSwgbWVzc2FnZSkge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOnRoaXMuZm9ybWF0TWVzc2FnZShwcmVkaWNhdGUsbWVzc2FnZSB8fCBudWxsKSwgcmVjb2duaXplcjpyZWNvZ25pemVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OnJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKSwgY3R4OnJlY29nbml6ZXIuX2N0eH0pO1xuICAgIHZhciBzID0gcmVjb2duaXplci5faW50ZXJwLmF0bi5zdGF0ZXNbcmVjb2duaXplci5zdGF0ZV07XG4gICAgdmFyIHRyYW5zID0gcy50cmFuc2l0aW9uc1swXTtcbiAgICBpZiAodHJhbnMgaW5zdGFuY2VvZiBQcmVkaWNhdGVUcmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMucnVsZUluZGV4ID0gdHJhbnMucnVsZUluZGV4O1xuICAgICAgICB0aGlzLnByZWRpY2F0ZUluZGV4ID0gdHJhbnMucHJlZEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucnVsZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGVJbmRleCA9IDA7XG4gICAgfVxuICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgIHRoaXMub2ZmZW5kaW5nVG9rZW4gPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcblxuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZS5mb3JtYXRNZXNzYWdlID0gZnVuY3Rpb24ocHJlZGljYXRlLCBtZXNzYWdlKSB7XG4gICAgaWYgKG1lc3NhZ2UgIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJmYWlsZWQgcHJlZGljYXRlOiB7XCIgKyBwcmVkaWNhdGUgKyBcIn0/XCI7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24oKSB7XG5cdEVycm9yLmNhbGwodGhpcyk7XG5cdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uO1xuXG5leHBvcnRzLlJlY29nbml0aW9uRXhjZXB0aW9uID0gUmVjb2duaXRpb25FeGNlcHRpb247XG5leHBvcnRzLk5vVmlhYmxlQWx0RXhjZXB0aW9uID0gTm9WaWFibGVBbHRFeGNlcHRpb247XG5leHBvcnRzLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbjtcbmV4cG9ydHMuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uO1xuZXhwb3J0cy5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbiA9IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5leHBvcnRzLlJlY29nbml0aW9uRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5SZWNvZ25pdGlvbkV4Y2VwdGlvbjtcbmV4cG9ydHMuTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL0Vycm9ycycpLk5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5JbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuZXhwb3J0cy5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24gPSByZXF1aXJlKCcuL0Vycm9ycycpLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbmV4cG9ydHMuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL0RpYWdub3N0aWNFcnJvckxpc3RlbmVyJykuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7XG5leHBvcnRzLkJhaWxFcnJvclN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9FcnJvclN0cmF0ZWd5JykuQmFpbEVycm9yU3RyYXRlZ3k7XG5leHBvcnRzLkVycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL0Vycm9yTGlzdGVuZXInKS5FcnJvckxpc3RlbmVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZXhwb3J0cy5hdG4gPSByZXF1aXJlKCcuL2F0bi9pbmRleCcpO1xuZXhwb3J0cy5jb2RlcG9pbnRhdCA9IHJlcXVpcmUoJy4vcG9seWZpbGxzL2NvZGVwb2ludGF0Jyk7XG5leHBvcnRzLmRmYSA9IHJlcXVpcmUoJy4vZGZhL2luZGV4Jyk7XG5leHBvcnRzLmZyb21jb2RlcG9pbnQgPSByZXF1aXJlKCcuL3BvbHlmaWxscy9mcm9tY29kZXBvaW50Jyk7XG5leHBvcnRzLnRyZWUgPSByZXF1aXJlKCcuL3RyZWUvaW5kZXgnKTtcbmV4cG9ydHMuZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yL2luZGV4Jyk7XG5leHBvcnRzLlRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuZXhwb3J0cy5DaGFyU3RyZWFtcyA9IHJlcXVpcmUoJy4vQ2hhclN0cmVhbXMnKS5DaGFyU3RyZWFtcztcbmV4cG9ydHMuQ29tbW9uVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuQ29tbW9uVG9rZW47XG5leHBvcnRzLklucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xuZXhwb3J0cy5GaWxlU3RyZWFtID0gcmVxdWlyZSgnLi9GaWxlU3RyZWFtJykuRmlsZVN0cmVhbTtcbmV4cG9ydHMuQ29tbW9uVG9rZW5TdHJlYW0gPSByZXF1aXJlKCcuL0NvbW1vblRva2VuU3RyZWFtJykuQ29tbW9uVG9rZW5TdHJlYW07XG5leHBvcnRzLkxleGVyID0gcmVxdWlyZSgnLi9MZXhlcicpLkxleGVyO1xuZXhwb3J0cy5QYXJzZXIgPSByZXF1aXJlKCcuL1BhcnNlcicpLlBhcnNlcjtcbnZhciBwYyA9IHJlcXVpcmUoJy4vUHJlZGljdGlvbkNvbnRleHQnKTtcbmV4cG9ydHMuUHJlZGljdGlvbkNvbnRleHRDYWNoZSA9IHBjLlByZWRpY3Rpb25Db250ZXh0Q2FjaGU7XG5leHBvcnRzLlBhcnNlclJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi9QYXJzZXJSdWxlQ29udGV4dCcpLlBhcnNlclJ1bGVDb250ZXh0O1xuZXhwb3J0cy5JbnRlcnZhbCA9IHJlcXVpcmUoJy4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcbmV4cG9ydHMuVXRpbHMgPSByZXF1aXJlKCcuL1V0aWxzJyk7XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2NvZGVwb2ludGF0IHYwLjIuMCBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KSB7XG5cdChmdW5jdGlvbigpIHtcblx0XHQndXNlIHN0cmljdCc7IC8vIG5lZWRlZCB0byBzdXBwb3J0IGBhcHBseWAvYGNhbGxgIHdpdGggYHVuZGVmaW5lZGAvYG51bGxgXG5cdFx0dmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gSUUgOCBvbmx5IHN1cHBvcnRzIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG9uIERPTSBlbGVtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG9iamVjdCA9IHt9O1xuXHRcdFx0XHR2YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gJGRlZmluZVByb3BlcnR5KG9iamVjdCwgb2JqZWN0LCBvYmplY3QpICYmICRkZWZpbmVQcm9wZXJ0eTtcblx0XHRcdH0gY2F0Y2goZXJyb3IpIHt9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0oKSk7XG5cdFx0dmFyIGNvZGVQb2ludEF0ID0gZnVuY3Rpb24ocG9zaXRpb24pIHtcblx0XHRcdGlmICh0aGlzID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKCk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuXHRcdFx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRcdFx0Ly8gYFRvSW50ZWdlcmBcblx0XHRcdHZhciBpbmRleCA9IHBvc2l0aW9uID8gTnVtYmVyKHBvc2l0aW9uKSA6IDA7XG5cdFx0XHRpZiAoaW5kZXggIT0gaW5kZXgpIHsgLy8gYmV0dGVyIGBpc05hTmBcblx0XHRcdFx0aW5kZXggPSAwO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQWNjb3VudCBmb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzOlxuXHRcdFx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzaXplKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBHZXQgdGhlIGZpcnN0IGNvZGUgdW5pdFxuXHRcdFx0dmFyIGZpcnN0ID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpO1xuXHRcdFx0dmFyIHNlY29uZDtcblx0XHRcdGlmICggLy8gY2hlY2sgaWYgaXTigJlzIHRoZSBzdGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdGZpcnN0ID49IDB4RDgwMCAmJiBmaXJzdCA8PSAweERCRkYgJiYgLy8gaGlnaCBzdXJyb2dhdGVcblx0XHRcdFx0c2l6ZSA+IGluZGV4ICsgMSAvLyB0aGVyZSBpcyBhIG5leHQgY29kZSB1bml0XG5cdFx0XHQpIHtcblx0XHRcdFx0c2Vjb25kID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcblx0XHRcdFx0aWYgKHNlY29uZCA+PSAweERDMDAgJiYgc2Vjb25kIDw9IDB4REZGRikgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdFx0cmV0dXJuIChmaXJzdCAtIDB4RDgwMCkgKiAweDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmaXJzdDtcblx0XHR9O1xuXHRcdGlmIChkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0ZGVmaW5lUHJvcGVydHkoU3RyaW5nLnByb3RvdHlwZSwgJ2NvZGVQb2ludEF0Jywge1xuXHRcdFx0XHQndmFsdWUnOiBjb2RlUG9pbnRBdCxcblx0XHRcdFx0J2NvbmZpZ3VyYWJsZSc6IHRydWUsXG5cdFx0XHRcdCd3cml0YWJsZSc6IHRydWVcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0ID0gY29kZVBvaW50QXQ7XG5cdFx0fVxuXHR9KCkpO1xufVxuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9mcm9tY29kZXBvaW50IHYwLjIuMSBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcuZnJvbUNvZGVQb2ludCkge1xuXHQoZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gSUUgOCBvbmx5IHN1cHBvcnRzIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG9uIERPTSBlbGVtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG9iamVjdCA9IHt9O1xuXHRcdFx0XHR2YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gJGRlZmluZVByb3BlcnR5KG9iamVjdCwgb2JqZWN0LCBvYmplY3QpICYmICRkZWZpbmVQcm9wZXJ0eTtcblx0XHRcdH0gY2F0Y2goZXJyb3IpIHt9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0oKSk7XG5cdFx0dmFyIHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cdFx0dmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblx0XHR2YXIgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uKF8pIHtcblx0XHRcdHZhciBNQVhfU0laRSA9IDB4NDAwMDtcblx0XHRcdHZhciBjb2RlVW5pdHMgPSBbXTtcblx0XHRcdHZhciBoaWdoU3Vycm9nYXRlO1xuXHRcdFx0dmFyIGxvd1N1cnJvZ2F0ZTtcblx0XHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdFx0dmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRpZiAoIWxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gJyc7XG5cdFx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0XHR2YXIgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWlzRmluaXRlKGNvZGVQb2ludCkgfHwgLy8gYE5hTmAsIGArSW5maW5pdHlgLCBvciBgLUluZmluaXR5YFxuXHRcdFx0XHRcdGNvZGVQb2ludCA8IDAgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHRcdFx0Y29kZVBvaW50ID4gMHgxMEZGRkYgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHRcdFx0Zmxvb3IoY29kZVBvaW50KSAhPSBjb2RlUG9pbnQgLy8gbm90IGFuIGludGVnZXJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCBjb2RlIHBvaW50OiAnICsgY29kZVBvaW50KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY29kZVBvaW50IDw9IDB4RkZGRikgeyAvLyBCTVAgY29kZSBwb2ludFxuXHRcdFx0XHRcdGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XG5cdFx0XHRcdH0gZWxzZSB7IC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdFx0Y29kZVBvaW50IC09IDB4MTAwMDA7XG5cdFx0XHRcdFx0aGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgMHhEODAwO1xuXHRcdFx0XHRcdGxvd1N1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgJSAweDQwMCkgKyAweERDMDA7XG5cdFx0XHRcdFx0Y29kZVVuaXRzLnB1c2goaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5kZXggKyAxID09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cyk7XG5cdFx0XHRcdFx0Y29kZVVuaXRzLmxlbmd0aCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0XHRpZiAoZGVmaW5lUHJvcGVydHkpIHtcblx0XHRcdGRlZmluZVByb3BlcnR5KFN0cmluZywgJ2Zyb21Db2RlUG9pbnQnLCB7XG5cdFx0XHRcdCd2YWx1ZSc6IGZyb21Db2RlUG9pbnQsXG5cdFx0XHRcdCdjb25maWd1cmFibGUnOiB0cnVlLFxuXHRcdFx0XHQnd3JpdGFibGUnOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0U3RyaW5nLmZyb21Db2RlUG9pbnQgPSBmcm9tQ29kZVBvaW50O1xuXHRcdH1cblx0fSgpKTtcbn1cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vLyBUaGUgYmFzaWMgbm90aW9uIG9mIGEgdHJlZSBoYXMgYSBwYXJlbnQsIGEgcGF5bG9hZCwgYW5kIGEgbGlzdCBvZiBjaGlsZHJlbi5cbi8vICBJdCBpcyB0aGUgbW9zdCBhYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGFsbCB0aGUgdHJlZXMgdXNlZCBieSBBTlRMUi5cbi8vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IG5ldyBJbnRlcnZhbCgtMSwgLTIpO1xudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMuanMnKTtcblxuXG5mdW5jdGlvbiBUcmVlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gU3ludGF4VHJlZSgpIHtcblx0VHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3ludGF4VHJlZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyZWUucHJvdG90eXBlKTtcblN5bnRheFRyZWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ludGF4VHJlZTtcblxuZnVuY3Rpb24gUGFyc2VUcmVlKCkge1xuXHRTeW50YXhUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTeW50YXhUcmVlLnByb3RvdHlwZSk7XG5QYXJzZVRyZWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VUcmVlO1xuXG5mdW5jdGlvbiBSdWxlTm9kZSgpIHtcblx0UGFyc2VUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlTm9kZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcnNlVHJlZS5wcm90b3R5cGUpO1xuUnVsZU5vZGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUnVsZU5vZGU7XG5cbmZ1bmN0aW9uIFRlcm1pbmFsTm9kZSgpIHtcblx0UGFyc2VUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5UZXJtaW5hbE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWUucHJvdG90eXBlKTtcblRlcm1pbmFsTm9kZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXJtaW5hbE5vZGU7XG5cbmZ1bmN0aW9uIEVycm9yTm9kZSgpIHtcblx0VGVybWluYWxOb2RlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5FcnJvck5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGUucHJvdG90eXBlKTtcbkVycm9yTm9kZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvck5vZGU7XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZVZpc2l0b3IoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWVWaXNpdG9yLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uKGN0eCkge1xuIFx0aWYgKEFycmF5LmlzQXJyYXkoY3R4KSkge1xuXHRcdHJldHVybiBjdHgubWFwKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQuYWNjZXB0KHRoaXMpO1xuICAgICAgICB9LCB0aGlzKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY3R4LmFjY2VwdCh0aGlzKTtcblx0fVxufTtcblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRDaGlsZHJlbiA9IGZ1bmN0aW9uKGN0eCkge1xuXHRpZiAoY3R4LmNoaWxkcmVuKSB7XG5cdFx0cmV0dXJuIHRoaXMudmlzaXQoY3R4LmNoaWxkcmVuKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG5QYXJzZVRyZWVWaXNpdG9yLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRFcnJvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5cbmZ1bmN0aW9uIFBhcnNlVHJlZUxpc3RlbmVyKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLnZpc2l0VGVybWluYWwgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUudmlzaXRFcnJvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFdmVyeVJ1bGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUuZXhpdEV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbn07XG5cbmZ1bmN0aW9uIFRlcm1pbmFsTm9kZUltcGwoc3ltYm9sKSB7XG5cdFRlcm1pbmFsTm9kZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnBhcmVudEN0eCA9IG51bGw7XG5cdHRoaXMuc3ltYm9sID0gc3ltYm9sO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRlcm1pbmFsTm9kZS5wcm90b3R5cGUpO1xuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXJtaW5hbE5vZGVJbXBsO1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRTeW1ib2wgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnBhcmVudEN0eDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFBheWxvYWQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuc3ltYm9sID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG5cdH1cblx0dmFyIHRva2VuSW5kZXggPSB0aGlzLnN5bWJvbC50b2tlbkluZGV4O1xuXHRyZXR1cm4gbmV3IEludGVydmFsKHRva2VuSW5kZXgsIHRva2VuSW5kZXgpO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gMDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKHZpc2l0b3IpIHtcblx0cmV0dXJuIHZpc2l0b3IudmlzaXRUZXJtaW5hbCh0aGlzKTtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sLnRleHQ7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5zeW1ib2wudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5zeW1ib2wudGV4dDtcblx0fVxufTtcblxuLy8gUmVwcmVzZW50cyBhIHRva2VuIHRoYXQgd2FzIGNvbnN1bWVkIGR1cmluZyByZXN5bmNocm9uaXphdGlvblxuLy8gcmF0aGVyIHRoYW4gZHVyaW5nIGEgdmFsaWQgbWF0Y2ggb3BlcmF0aW9uLiBGb3IgZXhhbXBsZSxcbi8vIHdlIHdpbGwgY3JlYXRlIHRoaXMga2luZCBvZiBhIG5vZGUgZHVyaW5nIHNpbmdsZSB0b2tlbiBpbnNlcnRpb25cbi8vIGFuZCBkZWxldGlvbiBhcyB3ZWxsIGFzIGR1cmluZyBcImNvbnN1bWUgdW50aWwgZXJyb3IgcmVjb3Zlcnkgc2V0XCJcbi8vIHVwb24gbm8gdmlhYmxlIGFsdGVybmF0aXZlIGV4Y2VwdGlvbnMuXG5cbmZ1bmN0aW9uIEVycm9yTm9kZUltcGwodG9rZW4pIHtcblx0VGVybWluYWxOb2RlSW1wbC5jYWxsKHRoaXMsIHRva2VuKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZSk7XG5FcnJvck5vZGVJbXBsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yTm9kZUltcGw7XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlLmlzRXJyb3JOb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0cnVlO1xufTtcblxuRXJyb3JOb2RlSW1wbC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24odmlzaXRvcikge1xuXHRyZXR1cm4gdmlzaXRvci52aXNpdEVycm9yTm9kZSh0aGlzKTtcbn07XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZVdhbGtlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlVHJlZVdhbGtlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uKGxpc3RlbmVyLCB0KSB7XG5cdHZhciBlcnJvck5vZGUgPSB0IGluc3RhbmNlb2YgRXJyb3JOb2RlIHx8XG5cdFx0XHQodC5pc0Vycm9yTm9kZSAhPT0gdW5kZWZpbmVkICYmIHQuaXNFcnJvck5vZGUoKSk7XG5cdGlmIChlcnJvck5vZGUpIHtcblx0XHRsaXN0ZW5lci52aXNpdEVycm9yTm9kZSh0KTtcblx0fSBlbHNlIGlmICh0IGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0bGlzdGVuZXIudmlzaXRUZXJtaW5hbCh0KTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmVudGVyUnVsZShsaXN0ZW5lciwgdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0LmdldENoaWxkQ291bnQoKTsgaSsrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0LmdldENoaWxkKGkpO1xuXHRcdFx0dGhpcy53YWxrKGxpc3RlbmVyLCBjaGlsZCk7XG5cdFx0fVxuXHRcdHRoaXMuZXhpdFJ1bGUobGlzdGVuZXIsIHQpO1xuXHR9XG59O1xuLy9cbi8vIFRoZSBkaXNjb3Zlcnkgb2YgYSBydWxlIG5vZGUsIGludm9sdmVzIHNlbmRpbmcgdHdvIGV2ZW50czogdGhlIGdlbmVyaWNcbi8vIHtAbGluayBQYXJzZVRyZWVMaXN0ZW5lci8vZW50ZXJFdmVyeVJ1bGV9IGFuZCBhXG4vLyB7QGxpbmsgUnVsZUNvbnRleHR9LXNwZWNpZmljIGV2ZW50LiBGaXJzdCB3ZSB0cmlnZ2VyIHRoZSBnZW5lcmljIGFuZCB0aGVuXG4vLyB0aGUgcnVsZSBzcGVjaWZpYy4gV2UgdG8gdGhlbSBpbiByZXZlcnNlIG9yZGVyIHVwb24gZmluaXNoaW5nIHRoZSBub2RlLlxuLy9cblBhcnNlVHJlZVdhbGtlci5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIsIHIpIHtcblx0dmFyIGN0eCA9IHIuZ2V0UnVsZUNvbnRleHQoKTtcblx0bGlzdGVuZXIuZW50ZXJFdmVyeVJ1bGUoY3R4KTtcblx0Y3R4LmVudGVyUnVsZShsaXN0ZW5lcik7XG59O1xuXG5QYXJzZVRyZWVXYWxrZXIucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIsIHIpIHtcblx0dmFyIGN0eCA9IHIuZ2V0UnVsZUNvbnRleHQoKTtcblx0Y3R4LmV4aXRSdWxlKGxpc3RlbmVyKTtcblx0bGlzdGVuZXIuZXhpdEV2ZXJ5UnVsZShjdHgpO1xufTtcblxuUGFyc2VUcmVlV2Fsa2VyLkRFRkFVTFQgPSBuZXcgUGFyc2VUcmVlV2Fsa2VyKCk7XG5cbmV4cG9ydHMuUnVsZU5vZGUgPSBSdWxlTm9kZTtcbmV4cG9ydHMuRXJyb3JOb2RlID0gRXJyb3JOb2RlO1xuZXhwb3J0cy5UZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGU7XG5leHBvcnRzLkVycm9yTm9kZUltcGwgPSBFcnJvck5vZGVJbXBsO1xuZXhwb3J0cy5UZXJtaW5hbE5vZGVJbXBsID0gVGVybWluYWxOb2RlSW1wbDtcbmV4cG9ydHMuUGFyc2VUcmVlTGlzdGVuZXIgPSBQYXJzZVRyZWVMaXN0ZW5lcjtcbmV4cG9ydHMuUGFyc2VUcmVlVmlzaXRvciA9IFBhcnNlVHJlZVZpc2l0b3I7XG5leHBvcnRzLlBhcnNlVHJlZVdhbGtlciA9IFBhcnNlVHJlZVdhbGtlcjtcbmV4cG9ydHMuSU5WQUxJRF9JTlRFUlZBTCA9IElOVkFMSURfSU5URVJWQUw7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSdWxlTm9kZSA9IHJlcXVpcmUoJy4vVHJlZScpLlJ1bGVOb2RlO1xudmFyIEVycm9yTm9kZSA9IHJlcXVpcmUoJy4vVHJlZScpLkVycm9yTm9kZTtcbnZhciBUZXJtaW5hbE5vZGUgPSByZXF1aXJlKCcuL1RyZWUnKS5UZXJtaW5hbE5vZGU7XG52YXIgUGFyc2VyUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1BhcnNlclJ1bGVDb250ZXh0JykuUGFyc2VyUnVsZUNvbnRleHQ7XG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgSU5WQUxJRF9BTFRfTlVNQkVSID0gcmVxdWlyZSgnLi8uLi9hdG4vQVROJykuSU5WQUxJRF9BTFRfTlVNQkVSO1xuXG5cbi8qKiBBIHNldCBvZiB1dGlsaXR5IHJvdXRpbmVzIHVzZWZ1bCBmb3IgYWxsIGtpbmRzIG9mIEFOVExSIHRyZWVzLiAqL1xuZnVuY3Rpb24gVHJlZXMoKSB7XG59XG5cbi8vIFByaW50IG91dCBhIHdob2xlIHRyZWUgaW4gTElTUCBmb3JtLiB7QGxpbmsgLy9nZXROb2RlVGV4dH0gaXMgdXNlZCBvbiB0aGVcbi8vICBub2RlIHBheWxvYWRzIHRvIGdldCB0aGUgdGV4dCBmb3IgdGhlIG5vZGVzLiAgRGV0ZWN0XG4vLyAgcGFyc2UgdHJlZXMgYW5kIGV4dHJhY3QgZGF0YSBhcHByb3ByaWF0ZWx5LlxuVHJlZXMudG9TdHJpbmdUcmVlID0gZnVuY3Rpb24odHJlZSwgcnVsZU5hbWVzLCByZWNvZykge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0cmVjb2cgPSByZWNvZyB8fCBudWxsO1xuICAgIGlmKHJlY29nIT09bnVsbCkge1xuICAgICAgIHJ1bGVOYW1lcyA9IHJlY29nLnJ1bGVOYW1lcztcbiAgICB9XG4gICAgdmFyIHMgPSBUcmVlcy5nZXROb2RlVGV4dCh0cmVlLCBydWxlTmFtZXMpO1xuICAgIHMgPSBVdGlscy5lc2NhcGVXaGl0ZXNwYWNlKHMsIGZhbHNlKTtcbiAgICB2YXIgYyA9IHRyZWUuZ2V0Q2hpbGRDb3VudCgpO1xuICAgIGlmKGM9PT0wKSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICB2YXIgcmVzID0gXCIoXCIgKyBzICsgJyAnO1xuICAgIGlmKGM+MCkge1xuICAgICAgICBzID0gVHJlZXMudG9TdHJpbmdUcmVlKHRyZWUuZ2V0Q2hpbGQoMCksIHJ1bGVOYW1lcyk7XG4gICAgICAgIHJlcyA9IHJlcy5jb25jYXQocyk7XG4gICAgfVxuICAgIGZvcih2YXIgaT0xO2k8YztpKyspIHtcbiAgICAgICAgcyA9IFRyZWVzLnRvU3RyaW5nVHJlZSh0cmVlLmdldENoaWxkKGkpLCBydWxlTmFtZXMpO1xuICAgICAgICByZXMgPSByZXMuY29uY2F0KCcgJyArIHMpO1xuICAgIH1cbiAgICByZXMgPSByZXMuY29uY2F0KFwiKVwiKTtcbiAgICByZXR1cm4gcmVzO1xufTtcblxuVHJlZXMuZ2V0Tm9kZVRleHQgPSBmdW5jdGlvbih0LCBydWxlTmFtZXMsIHJlY29nKSB7XG5cdHJ1bGVOYW1lcyA9IHJ1bGVOYW1lcyB8fCBudWxsO1xuXHRyZWNvZyA9IHJlY29nIHx8IG51bGw7XG4gICAgaWYocmVjb2chPT1udWxsKSB7XG4gICAgICAgIHJ1bGVOYW1lcyA9IHJlY29nLnJ1bGVOYW1lcztcbiAgICB9XG4gICAgaWYocnVsZU5hbWVzIT09bnVsbCkge1xuICAgICAgIGlmICh0IGluc3RhbmNlb2YgUnVsZUNvbnRleHQpIHtcbiAgICAgICAgICAgdmFyIGFsdE51bWJlciA9IHQuZ2V0QWx0TnVtYmVyKCk7XG4gICAgICAgICAgIGlmICggYWx0TnVtYmVyIT1JTlZBTElEX0FMVF9OVU1CRVIgKSB7XG4gICAgICAgICAgICAgICByZXR1cm4gcnVsZU5hbWVzW3QucnVsZUluZGV4XStcIjpcIithbHROdW1iZXI7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lc1t0LnJ1bGVJbmRleF07XG4gICAgICAgfSBlbHNlIGlmICggdCBpbnN0YW5jZW9mIEVycm9yTm9kZSkge1xuICAgICAgICAgICByZXR1cm4gdC50b1N0cmluZygpO1xuICAgICAgIH0gZWxzZSBpZih0IGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgIGlmKHQuc3ltYm9sIT09bnVsbCkge1xuICAgICAgICAgICAgICAgcmV0dXJuIHQuc3ltYm9sLnRleHQ7XG4gICAgICAgICAgIH1cbiAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vIHJlY29nIGZvciBydWxlIG5hbWVzXG4gICAgdmFyIHBheWxvYWQgPSB0LmdldFBheWxvYWQoKTtcbiAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIFRva2VuICkge1xuICAgICAgIHJldHVybiBwYXlsb2FkLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0LmdldFBheWxvYWQoKS50b1N0cmluZygpO1xufTtcblxuXG4vLyBSZXR1cm4gb3JkZXJlZCBsaXN0IG9mIGFsbCBjaGlsZHJlbiBvZiB0aGlzIG5vZGVcblRyZWVzLmdldENoaWxkcmVuID0gZnVuY3Rpb24odCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXHRmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuXHRcdGxpc3QucHVzaCh0LmdldENoaWxkKGkpKTtcblx0fVxuXHRyZXR1cm4gbGlzdDtcbn07XG5cbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIGFuY2VzdG9ycyBvZiB0aGlzIG5vZGUuICBUaGUgZmlyc3Qgbm9kZSBvZlxuLy8gIGxpc3QgaXMgdGhlIHJvb3QgYW5kIHRoZSBsYXN0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcyBub2RlLlxuLy9cblRyZWVzLmdldEFuY2VzdG9ycyA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdCA9IHQuZ2V0UGFyZW50KCk7XG4gICAgd2hpbGUodCE9PW51bGwpIHtcbiAgICAgICAgYW5jZXN0b3JzID0gW3RdLmNvbmNhdChhbmNlc3RvcnMpO1xuICAgICAgICB0ID0gdC5nZXRQYXJlbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9ycztcbn07XG5cblRyZWVzLmZpbmRBbGxUb2tlbk5vZGVzID0gZnVuY3Rpb24odCwgdHR5cGUpIHtcbiAgICByZXR1cm4gVHJlZXMuZmluZEFsbE5vZGVzKHQsIHR0eXBlLCB0cnVlKTtcbn07XG5cblRyZWVzLmZpbmRBbGxSdWxlTm9kZXMgPSBmdW5jdGlvbih0LCBydWxlSW5kZXgpIHtcblx0cmV0dXJuIFRyZWVzLmZpbmRBbGxOb2Rlcyh0LCBydWxlSW5kZXgsIGZhbHNlKTtcbn07XG5cblRyZWVzLmZpbmRBbGxOb2RlcyA9IGZ1bmN0aW9uKHQsIGluZGV4LCBmaW5kVG9rZW5zKSB7XG5cdHZhciBub2RlcyA9IFtdO1xuXHRUcmVlcy5fZmluZEFsbE5vZGVzKHQsIGluZGV4LCBmaW5kVG9rZW5zLCBub2Rlcyk7XG5cdHJldHVybiBub2Rlcztcbn07XG5cblRyZWVzLl9maW5kQWxsTm9kZXMgPSBmdW5jdGlvbih0LCBpbmRleCwgZmluZFRva2Vucywgbm9kZXMpIHtcblx0Ly8gY2hlY2sgdGhpcyBub2RlICh0aGUgcm9vdCkgZmlyc3Rcblx0aWYoZmluZFRva2VucyAmJiAodCBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkpIHtcblx0XHRpZih0LnN5bWJvbC50eXBlPT09aW5kZXgpIHtcblx0XHRcdG5vZGVzLnB1c2godCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYoIWZpbmRUb2tlbnMgJiYgKHQgaW5zdGFuY2VvZiBQYXJzZXJSdWxlQ29udGV4dCkpIHtcblx0XHRpZih0LnJ1bGVJbmRleD09PWluZGV4KSB7XG5cdFx0XHRub2Rlcy5wdXNoKHQpO1xuXHRcdH1cblx0fVxuXHQvLyBjaGVjayBjaGlsZHJlblxuXHRmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuXHRcdFRyZWVzLl9maW5kQWxsTm9kZXModC5nZXRDaGlsZChpKSwgaW5kZXgsIGZpbmRUb2tlbnMsIG5vZGVzKTtcblx0fVxufTtcblxuVHJlZXMuZGVzY2VuZGFudHMgPSBmdW5jdGlvbih0KSB7XG5cdHZhciBub2RlcyA9IFt0XTtcbiAgICBmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuICAgICAgICBub2RlcyA9IG5vZGVzLmNvbmNhdChUcmVlcy5kZXNjZW5kYW50cyh0LmdldENoaWxkKGkpKSk7XG4gICAgfVxuICAgIHJldHVybiBub2Rlcztcbn07XG5cblxuZXhwb3J0cy5UcmVlcyA9IFRyZWVzOyIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRyZWUgPSByZXF1aXJlKCcuL1RyZWUnKTtcbmV4cG9ydHMuVHJlZXMgPSByZXF1aXJlKCcuL1RyZWVzJykuVHJlZXM7XG5leHBvcnRzLlJ1bGVOb2RlID0gVHJlZS5SdWxlTm9kZTtcbmV4cG9ydHMuUGFyc2VUcmVlTGlzdGVuZXIgPSBUcmVlLlBhcnNlVHJlZUxpc3RlbmVyO1xuZXhwb3J0cy5QYXJzZVRyZWVWaXNpdG9yID0gVHJlZS5QYXJzZVRyZWVWaXNpdG9yO1xuZXhwb3J0cy5QYXJzZVRyZWVXYWxrZXIgPSBUcmVlLlBhcnNlVHJlZVdhbGtlcjtcbiIsIiIsIi8qKlxuICogQGxpY2Vuc2UgQ29tcGxleC5qcyB2Mi4wLjExIDExLzAyLzIwMTZcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZylcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICoqL1xuXG4vKipcbiAqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyB0aGUgbWFuaXB1bGF0aW9uIG9mIGNvbXBsZXggbnVtYmVycy5cbiAqIFlvdSBjYW4gcGFzcyBhIGNvbXBsZXggbnVtYmVyIGluIGRpZmZlcmVudCBmb3JtYXRzLiBFaXRoZXIgYXMgb2JqZWN0LCBkb3VibGUsIHN0cmluZyBvciB0d28gaW50ZWdlciBwYXJhbWV0ZXJzLlxuICpcbiAqIE9iamVjdCBmb3JtXG4gKiB7IHJlOiA8cmVhbD4sIGltOiA8aW1hZ2luYXJ5PiB9XG4gKiB7IGFyZzogPGFuZ2xlPiwgYWJzOiA8cmFkaXVzPiB9XG4gKiB7IHBoaTogPGFuZ2xlPiwgcjogPHJhZGl1cz4gfVxuICpcbiAqIEFycmF5IC8gVmVjdG9yIGZvcm1cbiAqIFsgcmVhbCwgaW1hZ2luYXJ5IF1cbiAqXG4gKiBEb3VibGUgZm9ybVxuICogOTkuMyAtIFNpbmdsZSBkb3VibGUgdmFsdWVcbiAqXG4gKiBTdHJpbmcgZm9ybVxuICogJzIzLjEzMzcnIC0gU2ltcGxlIHJlYWwgbnVtYmVyXG4gKiAnMTUrM2knIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXJcbiAqICczLWknIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXJcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIHZhciBjID0gbmV3IENvbXBsZXgoJzk5LjMrOGknKTtcbiAqIGMubXVsKHtyOiAzLCBpOiA5fSkuZGl2KDQuOSkuc3ViKDMsIDIpO1xuICpcbiAqL1xuXG4oZnVuY3Rpb24ocm9vdCkge1xuXG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgY29zaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKSAqIDAuNTtcbiAgfTtcblxuICB2YXIgc2luaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKE1hdGguZXhwKHgpIC0gTWF0aC5leHAoLXgpKSAqIDAuNTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBjb3MoeCkgLSAxIHVzaW5nIFRheWxvciBzZXJpZXMgaWYgeCBpcyBzbWFsbC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlcn0gY29zKHgpIC0gMVxuICAgKi9cblxuICB2YXIgY29zbTEgPSBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5QSS80O1xuICAgIGlmICh4IDwgLWxpbWl0IHx8IHggPiBsaW1pdCkge1xuICAgICAgcmV0dXJuIChNYXRoLmNvcyh4KSAtIDEuMCk7XG4gICAgfVxuXG4gICAgdmFyIHh4ID0geCAqIHg7XG4gICAgcmV0dXJuIHh4ICpcbiAgICAgICgtMC41ICsgeHggKlxuICAgICAgICAoMS8yNCArIHh4ICpcbiAgICAgICAgICAoLTEvNzIwICsgeHggKlxuICAgICAgICAgICAgKDEvNDAzMjAgKyB4eCAqXG4gICAgICAgICAgICAgICgtMS8zNjI4ODAwICsgeHggKlxuICAgICAgICAgICAgICAgICgxLzQ3OTAwMTQ2MDAgKyB4eCAqXG4gICAgICAgICAgICAgICAgICAoLTEvODcxNzgyOTEyMDAgKyB4eCAqXG4gICAgICAgICAgICAgICAgICAgICgxLzIwOTIyNzg5ODg4MDAwKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICB9O1xuXG4gIHZhciBoeXBvdCA9IGZ1bmN0aW9uKHgsIHkpIHtcblxuICAgIHZhciBhID0gTWF0aC5hYnMoeCk7XG4gICAgdmFyIGIgPSBNYXRoLmFicyh5KTtcblxuICAgIGlmIChhIDwgMzAwMCAmJiBiIDwgMzAwMCkge1xuICAgICAgcmV0dXJuIE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgICB9XG5cbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgIGEgPSBiO1xuICAgICAgYiA9IHggLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0geSAvIHg7XG4gICAgfVxuICAgIHJldHVybiBhICogTWF0aC5zcXJ0KDEgKyBiICogYik7XG4gIH07XG5cbiAgdmFyIHBhcnNlcl9leGl0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgU3ludGF4RXJyb3IoJ0ludmFsaWQgUGFyYW0nKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBsb2coc3FydChhXjIrYl4yKSkgaW4gYSB3YXkgdG8gYXZvaWQgb3ZlcmZsb3dzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBsb2dIeXBvdChhLCBiKSB7XG5cbiAgICB2YXIgX2EgPSBNYXRoLmFicyhhKTtcbiAgICB2YXIgX2IgPSBNYXRoLmFicyhiKTtcblxuICAgIGlmIChhID09PSAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coX2IpO1xuICAgIH1cblxuICAgIGlmIChiID09PSAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coX2EpO1xuICAgIH1cblxuICAgIGlmIChfYSA8IDMwMDAgJiYgX2IgPCAzMDAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coYSAqIGEgKyBiICogYikgKiAwLjU7XG4gICAgfVxuXG4gICAgLyogSSBnb3QgNCBpZGVhcyB0byBjb21wdXRlIHRoaXMgcHJvcGVydHkgd2l0aG91dCBvdmVyZmxvdzpcbiAgICAgKlxuICAgICAqIFRlc3RpbmcgMTAwMDAwMCB0aW1lcyB3aXRoIHJhbmRvbSBzYW1wbGVzIGZvciBhLGIg4oiIIFsxLCAxMDAwMDAwMDAwXSBhZ2FpbnN0IGEgYmlnIGRlY2ltYWwgbGlicmFyeSB0byBnZXQgYW4gZXJyb3IgZXN0aW1hdGVcbiAgICAgKlxuICAgICAqIDEuIE9ubHkgZWxpbWluYXRlIHRoZSBzcXVhcmUgcm9vdDogKE9WRVJBTEwgRVJST1I6IDMuOTEyMjQ4MzAzMDk1MTExNmUtMTEpXG5cbiAgICAgTWF0aC5sb2coYSAqIGEgKyBiICogYikgLyAyXG5cbiAgICAgKlxuICAgICAqXG4gICAgICogMi4gVHJ5IHRvIHVzZSB0aGUgbm9uLW92ZXJmbG93aW5nIHB5dGhhZ29yYXM6IChPVkVSQUxMIEVSUk9SOiA4Ljg4OTc2MDAzOTIxMDE1OWUtMTApXG5cbiAgICAgdmFyIGZuID0gZnVuY3Rpb24oYSwgYikge1xuICAgICBhID0gTWF0aC5hYnMoYSk7XG4gICAgIGIgPSBNYXRoLmFicyhiKTtcbiAgICAgdmFyIHQgPSBNYXRoLm1pbihhLCBiKTtcbiAgICAgYSA9IE1hdGgubWF4KGEsIGIpO1xuICAgICB0ID0gdCAvIGE7XG5cbiAgICAgcmV0dXJuIE1hdGgubG9nKGEpICsgTWF0aC5sb2coMSArIHQgKiB0KSAvIDI7XG4gICAgIH07XG5cbiAgICAgKiAzLiBBYnVzZSB0aGUgaWRlbnRpdHkgY29zKGF0YW4oeS94KSA9IHggLyBzcXJ0KHheMit5XjIpOiAoT1ZFUkFMTCBFUlJPUjogMy40NzgwMTc4NzM3MDM3MjA0ZS0xMClcblxuICAgICBNYXRoLmxvZyhhIC8gTWF0aC5jb3MoTWF0aC5hdGFuMihiLCBhKSkpXG5cbiAgICAgKiA0LiBVc2UgMy4gYW5kIGFwcGx5IGxvZyBydWxlczogKE9WRVJBTEwgRVJST1I6IDEuMjAxNDA4NzUwMjYyMDg5NmUtOSlcblxuICAgICBNYXRoLmxvZyhhKSAtIE1hdGgubG9nKE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKVxuXG4gICAgICovXG5cbiAgICByZXR1cm4gTWF0aC5sb2coYSAvIE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKTtcbiAgfVxuXG4gIHZhciBwYXJzZSA9IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgIHZhciB6ID0geydyZSc6IDAsICdpbSc6IDB9O1xuXG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCB8fCBhID09PSBudWxsKSB7XG4gICAgICB6WydyZSddID1cbiAgICAgICAgICAgICAgelsnaW0nXSA9IDA7XG4gICAgfSBlbHNlIGlmIChiICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHpbJ3JlJ10gPSBhO1xuICAgICAgelsnaW0nXSA9IGI7XG4gICAgfSBlbHNlXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBhKSB7XG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcblxuICAgICAgICAgIGlmICgnaW0nIGluIGEgJiYgJ3JlJyBpbiBhKSB7XG4gICAgICAgICAgICB6WydyZSddID0gYVsncmUnXTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydpbSddO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJ2FicycgaW4gYSAmJiAnYXJnJyBpbiBhKSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhWydhYnMnXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ2FyZyddKSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydhYnMnXSAqIE1hdGguY29zKGFbJ2FyZyddKTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydhYnMnXSAqIE1hdGguc2luKGFbJ2FyZyddKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCdyJyBpbiBhICYmICdwaGknIGluIGEpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFbJ3InXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ3BoaSddKSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydyJ10gKiBNYXRoLmNvcyhhWydwaGknXSk7XG4gICAgICAgICAgICB6WydpbSddID0gYVsnciddICogTWF0aC5zaW4oYVsncGhpJ10pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYS5sZW5ndGggPT09IDIpIHsgLy8gUXVpY2sgYXJyYXkgY2hlY2tcbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWzBdO1xuICAgICAgICAgICAgelsnaW0nXSA9IGFbMV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG5cbiAgICAgICAgICB6WydpbSddID0gLyogdm9pZCAqL1xuICAgICAgICAgICAgICAgICAgelsncmUnXSA9IDA7XG5cbiAgICAgICAgICB2YXIgdG9rZW5zID0gYS5tYXRjaCgvXFxkK1xcLj9cXGQqZVsrLV0/XFxkK3xcXGQrXFwuP1xcZCp8XFwuXFxkK3wuL2cpO1xuICAgICAgICAgIHZhciBwbHVzID0gMTtcbiAgICAgICAgICB2YXIgbWludXMgPSAwO1xuXG4gICAgICAgICAgaWYgKHRva2VucyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgICAgICB2YXIgYyA9IHRva2Vuc1tpXTtcblxuICAgICAgICAgICAgaWYgKGMgPT09ICcgJyB8fCBjID09PSAnXFx0JyB8fCBjID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAvKiB2b2lkICovXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICcrJykge1xuICAgICAgICAgICAgICBwbHVzKys7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICctJykge1xuICAgICAgICAgICAgICBtaW51cysrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnaScgfHwgYyA9PT0gJ0knKSB7XG5cbiAgICAgICAgICAgICAgaWYgKHBsdXMgKyBtaW51cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodG9rZW5zW2kgKyAxXSAhPT0gJyAnICYmICFpc05hTih0b2tlbnNbaSArIDFdKSkge1xuICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgdG9rZW5zW2kgKyAxXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgJzEnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwbHVzID0gbWludXMgPSAwO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPT09IDAgfHwgaXNOYU4oYykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRva2Vuc1tpICsgMV0gPT09ICdpJyB8fCB0b2tlbnNbaSArIDFdID09PSAnSScpIHtcbiAgICAgICAgICAgICAgICB6WydpbSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIGMpO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB6WydyZSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIGMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBsdXMgPSBtaW51cyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RpbGwgc29tZXRoaW5nIG9uIHRoZSBzdGFja1xuICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPiAwKSB7XG4gICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHpbJ2ltJ10gPSAwO1xuICAgICAgICAgIHpbJ3JlJ10gPSBhO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgIH1cblxuICAgIGlmIChpc05hTih6WydyZSddKSB8fCBpc05hTih6WydpbSddKSkge1xuICAgICAgLy8gSWYgYSBjYWxjdWxhdGlvbiBpcyBOYU4sIHdlIHRyZWF0IGl0IGFzIE5hTiBhbmQgZG9uJ3QgdGhyb3dcbiAgICAgIC8vcGFyc2VyX2V4aXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gejtcbiAgfTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKi9cbiAgZnVuY3Rpb24gQ29tcGxleChhLCBiKSB7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29tcGxleCkpIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChhLCBiKTtcbiAgICB9XG5cbiAgICB2YXIgeiA9IHBhcnNlKGEsIGIpO1xuXG4gICAgdGhpc1sncmUnXSA9IHpbJ3JlJ107XG4gICAgdGhpc1snaW0nXSA9IHpbJ2ltJ107XG4gIH1cblxuICBDb21wbGV4LnByb3RvdHlwZSA9IHtcblxuICAgICdyZSc6IDAsXG4gICAgJ2ltJzogMCxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHNpZ24gb2YgYSBjb21wbGV4IG51bWJlciwgd2hpY2ggaXMgYSBub3JtYWxpemVkIGNvbXBsZXhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzaWduJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhYnMgPSB0aGlzWydhYnMnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gLyBhYnMsXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLyBhYnMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhZGQnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIEluZmluaXR5ICsgSW5maW5pdHkgPSBOYU5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5ICsgeiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSBJbmZpbml0eSB9XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdGhpc1sncmUnXSArIHpbJ3JlJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gKyB6WydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3VidHJhY3RzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzdWInOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIEluZmluaXR5IC0gSW5maW5pdHkgPSBOYU5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5IC0geiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSBJbmZpbml0eSB9XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdGhpc1sncmUnXSAtIHpbJ3JlJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLSB6WydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnbXVsJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICAvLyBJbmZpbml0eSAqIDAgPSBOYU5cbiAgICAgIGlmICgodGhpc1snaXNJbmZpbml0ZSddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNJbmZpbml0ZSddKCkpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydOQU4nXTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5maW5pdHkgKiB6ID0gSW5maW5pdHkgeyB3aGVyZSB6ICE9IDAgfVxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpIHx8IHpbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG9ydCBjaXJjdWl0IGZvciByZWFsIHZhbHVlc1xuICAgICAgaWYgKHpbJ2ltJ10gPT09IDAgJiYgdGhpc1snaW0nXSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSAqIHpbJ3JlJ10sIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKiB6WydyZSddIC0gdGhpc1snaW0nXSAqIHpbJ2ltJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKiB6WydpbSddICsgdGhpc1snaW0nXSAqIHpbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGVzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdkaXYnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIDAgLyAwID0gTmFOIGFuZCBJbmZpbml0eSAvIEluZmluaXR5ID0gTmFOXG4gICAgICBpZiAoKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzSW5maW5pdGUnXSgpICYmIHpbJ2lzSW5maW5pdGUnXSgpKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5IC8gMCA9IEluZmluaXR5XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNaZXJvJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgLy8gMCAvIEluZmluaXR5ID0gMFxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ1pFUk8nXTtcbiAgICAgIH1cblxuICAgICAgYSA9IHRoaXNbJ3JlJ107XG4gICAgICBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIGMgPSB6WydyZSddO1xuICAgICAgdmFyIGQgPSB6WydpbSddO1xuICAgICAgdmFyIHQsIHg7XG5cbiAgICAgIGlmICgwID09PSBkKSB7XG4gICAgICAgIC8vIERpdmlzb3IgaXMgcmVhbFxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGMsIGIgLyBjKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE1hdGguYWJzKGMpIDwgTWF0aC5hYnMoZCkpIHtcblxuICAgICAgICB4ID0gYyAvIGQ7XG4gICAgICAgIHQgPSBjICogeCArIGQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgIChhICogeCArIGIpIC8gdCxcbiAgICAgICAgICAgICAgICAoYiAqIHggLSBhKSAvIHQpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHggPSBkIC8gYztcbiAgICAgICAgdCA9IGQgKiB4ICsgYztcblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgKGEgKyBiICogeCkgLyB0LFxuICAgICAgICAgICAgICAgIChiIC0gYSAqIHgpIC8gdCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgdHdvIGNvbXBsZXggbnVtYmVyc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3Bvdyc6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgdmFyIHogPSBuZXcgQ29tcGxleChhLCBiKTtcblxuICAgICAgYSA9IHRoaXNbJ3JlJ107XG4gICAgICBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKHpbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ09ORSddO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZXhwb25lbnQgaXMgcmVhbFxuICAgICAgaWYgKHpbJ2ltJ10gPT09IDApIHtcblxuICAgICAgICBpZiAoYiA9PT0gMCAmJiBhID49IDApIHtcblxuICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLnBvdyhhLCB6WydyZSddKSwgMCk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChhID09PSAwKSB7IC8vIElmIGJhc2UgaXMgZnVsbHkgaW1hZ2luYXJ5XG5cbiAgICAgICAgICBzd2l0Y2ggKCh6WydyZSddICUgNCArIDQpICUgNCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5wb3coYiwgelsncmUnXSksIDApO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgTWF0aC5wb3coYiwgelsncmUnXSkpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoLU1hdGgucG93KGIsIHpbJ3JlJ10pLCAwKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC1NYXRoLnBvdyhiLCB6WydyZSddKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEkgY291bGRuJ3QgZmluZCBhIGdvb2QgZm9ybXVsYSwgc28gaGVyZSBpcyBhIGRlcml2YXRpb24gYW5kIG9wdGltaXphdGlvblxuICAgICAgICpcbiAgICAgICAqIHpfMV56XzIgPSAoYSArIGJpKV4oYyArIGRpKVxuICAgICAgICogICAgICAgICA9IGV4cCgoYyArIGRpKSAqIGxvZyhhICsgYmkpXG4gICAgICAgKiAgICAgICAgID0gcG93KGFeMiArIGJeMiwgKGMgKyBkaSkgLyAyKSAqIGV4cChpKGMgKyBkaSlhdGFuMihiLCBhKSlcbiAgICAgICAqID0+Li4uXG4gICAgICAgKiBSZSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogY29zKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKiBJbSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogc2luKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKlxuICAgICAgICogPT4uLi5cbiAgICAgICAqIFJlID0gZXhwKGMgKiBsb2coc3FydChhXjIgKyBiXjIpKSAtIGQgKiBhdGFuMihiLCBhKSkgKiBjb3MoZCAqIGxvZyhzcXJ0KGFeMiArIGJeMikpICsgYyAqIGF0YW4yKGIsIGEpKVxuICAgICAgICogSW0gPSBleHAoYyAqIGxvZyhzcXJ0KGFeMiArIGJeMikpIC0gZCAqIGF0YW4yKGIsIGEpKSAqIHNpbihkICogbG9nKHNxcnQoYV4yICsgYl4yKSkgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKlxuICAgICAgICogPT5cbiAgICAgICAqIFJlID0gZXhwKGMgKiBsb2dzcTIgLSBkICogYXJnKHpfMSkpICogY29zKGQgKiBsb2dzcTIgKyBjICogYXJnKHpfMSkpXG4gICAgICAgKiBJbSA9IGV4cChjICogbG9nc3EyIC0gZCAqIGFyZyh6XzEpKSAqIHNpbihkICogbG9nc3EyICsgYyAqIGFyZyh6XzEpKVxuICAgICAgICpcbiAgICAgICAqL1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwICYmIHpbJ3JlJ10gPiAwICYmIHpbJ2ltJ10gPj0gMCkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnWkVSTyddO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXJnID0gTWF0aC5hdGFuMihiLCBhKTtcbiAgICAgIHZhciBsb2ggPSBsb2dIeXBvdChhLCBiKTtcblxuICAgICAgYSA9IE1hdGguZXhwKHpbJ3JlJ10gKiBsb2ggLSB6WydpbSddICogYXJnKTtcbiAgICAgIGIgPSB6WydpbSddICogbG9oICsgelsncmUnXSAqIGFyZztcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgYSAqIE1hdGguY29zKGIpLFxuICAgICAgICAgICAgICBhICogTWF0aC5zaW4oYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc3F1YXJlIHJvb3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzcXJ0JzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcbiAgICAgIHZhciByID0gdGhpc1snYWJzJ10oKTtcblxuICAgICAgdmFyIHJlLCBpbTtcblxuICAgICAgaWYgKGEgPj0gMCkge1xuXG4gICAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguc3FydChhKSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZSA9IDAuNSAqIE1hdGguc3FydCgyLjAgKiAociArIGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlID0gTWF0aC5hYnMoYikgLyBNYXRoLnNxcnQoMiAqIChyIC0gYSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSA8PSAwKSB7XG4gICAgICAgIGltID0gMC41ICogTWF0aC5zcXJ0KDIuMCAqIChyIC0gYSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0gPSBNYXRoLmFicyhiKSAvIE1hdGguc3FydCgyICogKHIgKyBhKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChyZSwgYiA8IDAgPyAtaW0gOiBpbSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2V4cCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgdG1wID0gTWF0aC5leHAodGhpc1sncmUnXSk7XG5cbiAgICAgIGlmICh0aGlzWydpbSddID09PSAwKSB7XG4gICAgICAgIC8vcmV0dXJuIG5ldyBDb21wbGV4KHRtcCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRtcCAqIE1hdGguY29zKHRoaXNbJ2ltJ10pLFxuICAgICAgICAgICAgICB0bXAgKiBNYXRoLnNpbih0aGlzWydpbSddKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudCBhbmQgc3VidHJhY3RzIG9uZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG1vcmUgYWNjdXJhdGUgdGhhbiBgQ29tcGxleCh4KS5leHAoKS5zdWIoMSlgIGlmXG4gICAgICogYHhgIGlzIHNtYWxsLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2V4cG0xJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8qKlxuICAgICAgICogZXhwKGEgKyBpKmIpIC0gMVxuICAgICAgID0gZXhwKGEpICogKGNvcyhiKSArIGoqc2luKGIpKSAtIDFcbiAgICAgICA9IGV4cG0xKGEpKmNvcyhiKSArIGNvc20xKGIpICsgaipleHAoYSkqc2luKGIpXG4gICAgICAgKi9cblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguZXhwbTEoYSkgKiBNYXRoLmNvcyhiKSArIGNvc20xKGIpLFxuICAgICAgICAgICAgICBNYXRoLmV4cChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2xvZyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwICYmIGEgPiAwKSB7XG4gICAgICAgIC8vcmV0dXJuIG5ldyBDb21wbGV4KE1hdGgubG9nKGEpLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBsb2dIeXBvdChhLCBiKSxcbiAgICAgICAgICAgICAgTWF0aC5hdGFuMihiLCBhKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICAnYWJzJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBoeXBvdCh0aGlzWydyZSddLCB0aGlzWydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhbmdsZSBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgJ2FyZyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gTWF0aC5hdGFuMih0aGlzWydpbSddLCB0aGlzWydyZSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBzaW5lIG9mIHRoZSBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3Npbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzaW4oYykgPSAoZV5iIC0gZV4oLWIpKSAvICgyaSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSxcbiAgICAgICAgICAgICAgTWF0aC5jb3MoYSkgKiBzaW5oKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb3NpbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3MnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY29zKHopID0gKGVeYiArIGVeKC1iKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIGNvc2goYiksXG4gICAgICAgICAgICAgIC1NYXRoLnNpbihhKSAqIHNpbmgoYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHRhbmdlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICd0YW4nOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gdGFuKGMpID0gKGVeKGNpKSAtIGVeKC1jaSkpIC8gKGkoZV4oY2kpICsgZV4oLWNpKSkpXG5cbiAgICAgIHZhciBhID0gMiAqIHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IDIgKiB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcyhhKSArIGNvc2goYik7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYSkgLyBkLFxuICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY290YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY290JzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvdChjKSA9IGkoZV4oY2kpICsgZV4oLWNpKSkgLyAoZV4oY2kpIC0gZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IE1hdGguY29zKGEpIC0gY29zaChiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAtTWF0aC5zaW4oYSkgLyBkLFxuICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgc2VjYW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2VjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHNlYyhjKSA9IDIgLyAoZV4oY2kpICsgZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSAwLjUgKiBjb3NoKDIgKiBiKSArIDAuNSAqIE1hdGguY29zKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIGNvc2goYikgLyBkLFxuICAgICAgICAgICAgICBNYXRoLnNpbihhKSAqIHNpbmgoYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb3NlY2Fuc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2NzYyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjc2MoYykgPSAyaSAvIChlXihjaSkgLSBlXigtY2kpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IDAuNSAqIGNvc2goMiAqIGIpIC0gMC41ICogTWF0aC5jb3MoMiAqIGEpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSAvIGQsXG4gICAgICAgICAgICAgIC1NYXRoLmNvcyhhKSAqIHNpbmgoYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNpbnVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNpbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhc2luKGMpID0gLWkgKiBsb2coY2kgKyBzcXJ0KDEgLSBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHZhciB0MSA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBiICogYiAtIGEgKiBhICsgMSxcbiAgICAgICAgICAgICAgLTIgKiBhICogYilbJ3NxcnQnXSgpO1xuXG4gICAgICB2YXIgdDIgPSBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdDFbJ3JlJ10gLSBiLFxuICAgICAgICAgICAgICB0MVsnaW0nXSArIGEpWydsb2cnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodDJbJ2ltJ10sIC10MlsncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyBjb3NpbnVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvcyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY29zKGMpID0gaSAqIGxvZyhjIC0gaSAqIHNxcnQoMSAtIGNeMikpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIHQxID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGIgKiBiIC0gYSAqIGEgKyAxLFxuICAgICAgICAgICAgICAtMiAqIGEgKiBiKVsnc3FydCddKCk7XG5cbiAgICAgIHZhciB0MiA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICB0MVsncmUnXSAtIGIsXG4gICAgICAgICAgICAgIHQxWydpbSddICsgYSlbJ2xvZyddKCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLlBJIC8gMiAtIHQyWydpbSddLCB0MlsncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyB0YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXRhbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhdGFuKGMpID0gaSAvIDIgbG9nKChpICsgeCkgLyAoaSAtIHgpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwKSB7XG5cbiAgICAgICAgaWYgKGIgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGIgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC1JbmZpbml0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArICgxLjAgLSBiKSAqICgxLjAgLSBiKTtcblxuICAgICAgdmFyIHQxID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICgxIC0gYiAqIGIgLSBhICogYSkgLyBkLFxuICAgICAgICAgICAgICAtMiAqIGEgLyBkKS5sb2coKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC0wLjUgKiB0MVsnaW0nXSwgMC41ICogdDFbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY290YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvdCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY290KGMpID0gaSAvIDIgbG9nKChjIC0gaSkgLyAoYyArIGkpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmF0YW4yKDEsIGEpLCAwKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuICAgICAgcmV0dXJuIChkICE9PSAwKVxuICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIGEgLyBkLFxuICAgICAgICAgICAgICAgICAgICAgIC1iIC8gZCkuYXRhbigpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IDApID8gYSAvIDAgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IC1iIC8gMCA6IDApLmF0YW4oKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNlY2FudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2FzZWMnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNlYyhjKSA9IC1pICogbG9nKDEgLyBjICsgc3FydCgxIC0gaSAvIGNeMikpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7XG4gICAgICByZXR1cm4gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgYSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgLWIgLyBkKS5hY29zKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvcygpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY29zZWNhbnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY3NjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjc2MoYykgPSAtaSAqIGxvZyhpIC8gYyArIHNxcnQoMSAtIDEgLyBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguUEkgLyAyLCBJbmZpbml0eSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW4oKVxuICAgICAgICAgICAgICA6IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChhICE9PSAwKSA/IGEgLyAwIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hc2luKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBzaW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2luaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzaW5oKGMpID0gKGVeYyAtIGVeLWMpIC8gMlxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgc2luaChhKSAqIE1hdGguY29zKGIpLFxuICAgICAgICAgICAgICBjb3NoKGEpICogTWF0aC5zaW4oYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggY29zaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Nvc2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY29zaChjKSA9IChlXmMgKyBlXi1jKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGNvc2goYSkgKiBNYXRoLmNvcyhiKSxcbiAgICAgICAgICAgICAgc2luaChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IHRhbmhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICd0YW5oJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHRhbmgoYykgPSAoZV5jIC0gZV4tYykgLyAoZV5jICsgZV4tYylcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IGNvc2goYSkgKyBNYXRoLmNvcyhiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBzaW5oKGEpIC8gZCxcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGNvdGhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3RoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvdGgoYykgPSAoZV5jICsgZV4tYykgLyAoZV5jIC0gZV4tYylcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IGNvc2goYSkgLSBNYXRoLmNvcyhiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBzaW5oKGEpIC8gZCxcbiAgICAgICAgICAgICAgLU1hdGguc2luKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBjb3RoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY3NjaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjc2NoKGMpID0gMiAvIChlXmMgLSBlXi1jKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IE1hdGguY29zKDIgKiBiKSAtIGNvc2goMiAqIGEpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIC0yICogc2luaChhKSAqIE1hdGguY29zKGIpIC8gZCxcbiAgICAgICAgICAgICAgMiAqIGNvc2goYSkgKiBNYXRoLnNpbihiKSAvIGQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc2VjaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3NlY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gc2VjaChjKSA9IDIgLyAoZV5jICsgZV4tYylcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcygyICogYikgKyBjb3NoKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAyICogY29zaChhKSAqIE1hdGguY29zKGIpIC8gZCxcbiAgICAgICAgICAgICAgLTIgKiBzaW5oKGEpICogTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzaW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNpbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNpbmgoYykgPSBsb2coYyArIHNxcnQoY14yICsgMSkpXG5cbiAgICAgIHZhciB0bXAgPSB0aGlzWydpbSddO1xuICAgICAgdGhpc1snaW0nXSA9IC10aGlzWydyZSddO1xuICAgICAgdGhpc1sncmUnXSA9IHRtcDtcbiAgICAgIHZhciByZXMgPSB0aGlzWydhc2luJ10oKTtcblxuICAgICAgdGhpc1sncmUnXSA9IC10aGlzWydpbSddO1xuICAgICAgdGhpc1snaW0nXSA9IHRtcDtcbiAgICAgIHRtcCA9IHJlc1sncmUnXTtcblxuICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTtcbiAgICAgIHJlc1snaW0nXSA9IHRtcDtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhc2luaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Fjb3NoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjb3NoKGMpID0gbG9nKGMgKyBzcXJ0KGNeMiAtIDEpKVxuXG4gICAgICB2YXIgcmVzID0gdGhpc1snYWNvcyddKCk7XG4gICAgICBpZiAocmVzWydpbSddIDw9IDApIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlc1sncmUnXTtcbiAgICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTtcbiAgICAgICAgcmVzWydpbSddID0gdG1wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlc1snaW0nXTtcbiAgICAgICAgcmVzWydpbSddID0gLXJlc1sncmUnXTtcbiAgICAgICAgcmVzWydyZSddID0gdG1wO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGF0YW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXRhbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXRhbmgoYykgPSBsb2coKDErYykgLyAoMS1jKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIG5vSU0gPSBhID4gMSAmJiBiID09PSAwO1xuICAgICAgdmFyIG9uZU1pbnVzID0gMSAtIGE7XG4gICAgICB2YXIgb25lUGx1cyA9IDEgKyBhO1xuICAgICAgdmFyIGQgPSBvbmVNaW51cyAqIG9uZU1pbnVzICsgYiAqIGI7XG5cbiAgICAgIHZhciB4ID0gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKG9uZVBsdXMgKiBvbmVNaW51cyAtIGIgKiBiKSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgKiBvbmVNaW51cyArIG9uZVBsdXMgKiBiKSAvIGQpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IC0xKSA/IChhIC8gMCkgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IChiIC8gMCkgOiAwKTtcblxuICAgICAgdmFyIHRlbXAgPSB4WydyZSddO1xuICAgICAgeFsncmUnXSA9IGxvZ0h5cG90KHhbJ3JlJ10sIHhbJ2ltJ10pIC8gMjtcbiAgICAgIHhbJ2ltJ10gPSBNYXRoLmF0YW4yKHhbJ2ltJ10sIHRlbXApIC8gMjtcbiAgICAgIGlmIChub0lNKSB7XG4gICAgICAgIHhbJ2ltJ10gPSAteFsnaW0nXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYWNvdGhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY290aCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY290aChjKSA9IGxvZygoYysxKSAvIChjLTEpKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCBNYXRoLlBJIC8gMik7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmF0YW5oKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXRhbmgoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFjc2NoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNzY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYWNzY2goYykgPSBsb2coKDErc3FydCgxK2NeMikpL2MpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGIgPT09IDApIHtcblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgKGEgIT09IDApXG4gICAgICAgICAgICAgICAgPyBNYXRoLmxvZyhhICsgTWF0aC5zcXJ0KGEgKiBhICsgMSkpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSwgMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW5oKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXNpbmgoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzZWNoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNlY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNlY2goYykgPSBsb2coKDErc3FydCgxLWNeMikpL2MpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFjb3NoKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvc2goKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGludmVyc2UgMS96XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnaW52ZXJzZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyAxIC8gMCA9IEluZmluaXR5IGFuZCAxIC8gSW5maW5pdHkgPSAwXG4gICAgICBpZiAodGhpc1snaXNaZXJvJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydaRVJPJ107XG4gICAgICB9XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGQsIC1iIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbXBsZXggY29uanVnYXRlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY29uanVnYXRlJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh0aGlzWydyZSddLCAtdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5lZ2F0ZWQgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICduZWcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC10aGlzWydyZSddLCAtdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjZWlsJzogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5jZWlsKHRoaXNbJ3JlJ10gKiBwbGFjZXMpIC8gcGxhY2VzLFxuICAgICAgICAgICAgICBNYXRoLmNlaWwodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGbG9vcnMgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Zsb29yJzogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydyZSddICogcGxhY2VzKSAvIHBsYWNlcyxcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydpbSddICogcGxhY2VzKSAvIHBsYWNlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdyb3VuZCc6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGgucm91bmQodGhpc1sncmUnXSAqIHBsYWNlcykgLyBwbGFjZXMsXG4gICAgICAgICAgICAgIE1hdGgucm91bmQodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogbmV3IENvbXBsZXgoSW5maW5pdHkpLmVxdWFscyhJbmZpbml0eSkgPT09IGZhbHNlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICAnZXF1YWxzJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICByZXR1cm4gTWF0aC5hYnMoelsncmUnXSAtIHRoaXNbJ3JlJ10pIDw9IENvbXBsZXhbJ0VQU0lMT04nXSAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyh6WydpbSddIC0gdGhpc1snaW0nXSkgPD0gQ29tcGxleFsnRVBTSUxPTiddO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjbG9uZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSwgdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBzdHJpbmcgb2YgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICAndG9TdHJpbmcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIHJldCA9ICcnO1xuXG4gICAgICBpZiAodGhpc1snaXNOYU4nXSgpKSB7XG4gICAgICAgIHJldHVybiAnTmFOJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuICcwJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiAnSW5maW5pdHknO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSAhPT0gMCkge1xuICAgICAgICByZXQgKz0gYTtcbiAgICAgIH1cblxuICAgICAgaWYgKGIgIT09IDApIHtcblxuICAgICAgICBpZiAoYSAhPT0gMCkge1xuICAgICAgICAgIHJldCArPSBiIDwgMCA/ICcgLSAnIDogJyArICc7XG4gICAgICAgIH0gZWxzZSBpZiAoYiA8IDApIHtcbiAgICAgICAgICByZXQgKz0gJy0nO1xuICAgICAgICB9XG5cbiAgICAgICAgYiA9IE1hdGguYWJzKGIpO1xuXG4gICAgICAgIGlmICgxICE9PSBiKSB7XG4gICAgICAgICAgcmV0ICs9IGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0ICs9ICdpJztcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXQpXG4gICAgICAgIHJldHVybiAnMCc7XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgYXMgYSB2ZWN0b3JcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICAgKi9cbiAgICAndG9WZWN0b3InOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIFt0aGlzWydyZSddLCB0aGlzWydpbSddXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHJlYWwgdmFsdWUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9XG4gICAgICovXG4gICAgJ3ZhbHVlT2YnOiBmdW5jdGlvbigpIHtcblxuICAgICAgaWYgKHRoaXNbJ2ltJ10gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbJ3JlJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxleCBudW1iZXIgaXMgbm90IG9uIHRoZSBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc05hTic6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGlzTmFOKHRoaXNbJ3JlJ10pIHx8IGlzTmFOKHRoaXNbJ2ltJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgY29tcGxleCBudW1iZXIgaXMgYXQgdGhlIHplcm8gcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc1plcm8nOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh0aGlzWydyZSddID09PSAwIHx8IHRoaXNbJ3JlJ10gPT09IC0wKSAmJlxuICAgICAgICAgICAgICAodGhpc1snaW0nXSA9PT0gMCB8fCB0aGlzWydpbSddID09PSAtMClcbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxleCBudW1iZXIgaXMgbm90IGF0IHRoZSBpbmZpbml0eSBwb2xlIG9mIHRoZVxuICAgICAqIFJpZW1hbm4gc3BoZXJlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgJ2lzRmluaXRlJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXNGaW5pdGUodGhpc1sncmUnXSkgJiYgaXNGaW5pdGUodGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBjb21wbGV4IG51bWJlciBpcyBhdCB0aGUgaW5maW5pdHkgcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc0luZmluaXRlJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gISh0aGlzWydpc05hTiddKCkgfHwgdGhpc1snaXNGaW5pdGUnXSgpKTtcbiAgICB9XG4gIH07XG5cbiAgQ29tcGxleFsnWkVSTyddID0gbmV3IENvbXBsZXgoMCwgMCk7XG4gIENvbXBsZXhbJ09ORSddID0gbmV3IENvbXBsZXgoMSwgMCk7XG4gIENvbXBsZXhbJ0knXSA9IG5ldyBDb21wbGV4KDAsIDEpO1xuICBDb21wbGV4WydQSSddID0gbmV3IENvbXBsZXgoTWF0aC5QSSwgMCk7XG4gIENvbXBsZXhbJ0UnXSA9IG5ldyBDb21wbGV4KE1hdGguRSwgMCk7XG4gIENvbXBsZXhbJ0lORklOSVRZJ10gPSBuZXcgQ29tcGxleChJbmZpbml0eSwgSW5maW5pdHkpO1xuICBDb21wbGV4WydOQU4nXSA9IG5ldyBDb21wbGV4KE5hTiwgTmFOKTtcbiAgQ29tcGxleFsnRVBTSUxPTiddID0gMWUtMTY7XG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gQ29tcGxleDtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsndmFsdWUnOiB0cnVlfSk7XG4gICAgQ29tcGxleFsnZGVmYXVsdCddID0gQ29tcGxleDtcbiAgICBDb21wbGV4WydDb21wbGV4J10gPSBDb21wbGV4O1xuICAgIG1vZHVsZVsnZXhwb3J0cyddID0gQ29tcGxleDtcbiAgfSBlbHNlIHtcbiAgICByb290WydDb21wbGV4J10gPSBDb21wbGV4O1xuICB9XG5cbn0pKHRoaXMpO1xuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsU2NvcGUpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBkZWNpbWFsLmpzIHYxMC4yLjBcclxuICAgKiAgQW4gYXJiaXRyYXJ5LXByZWNpc2lvbiBEZWNpbWFsIHR5cGUgZm9yIEphdmFTY3JpcHQuXHJcbiAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWtlTWNsL2RlY2ltYWwuanNcclxuICAgKiAgQ29weXJpZ2h0IChjKSAyMDE5IE1pY2hhZWwgTWNsYXVnaGxpbiA8TThjaDg4bEBnbWFpbC5jb20+XHJcbiAgICogIE1JVCBMaWNlbmNlXHJcbiAgICovXHJcblxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRURJVEFCTEUgREVGQVVMVFMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG5cclxuXHJcbiAgICAvLyBUaGUgbWF4aW11bSBleHBvbmVudCBtYWduaXR1ZGUuXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIGB0b0V4cE5lZ2AsIGB0b0V4cFBvc2AsIGBtaW5FYCBhbmQgYG1heEVgLlxyXG4gIHZhciBFWFBfTElNSVQgPSA5ZTE1LCAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDllMTVcclxuXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIGBwcmVjaXNpb25gLCBhbmQgb24gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0b1xyXG4gICAgLy8gYHRvRGVjaW1hbFBsYWNlc2AsIGB0b0V4cG9uZW50aWFsYCwgYHRvRml4ZWRgLCBgdG9QcmVjaXNpb25gIGFuZCBgdG9TaWduaWZpY2FudERpZ2l0c2AuXHJcbiAgICBNQVhfRElHSVRTID0gMWU5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gMWU5XHJcblxyXG4gICAgLy8gQmFzZSBjb252ZXJzaW9uIGFscGhhYmV0LlxyXG4gICAgTlVNRVJBTFMgPSAnMDEyMzQ1Njc4OWFiY2RlZicsXHJcblxyXG4gICAgLy8gVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDEwICgxMDI1IGRpZ2l0cykuXHJcbiAgICBMTjEwID0gJzIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNDg4NjI4NzcyOTc2MDMzMzI3OTAwOTY3NTcyNjA5Njc3MzUyNDgwMjM1OTk3MjA1MDg5NTk4Mjk4MzQxOTY3Nzg0MDQyMjg2MjQ4NjMzNDA5NTI1NDY1MDgyODA2NzU2NjY2Mjg3MzY5MDk4NzgxNjg5NDgyOTA3MjA4MzI1NTU0NjgwODQzNzk5ODk0ODI2MjMzMTk4NTI4MzkzNTA1MzA4OTY1Mzc3NzMyNjI4ODQ2MTYzMzY2MjIyMjg3Njk4MjE5ODg2NzQ2NTQzNjY3NDc0NDA0MjQzMjc0MzY1MTU1MDQ4OTM0MzE0OTM5MzkxNDc5NjE5NDA0NDAwMjIyMTA1MTAxNzE0MTc0ODAwMzY4ODA4NDAxMjY0NzA4MDY4NTU2Nzc0MzIxNjIyODM1NTIyMDExNDgwNDY2MzcxNTY1OTEyMTM3MzQ1MDc0Nzg1Njk0NzY4MzQ2MzYxNjc5MjEwMTgwNjQ0NTA3MDY0ODAwMDI3NzUwMjY4NDkxNjc0NjU1MDU4Njg1NjkzNTY3MzQyMDY3MDU4MTEzNjQyOTIyNDU1NDQwNTc1ODkyNTcyNDIwODI0MTMxNDY5NTY4OTAxNjc1ODk0MDI1Njc3NjMxMTM1NjkxOTI5MjAzMzM3NjU4NzE0MTY2MDIzMDEwNTcwMzA4OTYzNDU3MjA3NTQ0MDM3MDg0NzQ2OTk0MDE2ODI2OTI4MjgwODQ4MTE4NDI4OTMxNDg0ODUyNDk0ODY0NDg3MTkyNzgwOTY3NjI3MTI3NTc3NTM5NzAyNzY2ODYwNTk1MjQ5NjcxNjY3NDE4MzQ4NTcwNDQyMjUwNzE5Nzk2NTAwNDcxNDk1MTA1MDQ5MjIxNDc3NjU2NzYzNjkzODY2Mjk3Njk3OTUyMjExMDcxODI2NDU0OTczNDc3MjY2MjQyNTcwOTQyOTMyMjU4Mjc5ODUwMjU4NTUwOTc4NTI2NTM4MzIwNzYwNjcyNjMxNzE2NDMwOTUwNTk5NTA4NzgwNzUyMzcxMDMzMzEwMTE5Nzg1NzU0NzMzMTU0MTQyMTgwODQyNzU0Mzg2MzU5MTc3ODExNzA1NDMwOTgyNzQ4MjM4NTA0NTY0ODAxOTA5NTYxMDI5OTI5MTgyNDMxODIzNzUyNTM1NzcwOTc1MDUzOTU2NTE4NzY5NzUxMDM3NDk3MDg4ODY5MjE4MDIwNTE4OTMzOTUwNzIzODUzOTIwNTE0NDYzNDE5NzI2NTI4NzI4Njk2NTExMDg2MjU3MTQ5MjE5ODg0OTk3ODc0ODg3Mzc3MTM0NTY4NjIwOTE2NzA1OCcsXHJcblxyXG4gICAgLy8gUGkgKDEwMjUgZGlnaXRzKS5cclxuICAgIFBJID0gJzMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTA1ODIwOTc0OTQ0NTkyMzA3ODE2NDA2Mjg2MjA4OTk4NjI4MDM0ODI1MzQyMTE3MDY3OTgyMTQ4MDg2NTEzMjgyMzA2NjQ3MDkzODQ0NjA5NTUwNTgyMjMxNzI1MzU5NDA4MTI4NDgxMTE3NDUwMjg0MTAyNzAxOTM4NTIxMTA1NTU5NjQ0NjIyOTQ4OTU0OTMwMzgxOTY0NDI4ODEwOTc1NjY1OTMzNDQ2MTI4NDc1NjQ4MjMzNzg2NzgzMTY1MjcxMjAxOTA5MTQ1NjQ4NTY2OTIzNDYwMzQ4NjEwNDU0MzI2NjQ4MjEzMzkzNjA3MjYwMjQ5MTQxMjczNzI0NTg3MDA2NjA2MzE1NTg4MTc0ODgxNTIwOTIwOTYyODI5MjU0MDkxNzE1MzY0MzY3ODkyNTkwMzYwMDExMzMwNTMwNTQ4ODIwNDY2NTIxMzg0MTQ2OTUxOTQxNTExNjA5NDMzMDU3MjcwMzY1NzU5NTkxOTUzMDkyMTg2MTE3MzgxOTMyNjExNzkzMTA1MTE4NTQ4MDc0NDYyMzc5OTYyNzQ5NTY3MzUxODg1NzUyNzI0ODkxMjI3OTM4MTgzMDExOTQ5MTI5ODMzNjczMzYyNDQwNjU2NjQzMDg2MDIxMzk0OTQ2Mzk1MjI0NzM3MTkwNzAyMTc5ODYwOTQzNzAyNzcwNTM5MjE3MTc2MjkzMTc2NzUyMzg0Njc0ODE4NDY3NjY5NDA1MTMyMDAwNTY4MTI3MTQ1MjYzNTYwODI3Nzg1NzcxMzQyNzU3Nzg5NjA5MTczNjM3MTc4NzIxNDY4NDQwOTAxMjI0OTUzNDMwMTQ2NTQ5NTg1MzcxMDUwNzkyMjc5Njg5MjU4OTIzNTQyMDE5OTU2MTEyMTI5MDIxOTYwODY0MDM0NDE4MTU5ODEzNjI5Nzc0NzcxMzA5OTYwNTE4NzA3MjExMzQ5OTk5OTk4MzcyOTc4MDQ5OTUxMDU5NzMxNzMyODE2MDk2MzE4NTk1MDI0NDU5NDU1MzQ2OTA4MzAyNjQyNTIyMzA4MjUzMzQ0Njg1MDM1MjYxOTMxMTg4MTcxMDEwMDAzMTM3ODM4NzUyODg2NTg3NTMzMjA4MzgxNDIwNjE3MTc3NjY5MTQ3MzAzNTk4MjUzNDkwNDI4NzU1NDY4NzMxMTU5NTYyODYzODgyMzUzNzg3NTkzNzUxOTU3NzgxODU3NzgwNTMyMTcxMjI2ODA2NjEzMDAxOTI3ODc2NjExMTk1OTA5MjE2NDIwMTk4OTM4MDk1MjU3MjAxMDY1NDg1ODYzMjc4OScsXHJcblxyXG5cclxuICAgIC8vIFRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBvZiB0aGUgRGVjaW1hbCBjb25zdHJ1Y3Rvci5cclxuICAgIERFRkFVTFRTID0ge1xyXG5cclxuICAgICAgLy8gVGhlc2UgdmFsdWVzIG11c3QgYmUgaW50ZWdlcnMgd2l0aGluIHRoZSBzdGF0ZWQgcmFuZ2VzIChpbmNsdXNpdmUpLlxyXG4gICAgICAvLyBNb3N0IG9mIHRoZXNlIHZhbHVlcyBjYW4gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyB0aGUgYERlY2ltYWwuY29uZmlnYCBtZXRob2QuXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSByZXN1bHQgb2YgYSBjYWxjdWxhdGlvbiBvciBiYXNlIGNvbnZlcnNpb24uXHJcbiAgICAgIC8vIEUuZy4gYERlY2ltYWwuY29uZmlnKHsgcHJlY2lzaW9uOiAyMCB9KTtgXHJcbiAgICAgIHByZWNpc2lvbjogMjAsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYX0RJR0lUU1xyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIGBwcmVjaXNpb25gLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBST1VORF9VUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIFJPVU5EX0RPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIFJPVU5EX0NFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBST1VORF9IQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBST1VORF9IQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIFJPVU5EX0hBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgLy9cclxuICAgICAgLy8gRS5nLlxyXG4gICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IDQ7YFxyXG4gICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IERlY2ltYWwuUk9VTkRfSEFMRl9VUDtgXHJcbiAgICAgIHJvdW5kaW5nOiA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOFxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAgMCBUaGUgcmVtYWluZGVyIGlzIHBvc2l0aXZlIGlmIHRoZSBkaXZpZGVuZCBpcyBuZWdhdGl2ZSwgZWxzZSBpcyBuZWdhdGl2ZS5cclxuICAgICAgLy8gRE9XTiAgICAgICAxIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZW5kIChKYXZhU2NyaXB0ICUpLlxyXG4gICAgICAvLyBGTE9PUiAgICAgIDMgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aXNvciAoUHl0aG9uICUpLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gIDYgVGhlIElFRUUgNzU0IHJlbWFpbmRlciBmdW5jdGlvbi5cclxuICAgICAgLy8gRVVDTElEICAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS4gQWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBUcnVuY2F0ZWQgZGl2aXNpb24gKDEpLCBmbG9vcmVkIGRpdmlzaW9uICgzKSwgdGhlIElFRUUgNzU0IHJlbWFpbmRlciAoNiksIGFuZCBFdWNsaWRpYW5cclxuICAgICAgLy8gZGl2aXNpb24gKDkpIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uIFRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzb1xyXG4gICAgICAvLyBiZSB1c2VkLCBidXQgdGhleSBtYXkgbm90IGdpdmUgdXNlZnVsIHJlc3VsdHMuXHJcbiAgICAgIG1vZHVsbzogMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIGB0b1N0cmluZ2AgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAtN1xyXG4gICAgICB0b0V4cE5lZzogLTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIC1FWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYWJvdmUgd2hpY2ggYHRvU3RyaW5nYCByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBKYXZhU2NyaXB0IG51bWJlcnM6IDIxXHJcbiAgICAgIHRvRXhwUG9zOiAgMjEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gRVhQX0xJTUlUXHJcblxyXG4gICAgICAvLyBUaGUgbWluaW11bSBleHBvbmVudCB2YWx1ZSwgYmVuZWF0aCB3aGljaCB1bmRlcmZsb3cgdG8gemVybyBvY2N1cnMuXHJcbiAgICAgIC8vIEphdmFTY3JpcHQgbnVtYmVyczogLTMyNCAgKDVlLTMyNClcclxuICAgICAgbWluRTogLUVYUF9MSU1JVCwgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLUVYUF9MSU1JVFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgbWF4RTogRVhQX0xJTUlULCAgICAgICAgICAgICAgICAgICAgICAgLy8gMSB0byBFWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIGlmIGF2YWlsYWJsZS5cclxuICAgICAgY3J5cHRvOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZS9mYWxzZVxyXG4gICAgfSxcclxuXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBPRiBFRElUQUJMRSBERUZBVUxUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXHJcblxyXG5cclxuICAgIERlY2ltYWwsIGluZXhhY3QsIG5vQ29uZmxpY3QsIHF1YWRyYW50LFxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlLFxyXG5cclxuICAgIGRlY2ltYWxFcnJvciA9ICdbRGVjaW1hbEVycm9yXSAnLFxyXG4gICAgaW52YWxpZEFyZ3VtZW50ID0gZGVjaW1hbEVycm9yICsgJ0ludmFsaWQgYXJndW1lbnQ6ICcsXHJcbiAgICBwcmVjaXNpb25MaW1pdEV4Y2VlZGVkID0gZGVjaW1hbEVycm9yICsgJ1ByZWNpc2lvbiBsaW1pdCBleGNlZWRlZCcsXHJcbiAgICBjcnlwdG9VbmF2YWlsYWJsZSA9IGRlY2ltYWxFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnLFxyXG5cclxuICAgIG1hdGhmbG9vciA9IE1hdGguZmxvb3IsXHJcbiAgICBtYXRocG93ID0gTWF0aC5wb3csXHJcblxyXG4gICAgaXNCaW5hcnkgPSAvXjBiKFswMV0rKFxcLlswMV0qKT98XFwuWzAxXSspKHBbKy1dP1xcZCspPyQvaSxcclxuICAgIGlzSGV4ID0gL14weChbMC05YS1mXSsoXFwuWzAtOWEtZl0qKT98XFwuWzAtOWEtZl0rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc09jdGFsID0gL14wbyhbMC03XSsoXFwuWzAtN10qKT98XFwuWzAtN10rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc0RlY2ltYWwgPSAvXihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShlWystXT9cXGQrKT8kL2ksXHJcblxyXG4gICAgQkFTRSA9IDFlNyxcclxuICAgIExPR19CQVNFID0gNyxcclxuICAgIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxLFxyXG5cclxuICAgIExOMTBfUFJFQ0lTSU9OID0gTE4xMC5sZW5ndGggLSAxLFxyXG4gICAgUElfUFJFQ0lTSU9OID0gUEkubGVuZ3RoIC0gMSxcclxuXHJcbiAgICAvLyBEZWNpbWFsLnByb3RvdHlwZSBvYmplY3RcclxuICAgIFAgPSB7IG5hbWU6ICdbb2JqZWN0IERlY2ltYWxdJyB9O1xyXG5cclxuXHJcbiAgLy8gRGVjaW1hbCBwcm90b3R5cGUgbWV0aG9kc1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgYWJzb2x1dGVWYWx1ZSAgICAgICAgICAgICBhYnNcclxuICAgKiAgY2VpbFxyXG4gICAqICBjb21wYXJlZFRvICAgICAgICAgICAgICAgIGNtcFxyXG4gICAqICBjb3NpbmUgICAgICAgICAgICAgICAgICAgIGNvc1xyXG4gICAqICBjdWJlUm9vdCAgICAgICAgICAgICAgICAgIGNicnRcclxuICAgKiAgZGVjaW1hbFBsYWNlcyAgICAgICAgICAgICBkcFxyXG4gICAqICBkaXZpZGVkQnkgICAgICAgICAgICAgICAgIGRpdlxyXG4gICAqICBkaXZpZGVkVG9JbnRlZ2VyQnkgICAgICAgIGRpdlRvSW50XHJcbiAgICogIGVxdWFscyAgICAgICAgICAgICAgICAgICAgZXFcclxuICAgKiAgZmxvb3JcclxuICAgKiAgZ3JlYXRlclRoYW4gICAgICAgICAgICAgICBndFxyXG4gICAqICBncmVhdGVyVGhhbk9yRXF1YWxUbyAgICAgIGd0ZVxyXG4gICAqICBoeXBlcmJvbGljQ29zaW5lICAgICAgICAgIGNvc2hcclxuICAgKiAgaHlwZXJib2xpY1NpbmUgICAgICAgICAgICBzaW5oXHJcbiAgICogIGh5cGVyYm9saWNUYW5nZW50ICAgICAgICAgdGFuaFxyXG4gICAqICBpbnZlcnNlQ29zaW5lICAgICAgICAgICAgIGFjb3NcclxuICAgKiAgaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgICBhY29zaFxyXG4gICAqICBpbnZlcnNlSHlwZXJib2xpY1NpbmUgICAgIGFzaW5oXHJcbiAgICogIGludmVyc2VIeXBlcmJvbGljVGFuZ2VudCAgYXRhbmhcclxuICAgKiAgaW52ZXJzZVNpbmUgICAgICAgICAgICAgICBhc2luXHJcbiAgICogIGludmVyc2VUYW5nZW50ICAgICAgICAgICAgYXRhblxyXG4gICAqICBpc0Zpbml0ZVxyXG4gICAqICBpc0ludGVnZXIgICAgICAgICAgICAgICAgIGlzSW50XHJcbiAgICogIGlzTmFOXHJcbiAgICogIGlzTmVnYXRpdmUgICAgICAgICAgICAgICAgaXNOZWdcclxuICAgKiAgaXNQb3NpdGl2ZSAgICAgICAgICAgICAgICBpc1Bvc1xyXG4gICAqICBpc1plcm9cclxuICAgKiAgbGVzc1RoYW4gICAgICAgICAgICAgICAgICBsdFxyXG4gICAqICBsZXNzVGhhbk9yRXF1YWxUbyAgICAgICAgIGx0ZVxyXG4gICAqICBsb2dhcml0aG0gICAgICAgICAgICAgICAgIGxvZ1xyXG4gICAqICBbbWF4aW11bV0gICAgICAgICAgICAgICAgIFttYXhdXHJcbiAgICogIFttaW5pbXVtXSAgICAgICAgICAgICAgICAgW21pbl1cclxuICAgKiAgbWludXMgICAgICAgICAgICAgICAgICAgICBzdWJcclxuICAgKiAgbW9kdWxvICAgICAgICAgICAgICAgICAgICBtb2RcclxuICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgICBleHBcclxuICAgKiAgbmF0dXJhbExvZ2FyaXRobSAgICAgICAgICBsblxyXG4gICAqICBuZWdhdGVkICAgICAgICAgICAgICAgICAgIG5lZ1xyXG4gICAqICBwbHVzICAgICAgICAgICAgICAgICAgICAgIGFkZFxyXG4gICAqICBwcmVjaXNpb24gICAgICAgICAgICAgICAgIHNkXHJcbiAgICogIHJvdW5kXHJcbiAgICogIHNpbmUgICAgICAgICAgICAgICAgICAgICAgc2luXHJcbiAgICogIHNxdWFyZVJvb3QgICAgICAgICAgICAgICAgc3FydFxyXG4gICAqICB0YW5nZW50ICAgICAgICAgICAgICAgICAgIHRhblxyXG4gICAqICB0aW1lcyAgICAgICAgICAgICAgICAgICAgIG11bFxyXG4gICAqICB0b0JpbmFyeVxyXG4gICAqICB0b0RlY2ltYWxQbGFjZXMgICAgICAgICAgIHRvRFBcclxuICAgKiAgdG9FeHBvbmVudGlhbFxyXG4gICAqICB0b0ZpeGVkXHJcbiAgICogIHRvRnJhY3Rpb25cclxuICAgKiAgdG9IZXhhZGVjaW1hbCAgICAgICAgICAgICB0b0hleFxyXG4gICAqICB0b05lYXJlc3RcclxuICAgKiAgdG9OdW1iZXJcclxuICAgKiAgdG9PY3RhbFxyXG4gICAqICB0b1Bvd2VyICAgICAgICAgICAgICAgICAgIHBvd1xyXG4gICAqICB0b1ByZWNpc2lvblxyXG4gICAqICB0b1NpZ25pZmljYW50RGlnaXRzICAgICAgIHRvU0RcclxuICAgKiAgdG9TdHJpbmdcclxuICAgKiAgdHJ1bmNhdGVkICAgICAgICAgICAgICAgICB0cnVuY1xyXG4gICAqICB2YWx1ZU9mICAgICAgICAgICAgICAgICAgIHRvSlNPTlxyXG4gICAqL1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5hYnNvbHV0ZVZhbHVlID0gUC5hYnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xyXG4gICAgaWYgKHgucyA8IDApIHgucyA9IDE7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgd2hvbGUgbnVtYmVyIGluIHRoZVxyXG4gICAqIGRpcmVjdGlvbiBvZiBwb3NpdGl2ZSBJbmZpbml0eS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY2VpbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKSwgdGhpcy5lICsgMSwgMik7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuXHJcbiAgICogICAxICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogIC0xICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogICAwICAgIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSxcclxuICAgKiAgIE5hTiAgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBEZWNpbWFsIGlzIE5hTi5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY29tcGFyZWRUbyA9IFAuY21wID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHZhciBpLCBqLCB4ZEwsIHlkTCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIHhkID0geC5kLFxyXG4gICAgICB5ZCA9ICh5ID0gbmV3IHguY29uc3RydWN0b3IoeSkpLmQsXHJcbiAgICAgIHhzID0geC5zLFxyXG4gICAgICB5cyA9IHkucztcclxuXHJcbiAgICAvLyBFaXRoZXIgTmFOIG9yIMKxSW5maW5pdHk/XHJcbiAgICBpZiAoIXhkIHx8ICF5ZCkge1xyXG4gICAgICByZXR1cm4gIXhzIHx8ICF5cyA/IE5hTiA6IHhzICE9PSB5cyA/IHhzIDogeGQgPT09IHlkID8gMCA6ICF4ZCBeIHhzIDwgMCA/IDEgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFaXRoZXIgemVybz9cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSByZXR1cm4geGRbMF0gPyB4cyA6IHlkWzBdID8gLXlzIDogMDtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoeHMgIT09IHlzKSByZXR1cm4geHM7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBleHBvbmVudHMuXHJcbiAgICBpZiAoeC5lICE9PSB5LmUpIHJldHVybiB4LmUgPiB5LmUgXiB4cyA8IDAgPyAxIDogLTE7XHJcblxyXG4gICAgeGRMID0geGQubGVuZ3RoO1xyXG4gICAgeWRMID0geWQubGVuZ3RoO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICBmb3IgKGkgPSAwLCBqID0geGRMIDwgeWRMID8geGRMIDogeWRMOyBpIDwgajsgKytpKSB7XHJcbiAgICAgIGlmICh4ZFtpXSAhPT0geWRbaV0pIHJldHVybiB4ZFtpXSA+IHlkW2ldIF4geHMgPCAwID8gMSA6IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbXBhcmUgbGVuZ3Rocy5cclxuICAgIHJldHVybiB4ZEwgPT09IHlkTCA/IDAgOiB4ZEwgPiB5ZEwgXiB4cyA8IDAgPyAxIDogLTE7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLTEsIDFdXHJcbiAgICpcclxuICAgKiBjb3MoMCkgICAgICAgICA9IDFcclxuICAgKiBjb3MoLTApICAgICAgICA9IDFcclxuICAgKiBjb3MoSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIGNvcygtSW5maW5pdHkpID0gTmFOXHJcbiAgICogY29zKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY29zaW5lID0gUC5jb3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmQpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgIC8vIGNvcygwKSA9IGNvcygtMCkgPSAxXHJcbiAgICBpZiAoIXguZFswXSkgcmV0dXJuIG5ldyBDdG9yKDEpO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoeC5lLCB4LnNkKCkpICsgTE9HX0JBU0U7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0gY29zaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gMyA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGN1YmUgcm9vdCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqICBjYnJ0KDApICA9ICAwXHJcbiAgICogIGNicnQoLTApID0gLTBcclxuICAgKiAgY2JydCgxKSAgPSAgMVxyXG4gICAqICBjYnJ0KC0xKSA9IC0xXHJcbiAgICogIGNicnQoTikgID0gIE5cclxuICAgKiAgY2JydCgtSSkgPSAtSVxyXG4gICAqICBjYnJ0KEkpICA9ICBJXHJcbiAgICpcclxuICAgKiBNYXRoLmNicnQoeCkgPSAoeCA8IDAgPyAtTWF0aC5wb3coLXgsIDEvMykgOiBNYXRoLnBvdyh4LCAxLzMpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5jdWJlUm9vdCA9IFAuY2JydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBlLCBtLCBuLCByLCByZXAsIHMsIHNkLCB0LCB0MywgdDNwbHVzeCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgIHMgPSB4LnMgKiBtYXRocG93KHgucyAqIHgsIDEgLyAzKTtcclxuXHJcbiAgICAgLy8gTWF0aC5jYnJ0IHVuZGVyZmxvdy9vdmVyZmxvdz9cclxuICAgICAvLyBQYXNzIHggdG8gTWF0aC5wb3cgYXMgaW50ZWdlciwgdGhlbiBhZGp1c3QgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQuXHJcbiAgICBpZiAoIXMgfHwgTWF0aC5hYnMocykgPT0gMSAvIDApIHtcclxuICAgICAgbiA9IGRpZ2l0c1RvU3RyaW5nKHguZCk7XHJcbiAgICAgIGUgPSB4LmU7XHJcblxyXG4gICAgICAvLyBBZGp1c3QgbiBleHBvbmVudCBzbyBpdCBpcyBhIG11bHRpcGxlIG9mIDMgYXdheSBmcm9tIHggZXhwb25lbnQuXHJcbiAgICAgIGlmIChzID0gKGUgLSBuLmxlbmd0aCArIDEpICUgMykgbiArPSAocyA9PSAxIHx8IHMgPT0gLTIgPyAnMCcgOiAnMDAnKTtcclxuICAgICAgcyA9IG1hdGhwb3cobiwgMSAvIDMpO1xyXG5cclxuICAgICAgLy8gUmFyZWx5LCBlIG1heSBiZSBvbmUgbGVzcyB0aGFuIHRoZSByZXN1bHQgZXhwb25lbnQgdmFsdWUuXHJcbiAgICAgIGUgPSBtYXRoZmxvb3IoKGUgKyAxKSAvIDMpIC0gKGUgJSAzID09IChlIDwgMCA/IC0xIDogMikpO1xyXG5cclxuICAgICAgaWYgKHMgPT0gMSAvIDApIHtcclxuICAgICAgICBuID0gJzVlJyArIGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbiA9IHMudG9FeHBvbmVudGlhbCgpO1xyXG4gICAgICAgIG4gPSBuLnNsaWNlKDAsIG4uaW5kZXhPZignZScpICsgMSkgKyBlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByID0gbmV3IEN0b3Iobik7XHJcbiAgICAgIHIucyA9IHgucztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHIgPSBuZXcgQ3RvcihzLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNkID0gKGUgPSBDdG9yLnByZWNpc2lvbikgKyAzO1xyXG5cclxuICAgIC8vIEhhbGxleSdzIG1ldGhvZC5cclxuICAgIC8vIFRPRE8/IENvbXBhcmUgTmV3dG9uJ3MgbWV0aG9kLlxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gcjtcclxuICAgICAgdDMgPSB0LnRpbWVzKHQpLnRpbWVzKHQpO1xyXG4gICAgICB0M3BsdXN4ID0gdDMucGx1cyh4KTtcclxuICAgICAgciA9IGRpdmlkZSh0M3BsdXN4LnBsdXMoeCkudGltZXModCksIHQzcGx1c3gucGx1cyh0MyksIHNkICsgMiwgMSk7XHJcblxyXG4gICAgICAvLyBUT0RPPyBSZXBsYWNlIHdpdGggZm9yLWxvb3AgYW5kIGNoZWNrUm91bmRpbmdEaWdpdHMuXHJcbiAgICAgIGlmIChkaWdpdHNUb1N0cmluZyh0LmQpLnNsaWNlKDAsIHNkKSA9PT0gKG4gPSBkaWdpdHNUb1N0cmluZyhyLmQpKS5zbGljZSgwLCBzZCkpIHtcclxuICAgICAgICBuID0gbi5zbGljZShzZCAtIDMsIHNkICsgMSk7XHJcblxyXG4gICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgOTk5OSBvciA0OTk5XHJcbiAgICAgICAgLy8gLCBpLmUuIGFwcHJvYWNoaW5nIGEgcm91bmRpbmcgYm91bmRhcnksIGNvbnRpbnVlIHRoZSBpdGVyYXRpb24uXHJcbiAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHtcclxuXHJcbiAgICAgICAgICAvLyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIGNoZWNrIHRvIHNlZSBpZiByb3VuZGluZyB1cCBnaXZlcyB0aGUgZXhhY3QgcmVzdWx0IGFzIHRoZVxyXG4gICAgICAgICAgLy8gbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0LlxyXG4gICAgICAgICAgaWYgKCFyZXApIHtcclxuICAgICAgICAgICAgZmluYWxpc2UodCwgZSArIDEsIDApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudGltZXModCkudGltZXModCkuZXEoeCkpIHtcclxuICAgICAgICAgICAgICByID0gdDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNkICs9IDQ7XHJcbiAgICAgICAgICByZXAgPSAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0cyBhcmUgbnVsbCwgMHswLDR9IG9yIDUwezAsM30sIGNoZWNrIGZvciBhbiBleGFjdCByZXN1bHQuXHJcbiAgICAgICAgICAvLyBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5LlxyXG4gICAgICAgICAgaWYgKCErbiB8fCAhK24uc2xpY2UoMSkgJiYgbi5jaGFyQXQoMCkgPT0gJzUnKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHIsIGUgKyAxLCAxKTtcclxuICAgICAgICAgICAgbSA9ICFyLnRpbWVzKHIpLnRpbWVzKHIpLmVxKHgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgZSwgQ3Rvci5yb3VuZGluZywgbSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZGVjaW1hbFBsYWNlcyA9IFAuZHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdyxcclxuICAgICAgZCA9IHRoaXMuZCxcclxuICAgICAgbiA9IE5hTjtcclxuXHJcbiAgICBpZiAoZCkge1xyXG4gICAgICB3ID0gZC5sZW5ndGggLSAxO1xyXG4gICAgICBuID0gKHcgLSBtYXRoZmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpKSAqIExPR19CQVNFO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCB3b3JkLlxyXG4gICAgICB3ID0gZFt3XTtcclxuICAgICAgaWYgKHcpIGZvciAoOyB3ICUgMTAgPT0gMDsgdyAvPSAxMCkgbi0tO1xyXG4gICAgICBpZiAobiA8IDApIG4gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuIC8gMCA9IElcclxuICAgKiAgbiAvIE4gPSBOXHJcbiAgICogIG4gLyBJID0gMFxyXG4gICAqICAwIC8gbiA9IDBcclxuICAgKiAgMCAvIDAgPSBOXHJcbiAgICogIDAgLyBOID0gTlxyXG4gICAqICAwIC8gSSA9IDBcclxuICAgKiAgTiAvIG4gPSBOXHJcbiAgICogIE4gLyAwID0gTlxyXG4gICAqICBOIC8gTiA9IE5cclxuICAgKiAgTiAvIEkgPSBOXHJcbiAgICogIEkgLyBuID0gSVxyXG4gICAqICBJIC8gMCA9IElcclxuICAgKiAgSSAvIE4gPSBOXHJcbiAgICogIEkgLyBJID0gTlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBkaXZpZGVkIGJ5IGB5YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmRpdmlkZWRCeSA9IFAuZGl2ID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiBkaXZpZGUodGhpcywgbmV3IHRoaXMuY29uc3RydWN0b3IoeSkpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbFxyXG4gICAqIGJ5IHRoZSB2YWx1ZSBvZiBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZGl2aWRlZFRvSW50ZWdlckJ5ID0gUC5kaXZUb0ludCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKGRpdmlkZSh4LCBuZXcgQ3Rvcih5KSwgMCwgMSwgMSksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmVxdWFscyA9IFAuZXEgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY21wKHkpID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBhIHdob2xlIG51bWJlciBpbiB0aGVcclxuICAgKiBkaXJlY3Rpb24gb2YgbmVnYXRpdmUgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmZsb29yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpLCB0aGlzLmUgKyAxLCAzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgYHlgLCBvdGhlcndpc2UgcmV0dXJuXHJcbiAgICogZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmdyZWF0ZXJUaGFuID0gUC5ndCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jbXAoeSkgPiAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZ3JlYXRlclRoYW5PckVxdWFsVG8gPSBQLmd0ZSA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgayA9IHRoaXMuY21wKHkpO1xyXG4gICAgcmV0dXJuIGsgPT0gMSB8fCBrID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFsxLCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGNvc2goeCkgPSAxICsgeF4yLzIhICsgeF40LzQhICsgeF42LzYhICsgLi4uXHJcbiAgICpcclxuICAgKiBjb3NoKDApICAgICAgICAgPSAxXHJcbiAgICogY29zaCgtMCkgICAgICAgID0gMVxyXG4gICAqIGNvc2goSW5maW5pdHkpICA9IEluZmluaXR5XHJcbiAgICogY29zaCgtSW5maW5pdHkpID0gSW5maW5pdHlcclxuICAgKiBjb3NoKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqICB4ICAgICAgICB0aW1lIHRha2VuIChtcykgICByZXN1bHRcclxuICAgKiAxMDAwICAgICAgOSAgICAgICAgICAgICAgICAgOS44NTAzNTU1NzAwODUyMzQ5Njk0ZSs0MzNcclxuICAgKiAxMDAwMCAgICAgMjUgICAgICAgICAgICAgICAgNC40MDM0MDkxMTI4MzE0NjA3OTM2ZSs0MzQyXHJcbiAgICogMTAwMDAwICAgIDE3MSAgICAgICAgICAgICAgIDEuNDAzMzMxNjgwMjEzMDYxNTg5N2UrNDM0MjlcclxuICAgKiAxMDAwMDAwICAgMzgxNyAgICAgICAgICAgICAgMS41MTY2MDc2OTg0MDEwNDM3NzI1ZSs0MzQyOTRcclxuICAgKiAxMDAwMDAwMCAgYWJhbmRvbmVkIGFmdGVyIDIgbWludXRlIHdhaXRcclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2YgY29zaCh4KSA9IDAuNSAqIChleHAoeCkgKyBleHAoLXgpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5oeXBlcmJvbGljQ29zaW5lID0gUC5jb3NoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGssIG4sIHByLCBybSwgbGVuLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIG9uZSA9IG5ldyBDdG9yKDEpO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeC5zID8gMSAvIDAgOiBOYU4pO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBvbmU7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyA0O1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcbiAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogY29zKDR4KSA9IDEgLSA4Y29zXjIoeCkgKyA4Y29zXjQoeCkgKyAxXHJcbiAgICAvLyBpLmUuIGNvcyh4KSA9IDEgLSBjb3NeMih4LzQpKDggLSA4Y29zXjIoeC80KSlcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICAvLyBUT0RPPyBFc3RpbWF0aW9uIHJldXNlZCBmcm9tIGNvc2luZSgpIGFuZCBtYXkgbm90IGJlIG9wdGltYWwgaGVyZS5cclxuICAgIGlmIChsZW4gPCAzMikge1xyXG4gICAgICBrID0gTWF0aC5jZWlsKGxlbiAvIDMpO1xyXG4gICAgICBuID0gKDEgLyB0aW55UG93KDQsIGspKS50b1N0cmluZygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgayA9IDE2O1xyXG4gICAgICBuID0gJzIuMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNWUtMTAnO1xyXG4gICAgfVxyXG5cclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMSwgeC50aW1lcyhuKSwgbmV3IEN0b3IoMSksIHRydWUpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICB2YXIgY29zaDJfeCxcclxuICAgICAgaSA9IGssXHJcbiAgICAgIGQ4ID0gbmV3IEN0b3IoOCk7XHJcbiAgICBmb3IgKDsgaS0tOykge1xyXG4gICAgICBjb3NoMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IG9uZS5taW51cyhjb3NoMl94LnRpbWVzKGQ4Lm1pbnVzKGNvc2gyX3gudGltZXMoZDgpKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZSh4LCBDdG9yLnByZWNpc2lvbiA9IHByLCBDdG9yLnJvdW5kaW5nID0gcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgdGhlIHZhbHVlIGluIHJhZGlhbnMgb2YgdGhpc1xyXG4gICAqIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIHNpbmgoeCkgPSB4ICsgeF4zLzMhICsgeF41LzUhICsgeF43LzchICsgLi4uXHJcbiAgICpcclxuICAgKiBzaW5oKDApICAgICAgICAgPSAwXHJcbiAgICogc2luaCgtMCkgICAgICAgID0gLTBcclxuICAgKiBzaW5oKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqIHNpbmgoLUluZmluaXR5KSA9IC1JbmZpbml0eVxyXG4gICAqIHNpbmgoTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogeCAgICAgICAgdGltZSB0YWtlbiAobXMpXHJcbiAgICogMTAgICAgICAgMiBtc1xyXG4gICAqIDEwMCAgICAgIDUgbXNcclxuICAgKiAxMDAwICAgICAxNCBtc1xyXG4gICAqIDEwMDAwICAgIDgyIG1zXHJcbiAgICogMTAwMDAwICAgODg2IG1zICAgICAgICAgICAgMS40MDMzMzE2ODAyMTMwNjE1ODk3ZSs0MzQyOVxyXG4gICAqIDIwMDAwMCAgIDI2MTMgbXNcclxuICAgKiAzMDAwMDAgICA1NDA3IG1zXHJcbiAgICogNDAwMDAwICAgODgyNCBtc1xyXG4gICAqIDUwMDAwMCAgIDEzMDI2IG1zICAgICAgICAgIDguNzA4MDY0MzYxMjcxODA4NDEyOWUrMjE3MTQ2XHJcbiAgICogMTAwMDAwMCAgNDg1NDMgbXNcclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2Ygc2luaCh4KSA9IDAuNSAqIChleHAoeCkgLSBleHAoLXgpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5oeXBlcmJvbGljU2luZSA9IFAuc2luaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBrLCBwciwgcm0sIGxlbixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIE1hdGgubWF4KHguZSwgeC5zZCgpKSArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGxlbiA9IHguZC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGxlbiA8IDMpIHtcclxuICAgICAgeCA9IHRheWxvclNlcmllcyhDdG9yLCAyLCB4LCB4LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBBbHRlcm5hdGl2ZSBhcmd1bWVudCByZWR1Y3Rpb246IHNpbmgoM3gpID0gc2luaCh4KSgzICsgNHNpbmheMih4KSlcclxuICAgICAgLy8gaS5lLiBzaW5oKHgpID0gc2luaCh4LzMpKDMgKyA0c2luaF4yKHgvMykpXHJcbiAgICAgIC8vIDMgbXVsdGlwbGljYXRpb25zIGFuZCAxIGFkZGl0aW9uXHJcblxyXG4gICAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb246IHNpbmgoNXgpID0gc2luaCh4KSg1ICsgc2luaF4yKHgpKDIwICsgMTZzaW5oXjIoeCkpKVxyXG4gICAgICAvLyBpLmUuIHNpbmgoeCkgPSBzaW5oKHgvNSkoNSArIHNpbmheMih4LzUpKDIwICsgMTZzaW5oXjIoeC81KSkpXHJcbiAgICAgIC8vIDQgbXVsdGlwbGljYXRpb25zIGFuZCAyIGFkZGl0aW9uc1xyXG5cclxuICAgICAgLy8gRXN0aW1hdGUgdGhlIG9wdGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHVzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLlxyXG4gICAgICBrID0gMS40ICogTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgIGsgPSBrID4gMTYgPyAxNiA6IGsgfCAwO1xyXG5cclxuICAgICAgeCA9IHgudGltZXMoMSAvIHRpbnlQb3coNSwgaykpO1xyXG4gICAgICB4ID0gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgsIHRydWUpO1xyXG5cclxuICAgICAgLy8gUmV2ZXJzZSBhcmd1bWVudCByZWR1Y3Rpb25cclxuICAgICAgdmFyIHNpbmgyX3gsXHJcbiAgICAgICAgZDUgPSBuZXcgQ3Rvcig1KSxcclxuICAgICAgICBkMTYgPSBuZXcgQ3RvcigxNiksXHJcbiAgICAgICAgZDIwID0gbmV3IEN0b3IoMjApO1xyXG4gICAgICBmb3IgKDsgay0tOykge1xyXG4gICAgICAgIHNpbmgyX3ggPSB4LnRpbWVzKHgpO1xyXG4gICAgICAgIHggPSB4LnRpbWVzKGQ1LnBsdXMoc2luaDJfeC50aW1lcyhkMTYudGltZXMoc2luaDJfeCkucGx1cyhkMjApKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCwgcHIsIHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXNcclxuICAgKiBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy0xLCAxXVxyXG4gICAqXHJcbiAgICogdGFuaCh4KSA9IHNpbmgoeCkgLyBjb3NoKHgpXHJcbiAgICpcclxuICAgKiB0YW5oKDApICAgICAgICAgPSAwXHJcbiAgICogdGFuaCgtMCkgICAgICAgID0gLTBcclxuICAgKiB0YW5oKEluZmluaXR5KSAgPSAxXHJcbiAgICogdGFuaCgtSW5maW5pdHkpID0gLTFcclxuICAgKiB0YW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaHlwZXJib2xpY1RhbmdlbnQgPSBQLnRhbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3Rvcih4LnMpO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDc7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICByZXR1cm4gZGl2aWRlKHguc2luaCgpLCB4LmNvc2goKSwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIChpbnZlcnNlIGNvc2luZSkgaW4gcmFkaWFucyBvZiB0aGUgdmFsdWUgb2ZcclxuICAgKiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstMSwgMV1cclxuICAgKiBSYW5nZTogWzAsIHBpXVxyXG4gICAqXHJcbiAgICogYWNvcyh4KSA9IHBpLzIgLSBhc2luKHgpXHJcbiAgICpcclxuICAgKiBhY29zKDApICAgICAgID0gcGkvMlxyXG4gICAqIGFjb3MoLTApICAgICAgPSBwaS8yXHJcbiAgICogYWNvcygxKSAgICAgICA9IDBcclxuICAgKiBhY29zKC0xKSAgICAgID0gcGlcclxuICAgKiBhY29zKDEvMikgICAgID0gcGkvM1xyXG4gICAqIGFjb3MoLTEvMikgICAgPSAyKnBpLzNcclxuICAgKiBhY29zKHx4fCA+IDEpID0gTmFOXHJcbiAgICogYWNvcyhOYU4pICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlQ29zaW5lID0gUC5hY29zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGhhbGZQaSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBrID0geC5hYnMoKS5jbXAoMSksXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb24sXHJcbiAgICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICBpZiAoayAhPT0gLTEpIHtcclxuICAgICAgcmV0dXJuIGsgPT09IDBcclxuICAgICAgICAvLyB8eHwgaXMgMVxyXG4gICAgICAgID8geC5pc05lZygpID8gZ2V0UGkoQ3RvciwgcHIsIHJtKSA6IG5ldyBDdG9yKDApXHJcbiAgICAgICAgLy8gfHh8ID4gMSBvciB4IGlzIE5hTlxyXG4gICAgICAgIDogbmV3IEN0b3IoTmFOKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgLy8gVE9ETz8gU3BlY2lhbCBjYXNlIGFjb3MoMC41KSA9IHBpLzMgYW5kIGFjb3MoLTAuNSkgPSAyKnBpLzNcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgNjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSB4LmFzaW4oKTtcclxuICAgIGhhbGZQaSA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gaGFsZlBpLm1pbnVzKHgpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIGNvc2luZSBpbiByYWRpYW5zIG9mIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWzEsIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbMCwgSW5maW5pdHldXHJcbiAgICpcclxuICAgKiBhY29zaCh4KSA9IGxuKHggKyBzcXJ0KHheMiAtIDEpKVxyXG4gICAqXHJcbiAgICogYWNvc2goeCA8IDEpICAgICA9IE5hTlxyXG4gICAqIGFjb3NoKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhY29zaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBhY29zaCgtSW5maW5pdHkpID0gTmFOXHJcbiAgICogYWNvc2goMCkgICAgICAgICA9IE5hTlxyXG4gICAqIGFjb3NoKC0wKSAgICAgICAgPSBOYU5cclxuICAgKiBhY29zaCgxKSAgICAgICAgID0gMFxyXG4gICAqIGFjb3NoKC0xKSAgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgPSBQLmFjb3NoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICh4Lmx0ZSgxKSkgcmV0dXJuIG5ldyBDdG9yKHguZXEoMSkgPyAwIDogTmFOKTtcclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heChNYXRoLmFicyh4LmUpLCB4LnNkKCkpICsgNDtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICB4ID0geC50aW1lcyh4KS5taW51cygxKS5zcXJ0KCkucGx1cyh4KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LmxuKCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZVxyXG4gICAqIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogYXNpbmgoeCkgPSBsbih4ICsgc3FydCh4XjIgKyAxKSlcclxuICAgKlxyXG4gICAqIGFzaW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhc2luaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBhc2luaCgtSW5maW5pdHkpID0gLUluZmluaXR5XHJcbiAgICogYXNpbmgoMCkgICAgICAgICA9IDBcclxuICAgKiBhc2luaCgtMCkgICAgICAgID0gLTBcclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUh5cGVyYm9saWNTaW5lID0gUC5hc2luaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSB8fCB4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyAyICogTWF0aC5tYXgoTWF0aC5hYnMoeC5lKSwgeC5zZCgpKSArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgeCA9IHgudGltZXMoeCkucGx1cygxKS5zcXJ0KCkucGx1cyh4KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LmxuKCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBpbiByYWRpYW5zIG9mIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy0xLCAxXVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGF0YW5oKHgpID0gMC41ICogbG4oKDEgKyB4KSAvICgxIC0geCkpXHJcbiAgICpcclxuICAgKiBhdGFuaCh8eHwgPiAxKSAgID0gTmFOXHJcbiAgICogYXRhbmgoTmFOKSAgICAgICA9IE5hTlxyXG4gICAqIGF0YW5oKEluZmluaXR5KSAgPSBOYU5cclxuICAgKiBhdGFuaCgtSW5maW5pdHkpID0gTmFOXHJcbiAgICogYXRhbmgoMCkgICAgICAgICA9IDBcclxuICAgKiBhdGFuaCgtMCkgICAgICAgID0gLTBcclxuICAgKiBhdGFuaCgxKSAgICAgICAgID0gSW5maW5pdHlcclxuICAgKiBhdGFuaCgtMSkgICAgICAgID0gLUluZmluaXR5XHJcbiAgICpcclxuICAgKi9cclxuICBQLmludmVyc2VIeXBlcmJvbGljVGFuZ2VudCA9IFAuYXRhbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLCB3cHIsIHhzZCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmUgPj0gMCkgcmV0dXJuIG5ldyBDdG9yKHguYWJzKCkuZXEoMSkgPyB4LnMgLyAwIDogeC5pc1plcm8oKSA/IHggOiBOYU4pO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB4c2QgPSB4LnNkKCk7XHJcblxyXG4gICAgaWYgKE1hdGgubWF4KHhzZCwgcHIpIDwgMiAqIC14LmUgLSAxKSByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHByLCBybSwgdHJ1ZSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgPSB4c2QgLSB4LmU7XHJcblxyXG4gICAgeCA9IGRpdmlkZSh4LnBsdXMoMSksIG5ldyBDdG9yKDEpLm1pbnVzKHgpLCB3cHIgKyBwciwgMSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5sbigpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIHgudGltZXMoMC41KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjc2luZSAoaW52ZXJzZSBzaW5lKSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstcGkvMiwgcGkvMl1cclxuICAgKlxyXG4gICAqIGFzaW4oeCkgPSAyKmF0YW4oeC8oMSArIHNxcnQoMSAtIHheMikpKVxyXG4gICAqXHJcbiAgICogYXNpbigwKSAgICAgICA9IDBcclxuICAgKiBhc2luKC0wKSAgICAgID0gLTBcclxuICAgKiBhc2luKDEvMikgICAgID0gcGkvNlxyXG4gICAqIGFzaW4oLTEvMikgICAgPSAtcGkvNlxyXG4gICAqIGFzaW4oMSkgICAgICAgPSBwaS8yXHJcbiAgICogYXNpbigtMSkgICAgICA9IC1waS8yXHJcbiAgICogYXNpbih8eHwgPiAxKSA9IE5hTlxyXG4gICAqIGFzaW4oTmFOKSAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2YgVGF5bG9yIHNlcmllcy5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZVNpbmUgPSBQLmFzaW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgaGFsZlBpLCBrLFxyXG4gICAgICBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIGsgPSB4LmFicygpLmNtcCgxKTtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKGsgIT09IC0xKSB7XHJcblxyXG4gICAgICAvLyB8eHwgaXMgMVxyXG4gICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgIGhhbGZQaSA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcbiAgICAgICAgaGFsZlBpLnMgPSB4LnM7XHJcbiAgICAgICAgcmV0dXJuIGhhbGZQaTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gfHh8ID4gMSBvciB4IGlzIE5hTlxyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPPyBTcGVjaWFsIGNhc2UgYXNpbigxLzIpID0gcGkvNiBhbmQgYXNpbigtMS8yKSA9IC1waS82XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5kaXYobmV3IEN0b3IoMSkubWludXMoeC50aW1lcyh4KSkuc3FydCgpLnBsdXMoMSkpLmF0YW4oKTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LnRpbWVzKDIpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IChpbnZlcnNlIHRhbmdlbnQpIGluIHJhZGlhbnMgb2YgdGhlIHZhbHVlXHJcbiAgICogb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1waS8yLCBwaS8yXVxyXG4gICAqXHJcbiAgICogYXRhbih4KSA9IHggLSB4XjMvMyArIHheNS81IC0geF43LzcgKyAuLi5cclxuICAgKlxyXG4gICAqIGF0YW4oMCkgICAgICAgICA9IDBcclxuICAgKiBhdGFuKC0wKSAgICAgICAgPSAtMFxyXG4gICAqIGF0YW4oMSkgICAgICAgICA9IHBpLzRcclxuICAgKiBhdGFuKC0xKSAgICAgICAgPSAtcGkvNFxyXG4gICAqIGF0YW4oSW5maW5pdHkpICA9IHBpLzJcclxuICAgKiBhdGFuKC1JbmZpbml0eSkgPSAtcGkvMlxyXG4gICAqIGF0YW4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlVGFuZ2VudCA9IFAuYXRhbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBpLCBqLCBrLCBuLCBweCwgdCwgciwgd3ByLCB4MixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcclxuICAgICAgaWYgKCF4LnMpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG4gICAgICBpZiAocHIgKyA0IDw9IFBJX1BSRUNJU0lPTikge1xyXG4gICAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjUpO1xyXG4gICAgICAgIHIucyA9IHgucztcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh4LmlzWmVybygpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuICAgIH0gZWxzZSBpZiAoeC5hYnMoKS5lcSgxKSAmJiBwciArIDQgPD0gUElfUFJFQ0lTSU9OKSB7XHJcbiAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjI1KTtcclxuICAgICAgci5zID0geC5zO1xyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwciA9IHByICsgMTA7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICAvLyBUT0RPPyBpZiAoeCA+PSAxICYmIHByIDw9IFBJX1BSRUNJU0lPTikgYXRhbih4KSA9IGhhbGZQaSAqIHgucyAtIGF0YW4oMSAvIHgpO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvblxyXG4gICAgLy8gRW5zdXJlIHx4fCA8IDAuNDJcclxuICAgIC8vIGF0YW4oeCkgPSAyICogYXRhbih4IC8gKDEgKyBzcXJ0KDEgKyB4XjIpKSlcclxuXHJcbiAgICBrID0gTWF0aC5taW4oMjgsIHdwciAvIExPR19CQVNFICsgMiB8IDApO1xyXG5cclxuICAgIGZvciAoaSA9IGs7IGk7IC0taSkgeCA9IHguZGl2KHgudGltZXMoeCkucGx1cygxKS5zcXJ0KCkucGx1cygxKSk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICBqID0gTWF0aC5jZWlsKHdwciAvIExPR19CQVNFKTtcclxuICAgIG4gPSAxO1xyXG4gICAgeDIgPSB4LnRpbWVzKHgpO1xyXG4gICAgciA9IG5ldyBDdG9yKHgpO1xyXG4gICAgcHggPSB4O1xyXG5cclxuICAgIC8vIGF0YW4oeCkgPSB4IC0geF4zLzMgKyB4XjUvNSAtIHheNy83ICsgLi4uXHJcbiAgICBmb3IgKDsgaSAhPT0gLTE7KSB7XHJcbiAgICAgIHB4ID0gcHgudGltZXMoeDIpO1xyXG4gICAgICB0ID0gci5taW51cyhweC5kaXYobiArPSAyKSk7XHJcblxyXG4gICAgICBweCA9IHB4LnRpbWVzKHgyKTtcclxuICAgICAgciA9IHQucGx1cyhweC5kaXYobiArPSAyKSk7XHJcblxyXG4gICAgICBpZiAoci5kW2pdICE9PSB2b2lkIDApIGZvciAoaSA9IGo7IHIuZFtpXSA9PT0gdC5kW2ldICYmIGktLTspO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrKSByID0gci50aW1lcygyIDw8IChrIC0gMSkpO1xyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNGaW5pdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmQ7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBhbiBpbnRlZ2VyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc0ludGVnZXIgPSBQLmlzSW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5kICYmIG1hdGhmbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmQubGVuZ3RoIC0gMjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNOYU4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMucztcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc05lZ2F0aXZlID0gUC5pc05lZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgcG9zaXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmlzUG9zaXRpdmUgPSBQLmlzUG9zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucyA+IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyAwIG9yIC0wLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmQgJiYgdGhpcy5kWzBdID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIGB5YCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA8IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHlgLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5sZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA8IDE7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCB0byB0aGUgc3BlY2lmaWVkIGJhc2UsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogSWYgbm8gYmFzZSBpcyBzcGVjaWZpZWQsIHJldHVybiBsb2dbMTBdKGFyZykuXHJcbiAgICpcclxuICAgKiBsb2dbYmFzZV0oYXJnKSA9IGxuKGFyZykgLyBsbihiYXNlKVxyXG4gICAqXHJcbiAgICogVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0bHkgcm91bmRlZCBpZiB0aGUgYmFzZSBvZiB0aGUgbG9nIGlzIDEwLCBhbmQgJ2FsbW9zdCBhbHdheXMnXHJcbiAgICogb3RoZXJ3aXNlOlxyXG4gICAqXHJcbiAgICogRGVwZW5kaW5nIG9uIHRoZSByb3VuZGluZyBtb2RlLCB0aGUgcmVzdWx0IG1heSBiZSBpbmNvcnJlY3RseSByb3VuZGVkIGlmIHRoZSBmaXJzdCBmaWZ0ZWVuXHJcbiAgICogcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OTk5OTk5OTk5OTkgb3IgWzUwXTAwMDAwMDAwMDAwMDAwLiBJbiB0aGF0IGNhc2UsIHRoZSBtYXhpbXVtIGVycm9yXHJcbiAgICogYmV0d2VlbiB0aGUgcmVzdWx0IGFuZCB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0IHdpbGwgYmUgb25lIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuXHJcbiAgICpcclxuICAgKiBsb2dbLWJdKGEpICAgICAgID0gTmFOXHJcbiAgICogbG9nWzBdKGEpICAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1sxXShhKSAgICAgICAgPSBOYU5cclxuICAgKiBsb2dbTmFOXShhKSAgICAgID0gTmFOXHJcbiAgICogbG9nW0luZmluaXR5XShhKSA9IE5hTlxyXG4gICAqIGxvZ1tiXSgwKSAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiBsb2dbYl0oLTApICAgICAgID0gLUluZmluaXR5XHJcbiAgICogbG9nW2JdKC1hKSAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1tiXSgxKSAgICAgICAgPSAwXHJcbiAgICogbG9nW2JdKEluZmluaXR5KSA9IEluZmluaXR5XHJcbiAgICogbG9nW2JdKE5hTikgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogW2Jhc2VdIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBiYXNlIG9mIHRoZSBsb2dhcml0aG0uXHJcbiAgICpcclxuICAgKi9cclxuICBQLmxvZ2FyaXRobSA9IFAubG9nID0gZnVuY3Rpb24gKGJhc2UpIHtcclxuICAgIHZhciBpc0Jhc2UxMCwgZCwgZGVub21pbmF0b3IsIGssIGluZiwgbnVtLCBzZCwgcixcclxuICAgICAgYXJnID0gdGhpcyxcclxuICAgICAgQ3RvciA9IGFyZy5jb25zdHJ1Y3RvcixcclxuICAgICAgcHIgPSBDdG9yLnByZWNpc2lvbixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBndWFyZCA9IDU7XHJcblxyXG4gICAgLy8gRGVmYXVsdCBiYXNlIGlzIDEwLlxyXG4gICAgaWYgKGJhc2UgPT0gbnVsbCkge1xyXG4gICAgICBiYXNlID0gbmV3IEN0b3IoMTApO1xyXG4gICAgICBpc0Jhc2UxMCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiYXNlID0gbmV3IEN0b3IoYmFzZSk7XHJcbiAgICAgIGQgPSBiYXNlLmQ7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJhc2UgaXMgbmVnYXRpdmUsIG9yIG5vbi1maW5pdGUsIG9yIGlzIDAgb3IgMS5cclxuICAgICAgaWYgKGJhc2UucyA8IDAgfHwgIWQgfHwgIWRbMF0gfHwgYmFzZS5lcSgxKSkgcmV0dXJuIG5ldyBDdG9yKE5hTik7XHJcblxyXG4gICAgICBpc0Jhc2UxMCA9IGJhc2UuZXEoMTApO1xyXG4gICAgfVxyXG5cclxuICAgIGQgPSBhcmcuZDtcclxuXHJcbiAgICAvLyBJcyBhcmcgbmVnYXRpdmUsIG5vbi1maW5pdGUsIDAgb3IgMT9cclxuICAgIGlmIChhcmcucyA8IDAgfHwgIWQgfHwgIWRbMF0gfHwgYXJnLmVxKDEpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3RvcihkICYmICFkWzBdID8gLTEgLyAwIDogYXJnLnMgIT0gMSA/IE5hTiA6IGQgPyAwIDogMSAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIGEgbm9uLXRlcm1pbmF0aW5nIGRlY2ltYWwgZXhwYW5zaW9uIGlmIGJhc2UgaXMgMTAgYW5kIGFyZyBpcyBub3QgYW5cclxuICAgIC8vIGludGVnZXIgcG93ZXIgb2YgMTAuXHJcbiAgICBpZiAoaXNCYXNlMTApIHtcclxuICAgICAgaWYgKGQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGluZiA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChrID0gZFswXTsgayAlIDEwID09PSAwOykgayAvPSAxMDtcclxuICAgICAgICBpbmYgPSBrICE9PSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIHNkID0gcHIgKyBndWFyZDtcclxuICAgIG51bSA9IG5hdHVyYWxMb2dhcml0aG0oYXJnLCBzZCk7XHJcbiAgICBkZW5vbWluYXRvciA9IGlzQmFzZTEwID8gZ2V0TG4xMChDdG9yLCBzZCArIDEwKSA6IG5hdHVyYWxMb2dhcml0aG0oYmFzZSwgc2QpO1xyXG5cclxuICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIDUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgciA9IGRpdmlkZShudW0sIGRlbm9taW5hdG9yLCBzZCwgMSk7XHJcblxyXG4gICAgLy8gSWYgYXQgYSByb3VuZGluZyBib3VuZGFyeSwgaS5lLiB0aGUgcmVzdWx0J3Mgcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OSBvciBbNTBdMDAwMCxcclxuICAgIC8vIGNhbGN1bGF0ZSAxMCBmdXJ0aGVyIGRpZ2l0cy5cclxuICAgIC8vXHJcbiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIGtub3duIHRvIGhhdmUgYW4gaW5maW5pdGUgZGVjaW1hbCBleHBhbnNpb24sIHJlcGVhdCB0aGlzIHVudGlsIGl0IGlzIGNsZWFyXHJcbiAgICAvLyB0aGF0IHRoZSByZXN1bHQgaXMgYWJvdmUgb3IgYmVsb3cgdGhlIGJvdW5kYXJ5LiBPdGhlcndpc2UsIGlmIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSAxMFxyXG4gICAgLy8gZnVydGhlciBkaWdpdHMsIHRoZSBsYXN0IDE0IGFyZSBuaW5lcywgcm91bmQgdXAgYW5kIGFzc3VtZSB0aGUgcmVzdWx0IGlzIGV4YWN0LlxyXG4gICAgLy8gQWxzbyBhc3N1bWUgdGhlIHJlc3VsdCBpcyBleGFjdCBpZiB0aGUgbGFzdCAxNCBhcmUgemVyby5cclxuICAgIC8vXHJcbiAgICAvLyBFeGFtcGxlIG9mIGEgcmVzdWx0IHRoYXQgd2lsbCBiZSBpbmNvcnJlY3RseSByb3VuZGVkOlxyXG4gICAgLy8gbG9nWzEwNDg1NzZdKDQ1MDM1OTk2MjczNzA1MDIpID0gMi42MDAwMDAwMDAwMDAwMDAwOTYxMDI3OTUxMTQ0NDc0Ni4uLlxyXG4gICAgLy8gVGhlIGFib3ZlIHJlc3VsdCBjb3JyZWN0bHkgcm91bmRlZCB1c2luZyBST1VORF9DRUlMIHRvIDEgZGVjaW1hbCBwbGFjZSBzaG91bGQgYmUgMi43LCBidXQgaXRcclxuICAgIC8vIHdpbGwgYmUgZ2l2ZW4gYXMgMi42IGFzIHRoZXJlIGFyZSAxNSB6ZXJvcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcmVxdWVzdGVkIGRlY2ltYWwgcGxhY2UsIHNvXHJcbiAgICAvLyB0aGUgZXhhY3QgcmVzdWx0IHdvdWxkIGJlIGFzc3VtZWQgdG8gYmUgMi42LCB3aGljaCByb3VuZGVkIHVzaW5nIFJPVU5EX0NFSUwgdG8gMSBkZWNpbWFsXHJcbiAgICAvLyBwbGFjZSBpcyBzdGlsbCAyLjYuXHJcbiAgICBpZiAoY2hlY2tSb3VuZGluZ0RpZ2l0cyhyLmQsIGsgPSBwciwgcm0pKSB7XHJcblxyXG4gICAgICBkbyB7XHJcbiAgICAgICAgc2QgKz0gMTA7XHJcbiAgICAgICAgbnVtID0gbmF0dXJhbExvZ2FyaXRobShhcmcsIHNkKTtcclxuICAgICAgICBkZW5vbWluYXRvciA9IGlzQmFzZTEwID8gZ2V0TG4xMChDdG9yLCBzZCArIDEwKSA6IG5hdHVyYWxMb2dhcml0aG0oYmFzZSwgc2QpO1xyXG4gICAgICAgIHIgPSBkaXZpZGUobnVtLCBkZW5vbWluYXRvciwgc2QsIDEpO1xyXG5cclxuICAgICAgICBpZiAoIWluZikge1xyXG5cclxuICAgICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQsIGFzIHRoZSBmaXJzdCBtYXkgYmUgNC5cclxuICAgICAgICAgIGlmICgrZGlnaXRzVG9TdHJpbmcoci5kKS5zbGljZShrICsgMSwgayArIDE1KSArIDEgPT0gMWUxNCkge1xyXG4gICAgICAgICAgICByID0gZmluYWxpc2UociwgcHIgKyAxLCAwKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gd2hpbGUgKGNoZWNrUm91bmRpbmdEaWdpdHMoci5kLCBrICs9IDEwLCBybSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzIGFuZCB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICBQLm1heCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoYXJndW1lbnRzLCB0aGlzKTtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLmNvbnN0cnVjdG9yLCBhcmd1bWVudHMsICdsdCcpO1xyXG4gIH07XHJcbiAgICovXHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMgYW5kIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gIFAubWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChhcmd1bWVudHMsIHRoaXMpO1xyXG4gICAgcmV0dXJuIG1heE9yTWluKHRoaXMuY29uc3RydWN0b3IsIGFyZ3VtZW50cywgJ2d0Jyk7XHJcbiAgfTtcclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogIG4gLSAwID0gblxyXG4gICAqICBuIC0gTiA9IE5cclxuICAgKiAgbiAtIEkgPSAtSVxyXG4gICAqICAwIC0gbiA9IC1uXHJcbiAgICogIDAgLSAwID0gMFxyXG4gICAqICAwIC0gTiA9IE5cclxuICAgKiAgMCAtIEkgPSAtSVxyXG4gICAqICBOIC0gbiA9IE5cclxuICAgKiAgTiAtIDAgPSBOXHJcbiAgICogIE4gLSBOID0gTlxyXG4gICAqICBOIC0gSSA9IE5cclxuICAgKiAgSSAtIG4gPSBJXHJcbiAgICogIEkgLSAwID0gSVxyXG4gICAqICBJIC0gTiA9IE5cclxuICAgKiAgSSAtIEkgPSBOXHJcbiAgICpcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG1pbnVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLm1pbnVzID0gUC5zdWIgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGQsIGUsIGksIGosIGssIGxlbiwgcHIsIHJtLCB4ZCwgeGUsIHhMVHksIHlkLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyBub3QgZmluaXRlLi4uXHJcbiAgICBpZiAoIXguZCB8fCAheS5kKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHkgbmVnYXRlZCBpZiB4IGlzIGZpbml0ZSBhbmQgeSBpcyDCsUluZmluaXR5LlxyXG4gICAgICBlbHNlIGlmICh4LmQpIHkucyA9IC15LnM7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIGZpbml0ZSBhbmQgeCBpcyDCsUluZmluaXR5LlxyXG4gICAgICAvLyBSZXR1cm4geCBpZiBib3RoIGFyZSDCsUluZmluaXR5IHdpdGggZGlmZmVyZW50IHNpZ25zLlxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJvdGggYXJlIMKxSW5maW5pdHkgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG4gICAgICBlbHNlIHkgPSBuZXcgQ3Rvcih5LmQgfHwgeC5zICE9PSB5LnMgPyB4IDogTmFOKTtcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHNpZ25zIGRpZmZlci4uLlxyXG4gICAgaWYgKHgucyAhPSB5LnMpIHtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgICAgcmV0dXJuIHgucGx1cyh5KTtcclxuICAgIH1cclxuXHJcbiAgICB4ZCA9IHguZDtcclxuICAgIHlkID0geS5kO1xyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICAvLyBJZiBlaXRoZXIgaXMgemVyby4uLlxyXG4gICAgaWYgKCF4ZFswXSB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgIC8vIFJldHVybiB5IG5lZ2F0ZWQgaWYgeCBpcyB6ZXJvIGFuZCB5IGlzIG5vbi16ZXJvLlxyXG4gICAgICBpZiAoeWRbMF0pIHkucyA9IC15LnM7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8gYW5kIHggaXMgbm9uLXplcm8uXHJcbiAgICAgIGVsc2UgaWYgKHhkWzBdKSB5ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAvLyBGcm9tIElFRUUgNzU0ICgyMDA4KSA2LjM6IDAgLSAwID0gLTAgLSAtMCA9IC0wIHdoZW4gcm91bmRpbmcgdG8gLUluZmluaXR5LlxyXG4gICAgICBlbHNlIHJldHVybiBuZXcgQ3RvcihybSA9PT0gMyA/IC0wIDogMCk7XHJcblxyXG4gICAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB4IGFuZCB5IGFyZSBmaW5pdGUsIG5vbi16ZXJvIG51bWJlcnMgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBiYXNlIDFlNyBleHBvbmVudHMuXHJcbiAgICBlID0gbWF0aGZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgIHhlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKTtcclxuXHJcbiAgICB4ZCA9IHhkLnNsaWNlKCk7XHJcbiAgICBrID0geGUgLSBlO1xyXG5cclxuICAgIC8vIElmIGJhc2UgMWU3IGV4cG9uZW50cyBkaWZmZXIuLi5cclxuICAgIGlmIChrKSB7XHJcbiAgICAgIHhMVHkgPSBrIDwgMDtcclxuXHJcbiAgICAgIGlmICh4TFR5KSB7XHJcbiAgICAgICAgZCA9IHhkO1xyXG4gICAgICAgIGsgPSAtaztcclxuICAgICAgICBsZW4gPSB5ZC5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZCA9IHlkO1xyXG4gICAgICAgIGUgPSB4ZTtcclxuICAgICAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE51bWJlcnMgd2l0aCBtYXNzaXZlbHkgZGlmZmVyZW50IGV4cG9uZW50cyB3b3VsZCByZXN1bHQgaW4gYSB2ZXJ5IGhpZ2ggbnVtYmVyIG9mXHJcbiAgICAgIC8vIHplcm9zIG5lZWRpbmcgdG8gYmUgcHJlcGVuZGVkLCBidXQgdGhpcyBjYW4gYmUgYXZvaWRlZCB3aGlsZSBzdGlsbCBlbnN1cmluZyBjb3JyZWN0XHJcbiAgICAgIC8vIHJvdW5kaW5nIGJ5IGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgemVyb3MgdG8gYE1hdGguY2VpbChwciAvIExPR19CQVNFKSArIDJgLlxyXG4gICAgICBpID0gTWF0aC5tYXgoTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMjtcclxuXHJcbiAgICAgIGlmIChrID4gaSkge1xyXG4gICAgICAgIGsgPSBpO1xyXG4gICAgICAgIGQubGVuZ3RoID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuXHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgICBmb3IgKGkgPSBrOyBpLS07KSBkLnB1c2goMCk7XHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG5cclxuICAgIC8vIEJhc2UgMWU3IGV4cG9uZW50cyBlcXVhbC5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBDaGVjayBkaWdpdHMgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG5cclxuICAgICAgaSA9IHhkLmxlbmd0aDtcclxuICAgICAgbGVuID0geWQubGVuZ3RoO1xyXG4gICAgICB4TFR5ID0gaSA8IGxlbjtcclxuICAgICAgaWYgKHhMVHkpIGxlbiA9IGk7XHJcblxyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoeGRbaV0gIT0geWRbaV0pIHtcclxuICAgICAgICAgIHhMVHkgPSB4ZFtpXSA8IHlkW2ldO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBrID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeExUeSkge1xyXG4gICAgICBkID0geGQ7XHJcbiAgICAgIHhkID0geWQ7XHJcbiAgICAgIHlkID0gZDtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgIH1cclxuXHJcbiAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gQXBwZW5kIHplcm9zIHRvIGB4ZGAgaWYgc2hvcnRlci5cclxuICAgIC8vIERvbid0IGFkZCB6ZXJvcyB0byBgeWRgIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Rpb24gb25seSBuZWVkcyB0byBzdGFydCBhdCBgeWRgIGxlbmd0aC5cclxuICAgIGZvciAoaSA9IHlkLmxlbmd0aCAtIGxlbjsgaSA+IDA7IC0taSkgeGRbbGVuKytdID0gMDtcclxuXHJcbiAgICAvLyBTdWJ0cmFjdCB5ZCBmcm9tIHhkLlxyXG4gICAgZm9yIChpID0geWQubGVuZ3RoOyBpID4gazspIHtcclxuXHJcbiAgICAgIGlmICh4ZFstLWldIDwgeWRbaV0pIHtcclxuICAgICAgICBmb3IgKGogPSBpOyBqICYmIHhkWy0tal0gPT09IDA7KSB4ZFtqXSA9IEJBU0UgLSAxO1xyXG4gICAgICAgIC0teGRbal07XHJcbiAgICAgICAgeGRbaV0gKz0gQkFTRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeGRbaV0gLT0geWRbaV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yICg7IHhkWy0tbGVuXSA9PT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICBmb3IgKDsgeGRbMF0gPT09IDA7IHhkLnNoaWZ0KCkpIC0tZTtcclxuXHJcbiAgICAvLyBaZXJvP1xyXG4gICAgaWYgKCF4ZFswXSkgcmV0dXJuIG5ldyBDdG9yKHJtID09PSAzID8gLTAgOiAwKTtcclxuXHJcbiAgICB5LmQgPSB4ZDtcclxuICAgIHkuZSA9IGdldEJhc2UxMEV4cG9uZW50KHhkLCBlKTtcclxuXHJcbiAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgIG4gJSAwID0gIE5cclxuICAgKiAgIG4gJSBOID0gIE5cclxuICAgKiAgIG4gJSBJID0gIG5cclxuICAgKiAgIDAgJSBuID0gIDBcclxuICAgKiAgLTAgJSBuID0gLTBcclxuICAgKiAgIDAgJSAwID0gIE5cclxuICAgKiAgIDAgJSBOID0gIE5cclxuICAgKiAgIDAgJSBJID0gIDBcclxuICAgKiAgIE4gJSBuID0gIE5cclxuICAgKiAgIE4gJSAwID0gIE5cclxuICAgKiAgIE4gJSBOID0gIE5cclxuICAgKiAgIE4gJSBJID0gIE5cclxuICAgKiAgIEkgJSBuID0gIE5cclxuICAgKiAgIEkgJSAwID0gIE5cclxuICAgKiAgIEkgJSBOID0gIE5cclxuICAgKiAgIEkgJSBJID0gIE5cclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgbW9kdWxvIGB5YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBUaGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIG1vZHVsbyBtb2RlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5tb2R1bG8gPSBQLm1vZCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgcSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIHkgPSBuZXcgQ3Rvcih5KTtcclxuXHJcbiAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgwrFJbmZpbml0eSBvciBOYU4sIG9yIHkgaXMgTmFOIG9yIMKxMC5cclxuICAgIGlmICgheC5kIHx8ICF5LnMgfHwgeS5kICYmICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgIC8vIFJldHVybiB4IGlmIHkgaXMgwrFJbmZpbml0eSBvciB4IGlzIMKxMC5cclxuICAgIGlmICgheS5kIHx8IHguZCAmJiAheC5kWzBdKSB7XHJcbiAgICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgQ3Rvci5wcmVjaXNpb24sIEN0b3Iucm91bmRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFByZXZlbnQgcm91bmRpbmcgb2YgaW50ZXJtZWRpYXRlIGNhbGN1bGF0aW9ucy5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKEN0b3IubW9kdWxvID09IDkpIHtcclxuXHJcbiAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAvLyByZXN1bHQgPSB4IC0gcSAqIHkgICAgd2hlcmUgIDAgPD0gcmVzdWx0IDwgYWJzKHkpXHJcbiAgICAgIHEgPSBkaXZpZGUoeCwgeS5hYnMoKSwgMCwgMywgMSk7XHJcbiAgICAgIHEucyAqPSB5LnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBxID0gZGl2aWRlKHgsIHksIDAsIEN0b3IubW9kdWxvLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBxID0gcS50aW1lcyh5KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHgubWludXMocSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCxcclxuICAgKiBpLmUuIHRoZSBiYXNlIGUgcmFpc2VkIHRvIHRoZSBwb3dlciB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmF0dXJhbEV4cG9uZW50aWFsID0gUC5leHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmF0dXJhbEV4cG9uZW50aWFsKHRoaXMpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLFxyXG4gICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmF0dXJhbExvZ2FyaXRobSA9IFAubG4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmF0dXJhbExvZ2FyaXRobSh0aGlzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG5lZ2F0ZWQsIGkuZS4gYXMgaWYgbXVsdGlwbGllZCBieVxyXG4gICAqIC0xLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5uZWdhdGVkID0gUC5uZWcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xyXG4gICAgeC5zID0gLXgucztcclxuICAgIHJldHVybiBmaW5hbGlzZSh4KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgbiArIDAgPSBuXHJcbiAgICogIG4gKyBOID0gTlxyXG4gICAqICBuICsgSSA9IElcclxuICAgKiAgMCArIG4gPSBuXHJcbiAgICogIDAgKyAwID0gMFxyXG4gICAqICAwICsgTiA9IE5cclxuICAgKiAgMCArIEkgPSBJXHJcbiAgICogIE4gKyBuID0gTlxyXG4gICAqICBOICsgMCA9IE5cclxuICAgKiAgTiArIE4gPSBOXHJcbiAgICogIE4gKyBJID0gTlxyXG4gICAqICBJICsgbiA9IElcclxuICAgKiAgSSArIDAgPSBJXHJcbiAgICogIEkgKyBOID0gTlxyXG4gICAqICBJICsgSSA9IElcclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcGx1cyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5wbHVzID0gUC5hZGQgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGNhcnJ5LCBkLCBlLCBpLCBrLCBsZW4sIHByLCBybSwgeGQsIHlkLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyBub3QgZmluaXRlLi4uXHJcbiAgICBpZiAoIXguZCB8fCAheS5kKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyBmaW5pdGUgYW5kIHggaXMgwrFJbmZpbml0eS5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIHRoZSBzYW1lIHNpZ24uXHJcbiAgICAgIC8vIFJldHVybiBOYU4gaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIGRpZmZlcmVudCBzaWducy5cclxuICAgICAgLy8gUmV0dXJuIHkgaWYgeCBpcyBmaW5pdGUgYW5kIHkgaXMgwrFJbmZpbml0eS5cclxuICAgICAgZWxzZSBpZiAoIXguZCkgeSA9IG5ldyBDdG9yKHkuZCB8fCB4LnMgPT09IHkucyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgcmV0dXJuIHk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8vIElmIHNpZ25zIGRpZmZlci4uLlxyXG4gICAgaWYgKHgucyAhPSB5LnMpIHtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgICAgcmV0dXJuIHgubWludXMoeSk7XHJcbiAgICB9XHJcblxyXG4gICAgeGQgPSB4LmQ7XHJcbiAgICB5ZCA9IHkuZDtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgLy8gSWYgZWl0aGVyIGlzIHplcm8uLi5cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8uXHJcbiAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8uXHJcbiAgICAgIGlmICgheWRbMF0pIHkgPSBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIHByLCBybSkgOiB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHggYW5kIHkgYXJlIGZpbml0ZSwgbm9uLXplcm8gbnVtYmVycyB3aXRoIHRoZSBzYW1lIHNpZ24uXHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIGJhc2UgMWU3IGV4cG9uZW50cy5cclxuICAgIGsgPSBtYXRoZmxvb3IoeC5lIC8gTE9HX0JBU0UpO1xyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgeGQgPSB4ZC5zbGljZSgpO1xyXG4gICAgaSA9IGsgLSBlO1xyXG5cclxuICAgIC8vIElmIGJhc2UgMWU3IGV4cG9uZW50cyBkaWZmZXIuLi5cclxuICAgIGlmIChpKSB7XHJcblxyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBkID0geGQ7XHJcbiAgICAgICAgaSA9IC1pO1xyXG4gICAgICAgIGxlbiA9IHlkLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkID0geWQ7XHJcbiAgICAgICAgZSA9IGs7XHJcbiAgICAgICAgbGVuID0geGQubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBMaW1pdCBudW1iZXIgb2YgemVyb3MgcHJlcGVuZGVkIHRvIG1heChjZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMS5cclxuICAgICAgayA9IE1hdGguY2VpbChwciAvIExPR19CQVNFKTtcclxuICAgICAgbGVuID0gayA+IGxlbiA/IGsgKyAxIDogbGVuICsgMTtcclxuXHJcbiAgICAgIGlmIChpID4gbGVuKSB7XHJcbiAgICAgICAgaSA9IGxlbjtcclxuICAgICAgICBkLmxlbmd0aCA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBOb3RlOiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy5cclxuICAgICAgZC5yZXZlcnNlKCk7XHJcbiAgICAgIGZvciAoOyBpLS07KSBkLnB1c2goMCk7XHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxlbiA9IHhkLmxlbmd0aDtcclxuICAgIGkgPSB5ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gSWYgeWQgaXMgbG9uZ2VyIHRoYW4geGQsIHN3YXAgeGQgYW5kIHlkIHNvIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5LlxyXG4gICAgaWYgKGxlbiAtIGkgPCAwKSB7XHJcbiAgICAgIGkgPSBsZW47XHJcbiAgICAgIGQgPSB5ZDtcclxuICAgICAgeWQgPSB4ZDtcclxuICAgICAgeGQgPSBkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9ubHkgc3RhcnQgYWRkaW5nIGF0IHlkLmxlbmd0aCAtIDEgYXMgdGhlIGZ1cnRoZXIgZGlnaXRzIG9mIHhkIGNhbiBiZSBsZWZ0IGFzIHRoZXkgYXJlLlxyXG4gICAgZm9yIChjYXJyeSA9IDA7IGk7KSB7XHJcbiAgICAgIGNhcnJ5ID0gKHhkWy0taV0gPSB4ZFtpXSArIHlkW2ldICsgY2FycnkpIC8gQkFTRSB8IDA7XHJcbiAgICAgIHhkW2ldICU9IEJBU0U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhcnJ5KSB7XHJcbiAgICAgIHhkLnVuc2hpZnQoY2FycnkpO1xyXG4gICAgICArK2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgemVybywgYXMgK3ggKyAreSAhPSAwICYmIC14ICsgLXkgIT0gMFxyXG4gICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7IHhkWy0tbGVuXSA9PSAwOykgeGQucG9wKCk7XHJcblxyXG4gICAgeS5kID0geGQ7XHJcbiAgICB5LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgZSk7XHJcblxyXG4gICAgcmV0dXJuIGV4dGVybmFsID8gZmluYWxpc2UoeSwgcHIsIHJtKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBbel0ge2Jvb2xlYW58bnVtYmVyfSBXaGV0aGVyIHRvIGNvdW50IGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvczogdHJ1ZSwgZmFsc2UsIDEgb3IgMC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uICh6KSB7XHJcbiAgICB2YXIgayxcclxuICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgaWYgKHogIT09IHZvaWQgMCAmJiB6ICE9PSAhIXogJiYgeiAhPT0gMSAmJiB6ICE9PSAwKSB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyB6KTtcclxuXHJcbiAgICBpZiAoeC5kKSB7XHJcbiAgICAgIGsgPSBnZXRQcmVjaXNpb24oeC5kKTtcclxuICAgICAgaWYgKHogJiYgeC5lICsgMSA+IGspIGsgPSB4LmUgKyAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgayA9IE5hTjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaztcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSB3aG9sZSBudW1iZXIgdXNpbmdcclxuICAgKiByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnJvdW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHguZSArIDEsIEN0b3Iucm91bmRpbmcpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzaW5lIG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstMSwgMV1cclxuICAgKlxyXG4gICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi5cclxuICAgKlxyXG4gICAqIHNpbigwKSAgICAgICAgID0gMFxyXG4gICAqIHNpbigtMCkgICAgICAgID0gLTBcclxuICAgKiBzaW4oSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIHNpbigtSW5maW5pdHkpID0gTmFOXHJcbiAgICogc2luKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuc2luZSA9IFAuc2luID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyBMT0dfQkFTRTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSBzaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID4gMiA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGlzIERlY2ltYWwsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogIHNxcnQoLW4pID0gIE5cclxuICAgKiAgc3FydChOKSAgPSAgTlxyXG4gICAqICBzcXJ0KC1JKSA9ICBOXHJcbiAgICogIHNxcnQoSSkgID0gIElcclxuICAgKiAgc3FydCgwKSAgPSAgMFxyXG4gICAqICBzcXJ0KC0wKSA9IC0wXHJcbiAgICpcclxuICAgKi9cclxuICBQLnNxdWFyZVJvb3QgPSBQLnNxcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbSwgbiwgc2QsIHIsIHJlcCwgdCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIGQgPSB4LmQsXHJcbiAgICAgIGUgPSB4LmUsXHJcbiAgICAgIHMgPSB4LnMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIE5lZ2F0aXZlL05hTi9JbmZpbml0eS96ZXJvP1xyXG4gICAgaWYgKHMgIT09IDEgfHwgIWQgfHwgIWRbMF0pIHtcclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCFzIHx8IHMgPCAwICYmICghZCB8fCBkWzBdKSA/IE5hTiA6IGQgPyB4IDogMSAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgIHMgPSBNYXRoLnNxcnQoK3gpO1xyXG5cclxuICAgIC8vIE1hdGguc3FydCB1bmRlcmZsb3cvb3ZlcmZsb3c/XHJcbiAgICAvLyBQYXNzIHggdG8gTWF0aC5zcXJ0IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7XHJcbiAgICAgIG4gPSBkaWdpdHNUb1N0cmluZyhkKTtcclxuXHJcbiAgICAgIGlmICgobi5sZW5ndGggKyBlKSAlIDIgPT0gMCkgbiArPSAnMCc7XHJcbiAgICAgIHMgPSBNYXRoLnNxcnQobik7XHJcbiAgICAgIGUgPSBtYXRoZmxvb3IoKGUgKyAxKSAvIDIpIC0gKGUgPCAwIHx8IGUgJSAyKTtcclxuXHJcbiAgICAgIGlmIChzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9ICcxZScgKyBlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgciA9IG5ldyBDdG9yKG4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgciA9IG5ldyBDdG9yKHMudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2QgPSAoZSA9IEN0b3IucHJlY2lzaW9uKSArIDM7XHJcblxyXG4gICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLlxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gcjtcclxuICAgICAgciA9IHQucGx1cyhkaXZpZGUoeCwgdCwgc2QgKyAyLCAxKSkudGltZXMoMC41KTtcclxuXHJcbiAgICAgIC8vIFRPRE8/IFJlcGxhY2Ugd2l0aCBmb3ItbG9vcCBhbmQgY2hlY2tSb3VuZGluZ0RpZ2l0cy5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgc2QpID09PSAobiA9IGRpZ2l0c1RvU3RyaW5nKHIuZCkpLnNsaWNlKDAsIHNkKSkge1xyXG4gICAgICAgIG4gPSBuLnNsaWNlKHNkIC0gMywgc2QgKyAxKTtcclxuXHJcbiAgICAgICAgLy8gVGhlIDR0aCByb3VuZGluZyBkaWdpdCBtYXkgYmUgaW4gZXJyb3IgYnkgLTEgc28gaWYgdGhlIDQgcm91bmRpbmcgZGlnaXRzIGFyZSA5OTk5IG9yXHJcbiAgICAgICAgLy8gNDk5OSwgaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5LCBjb250aW51ZSB0aGUgaXRlcmF0aW9uLlxyXG4gICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgLy8gT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCBjaGVjayB0byBzZWUgaWYgcm91bmRpbmcgdXAgZ2l2ZXMgdGhlIGV4YWN0IHJlc3VsdCBhcyB0aGVcclxuICAgICAgICAgIC8vIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHQsIGUgKyAxLCAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzZCArPSA0O1xyXG4gICAgICAgICAgcmVwID0gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgYW4gZXhhY3QgcmVzdWx0LlxyXG4gICAgICAgICAgLy8gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykge1xyXG5cclxuICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICBmaW5hbGlzZShyLCBlICsgMSwgMSk7XHJcbiAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHIsIGUsIEN0b3Iucm91bmRpbmcsIG0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogdGFuKDApICAgICAgICAgPSAwXHJcbiAgICogdGFuKC0wKSAgICAgICAgPSAtMFxyXG4gICAqIHRhbihJbmZpbml0eSkgID0gTmFOXHJcbiAgICogdGFuKC1JbmZpbml0eSkgPSBOYU5cclxuICAgKiB0YW4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50YW5nZW50ID0gUC50YW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDEwO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcblxyXG4gICAgeCA9IHguc2luKCk7XHJcbiAgICB4LnMgPSAxO1xyXG4gICAgeCA9IGRpdmlkZSh4LCBuZXcgQ3RvcigxKS5taW51cyh4LnRpbWVzKHgpKS5zcXJ0KCksIHByICsgMTAsIDApO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gNCA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuICogMCA9IDBcclxuICAgKiAgbiAqIE4gPSBOXHJcbiAgICogIG4gKiBJID0gSVxyXG4gICAqICAwICogbiA9IDBcclxuICAgKiAgMCAqIDAgPSAwXHJcbiAgICogIDAgKiBOID0gTlxyXG4gICAqICAwICogSSA9IE5cclxuICAgKiAgTiAqIG4gPSBOXHJcbiAgICogIE4gKiAwID0gTlxyXG4gICAqICBOICogTiA9IE5cclxuICAgKiAgTiAqIEkgPSBOXHJcbiAgICogIEkgKiBuID0gSVxyXG4gICAqICBJICogMCA9IE5cclxuICAgKiAgSSAqIE4gPSBOXHJcbiAgICogIEkgKiBJID0gSVxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhpcyBEZWNpbWFsIHRpbWVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRpbWVzID0gUC5tdWwgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGNhcnJ5LCBlLCBpLCBrLCByLCByTCwgdCwgeGRMLCB5ZEwsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIHlkID0gKHkgPSBuZXcgQ3Rvcih5KSkuZDtcclxuXHJcbiAgICB5LnMgKj0geC5zO1xyXG5cclxuICAgICAvLyBJZiBlaXRoZXIgaXMgTmFOLCDCsUluZmluaXR5IG9yIMKxMC4uLlxyXG4gICAgaWYgKCF4ZCB8fCAheGRbMF0gfHwgIXlkIHx8ICF5ZFswXSkge1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCF5LnMgfHwgeGQgJiYgIXhkWzBdICYmICF5ZCB8fCB5ZCAmJiAheWRbMF0gJiYgIXhkXHJcblxyXG4gICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTi5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgwrEwIGFuZCB5IGlzIMKxSW5maW5pdHksIG9yIHkgaXMgwrEwIGFuZCB4IGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgPyBOYU5cclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiBlaXRoZXIgaXMgwrEwLlxyXG4gICAgICAgIDogIXhkIHx8ICF5ZCA/IHkucyAvIDAgOiB5LnMgKiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKSArIG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICB4ZEwgPSB4ZC5sZW5ndGg7XHJcbiAgICB5ZEwgPSB5ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gRW5zdXJlIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5LlxyXG4gICAgaWYgKHhkTCA8IHlkTCkge1xyXG4gICAgICByID0geGQ7XHJcbiAgICAgIHhkID0geWQ7XHJcbiAgICAgIHlkID0gcjtcclxuICAgICAgckwgPSB4ZEw7XHJcbiAgICAgIHhkTCA9IHlkTDtcclxuICAgICAgeWRMID0gckw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGlzZSB0aGUgcmVzdWx0IGFycmF5IHdpdGggemVyb3MuXHJcbiAgICByID0gW107XHJcbiAgICByTCA9IHhkTCArIHlkTDtcclxuICAgIGZvciAoaSA9IHJMOyBpLS07KSByLnB1c2goMCk7XHJcblxyXG4gICAgLy8gTXVsdGlwbHkhXHJcbiAgICBmb3IgKGkgPSB5ZEw7IC0taSA+PSAwOykge1xyXG4gICAgICBjYXJyeSA9IDA7XHJcbiAgICAgIGZvciAoayA9IHhkTCArIGk7IGsgPiBpOykge1xyXG4gICAgICAgIHQgPSByW2tdICsgeWRbaV0gKiB4ZFtrIC0gaSAtIDFdICsgY2Fycnk7XHJcbiAgICAgICAgcltrLS1dID0gdCAlIEJBU0UgfCAwO1xyXG4gICAgICAgIGNhcnJ5ID0gdCAvIEJBU0UgfCAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByW2tdID0gKHJba10gKyBjYXJyeSkgJSBCQVNFIHwgMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKDsgIXJbLS1yTF07KSByLnBvcCgpO1xyXG5cclxuICAgIGlmIChjYXJyeSkgKytlO1xyXG4gICAgZWxzZSByLnNoaWZ0KCk7XHJcblxyXG4gICAgeS5kID0gcjtcclxuICAgIHkuZSA9IGdldEJhc2UxMEV4cG9uZW50KHIsIGUpO1xyXG5cclxuICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgMiwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9CaW5hcnkgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICByZXR1cm4gdG9TdHJpbmdCaW5hcnkodGhpcywgMiwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIGBkcGBcclxuICAgKiBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAgb3IgYHJvdW5kaW5nYCBpZiBgcm1gIGlzIG9taXR0ZWQuXHJcbiAgICpcclxuICAgKiBJZiBgZHBgIGlzIG9taXR0ZWQsIHJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9EZWNpbWFsUGxhY2VzID0gUC50b0RQID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcbiAgICBpZiAoZHAgPT09IHZvaWQgMCkgcmV0dXJuIHg7XHJcblxyXG4gICAgY2hlY2tJbnQzMihkcCwgMCwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHgsIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBleHBvbmVudGlhbCBub3RhdGlvbiByb3VuZGVkIHRvXHJcbiAgICogYGRwYCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgIHZhciBzdHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoZHAgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrSW50MzIoZHAsIDAsIE1BWF9ESUdJVFMpO1xyXG5cclxuICAgICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgICAgZWxzZSBjaGVja0ludDMyKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgIHggPSBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgZHAgKyAxLCBybSk7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHRydWUsIGRwICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSA/ICctJyArIHN0ciA6IHN0cjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaW4gbm9ybWFsIChmaXhlZC1wb2ludCkgbm90YXRpb24gdG9cclxuICAgKiBgZHBgIGZpeGVkIGRlY2ltYWwgcGxhY2VzIGFuZCByb3VuZGVkIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYCBvciBgcm91bmRpbmdgIGlmIGBybWAgaXNcclxuICAgKiBvbWl0dGVkLlxyXG4gICAqXHJcbiAgICogQXMgd2l0aCBKYXZhU2NyaXB0IG51bWJlcnMsICgtMCkudG9GaXhlZCgwKSBpcyAnMCcsIGJ1dCBlLmcuICgtMC4wMDAwMSkudG9GaXhlZCgwKSBpcyAnLTAnLlxyXG4gICAqXHJcbiAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLCBidXQgKC0wLjEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgKiAoLTApLnRvRml4ZWQoMSkgaXMgJzAuMCcsIGJ1dCAoLTAuMDEpLnRvRml4ZWQoMSkgaXMgJy0wLjAnLlxyXG4gICAqICgtMCkudG9GaXhlZCgzKSBpcyAnMC4wMDAnLlxyXG4gICAqICgtMC41KS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRml4ZWQgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICB2YXIgc3RyLCB5LFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKGRwID09PSB2b2lkIDApIHtcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKGRwLCAwLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB5ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh5LCBmYWxzZSwgZHAgKyB5LmUgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUbyBkZXRlcm1pbmUgd2hldGhlciB0byBhZGQgdGhlIG1pbnVzIHNpZ24gbG9vayBhdCB0aGUgdmFsdWUgYmVmb3JlIGl0IHdhcyByb3VuZGVkLFxyXG4gICAgLy8gaS5lLiBsb29rIGF0IGB4YCByYXRoZXIgdGhhbiBgeWAuXHJcbiAgICByZXR1cm4geC5pc05lZygpICYmICF4LmlzWmVybygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBhcyBhIHNpbXBsZSBmcmFjdGlvbiB3aXRoIGFuIGludGVnZXJcclxuICAgKiBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICpcclxuICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIG1heGltdW1cclxuICAgKiBkZW5vbWluYXRvci4gSWYgYSBtYXhpbXVtIGRlbm9taW5hdG9yIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZW5vbWluYXRvciB3aWxsIGJlIHRoZSBsb3dlc3RcclxuICAgKiB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS5cclxuICAgKlxyXG4gICAqIFttYXhEXSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBNYXhpbXVtIGRlbm9taW5hdG9yLiBJbnRlZ2VyID49IDEgYW5kIDwgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRnJhY3Rpb24gPSBmdW5jdGlvbiAobWF4RCkge1xyXG4gICAgdmFyIGQsIGQwLCBkMSwgZDIsIGUsIGssIG4sIG4wLCBuMSwgcHIsIHEsIHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICB4ZCA9IHguZCxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4ZCkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIG4xID0gZDAgPSBuZXcgQ3RvcigxKTtcclxuICAgIGQxID0gbjAgPSBuZXcgQ3RvcigwKTtcclxuXHJcbiAgICBkID0gbmV3IEN0b3IoZDEpO1xyXG4gICAgZSA9IGQuZSA9IGdldFByZWNpc2lvbih4ZCkgLSB4LmUgLSAxO1xyXG4gICAgayA9IGUgJSBMT0dfQkFTRTtcclxuICAgIGQuZFswXSA9IG1hdGhwb3coMTAsIGsgPCAwID8gTE9HX0JBU0UgKyBrIDogayk7XHJcblxyXG4gICAgaWYgKG1heEQgPT0gbnVsbCkge1xyXG5cclxuICAgICAgLy8gZCBpcyAxMCoqZSwgdGhlIG1pbmltdW0gbWF4LWRlbm9taW5hdG9yIG5lZWRlZC5cclxuICAgICAgbWF4RCA9IGUgPiAwID8gZCA6IG4xO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbiA9IG5ldyBDdG9yKG1heEQpO1xyXG4gICAgICBpZiAoIW4uaXNJbnQoKSB8fCBuLmx0KG4xKSkgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgbik7XHJcbiAgICAgIG1heEQgPSBuLmd0KGQpID8gKGUgPiAwID8gZCA6IG4xKSA6IG47XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIG4gPSBuZXcgQ3RvcihkaWdpdHNUb1N0cmluZyh4ZCkpO1xyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIEN0b3IucHJlY2lzaW9uID0gZSA9IHhkLmxlbmd0aCAqIExPR19CQVNFICogMjtcclxuXHJcbiAgICBmb3IgKDs7KSAge1xyXG4gICAgICBxID0gZGl2aWRlKG4sIGQsIDAsIDEsIDEpO1xyXG4gICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICBpZiAoZDIuY21wKG1heEQpID09IDEpIGJyZWFrO1xyXG4gICAgICBkMCA9IGQxO1xyXG4gICAgICBkMSA9IGQyO1xyXG4gICAgICBkMiA9IG4xO1xyXG4gICAgICBuMSA9IG4wLnBsdXMocS50aW1lcyhkMikpO1xyXG4gICAgICBuMCA9IGQyO1xyXG4gICAgICBkMiA9IGQ7XHJcbiAgICAgIGQgPSBuLm1pbnVzKHEudGltZXMoZDIpKTtcclxuICAgICAgbiA9IGQyO1xyXG4gICAgfVxyXG5cclxuICAgIGQyID0gZGl2aWRlKG1heEQubWludXMoZDApLCBkMSwgMCwgMSwgMSk7XHJcbiAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgIGQwID0gZDAucGx1cyhkMi50aW1lcyhkMSkpO1xyXG4gICAgbjAucyA9IG4xLnMgPSB4LnM7XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGZyYWN0aW9uIGlzIGNsb3NlciB0byB4LCBuMC9kMCBvciBuMS9kMT9cclxuICAgIHIgPSBkaXZpZGUobjEsIGQxLCBlLCAxKS5taW51cyh4KS5hYnMoKS5jbXAoZGl2aWRlKG4wLCBkMCwgZSwgMSkubWludXMoeCkuYWJzKCkpIDwgMVxyXG4gICAgICAgID8gW24xLCBkMV0gOiBbbjAsIGQwXTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBiYXNlIDE2LCByb3VuZCB0byBgc2RgIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBvcHRpb25hbCBgc2RgIGFyZ3VtZW50IGlzIHByZXNlbnQgdGhlbiByZXR1cm4gYmluYXJ5IGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b0hleGFkZWNpbWFsID0gUC50b0hleCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHJldHVybiB0b1N0cmluZ0JpbmFyeSh0aGlzLCAxNiwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm5zIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgYHlgIGluIHRoZSBkaXJlY3Rpb24gb2Ygcm91bmRpbmdcclxuICAgKiBtb2RlIGBybWAsIG9yIGBEZWNpbWFsLnJvdW5kaW5nYCBpZiBgcm1gIGlzIG9taXR0ZWQsIHRvIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYWx3YXlzIGhhdmUgdGhlIHNhbWUgc2lnbiBhcyB0aGlzIERlY2ltYWwsIHVubGVzcyBlaXRoZXIgdGhpcyBEZWNpbWFsXHJcbiAgICogb3IgYHlgIGlzIE5hTiwgaW4gd2hpY2ggY2FzZSB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYWxzbyBiZSBOYU4uXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdmFsdWUgb2YgYHByZWNpc2lvbmAuXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBtYWduaXR1ZGUgdG8gcm91bmQgdG8gYSBtdWx0aXBsZSBvZi5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBub3QgYW4gaW50ZWdlcjoge3JtfSdcclxuICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBvdXQgb2YgcmFuZ2U6IHtybX0nXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvTmVhcmVzdCA9IGZ1bmN0aW9uICh5LCBybSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgaWYgKHkgPT0gbnVsbCkge1xyXG5cclxuICAgICAgLy8gSWYgeCBpcyBub3QgZmluaXRlLCByZXR1cm4geC5cclxuICAgICAgaWYgKCF4LmQpIHJldHVybiB4O1xyXG5cclxuICAgICAgeSA9IG5ldyBDdG9yKDEpO1xyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB5ID0gbmV3IEN0b3IoeSk7XHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiB4IGlzIG5vdCBmaW5pdGUsIHJldHVybiB4IGlmIHkgaXMgbm90IE5hTiwgZWxzZSBOYU4uXHJcbiAgICAgIGlmICgheC5kKSByZXR1cm4geS5zID8geCA6IHk7XHJcblxyXG4gICAgICAvLyBJZiB5IGlzIG5vdCBmaW5pdGUsIHJldHVybiBJbmZpbml0eSB3aXRoIHRoZSBzaWduIG9mIHggaWYgeSBpcyBJbmZpbml0eSwgZWxzZSBOYU4uXHJcbiAgICAgIGlmICgheS5kKSB7XHJcbiAgICAgICAgaWYgKHkucykgeS5zID0geC5zO1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgeSBpcyBub3QgemVybywgY2FsY3VsYXRlIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHkgdG8geC5cclxuICAgIGlmICh5LmRbMF0pIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgeCA9IGRpdmlkZSh4LCB5LCAwLCBybSwgMSkudGltZXMoeSk7XHJcbiAgICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgICAgZmluYWxpc2UoeCk7XHJcblxyXG4gICAgLy8gSWYgeSBpcyB6ZXJvLCByZXR1cm4gemVybyB3aXRoIHRoZSBzaWduIG9mIHguXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB5LnMgPSB4LnM7XHJcbiAgICAgIHggPSB5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4O1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGNvbnZlcnRlZCB0byBhIG51bWJlciBwcmltaXRpdmUuXHJcbiAgICogWmVybyBrZWVwcyBpdHMgc2lnbi5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gK3RoaXM7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgOCwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9PY3RhbCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHJldHVybiB0b1N0cmluZ0JpbmFyeSh0aGlzLCA4LCBzZCwgcm0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcmFpc2VkIHRvIHRoZSBwb3dlciBgeWAsIHJvdW5kZWRcclxuICAgKiB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogRUNNQVNjcmlwdCBjb21wbGlhbnQuXHJcbiAgICpcclxuICAgKiAgIHBvdyh4LCBOYU4pICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyh4LCDCsTApICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMVxyXG5cclxuICAgKiAgIHBvdyhOYU4sIG5vbi16ZXJvKSAgICAgICAgICAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyhhYnMoeCkgPiAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArSW5maW5pdHlcclxuICAgKiAgIHBvdyhhYnMoeCkgPiAxLCAtSW5maW5pdHkpICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KGFicyh4KSA9PSAxLCDCsUluZmluaXR5KSAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyhhYnMoeCkgPCAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KGFicyh4KSA8IDEsIC1JbmZpbml0eSkgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KCtJbmZpbml0eSwgeSA+IDApICAgICAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KCtJbmZpbml0eSwgeSA8IDApICAgICAgICAgICAgICAgICA9ICswXHJcbiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA+IDApICAgICAgID0gLUluZmluaXR5XHJcbiAgICogICBwb3coLUluZmluaXR5LCBldmVuIGludGVnZXIgPiAwKSAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA8IDApICAgICAgID0gLTBcclxuICAgKiAgIHBvdygtSW5maW5pdHksIGV2ZW4gaW50ZWdlciA8IDApICAgICAgPSArMFxyXG4gICAqICAgcG93KCswLCB5ID4gMCkgICAgICAgICAgICAgICAgICAgICAgICA9ICswXHJcbiAgICogICBwb3coKzAsIHkgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coLTAsIG9kZCBpbnRlZ2VyID4gMCkgICAgICAgICAgICAgID0gLTBcclxuICAgKiAgIHBvdygtMCwgZXZlbiBpbnRlZ2VyID4gMCkgICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KC0wLCBvZGQgaW50ZWdlciA8IDApICAgICAgICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICAgcG93KC0wLCBldmVuIGludGVnZXIgPCAwKSAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KGZpbml0ZSB4IDwgMCwgZmluaXRlIG5vbi1pbnRlZ2VyKSA9IE5hTlxyXG4gICAqXHJcbiAgICogRm9yIG5vbi1pbnRlZ2VyIG9yIHZlcnkgbGFyZ2UgZXhwb25lbnRzIHBvdyh4LCB5KSBpcyBjYWxjdWxhdGVkIHVzaW5nXHJcbiAgICpcclxuICAgKiAgIHheeSA9IGV4cCh5KmxuKHgpKVxyXG4gICAqXHJcbiAgICogQXNzdW1pbmcgdGhlIGZpcnN0IDE1IHJvdW5kaW5nIGRpZ2l0cyBhcmUgZWFjaCBlcXVhbGx5IGxpa2VseSB0byBiZSBhbnkgZGlnaXQgMC05LCB0aGVcclxuICAgKiBwcm9iYWJpbGl0eSBvZiBhbiBpbmNvcnJlY3RseSByb3VuZGVkIHJlc3VsdFxyXG4gICAqIFAoWzQ5XTl7MTR9IHwgWzUwXTB7MTR9KSA9IDIgKiAwLjIgKiAxMF4tMTQgPSA0ZS0xNSA9IDEvMi41ZSsxNFxyXG4gICAqIGkuZS4gMSBpbiAyNTAsMDAwLDAwMCwwMDAsMDAwXHJcbiAgICpcclxuICAgKiBJZiBhIHJlc3VsdCBpcyBpbmNvcnJlY3RseSByb3VuZGVkIHRoZSBtYXhpbXVtIGVycm9yIHdpbGwgYmUgMSB1bHAgKHVuaXQgaW4gbGFzdCBwbGFjZSkuXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBwb3dlciB0byB3aGljaCB0byByYWlzZSB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvUG93ZXIgPSBQLnBvdyA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgZSwgaywgcHIsIHIsIHJtLCBzLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHluID0gKyh5ID0gbmV3IEN0b3IoeSkpO1xyXG5cclxuICAgIC8vIEVpdGhlciDCsUluZmluaXR5LCBOYU4gb3IgwrEwP1xyXG4gICAgaWYgKCF4LmQgfHwgIXkuZCB8fCAheC5kWzBdIHx8ICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihtYXRocG93KCt4LCB5bikpO1xyXG5cclxuICAgIHggPSBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBpZiAoeC5lcSgxKSkgcmV0dXJuIHg7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICBpZiAoeS5lcSgxKSkgcmV0dXJuIGZpbmFsaXNlKHgsIHByLCBybSk7XHJcblxyXG4gICAgLy8geSBleHBvbmVudFxyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgLy8gSWYgeSBpcyBhIHNtYWxsIGludGVnZXIgdXNlIHRoZSAnZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcnIGFsZ29yaXRobS5cclxuICAgIGlmIChlID49IHkuZC5sZW5ndGggLSAxICYmIChrID0geW4gPCAwID8gLXluIDogeW4pIDw9IE1BWF9TQUZFX0lOVEVHRVIpIHtcclxuICAgICAgciA9IGludFBvdyhDdG9yLCB4LCBrLCBwcik7XHJcbiAgICAgIHJldHVybiB5LnMgPCAwID8gbmV3IEN0b3IoMSkuZGl2KHIpIDogZmluYWxpc2UociwgcHIsIHJtKTtcclxuICAgIH1cclxuXHJcbiAgICBzID0geC5zO1xyXG5cclxuICAgIC8vIGlmIHggaXMgbmVnYXRpdmVcclxuICAgIGlmIChzIDwgMCkge1xyXG5cclxuICAgICAgLy8gaWYgeSBpcyBub3QgYW4gaW50ZWdlclxyXG4gICAgICBpZiAoZSA8IHkuZC5sZW5ndGggLSAxKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJlc3VsdCBpcyBwb3NpdGl2ZSBpZiB4IGlzIG5lZ2F0aXZlIGFuZCB0aGUgbGFzdCBkaWdpdCBvZiBpbnRlZ2VyIHkgaXMgZXZlbi5cclxuICAgICAgaWYgKCh5LmRbZV0gJiAxKSA9PSAwKSBzID0gMTtcclxuXHJcbiAgICAgIC8vIGlmIHguZXEoLTEpXHJcbiAgICAgIGlmICh4LmUgPT0gMCAmJiB4LmRbMF0gPT0gMSAmJiB4LmQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICB4LnMgPSBzO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXN0aW1hdGUgcmVzdWx0IGV4cG9uZW50LlxyXG4gICAgLy8geF55ID0gMTBeZSwgIHdoZXJlIGUgPSB5ICogbG9nMTAoeClcclxuICAgIC8vIGxvZzEwKHgpID0gbG9nMTAoeF9zaWduaWZpY2FuZCkgKyB4X2V4cG9uZW50XHJcbiAgICAvLyBsb2cxMCh4X3NpZ25pZmljYW5kKSA9IGxuKHhfc2lnbmlmaWNhbmQpIC8gbG4oMTApXHJcbiAgICBrID0gbWF0aHBvdygreCwgeW4pO1xyXG4gICAgZSA9IGsgPT0gMCB8fCAhaXNGaW5pdGUoaylcclxuICAgICAgPyBtYXRoZmxvb3IoeW4gKiAoTWF0aC5sb2coJzAuJyArIGRpZ2l0c1RvU3RyaW5nKHguZCkpIC8gTWF0aC5MTjEwICsgeC5lICsgMSkpXHJcbiAgICAgIDogbmV3IEN0b3IoayArICcnKS5lO1xyXG5cclxuICAgIC8vIEV4cG9uZW50IGVzdGltYXRlIG1heSBiZSBpbmNvcnJlY3QgZS5nLiB4OiAwLjk5OTk5OTk5OTk5OTk5OTk5OSwgeTogMi4yOSwgZTogMCwgci5lOiAtMS5cclxuXHJcbiAgICAvLyBPdmVyZmxvdy91bmRlcmZsb3c/XHJcbiAgICBpZiAoZSA+IEN0b3IubWF4RSArIDEgfHwgZSA8IEN0b3IubWluRSAtIDEpIHJldHVybiBuZXcgQ3RvcihlID4gMCA/IHMgLyAwIDogMCk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSB4LnMgPSAxO1xyXG5cclxuICAgIC8vIEVzdGltYXRlIHRoZSBleHRyYSBndWFyZCBkaWdpdHMgbmVlZGVkIHRvIGVuc3VyZSBmaXZlIGNvcnJlY3Qgcm91bmRpbmcgZGlnaXRzIGZyb21cclxuICAgIC8vIG5hdHVyYWxMb2dhcml0aG0oeCkuIEV4YW1wbGUgb2YgZmFpbHVyZSB3aXRob3V0IHRoZXNlIGV4dHJhIGRpZ2l0cyAocHJlY2lzaW9uOiAxMCk6XHJcbiAgICAvLyBuZXcgRGVjaW1hbCgyLjMyNDU2KS5wb3coJzIwODc5ODc0MzY1MzQ1NjYuNDY0MTEnKVxyXG4gICAgLy8gc2hvdWxkIGJlIDEuMTYyMzc3ODIzZSs3NjQ5MTQ5MDUxNzM4MTUsIGJ1dCBpcyAxLjE2MjM1NTgyM2UrNzY0OTE0OTA1MTczODE1XHJcbiAgICBrID0gTWF0aC5taW4oMTIsIChlICsgJycpLmxlbmd0aCk7XHJcblxyXG4gICAgLy8gciA9IHheeSA9IGV4cCh5KmxuKHgpKVxyXG4gICAgciA9IG5hdHVyYWxFeHBvbmVudGlhbCh5LnRpbWVzKG5hdHVyYWxMb2dhcml0aG0oeCwgcHIgKyBrKSksIHByKTtcclxuXHJcbiAgICAvLyByIG1heSBiZSBJbmZpbml0eSwgZS5nLiAoMC45OTk5OTk5OTk5OTk5OTk5KS5wb3coLTFlKzQwKVxyXG4gICAgaWYgKHIuZCkge1xyXG5cclxuICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIHJlcXVpcmVkIHByZWNpc2lvbiBwbHVzIGZpdmUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgICByID0gZmluYWxpc2UociwgcHIgKyA1LCAxKTtcclxuXHJcbiAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIFs0OV05OTk5IG9yIFs1MF0wMDAwIGluY3JlYXNlIHRoZSBwcmVjaXNpb24gYnkgMTAgYW5kIHJlY2FsY3VsYXRlXHJcbiAgICAgIC8vIHRoZSByZXN1bHQuXHJcbiAgICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHIuZCwgcHIsIHJtKSkge1xyXG4gICAgICAgIGUgPSBwciArIDEwO1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgaW5jcmVhc2VkIHByZWNpc2lvbiBwbHVzIGZpdmUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgICAgIHIgPSBmaW5hbGlzZShuYXR1cmFsRXhwb25lbnRpYWwoeS50aW1lcyhuYXR1cmFsTG9nYXJpdGhtKHgsIGUgKyBrKSksIGUpLCBlICsgNSwgMSk7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQgKHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdCBtYXkgYmUgNCBvciA5KS5cclxuICAgICAgICBpZiAoK2RpZ2l0c1RvU3RyaW5nKHIuZCkuc2xpY2UocHIgKyAxLCBwciArIDE1KSArIDEgPT0gMWUxNCkge1xyXG4gICAgICAgICAgciA9IGZpbmFsaXNlKHIsIHByICsgMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgci5zID0gcztcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBgc2RgIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIFJldHVybiBleHBvbmVudGlhbCBub3RhdGlvbiBpZiBgc2RgIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50XHJcbiAgICogdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gbm9ybWFsIG5vdGF0aW9uLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHZhciBzdHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoc2QgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB4LmUgPD0gQ3Rvci50b0V4cE5lZyB8fCB4LmUgPj0gQ3Rvci50b0V4cFBvcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB4ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIHNkLCBybSk7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHNkIDw9IHguZSB8fCB4LmUgPD0gQ3Rvci50b0V4cE5lZywgc2QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBgc2RgXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYCwgb3IgdG8gYHByZWNpc2lvbmAgYW5kIGByb3VuZGluZ2AgcmVzcGVjdGl2ZWx5IGlmXHJcbiAgICogb21pdHRlZC5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqICd0b1NEKCkgZGlnaXRzIG91dCBvZiByYW5nZToge3NkfSdcclxuICAgKiAndG9TRCgpIGRpZ2l0cyBub3QgYW4gaW50ZWdlcjoge3NkfSdcclxuICAgKiAndG9TRCgpIHJvdW5kaW5nIG1vZGUgbm90IGFuIGludGVnZXI6IHtybX0nXHJcbiAgICogJ3RvU0QoKSByb3VuZGluZyBtb2RlIG91dCBvZiByYW5nZToge3JtfSdcclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9TaWduaWZpY2FudERpZ2l0cyA9IFAudG9TRCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKHNkID09PSB2b2lkIDApIHtcclxuICAgICAgc2QgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgICBpZiAocm0gPT09IHZvaWQgMCkgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhpcyBEZWNpbWFsIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhblxyXG4gICAqIGB0b0V4cFBvc2AsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIGB0b0V4cE5lZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgeC5lIDw9IEN0b3IudG9FeHBOZWcgfHwgeC5lID49IEN0b3IudG9FeHBQb3MpO1xyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCB0cnVuY2F0ZWQgdG8gYSB3aG9sZSBudW1iZXIuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRydW5jYXRlZCA9IFAudHJ1bmMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyksIHRoaXMuZSArIDEsIDEpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKiBVbmxpa2UgYHRvU3RyaW5nYCwgbmVnYXRpdmUgemVybyB3aWxsIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24uXHJcbiAgICpcclxuICAgKi9cclxuICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHguZSA8PSBDdG9yLnRvRXhwTmVnIHx8IHguZSA+PSBDdG9yLnRvRXhwUG9zKTtcclxuXHJcbiAgICByZXR1cm4geC5pc05lZygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gIC8vIEFkZCBhbGlhc2VzIHRvIG1hdGNoIEJpZ0RlY2ltYWwgbWV0aG9kIG5hbWVzLlxyXG4gIC8vIFAuYWRkID0gUC5wbHVzO1xyXG4gIFAuc3VidHJhY3QgPSBQLm1pbnVzO1xyXG4gIFAubXVsdGlwbHkgPSBQLnRpbWVzO1xyXG4gIFAuZGl2aWRlID0gUC5kaXY7XHJcbiAgUC5yZW1haW5kZXIgPSBQLm1vZDtcclxuICBQLmNvbXBhcmVUbyA9IFAuY21wO1xyXG4gIFAubmVnYXRlID0gUC5uZWc7XHJcbiAgICovXHJcblxyXG5cclxuICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBEZWNpbWFsLnByb3RvdHlwZSAoUCkgYW5kL29yIERlY2ltYWwgbWV0aG9kcywgYW5kIHRoZWlyIGNhbGxlcnMuXHJcblxyXG5cclxuICAvKlxyXG4gICAqICBkaWdpdHNUb1N0cmluZyAgICAgICAgICAgUC5jdWJlUm9vdCwgUC5sb2dhcml0aG0sIFAuc3F1YXJlUm9vdCwgUC50b0ZyYWN0aW9uLCBQLnRvUG93ZXIsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pdGVUb1N0cmluZywgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtXHJcbiAgICogIGNoZWNrSW50MzIgICAgICAgICAgICAgICBQLnRvRGVjaW1hbFBsYWNlcywgUC50b0V4cG9uZW50aWFsLCBQLnRvRml4ZWQsIFAudG9OZWFyZXN0LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50b1ByZWNpc2lvbiwgUC50b1NpZ25pZmljYW50RGlnaXRzLCB0b1N0cmluZ0JpbmFyeSwgcmFuZG9tXHJcbiAgICogIGNoZWNrUm91bmRpbmdEaWdpdHMgICAgICBQLmxvZ2FyaXRobSwgUC50b1Bvd2VyLCBuYXR1cmFsRXhwb25lbnRpYWwsIG5hdHVyYWxMb2dhcml0aG1cclxuICAgKiAgY29udmVydEJhc2UgICAgICAgICAgICAgIHRvU3RyaW5nQmluYXJ5LCBwYXJzZU90aGVyXHJcbiAgICogIGNvcyAgICAgICAgICAgICAgICAgICAgICBQLmNvc1xyXG4gICAqICBkaXZpZGUgICAgICAgICAgICAgICAgICAgUC5hdGFuaCwgUC5jdWJlUm9vdCwgUC5kaXZpZGVkQnksIFAuZGl2aWRlZFRvSW50ZWdlckJ5LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIFAubW9kdWxvLCBQLnNxdWFyZVJvb3QsIFAudGFuLCBQLnRhbmgsIFAudG9GcmFjdGlvbixcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCB0b1N0cmluZ0JpbmFyeSwgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF5bG9yU2VyaWVzLCBhdGFuMiwgcGFyc2VPdGhlclxyXG4gICAqICBmaW5hbGlzZSAgICAgICAgICAgICAgICAgUC5hYnNvbHV0ZVZhbHVlLCBQLmF0YW4sIFAuYXRhbmgsIFAuY2VpbCwgUC5jb3MsIFAuY29zaCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAuY3ViZVJvb3QsIFAuZGl2aWRlZFRvSW50ZWdlckJ5LCBQLmZsb29yLCBQLmxvZ2FyaXRobSwgUC5taW51cyxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAubW9kdWxvLCBQLm5lZ2F0ZWQsIFAucGx1cywgUC5yb3VuZCwgUC5zaW4sIFAuc2luaCwgUC5zcXVhcmVSb290LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50YW4sIFAudGltZXMsIFAudG9EZWNpbWFsUGxhY2VzLCBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCBQLnRvUG93ZXIsIFAudG9QcmVjaXNpb24sIFAudG9TaWduaWZpY2FudERpZ2l0cyxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudHJ1bmNhdGVkLCBkaXZpZGUsIGdldExuMTAsIGdldFBpLCBuYXR1cmFsRXhwb25lbnRpYWwsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBuYXR1cmFsTG9nYXJpdGhtLCBjZWlsLCBmbG9vciwgcm91bmQsIHRydW5jXHJcbiAgICogIGZpbml0ZVRvU3RyaW5nICAgICAgICAgICBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCwgUC50b1ByZWNpc2lvbiwgUC50b1N0cmluZywgUC52YWx1ZU9mLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdCaW5hcnlcclxuICAgKiAgZ2V0QmFzZTEwRXhwb25lbnQgICAgICAgIFAubWludXMsIFAucGx1cywgUC50aW1lcywgcGFyc2VPdGhlclxyXG4gICAqICBnZXRMbjEwICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIG5hdHVyYWxMb2dhcml0aG1cclxuICAgKiAgZ2V0UGkgICAgICAgICAgICAgICAgICAgIFAuYWNvcywgUC5hc2luLCBQLmF0YW4sIHRvTGVzc1RoYW5IYWxmUGksIGF0YW4yXHJcbiAgICogIGdldFByZWNpc2lvbiAgICAgICAgICAgICBQLnByZWNpc2lvbiwgUC50b0ZyYWN0aW9uXHJcbiAgICogIGdldFplcm9TdHJpbmcgICAgICAgICAgICBkaWdpdHNUb1N0cmluZywgZmluaXRlVG9TdHJpbmdcclxuICAgKiAgaW50UG93ICAgICAgICAgICAgICAgICAgIFAudG9Qb3dlciwgcGFyc2VPdGhlclxyXG4gICAqICBpc09kZCAgICAgICAgICAgICAgICAgICAgdG9MZXNzVGhhbkhhbGZQaVxyXG4gICAqICBtYXhPck1pbiAgICAgICAgICAgICAgICAgbWF4LCBtaW5cclxuICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgIFAubmF0dXJhbEV4cG9uZW50aWFsLCBQLnRvUG93ZXJcclxuICAgKiAgbmF0dXJhbExvZ2FyaXRobSAgICAgICAgIFAuYWNvc2gsIFAuYXNpbmgsIFAuYXRhbmgsIFAubG9nYXJpdGhtLCBQLm5hdHVyYWxMb2dhcml0aG0sXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRvUG93ZXIsIG5hdHVyYWxFeHBvbmVudGlhbFxyXG4gICAqICBub25GaW5pdGVUb1N0cmluZyAgICAgICAgZmluaXRlVG9TdHJpbmcsIHRvU3RyaW5nQmluYXJ5XHJcbiAgICogIHBhcnNlRGVjaW1hbCAgICAgICAgICAgICBEZWNpbWFsXHJcbiAgICogIHBhcnNlT3RoZXIgICAgICAgICAgICAgICBEZWNpbWFsXHJcbiAgICogIHNpbiAgICAgICAgICAgICAgICAgICAgICBQLnNpblxyXG4gICAqICB0YXlsb3JTZXJpZXMgICAgICAgICAgICAgUC5jb3NoLCBQLnNpbmgsIGNvcywgc2luXHJcbiAgICogIHRvTGVzc1RoYW5IYWxmUGkgICAgICAgICBQLmNvcywgUC5zaW5cclxuICAgKiAgdG9TdHJpbmdCaW5hcnkgICAgICAgICAgIFAudG9CaW5hcnksIFAudG9IZXhhZGVjaW1hbCwgUC50b09jdGFsXHJcbiAgICogIHRydW5jYXRlICAgICAgICAgICAgICAgICBpbnRQb3dcclxuICAgKlxyXG4gICAqICBUaHJvd3M6ICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIFAucHJlY2lzaW9uLCBQLnRvRnJhY3Rpb24sIGNoZWNrSW50MzIsIGdldExuMTAsIGdldFBpLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbExvZ2FyaXRobSwgY29uZmlnLCBwYXJzZU90aGVyLCByYW5kb20sIERlY2ltYWxcclxuICAgKi9cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGRpZ2l0c1RvU3RyaW5nKGQpIHtcclxuICAgIHZhciBpLCBrLCB3cyxcclxuICAgICAgaW5kZXhPZkxhc3RXb3JkID0gZC5sZW5ndGggLSAxLFxyXG4gICAgICBzdHIgPSAnJyxcclxuICAgICAgdyA9IGRbMF07XHJcblxyXG4gICAgaWYgKGluZGV4T2ZMYXN0V29yZCA+IDApIHtcclxuICAgICAgc3RyICs9IHc7XHJcbiAgICAgIGZvciAoaSA9IDE7IGkgPCBpbmRleE9mTGFzdFdvcmQ7IGkrKykge1xyXG4gICAgICAgIHdzID0gZFtpXSArICcnO1xyXG4gICAgICAgIGsgPSBMT0dfQkFTRSAtIHdzLmxlbmd0aDtcclxuICAgICAgICBpZiAoaykgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICAgICAgc3RyICs9IHdzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3ID0gZFtpXTtcclxuICAgICAgd3MgPSB3ICsgJyc7XHJcbiAgICAgIGsgPSBMT0dfQkFTRSAtIHdzLmxlbmd0aDtcclxuICAgICAgaWYgKGspIHN0ciArPSBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIGlmICh3ID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAnMCc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zIG9mIGxhc3Qgdy5cclxuICAgIGZvciAoOyB3ICUgMTAgPT09IDA7KSB3IC89IDEwO1xyXG5cclxuICAgIHJldHVybiBzdHIgKyB3O1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGNoZWNrSW50MzIoaSwgbWluLCBtYXgpIHtcclxuICAgIGlmIChpICE9PSB+fmkgfHwgaSA8IG1pbiB8fCBpID4gbWF4KSB7XHJcbiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIGkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ2hlY2sgNSByb3VuZGluZyBkaWdpdHMgaWYgYHJlcGVhdGluZ2AgaXMgbnVsbCwgNCBvdGhlcndpc2UuXHJcbiAgICogYHJlcGVhdGluZyA9PSBudWxsYCBpZiBjYWxsZXIgaXMgYGxvZ2Agb3IgYHBvd2AsXHJcbiAgICogYHJlcGVhdGluZyAhPSBudWxsYCBpZiBjYWxsZXIgaXMgYG5hdHVyYWxMb2dhcml0aG1gIG9yIGBuYXR1cmFsRXhwb25lbnRpYWxgLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNoZWNrUm91bmRpbmdEaWdpdHMoZCwgaSwgcm0sIHJlcGVhdGluZykge1xyXG4gICAgdmFyIGRpLCBrLCByLCByZDtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgYXJyYXkgZC5cclxuICAgIGZvciAoayA9IGRbMF07IGsgPj0gMTA7IGsgLz0gMTApIC0taTtcclxuXHJcbiAgICAvLyBJcyB0aGUgcm91bmRpbmcgZGlnaXQgaW4gdGhlIGZpcnN0IHdvcmQgb2YgZD9cclxuICAgIGlmICgtLWkgPCAwKSB7XHJcbiAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgIGRpID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRpID0gTWF0aC5jZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcbiAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaSBpcyB0aGUgaW5kZXggKDAgLSA2KSBvZiB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAvLyBFLmcuIGlmIHdpdGhpbiB0aGUgd29yZCAzNDg3NTYzIHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdCBpcyA1LFxyXG4gICAgLy8gdGhlbiBpID0gNCwgayA9IDEwMDAsIHJkID0gMzQ4NzU2MyAlIDEwMDAgPSA1NjNcclxuICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpO1xyXG4gICAgcmQgPSBkW2RpXSAlIGsgfCAwO1xyXG5cclxuICAgIGlmIChyZXBlYXRpbmcgPT0gbnVsbCkge1xyXG4gICAgICBpZiAoaSA8IDMpIHtcclxuICAgICAgICBpZiAoaSA9PSAwKSByZCA9IHJkIC8gMTAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMCB8IDA7XHJcbiAgICAgICAgciA9IHJtIDwgNCAmJiByZCA9PSA5OTk5OSB8fCBybSA+IDMgJiYgcmQgPT0gNDk5OTkgfHwgcmQgPT0gNTAwMDAgfHwgcmQgPT0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gKHJtIDwgNCAmJiByZCArIDEgPT0gayB8fCBybSA+IDMgJiYgcmQgKyAxID09IGsgLyAyKSAmJlxyXG4gICAgICAgICAgKGRbZGkgKyAxXSAvIGsgLyAxMDAgfCAwKSA9PSBtYXRocG93KDEwLCBpIC0gMikgLSAxIHx8XHJcbiAgICAgICAgICAgIChyZCA9PSBrIC8gMiB8fCByZCA9PSAwKSAmJiAoZFtkaSArIDFdIC8gayAvIDEwMCB8IDApID09IDA7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpIDwgNCkge1xyXG4gICAgICAgIGlmIChpID09IDApIHJkID0gcmQgLyAxMDAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMDAgfCAwO1xyXG4gICAgICAgIGVsc2UgaWYgKGkgPT0gMikgcmQgPSByZCAvIDEwIHwgMDtcclxuICAgICAgICByID0gKHJlcGVhdGluZyB8fCBybSA8IDQpICYmIHJkID09IDk5OTkgfHwgIXJlcGVhdGluZyAmJiBybSA+IDMgJiYgcmQgPT0gNDk5OTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gKChyZXBlYXRpbmcgfHwgcm0gPCA0KSAmJiByZCArIDEgPT0gayB8fFxyXG4gICAgICAgICghcmVwZWF0aW5nICYmIHJtID4gMykgJiYgcmQgKyAxID09IGsgLyAyKSAmJlxyXG4gICAgICAgICAgKGRbZGkgKyAxXSAvIGsgLyAxMDAwIHwgMCkgPT0gbWF0aHBvdygxMCwgaSAtIDMpIC0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENvbnZlcnQgc3RyaW5nIG9mIGBiYXNlSW5gIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYGJhc2VPdXRgLlxyXG4gIC8vIEVnLiBjb252ZXJ0QmFzZSgnMjU1JywgMTAsIDE2KSByZXR1cm5zIFsxNSwgMTVdLlxyXG4gIC8vIEVnLiBjb252ZXJ0QmFzZSgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gIGZ1bmN0aW9uIGNvbnZlcnRCYXNlKHN0ciwgYmFzZUluLCBiYXNlT3V0KSB7XHJcbiAgICB2YXIgaixcclxuICAgICAgYXJyID0gWzBdLFxyXG4gICAgICBhcnJMLFxyXG4gICAgICBpID0gMCxcclxuICAgICAgc3RyTCA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgZm9yICg7IGkgPCBzdHJMOykge1xyXG4gICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07KSBhcnJbYXJyTF0gKj0gYmFzZUluO1xyXG4gICAgICBhcnJbMF0gKz0gTlVNRVJBTFMuaW5kZXhPZihzdHIuY2hhckF0KGkrKykpO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PT0gdm9pZCAwKSBhcnJbaiArIDFdID0gMDtcclxuICAgICAgICAgIGFycltqICsgMV0gKz0gYXJyW2pdIC8gYmFzZU91dCB8IDA7XHJcbiAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyLnJldmVyc2UoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIGNvcyh4KSA9IDEgLSB4XjIvMiEgKyB4XjQvNCEgLSAuLi5cclxuICAgKiB8eHwgPCBwaS8yXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3NpbmUoQ3RvciwgeCkge1xyXG4gICAgdmFyIGssIHksXHJcbiAgICAgIGxlbiA9IHguZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gQXJndW1lbnQgcmVkdWN0aW9uOiBjb3MoNHgpID0gOCooY29zXjQoeCkgLSBjb3NeMih4KSkgKyAxXHJcbiAgICAvLyBpLmUuIGNvcyh4KSA9IDgqKGNvc140KHgvNCkgLSBjb3NeMih4LzQpKSArIDFcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICBpZiAobGVuIDwgMzIpIHtcclxuICAgICAgayA9IE1hdGguY2VpbChsZW4gLyAzKTtcclxuICAgICAgeSA9ICgxIC8gdGlueVBvdyg0LCBrKSkudG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGsgPSAxNjtcclxuICAgICAgeSA9ICcyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwJztcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiArPSBrO1xyXG5cclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMSwgeC50aW1lcyh5KSwgbmV3IEN0b3IoMSkpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICBmb3IgKHZhciBpID0gazsgaS0tOykge1xyXG4gICAgICB2YXIgY29zMnggPSB4LnRpbWVzKHgpO1xyXG4gICAgICB4ID0gY29zMngudGltZXMoY29zMngpLm1pbnVzKGNvczJ4KS50aW1lcyg4KS5wbHVzKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uIC09IGs7XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBQZXJmb3JtIGRpdmlzaW9uIGluIHRoZSBzcGVjaWZpZWQgYmFzZS5cclxuICAgKi9cclxuICB2YXIgZGl2aWRlID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAvLyBBc3N1bWVzIG5vbi16ZXJvIHggYW5kIGssIGFuZCBoZW5jZSBub24temVybyByZXN1bHQuXHJcbiAgICBmdW5jdGlvbiBtdWx0aXBseUludGVnZXIoeCwgaywgYmFzZSkge1xyXG4gICAgICB2YXIgdGVtcCxcclxuICAgICAgICBjYXJyeSA9IDAsXHJcbiAgICAgICAgaSA9IHgubGVuZ3RoO1xyXG5cclxuICAgICAgZm9yICh4ID0geC5zbGljZSgpOyBpLS07KSB7XHJcbiAgICAgICAgdGVtcCA9IHhbaV0gKiBrICsgY2Fycnk7XHJcbiAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlIHwgMDtcclxuICAgICAgICBjYXJyeSA9IHRlbXAgLyBiYXNlIHwgMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNhcnJ5KSB4LnVuc2hpZnQoY2FycnkpO1xyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGFyZShhLCBiLCBhTCwgYkwpIHtcclxuICAgICAgdmFyIGksIHI7XHJcblxyXG4gICAgICBpZiAoYUwgIT0gYkwpIHtcclxuICAgICAgICByID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGkgPSByID0gMDsgaSA8IGFMOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgciA9IGFbaV0gPiBiW2ldID8gMSA6IC0xO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLlxyXG4gICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICBhW2FMXSAtPSBpO1xyXG4gICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7XHJcbiAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOykgYS5zaGlmdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAoeCwgeSwgcHIsIHJtLCBkcCwgYmFzZSkge1xyXG4gICAgICB2YXIgY21wLCBlLCBpLCBrLCBsb2dCYXNlLCBtb3JlLCBwcm9kLCBwcm9kTCwgcSwgcWQsIHJlbSwgcmVtTCwgcmVtMCwgc2QsIHQsIHhpLCB4TCwgeWQwLFxyXG4gICAgICAgIHlMLCB5eixcclxuICAgICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgICBzaWduID0geC5zID09IHkucyA/IDEgOiAtMSxcclxuICAgICAgICB4ZCA9IHguZCxcclxuICAgICAgICB5ZCA9IHkuZDtcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4sIEluZmluaXR5IG9yIDA/XHJcbiAgICAgIGlmICgheGQgfHwgIXhkWzBdIHx8ICF5ZCB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBDdG9yKC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgIXgucyB8fCAheS5zIHx8ICh4ZCA/IHlkICYmIHhkWzBdID09IHlkWzBdIDogIXlkKSA/IE5hTiA6XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIDAgb3IgeSBpcyDCsUluZmluaXR5LCBvciByZXR1cm4gwrFJbmZpbml0eSBhcyB5IGlzIDAuXHJcbiAgICAgICAgICB4ZCAmJiB4ZFswXSA9PSAwIHx8ICF5ZCA/IHNpZ24gKiAwIDogc2lnbiAvIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYmFzZSkge1xyXG4gICAgICAgIGxvZ0Jhc2UgPSAxO1xyXG4gICAgICAgIGUgPSB4LmUgLSB5LmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgICAgbG9nQmFzZSA9IExPR19CQVNFO1xyXG4gICAgICAgIGUgPSBtYXRoZmxvb3IoeC5lIC8gbG9nQmFzZSkgLSBtYXRoZmxvb3IoeS5lIC8gbG9nQmFzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHlMID0geWQubGVuZ3RoO1xyXG4gICAgICB4TCA9IHhkLmxlbmd0aDtcclxuICAgICAgcSA9IG5ldyBDdG9yKHNpZ24pO1xyXG4gICAgICBxZCA9IHEuZCA9IFtdO1xyXG5cclxuICAgICAgLy8gUmVzdWx0IGV4cG9uZW50IG1heSBiZSBvbmUgbGVzcyB0aGFuIGUuXHJcbiAgICAgIC8vIFRoZSBkaWdpdCBhcnJheSBvZiBhIERlY2ltYWwgZnJvbSB0b1N0cmluZ0JpbmFyeSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChpID0gMDsgeWRbaV0gPT0gKHhkW2ldIHx8IDApOyBpKyspO1xyXG5cclxuICAgICAgaWYgKHlkW2ldID4gKHhkW2ldIHx8IDApKSBlLS07XHJcblxyXG4gICAgICBpZiAocHIgPT0gbnVsbCkge1xyXG4gICAgICAgIHNkID0gcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZHApIHtcclxuICAgICAgICBzZCA9IHByICsgKHguZSAtIHkuZSkgKyAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNkID0gcHI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzZCA8IDApIHtcclxuICAgICAgICBxZC5wdXNoKDEpO1xyXG4gICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHByZWNpc2lvbiBpbiBudW1iZXIgb2YgYmFzZSAxMCBkaWdpdHMgdG8gYmFzZSAxZTcgZGlnaXRzLlxyXG4gICAgICAgIHNkID0gc2QgLyBsb2dCYXNlICsgMiB8IDA7XHJcbiAgICAgICAgaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIGRpdmlzb3IgPCAxZTdcclxuICAgICAgICBpZiAoeUwgPT0gMSkge1xyXG4gICAgICAgICAgayA9IDA7XHJcbiAgICAgICAgICB5ZCA9IHlkWzBdO1xyXG4gICAgICAgICAgc2QrKztcclxuXHJcbiAgICAgICAgICAvLyBrIGlzIHRoZSBjYXJyeS5cclxuICAgICAgICAgIGZvciAoOyAoaSA8IHhMIHx8IGspICYmIHNkLS07IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gayAqIGJhc2UgKyAoeGRbaV0gfHwgMCk7XHJcbiAgICAgICAgICAgIHFkW2ldID0gdCAvIHlkIHwgMDtcclxuICAgICAgICAgICAgayA9IHQgJSB5ZCB8IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbW9yZSA9IGsgfHwgaSA8IHhMO1xyXG5cclxuICAgICAgICAvLyBkaXZpc29yID49IDFlN1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gTm9ybWFsaXNlIHhkIGFuZCB5ZCBzbyBoaWdoZXN0IG9yZGVyIGRpZ2l0IG9mIHlkIGlzID49IGJhc2UvMlxyXG4gICAgICAgICAgayA9IGJhc2UgLyAoeWRbMF0gKyAxKSB8IDA7XHJcblxyXG4gICAgICAgICAgaWYgKGsgPiAxKSB7XHJcbiAgICAgICAgICAgIHlkID0gbXVsdGlwbHlJbnRlZ2VyKHlkLCBrLCBiYXNlKTtcclxuICAgICAgICAgICAgeGQgPSBtdWx0aXBseUludGVnZXIoeGQsIGssIGJhc2UpO1xyXG4gICAgICAgICAgICB5TCA9IHlkLmxlbmd0aDtcclxuICAgICAgICAgICAgeEwgPSB4ZC5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeGkgPSB5TDtcclxuICAgICAgICAgIHJlbSA9IHhkLnNsaWNlKDAsIHlMKTtcclxuICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuXHJcbiAgICAgICAgICBmb3IgKDsgcmVtTCA8IHlMOykgcmVtW3JlbUwrK10gPSAwO1xyXG5cclxuICAgICAgICAgIHl6ID0geWQuc2xpY2UoKTtcclxuICAgICAgICAgIHl6LnVuc2hpZnQoMCk7XHJcbiAgICAgICAgICB5ZDAgPSB5ZFswXTtcclxuXHJcbiAgICAgICAgICBpZiAoeWRbMV0gPj0gYmFzZSAvIDIpICsreWQwO1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgayA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgY21wID0gY29tcGFyZSh5ZCwgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wIDwgMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIGsuXHJcbiAgICAgICAgICAgICAgcmVtMCA9IHJlbVswXTtcclxuICAgICAgICAgICAgICBpZiAoeUwgIT0gcmVtTCkgcmVtMCA9IHJlbTAgKiBiYXNlICsgKHJlbVsxXSB8fCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gayB3aWxsIGJlIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgayA9IHJlbTAgLyB5ZDAgfCAwO1xyXG5cclxuICAgICAgICAgICAgICAvLyAgQWxnb3JpdGhtOlxyXG4gICAgICAgICAgICAgIC8vICAxLiBwcm9kdWN0ID0gZGl2aXNvciAqIHRyaWFsIGRpZ2l0IChrKVxyXG4gICAgICAgICAgICAgIC8vICAyLiBpZiBwcm9kdWN0ID4gcmVtYWluZGVyOiBwcm9kdWN0IC09IGRpdmlzb3IsIGstLVxyXG4gICAgICAgICAgICAgIC8vICAzLiByZW1haW5kZXIgLT0gcHJvZHVjdFxyXG4gICAgICAgICAgICAgIC8vICA0LiBpZiBwcm9kdWN0IHdhcyA8IHJlbWFpbmRlciBhdCAyOlxyXG4gICAgICAgICAgICAgIC8vICAgIDUuIGNvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvclxyXG4gICAgICAgICAgICAgIC8vICAgIDYuIElmIHJlbWFpbmRlciA+IGRpdmlzb3I6IHJlbWFpbmRlciAtPSBkaXZpc29yLCBrKytcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGsgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoayA+PSBiYXNlKSBrID0gYmFzZSAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHByb2QgPSBtdWx0aXBseUludGVnZXIoeWQsIGssIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgY21wID0gY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID4gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGstLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChwcm9kLCB5TCA8IHByb2RMID8geXogOiB5ZCwgcHJvZEwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY21wIGlzIC0xLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgayBpcyAwLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbXBhcmUgeWQgYW5kIHJlbSBhZ2FpbiBiZWxvdywgc28gY2hhbmdlIGNtcCB0byAxXHJcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBpdC4gSWYgayBpcyAxIHRoZXJlIGlzIGEgbmVlZCB0byBjb21wYXJlIHlkIGFuZCByZW0gYWdhaW4gYmVsb3cuXHJcbiAgICAgICAgICAgICAgICBpZiAoayA9PSAwKSBjbXAgPSBrID0gMTtcclxuICAgICAgICAgICAgICAgIHByb2QgPSB5ZC5zbGljZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kLnVuc2hpZnQoMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCBwcm9kLCByZW1MLCBiYXNlKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCBwcmV2aW91cyByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCBuZXcgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgY21wID0gY29tcGFyZSh5ZCwgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IG5ldyByZW1haW5kZXIsIHN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICBpZiAoY21wIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICBrKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHlMIDwgcmVtTCA/IHl6IDogeWQsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgaysrO1xyXG4gICAgICAgICAgICAgIHJlbSA9IFswXTtcclxuICAgICAgICAgICAgfSAgICAvLyBpZiBjbXAgPT09IDEsIGsgd2lsbCBiZSAwXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5leHQgZGlnaXQsIGssIHRvIHRoZSByZXN1bHQgYXJyYXkuXHJcbiAgICAgICAgICAgIHFkW2krK10gPSBrO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChjbXAgJiYgcmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4ZFt4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGRbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gd2hpbGUgKCh4aSsrIDwgeEwgfHwgcmVtWzBdICE9PSB2b2lkIDApICYmIHNkLS0pO1xyXG5cclxuICAgICAgICAgIG1vcmUgPSByZW1bMF0gIT09IHZvaWQgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExlYWRpbmcgemVybz9cclxuICAgICAgICBpZiAoIXFkWzBdKSBxZC5zaGlmdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBsb2dCYXNlIGlzIDEgd2hlbiBkaXZpZGUgaXMgYmVpbmcgdXNlZCBmb3IgYmFzZSBjb252ZXJzaW9uLlxyXG4gICAgICBpZiAobG9nQmFzZSA9PSAxKSB7XHJcbiAgICAgICAgcS5lID0gZTtcclxuICAgICAgICBpbmV4YWN0ID0gbW9yZTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFkWzBdLlxyXG4gICAgICAgIGZvciAoaSA9IDEsIGsgPSBxZFswXTsgayA+PSAxMDsgayAvPSAxMCkgaSsrO1xyXG4gICAgICAgIHEuZSA9IGkgKyBlICogbG9nQmFzZSAtIDE7XHJcblxyXG4gICAgICAgIGZpbmFsaXNlKHEsIGRwID8gcHIgKyBxLmUgKyAxIDogcHIsIHJtLCBtb3JlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHE7XHJcbiAgICB9O1xyXG4gIH0pKCk7XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJvdW5kIGB4YCB0byBgc2RgIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICogQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgKi9cclxuICAgZnVuY3Rpb24gZmluYWxpc2UoeCwgc2QsIHJtLCBpc1RydW5jYXRlZCkge1xyXG4gICAgdmFyIGRpZ2l0cywgaSwgaiwgaywgcmQsIHJvdW5kVXAsIHcsIHhkLCB4ZGksXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIERvbid0IHJvdW5kIGlmIHNkIGlzIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgb3V0OiBpZiAoc2QgIT0gbnVsbCkge1xyXG4gICAgICB4ZCA9IHguZDtcclxuXHJcbiAgICAgIC8vIEluZmluaXR5L05hTi5cclxuICAgICAgaWYgKCF4ZCkgcmV0dXJuIHg7XHJcblxyXG4gICAgICAvLyByZDogdGhlIHJvdW5kaW5nIGRpZ2l0LCBpLmUuIHRoZSBkaWdpdCBhZnRlciB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgLy8gdzogdGhlIHdvcmQgb2YgeGQgY29udGFpbmluZyByZCwgYSBiYXNlIDFlNyBudW1iZXIuXHJcbiAgICAgIC8vIHhkaTogdGhlIGluZGV4IG9mIHcgd2l0aGluIHhkLlxyXG4gICAgICAvLyBkaWdpdHM6IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuXHJcbiAgICAgIC8vIGk6IHdoYXQgd291bGQgYmUgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiB3IGlmIGFsbCB0aGUgbnVtYmVycyB3ZXJlIDcgZGlnaXRzIGxvbmcgKGkuZS4gaWZcclxuICAgICAgLy8gdGhleSBoYWQgbGVhZGluZyB6ZXJvcylcclxuICAgICAgLy8gajogaWYgPiAwLCB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiB3IChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuXHJcbiAgICAgIC8vIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkgeGQuXHJcbiAgICAgIGZvciAoZGlnaXRzID0gMSwgayA9IHhkWzBdOyBrID49IDEwOyBrIC89IDEwKSBkaWdpdHMrKztcclxuICAgICAgaSA9IHNkIC0gZGlnaXRzO1xyXG5cclxuICAgICAgLy8gSXMgdGhlIHJvdW5kaW5nIGRpZ2l0IGluIHRoZSBmaXJzdCB3b3JkIG9mIHhkP1xyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBpICs9IExPR19CQVNFO1xyXG4gICAgICAgIGogPSBzZDtcclxuICAgICAgICB3ID0geGRbeGRpID0gMF07XHJcblxyXG4gICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3LlxyXG4gICAgICAgIHJkID0gdyAvIG1hdGhwb3coMTAsIGRpZ2l0cyAtIGogLSAxKSAlIDEwIHwgMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ZGkgPSBNYXRoLmNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTtcclxuICAgICAgICBrID0geGQubGVuZ3RoO1xyXG4gICAgICAgIGlmICh4ZGkgPj0gaykge1xyXG4gICAgICAgICAgaWYgKGlzVHJ1bmNhdGVkKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBOZWVkZWQgYnkgYG5hdHVyYWxFeHBvbmVudGlhbGAsIGBuYXR1cmFsTG9nYXJpdGhtYCBhbmQgYHNxdWFyZVJvb3RgLlxyXG4gICAgICAgICAgICBmb3IgKDsgaysrIDw9IHhkaTspIHhkLnB1c2goMCk7XHJcbiAgICAgICAgICAgIHcgPSByZCA9IDA7XHJcbiAgICAgICAgICAgIGRpZ2l0cyA9IDE7XHJcbiAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyAxO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3ID0gayA9IHhkW3hkaV07XHJcblxyXG4gICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuXHJcbiAgICAgICAgICBmb3IgKGRpZ2l0cyA9IDE7IGsgPj0gMTA7IGsgLz0gMTApIGRpZ2l0cysrO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIHcuXHJcbiAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIHcsIGFkanVzdGVkIGZvciBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcgaXMgZ2l2ZW4gYnkgTE9HX0JBU0UgLSBkaWdpdHMuXHJcbiAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgZGlnaXRzO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3LlxyXG4gICAgICAgICAgcmQgPSBqIDwgMCA/IDAgOiB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaiAtIDEpICUgMTAgfCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQXJlIHRoZXJlIGFueSBub24temVybyBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0P1xyXG4gICAgICBpc1RydW5jYXRlZCA9IGlzVHJ1bmNhdGVkIHx8IHNkIDwgMCB8fFxyXG4gICAgICAgIHhkW3hkaSArIDFdICE9PSB2b2lkIDAgfHwgKGogPCAwID8gdyA6IHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSkpO1xyXG5cclxuICAgICAgLy8gVGhlIGV4cHJlc3Npb24gYHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSlgIHJldHVybnMgYWxsIHRoZSBkaWdpdHMgb2YgdyB0byB0aGUgcmlnaHRcclxuICAgICAgLy8gb2YgdGhlIGRpZ2l0IGF0IChsZWZ0LXRvLXJpZ2h0KSBpbmRleCBqLCBlLmcuIGlmIHcgaXMgOTA4NzE0IGFuZCBqIGlzIDIsIHRoZSBleHByZXNzaW9uXHJcbiAgICAgIC8vIHdpbGwgZ2l2ZSA3MTQuXHJcblxyXG4gICAgICByb3VuZFVwID0gcm0gPCA0XHJcbiAgICAgICAgPyAocmQgfHwgaXNUcnVuY2F0ZWQpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgaXNUcnVuY2F0ZWQgfHwgcm0gPT0gNiAmJlxyXG5cclxuICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBvZGQuXHJcbiAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaikgOiAwIDogeGRbeGRpIC0gMV0pICUgMTApICYgMSB8fFxyXG4gICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICBpZiAoc2QgPCAxIHx8ICF4ZFswXSkge1xyXG4gICAgICAgIHhkLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgaWYgKHJvdW5kVXApIHtcclxuXHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHNkIHRvIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgc2QgLT0geC5lICsgMTtcclxuXHJcbiAgICAgICAgICAvLyAxLCAwLjEsIDAuMDEsIDAuMDAxLCAwLjAwMDEgZXRjLlxyXG4gICAgICAgICAgeGRbMF0gPSBtYXRocG93KDEwLCAoTE9HX0JBU0UgLSBzZCAlIExPR19CQVNFKSAlIExPR19CQVNFKTtcclxuICAgICAgICAgIHguZSA9IC1zZCB8fCAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHhkWzBdID0geC5lID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgZXhjZXNzIGRpZ2l0cy5cclxuICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgIHhkLmxlbmd0aCA9IHhkaTtcclxuICAgICAgICBrID0gMTtcclxuICAgICAgICB4ZGktLTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ZC5sZW5ndGggPSB4ZGkgKyAxO1xyXG4gICAgICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpO1xyXG5cclxuICAgICAgICAvLyBFLmcuIDU2NzAwIGJlY29tZXMgNTYwMDAgaWYgNyBpcyB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgLy8gaiA+IDAgbWVhbnMgaSA+IG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcuXHJcbiAgICAgICAgeGRbeGRpXSA9IGogPiAwID8gKHcgLyBtYXRocG93KDEwLCBkaWdpdHMgLSBqKSAlIG1hdGhwb3coMTAsIGopIHwgMCkgKiBrIDogMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJvdW5kVXApIHtcclxuICAgICAgICBmb3IgKDs7KSB7XHJcblxyXG4gICAgICAgICAgLy8gSXMgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaW4gdGhlIGZpcnN0IHdvcmQgb2YgeGQ/XHJcbiAgICAgICAgICBpZiAoeGRpID09IDApIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhkWzBdIGJlZm9yZSBrIGlzIGFkZGVkLlxyXG4gICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0geGRbMF07IGogPj0gMTA7IGogLz0gMTApIGkrKztcclxuICAgICAgICAgICAgaiA9IHhkWzBdICs9IGs7XHJcbiAgICAgICAgICAgIGZvciAoayA9IDE7IGogPj0gMTA7IGogLz0gMTApIGsrKztcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGkgIT0gayB0aGUgbGVuZ3RoIGhhcyBpbmNyZWFzZWQuXHJcbiAgICAgICAgICAgIGlmIChpICE9IGspIHtcclxuICAgICAgICAgICAgICB4LmUrKztcclxuICAgICAgICAgICAgICBpZiAoeGRbMF0gPT0gQkFTRSkgeGRbMF0gPSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHhkW3hkaV0gKz0gaztcclxuICAgICAgICAgICAgaWYgKHhkW3hkaV0gIT0gQkFTRSkgYnJlYWs7XHJcbiAgICAgICAgICAgIHhkW3hkaS0tXSA9IDA7XHJcbiAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSB4ZC5sZW5ndGg7IHhkWy0taV0gPT09IDA7KSB4ZC5wb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXh0ZXJuYWwpIHtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoeC5lID4gQ3Rvci5tYXhFKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgICAgeC5lID0gTmFOO1xyXG5cclxuICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICB9IGVsc2UgaWYgKHguZSA8IEN0b3IubWluRSkge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgeC5kID0gWzBdO1xyXG4gICAgICAgIC8vIEN0b3IudW5kZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgfSAvLyBlbHNlIEN0b3IudW5kZXJmbG93ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gZmluaXRlVG9TdHJpbmcoeCwgaXNFeHAsIHNkKSB7XHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSkgcmV0dXJuIG5vbkZpbml0ZVRvU3RyaW5nKHgpO1xyXG4gICAgdmFyIGssXHJcbiAgICAgIGUgPSB4LmUsXHJcbiAgICAgIHN0ciA9IGRpZ2l0c1RvU3RyaW5nKHguZCksXHJcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGlzRXhwKSB7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHtcclxuICAgICAgICBzdHIgPSBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpICsgZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgICAgfSBlbHNlIGlmIChsZW4gPiAxKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0gc3RyICsgKHguZSA8IDAgPyAnZScgOiAnZSsnKSArIHguZTtcclxuICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuICAgICAgc3RyID0gJzAuJyArIGdldFplcm9TdHJpbmcoLWUgLSAxKSArIHN0cjtcclxuICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBsZW4pID4gMCkgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICB9IGVsc2UgaWYgKGUgPj0gbGVuKSB7XHJcbiAgICAgIHN0ciArPSBnZXRaZXJvU3RyaW5nKGUgKyAxIC0gbGVuKTtcclxuICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBlIC0gMSkgPiAwKSBzdHIgPSBzdHIgKyAnLicgKyBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKChrID0gZSArIDEpIDwgbGVuKSBzdHIgPSBzdHIuc2xpY2UoMCwgaykgKyAnLicgKyBzdHIuc2xpY2Uoayk7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHtcclxuICAgICAgICBpZiAoZSArIDEgPT09IGxlbikgc3RyICs9ICcuJztcclxuICAgICAgICBzdHIgKz0gZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50IGZyb20gdGhlIGJhc2UgMWU3IGV4cG9uZW50LlxyXG4gIGZ1bmN0aW9uIGdldEJhc2UxMEV4cG9uZW50KGRpZ2l0cywgZSkge1xyXG4gICAgdmFyIHcgPSBkaWdpdHNbMF07XHJcblxyXG4gICAgLy8gQWRkIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuXHJcbiAgICBmb3IgKCBlICo9IExPR19CQVNFOyB3ID49IDEwOyB3IC89IDEwKSBlKys7XHJcbiAgICByZXR1cm4gZTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRMbjEwKEN0b3IsIHNkLCBwcikge1xyXG4gICAgaWYgKHNkID4gTE4xMF9QUkVDSVNJT04pIHtcclxuXHJcbiAgICAgIC8vIFJlc2V0IGdsb2JhbCBzdGF0ZSBpbiBjYXNlIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LlxyXG4gICAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICAgIGlmIChwcikgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgICAgdGhyb3cgRXJyb3IocHJlY2lzaW9uTGltaXRFeGNlZWRlZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoTE4xMCksIHNkLCAxLCB0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRQaShDdG9yLCBzZCwgcm0pIHtcclxuICAgIGlmIChzZCA+IFBJX1BSRUNJU0lPTikgdGhyb3cgRXJyb3IocHJlY2lzaW9uTGltaXRFeGNlZWRlZCk7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoUEkpLCBzZCwgcm0sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdldFByZWNpc2lvbihkaWdpdHMpIHtcclxuICAgIHZhciB3ID0gZGlnaXRzLmxlbmd0aCAtIDEsXHJcbiAgICAgIGxlbiA9IHcgKiBMT0dfQkFTRSArIDE7XHJcblxyXG4gICAgdyA9IGRpZ2l0c1t3XTtcclxuXHJcbiAgICAvLyBJZiBub24temVyby4uLlxyXG4gICAgaWYgKHcpIHtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3Qgd29yZC5cclxuICAgICAgZm9yICg7IHcgJSAxMCA9PSAwOyB3IC89IDEwKSBsZW4tLTtcclxuXHJcbiAgICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3Qgd29yZC5cclxuICAgICAgZm9yICh3ID0gZGlnaXRzWzBdOyB3ID49IDEwOyB3IC89IDEwKSBsZW4rKztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGVuO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdldFplcm9TdHJpbmcoaykge1xyXG4gICAgdmFyIHpzID0gJyc7XHJcbiAgICBmb3IgKDsgay0tOykgenMgKz0gJzAnO1xyXG4gICAgcmV0dXJuIHpzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIERlY2ltYWwgYHhgIHRvIHRoZSBwb3dlciBgbmAsIHdoZXJlIGBuYCBpcyBhblxyXG4gICAqIGludGVnZXIgb2YgdHlwZSBudW1iZXIuXHJcbiAgICpcclxuICAgKiBJbXBsZW1lbnRzICdleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZycuIENhbGxlZCBieSBgcG93YCBhbmQgYHBhcnNlT3RoZXJgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaW50UG93KEN0b3IsIHgsIG4sIHByKSB7XHJcbiAgICB2YXIgaXNUcnVuY2F0ZWQsXHJcbiAgICAgIHIgPSBuZXcgQ3RvcigxKSxcclxuXHJcbiAgICAgIC8vIE1heCBuIG9mIDkwMDcxOTkyNTQ3NDA5OTEgdGFrZXMgNTMgbG9vcCBpdGVyYXRpb25zLlxyXG4gICAgICAvLyBNYXhpbXVtIGRpZ2l0cyBhcnJheSBsZW5ndGg7IGxlYXZlcyBbMjgsIDM0XSBndWFyZCBkaWdpdHMuXHJcbiAgICAgIGsgPSBNYXRoLmNlaWwocHIgLyBMT0dfQkFTRSArIDQpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICBpZiAobiAlIDIpIHtcclxuICAgICAgICByID0gci50aW1lcyh4KTtcclxuICAgICAgICBpZiAodHJ1bmNhdGUoci5kLCBrKSkgaXNUcnVuY2F0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuID0gbWF0aGZsb29yKG4gLyAyKTtcclxuICAgICAgaWYgKG4gPT09IDApIHtcclxuXHJcbiAgICAgICAgLy8gVG8gZW5zdXJlIGNvcnJlY3Qgcm91bmRpbmcgd2hlbiByLmQgaXMgdHJ1bmNhdGVkLCBpbmNyZW1lbnQgdGhlIGxhc3Qgd29yZCBpZiBpdCBpcyB6ZXJvLlxyXG4gICAgICAgIG4gPSByLmQubGVuZ3RoIC0gMTtcclxuICAgICAgICBpZiAoaXNUcnVuY2F0ZWQgJiYgci5kW25dID09PSAwKSArK3IuZFtuXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgeCA9IHgudGltZXMoeCk7XHJcbiAgICAgIHRydW5jYXRlKHguZCwgayk7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGlzT2RkKG4pIHtcclxuICAgIHJldHVybiBuLmRbbi5kLmxlbmd0aCAtIDFdICYgMTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIEhhbmRsZSBgbWF4YCBhbmQgYG1pbmAuIGBsdGd0YCBpcyAnbHQnIG9yICdndCcuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbWF4T3JNaW4oQ3RvciwgYXJncywgbHRndCkge1xyXG4gICAgdmFyIHksXHJcbiAgICAgIHggPSBuZXcgQ3RvcihhcmdzWzBdKSxcclxuICAgICAgaSA9IDA7XHJcblxyXG4gICAgZm9yICg7ICsraSA8IGFyZ3MubGVuZ3RoOykge1xyXG4gICAgICB5ID0gbmV3IEN0b3IoYXJnc1tpXSk7XHJcbiAgICAgIGlmICgheS5zKSB7XHJcbiAgICAgICAgeCA9IHk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSBpZiAoeFtsdGd0XSh5KSkge1xyXG4gICAgICAgIHggPSB5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBleHBvbmVudGlhbCBvZiBgeGAgcm91bmRlZCB0byBgc2RgIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzLlxyXG4gICAqXHJcbiAgICogVGF5bG9yL01hY2xhdXJpbiBzZXJpZXMuXHJcbiAgICpcclxuICAgKiBleHAoeCkgPSB4XjAvMCEgKyB4XjEvMSEgKyB4XjIvMiEgKyB4XjMvMyEgKyAuLi5cclxuICAgKlxyXG4gICAqIEFyZ3VtZW50IHJlZHVjdGlvbjpcclxuICAgKiAgIFJlcGVhdCB4ID0geCAvIDMyLCBrICs9IDUsIHVudGlsIHx4fCA8IDAuMVxyXG4gICAqICAgZXhwKHgpID0gZXhwKHggLyAyXmspXigyXmspXHJcbiAgICpcclxuICAgKiBQcmV2aW91c2x5LCB0aGUgYXJndW1lbnQgd2FzIGluaXRpYWxseSByZWR1Y2VkIGJ5XHJcbiAgICogZXhwKHgpID0gZXhwKHIpICogMTBeayAgd2hlcmUgciA9IHggLSBrICogbG4xMCwgayA9IGZsb29yKHggLyBsbjEwKVxyXG4gICAqIHRvIGZpcnN0IHB1dCByIGluIHRoZSByYW5nZSBbMCwgbG4xMF0sIGJlZm9yZSBkaXZpZGluZyBieSAzMiB1bnRpbCB8eHwgPCAwLjEsIGJ1dCB0aGlzIHdhc1xyXG4gICAqIGZvdW5kIHRvIGJlIHNsb3dlciB0aGFuIGp1c3QgZGl2aWRpbmcgcmVwZWF0ZWRseSBieSAzMiBhcyBhYm92ZS5cclxuICAgKlxyXG4gICAqIE1heCBpbnRlZ2VyIGFyZ3VtZW50OiBleHAoJzIwNzIzMjY1ODM2OTQ2NDEzJykgPSA2LjNlKzkwMDAwMDAwMDAwMDAwMDBcclxuICAgKiBNaW4gaW50ZWdlciBhcmd1bWVudDogZXhwKCctMjA3MjMyNjU4MzY5NDY0MTEnKSA9IDEuMmUtOTAwMDAwMDAwMDAwMDAwMFxyXG4gICAqIChNYXRoIG9iamVjdCBpbnRlZ2VyIG1pbi9tYXg6IE1hdGguZXhwKDcwOSkgPSA4LjJlKzMwNywgTWF0aC5leHAoLTc0NSkgPSA1ZS0zMjQpXHJcbiAgICpcclxuICAgKiAgZXhwKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqICBleHAoLUluZmluaXR5KSA9IDBcclxuICAgKiAgZXhwKE5hTikgICAgICAgPSBOYU5cclxuICAgKiAgZXhwKMKxMCkgICAgICAgID0gMVxyXG4gICAqXHJcbiAgICogIGV4cCh4KSBpcyBub24tdGVybWluYXRpbmcgZm9yIGFueSBmaW5pdGUsIG5vbi16ZXJvIHguXHJcbiAgICpcclxuICAgKiAgVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0bHkgcm91bmRlZC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG5hdHVyYWxFeHBvbmVudGlhbCh4LCBzZCkge1xyXG4gICAgdmFyIGRlbm9taW5hdG9yLCBndWFyZCwgaiwgcG93LCBzdW0sIHQsIHdwcixcclxuICAgICAgcmVwID0gMCxcclxuICAgICAgaSA9IDAsXHJcbiAgICAgIGsgPSAwLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG5cclxuICAgIC8vIDAvTmFOL0luZmluaXR5P1xyXG4gICAgaWYgKCF4LmQgfHwgIXguZFswXSB8fCB4LmUgPiAxNykge1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKHguZFxyXG4gICAgICAgID8gIXguZFswXSA/IDEgOiB4LnMgPCAwID8gMCA6IDEgLyAwXHJcbiAgICAgICAgOiB4LnMgPyB4LnMgPCAwID8gMCA6IHggOiAwIC8gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgd3ByID0gcHI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3cHIgPSBzZDtcclxuICAgIH1cclxuXHJcbiAgICB0ID0gbmV3IEN0b3IoMC4wMzEyNSk7XHJcblxyXG4gICAgLy8gd2hpbGUgYWJzKHgpID49IDAuMVxyXG4gICAgd2hpbGUgKHguZSA+IC0yKSB7XHJcblxyXG4gICAgICAvLyB4ID0geCAvIDJeNVxyXG4gICAgICB4ID0geC50aW1lcyh0KTtcclxuICAgICAgayArPSA1O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVzZSAyICogbG9nMTAoMl5rKSArIDUgKGVtcGlyaWNhbGx5IGRlcml2ZWQpIHRvIGVzdGltYXRlIHRoZSBpbmNyZWFzZSBpbiBwcmVjaXNpb25cclxuICAgIC8vIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpcnN0IDQgcm91bmRpbmcgZGlnaXRzIGFyZSBjb3JyZWN0LlxyXG4gICAgZ3VhcmQgPSBNYXRoLmxvZyhtYXRocG93KDIsIGspKSAvIE1hdGguTE4xMCAqIDIgKyA1IHwgMDtcclxuICAgIHdwciArPSBndWFyZDtcclxuICAgIGRlbm9taW5hdG9yID0gcG93ID0gc3VtID0gbmV3IEN0b3IoMSk7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwcjtcclxuXHJcbiAgICBmb3IgKDs7KSB7XHJcbiAgICAgIHBvdyA9IGZpbmFsaXNlKHBvdy50aW1lcyh4KSwgd3ByLCAxKTtcclxuICAgICAgZGVub21pbmF0b3IgPSBkZW5vbWluYXRvci50aW1lcygrK2kpO1xyXG4gICAgICB0ID0gc3VtLnBsdXMoZGl2aWRlKHBvdywgZGVub21pbmF0b3IsIHdwciwgMSkpO1xyXG5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgd3ByKSA9PT0gZGlnaXRzVG9TdHJpbmcoc3VtLmQpLnNsaWNlKDAsIHdwcikpIHtcclxuICAgICAgICBqID0gaztcclxuICAgICAgICB3aGlsZSAoai0tKSBzdW0gPSBmaW5hbGlzZShzdW0udGltZXMoc3VtKSwgd3ByLCAxKTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgWzQ5XTk5OS5cclxuICAgICAgICAvLyBJZiBzbywgcmVwZWF0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZVxyXG4gICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDE4LCByb3VuZGluZzogMVxyXG4gICAgICAgIC8vIGV4cCgxOC40MDQyNzI0NjI1OTUwMzQwODM1Njc3OTM5MTk4NDM3NjEpID0gOTgzNzI1NjAuMTIyOTk5OTk5OSAoc2hvdWxkIGJlIDk4MzcyNTYwLjEyMylcclxuICAgICAgICAvLyBgd3ByIC0gZ3VhcmRgIGlzIHRoZSBpbmRleCBvZiBmaXJzdCByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBpZiAoc2QgPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgIGlmIChyZXAgPCAzICYmIGNoZWNrUm91bmRpbmdEaWdpdHMoc3VtLmQsIHdwciAtIGd1YXJkLCBybSwgcmVwKSkge1xyXG4gICAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHdwciArPSAxMDtcclxuICAgICAgICAgICAgZGVub21pbmF0b3IgPSBwb3cgPSB0ID0gbmV3IEN0b3IoMSk7XHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgICByZXArKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGlzZShzdW0sIEN0b3IucHJlY2lzaW9uID0gcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN1bSA9IHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYHhgIHJvdW5kZWQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cy5cclxuICAgKlxyXG4gICAqICBsbigtbikgICAgICAgID0gTmFOXHJcbiAgICogIGxuKDApICAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiAgbG4oLTApICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICBsbigxKSAgICAgICAgID0gMFxyXG4gICAqICBsbihJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiAgbG4oLUluZmluaXR5KSA9IE5hTlxyXG4gICAqICBsbihOYU4pICAgICAgID0gTmFOXHJcbiAgICpcclxuICAgKiAgbG4obikgKG4gIT0gMSkgaXMgbm9uLXRlcm1pbmF0aW5nLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbmF0dXJhbExvZ2FyaXRobSh5LCBzZCkge1xyXG4gICAgdmFyIGMsIGMwLCBkZW5vbWluYXRvciwgZSwgbnVtZXJhdG9yLCByZXAsIHN1bSwgdCwgd3ByLCB4MSwgeDIsXHJcbiAgICAgIG4gPSAxLFxyXG4gICAgICBndWFyZCA9IDEwLFxyXG4gICAgICB4ID0geSxcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmcsXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcblxyXG4gICAgLy8gSXMgeCBuZWdhdGl2ZSBvciBJbmZpbml0eSwgTmFOLCAwIG9yIDE/XHJcbiAgICBpZiAoeC5zIDwgMCB8fCAheGQgfHwgIXhkWzBdIHx8ICF4LmUgJiYgeGRbMF0gPT0gMSAmJiB4ZC5sZW5ndGggPT0gMSkge1xyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoeGQgJiYgIXhkWzBdID8gLTEgLyAwIDogeC5zICE9IDEgPyBOYU4gOiB4ZCA/IDAgOiB4KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2QgPT0gbnVsbCkge1xyXG4gICAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG4gICAgICB3cHIgPSBwcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdwciA9IHNkO1xyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gd3ByICs9IGd1YXJkO1xyXG4gICAgYyA9IGRpZ2l0c1RvU3RyaW5nKHhkKTtcclxuICAgIGMwID0gYy5jaGFyQXQoMCk7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKGUgPSB4LmUpIDwgMS41ZTE1KSB7XHJcblxyXG4gICAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICAgIC8vIFRoZSBzZXJpZXMgY29udmVyZ2VzIGZhc3RlciB0aGUgY2xvc2VyIHRoZSBhcmd1bWVudCBpcyB0byAxLCBzbyB1c2luZ1xyXG4gICAgICAvLyBsbihhXmIpID0gYiAqIGxuKGEpLCAgIGxuKGEpID0gbG4oYV5iKSAvIGJcclxuICAgICAgLy8gbXVsdGlwbHkgdGhlIGFyZ3VtZW50IGJ5IGl0c2VsZiB1bnRpbCB0aGUgbGVhZGluZyBkaWdpdHMgb2YgdGhlIHNpZ25pZmljYW5kIGFyZSA3LCA4LCA5LFxyXG4gICAgICAvLyAxMCwgMTEsIDEyIG9yIDEzLCByZWNvcmRpbmcgdGhlIG51bWJlciBvZiBtdWx0aXBsaWNhdGlvbnMgc28gdGhlIHN1bSBvZiB0aGUgc2VyaWVzIGNhblxyXG4gICAgICAvLyBsYXRlciBiZSBkaXZpZGVkIGJ5IHRoaXMgbnVtYmVyLCB0aGVuIHNlcGFyYXRlIG91dCB0aGUgcG93ZXIgb2YgMTAgdXNpbmdcclxuICAgICAgLy8gbG4oYSoxMF5iKSA9IGxuKGEpICsgYipsbigxMCkuXHJcblxyXG4gICAgICAvLyBtYXggbiBpcyAyMSAoZ2l2ZXMgMC45LCAxLjAgb3IgMS4xKSAoOWUxNSAvIDIxID0gNC4yZTE0KS5cclxuICAgICAgLy93aGlsZSAoYzAgPCA5ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDEpIHtcclxuICAgICAgLy8gbWF4IG4gaXMgNiAoZ2l2ZXMgMC43IC0gMS4zKVxyXG4gICAgICB3aGlsZSAoYzAgPCA3ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDMpIHtcclxuICAgICAgICB4ID0geC50aW1lcyh5KTtcclxuICAgICAgICBjID0gZGlnaXRzVG9TdHJpbmcoeC5kKTtcclxuICAgICAgICBjMCA9IGMuY2hhckF0KDApO1xyXG4gICAgICAgIG4rKztcclxuICAgICAgfVxyXG5cclxuICAgICAgZSA9IHguZTtcclxuXHJcbiAgICAgIGlmIChjMCA+IDEpIHtcclxuICAgICAgICB4ID0gbmV3IEN0b3IoJzAuJyArIGMpO1xyXG4gICAgICAgIGUrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gbmV3IEN0b3IoYzAgKyAnLicgKyBjLnNsaWNlKDEpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIFRoZSBhcmd1bWVudCByZWR1Y3Rpb24gbWV0aG9kIGFib3ZlIG1heSByZXN1bHQgaW4gb3ZlcmZsb3cgaWYgdGhlIGFyZ3VtZW50IHkgaXMgYSBtYXNzaXZlXHJcbiAgICAgIC8vIG51bWJlciB3aXRoIGV4cG9uZW50ID49IDE1MDAwMDAwMDAwMDAwMDAgKDllMTUgLyA2ID0gMS41ZTE1KSwgc28gaW5zdGVhZCByZWNhbGwgdGhpc1xyXG4gICAgICAvLyBmdW5jdGlvbiB1c2luZyBsbih4KjEwXmUpID0gbG4oeCkgKyBlKmxuKDEwKS5cclxuICAgICAgdCA9IGdldExuMTAoQ3Rvciwgd3ByICsgMiwgcHIpLnRpbWVzKGUgKyAnJyk7XHJcbiAgICAgIHggPSBuYXR1cmFsTG9nYXJpdGhtKG5ldyBDdG9yKGMwICsgJy4nICsgYy5zbGljZSgxKSksIHdwciAtIGd1YXJkKS5wbHVzKHQpO1xyXG4gICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG5cclxuICAgICAgcmV0dXJuIHNkID09IG51bGwgPyBmaW5hbGlzZSh4LCBwciwgcm0sIGV4dGVybmFsID0gdHJ1ZSkgOiB4O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHgxIGlzIHggcmVkdWNlZCB0byBhIHZhbHVlIG5lYXIgMS5cclxuICAgIHgxID0geDtcclxuXHJcbiAgICAvLyBUYXlsb3Igc2VyaWVzLlxyXG4gICAgLy8gbG4oeSkgPSBsbigoMSArIHgpLygxIC0geCkpID0gMih4ICsgeF4zLzMgKyB4XjUvNSArIHheNy83ICsgLi4uKVxyXG4gICAgLy8gd2hlcmUgeCA9ICh5IC0gMSkvKHkgKyAxKSAgICAofHh8IDwgMSlcclxuICAgIHN1bSA9IG51bWVyYXRvciA9IHggPSBkaXZpZGUoeC5taW51cygxKSwgeC5wbHVzKDEpLCB3cHIsIDEpO1xyXG4gICAgeDIgPSBmaW5hbGlzZSh4LnRpbWVzKHgpLCB3cHIsIDEpO1xyXG4gICAgZGVub21pbmF0b3IgPSAzO1xyXG5cclxuICAgIGZvciAoOzspIHtcclxuICAgICAgbnVtZXJhdG9yID0gZmluYWxpc2UobnVtZXJhdG9yLnRpbWVzKHgyKSwgd3ByLCAxKTtcclxuICAgICAgdCA9IHN1bS5wbHVzKGRpdmlkZShudW1lcmF0b3IsIG5ldyBDdG9yKGRlbm9taW5hdG9yKSwgd3ByLCAxKSk7XHJcblxyXG4gICAgICBpZiAoZGlnaXRzVG9TdHJpbmcodC5kKS5zbGljZSgwLCB3cHIpID09PSBkaWdpdHNUb1N0cmluZyhzdW0uZCkuc2xpY2UoMCwgd3ByKSkge1xyXG4gICAgICAgIHN1bSA9IHN1bS50aW1lcygyKTtcclxuXHJcbiAgICAgICAgLy8gUmV2ZXJzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLiBDaGVjayB0aGF0IGUgaXMgbm90IDAgYmVjYXVzZSwgYmVzaWRlcyBwcmV2ZW50aW5nIGFuXHJcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgY2FsY3VsYXRpb24sIC0wICsgMCA9ICswIGFuZCB0byBlbnN1cmUgY29ycmVjdCByb3VuZGluZyAtMCBuZWVkcyB0byBzdGF5IC0wLlxyXG4gICAgICAgIGlmIChlICE9PSAwKSBzdW0gPSBzdW0ucGx1cyhnZXRMbjEwKEN0b3IsIHdwciArIDIsIHByKS50aW1lcyhlICsgJycpKTtcclxuICAgICAgICBzdW0gPSBkaXZpZGUoc3VtLCBuZXcgQ3RvcihuKSwgd3ByLCAxKTtcclxuXHJcbiAgICAgICAgLy8gSXMgcm0gPiAzIGFuZCB0aGUgZmlyc3QgNCByb3VuZGluZyBkaWdpdHMgNDk5OSwgb3Igcm0gPCA0IChvciB0aGUgc3VtbWF0aW9uIGhhc1xyXG4gICAgICAgIC8vIGJlZW4gcmVwZWF0ZWQgcHJldmlvdXNseSkgYW5kIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyA5OTk5P1xyXG4gICAgICAgIC8vIElmIHNvLCByZXN0YXJ0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZVxyXG4gICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDEyLCByb3VuZGluZzogMVxyXG4gICAgICAgIC8vIGxuKDEzNTUyMDAyOC42MTI2MDkxNzE0MjY1MzgxNTMzKSA9IDE4LjcyNDYyOTk5OTkgd2hlbiBpdCBzaG91bGQgYmUgMTguNzI0NjMuXHJcbiAgICAgICAgLy8gYHdwciAtIGd1YXJkYCBpcyB0aGUgaW5kZXggb2YgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHN1bS5kLCB3cHIgLSBndWFyZCwgcm0sIHJlcCkpIHtcclxuICAgICAgICAgICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgKz0gZ3VhcmQ7XHJcbiAgICAgICAgICAgIHQgPSBudW1lcmF0b3IgPSB4ID0gZGl2aWRlKHgxLm1pbnVzKDEpLCB4MS5wbHVzKDEpLCB3cHIsIDEpO1xyXG4gICAgICAgICAgICB4MiA9IGZpbmFsaXNlKHgudGltZXMoeCksIHdwciwgMSk7XHJcbiAgICAgICAgICAgIGRlbm9taW5hdG9yID0gcmVwID0gMTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGlzZShzdW0sIEN0b3IucHJlY2lzaW9uID0gcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN1bSA9IHQ7XHJcbiAgICAgIGRlbm9taW5hdG9yICs9IDI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gwrFJbmZpbml0eSwgTmFOLlxyXG4gIGZ1bmN0aW9uIG5vbkZpbml0ZVRvU3RyaW5nKHgpIHtcclxuICAgIC8vIFVuc2lnbmVkLlxyXG4gICAgcmV0dXJuIFN0cmluZyh4LnMgKiB4LnMgLyAwKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIHN0cmluZyBgc3RyYC5cclxuICAgKi9cclxuICBmdW5jdGlvbiBwYXJzZURlY2ltYWwoeCwgc3RyKSB7XHJcbiAgICB2YXIgZSwgaSwgbGVuO1xyXG5cclxuICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuXHJcbiAgICAvLyBFeHBvbmVudGlhbCBmb3JtP1xyXG4gICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgZXhwb25lbnQuXHJcbiAgICAgIGlmIChlIDwgMCkgZSA9IGk7XHJcbiAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSk7XHJcbiAgICB9IGVsc2UgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICBlID0gc3RyLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy5cclxuICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IHN0ci5jaGFyQ29kZUF0KGxlbiAtIDEpID09PSA0ODsgLS1sZW4pO1xyXG4gICAgc3RyID0gc3RyLnNsaWNlKGksIGxlbik7XHJcblxyXG4gICAgaWYgKHN0cikge1xyXG4gICAgICBsZW4gLT0gaTtcclxuICAgICAgeC5lID0gZSA9IGUgLSBpIC0gMTtcclxuICAgICAgeC5kID0gW107XHJcblxyXG4gICAgICAvLyBUcmFuc2Zvcm0gYmFzZVxyXG5cclxuICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgLy8gaSBpcyB3aGVyZSB0byBzbGljZSBzdHIgdG8gZ2V0IHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuXHJcbiAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgIGlmIChlIDwgMCkgaSArPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgIGlmIChpIDwgbGVuKSB7XHJcbiAgICAgICAgaWYgKGkpIHguZC5wdXNoKCtzdHIuc2xpY2UoMCwgaSkpO1xyXG4gICAgICAgIGZvciAobGVuIC09IExPR19CQVNFOyBpIDwgbGVuOykgeC5kLnB1c2goK3N0ci5zbGljZShpLCBpICs9IExPR19CQVNFKSk7XHJcbiAgICAgICAgc3RyID0gc3RyLnNsaWNlKGkpO1xyXG4gICAgICAgIGkgPSBMT0dfQkFTRSAtIHN0ci5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoOyBpLS07KSBzdHIgKz0gJzAnO1xyXG4gICAgICB4LmQucHVzaCgrc3RyKTtcclxuXHJcbiAgICAgIGlmIChleHRlcm5hbCkge1xyXG5cclxuICAgICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgICBpZiAoeC5lID4geC5jb25zdHJ1Y3Rvci5tYXhFKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgeC5lID0gTmFOO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgICAgfSBlbHNlIGlmICh4LmUgPCB4LmNvbnN0cnVjdG9yLm1pbkUpIHtcclxuXHJcbiAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIC8vIHguY29uc3RydWN0b3IudW5kZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgICB9IC8vIGVsc2UgeC5jb25zdHJ1Y3Rvci51bmRlcmZsb3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIFplcm8uXHJcbiAgICAgIHguZSA9IDA7XHJcbiAgICAgIHguZCA9IFswXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIGEgc3RyaW5nIGBzdHJgLCB3aGljaCBpcyBub3QgYSBkZWNpbWFsIHZhbHVlLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBhcnNlT3RoZXIoeCwgc3RyKSB7XHJcbiAgICB2YXIgYmFzZSwgQ3RvciwgZGl2aXNvciwgaSwgaXNGbG9hdCwgbGVuLCBwLCB4ZCwgeGU7XHJcblxyXG4gICAgaWYgKHN0ciA9PT0gJ0luZmluaXR5JyB8fCBzdHIgPT09ICdOYU4nKSB7XHJcbiAgICAgIGlmICghK3N0cikgeC5zID0gTmFOO1xyXG4gICAgICB4LmUgPSBOYU47XHJcbiAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0hleC50ZXN0KHN0cikpICB7XHJcbiAgICAgIGJhc2UgPSAxNjtcclxuICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzQmluYXJ5LnRlc3Qoc3RyKSkgIHtcclxuICAgICAgYmFzZSA9IDI7XHJcbiAgICB9IGVsc2UgaWYgKGlzT2N0YWwudGVzdChzdHIpKSAge1xyXG4gICAgICBiYXNlID0gODtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSXMgdGhlcmUgYSBiaW5hcnkgZXhwb25lbnQgcGFydD9cclxuICAgIGkgPSBzdHIuc2VhcmNoKC9wL2kpO1xyXG5cclxuICAgIGlmIChpID4gMCkge1xyXG4gICAgICBwID0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMiwgaSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHIgPSBzdHIuc2xpY2UoMik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29udmVydCBgc3RyYCBhcyBhbiBpbnRlZ2VyIHRoZW4gZGl2aWRlIHRoZSByZXN1bHQgYnkgYGJhc2VgIHJhaXNlZCB0byBhIHBvd2VyIHN1Y2ggdGhhdCB0aGVcclxuICAgIC8vIGZyYWN0aW9uIHBhcnQgd2lsbCBiZSByZXN0b3JlZC5cclxuICAgIGkgPSBzdHIuaW5kZXhPZignLicpO1xyXG4gICAgaXNGbG9hdCA9IGkgPj0gMDtcclxuICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmIChpc0Zsb2F0KSB7XHJcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG4gICAgICBpID0gbGVuIC0gaTtcclxuXHJcbiAgICAgIC8vIGxvZ1sxMF0oMTYpID0gMS4yMDQxLi4uICwgbG9nWzEwXSg4OCkgPSAxLjk0NDQuLi4uXHJcbiAgICAgIGRpdmlzb3IgPSBpbnRQb3coQ3RvciwgbmV3IEN0b3IoYmFzZSksIGksIGkgKiAyKTtcclxuICAgIH1cclxuXHJcbiAgICB4ZCA9IGNvbnZlcnRCYXNlKHN0ciwgYmFzZSwgQkFTRSk7XHJcbiAgICB4ZSA9IHhkLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yIChpID0geGU7IHhkW2ldID09PSAwOyAtLWkpIHhkLnBvcCgpO1xyXG4gICAgaWYgKGkgPCAwKSByZXR1cm4gbmV3IEN0b3IoeC5zICogMCk7XHJcbiAgICB4LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgeGUpO1xyXG4gICAgeC5kID0geGQ7XHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEF0IHdoYXQgcHJlY2lzaW9uIHRvIHBlcmZvcm0gdGhlIGRpdmlzaW9uIHRvIGVuc3VyZSBleGFjdCBjb252ZXJzaW9uP1xyXG4gICAgLy8gbWF4RGVjaW1hbEludGVnZXJQYXJ0RGlnaXRDb3VudCA9IGNlaWwobG9nWzEwXShiKSAqIG90aGVyQmFzZUludGVnZXJQYXJ0RGlnaXRDb3VudClcclxuICAgIC8vIGxvZ1sxMF0oMikgPSAwLjMwMTAzLCBsb2dbMTBdKDgpID0gMC45MDMwOSwgbG9nWzEwXSgxNikgPSAxLjIwNDEyXHJcbiAgICAvLyBFLmcuIGNlaWwoMS4yICogMykgPSA0LCBzbyB1cCB0byA0IGRlY2ltYWwgZGlnaXRzIGFyZSBuZWVkZWQgdG8gcmVwcmVzZW50IDMgaGV4IGludCBkaWdpdHMuXHJcbiAgICAvLyBtYXhEZWNpbWFsRnJhY3Rpb25QYXJ0RGlnaXRDb3VudCA9IHtIZXg6NHxPY3Q6M3xCaW46MX0gKiBvdGhlckJhc2VGcmFjdGlvblBhcnREaWdpdENvdW50XHJcbiAgICAvLyBUaGVyZWZvcmUgdXNpbmcgNCAqIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHN0ciB3aWxsIGFsd2F5cyBiZSBlbm91Z2guXHJcbiAgICBpZiAoaXNGbG9hdCkgeCA9IGRpdmlkZSh4LCBkaXZpc29yLCBsZW4gKiA0KTtcclxuXHJcbiAgICAvLyBNdWx0aXBseSBieSB0aGUgYmluYXJ5IGV4cG9uZW50IHBhcnQgaWYgcHJlc2VudC5cclxuICAgIGlmIChwKSB4ID0geC50aW1lcyhNYXRoLmFicyhwKSA8IDU0ID8gbWF0aHBvdygyLCBwKSA6IERlY2ltYWwucG93KDIsIHApKTtcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi5cclxuICAgKiB8eHwgPCBwaS8yXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzaW5lKEN0b3IsIHgpIHtcclxuICAgIHZhciBrLFxyXG4gICAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZW4gPCAzKSByZXR1cm4gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgpO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogc2luKDV4KSA9IDE2KnNpbl41KHgpIC0gMjAqc2luXjMoeCkgKyA1KnNpbih4KVxyXG4gICAgLy8gaS5lLiBzaW4oeCkgPSAxNipzaW5eNSh4LzUpIC0gMjAqc2luXjMoeC81KSArIDUqc2luKHgvNSlcclxuICAgIC8vIGFuZCAgc2luKHgpID0gc2luKHgvNSkoNSArIHNpbl4yKHgvNSkoMTZzaW5eMih4LzUpIC0gMjApKVxyXG5cclxuICAgIC8vIEVzdGltYXRlIHRoZSBvcHRpbXVtIG51bWJlciBvZiB0aW1lcyB0byB1c2UgdGhlIGFyZ3VtZW50IHJlZHVjdGlvbi5cclxuICAgIGsgPSAxLjQgKiBNYXRoLnNxcnQobGVuKTtcclxuICAgIGsgPSBrID4gMTYgPyAxNiA6IGsgfCAwO1xyXG5cclxuICAgIHggPSB4LnRpbWVzKDEgLyB0aW55UG93KDUsIGspKTtcclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMiwgeCwgeCk7XHJcblxyXG4gICAgLy8gUmV2ZXJzZSBhcmd1bWVudCByZWR1Y3Rpb25cclxuICAgIHZhciBzaW4yX3gsXHJcbiAgICAgIGQ1ID0gbmV3IEN0b3IoNSksXHJcbiAgICAgIGQxNiA9IG5ldyBDdG9yKDE2KSxcclxuICAgICAgZDIwID0gbmV3IEN0b3IoMjApO1xyXG4gICAgZm9yICg7IGstLTspIHtcclxuICAgICAgc2luMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IHgudGltZXMoZDUucGx1cyhzaW4yX3gudGltZXMoZDE2LnRpbWVzKHNpbjJfeCkubWludXMoZDIwKSkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvLyBDYWxjdWxhdGUgVGF5bG9yIHNlcmllcyBmb3IgYGNvc2AsIGBjb3NoYCwgYHNpbmAgYW5kIGBzaW5oYC5cclxuICBmdW5jdGlvbiB0YXlsb3JTZXJpZXMoQ3RvciwgbiwgeCwgeSwgaXNIeXBlcmJvbGljKSB7XHJcbiAgICB2YXIgaiwgdCwgdSwgeDIsXHJcbiAgICAgIGkgPSAxLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBrID0gTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcbiAgICB4MiA9IHgudGltZXMoeCk7XHJcbiAgICB1ID0gbmV3IEN0b3IoeSk7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gZGl2aWRlKHUudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7XHJcbiAgICAgIHUgPSBpc0h5cGVyYm9saWMgPyB5LnBsdXModCkgOiB5Lm1pbnVzKHQpO1xyXG4gICAgICB5ID0gZGl2aWRlKHQudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7XHJcbiAgICAgIHQgPSB1LnBsdXMoeSk7XHJcblxyXG4gICAgICBpZiAodC5kW2tdICE9PSB2b2lkIDApIHtcclxuICAgICAgICBmb3IgKGogPSBrOyB0LmRbal0gPT09IHUuZFtqXSAmJiBqLS07KTtcclxuICAgICAgICBpZiAoaiA9PSAtMSkgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGogPSB1O1xyXG4gICAgICB1ID0geTtcclxuICAgICAgeSA9IHQ7XHJcbiAgICAgIHQgPSBqO1xyXG4gICAgICBpKys7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgdC5kLmxlbmd0aCA9IGsgKyAxO1xyXG5cclxuICAgIHJldHVybiB0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4cG9uZW50IGUgbXVzdCBiZSBwb3NpdGl2ZSBhbmQgbm9uLXplcm8uXHJcbiAgZnVuY3Rpb24gdGlueVBvdyhiLCBlKSB7XHJcbiAgICB2YXIgbiA9IGI7XHJcbiAgICB3aGlsZSAoLS1lKSBuICo9IGI7XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG5cclxuICAvLyBSZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YCByZWR1Y2VkIHRvIGxlc3MgdGhhbiBvciBlcXVhbCB0byBoYWxmIHBpLlxyXG4gIGZ1bmN0aW9uIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkge1xyXG4gICAgdmFyIHQsXHJcbiAgICAgIGlzTmVnID0geC5zIDwgMCxcclxuICAgICAgcGkgPSBnZXRQaShDdG9yLCBDdG9yLnByZWNpc2lvbiwgMSksXHJcbiAgICAgIGhhbGZQaSA9IHBpLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgeCA9IHguYWJzKCk7XHJcblxyXG4gICAgaWYgKHgubHRlKGhhbGZQaSkpIHtcclxuICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDQgOiAxO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcbiAgICB0ID0geC5kaXZUb0ludChwaSk7XHJcblxyXG4gICAgaWYgKHQuaXNaZXJvKCkpIHtcclxuICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDMgOiAyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgeCA9IHgubWludXModC50aW1lcyhwaSkpO1xyXG5cclxuICAgICAgLy8gMCA8PSB4IDwgcGlcclxuICAgICAgaWYgKHgubHRlKGhhbGZQaSkpIHtcclxuICAgICAgICBxdWFkcmFudCA9IGlzT2RkKHQpID8gKGlzTmVnID8gMiA6IDMpIDogKGlzTmVnID8gNCA6IDEpO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBxdWFkcmFudCA9IGlzT2RkKHQpID8gKGlzTmVnID8gMSA6IDQpIDogKGlzTmVnID8gMyA6IDIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4Lm1pbnVzKHBpKS5hYnMoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgRGVjaW1hbCBgeGAgYXMgYSBzdHJpbmcgaW4gYmFzZSBgYmFzZU91dGAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IGluY2x1ZGUgYSBiaW5hcnkgZXhwb25lbnQgc3VmZml4LlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRvU3RyaW5nQmluYXJ5KHgsIGJhc2VPdXQsIHNkLCBybSkge1xyXG4gICAgdmFyIGJhc2UsIGUsIGksIGssIGxlbiwgcm91bmRVcCwgc3RyLCB4ZCwgeSxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIGlzRXhwID0gc2QgIT09IHZvaWQgMDtcclxuXHJcbiAgICBpZiAoaXNFeHApIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZCA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcclxuICAgICAgc3RyID0gbm9uRmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4KTtcclxuICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyk7XHJcblxyXG4gICAgICAvLyBVc2UgZXhwb25lbnRpYWwgbm90YXRpb24gYWNjb3JkaW5nIHRvIGB0b0V4cFBvc2AgYW5kIGB0b0V4cE5lZ2A/IE5vLCBidXQgaWYgcmVxdWlyZWQ6XHJcbiAgICAgIC8vIG1heEJpbmFyeUV4cG9uZW50ID0gZmxvb3IoKGRlY2ltYWxFeHBvbmVudCArIDEpICogbG9nWzJdKDEwKSlcclxuICAgICAgLy8gbWluQmluYXJ5RXhwb25lbnQgPSBmbG9vcihkZWNpbWFsRXhwb25lbnQgKiBsb2dbMl0oMTApKVxyXG4gICAgICAvLyBsb2dbMl0oMTApID0gMy4zMjE5MjgwOTQ4ODczNjIzNDc4NzAzMTk0Mjk0ODkzOTAxNzU4NjRcclxuXHJcbiAgICAgIGlmIChpc0V4cCkge1xyXG4gICAgICAgIGJhc2UgPSAyO1xyXG4gICAgICAgIGlmIChiYXNlT3V0ID09IDE2KSB7XHJcbiAgICAgICAgICBzZCA9IHNkICogNCAtIDM7XHJcbiAgICAgICAgfSBlbHNlIGlmIChiYXNlT3V0ID09IDgpIHtcclxuICAgICAgICAgIHNkID0gc2QgKiAzIC0gMjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZSA9IGJhc2VPdXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBhbiBpbnRlZ2VyIHRoZW4gZGl2aWRlIHRoZSByZXN1bHQgYnkgaXRzIGJhc2UgcmFpc2VkIHRvIGEgcG93ZXIgc3VjaFxyXG4gICAgICAvLyB0aGF0IHRoZSBmcmFjdGlvbiBwYXJ0IHdpbGwgYmUgcmVzdG9yZWQuXHJcblxyXG4gICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgIHkgPSBuZXcgQ3RvcigxKTtcclxuICAgICAgICB5LmUgPSBzdHIubGVuZ3RoIC0gaTtcclxuICAgICAgICB5LmQgPSBjb252ZXJ0QmFzZShmaW5pdGVUb1N0cmluZyh5KSwgMTAsIGJhc2UpO1xyXG4gICAgICAgIHkuZSA9IHkuZC5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhkID0gY29udmVydEJhc2Uoc3RyLCAxMCwgYmFzZSk7XHJcbiAgICAgIGUgPSBsZW4gPSB4ZC5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoOyB4ZFstLWxlbl0gPT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgICAgaWYgKCF4ZFswXSkge1xyXG4gICAgICAgIHN0ciA9IGlzRXhwID8gJzBwKzAnIDogJzAnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgZS0tO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEN0b3IoeCk7XHJcbiAgICAgICAgICB4LmQgPSB4ZDtcclxuICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICB4ID0gZGl2aWRlKHgsIHksIHNkLCBybSwgMCwgYmFzZSk7XHJcbiAgICAgICAgICB4ZCA9IHguZDtcclxuICAgICAgICAgIGUgPSB4LmU7XHJcbiAgICAgICAgICByb3VuZFVwID0gaW5leGFjdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgaSA9IHhkW3NkXTtcclxuICAgICAgICBrID0gYmFzZSAvIDI7XHJcbiAgICAgICAgcm91bmRVcCA9IHJvdW5kVXAgfHwgeGRbc2QgKyAxXSAhPT0gdm9pZCAwO1xyXG5cclxuICAgICAgICByb3VuZFVwID0gcm0gPCA0XHJcbiAgICAgICAgICA/IChpICE9PSB2b2lkIDAgfHwgcm91bmRVcCkgJiYgKHJtID09PSAwIHx8IHJtID09PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgIDogaSA+IGsgfHwgaSA9PT0gayAmJiAocm0gPT09IDQgfHwgcm91bmRVcCB8fCBybSA9PT0gNiAmJiB4ZFtzZCAtIDFdICYgMSB8fFxyXG4gICAgICAgICAgICBybSA9PT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICB4ZC5sZW5ndGggPSBzZDtcclxuXHJcbiAgICAgICAgaWYgKHJvdW5kVXApIHtcclxuXHJcbiAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgbWVhbiB0aGUgcHJldmlvdXMgZGlnaXQgaGFzIHRvIGJlIHJvdW5kZWQgdXAgYW5kIHNvIG9uLlxyXG4gICAgICAgICAgZm9yICg7ICsreGRbLS1zZF0gPiBiYXNlIC0gMTspIHtcclxuICAgICAgICAgICAgeGRbc2RdID0gMDtcclxuICAgICAgICAgICAgaWYgKCFzZCkge1xyXG4gICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICB4ZC51bnNoaWZ0KDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7ICF4ZFtsZW4gLSAxXTsgLS1sZW4pO1xyXG5cclxuICAgICAgICAvLyBFLmcuIFs0LCAxMSwgMTVdIGJlY29tZXMgNGJmLlxyXG4gICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDwgbGVuOyBpKyspIHN0ciArPSBOVU1FUkFMUy5jaGFyQXQoeGRbaV0pO1xyXG5cclxuICAgICAgICAvLyBBZGQgYmluYXJ5IGV4cG9uZW50IHN1ZmZpeD9cclxuICAgICAgICBpZiAoaXNFeHApIHtcclxuICAgICAgICAgIGlmIChsZW4gPiAxKSB7XHJcbiAgICAgICAgICAgIGlmIChiYXNlT3V0ID09IDE2IHx8IGJhc2VPdXQgPT0gOCkge1xyXG4gICAgICAgICAgICAgIGkgPSBiYXNlT3V0ID09IDE2ID8gNCA6IDM7XHJcbiAgICAgICAgICAgICAgZm9yICgtLWxlbjsgbGVuICUgaTsgbGVuKyspIHN0ciArPSAnMCc7XHJcbiAgICAgICAgICAgICAgeGQgPSBjb252ZXJ0QmFzZShzdHIsIGJhc2UsIGJhc2VPdXQpO1xyXG4gICAgICAgICAgICAgIGZvciAobGVuID0geGQubGVuZ3RoOyAheGRbbGVuIC0gMV07IC0tbGVuKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8geGRbMF0gd2lsbCBhbHdheXMgYmUgYmUgMVxyXG4gICAgICAgICAgICAgIGZvciAoaSA9IDEsIHN0ciA9ICcxLic7IGkgPCBsZW47IGkrKykgc3RyICs9IE5VTUVSQUxTLmNoYXJBdCh4ZFtpXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHN0ciA9ICBzdHIgKyAoZSA8IDAgPyAncCcgOiAncCsnKSArIGU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG4gICAgICAgICAgZm9yICg7ICsrZTspIHN0ciA9ICcwJyArIHN0cjtcclxuICAgICAgICAgIHN0ciA9ICcwLicgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgrK2UgPiBsZW4pIGZvciAoZSAtPSBsZW47IGUtLSA7KSBzdHIgKz0gJzAnO1xyXG4gICAgICAgICAgZWxzZSBpZiAoZSA8IGxlbikgc3RyID0gc3RyLnNsaWNlKDAsIGUpICsgJy4nICsgc3RyLnNsaWNlKGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0gKGJhc2VPdXQgPT0gMTYgPyAnMHgnIDogYmFzZU91dCA9PSAyID8gJzBiJyA6IGJhc2VPdXQgPT0gOCA/ICcwbycgOiAnJykgKyBzdHI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHgucyA8IDAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRG9lcyBub3Qgc3RyaXAgdHJhaWxpbmcgemVyb3MuXHJcbiAgZnVuY3Rpb24gdHJ1bmNhdGUoYXJyLCBsZW4pIHtcclxuICAgIGlmIChhcnIubGVuZ3RoID4gbGVuKSB7XHJcbiAgICAgIGFyci5sZW5ndGggPSBsZW47XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIERlY2ltYWwgbWV0aG9kc1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgYWJzXHJcbiAgICogIGFjb3NcclxuICAgKiAgYWNvc2hcclxuICAgKiAgYWRkXHJcbiAgICogIGFzaW5cclxuICAgKiAgYXNpbmhcclxuICAgKiAgYXRhblxyXG4gICAqICBhdGFuaFxyXG4gICAqICBhdGFuMlxyXG4gICAqICBjYnJ0XHJcbiAgICogIGNlaWxcclxuICAgKiAgY2xvbmVcclxuICAgKiAgY29uZmlnXHJcbiAgICogIGNvc1xyXG4gICAqICBjb3NoXHJcbiAgICogIGRpdlxyXG4gICAqICBleHBcclxuICAgKiAgZmxvb3JcclxuICAgKiAgaHlwb3RcclxuICAgKiAgbG5cclxuICAgKiAgbG9nXHJcbiAgICogIGxvZzJcclxuICAgKiAgbG9nMTBcclxuICAgKiAgbWF4XHJcbiAgICogIG1pblxyXG4gICAqICBtb2RcclxuICAgKiAgbXVsXHJcbiAgICogIHBvd1xyXG4gICAqICByYW5kb21cclxuICAgKiAgcm91bmRcclxuICAgKiAgc2V0XHJcbiAgICogIHNpZ25cclxuICAgKiAgc2luXHJcbiAgICogIHNpbmhcclxuICAgKiAgc3FydFxyXG4gICAqICBzdWJcclxuICAgKiAgdGFuXHJcbiAgICogIHRhbmhcclxuICAgKiAgdHJ1bmNcclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFicyh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWJzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIGluIHJhZGlhbnMgb2YgYHhgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWNvcyh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWNvcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGB4YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFjb3NoKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5hY29zaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHN1bSBvZiBgeGAgYW5kIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWRkKHgsIHkpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5wbHVzKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY3NpbmUgaW4gcmFkaWFucyBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXNpbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYXNpbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBgeGAsIHJvdW5kZWQgdG9cclxuICAgKiBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhc2luaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYXNpbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IGluIHJhZGlhbnMgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGF0YW4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmF0YW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYHhgLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXRhbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmF0YW5oKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjdGFuZ2VudCBpbiByYWRpYW5zIG9mIGB5L3hgIGluIHRoZSByYW5nZSAtcGkgdG8gcGlcclxuICAgKiAoaW5jbHVzaXZlKSwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1waSwgcGldXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSB5LWNvb3JkaW5hdGUuXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgeC1jb29yZGluYXRlLlxyXG4gICAqXHJcbiAgICogYXRhbjIowrEwLCAtMCkgICAgICAgICAgICAgICA9IMKxcGlcclxuICAgKiBhdGFuMijCsTAsICswKSAgICAgICAgICAgICAgID0gwrEwXHJcbiAgICogYXRhbjIowrEwLCAteCkgICAgICAgICAgICAgICA9IMKxcGkgZm9yIHggPiAwXHJcbiAgICogYXRhbjIowrEwLCB4KSAgICAgICAgICAgICAgICA9IMKxMCBmb3IgeCA+IDBcclxuICAgKiBhdGFuMigteSwgwrEwKSAgICAgICAgICAgICAgID0gLXBpLzIgZm9yIHkgPiAwXHJcbiAgICogYXRhbjIoeSwgwrEwKSAgICAgICAgICAgICAgICA9IHBpLzIgZm9yIHkgPiAwXHJcbiAgICogYXRhbjIowrF5LCAtSW5maW5pdHkpICAgICAgICA9IMKxcGkgZm9yIGZpbml0ZSB5ID4gMFxyXG4gICAqIGF0YW4yKMKxeSwgK0luZmluaXR5KSAgICAgICAgPSDCsTAgZm9yIGZpbml0ZSB5ID4gMFxyXG4gICAqIGF0YW4yKMKxSW5maW5pdHksIHgpICAgICAgICAgPSDCsXBpLzIgZm9yIGZpbml0ZSB4XHJcbiAgICogYXRhbjIowrFJbmZpbml0eSwgLUluZmluaXR5KSA9IMKxMypwaS80XHJcbiAgICogYXRhbjIowrFJbmZpbml0eSwgK0luZmluaXR5KSA9IMKxcGkvNFxyXG4gICAqIGF0YW4yKE5hTiwgeCkgPSBOYU5cclxuICAgKiBhdGFuMih5LCBOYU4pID0gTmFOXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhdGFuMih5LCB4KSB7XHJcbiAgICB5ID0gbmV3IHRoaXMoeSk7XHJcbiAgICB4ID0gbmV3IHRoaXMoeCk7XHJcbiAgICB2YXIgcixcclxuICAgICAgcHIgPSB0aGlzLnByZWNpc2lvbixcclxuICAgICAgcm0gPSB0aGlzLnJvdW5kaW5nLFxyXG4gICAgICB3cHIgPSBwciArIDQ7XHJcblxyXG4gICAgLy8gRWl0aGVyIE5hTlxyXG4gICAgaWYgKCF5LnMgfHwgIXgucykge1xyXG4gICAgICByID0gbmV3IHRoaXMoTmFOKTtcclxuXHJcbiAgICAvLyBCb3RoIMKxSW5maW5pdHlcclxuICAgIH0gZWxzZSBpZiAoIXkuZCAmJiAheC5kKSB7XHJcbiAgICAgIHIgPSBnZXRQaSh0aGlzLCB3cHIsIDEpLnRpbWVzKHgucyA+IDAgPyAwLjI1IDogMC43NSk7XHJcbiAgICAgIHIucyA9IHkucztcclxuXHJcbiAgICAvLyB4IGlzIMKxSW5maW5pdHkgb3IgeSBpcyDCsTBcclxuICAgIH0gZWxzZSBpZiAoIXguZCB8fCB5LmlzWmVybygpKSB7XHJcbiAgICAgIHIgPSB4LnMgPCAwID8gZ2V0UGkodGhpcywgcHIsIHJtKSA6IG5ldyB0aGlzKDApO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8geSBpcyDCsUluZmluaXR5IG9yIHggaXMgwrEwXHJcbiAgICB9IGVsc2UgaWYgKCF5LmQgfHwgeC5pc1plcm8oKSkge1xyXG4gICAgICByID0gZ2V0UGkodGhpcywgd3ByLCAxKS50aW1lcygwLjUpO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8gQm90aCBub24temVybyBhbmQgZmluaXRlXHJcbiAgICB9IGVsc2UgaWYgKHgucyA8IDApIHtcclxuICAgICAgdGhpcy5wcmVjaXNpb24gPSB3cHI7XHJcbiAgICAgIHRoaXMucm91bmRpbmcgPSAxO1xyXG4gICAgICByID0gdGhpcy5hdGFuKGRpdmlkZSh5LCB4LCB3cHIsIDEpKTtcclxuICAgICAgeCA9IGdldFBpKHRoaXMsIHdwciwgMSk7XHJcbiAgICAgIHRoaXMucHJlY2lzaW9uID0gcHI7XHJcbiAgICAgIHRoaXMucm91bmRpbmcgPSBybTtcclxuICAgICAgciA9IHkucyA8IDAgPyByLm1pbnVzKHgpIDogci5wbHVzKHgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgciA9IHRoaXMuYXRhbihkaXZpZGUoeSwgeCwgd3ByLCAxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgY3ViZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjYnJ0KHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jYnJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmRlZCB0byBhbiBpbnRlZ2VyIHVzaW5nIGBST1VORF9DRUlMYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNlaWwoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDb25maWd1cmUgZ2xvYmFsIHNldHRpbmdzIGZvciBhIERlY2ltYWwgY29uc3RydWN0b3IuXHJcbiAgICpcclxuICAgKiBgb2JqYCBpcyBhbiBvYmplY3Qgd2l0aCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsXHJcbiAgICpcclxuICAgKiAgIHByZWNpc2lvbiAge251bWJlcn1cclxuICAgKiAgIHJvdW5kaW5nICAge251bWJlcn1cclxuICAgKiAgIHRvRXhwTmVnICAge251bWJlcn1cclxuICAgKiAgIHRvRXhwUG9zICAge251bWJlcn1cclxuICAgKiAgIG1heEUgICAgICAge251bWJlcn1cclxuICAgKiAgIG1pbkUgICAgICAge251bWJlcn1cclxuICAgKiAgIG1vZHVsbyAgICAge251bWJlcn1cclxuICAgKiAgIGNyeXB0byAgICAge2Jvb2xlYW58bnVtYmVyfVxyXG4gICAqICAgZGVmYXVsdHMgICB7dHJ1ZX1cclxuICAgKlxyXG4gICAqIEUuZy4gRGVjaW1hbC5jb25maWcoeyBwcmVjaXNpb246IDIwLCByb3VuZGluZzogNCB9KVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY29uZmlnKG9iaikge1xyXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHRocm93IEVycm9yKGRlY2ltYWxFcnJvciArICdPYmplY3QgZXhwZWN0ZWQnKTtcclxuICAgIHZhciBpLCBwLCB2LFxyXG4gICAgICB1c2VEZWZhdWx0cyA9IG9iai5kZWZhdWx0cyA9PT0gdHJ1ZSxcclxuICAgICAgcHMgPSBbXHJcbiAgICAgICAgJ3ByZWNpc2lvbicsIDEsIE1BWF9ESUdJVFMsXHJcbiAgICAgICAgJ3JvdW5kaW5nJywgMCwgOCxcclxuICAgICAgICAndG9FeHBOZWcnLCAtRVhQX0xJTUlULCAwLFxyXG4gICAgICAgICd0b0V4cFBvcycsIDAsIEVYUF9MSU1JVCxcclxuICAgICAgICAnbWF4RScsIDAsIEVYUF9MSU1JVCxcclxuICAgICAgICAnbWluRScsIC1FWFBfTElNSVQsIDAsXHJcbiAgICAgICAgJ21vZHVsbycsIDAsIDlcclxuICAgICAgXTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgaWYgKHAgPSBwc1tpXSwgdXNlRGVmYXVsdHMpIHRoaXNbcF0gPSBERUZBVUxUU1twXTtcclxuICAgICAgaWYgKCh2ID0gb2JqW3BdKSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgaWYgKG1hdGhmbG9vcih2KSA9PT0gdiAmJiB2ID49IHBzW2kgKyAxXSAmJiB2IDw9IHBzW2kgKyAyXSkgdGhpc1twXSA9IHY7XHJcbiAgICAgICAgZWxzZSB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyBwICsgJzogJyArIHYpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHAgPSAnY3J5cHRvJywgdXNlRGVmYXVsdHMpIHRoaXNbcF0gPSBERUZBVUxUU1twXTtcclxuICAgIGlmICgodiA9IG9ialtwXSkgIT09IHZvaWQgMCkge1xyXG4gICAgICBpZiAodiA9PT0gdHJ1ZSB8fCB2ID09PSBmYWxzZSB8fCB2ID09PSAwIHx8IHYgPT09IDEpIHtcclxuICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvICYmXHJcbiAgICAgICAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIHx8IGNyeXB0by5yYW5kb21CeXRlcykpIHtcclxuICAgICAgICAgICAgdGhpc1twXSA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihjcnlwdG9VbmF2YWlsYWJsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXNbcF0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgcCArICc6ICcgKyB2KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3MoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmNvcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGB4YCwgcm91bmRlZCB0byBwcmVjaXNpb25cclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3NoKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jb3NoKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIERlY2ltYWwgY29uc3RydWN0b3Igd2l0aCB0aGUgc2FtZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgYXMgdGhpcyBEZWNpbWFsXHJcbiAgICogY29uc3RydWN0b3IuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjbG9uZShvYmopIHtcclxuICAgIHZhciBpLCBwLCBwcztcclxuXHJcbiAgICAvKlxyXG4gICAgICogVGhlIERlY2ltYWwgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogdiB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBEZWNpbWFsKHYpIHtcclxuICAgICAgdmFyIGUsIGksIHQsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBEZWNpbWFsIGNhbGxlZCB3aXRob3V0IG5ldy5cclxuICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIERlY2ltYWwpKSByZXR1cm4gbmV3IERlY2ltYWwodik7XHJcblxyXG4gICAgICAvLyBSZXRhaW4gYSByZWZlcmVuY2UgdG8gdGhpcyBEZWNpbWFsIGNvbnN0cnVjdG9yLCBhbmQgc2hhZG93IERlY2ltYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yXHJcbiAgICAgIC8vIHdoaWNoIHBvaW50cyB0byBPYmplY3QuXHJcbiAgICAgIHguY29uc3RydWN0b3IgPSBEZWNpbWFsO1xyXG5cclxuICAgICAgLy8gRHVwbGljYXRlLlxyXG4gICAgICBpZiAodiBpbnN0YW5jZW9mIERlY2ltYWwpIHtcclxuICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgIGlmIChleHRlcm5hbCkge1xyXG4gICAgICAgICAgaWYgKCF2LmQgfHwgdi5lID4gRGVjaW1hbC5tYXhFKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgICAgeC5lID0gTmFOO1xyXG4gICAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBEZWNpbWFsLm1pbkUpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5kID0gdi5kLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgIHguZCA9IHYuZCA/IHYuZC5zbGljZSgpIDogdi5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0ID0gdHlwZW9mIHY7XHJcblxyXG4gICAgICBpZiAodCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAodiA9PT0gMCkge1xyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2IDwgMCkge1xyXG4gICAgICAgICAgdiA9IC12O1xyXG4gICAgICAgICAgeC5zID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHgucyA9IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYXN0IHBhdGggZm9yIHNtYWxsIGludGVnZXJzLlxyXG4gICAgICAgIGlmICh2ID09PSB+fnYgJiYgdiA8IDFlNykge1xyXG4gICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTApIGUrKztcclxuXHJcbiAgICAgICAgICBpZiAoZXh0ZXJuYWwpIHtcclxuICAgICAgICAgICAgaWYgKGUgPiBEZWNpbWFsLm1heEUpIHtcclxuICAgICAgICAgICAgICB4LmUgPSBOYU47XHJcbiAgICAgICAgICAgICAgeC5kID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlIDwgRGVjaW1hbC5taW5FKSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgICAgICB4LmQgPSBbMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgICAgICB4LmQgPSBbdl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgIHguZCA9IFt2XTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LCBOYU4uXHJcbiAgICAgICAgfSBlbHNlIGlmICh2ICogMCAhPT0gMCkge1xyXG4gICAgICAgICAgaWYgKCF2KSB4LnMgPSBOYU47XHJcbiAgICAgICAgICB4LmUgPSBOYU47XHJcbiAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRGVjaW1hbCh4LCB2LnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0ICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHYpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBNaW51cyBzaWduP1xyXG4gICAgICBpZiAoKGkgPSB2LmNoYXJDb2RlQXQoMCkpID09PSA0NSkge1xyXG4gICAgICAgIHYgPSB2LnNsaWNlKDEpO1xyXG4gICAgICAgIHgucyA9IC0xO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFBsdXMgc2lnbj9cclxuICAgICAgICBpZiAoaSA9PT0gNDMpIHYgPSB2LnNsaWNlKDEpO1xyXG4gICAgICAgIHgucyA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBpc0RlY2ltYWwudGVzdCh2KSA/IHBhcnNlRGVjaW1hbCh4LCB2KSA6IHBhcnNlT3RoZXIoeCwgdik7XHJcbiAgICB9XHJcblxyXG4gICAgRGVjaW1hbC5wcm90b3R5cGUgPSBQO1xyXG5cclxuICAgIERlY2ltYWwuUk9VTkRfVVAgPSAwO1xyXG4gICAgRGVjaW1hbC5ST1VORF9ET1dOID0gMTtcclxuICAgIERlY2ltYWwuUk9VTkRfQ0VJTCA9IDI7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0ZMT09SID0gMztcclxuICAgIERlY2ltYWwuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRE9XTiA9IDU7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTiA9IDY7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRkxPT1IgPSA4O1xyXG4gICAgRGVjaW1hbC5FVUNMSUQgPSA5O1xyXG5cclxuICAgIERlY2ltYWwuY29uZmlnID0gRGVjaW1hbC5zZXQgPSBjb25maWc7XHJcbiAgICBEZWNpbWFsLmNsb25lID0gY2xvbmU7XHJcbiAgICBEZWNpbWFsLmlzRGVjaW1hbCA9IGlzRGVjaW1hbEluc3RhbmNlO1xyXG5cclxuICAgIERlY2ltYWwuYWJzID0gYWJzO1xyXG4gICAgRGVjaW1hbC5hY29zID0gYWNvcztcclxuICAgIERlY2ltYWwuYWNvc2ggPSBhY29zaDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5hZGQgPSBhZGQ7XHJcbiAgICBEZWNpbWFsLmFzaW4gPSBhc2luO1xyXG4gICAgRGVjaW1hbC5hc2luaCA9IGFzaW5oOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmF0YW4gPSBhdGFuO1xyXG4gICAgRGVjaW1hbC5hdGFuaCA9IGF0YW5oOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmF0YW4yID0gYXRhbjI7XHJcbiAgICBEZWNpbWFsLmNicnQgPSBjYnJ0OyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwuY2VpbCA9IGNlaWw7XHJcbiAgICBEZWNpbWFsLmNvcyA9IGNvcztcclxuICAgIERlY2ltYWwuY29zaCA9IGNvc2g7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5kaXYgPSBkaXY7XHJcbiAgICBEZWNpbWFsLmV4cCA9IGV4cDtcclxuICAgIERlY2ltYWwuZmxvb3IgPSBmbG9vcjtcclxuICAgIERlY2ltYWwuaHlwb3QgPSBoeXBvdDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5sbiA9IGxuO1xyXG4gICAgRGVjaW1hbC5sb2cgPSBsb2c7XHJcbiAgICBEZWNpbWFsLmxvZzEwID0gbG9nMTA7ICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwubG9nMiA9IGxvZzI7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5tYXggPSBtYXg7XHJcbiAgICBEZWNpbWFsLm1pbiA9IG1pbjtcclxuICAgIERlY2ltYWwubW9kID0gbW9kO1xyXG4gICAgRGVjaW1hbC5tdWwgPSBtdWw7XHJcbiAgICBEZWNpbWFsLnBvdyA9IHBvdztcclxuICAgIERlY2ltYWwucmFuZG9tID0gcmFuZG9tO1xyXG4gICAgRGVjaW1hbC5yb3VuZCA9IHJvdW5kO1xyXG4gICAgRGVjaW1hbC5zaWduID0gc2lnbjsgICAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLnNpbiA9IHNpbjtcclxuICAgIERlY2ltYWwuc2luaCA9IHNpbmg7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5zcXJ0ID0gc3FydDtcclxuICAgIERlY2ltYWwuc3ViID0gc3ViO1xyXG4gICAgRGVjaW1hbC50YW4gPSB0YW47XHJcbiAgICBEZWNpbWFsLnRhbmggPSB0YW5oOyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwudHJ1bmMgPSB0cnVuYzsgICAgICAgIC8vIEVTNlxyXG5cclxuICAgIGlmIChvYmogPT09IHZvaWQgMCkgb2JqID0ge307XHJcbiAgICBpZiAob2JqKSB7XHJcbiAgICAgIGlmIChvYmouZGVmYXVsdHMgIT09IHRydWUpIHtcclxuICAgICAgICBwcyA9IFsncHJlY2lzaW9uJywgJ3JvdW5kaW5nJywgJ3RvRXhwTmVnJywgJ3RvRXhwUG9zJywgJ21heEUnLCAnbWluRScsICdtb2R1bG8nLCAnY3J5cHRvJ107XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBzLmxlbmd0aDspIGlmICghb2JqLmhhc093blByb3BlcnR5KHAgPSBwc1tpKytdKSkgb2JqW3BdID0gdGhpc1twXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIERlY2ltYWwuY29uZmlnKG9iaik7XHJcblxyXG4gICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgZGl2aWRlZCBieSBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGRpdih4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuZGl2KHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIHBvd2VyIHRvIHdoaWNoIHRvIHJhaXNlIHRoZSBiYXNlIG9mIHRoZSBuYXR1cmFsIGxvZy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGV4cCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuZXhwKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmQgdG8gYW4gaW50ZWdlciB1c2luZyBgUk9VTkRfRkxPT1JgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gZmxvb3IoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHN1bSBvZiB0aGUgc3F1YXJlcyBvZiB0aGUgYXJndW1lbnRzLFxyXG4gICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIGh5cG90KGEsIGIsIC4uLikgPSBzcXJ0KGFeMiArIGJeMiArIC4uLilcclxuICAgKlxyXG4gICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaHlwb3QoKSB7XHJcbiAgICB2YXIgaSwgbixcclxuICAgICAgdCA9IG5ldyB0aGlzKDApO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7KSB7XHJcbiAgICAgIG4gPSBuZXcgdGhpcyhhcmd1bWVudHNbaSsrXSk7XHJcbiAgICAgIGlmICghbi5kKSB7XHJcbiAgICAgICAgaWYgKG4ucykge1xyXG4gICAgICAgICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKDEgLyAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdCA9IG47XHJcbiAgICAgIH0gZWxzZSBpZiAodC5kKSB7XHJcbiAgICAgICAgdCA9IHQucGx1cyhuLnRpbWVzKG4pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdC5zcXJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaXMgYSBEZWNpbWFsIGluc3RhbmNlICh3aGVyZSBEZWNpbWFsIGlzIGFueSBEZWNpbWFsIGNvbnN0cnVjdG9yKSxcclxuICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaXNEZWNpbWFsSW5zdGFuY2Uob2JqKSB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRGVjaW1hbCB8fCBvYmogJiYgb2JqLm5hbWUgPT09ICdbb2JqZWN0IERlY2ltYWxdJyB8fCBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbG4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbG9nIG9mIGB4YCB0byB0aGUgYmFzZSBgeWAsIG9yIHRvIGJhc2UgMTAgaWYgbm8gYmFzZVxyXG4gICAqIGlzIHNwZWNpZmllZCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogbG9nW3ldKHgpXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBhcmd1bWVudCBvZiB0aGUgbG9nYXJpdGhtLlxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIGJhc2Ugb2YgdGhlIGxvZ2FyaXRobS5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZyh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkubG9nKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGJhc2UgMiBsb2dhcml0aG0gb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZzIoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZygyKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbG9nMTAoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZygxMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtYXgoKSB7XHJcbiAgICByZXR1cm4gbWF4T3JNaW4odGhpcywgYXJndW1lbnRzLCAnbHQnKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1pbigpIHtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLCBhcmd1bWVudHMsICdndCcpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG1vZHVsbyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1vZCh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkubW9kKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG11bHRpcGxpZWQgYnkgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtdWwoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLm11bCh5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCByYWlzZWQgdG8gdGhlIHBvd2VyIGB5YCwgcm91bmRlZCB0byBwcmVjaXNpb25cclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgYmFzZS5cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBleHBvbmVudC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBvdyh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkucG93KHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJucyBhIG5ldyBEZWNpbWFsIHdpdGggYSByYW5kb20gdmFsdWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxLCBhbmQgd2l0aFxyXG4gICAqIGBzZGAsIG9yIGBEZWNpbWFsLnByZWNpc2lvbmAgaWYgYHNkYCBpcyBvbWl0dGVkLCBzaWduaWZpY2FudCBkaWdpdHMgKG9yIGxlc3MgaWYgdHJhaWxpbmcgemVyb3NcclxuICAgKiBhcmUgcHJvZHVjZWQpLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDAgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiByYW5kb20oc2QpIHtcclxuICAgIHZhciBkLCBlLCBrLCBuLFxyXG4gICAgICBpID0gMCxcclxuICAgICAgciA9IG5ldyB0aGlzKDEpLFxyXG4gICAgICByZCA9IFtdO1xyXG5cclxuICAgIGlmIChzZCA9PT0gdm9pZCAwKSBzZCA9IHRoaXMucHJlY2lzaW9uO1xyXG4gICAgZWxzZSBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICBrID0gTWF0aC5jZWlsKHNkIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIGlmICghdGhpcy5jcnlwdG8pIHtcclxuICAgICAgZm9yICg7IGkgPCBrOykgcmRbaSsrXSA9IE1hdGgucmFuZG9tKCkgKiAxZTcgfCAwO1xyXG5cclxuICAgIC8vIEJyb3dzZXJzIHN1cHBvcnRpbmcgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5cclxuICAgIH0gZWxzZSBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG4gICAgICBkID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoaykpO1xyXG5cclxuICAgICAgZm9yICg7IGkgPCBrOykge1xyXG4gICAgICAgIG4gPSBkW2ldO1xyXG5cclxuICAgICAgICAvLyAwIDw9IG4gPCA0Mjk0OTY3Mjk2XHJcbiAgICAgICAgLy8gUHJvYmFiaWxpdHkgbiA+PSA0LjI5ZTksIGlzIDQ5NjcyOTYgLyA0Mjk0OTY3Mjk2ID0gMC4wMDExNiAoMSBpbiA4NjUpLlxyXG4gICAgICAgIGlmIChuID49IDQuMjllOSkge1xyXG4gICAgICAgICAgZFtpXSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIDAgPD0gbiA8PSA0Mjg5OTk5OTk5XHJcbiAgICAgICAgICAvLyAwIDw9IChuICUgMWU3KSA8PSA5OTk5OTk5XHJcbiAgICAgICAgICByZFtpKytdID0gbiAlIDFlNztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBOb2RlLmpzIHN1cHBvcnRpbmcgY3J5cHRvLnJhbmRvbUJ5dGVzLlxyXG4gICAgfSBlbHNlIGlmIChjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcclxuXHJcbiAgICAgIC8vIGJ1ZmZlclxyXG4gICAgICBkID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGsgKj0gNCk7XHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgIC8vIDAgPD0gbiA8IDIxNDc0ODM2NDhcclxuICAgICAgICBuID0gZFtpXSArIChkW2kgKyAxXSA8PCA4KSArIChkW2kgKyAyXSA8PCAxNikgKyAoKGRbaSArIDNdICYgMHg3ZikgPDwgMjQpO1xyXG5cclxuICAgICAgICAvLyBQcm9iYWJpbGl0eSBuID49IDIuMTRlOSwgaXMgNzQ4MzY0OCAvIDIxNDc0ODM2NDggPSAwLjAwMzUgKDEgaW4gMjg2KS5cclxuICAgICAgICBpZiAobiA+PSAyLjE0ZTkpIHtcclxuICAgICAgICAgIGNyeXB0by5yYW5kb21CeXRlcyg0KS5jb3B5KGQsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gMCA8PSBuIDw9IDIxMzk5OTk5OTlcclxuICAgICAgICAgIC8vIDAgPD0gKG4gJSAxZTcpIDw9IDk5OTk5OTlcclxuICAgICAgICAgIHJkLnB1c2gobiAlIDFlNyk7XHJcbiAgICAgICAgICBpICs9IDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpID0gayAvIDQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihjcnlwdG9VbmF2YWlsYWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgayA9IHJkWy0taV07XHJcbiAgICBzZCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRyYWlsaW5nIGRpZ2l0cyB0byB6ZXJvcyBhY2NvcmRpbmcgdG8gc2QuXHJcbiAgICBpZiAoayAmJiBzZCkge1xyXG4gICAgICBuID0gbWF0aHBvdygxMCwgTE9HX0JBU0UgLSBzZCk7XHJcbiAgICAgIHJkW2ldID0gKGsgLyBuIHwgMCkgKiBuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB3b3JkcyB3aGljaCBhcmUgemVyby5cclxuICAgIGZvciAoOyByZFtpXSA9PT0gMDsgaS0tKSByZC5wb3AoKTtcclxuXHJcbiAgICAvLyBaZXJvP1xyXG4gICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgIGUgPSAwO1xyXG4gICAgICByZCA9IFswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGUgPSAtMTtcclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHdvcmRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgIGZvciAoOyByZFswXSA9PT0gMDsgZSAtPSBMT0dfQkFTRSkgcmQuc2hpZnQoKTtcclxuXHJcbiAgICAgIC8vIENvdW50IHRoZSBkaWdpdHMgb2YgdGhlIGZpcnN0IHdvcmQgb2YgcmQgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoayA9IDEsIG4gPSByZFswXTsgbiA+PSAxMDsgbiAvPSAxMCkgaysrO1xyXG5cclxuICAgICAgLy8gQWRqdXN0IHRoZSBleHBvbmVudCBmb3IgbGVhZGluZyB6ZXJvcyBvZiB0aGUgZmlyc3Qgd29yZCBvZiByZC5cclxuICAgICAgaWYgKGsgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGs7XHJcbiAgICB9XHJcblxyXG4gICAgci5lID0gZTtcclxuICAgIHIuZCA9IHJkO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIHJvdW5kZWQgdG8gYW4gaW50ZWdlciB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBUbyBlbXVsYXRlIGBNYXRoLnJvdW5kYCwgc2V0IHJvdW5kaW5nIHRvIDcgKFJPVU5EX0hBTEZfQ0VJTCkuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiByb3VuZCh4KSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCA9IG5ldyB0aGlzKHgpLCB4LmUgKyAxLCB0aGlzLnJvdW5kaW5nKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVyblxyXG4gICAqICAgMSAgICBpZiB4ID4gMCxcclxuICAgKiAgLTEgICAgaWYgeCA8IDAsXHJcbiAgICogICAwICAgIGlmIHggaXMgMCxcclxuICAgKiAgLTAgICAgaWYgeCBpcyAtMCxcclxuICAgKiAgIE5hTiAgb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzaWduKHgpIHtcclxuICAgIHggPSBuZXcgdGhpcyh4KTtcclxuICAgIHJldHVybiB4LmQgPyAoeC5kWzBdID8geC5zIDogMCAqIHgucykgOiB4LnMgfHwgTmFOO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zaW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuc2luaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzcXJ0KHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zcXJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgbWludXMgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzdWIoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnN1Yih5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRhbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkudGFuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRhbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnRhbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRydW5jKHgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZSh4ID0gbmV3IHRoaXMoeCksIHguZSArIDEsIDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENyZWF0ZSBhbmQgY29uZmlndXJlIGluaXRpYWwgRGVjaW1hbCBjb25zdHJ1Y3Rvci5cclxuICBEZWNpbWFsID0gY2xvbmUoREVGQVVMVFMpO1xyXG5cclxuICBEZWNpbWFsWydkZWZhdWx0J10gPSBEZWNpbWFsLkRlY2ltYWwgPSBEZWNpbWFsO1xyXG5cclxuICAvLyBDcmVhdGUgdGhlIGludGVybmFsIGNvbnN0YW50cyBmcm9tIHRoZWlyIHN0cmluZyB2YWx1ZXMuXHJcbiAgTE4xMCA9IG5ldyBEZWNpbWFsKExOMTApO1xyXG4gIFBJID0gbmV3IERlY2ltYWwoUEkpO1xyXG5cclxuXHJcbiAgLy8gRXhwb3J0LlxyXG5cclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgICB9KTtcclxuXHJcbiAgLy8gTm9kZSBhbmQgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cy5cclxuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJykge1xyXG4gICAgICBQW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gUC50b1N0cmluZztcclxuICAgICAgUFtTeW1ib2wudG9TdHJpbmdUYWddID0gJ0RlY2ltYWwnO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gRGVjaW1hbDtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxTY29wZSkge1xyXG4gICAgICBnbG9iYWxTY29wZSA9IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYgJiYgc2VsZi5zZWxmID09IHNlbGYgPyBzZWxmIDogd2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIG5vQ29uZmxpY3QgPSBnbG9iYWxTY29wZS5EZWNpbWFsO1xyXG4gICAgRGVjaW1hbC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBnbG9iYWxTY29wZS5EZWNpbWFsID0gbm9Db25mbGljdDtcclxuICAgICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgICB9O1xyXG5cclxuICAgIGdsb2JhbFNjb3BlLkRlY2ltYWwgPSBEZWNpbWFsO1xyXG4gIH1cclxufSkodGhpcyk7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBNYXAgdGhlIGNoYXJhY3RlcnMgdG8gZXNjYXBlIHRvIHRoZWlyIGVzY2FwZWQgdmFsdWVzLiBUaGUgbGlzdCBpcyBkZXJpdmVkXG4vLyBmcm9tIGh0dHA6Ly93d3cuY2VzcGVkZXMub3JnL2Jsb2cvODUvaG93LXRvLWVzY2FwZS1sYXRleC1zcGVjaWFsLWNoYXJhY3RlcnNcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIGRlZmF1bHRFc2NhcGVzID0ge1xuICBcIntcIjogXCJcXFxce1wiLFxuICBcIn1cIjogXCJcXFxcfVwiLFxuICBcIlxcXFxcIjogXCJcXFxcdGV4dGJhY2tzbGFzaHt9XCIsXG4gIFwiI1wiOiBcIlxcXFwjXCIsXG4gICQ6IFwiXFxcXCRcIixcbiAgXCIlXCI6IFwiXFxcXCVcIixcbiAgXCImXCI6IFwiXFxcXCZcIixcbiAgXCJeXCI6IFwiXFxcXHRleHRhc2NpaWNpcmN1bXt9XCIsXG4gIF86IFwiXFxcXF9cIixcbiAgXCJ+XCI6IFwiXFxcXHRleHRhc2NpaXRpbGRle31cIlxufTtcbnZhciBmb3JtYXRFc2NhcGVzID0ge1xuICBcIlxcdTIwMTNcIjogXCJcXFxcLS1cIixcbiAgXCJcXHUyMDE0XCI6IFwiXFxcXC0tLVwiLFxuICBcIiBcIjogXCJ+XCIsXG4gIFwiXFx0XCI6IFwiXFxcXHFxdWFke31cIixcbiAgXCJcXHJcXG5cIjogXCJcXFxcbmV3bGluZXt9XCIsXG4gIFwiXFxuXCI6IFwiXFxcXG5ld2xpbmV7fVwiXG59O1xuXG52YXIgZGVmYXVsdEVzY2FwZU1hcEZuID0gZnVuY3Rpb24gZGVmYXVsdEVzY2FwZU1hcEZuKGRlZmF1bHRFc2NhcGVzLCBmb3JtYXRFc2NhcGVzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgZGVmYXVsdEVzY2FwZXMsIGZvcm1hdEVzY2FwZXMpO1xufTtcblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBMYVRlWCBkb2N1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gYmUgZXNjYXBlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLnByZXNlcnZlRm9ybWF0dGluZyB3aGV0aGVyIGZvcm1hdHRpbmcgZXNjYXBlcyBzaG91bGRcbiAqICBiZSBwZXJmb3JtZWQgKGRlZmF1bHQ6IGZhbHNlKS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtcy5lc2NhcGVNYXBGbiB0aGUgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBlc2NhcGUgbWFwcy5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIExhVGVYLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpID0gX3JlZi5wcmVzZXJ2ZUZvcm1hdHRpbmcsXG4gICAgICBwcmVzZXJ2ZUZvcm1hdHRpbmcgPSBfcmVmJHByZXNlcnZlRm9ybWF0dGkgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpLFxuICAgICAgX3JlZiRlc2NhcGVNYXBGbiA9IF9yZWYuZXNjYXBlTWFwRm4sXG4gICAgICBlc2NhcGVNYXBGbiA9IF9yZWYkZXNjYXBlTWFwRm4gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRFc2NhcGVNYXBGbiA6IF9yZWYkZXNjYXBlTWFwRm47XG5cbiAgdmFyIHJ1bm5pbmdTdHIgPSBTdHJpbmcoc3RyKTtcbiAgdmFyIHJlc3VsdCA9IFwiXCI7XG5cbiAgdmFyIGVzY2FwZXMgPSBlc2NhcGVNYXBGbihfZXh0ZW5kcyh7fSwgZGVmYXVsdEVzY2FwZXMpLCBwcmVzZXJ2ZUZvcm1hdHRpbmcgPyBfZXh0ZW5kcyh7fSwgZm9ybWF0RXNjYXBlcykgOiB7fSk7XG4gIHZhciBlc2NhcGVLZXlzID0gT2JqZWN0LmtleXMoZXNjYXBlcyk7IC8vIGFzIGl0IGlzIHJldXNlZCBsYXRlciBvblxuXG4gIC8vIEFsZ29yaXRobTogR28gdGhyb3VnaCB0aGUgc3RyaW5nIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIsIGlmIGl0IG1hdGNoZXNcbiAgLy8gd2l0aCBvbmUgb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGVuIHdlJ2xsIHJlcGxhY2UgaXQgd2l0aCB0aGUgZXNjYXBlZFxuICAvLyB2ZXJzaW9uLlxuXG4gIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgIHZhciBzcGVjaWFsQ2hhckZvdW5kID0gZmFsc2U7XG4gICAgZXNjYXBlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXksIGluZGV4KSB7XG4gICAgICBpZiAoc3BlY2lhbENoYXJGb3VuZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocnVubmluZ1N0ci5sZW5ndGggPj0ga2V5Lmxlbmd0aCAmJiBydW5uaW5nU3RyLnNsaWNlKDAsIGtleS5sZW5ndGgpID09PSBrZXkpIHtcbiAgICAgICAgcmVzdWx0ICs9IGVzY2FwZXNbZXNjYXBlS2V5c1tpbmRleF1dO1xuICAgICAgICBydW5uaW5nU3RyID0gcnVubmluZ1N0ci5zbGljZShrZXkubGVuZ3RoLCBydW5uaW5nU3RyLmxlbmd0aCk7XG4gICAgICAgIHNwZWNpYWxDaGFyRm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghc3BlY2lhbENoYXJGb3VuZCkge1xuICAgICAgcmVzdWx0ICs9IHJ1bm5pbmdTdHIuc2xpY2UoMCwgMSk7XG4gICAgICBydW5uaW5nU3RyID0gcnVubmluZ1N0ci5zbGljZSgxLCBydW5uaW5nU3RyLmxlbmd0aCk7XG4gICAgfVxuICB9O1xuXG4gIHdoaWxlIChydW5uaW5nU3RyKSB7XG4gICAgX2xvb3AoKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTsiLCIvKipcbiAqIEBsaWNlbnNlIEZyYWN0aW9uLmpzIHY0LjAuMTIgMDkvMDkvMjAxNVxuICogaHR0cDovL3d3dy54YXJnLm9yZy8yMDE0LzAzL3JhdGlvbmFsLW51bWJlcnMtaW4tamF2YXNjcmlwdC9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZylcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICoqL1xuXG5cbi8qKlxuICpcbiAqIFRoaXMgY2xhc3Mgb2ZmZXJzIHRoZSBwb3NzaWJpbGl0eSB0byBjYWxjdWxhdGUgZnJhY3Rpb25zLlxuICogWW91IGNhbiBwYXNzIGEgZnJhY3Rpb24gaW4gZGlmZmVyZW50IGZvcm1hdHMuIEVpdGhlciBhcyBhcnJheSwgYXMgZG91YmxlLCBhcyBzdHJpbmcgb3IgYXMgYW4gaW50ZWdlci5cbiAqXG4gKiBBcnJheS9PYmplY3QgZm9ybVxuICogWyAwID0+IDxub21pbmF0b3I+LCAxID0+IDxkZW5vbWluYXRvcj4gXVxuICogWyBuID0+IDxub21pbmF0b3I+LCBkID0+IDxkZW5vbWluYXRvcj4gXVxuICpcbiAqIEludGVnZXIgZm9ybVxuICogLSBTaW5nbGUgaW50ZWdlciB2YWx1ZVxuICpcbiAqIERvdWJsZSBmb3JtXG4gKiAtIFNpbmdsZSBkb3VibGUgdmFsdWVcbiAqXG4gKiBTdHJpbmcgZm9ybVxuICogMTIzLjQ1NiAtIGEgc2ltcGxlIGRvdWJsZVxuICogMTIzLzQ1NiAtIGEgc3RyaW5nIGZyYWN0aW9uXG4gKiAxMjMuJzQ1NicgLSBhIGRvdWJsZSB3aXRoIHJlcGVhdGluZyBkZWNpbWFsIHBsYWNlc1xuICogMTIzLig0NTYpIC0gc3lub255bVxuICogMTIzLjQ1JzYnIC0gYSBkb3VibGUgd2l0aCByZXBlYXRpbmcgbGFzdCBwbGFjZVxuICogMTIzLjQ1KDYpIC0gc3lub255bVxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogdmFyIGYgPSBuZXcgRnJhY3Rpb24oXCI5LjQnMzEnXCIpO1xuICogZi5tdWwoWy00LCAzXSkuZGl2KDQuOSk7XG4gKlxuICovXG5cbihmdW5jdGlvbihyb290KSB7XG5cbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgLy8gTWF4aW11bSBzZWFyY2ggZGVwdGggZm9yIGN5Y2xpYyByYXRpb25hbCBudW1iZXJzLiAyMDAwIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoLlxuICAvLyBFeGFtcGxlOiAxLzcgPSAwLigxNDI4NTcpIGhhcyA2IHJlcGVhdGluZyBkZWNpbWFsIHBsYWNlcy5cbiAgLy8gSWYgTUFYX0NZQ0xFX0xFTiBnZXRzIHJlZHVjZWQsIGxvbmcgY3ljbGVzIHdpbGwgbm90IGJlIGRldGVjdGVkIGFuZCB0b1N0cmluZygpIG9ubHkgZ2V0cyB0aGUgZmlyc3QgMTAgZGlnaXRzXG4gIHZhciBNQVhfQ1lDTEVfTEVOID0gMjAwMDtcblxuICAvLyBQYXJzZWQgZGF0YSB0byBhdm9pZCBjYWxsaW5nIFwibmV3XCIgYWxsIHRoZSB0aW1lXG4gIHZhciBQID0ge1xuICAgIFwic1wiOiAxLFxuICAgIFwiblwiOiAwLFxuICAgIFwiZFwiOiAxXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobmFtZSkge1xuXG4gICAgZnVuY3Rpb24gZXJyb3JDb25zdHJ1Y3RvcigpIHtcbiAgICAgIHZhciB0ZW1wID0gRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHRlbXBbJ25hbWUnXSA9IHRoaXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgICB0aGlzWydzdGFjayddID0gdGVtcFsnc3RhY2snXTtcbiAgICAgIHRoaXNbJ21lc3NhZ2UnXSA9IHRlbXBbJ21lc3NhZ2UnXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFcnJvciBjb25zdHJ1Y3RvclxuICAgICAqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gSW50ZXJtZWRpYXRlSW5oZXJpdG9yKCkge31cbiAgICBJbnRlcm1lZGlhdGVJbmhlcml0b3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuICAgIGVycm9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IEludGVybWVkaWF0ZUluaGVyaXRvcigpO1xuXG4gICAgcmV0dXJuIGVycm9yQ29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgRGl2aXNpb25CeVplcm8gPSBGcmFjdGlvblsnRGl2aXNpb25CeVplcm8nXSA9IGNyZWF0ZUVycm9yKCdEaXZpc2lvbkJ5WmVybycpO1xuICB2YXIgSW52YWxpZFBhcmFtZXRlciA9IEZyYWN0aW9uWydJbnZhbGlkUGFyYW1ldGVyJ10gPSBjcmVhdGVFcnJvcignSW52YWxpZFBhcmFtZXRlcicpO1xuXG4gIGZ1bmN0aW9uIGFzc2lnbihuLCBzKSB7XG5cbiAgICBpZiAoaXNOYU4obiA9IHBhcnNlSW50KG4sIDEwKSkpIHtcbiAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG4gICAgfVxuICAgIHJldHVybiBuICogcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRocm93SW52YWxpZFBhcmFtKCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyKCk7XG4gIH1cblxuICB2YXIgcGFyc2UgPSBmdW5jdGlvbihwMSwgcDIpIHtcblxuICAgIHZhciBuID0gMCwgZCA9IDEsIHMgPSAxO1xuICAgIHZhciB2ID0gMCwgdyA9IDAsIHggPSAwLCB5ID0gMSwgeiA9IDE7XG5cbiAgICB2YXIgQSA9IDAsIEIgPSAxO1xuICAgIHZhciBDID0gMSwgRCA9IDE7XG5cbiAgICB2YXIgTiA9IDEwMDAwMDAwO1xuICAgIHZhciBNO1xuXG4gICAgaWYgKHAxID09PSB1bmRlZmluZWQgfHwgcDEgPT09IG51bGwpIHtcbiAgICAgIC8qIHZvaWQgKi9cbiAgICB9IGVsc2UgaWYgKHAyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG4gPSBwMTtcbiAgICAgIGQgPSBwMjtcbiAgICAgIHMgPSBuICogZDtcbiAgICB9IGVsc2VcbiAgICAgIHN3aXRjaCAodHlwZW9mIHAxKSB7XG5cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKFwiZFwiIGluIHAxICYmIFwiblwiIGluIHAxKSB7XG4gICAgICAgICAgICBuID0gcDFbXCJuXCJdO1xuICAgICAgICAgICAgZCA9IHAxW1wiZFwiXTtcbiAgICAgICAgICAgIGlmIChcInNcIiBpbiBwMSlcbiAgICAgICAgICAgICAgbiAqPSBwMVtcInNcIl07XG4gICAgICAgICAgfSBlbHNlIGlmICgwIGluIHAxKSB7XG4gICAgICAgICAgICBuID0gcDFbMF07XG4gICAgICAgICAgICBpZiAoMSBpbiBwMSlcbiAgICAgICAgICAgICAgZCA9IHAxWzFdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd0ludmFsaWRQYXJhbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzID0gbiAqIGQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHAxIDwgMCkge1xuICAgICAgICAgICAgcyA9IHAxO1xuICAgICAgICAgICAgcDEgPSAtcDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHAxICUgMSA9PT0gMCkge1xuICAgICAgICAgICAgbiA9IHAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAocDEgPiAwKSB7IC8vIGNoZWNrIGZvciAhPSAwLCBzY2FsZSB3b3VsZCBiZWNvbWUgTmFOIChsb2coMCkpLCB3aGljaCBjb252ZXJnZXMgcmVhbGx5IHNsb3dcblxuICAgICAgICAgICAgaWYgKHAxID49IDEpIHtcbiAgICAgICAgICAgICAgeiA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKDEgKyBNYXRoLmxvZyhwMSkgLyBNYXRoLkxOMTApKTtcbiAgICAgICAgICAgICAgcDEgLz0gejtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXNpbmcgRmFyZXkgU2VxdWVuY2VzXG4gICAgICAgICAgICAvLyBodHRwOi8vd3d3LmpvaG5kY29vay5jb20vYmxvZy8yMDEwLzEwLzIwL2Jlc3QtcmF0aW9uYWwtYXBwcm94aW1hdGlvbi9cblxuICAgICAgICAgICAgd2hpbGUgKEIgPD0gTiAmJiBEIDw9IE4pIHtcbiAgICAgICAgICAgICAgTSA9IChBICsgQykgLyAoQiArIEQpO1xuXG4gICAgICAgICAgICAgIGlmIChwMSA9PT0gTSkge1xuICAgICAgICAgICAgICAgIGlmIChCICsgRCA8PSBOKSB7XG4gICAgICAgICAgICAgICAgICBuID0gQSArIEM7XG4gICAgICAgICAgICAgICAgICBkID0gQiArIEQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChEID4gQikge1xuICAgICAgICAgICAgICAgICAgbiA9IEM7XG4gICAgICAgICAgICAgICAgICBkID0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbiA9IEE7XG4gICAgICAgICAgICAgICAgICBkID0gQjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGlmIChwMSA+IE0pIHtcbiAgICAgICAgICAgICAgICAgIEEgKz0gQztcbiAgICAgICAgICAgICAgICAgIEIgKz0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQyArPSBBO1xuICAgICAgICAgICAgICAgICAgRCArPSBCO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChCID4gTikge1xuICAgICAgICAgICAgICAgICAgbiA9IEM7XG4gICAgICAgICAgICAgICAgICBkID0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbiA9IEE7XG4gICAgICAgICAgICAgICAgICBkID0gQjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG4gKj0gejtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHAxKSB8fCBpc05hTihwMikpIHtcbiAgICAgICAgICAgIGQgPSBuID0gTmFOO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBCID0gcDEubWF0Y2goL1xcZCt8Li9nKTtcblxuICAgICAgICAgIGlmIChCID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3dJbnZhbGlkUGFyYW0oKTtcblxuICAgICAgICAgIGlmIChCW0FdID09PSAnLScpIHsvLyBDaGVjayBmb3IgbWludXMgc2lnbiBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgICBzID0gLTE7XG4gICAgICAgICAgICBBKys7XG4gICAgICAgICAgfSBlbHNlIGlmIChCW0FdID09PSAnKycpIHsvLyBDaGVjayBmb3IgcGx1cyBzaWduIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICAgIEErKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQi5sZW5ndGggPT09IEEgKyAxKSB7IC8vIENoZWNrIGlmIGl0J3MganVzdCBhIHNpbXBsZSBudW1iZXIgXCIxMjM0XCJcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBKytdLCBzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDFdID09PSAnLicgfHwgQltBXSA9PT0gJy4nKSB7IC8vIENoZWNrIGlmIGl0J3MgYSBkZWNpbWFsIG51bWJlclxuXG4gICAgICAgICAgICBpZiAoQltBXSAhPT0gJy4nKSB7IC8vIEhhbmRsZSAwLjUgYW5kIC41XG4gICAgICAgICAgICAgIHYgPSBhc3NpZ24oQltBKytdLCBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEErKztcblxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGRlY2ltYWwgcGxhY2VzXG4gICAgICAgICAgICBpZiAoQSArIDEgPT09IEIubGVuZ3RoIHx8IEJbQSArIDFdID09PSAnKCcgJiYgQltBICsgM10gPT09ICcpJyB8fCBCW0EgKyAxXSA9PT0gXCInXCIgJiYgQltBICsgM10gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7XG4gICAgICAgICAgICAgIHkgPSBNYXRoLnBvdygxMCwgQltBXS5sZW5ndGgpO1xuICAgICAgICAgICAgICBBKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciByZXBlYXRpbmcgcGxhY2VzXG4gICAgICAgICAgICBpZiAoQltBXSA9PT0gJygnICYmIEJbQSArIDJdID09PSAnKScgfHwgQltBXSA9PT0gXCInXCIgJiYgQltBICsgMl0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgIHggPSBhc3NpZ24oQltBICsgMV0sIHMpO1xuICAgICAgICAgICAgICB6ID0gTWF0aC5wb3coMTAsIEJbQSArIDFdLmxlbmd0aCkgLSAxO1xuICAgICAgICAgICAgICBBICs9IDM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDFdID09PSAnLycgfHwgQltBICsgMV0gPT09ICc6JykgeyAvLyBDaGVjayBmb3IgYSBzaW1wbGUgZnJhY3Rpb24gXCIxMjMvNDU2XCIgb3IgXCIxMjM6NDU2XCJcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7XG4gICAgICAgICAgICB5ID0gYXNzaWduKEJbQSArIDJdLCAxKTtcbiAgICAgICAgICAgIEEgKz0gMztcbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDNdID09PSAnLycgJiYgQltBICsgMV0gPT09ICcgJykgeyAvLyBDaGVjayBmb3IgYSBjb21wbGV4IGZyYWN0aW9uIFwiMTIzIDEvMlwiXG4gICAgICAgICAgICB2ID0gYXNzaWduKEJbQV0sIHMpO1xuICAgICAgICAgICAgdyA9IGFzc2lnbihCW0EgKyAyXSwgcyk7XG4gICAgICAgICAgICB5ID0gYXNzaWduKEJbQSArIDRdLCAxKTtcbiAgICAgICAgICAgIEEgKz0gNTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQi5sZW5ndGggPD0gQSkgeyAvLyBDaGVjayBmb3IgbW9yZSB0b2tlbnMgb24gdGhlIHN0YWNrXG4gICAgICAgICAgICBkID0geSAqIHo7XG4gICAgICAgICAgICBzID0gLyogdm9pZCAqL1xuICAgICAgICAgICAgICAgICAgICBuID0geCArIGQgKiB2ICsgeiAqIHc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggb24gZXJyb3IgKi9cbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG4gICAgICB9XG5cbiAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IERpdmlzaW9uQnlaZXJvKCk7XG4gICAgfVxuXG4gICAgUFtcInNcIl0gPSBzIDwgMCA/IC0xIDogMTtcbiAgICBQW1wiblwiXSA9IE1hdGguYWJzKG4pO1xuICAgIFBbXCJkXCJdID0gTWF0aC5hYnMoZCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbW9kcG93KGIsIGUsIG0pIHtcblxuICAgIHZhciByID0gMTtcbiAgICBmb3IgKDsgZSA+IDA7IGIgPSAoYiAqIGIpICUgbSwgZSA+Pj0gMSkge1xuXG4gICAgICBpZiAoZSAmIDEpIHtcbiAgICAgICAgciA9IChyICogYikgJSBtO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gY3ljbGVMZW4obiwgZCkge1xuXG4gICAgZm9yICg7IGQgJSAyID09PSAwO1xuICAgICAgICAgICAgZCAvPSAyKSB7XG4gICAgfVxuXG4gICAgZm9yICg7IGQgJSA1ID09PSAwO1xuICAgICAgICAgICAgZCAvPSA1KSB7XG4gICAgfVxuXG4gICAgaWYgKGQgPT09IDEpIC8vIENhdGNoIG5vbi1jeWNsaWMgbnVtYmVyc1xuICAgICAgcmV0dXJuIDA7XG5cbiAgICAvLyBJZiB3ZSB3b3VsZCBsaWtlIHRvIGNvbXB1dGUgcmVhbGx5IGxhcmdlIG51bWJlcnMgcXVpY2tlciwgd2UgY291bGQgbWFrZSB1c2Ugb2YgRmVybWF0J3MgbGl0dGxlIHRoZW9yZW06XG4gICAgLy8gMTBeKGQtMSkgJSBkID09IDFcbiAgICAvLyBIb3dldmVyLCB3ZSBkb24ndCBuZWVkIHN1Y2ggbGFyZ2UgbnVtYmVycyBhbmQgTUFYX0NZQ0xFX0xFTiBzaG91bGQgYmUgdGhlIGNhcHN0b25lLFxuICAgIC8vIGFzIHdlIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSBudW1iZXJzIHRvIHN0cmluZ3MuXG5cbiAgICB2YXIgcmVtID0gMTAgJSBkO1xuICAgIHZhciB0ID0gMTtcblxuICAgIGZvciAoOyByZW0gIT09IDE7IHQrKykge1xuICAgICAgcmVtID0gcmVtICogMTAgJSBkO1xuXG4gICAgICBpZiAodCA+IE1BWF9DWUNMRV9MRU4pXG4gICAgICAgIHJldHVybiAwOyAvLyBSZXR1cm5pbmcgMCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3QgcHJpbnQgaXQgYXMgYSBjeWNsaWMgbnVtYmVyLiBJdCdzIGxpa2VseSB0aGF0IHRoZSBhbnN3ZXIgaXMgYGQtMWBcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG4gIH1cblxuXG4gICAgIGZ1bmN0aW9uIGN5Y2xlU3RhcnQobiwgZCwgbGVuKSB7XG5cbiAgICB2YXIgcmVtMSA9IDE7XG4gICAgdmFyIHJlbTIgPSBtb2Rwb3coMTAsIGxlbiwgZCk7XG5cbiAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDMwMDsgdCsrKSB7IC8vIHMgPCB+bG9nMTAoTnVtYmVyLk1BWF9WQUxVRSlcbiAgICAgIC8vIFNvbHZlIDEwXnMgPT0gMTBeKHMrdCkgKG1vZCBkKVxuXG4gICAgICBpZiAocmVtMSA9PT0gcmVtMilcbiAgICAgICAgcmV0dXJuIHQ7XG5cbiAgICAgIHJlbTEgPSByZW0xICogMTAgJSBkO1xuICAgICAgcmVtMiA9IHJlbTIgKiAxMCAlIGQ7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2NkKGEsIGIpIHtcblxuICAgIGlmICghYSlcbiAgICAgIHJldHVybiBiO1xuICAgIGlmICghYilcbiAgICAgIHJldHVybiBhO1xuXG4gICAgd2hpbGUgKDEpIHtcbiAgICAgIGEgJT0gYjtcbiAgICAgIGlmICghYSlcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgICBiICU9IGE7XG4gICAgICBpZiAoIWIpXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTW9kdWxlIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge251bWJlcnxGcmFjdGlvbj19IGFcbiAgICogQHBhcmFtIHtudW1iZXI9fSBiXG4gICAqL1xuICBmdW5jdGlvbiBGcmFjdGlvbihhLCBiKSB7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnJhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKGEsIGIpO1xuICAgIH1cblxuICAgIHBhcnNlKGEsIGIpO1xuXG4gICAgaWYgKEZyYWN0aW9uWydSRURVQ0UnXSkge1xuICAgICAgYSA9IGdjZChQW1wiZFwiXSwgUFtcIm5cIl0pOyAvLyBBYnVzZSBhXG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSAxO1xuICAgIH1cblxuICAgIHRoaXNbXCJzXCJdID0gUFtcInNcIl07XG4gICAgdGhpc1tcIm5cIl0gPSBQW1wiblwiXSAvIGE7XG4gICAgdGhpc1tcImRcIl0gPSBQW1wiZFwiXSAvIGE7XG4gIH1cblxuICAvKipcbiAgICogQm9vbGVhbiBnbG9iYWwgdmFyaWFibGUgdG8gYmUgYWJsZSB0byBkaXNhYmxlIGF1dG9tYXRpYyByZWR1Y3Rpb24gb2YgdGhlIGZyYWN0aW9uXG4gICAqXG4gICAqL1xuICBGcmFjdGlvblsnUkVEVUNFJ10gPSAxO1xuXG4gIEZyYWN0aW9uLnByb3RvdHlwZSA9IHtcblxuICAgIFwic1wiOiAxLFxuICAgIFwiblwiOiAwLFxuICAgIFwiZFwiOiAxLFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgdmFsdWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oLTQpLmFicygpID0+IDRcbiAgICAgKiovXG4gICAgXCJhYnNcIjogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24odGhpc1tcIm5cIl0sIHRoaXNbXCJkXCJdKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW52ZXJ0cyB0aGUgc2lnbiBvZiB0aGUgY3VycmVudCBmcmFjdGlvblxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigtNCkubmVnKCkgPT4gNFxuICAgICAqKi9cbiAgICBcIm5lZ1wiOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbigtdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSwgdGhpc1tcImRcIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byByYXRpb25hbCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKHtuOiAyLCBkOiAzfSkuYWRkKFwiMTQuOVwiKSA9PiA0NjcgLyAzMFxuICAgICAqKi9cbiAgICBcImFkZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAqIFBbXCJkXCJdICsgUFtcInNcIl0gKiB0aGlzW1wiZFwiXSAqIFBbXCJuXCJdLFxuICAgICAgICAgICAgICB0aGlzW1wiZFwiXSAqIFBbXCJkXCJdXG4gICAgICAgICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN1YnRyYWN0cyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbih7bjogMiwgZDogM30pLmFkZChcIjE0LjlcIikgPT4gLTQyNyAvIDMwXG4gICAgICoqL1xuICAgIFwic3ViXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcImRcIl0gLSBQW1wic1wiXSAqIHRoaXNbXCJkXCJdICogUFtcIm5cIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIi0xNy4oMzQ1KVwiKS5tdWwoMykgPT4gNTc3NiAvIDExMVxuICAgICAqKi9cbiAgICBcIm11bFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiBQW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcIm5cIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGl2aWRlcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIi0xNy4oMzQ1KVwiKS5pbnZlcnNlKCkuZGl2KDMpXG4gICAgICoqL1xuICAgIFwiZGl2XCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIFBbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSxcbiAgICAgICAgICAgICAgdGhpc1tcImRcIl0gKiBQW1wiblwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3RcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oXCItMTcuKDM0NSlcIikuY2xvbmUoKVxuICAgICAqKi9cbiAgICBcImNsb25lXCI6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgbW9kdWxvIG9mIHR3byByYXRpb25hbCBudW1iZXJzIC0gYSBtb3JlIHByZWNpc2UgZm1vZFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbignNC4oMyknKS5tb2QoWzcsIDhdKSA9PiAoMTMvMykgJSAoNy84KSA9ICg1LzYpXG4gICAgICoqL1xuICAgIFwibW9kXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbJ24nXSkgfHwgaXNOYU4odGhpc1snZCddKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICUgdGhpc1tcImRcIl0sIDEpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIGlmICgwID09PSBQW1wiblwiXSAmJiAwID09PSB0aGlzW1wiZFwiXSkge1xuICAgICAgICBGcmFjdGlvbigwLCAwKTsgLy8gVGhyb3cgRGl2aXNpb25CeVplcm9cbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAqIEZpcnN0IHNpbGx5IGF0dGVtcHQsIGtpbmRhIHNsb3dcbiAgICAgICAqXG4gICAgICAgcmV0dXJuIHRoYXRbXCJzdWJcIl0oe1xuICAgICAgIFwiblwiOiBudW1bXCJuXCJdICogTWF0aC5mbG9vcigodGhpcy5uIC8gdGhpcy5kKSAvIChudW0ubiAvIG51bS5kKSksXG4gICAgICAgXCJkXCI6IG51bVtcImRcIl0sXG4gICAgICAgXCJzXCI6IHRoaXNbXCJzXCJdXG4gICAgICAgfSk7Ki9cblxuICAgICAgLypcbiAgICAgICAqIE5ldyBhdHRlbXB0OiBhMSAvIGIxID0gYTIgLyBiMiAqIHEgKyByXG4gICAgICAgKiA9PiBiMiAqIGExID0gYTIgKiBiMSAqIHEgKyBiMSAqIGIyICogclxuICAgICAgICogPT4gKGIyICogYTEgJSBhMiAqIGIxKSAvIChiMSAqIGIyKVxuICAgICAgICovXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIChQW1wiZFwiXSAqIHRoaXNbXCJuXCJdKSAlIChQW1wiblwiXSAqIHRoaXNbXCJkXCJdKSxcbiAgICAgICAgICAgICAgUFtcImRcIl0gKiB0aGlzW1wiZFwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGdjZCBvZiB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbig1LDgpLmdjZCgzLDcpID0+IDEvNTZcbiAgICAgKi9cbiAgICBcImdjZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuXG4gICAgICAvLyBnY2QoYSAvIGIsIGMgLyBkKSA9IGdjZChhLCBjKSAvIGxjbShiLCBkKVxuXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKGdjZChQW1wiblwiXSwgdGhpc1tcIm5cIl0pICogZ2NkKFBbXCJkXCJdLCB0aGlzW1wiZFwiXSksIFBbXCJkXCJdICogdGhpc1tcImRcIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGxjbSBvZiB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbig1LDgpLmxjbSgzLDcpID0+IDE1XG4gICAgICovXG4gICAgXCJsY21cIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcblxuICAgICAgLy8gbGNtKGEgLyBiLCBjIC8gZCkgPSBsY20oYSwgYykgLyBnY2QoYiwgZClcblxuICAgICAgaWYgKFBbXCJuXCJdID09PSAwICYmIHRoaXNbXCJuXCJdID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFBbXCJuXCJdICogdGhpc1tcIm5cIl0sIGdjZChQW1wiblwiXSwgdGhpc1tcIm5cIl0pICogZ2NkKFBbXCJkXCJdLCB0aGlzW1wiZFwiXSkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBjZWlsIG9mIGEgcmF0aW9uYWwgbnVtYmVyXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLmNlaWwoKSA9PiAoNSAvIDEpXG4gICAgICoqL1xuICAgIFwiY2VpbFwiOiBmdW5jdGlvbihwbGFjZXMpIHtcblxuICAgICAgcGxhY2VzID0gTWF0aC5wb3coMTAsIHBsYWNlcyB8fCAwKTtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbXCJuXCJdKSB8fCBpc05hTih0aGlzW1wiZFwiXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihOYU4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLmNlaWwocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgZmxvb3Igb2YgYSByYXRpb25hbCBudW1iZXJcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oJzQuKDMpJykuZmxvb3IoKSA9PiAoNCAvIDEpXG4gICAgICoqL1xuICAgIFwiZmxvb3JcIjogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIGlmIChpc05hTih0aGlzW1wiblwiXSkgfHwgaXNOYU4odGhpc1tcImRcIl0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTmFOKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5mbG9vcihwbGFjZXMgKiB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdIC8gdGhpc1tcImRcIl0pLCBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3VuZHMgYSByYXRpb25hbCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLnJvdW5kKCkgPT4gKDQgLyAxKVxuICAgICAqKi9cbiAgICBcInJvdW5kXCI6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1tcIm5cIl0pIHx8IGlzTmFOKHRoaXNbXCJkXCJdKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE1hdGgucm91bmQocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW52ZXJzZSBvZiB0aGUgZnJhY3Rpb24sIG1lYW5zIG51bWVyYXRvciBhbmQgZGVudW1lcmF0b3IgYXJlIGV4Y2hhbmdlZFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihbLTMsIDRdKS5pbnZlcnNlKCkgPT4gLTQgLyAzXG4gICAgICoqL1xuICAgIFwiaW52ZXJzZVwiOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzW1wic1wiXSAqIHRoaXNbXCJkXCJdLCB0aGlzW1wiblwiXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGZyYWN0aW9uIHRvIHNvbWUgaW50ZWdlciBleHBvbmVudFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigtMSwyKS5wb3coLTMpID0+IC04XG4gICAgICovXG4gICAgXCJwb3dcIjogZnVuY3Rpb24obSkge1xuXG4gICAgICBpZiAobSA8IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLnBvdyh0aGlzWydzJ10gKiB0aGlzW1wiZFwiXSwgLW0pLCBNYXRoLnBvdyh0aGlzW1wiblwiXSwgLW0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5wb3codGhpc1sncyddICogdGhpc1tcIm5cIl0sIG0pLCBNYXRoLnBvdyh0aGlzW1wiZFwiXSwgbSkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oMTkuNikuZXF1YWxzKFs5OCwgNV0pO1xuICAgICAqKi9cbiAgICBcImVxdWFsc1wiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSA9PT0gUFtcInNcIl0gKiBQW1wiblwiXSAqIHRoaXNbXCJkXCJdOyAvLyBTYW1lIGFzIGNvbXBhcmUoKSA9PT0gMFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oMTkuNikuZXF1YWxzKFs5OCwgNV0pO1xuICAgICAqKi9cbiAgICBcImNvbXBhcmVcIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIHZhciB0ID0gKHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSAtIFBbXCJzXCJdICogUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSk7XG4gICAgICByZXR1cm4gKDAgPCB0KSAtICh0IDwgMCk7XG4gICAgfSxcblxuICAgIFwic2ltcGxpZnlcIjogZnVuY3Rpb24oZXBzKSB7XG5cbiAgICAgIC8vIEZpcnN0IG5haXZlIGltcGxlbWVudGF0aW9uLCBuZWVkcyBpbXByb3ZlbWVudFxuXG4gICAgICBpZiAoaXNOYU4odGhpc1snbiddKSB8fCBpc05hTih0aGlzWydkJ10pKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udCA9IHRoaXNbJ2FicyddKClbJ3RvQ29udGludWVkJ10oKTtcblxuICAgICAgZXBzID0gZXBzIHx8IDAuMDAxO1xuXG4gICAgICBmdW5jdGlvbiByZWMoYSkge1xuICAgICAgICBpZiAoYS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihhWzBdKTtcbiAgICAgICAgcmV0dXJuIHJlYyhhLnNsaWNlKDEpKVsnaW52ZXJzZSddKClbJ2FkZCddKGFbMF0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlYyhjb250LnNsaWNlKDAsIGkgKyAxKSk7XG4gICAgICAgIGlmICh0bXBbJ3N1YiddKHRoaXNbJ2FicyddKCkpWydhYnMnXSgpLnZhbHVlT2YoKSA8IGVwcykge1xuICAgICAgICAgIHJldHVybiB0bXBbJ211bCddKHRoaXNbJ3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgZGl2aXNpYmxlXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKDE5LjYpLmRpdmlzaWJsZSgxLjUpO1xuICAgICAqL1xuICAgIFwiZGl2aXNpYmxlXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gISghKFBbXCJuXCJdICogdGhpc1tcImRcIl0pIHx8ICgodGhpc1tcIm5cIl0gKiBQW1wiZFwiXSkgJSAoUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSkpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZyYWN0aW9uXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMTAwLic5MTgyMydcIikudmFsdWVPZigpID0+IDEwMC45MTgyMzkxODIzOTE4M1xuICAgICAqKi9cbiAgICAndmFsdWVPZic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nLWZyYWN0aW9uIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMS4nMydcIikudG9GcmFjdGlvbigpID0+IFwiNCAxLzNcIlxuICAgICAqKi9cbiAgICAndG9GcmFjdGlvbic6IGZ1bmN0aW9uKGV4Y2x1ZGVXaG9sZSkge1xuXG4gICAgICB2YXIgd2hvbGUsIHN0ciA9IFwiXCI7XG4gICAgICB2YXIgbiA9IHRoaXNbXCJuXCJdO1xuICAgICAgdmFyIGQgPSB0aGlzW1wiZFwiXTtcbiAgICAgIGlmICh0aGlzW1wic1wiXSA8IDApIHtcbiAgICAgICAgc3RyICs9ICctJztcbiAgICAgIH1cblxuICAgICAgaWYgKGQgPT09IDEpIHtcbiAgICAgICAgc3RyICs9IG47XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChleGNsdWRlV2hvbGUgJiYgKHdob2xlID0gTWF0aC5mbG9vcihuIC8gZCkpID4gMCkge1xuICAgICAgICAgIHN0ciArPSB3aG9sZTtcbiAgICAgICAgICBzdHIgKz0gXCIgXCI7XG4gICAgICAgICAgbiAlPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IG47XG4gICAgICAgIHN0ciArPSAnLyc7XG4gICAgICAgIHN0ciArPSBkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxhdGV4IHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMS4nMydcIikudG9MYXRleCgpID0+IFwiXFxmcmFjezR9ezN9XCJcbiAgICAgKiovXG4gICAgJ3RvTGF0ZXgnOiBmdW5jdGlvbihleGNsdWRlV2hvbGUpIHtcblxuICAgICAgdmFyIHdob2xlLCBzdHIgPSBcIlwiO1xuICAgICAgdmFyIG4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBkID0gdGhpc1tcImRcIl07XG4gICAgICBpZiAodGhpc1tcInNcIl0gPCAwKSB7XG4gICAgICAgIHN0ciArPSAnLSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChkID09PSAxKSB7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpZiAoZXhjbHVkZVdob2xlICYmICh3aG9sZSA9IE1hdGguZmxvb3IobiAvIGQpKSA+IDApIHtcbiAgICAgICAgICBzdHIgKz0gd2hvbGU7XG4gICAgICAgICAgbiAlPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IFwiXFxcXGZyYWN7XCI7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgICBzdHIgKz0gJ317JztcbiAgICAgICAgc3RyICs9IGQ7XG4gICAgICAgIHN0ciArPSAnfSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbnRpbnVlZCBmcmFjdGlvbiBlbGVtZW50c1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIjcvOFwiKS50b0NvbnRpbnVlZCgpID0+IFswLDEsN11cbiAgICAgKi9cbiAgICAndG9Db250aW51ZWQnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIHQ7XG4gICAgICB2YXIgYSA9IHRoaXNbJ24nXTtcbiAgICAgIHZhciBiID0gdGhpc1snZCddO1xuICAgICAgdmFyIHJlcyA9IFtdO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1snbiddKSB8fCBpc05hTih0aGlzWydkJ10pKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIGRvIHtcbiAgICAgICAgcmVzLnB1c2goTWF0aC5mbG9vcihhIC8gYikpO1xuICAgICAgICB0ID0gYSAlIGI7XG4gICAgICAgIGEgPSBiO1xuICAgICAgICBiID0gdDtcbiAgICAgIH0gd2hpbGUgKGEgIT09IDEpO1xuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZnJhY3Rpb24gd2l0aCBhbGwgZGlnaXRzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMTAwLic5MTgyMydcIikudG9TdHJpbmcoKSA9PiBcIjEwMC4oOTE4MjMpXCJcbiAgICAgKiovXG4gICAgJ3RvU3RyaW5nJzogZnVuY3Rpb24oZGVjKSB7XG5cbiAgICAgIHZhciBnO1xuICAgICAgdmFyIE4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBEID0gdGhpc1tcImRcIl07XG5cbiAgICAgIGlmIChpc05hTihOKSB8fCBpc05hTihEKSkge1xuICAgICAgICByZXR1cm4gXCJOYU5cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFGcmFjdGlvblsnUkVEVUNFJ10pIHtcbiAgICAgICAgZyA9IGdjZChOLCBEKTtcbiAgICAgICAgTiAvPSBnO1xuICAgICAgICBEIC89IGc7XG4gICAgICB9XG5cbiAgICAgIGRlYyA9IGRlYyB8fCAxNTsgLy8gMTUgPSBkZWNpbWFsIHBsYWNlcyB3aGVuIG5vIHJlcGl0YXRpb25cblxuICAgICAgdmFyIGN5Y0xlbiA9IGN5Y2xlTGVuKE4sIEQpOyAvLyBDeWNsZSBsZW5ndGhcbiAgICAgIHZhciBjeWNPZmYgPSBjeWNsZVN0YXJ0KE4sIEQsIGN5Y0xlbik7IC8vIEN5Y2xlIHN0YXJ0XG5cbiAgICAgIHZhciBzdHIgPSB0aGlzWydzJ10gPT09IC0xID8gXCItXCIgOiBcIlwiO1xuXG4gICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuXG4gICAgICBOICU9IEQ7XG4gICAgICBOICo9IDEwO1xuXG4gICAgICBpZiAoTilcbiAgICAgICAgc3RyICs9IFwiLlwiO1xuXG4gICAgICBpZiAoY3ljTGVuKSB7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y09mZjsgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBcIihcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y0xlbjsgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBcIilcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBkZWM7IE4gJiYgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfTtcblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZVtcImFtZFwiXSkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gRnJhY3Rpb247XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsndmFsdWUnOiB0cnVlfSk7XG4gICAgRnJhY3Rpb25bJ2RlZmF1bHQnXSA9IEZyYWN0aW9uO1xuICAgIEZyYWN0aW9uWydGcmFjdGlvbiddID0gRnJhY3Rpb247XG4gICAgbW9kdWxlWydleHBvcnRzJ10gPSBGcmFjdGlvbjtcbiAgfSBlbHNlIHtcbiAgICByb290WydGcmFjdGlvbiddID0gRnJhY3Rpb247XG4gIH1cblxufSkodGhpcyk7XG4iLCIvKlxyXG4gKiBOYXR1cmFsIFNvcnQgYWxnb3JpdGhtIGZvciBKYXZhc2NyaXB0IC0gVmVyc2lvbiAwLjcgLSBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZVxyXG4gKiBBdXRob3I6IEppbSBQYWxtZXIgKGJhc2VkIG9uIGNodW5raW5nIGlkZWEgZnJvbSBEYXZlIEtvZWxsZSlcclxuICovXHJcbi8qanNoaW50IHVudXNlZDpmYWxzZSAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5hdHVyYWxTb3J0IChhLCBiKSB7XHJcblx0XCJ1c2Ugc3RyaWN0XCI7XHJcblx0dmFyIHJlID0gLyheKFsrXFwtXT8oPzowfFsxLTldXFxkKikoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPyk/JHxeMHhbMC05YS1mXSskfFxcZCspL2dpLFxyXG5cdFx0c3JlID0gLyheWyBdKnxbIF0qJCkvZyxcclxuXHRcdGRyZSA9IC8oXihbXFx3IF0rLD9bXFx3IF0rKT9bXFx3IF0rLD9bXFx3IF0rXFxkKzpcXGQrKDpcXGQrKT9bXFx3IF0/fF5cXGR7MSw0fVtcXC9cXC1dXFxkezEsNH1bXFwvXFwtXVxcZHsxLDR9fF5cXHcrLCBcXHcrIFxcZCssIFxcZHs0fSkvLFxyXG5cdFx0aHJlID0gL14weFswLTlhLWZdKyQvaSxcclxuXHRcdG9yZSA9IC9eMC8sXHJcblx0XHRpID0gZnVuY3Rpb24ocykgeyByZXR1cm4gbmF0dXJhbFNvcnQuaW5zZW5zaXRpdmUgJiYgKCcnICsgcykudG9Mb3dlckNhc2UoKSB8fCAnJyArIHM7IH0sXHJcblx0XHQvLyBjb252ZXJ0IGFsbCB0byBzdHJpbmdzIHN0cmlwIHdoaXRlc3BhY2VcclxuXHRcdHggPSBpKGEpLnJlcGxhY2Uoc3JlLCAnJykgfHwgJycsXHJcblx0XHR5ID0gaShiKS5yZXBsYWNlKHNyZSwgJycpIHx8ICcnLFxyXG5cdFx0Ly8gY2h1bmsvdG9rZW5pemVcclxuXHRcdHhOID0geC5yZXBsYWNlKHJlLCAnXFwwJDFcXDAnKS5yZXBsYWNlKC9cXDAkLywnJykucmVwbGFjZSgvXlxcMC8sJycpLnNwbGl0KCdcXDAnKSxcclxuXHRcdHlOID0geS5yZXBsYWNlKHJlLCAnXFwwJDFcXDAnKS5yZXBsYWNlKC9cXDAkLywnJykucmVwbGFjZSgvXlxcMC8sJycpLnNwbGl0KCdcXDAnKSxcclxuXHRcdC8vIG51bWVyaWMsIGhleCBvciBkYXRlIGRldGVjdGlvblxyXG5cdFx0eEQgPSBwYXJzZUludCh4Lm1hdGNoKGhyZSksIDE2KSB8fCAoeE4ubGVuZ3RoICE9PSAxICYmIHgubWF0Y2goZHJlKSAmJiBEYXRlLnBhcnNlKHgpKSxcclxuXHRcdHlEID0gcGFyc2VJbnQoeS5tYXRjaChocmUpLCAxNikgfHwgeEQgJiYgeS5tYXRjaChkcmUpICYmIERhdGUucGFyc2UoeSkgfHwgbnVsbCxcclxuXHRcdG9GeE5jTCwgb0Z5TmNMO1xyXG5cdC8vIGZpcnN0IHRyeSBhbmQgc29ydCBIZXggY29kZXMgb3IgRGF0ZXNcclxuXHRpZiAoeUQpIHtcclxuXHRcdGlmICggeEQgPCB5RCApIHsgcmV0dXJuIC0xOyB9XHJcblx0XHRlbHNlIGlmICggeEQgPiB5RCApIHsgcmV0dXJuIDE7IH1cclxuXHR9XHJcblx0Ly8gbmF0dXJhbCBzb3J0aW5nIHRocm91Z2ggc3BsaXQgbnVtZXJpYyBzdHJpbmdzIGFuZCBkZWZhdWx0IHN0cmluZ3NcclxuXHRmb3IodmFyIGNMb2M9MCwgbnVtUz1NYXRoLm1heCh4Ti5sZW5ndGgsIHlOLmxlbmd0aCk7IGNMb2MgPCBudW1TOyBjTG9jKyspIHtcclxuXHRcdC8vIGZpbmQgZmxvYXRzIG5vdCBzdGFydGluZyB3aXRoICcwJywgc3RyaW5nIG9yIDAgaWYgbm90IGRlZmluZWQgKENsaW50IFByaWVzdClcclxuXHRcdG9GeE5jTCA9ICEoeE5bY0xvY10gfHwgJycpLm1hdGNoKG9yZSkgJiYgcGFyc2VGbG9hdCh4TltjTG9jXSkgfHwgeE5bY0xvY10gfHwgMDtcclxuXHRcdG9GeU5jTCA9ICEoeU5bY0xvY10gfHwgJycpLm1hdGNoKG9yZSkgJiYgcGFyc2VGbG9hdCh5TltjTG9jXSkgfHwgeU5bY0xvY10gfHwgMDtcclxuXHRcdC8vIGhhbmRsZSBudW1lcmljIHZzIHN0cmluZyBjb21wYXJpc29uIC0gbnVtYmVyIDwgc3RyaW5nIC0gKEt5bGUgQWRhbXMpXHJcblx0XHRpZiAoaXNOYU4ob0Z4TmNMKSAhPT0gaXNOYU4ob0Z5TmNMKSkgeyByZXR1cm4gKGlzTmFOKG9GeE5jTCkpID8gMSA6IC0xOyB9XHJcblx0XHQvLyByZWx5IG9uIHN0cmluZyBjb21wYXJpc29uIGlmIGRpZmZlcmVudCB0eXBlcyAtIGkuZS4gJzAyJyA8IDIgIT0gJzAyJyA8ICcyJ1xyXG5cdFx0ZWxzZSBpZiAodHlwZW9mIG9GeE5jTCAhPT0gdHlwZW9mIG9GeU5jTCkge1xyXG5cdFx0XHRvRnhOY0wgKz0gJyc7XHJcblx0XHRcdG9GeU5jTCArPSAnJztcclxuXHRcdH1cclxuXHRcdGlmIChvRnhOY0wgPCBvRnlOY0wpIHsgcmV0dXJuIC0xOyB9XHJcblx0XHRpZiAob0Z4TmNMID4gb0Z5TmNMKSB7IHJldHVybiAxOyB9XHJcblx0fVxyXG5cdHJldHVybiAwO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmVyc2lvbiA9IGV4cG9ydHMuY3JlYXRlVXBwZXJjYXNlRSA9IGV4cG9ydHMuY3JlYXRlVXBwZXJjYXNlUGkgPSBleHBvcnRzLmNyZWF0ZUkgPSBleHBvcnRzLmNyZWF0ZVNRUlQyID0gZXhwb3J0cy5jcmVhdGVTUVJUMV8yID0gZXhwb3J0cy5jcmVhdGVMT0cxMEUgPSBleHBvcnRzLmNyZWF0ZUxPRzJFID0gZXhwb3J0cy5jcmVhdGVMTjEwID0gZXhwb3J0cy5jcmVhdGVMTjIgPSBleHBvcnRzLmNyZWF0ZVBoaSA9IGV4cG9ydHMuY3JlYXRlRSA9IGV4cG9ydHMuY3JlYXRlVGF1ID0gZXhwb3J0cy5jcmVhdGVQaSA9IGV4cG9ydHMuY3JlYXRlTmFOID0gZXhwb3J0cy5jcmVhdGVJbmZpbml0eSA9IGV4cG9ydHMuY3JlYXRlTnVsbCA9IGV4cG9ydHMuY3JlYXRlRmFsc2UgPSBleHBvcnRzLmNyZWF0ZVRydWUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdmVyc2lvbiA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5cbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vdXRpbHMvYmlnbnVtYmVyL2NvbnN0YW50c1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBjcmVhdGVUcnVlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd0cnVlJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59KTtcbmV4cG9ydHMuY3JlYXRlVHJ1ZSA9IGNyZWF0ZVRydWU7XG52YXIgY3JlYXRlRmFsc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ2ZhbHNlJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZhbHNlID0gY3JlYXRlRmFsc2U7XG52YXIgY3JlYXRlTnVsbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnbnVsbCcsIFtdLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBudWxsO1xufSk7XG5leHBvcnRzLmNyZWF0ZU51bGwgPSBjcmVhdGVOdWxsO1xudmFyIGNyZWF0ZUluZmluaXR5ID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdJbmZpbml0eScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoSW5maW5pdHkpIDogSW5maW5pdHk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSW5maW5pdHkgPSBjcmVhdGVJbmZpbml0eTtcbnZhciBjcmVhdGVOYU4gPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ05hTicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciBjb25maWcgPSBfcmVmMi5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMi5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoTmFOKSA6IE5hTjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOYU4gPSBjcmVhdGVOYU47XG52YXIgY3JlYXRlUGkgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ3BpJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYzLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYzLkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gKDAsIF9jb25zdGFudHMuY3JlYXRlQmlnTnVtYmVyUGkpKEJpZ051bWJlcikgOiBfbnVtYmVyLnBpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVBpID0gY3JlYXRlUGk7XG52YXIgY3JlYXRlVGF1ID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCd0YXUnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgY29uZmlnID0gX3JlZjQuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjQuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJUYXUpKEJpZ051bWJlcikgOiBfbnVtYmVyLnRhdTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYXUgPSBjcmVhdGVUYXU7XG52YXIgY3JlYXRlRSA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnZScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gIHZhciBjb25maWcgPSBfcmVmNS5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmNS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/ICgwLCBfY29uc3RhbnRzLmNyZWF0ZUJpZ051bWJlckUpKEJpZ051bWJlcikgOiBfbnVtYmVyLmU7XG59KTsgLy8gZ29sZGVuIHJhdGlvLCAoMStzcXJ0KDUpKS8yXG5cbmV4cG9ydHMuY3JlYXRlRSA9IGNyZWF0ZUU7XG52YXIgY3JlYXRlUGhpID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdwaGknLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNikge1xuICB2YXIgY29uZmlnID0gX3JlZjYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjYuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJQaGkpKEJpZ051bWJlcikgOiBfbnVtYmVyLnBoaTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQaGkgPSBjcmVhdGVQaGk7XG52YXIgY3JlYXRlTE4yID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdMTjInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNykge1xuICB2YXIgY29uZmlnID0gX3JlZjcuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjcuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDIpLmxuKCkgOiBNYXRoLkxOMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMTjIgPSBjcmVhdGVMTjI7XG52YXIgY3JlYXRlTE4xMCA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnTE4xMCcsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY4KSB7XG4gIHZhciBjb25maWcgPSBfcmVmOC5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmOC5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMTApLmxuKCkgOiBNYXRoLkxOMTA7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE4xMCA9IGNyZWF0ZUxOMTA7XG52YXIgY3JlYXRlTE9HMkUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xPRzJFJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWY5LmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWY5LkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gbmV3IEJpZ051bWJlcigxKS5kaXYobmV3IEJpZ051bWJlcigyKS5sbigpKSA6IE1hdGguTE9HMkU7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE9HMkUgPSBjcmVhdGVMT0cyRTtcbnZhciBjcmVhdGVMT0cxMEUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xPRzEwRScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMCkge1xuICB2YXIgY29uZmlnID0gX3JlZjEwLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYxMC5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMSkuZGl2KG5ldyBCaWdOdW1iZXIoMTApLmxuKCkpIDogTWF0aC5MT0cxMEU7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE9HMTBFID0gY3JlYXRlTE9HMTBFO1xudmFyIGNyZWF0ZVNRUlQxXzIgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4nU1FSVDFfMicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMSkge1xuICB2YXIgY29uZmlnID0gX3JlZjExLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYxMS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoJzAuNScpLnNxcnQoKSA6IE1hdGguU1FSVDFfMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTUVJUMV8yID0gY3JlYXRlU1FSVDFfMjtcbnZhciBjcmVhdGVTUVJUMiA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnU1FSVDInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYxMi5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMTIuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDIpLnNxcnQoKSA6IE1hdGguU1FSVDI7XG59KTtcbmV4cG9ydHMuY3JlYXRlU1FSVDIgPSBjcmVhdGVTUVJUMjtcbnZhciBjcmVhdGVJID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdpJywgWydDb21wbGV4J10sIGZ1bmN0aW9uIChfcmVmMTMpIHtcbiAgdmFyIENvbXBsZXggPSBfcmVmMTMuQ29tcGxleDtcbiAgcmV0dXJuIENvbXBsZXguSTtcbn0pOyAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHY1XG5cbmV4cG9ydHMuY3JlYXRlSSA9IGNyZWF0ZUk7XG52YXIgY3JlYXRlVXBwZXJjYXNlUGkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ1BJJywgWydwaSddLCBmdW5jdGlvbiAoX3JlZjE0KSB7XG4gIHZhciBwaSA9IF9yZWYxNC5waTtcbiAgcmV0dXJuIHBpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVwcGVyY2FzZVBpID0gY3JlYXRlVXBwZXJjYXNlUGk7XG52YXIgY3JlYXRlVXBwZXJjYXNlRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnRScsIFsnZSddLCBmdW5jdGlvbiAoX3JlZjE1KSB7XG4gIHZhciBlID0gX3JlZjE1LmU7XG4gIHJldHVybiBlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVwcGVyY2FzZUUgPSBjcmVhdGVVcHBlcmNhc2VFO1xudmFyIGNyZWF0ZVZlcnNpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ3ZlcnNpb24nLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX3ZlcnNpb24udmVyc2lvbjtcbn0pOyAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgZmFjdG9yeSB3aXRoIGEgZmxhZyByZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlXG4vLyBpZGVhOiBhbGxvdyBwYXNzaW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb24gYXMgNHRoIGFyZ3VtZW50P1xuXG5leHBvcnRzLmNyZWF0ZVZlcnNpb24gPSBjcmVhdGVWZXJzaW9uO1xuXG5mdW5jdGlvbiByZWNyZWF0ZUZhY3RvcnkobmFtZSwgZGVwZW5kZW5jaWVzLCBjcmVhdGUpIHtcbiAgcmV0dXJuICgwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGNyZWF0ZSwge1xuICAgIHJlY3JlYXRlT25Db25maWdDaGFuZ2U6IHRydWVcbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0gdm9pZCAwO1xudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICAvLyBtaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gY29tcGFyZWQgdmFsdWVzLFxuICAvLyB1c2VkIGJ5IGFsbCBjb21wYXJpc29uIGZ1bmN0aW9uc1xuICBlcHNpbG9uOiAxZS0xMixcbiAgLy8gdHlwZSBvZiBkZWZhdWx0IG1hdHJpeCBvdXRwdXQuIENob29zZSAnbWF0cml4JyAoZGVmYXVsdCkgb3IgJ2FycmF5J1xuICBtYXRyaXg6ICdNYXRyaXgnLFxuICAvLyB0eXBlIG9mIGRlZmF1bHQgbnVtYmVyIG91dHB1dC4gQ2hvb3NlICdudW1iZXInIChkZWZhdWx0KSAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uXG4gIG51bWJlcjogJ251bWJlcicsXG4gIC8vIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaW4gQmlnTnVtYmVyc1xuICBwcmVjaXNpb246IDY0LFxuICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSwgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5XG4gIC8vIG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlbiBmYWxzZSAoZGVmYXVsdCksIG91dHB1dCB0eXBlIGNhbiB2YXJ5IGRlcGVuZGluZ1xuICAvLyBvbiBpbnB1dCB2YWx1ZXMuIEZvciBleGFtcGxlIGBtYXRoLnNxcnQoLTQpYCByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuXG4gIC8vIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmQgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuXG4gIHByZWRpY3RhYmxlOiBmYWxzZSxcbiAgLy8gcmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uXG4gIC8vIG51bGwgPSByYW5kb21seSBzZWVkXG4gIHJhbmRvbVNlZWQ6IG51bGxcbn07XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0gREVGQVVMVF9DT05GSUc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xuXG5yZXF1aXJlKFwiLi8uLi91dGlscy9wb2x5ZmlsbHNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgZW1pdHRlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLy4uL3V0aWxzL2VtaXR0ZXJcIikpO1xuXG52YXIgX2ltcG9ydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2ltcG9ydFwiKTtcblxudmFyIF9jb25maWcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb25maWdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX2NvbmZpZzIgPSByZXF1aXJlKFwiLi9jb25maWdcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbi8qKlxuICogQ3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGZyb20gZ2l2ZW4gZmFjdG9yeSBmdW5jdGlvbnMgYW5kIG9wdGlvbmFsbHkgY29uZmlnXG4gKlxuICogVXNhZ2U6XG4gKlxuICogICAgIGNvbnN0IG1hdGhqczEgPSBjcmVhdGUoeyBjcmVhdGVBZGQsIGNyZWF0ZU11bHRpcGx5LCAuLi59KVxuICogICAgIGNvbnN0IGNvbmZpZyA9IHsgbnVtYmVyOiAnQmlnTnVtYmVyJyB9XG4gKiAgICAgY29uc3QgbWF0aGpzMiA9IGNyZWF0ZShhbGwsIGNvbmZpZylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2ZhY3Rvcmllc10gQW4gb2JqZWN0IHdpdGggZmFjdG9yeSBmdW5jdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IGNhbiBjb250YWluIG5lc3RlZCBvYmplY3RzLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBuZXN0ZWQgb2JqZWN0cyB3aWxsIGJlIGZsYXR0ZW5lZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSAgICBBdmFpbGFibGUgb3B0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluaW11bSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkIHZhbHVlcywgdXNlZCBieSBhbGwgY29tcGFyaXNvbiBmdW5jdGlvbnMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ01hdHJpeCcgKGRlZmF1bHQpIG9yICdBcnJheScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBudW1iZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGZvciBCaWdOdW1iZXJzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtib29sZWFufSBwcmVkaWN0YWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5IG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAoZGVmYXVsdCksIG91dHB1dCB0eXBlIGNhbiB2YXJ5IGRlcGVuZGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBpbnB1dCB2YWx1ZXMuIEZvciBleGFtcGxlIGBtYXRoLnNxcnQoLTQpYFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSByYW5kb21TZWVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBzZWVkIGZvciBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gbnVsbCB0byByYW5kb21seSBzZWVkLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIGJhcmUtYm9uZSBtYXRoLmpzIGluc3RhbmNlIGNvbnRhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgIC0gYGltcG9ydGAgdG8gYWRkIG5ldyBmdW5jdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgIC0gYGNvbmZpZ2AgdG8gY2hhbmdlIGNvbmZpZ3VyYXRpb25cbiAqICAgICAgICAgICAgICAgICAgIC0gYG9uYCwgYG9mZmAsIGBvbmNlYCwgYGVtaXRgIGZvciBldmVudHNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGZhY3RvcmllcywgY29uZmlnKSB7XG4gIHZhciBjb25maWdJbnRlcm5hbCA9IF9leHRlbmRzKHt9LCBfY29uZmlnMi5ERUZBVUxUX0NPTkZJRywgY29uZmlnKTsgLy8gc2ltcGxlIHRlc3QgZm9yIEVTNSBzdXBwb3J0XG5cblxuICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VTNSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgSmF2YVNjcmlwdCBlbmdpbmUuICcgKyAnUGxlYXNlIGxvYWQgdGhlIGVzNS1zaGltIGFuZCBlczUtc2hhbSBsaWJyYXJ5IGZvciBjb21wYXRpYmlsaXR5LicpO1xuICB9IC8vIGNyZWF0ZSB0aGUgbWF0aGpzIGluc3RhbmNlXG5cblxuICB2YXIgbWF0aCA9IGVtaXR0ZXIubWl4aW4oe1xuICAgIC8vIG9ubHkgaGVyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgbGVnYWN5IGZhY3RvcnkgZnVuY3Rpb25zXG4gICAgaXNOdW1iZXI6IF9pcy5pc051bWJlcixcbiAgICBpc0NvbXBsZXg6IF9pcy5pc0NvbXBsZXgsXG4gICAgaXNCaWdOdW1iZXI6IF9pcy5pc0JpZ051bWJlcixcbiAgICBpc0ZyYWN0aW9uOiBfaXMuaXNGcmFjdGlvbixcbiAgICBpc1VuaXQ6IF9pcy5pc1VuaXQsXG4gICAgaXNTdHJpbmc6IF9pcy5pc1N0cmluZyxcbiAgICBpc0FycmF5OiBfaXMuaXNBcnJheSxcbiAgICBpc01hdHJpeDogX2lzLmlzTWF0cml4LFxuICAgIGlzQ29sbGVjdGlvbjogX2lzLmlzQ29sbGVjdGlvbixcbiAgICBpc0RlbnNlTWF0cml4OiBfaXMuaXNEZW5zZU1hdHJpeCxcbiAgICBpc1NwYXJzZU1hdHJpeDogX2lzLmlzU3BhcnNlTWF0cml4LFxuICAgIGlzUmFuZ2U6IF9pcy5pc1JhbmdlLFxuICAgIGlzSW5kZXg6IF9pcy5pc0luZGV4LFxuICAgIGlzQm9vbGVhbjogX2lzLmlzQm9vbGVhbixcbiAgICBpc1Jlc3VsdFNldDogX2lzLmlzUmVzdWx0U2V0LFxuICAgIGlzSGVscDogX2lzLmlzSGVscCxcbiAgICBpc0Z1bmN0aW9uOiBfaXMuaXNGdW5jdGlvbixcbiAgICBpc0RhdGU6IF9pcy5pc0RhdGUsXG4gICAgaXNSZWdFeHA6IF9pcy5pc1JlZ0V4cCxcbiAgICBpc09iamVjdDogX2lzLmlzT2JqZWN0LFxuICAgIGlzTnVsbDogX2lzLmlzTnVsbCxcbiAgICBpc1VuZGVmaW5lZDogX2lzLmlzVW5kZWZpbmVkLFxuICAgIGlzQWNjZXNzb3JOb2RlOiBfaXMuaXNBY2Nlc3Nvck5vZGUsXG4gICAgaXNBcnJheU5vZGU6IF9pcy5pc0FycmF5Tm9kZSxcbiAgICBpc0Fzc2lnbm1lbnROb2RlOiBfaXMuaXNBc3NpZ25tZW50Tm9kZSxcbiAgICBpc0Jsb2NrTm9kZTogX2lzLmlzQmxvY2tOb2RlLFxuICAgIGlzQ29uZGl0aW9uYWxOb2RlOiBfaXMuaXNDb25kaXRpb25hbE5vZGUsXG4gICAgaXNDb25zdGFudE5vZGU6IF9pcy5pc0NvbnN0YW50Tm9kZSxcbiAgICBpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUsXG4gICAgaXNGdW5jdGlvbk5vZGU6IF9pcy5pc0Z1bmN0aW9uTm9kZSxcbiAgICBpc0luZGV4Tm9kZTogX2lzLmlzSW5kZXhOb2RlLFxuICAgIGlzTm9kZTogX2lzLmlzTm9kZSxcbiAgICBpc09iamVjdE5vZGU6IF9pcy5pc09iamVjdE5vZGUsXG4gICAgaXNPcGVyYXRvck5vZGU6IF9pcy5pc09wZXJhdG9yTm9kZSxcbiAgICBpc1BhcmVudGhlc2lzTm9kZTogX2lzLmlzUGFyZW50aGVzaXNOb2RlLFxuICAgIGlzUmFuZ2VOb2RlOiBfaXMuaXNSYW5nZU5vZGUsXG4gICAgaXNTeW1ib2xOb2RlOiBfaXMuaXNTeW1ib2xOb2RlLFxuICAgIGlzQ2hhaW46IF9pcy5pc0NoYWluXG4gIH0pOyAvLyBsb2FkIGNvbmZpZyBmdW5jdGlvbiBhbmQgYXBwbHkgcHJvdmlkZWQgY29uZmlnXG5cbiAgbWF0aC5jb25maWcgPSAoMCwgX2NvbmZpZy5jb25maWdGYWN0b3J5KShjb25maWdJbnRlcm5hbCwgbWF0aC5lbWl0KTtcbiAgbWF0aC5leHByZXNzaW9uID0ge1xuICAgIHRyYW5zZm9ybToge30sXG4gICAgbWF0aFdpdGhUcmFuc2Zvcm06IHtcbiAgICAgIGNvbmZpZzogbWF0aC5jb25maWdcbiAgICB9XG4gIH07IC8vIGNhY2hlZCBmYWN0b3JpZXMgYW5kIGluc3RhbmNlcyB1c2VkIGJ5IGZ1bmN0aW9uIGxvYWRcblxuICB2YXIgbGVnYWN5RmFjdG9yaWVzID0gW107XG4gIHZhciBsZWdhY3lJbnN0YW5jZXMgPSBbXTtcbiAgLyoqXG4gICAqIExvYWQgYSBmdW5jdGlvbiBvciBkYXRhIHR5cGUgZnJvbSBhIGZhY3RvcnkuXG4gICAqIElmIHRoZSBmdW5jdGlvbiBvciBkYXRhIHR5cGUgYWxyZWFkeSBleGlzdHMsIHRoZSBleGlzdGluZyBpbnN0YW5jZSBpc1xuICAgKiByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmFjdG9yeVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG5cbiAgZnVuY3Rpb24gbG9hZChmYWN0b3J5KSB7XG4gICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKGZhY3RvcnkpKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeShtYXRoKTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RQcm9wZXJ0eSA9IGZhY3RvcnlbT2JqZWN0LmtleXMoZmFjdG9yeSlbMF1dO1xuXG4gICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKGZpcnN0UHJvcGVydHkpKSB7XG4gICAgICByZXR1cm4gZmlyc3RQcm9wZXJ0eShtYXRoKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfb2JqZWN0LmlzTGVnYWN5RmFjdG9yeSkoZmFjdG9yeSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFjdG9yeSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGB0eXBlYCwgYG5hbWVgLCBhbmQgYGZhY3RvcnlgIGV4cGVjdGVkJywgZmFjdG9yeSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3Rvcnkgb2JqZWN0IHdpdGggcHJvcGVydGllcyBgdHlwZWAsIGBuYW1lYCwgYW5kIGBmYWN0b3J5YCBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGxlZ2FjeUZhY3Rvcmllcy5pbmRleE9mKGZhY3RvcnkpO1xuICAgIHZhciBpbnN0YW5jZTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIGRvZXNuJ3QgeWV0IGV4aXN0XG4gICAgICBpZiAoZmFjdG9yeS5tYXRoID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHBhc3Mgd2l0aCBtYXRoIG5hbWVzcGFjZVxuICAgICAgICBpbnN0YW5jZSA9IGZhY3RvcnkuZmFjdG9yeShtYXRoLnR5cGUsIGNvbmZpZ0ludGVybmFsLCBsb2FkLCBtYXRoLnR5cGVkLCBtYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhbmNlID0gZmFjdG9yeS5mYWN0b3J5KG1hdGgudHlwZSwgY29uZmlnSW50ZXJuYWwsIGxvYWQsIG1hdGgudHlwZWQpO1xuICAgICAgfSAvLyBhcHBlbmQgdG8gdGhlIGNhY2hlXG5cblxuICAgICAgbGVnYWN5RmFjdG9yaWVzLnB1c2goZmFjdG9yeSk7XG4gICAgICBsZWdhY3lJbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFscmVhZHkgZXhpc3RpbmcgZnVuY3Rpb24sIHJldHVybiB0aGUgY2FjaGVkIGluc3RhbmNlXG4gICAgICBpbnN0YW5jZSA9IGxlZ2FjeUluc3RhbmNlc1tpbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgdmFyIGltcG9ydGVkRmFjdG9yaWVzID0ge307IC8vIGxvYWQgdGhlIGltcG9ydCBmdW5jdGlvblxuXG4gIGZ1bmN0aW9uIGxhenlUeXBlZCgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGgudHlwZWQuYXBwbHkobWF0aC50eXBlZCwgYXJncyk7XG4gIH1cblxuICB2YXIgaW50ZXJuYWxJbXBvcnQgPSAoMCwgX2ltcG9ydC5pbXBvcnRGYWN0b3J5KShsYXp5VHlwZWQsIGxvYWQsIG1hdGgsIGltcG9ydGVkRmFjdG9yaWVzKTtcbiAgbWF0aFtcImltcG9ydFwiXSA9IGludGVybmFsSW1wb3J0OyAvLyBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gY29uZmlnLCBpbXBvcnQgYWxsIGZ1bmN0aW9ucyBhZ2FpbiB3aGVuIGNoYW5nZWRcbiAgLy8gVE9ETzogbW92ZSB0aGlzIGxpc3RlbmVyIGludG8gdGhlIGltcG9ydCBmdW5jdGlvbj9cblxuICBtYXRoLm9uKCdjb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9vYmplY3QudmFsdWVzKShpbXBvcnRlZEZhY3RvcmllcykuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgICAgaWYgKGZhY3RvcnkgJiYgZmFjdG9yeS5tZXRhICYmIGZhY3RvcnkubWV0YS5yZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlKSB7XG4gICAgICAgIC8vIEZJWE1FOiBvbmx5IHJlLWNyZWF0ZSB3aGVuIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIHRoZSBzYW1lIGFzIHdhcyBpbml0aWFsbHkgY3JlYXRlZFxuICAgICAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSBmdW5jdGlvbnMvY29uc3RhbnRzIGJlZm9yZSBpbXBvcnRpbmcgdGhlbSBhZ2Fpbj9cbiAgICAgICAgaW50ZXJuYWxJbXBvcnQoZmFjdG9yeSwge1xuICAgICAgICAgIG92ZXJyaWRlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTsgLy8gdGhlIGNyZWF0ZSBmdW5jdGlvbiBleHBvc2VkIG9uIHRoZSBtYXRoanMgaW5zdGFuY2UgaXMgYm91bmQgdG9cbiAgLy8gdGhlIGZhY3RvcnkgZnVuY3Rpb25zIHBhc3NlZCBiZWZvcmVcblxuICBtYXRoLmNyZWF0ZSA9IGNyZWF0ZS5iaW5kKG51bGwsIGZhY3Rvcmllcyk7IC8vIGV4cG9ydCBmYWN0b3J5IGZ1bmN0aW9uXG5cbiAgbWF0aC5mYWN0b3J5ID0gX2ZhY3RvcnkuZmFjdG9yeTsgLy8gaW1wb3J0IHRoZSBmYWN0b3J5IGZ1bmN0aW9ucyBsaWtlIGNyZWF0ZUFkZCBhcyBhbiBhcnJheSBpbnN0ZWFkIG9mIG9iamVjdCxcbiAgLy8gZWxzZSB0aGV5IHdpbGwgZ2V0IGEgZGlmZmVyZW50IG5hbWluZyAoYGNyZWF0ZUFkZGAgaW5zdGVhZCBvZiBgYWRkYCkuXG5cbiAgbWF0aFtcImltcG9ydFwiXSgoMCwgX29iamVjdC52YWx1ZXMpKCgwLCBfb2JqZWN0LmRlZXBGbGF0dGVuKShmYWN0b3JpZXMpKSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG4gIHZhciBtb3ZlZE5hbWVzID0gWyd0eXBlLmlzTnVtYmVyJywgJ3R5cGUuaXNDb21wbGV4JywgJ3R5cGUuaXNCaWdOdW1iZXInLCAndHlwZS5pc0ZyYWN0aW9uJywgJ3R5cGUuaXNVbml0JywgJ3R5cGUuaXNTdHJpbmcnLCAndHlwZS5pc0FycmF5JywgJ3R5cGUuaXNNYXRyaXgnLCAndHlwZS5pc0RlbnNlTWF0cml4JywgJ3R5cGUuaXNTcGFyc2VNYXRyaXgnLCAndHlwZS5pc0NvbGxlY3Rpb24nLCAndHlwZS5pc1JhbmdlJywgJ3R5cGUuaXNJbmRleCcsICd0eXBlLmlzQm9vbGVhbicsICd0eXBlLmlzUmVzdWx0U2V0JywgJ3R5cGUuaXNIZWxwJywgJ3R5cGUuaXNGdW5jdGlvbicsICd0eXBlLmlzRGF0ZScsICd0eXBlLmlzUmVnRXhwJywgJ3R5cGUuaXNPYmplY3QnLCAndHlwZS5pc051bGwnLCAndHlwZS5pc1VuZGVmaW5lZCcsICd0eXBlLmlzQWNjZXNzb3JOb2RlJywgJ3R5cGUuaXNBcnJheU5vZGUnLCAndHlwZS5pc0Fzc2lnbm1lbnROb2RlJywgJ3R5cGUuaXNCbG9ja05vZGUnLCAndHlwZS5pc0NvbmRpdGlvbmFsTm9kZScsICd0eXBlLmlzQ29uc3RhbnROb2RlJywgJ3R5cGUuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ3R5cGUuaXNGdW5jdGlvbk5vZGUnLCAndHlwZS5pc0luZGV4Tm9kZScsICd0eXBlLmlzTm9kZScsICd0eXBlLmlzT2JqZWN0Tm9kZScsICd0eXBlLmlzT3BlcmF0b3JOb2RlJywgJ3R5cGUuaXNQYXJlbnRoZXNpc05vZGUnLCAndHlwZS5pc1JhbmdlTm9kZScsICd0eXBlLmlzU3ltYm9sTm9kZScsICd0eXBlLmlzQ2hhaW4nLCAndHlwZS5CaWdOdW1iZXInLCAndHlwZS5DaGFpbicsICd0eXBlLkNvbXBsZXgnLCAndHlwZS5GcmFjdGlvbicsICd0eXBlLk1hdHJpeCcsICd0eXBlLkRlbnNlTWF0cml4JywgJ3R5cGUuU3BhcnNlTWF0cml4JywgJ3R5cGUuU3BhJywgJ3R5cGUuRmlib25hY2NpSGVhcCcsICd0eXBlLkltbXV0YWJsZURlbnNlTWF0cml4JywgJ3R5cGUuSW5kZXgnLCAndHlwZS5SYW5nZScsICd0eXBlLlJlc3VsdFNldCcsICd0eXBlLlVuaXQnLCAndHlwZS5IZWxwJywgJ3R5cGUuUGFyc2VyJywgJ2V4cHJlc3Npb24ucGFyc2UnLCAnZXhwcmVzc2lvbi5QYXJzZXInLCAnZXhwcmVzc2lvbi5ub2RlLkFjY2Vzc29yTm9kZScsICdleHByZXNzaW9uLm5vZGUuQXJyYXlOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Bc3NpZ25tZW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuQmxvY2tOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Db25kaXRpb25hbE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkNvbnN0YW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuSW5kZXhOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5GdW5jdGlvbk5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk9iamVjdE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk9wZXJhdG9yTm9kZScsICdleHByZXNzaW9uLm5vZGUuUGFyZW50aGVzaXNOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5SYW5nZU5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLlJlbGF0aW9uYWxOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5TeW1ib2xOb2RlJywgJ2pzb24ucmV2aXZlcicsICdlcnJvci5Bcmd1bWVudHNFcnJvcicsICdlcnJvci5EaW1lbnNpb25FcnJvcicsICdlcnJvci5JbmRleEVycm9yJ107XG4gIG1vdmVkTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoZnVsbE5hbWUpIHtcbiAgICB2YXIgcGFydHMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgIHZhciBwYXRoID0gKDAsIF9hcnJheS5pbml0aWFsKShwYXJ0cyk7XG4gICAgdmFyIG5hbWUgPSAoMCwgX2FycmF5Lmxhc3QpKHBhcnRzKTtcbiAgICB2YXIgb2JqID0gKDAsIF9vYmplY3QudHJhdmVyc2UpKG1hdGgsIHBhdGgpO1xuICAgICgwLCBfb2JqZWN0LmxhenkpKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKFwibWF0aC5cIi5jb25jYXQoZnVsbE5hbWUsIFwiIGlzIG1vdmVkIHRvIG1hdGguXCIpLmNvbmNhdChuYW1lLCBcIiBpbiB2Ni4wLjAuIFwiKSArICdQbGVhc2UgdXNlIHRoZSBuZXcgbG9jYXRpb24gaW5zdGVhZC4nKTtcbiAgICAgIHJldHVybiBtYXRoW25hbWVdO1xuICAgIH0pO1xuICB9KTtcbiAgKDAsIF9vYmplY3QubGF6eSkobWF0aC5leHByZXNzaW9uLCAnZG9jcycsIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hdGguZXhwcmVzc2lvbi5kb2NzIGhhcyBiZWVuIG1vdmVkLiAnICsgJ1BsZWFzZSBpbXBvcnQgdmlhIFwiaW1wb3J0IHsgZG9jcyB9IGZyb20gXFwnbWF0aGpzXFwnXCInKTtcbiAgfSk7XG4gIG1hdGguQXJndW1lbnRzRXJyb3IgPSBfQXJndW1lbnRzRXJyb3IuQXJndW1lbnRzRXJyb3I7XG4gIG1hdGguRGltZW5zaW9uRXJyb3IgPSBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3I7XG4gIG1hdGguSW5kZXhFcnJvciA9IF9JbmRleEVycm9yLkluZGV4RXJyb3I7XG4gIHJldHVybiBtYXRoO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25maWdGYWN0b3J5ID0gY29uZmlnRmFjdG9yeTtcbmV4cG9ydHMuTlVNQkVSX09QVElPTlMgPSBleHBvcnRzLk1BVFJJWF9PUFRJT05TID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY29uZmlnMiA9IHJlcXVpcmUoXCIuLi9jb25maWdcIik7XG5cbnZhciBNQVRSSVhfT1BUSU9OUyA9IFsnTWF0cml4JywgJ0FycmF5J107IC8vIHZhbGlkIHZhbHVlcyBmb3Igb3B0aW9uIG1hdHJpeFxuXG5leHBvcnRzLk1BVFJJWF9PUFRJT05TID0gTUFUUklYX09QVElPTlM7XG52YXIgTlVNQkVSX09QVElPTlMgPSBbJ251bWJlcicsICdCaWdOdW1iZXInLCAnRnJhY3Rpb24nXTsgLy8gdmFsaWQgdmFsdWVzIGZvciBvcHRpb24gbnVtYmVyXG5cbmV4cG9ydHMuTlVNQkVSX09QVElPTlMgPSBOVU1CRVJfT1BUSU9OUztcblxuZnVuY3Rpb24gY29uZmlnRmFjdG9yeShjb25maWcsIGVtaXQpIHtcbiAgLyoqXG4gICAqIFNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1hdGguanMsIGFuZCBnZXQgY3VycmVudCBvcHRpb25zLlxuICAgKiBXaWxsIGVtaXQgYSAnY29uZmlnJyBldmVudCwgd2l0aCBhcmd1bWVudHMgKGN1cnIsIHByZXYsIGNoYW5nZXMpLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGEgbWF0aGpzIGluc3RhbmNlIGNyZWF0ZWQgdXNpbmcgYGNyZWF0ZWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29uZmlnKGNvbmZpZzogT2JqZWN0KTogT2JqZWN0XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKlxuICAgKiAgICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnXG4gICAqXG4gICAqICAgICAvLyBjcmVhdGUgYSBtYXRoanMgaW5zdGFuY2VcbiAgICogICAgIGNvbnN0IG1hdGggPSBjcmVhdGUoYWxsKVxuICAgKlxuICAgKiAgICAgbWF0aC5jb25maWcoKS5udW1iZXIgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyAnbnVtYmVyJ1xuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnMC40JykgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyBudW1iZXIgMC40XG4gICAqICAgICBtYXRoLmNvbmZpZyh7bnVtYmVyOiAnRnJhY3Rpb24nfSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJzAuNCcpICAgICAgICAgICAgICAgIC8vIG91dHB1dHMgRnJhY3Rpb24gMi81XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gQXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d29cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB2YWx1ZXMsIHVzZWQgYnkgYWxsIGNvbXBhcmlzb24gZnVuY3Rpb25zLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZyAnTWF0cml4JyAoZGVmYXVsdCkgb3IgJ0FycmF5Jy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbnVtYmVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBwcmVjaXNpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBmb3IgQmlnTnVtYmVycy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gcGFyZW50aGVzaXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gZGlzcGxheSBwYXJlbnRoZXNlcyBpbiBMYVRlWCBhbmQgc3RyaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSByYW5kb21TZWVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIG51bGwgdG8gcmFuZG9tbHkgc2VlZC5cbiAgICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIF9jb25maWcob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB2YXIgcHJldiA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkoY29uZmlnLCBfb2JqZWN0LmNsb25lKTsgLy8gdmFsaWRhdGUgc29tZSBvZiB0aGUgb3B0aW9uc1xuXG4gICAgICB2YWxpZGF0ZU9wdGlvbihvcHRpb25zLCAnbWF0cml4JywgTUFUUklYX09QVElPTlMpO1xuICAgICAgdmFsaWRhdGVPcHRpb24ob3B0aW9ucywgJ251bWJlcicsIE5VTUJFUl9PUFRJT05TKTsgLy8gbWVyZ2Ugb3B0aW9uc1xuXG4gICAgICAoMCwgX29iamVjdC5kZWVwRXh0ZW5kKShjb25maWcsIG9wdGlvbnMpO1xuICAgICAgdmFyIGN1cnIgPSAoMCwgX29iamVjdC5tYXBPYmplY3QpKGNvbmZpZywgX29iamVjdC5jbG9uZSk7XG4gICAgICB2YXIgY2hhbmdlcyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgX29iamVjdC5jbG9uZSk7IC8vIGVtaXQgJ2NvbmZpZycgZXZlbnRcblxuICAgICAgZW1pdCgnY29uZmlnJywgY3VyciwgcHJldiwgY2hhbmdlcyk7XG4gICAgICByZXR1cm4gY3VycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkoY29uZmlnLCBfb2JqZWN0LmNsb25lKTtcbiAgICB9XG4gIH0gLy8gYXR0YWNoIHRoZSB2YWxpZCBvcHRpb25zIHRvIHRoZSBmdW5jdGlvbiBzbyB0aGV5IGNhbiBiZSBleHRlbmRlZFxuXG5cbiAgX2NvbmZpZy5NQVRSSVhfT1BUSU9OUyA9IE1BVFJJWF9PUFRJT05TO1xuICBfY29uZmlnLk5VTUJFUl9PUFRJT05TID0gTlVNQkVSX09QVElPTlM7IC8vIGF0dGFjaCB0aGUgY29uZmlnIHByb3BlcnRpZXMgYXMgcmVhZG9ubHkgcHJvcGVydGllcyB0byB0aGUgY29uZmlnIGZ1bmN0aW9uXG5cbiAgT2JqZWN0LmtleXMoX2NvbmZpZzIuREVGQVVMVF9DT05GSUcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY29uZmlnLCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gY29uZmlnW2tleV07XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIF9jb25maWc7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBBcnJheSBjb250YWlucyBhIHNwZWNpZmljIGl0ZW0uXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59XG4vKipcbiAqIEZpbmQgYSBzdHJpbmcgaW4gYW4gYXJyYXkuIENhc2UgaW5zZW5zaXRpdmUgc2VhcmNoXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1cbiAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggd2hlbiBmb3VuZC4gUmV0dXJucyAtMSB3aGVuIG5vdCBmb3VuZFxuICovXG5cblxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gaS50b0xvd2VyQ2FzZSgpO1xuICB9KS5pbmRleE9mKGl0ZW0udG9Mb3dlckNhc2UoKSk7XG59XG4vKipcbiAqIFZhbGlkYXRlIGFuIG9wdGlvblxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAgICAgICBPYmplY3Qgd2l0aCBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgIE5hbWUgb2YgdGhlIG9wdGlvbiB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gdmFsdWVzICBBcnJheSB3aXRoIHZhbGlkIHZhbHVlcyBmb3IgdGhpcyBvcHRpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uKG9wdGlvbnMsIG5hbWUsIHZhbHVlcykge1xuICBpZiAob3B0aW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkICYmICFjb250YWlucyh2YWx1ZXMsIG9wdGlvbnNbbmFtZV0pKSB7XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4KHZhbHVlcywgb3B0aW9uc1tuYW1lXSk7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAvLyByaWdodCB2YWx1ZSwgd3JvbmcgY2FzaW5nXG4gICAgICAvLyBUT0RPOiBsb3dlciBjYXNlIHZhbHVlcyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHRoaXMgd2FybmluZyBzb21lIGRheS5cbiAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogV3JvbmcgY2FzaW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiLCBzaG91bGQgYmUgXCInICsgdmFsdWVzW2luZGV4XSArICdcIiBpbnN0ZWFkIG9mIFwiJyArIG9wdGlvbnNbbmFtZV0gKyAnXCIuJyk7XG4gICAgICBvcHRpb25zW25hbWVdID0gdmFsdWVzW2luZGV4XTsgLy8gY2hhbmdlIHRoZSBvcHRpb24gdG8gdGhlIHJpZ2h0IGNhc2luZ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bmtub3duIHZhbHVlXG4gICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IFVua25vd24gdmFsdWUgXCInICsgb3B0aW9uc1tuYW1lXSArICdcIiBmb3IgY29uZmlndXJhdGlvbiBvcHRpb24gXCInICsgbmFtZSArICdcIi4gQXZhaWxhYmxlIG9wdGlvbnM6ICcgKyB2YWx1ZXMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsICcpICsgJy4nKTtcbiAgICB9XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZEltcG9ydCA9IGNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQ7XG5cbmZ1bmN0aW9uIGNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZXByZWNhdGVkSW1wb3J0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdsb2JhbCBpbXBvcnQgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGluIHY2LjAuMC4gXFxuJyArICdQbGVhc2UgY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGlmIHlvdSB3YW50IHRvIGltcG9ydCBmdW5jdGlvbnMuIFxcbicgKyAnRXhhbXBsZTpcXG4nICsgJ1xcbicgKyAnICBpbXBvcnQgeyBjcmVhdGUsIGFsbCB9IGZyb20gXFwnbWF0aGpzXFwnO1xcbicgKyAnICBjb25zdCBtYXRoanMgPSBjcmVhdGUoYWxsKTtcXG4nICsgJyAgbWF0aGpzLmltcG9ydCguLi4pO1xcbicpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbXBvcnRGYWN0b3J5ID0gaW1wb3J0RmFjdG9yeTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9Bcmd1bWVudHNFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9Bcmd1bWVudHNFcnJvclwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGltcG9ydEZhY3RvcnkodHlwZWQsIGxvYWQsIG1hdGgsIGltcG9ydGVkRmFjdG9yaWVzKSB7XG4gIC8qKlxuICAgKiBJbXBvcnQgZnVuY3Rpb25zIGZyb20gYW4gb2JqZWN0IG9yIGEgbW9kdWxlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGEgbWF0aGpzIGluc3RhbmNlIGNyZWF0ZWQgdXNpbmcgYGNyZWF0ZWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pbXBvcnQoZnVuY3Rpb25zKVxuICAgKiAgICBtYXRoLmltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAtIGBmdW5jdGlvbnM6IE9iamVjdGBcbiAgICogICBBbiBvYmplY3Qgd2l0aCBmdW5jdGlvbnMgb3IgZmFjdG9yaWVzIHRvIGJlIGltcG9ydGVkLlxuICAgKiAtIGBvcHRpb25zOiBPYmplY3RgIEFuIG9iamVjdCB3aXRoIGltcG9ydCBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAgICogICAtIGBvdmVycmlkZTogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIGV4aXN0aW5nIGZ1bmN0aW9ucyB3aWxsIGJlIG92ZXJ3cml0dGVuLiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKiAgIC0gYHNpbGVudDogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBlcnJvcnMgb24gZHVwbGljYXRlcyBvciBpbnZhbGlkXG4gICAqICAgICB0eXBlcy4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICogICAtIGB3cmFwOiBib29sZWFuYFxuICAgKiAgICAgSWYgdHJ1ZSwgdGhlIGZ1bmN0aW9ucyB3aWxsIGJlIHdyYXBwZWQgaW4gYSB3cmFwcGVyIGZ1bmN0aW9uXG4gICAqICAgICB3aGljaCBjb252ZXJ0cyBkYXRhIHR5cGVzIGxpa2UgTWF0cml4IHRvIHByaW1pdGl2ZSBkYXRhIHR5cGVzIGxpa2UgQXJyYXkuXG4gICAqICAgICBUaGUgd3JhcHBlciBpcyBuZWVkZWQgd2hlbiBleHRlbmRpbmcgbWF0aC5qcyB3aXRoIGxpYnJhcmllcyB3aGljaCBkbyBub3RcbiAgICogICAgIHN1cHBvcnQgdGhlc2UgZGF0YSB0eXBlLiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnXG4gICAqICAgIGltcG9ydCAqIGFzIG51bWJlcnMgZnJvbSAnbnVtYmVycydcbiAgICpcbiAgICogICAgLy8gY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlXG4gICAqICAgIGNvbnN0IG1hdGggPSBjcmVhdGUoYWxsKVxuICAgKlxuICAgKiAgICAvLyBkZWZpbmUgbmV3IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzXG4gICAqICAgIG1hdGguaW1wb3J0KHtcbiAgICogICAgICBteXZhbHVlOiA0MixcbiAgICogICAgICBoZWxsbzogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgIHJldHVybiAnaGVsbG8sICcgKyBuYW1lICsgJyEnXG4gICAqICAgICAgfVxuICAgKiAgICB9KVxuICAgKlxuICAgKiAgICAvLyB1c2UgdGhlIGltcG9ydGVkIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZVxuICAgKiAgICBtYXRoLm15dmFsdWUgKiAyICAgICAgICAgICAgICAgLy8gODRcbiAgICogICAgbWF0aC5oZWxsbygndXNlcicpICAgICAgICAgICAgIC8vICdoZWxsbywgdXNlciEnXG4gICAqXG4gICAqICAgIC8vIGltcG9ydCB0aGUgbnBtIG1vZHVsZSAnbnVtYmVycydcbiAgICogICAgLy8gKG11c3QgYmUgaW5zdGFsbGVkIGZpcnN0IHdpdGggYG5wbSBpbnN0YWxsIG51bWJlcnNgKVxuICAgKiAgICBtYXRoLmltcG9ydChudW1iZXJzLCB7d3JhcDogdHJ1ZX0pXG4gICAqXG4gICAqICAgIG1hdGguZmlib25hY2NpKDcpIC8vIHJldHVybnMgMTNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBBcnJheX0gZnVuY3Rpb25zICBPYmplY3Qgd2l0aCBmdW5jdGlvbnMgdG8gYmUgaW1wb3J0ZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gICAgICAgICAgSW1wb3J0IG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBtYXRoSW1wb3J0KGZ1bmN0aW9ucywgb3B0aW9ucykge1xuICAgIHZhciBudW0gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKG51bSAhPT0gMSAmJiBudW0gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBfQXJndW1lbnRzRXJyb3IuQXJndW1lbnRzRXJyb3IoJ2ltcG9ydCcsIG51bSwgMSwgMik7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgdmFsdWUsIG5hbWUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5pc0xlZ2FjeUZhY3RvcnkpKHZhbHVlKSkge1xuICAgICAgICAvLyBsZWdhY3kgZmFjdG9yaWVzIGRvbid0IGFsd2F5cyBoYXZlIGEgbmFtZSxcbiAgICAgICAgLy8gbGV0J3Mgbm90IGhhbmRsZSB0aGVtIHZpYSB0aGUgbmV3IGZsYXRWYWx1ZXNcbiAgICAgICAgX2ltcG9ydExlZ2FjeUZhY3RvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGZsYXR0ZW5JbXBvcnRzKGZsYXRWYWx1ZXMsIGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIF9uYW1lIGluIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh2YWx1ZSwgX25hbWUpKSB7XG4gICAgICAgICAgICBmbGF0dGVuSW1wb3J0cyhmbGF0VmFsdWVzLCB2YWx1ZVtfbmFtZV0sIF9uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpIHx8IG5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgZmxhdE5hbWUgPSAoMCwgX2ZhY3RvcnkuaXNGYWN0b3J5KSh2YWx1ZSkgPyBpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeSh2YWx1ZSkgPyB2YWx1ZS5mbiArICcudHJhbnNmb3JtJyA6IC8vIFRPRE86IHRoaXMgaXMgdWdseVxuICAgICAgICB2YWx1ZS5mbiA6IG5hbWU7IC8vIHdlIGFsbG93IGltcG9ydGluZyB0aGUgc2FtZSBmdW5jdGlvbiB0d2ljZSBpZiBpdCBwb2ludHMgdG8gdGhlIHNhbWUgaW1wbGVtZW50YXRpb25cblxuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGZsYXRWYWx1ZXMsIGZsYXROYW1lKSAmJiBmbGF0VmFsdWVzW2ZsYXROYW1lXSAhPT0gdmFsdWUgJiYgIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0IFwiJyArIGZsYXROYW1lICsgJ1wiIHR3aWNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmbGF0VmFsdWVzW2ZsYXROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhY3RvcnksIE9iamVjdCwgb3IgQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmbGF0VmFsdWVzID0ge307XG4gICAgZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgZnVuY3Rpb25zKTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gZmxhdFZhbHVlcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShmbGF0VmFsdWVzLCBuYW1lKSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnaW1wb3J0JywgbmFtZSlcbiAgICAgICAgdmFyIHZhbHVlID0gZmxhdFZhbHVlc1tuYW1lXTtcblxuICAgICAgICBpZiAoKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpKSB7XG4gICAgICAgICAgLy8gd2UgaWdub3JlIG5hbWUgaGVyZSBhbmQgZW5mb3JjZSB0aGUgbmFtZSBvZiB0aGUgZmFjdG9yeVxuICAgICAgICAgIC8vIG1heWJlIGF0IHNvbWUgcG9pbnQgd2UgZG8gd2FudCB0byBhbGxvdyBvdmVycmlkaW5nIGl0XG4gICAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGNhbiBpbXBsZW1lbnQgYW4gb3B0aW9uIG92ZXJyaWRlRmFjdG9yeU5hbWVzOiB0cnVlXG4gICAgICAgICAgX2ltcG9ydEZhY3RvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3VwcG9ydGVkVHlwZSh2YWx1ZSkpIHtcbiAgICAgICAgICBfaW1wb3J0KG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWN0b3J5LCBPYmplY3QsIG9yIEFycmF5IGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgbWF0aCBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgU2VlIGltcG9ydCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9uc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnQobmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGZ1bmN0aW9uLCBpdCdzIHRvIGNvbXBsaWNhdGVkIGFuZCBjb250YWlucyBkdXBsaWNhdGUgY29kZVxuICAgIGlmIChvcHRpb25zLndyYXAgJiYgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBjcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZnVuY3Rpb25cbiAgICAgIHZhbHVlID0gX3dyYXAodmFsdWUpO1xuICAgIH0gLy8gdHVybiBhIHBsYWluIGZ1bmN0aW9uIHdpdGggYSB0eXBlZC1mdW5jdGlvbiBzaWduYXR1cmUgaW50byBhIHR5cGVkLWZ1bmN0aW9uXG5cblxuICAgIGlmIChoYXNUeXBlZEZ1bmN0aW9uU2lnbmF0dXJlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB0eXBlZChuYW1lLCBfZGVmaW5lUHJvcGVydHkoe30sIHZhbHVlLnNpZ25hdHVyZSwgdmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKG1hdGhbbmFtZV0pICYmIGlzVHlwZWRGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIGlmIChvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICAgIC8vIGdpdmUgdGhlIHR5cGVkIGZ1bmN0aW9uIHRoZSByaWdodCBuYW1lXG4gICAgICAgIHZhbHVlID0gdHlwZWQobmFtZSwgdmFsdWUuc2lnbmF0dXJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIHR5cGVkIGZ1bmN0aW9uXG4gICAgICAgIHZhbHVlID0gdHlwZWQobWF0aFtuYW1lXSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBtYXRoW25hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaW1wb3J0ZWRGYWN0b3JpZXNbbmFtZV07XG5cbiAgICAgIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpO1xuXG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWF0aFtuYW1lXSA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgIG1hdGhbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBpbXBvcnRlZEZhY3Rvcmllc1tuYW1lXTtcblxuICAgICAgX2ltcG9ydFRyYW5zZm9ybShuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIG1hdGguZW1pdCgnaW1wb3J0JywgbmFtZSwgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybVtuYW1lXSA9IHZhbHVlLnRyYW5zZm9ybTtcblxuICAgICAgaWYgKGFsbG93ZWRJbkV4cHJlc3Npb25zKG5hbWUpKSB7XG4gICAgICAgIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXSA9IHZhbHVlLnRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVtb3ZlIGV4aXN0aW5nIHRyYW5zZm9ybVxuICAgICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm1bbmFtZV07XG5cbiAgICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpIHtcbiAgICBkZWxldGUgbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybVtuYW1lXTtcblxuICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdID0gbWF0aFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHdyYXBwZXIgYSByb3VuZCBhbiBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyB0aGUgYXJndW1lbnRzXG4gICAqIHRvIHRoZWlyIHByaW1pdGl2ZSB2YWx1ZXMgKGxpa2UgY29udmVydCBhIE1hdHJpeCB0byBBcnJheSlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgdGhlIHdyYXBwZWQgZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfd3JhcChmbikge1xuICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgYXJnc1tpXSA9IGFyZyAmJiBhcmcudmFsdWVPZigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4uYXBwbHkobWF0aCwgYXJncyk7XG4gICAgfTtcblxuICAgIGlmIChmbi50cmFuc2Zvcm0pIHtcbiAgICAgIHdyYXBwZXIudHJhbnNmb3JtID0gZm4udHJhbnNmb3JtO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gaW5zdGFuY2Ugb2YgYSBmYWN0b3J5IGludG8gbWF0aC5qc1xuICAgKiBAcGFyYW0ge3tmYWN0b3J5OiBGdW5jdGlvbiwgbmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIG1hdGg6IGJvb2xlYW59fSBmYWN0b3J5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBTZWUgaW1wb3J0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAvLyBUT0RPOiBfaW1wb3J0TGVnYWN5RmFjdG9yeSBpcyBkZXByZWNhdGVkIHNpbmNlIHY2LjAuMCwgY2xlYW4gdXAgc29tZSBkYXlcblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRMZWdhY3lGYWN0b3J5KGZhY3RvcnksIG9wdGlvbnMpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ0ZhY3RvcmllcyBvZiB0eXBlIHsgbmFtZSwgZmFjdG9yeSB9IGFyZSBkZXByZWNhdGVkIHNpbmNlIHY2LiAnICsgJ1BsZWFzZSBjcmVhdGUgeW91ciBmYWN0b3J5IGZ1bmN0aW9ucyB1c2luZyB0aGUgbWF0aC5mYWN0b3J5IGZ1bmN0aW9uLicpO1xuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5Lm5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgbmFtZSA9IGZhY3RvcnkubmFtZTtcbiAgICAgIHZhciBleGlzdGluZ1RyYW5zZm9ybSA9IChuYW1lIGluIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm0pO1xuICAgICAgdmFyIG5hbWVzcGFjZSA9IGZhY3RvcnkucGF0aCA/ICgwLCBfb2JqZWN0LnRyYXZlcnNlKShtYXRoLCBmYWN0b3J5LnBhdGgpIDogbWF0aDtcbiAgICAgIHZhciBleGlzdGluZyA9ICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShuYW1lc3BhY2UsIG5hbWUpID8gbmFtZXNwYWNlW25hbWVdIDogdW5kZWZpbmVkO1xuXG4gICAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbG9hZChmYWN0b3J5KTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNmb3JtcyBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gZmFjdG9yeSBmdW5jdGlvbnMuICcgKyAnUGxlYXNlIGNyZWF0ZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciBpdCB3aXRoIGV4cG9ydHMucGF0aD1cImV4cHJlc3Npb24udHJhbnNmb3JtXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1R5cGVkRnVuY3Rpb24oZXhpc3RpbmcpICYmIGlzVHlwZWRGdW5jdGlvbihpbnN0YW5jZSkpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vdmVycmlkZSkgey8vIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHR5cGVkIGZ1bmN0aW9uIChub3RoaW5nIHRvIGRvKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIG5ldyB0eXBlZCBmdW5jdGlvblxuICAgICAgICAgICAgaW5zdGFuY2UgPSB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0IFwiJyArIG5hbWUgKyAnXCI6IGFscmVhZHkgZXhpc3RzJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChmYWN0b3J5LmxhenkgIT09IGZhbHNlKSB7XG4gICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG5hbWVzcGFjZSwgbmFtZSwgcmVzb2x2ZXIpO1xuXG4gICAgICAgIGlmIChleGlzdGluZ1RyYW5zZm9ybSkge1xuICAgICAgICAgIF9kZWxldGVUcmFuc2Zvcm0obmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZhY3RvcnkucGF0aCA9PT0gJ2V4cHJlc3Npb24udHJhbnNmb3JtJyB8fCBsZWdhY3lGYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZXNwYWNlW25hbWVdID0gcmVzb2x2ZXIoKTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmYWN0b3J5LnBhdGggPT09ICdleHByZXNzaW9uLnRyYW5zZm9ybScgfHwgbGVnYWN5RmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpKSB7XG4gICAgICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSByZXNvbHZlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIga2V5ID0gZmFjdG9yeS5wYXRoID8gZmFjdG9yeS5wYXRoICsgJy4nICsgZmFjdG9yeS5uYW1lIDogZmFjdG9yeS5uYW1lO1xuICAgICAgaW1wb3J0ZWRGYWN0b3JpZXNba2V5XSA9IGZhY3Rvcnk7XG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyLCBmYWN0b3J5LnBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bm5hbWVkIGZhY3RvcnkuXG4gICAgICAvLyBubyBsYXp5IGxvYWRpbmdcbiAgICAgIGxvYWQoZmFjdG9yeSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gaW5zdGFuY2Ugb2YgYSBmYWN0b3J5IGludG8gbWF0aC5qc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHNjb3BlOiBvYmplY3QpfSBmYWN0b3J5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBTZWUgaW1wb3J0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT1mYWN0b3J5Lm5hbWVdIE9wdGlvbmFsIGN1c3RvbSBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2ltcG9ydEZhY3RvcnkoZmFjdG9yeSwgb3B0aW9ucykge1xuICAgIHZhciBuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWN0b3J5LmZuO1xuXG4gICAgaWYgKCgwLCBfYXJyYXkuY29udGFpbnMpKG5hbWUsICcuJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFjdG9yeSBuYW1lIHNob3VsZCBub3QgY29udGFpbiBhIG5lc3RlZCBwYXRoLiAnICsgJ05hbWU6ICcgKyBKU09OLnN0cmluZ2lmeShuYW1lKSk7XG4gICAgfVxuXG4gICAgdmFyIG5hbWVzcGFjZSA9IGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpID8gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybSA6IG1hdGg7XG4gICAgdmFyIGV4aXN0aW5nVHJhbnNmb3JtID0gKG5hbWUgaW4gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybSk7XG4gICAgdmFyIGV4aXN0aW5nID0gKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG5hbWVzcGFjZSwgbmFtZSkgPyBuYW1lc3BhY2VbbmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIC8vIGNvbGxlY3QgYWxsIGRlcGVuZGVuY2llcywgaGFuZGxlIGZpbmRpbmcgYm90aCBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgYW5kIG90aGVyIHNwZWNpYWwgY2FzZXNcbiAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB7fTtcbiAgICAgIGZhY3RvcnkuZGVwZW5kZW5jaWVzLm1hcChfZmFjdG9yeS5zdHJpcE9wdGlvbmFsTm90YXRpb24pLmZvckVhY2goZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHtcbiAgICAgICAgaWYgKCgwLCBfYXJyYXkuY29udGFpbnMpKGRlcGVuZGVuY3ksICcuJykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3RvcnkgZGVwZW5kZW5jeSBzaG91bGQgbm90IGNvbnRhaW4gYSBuZXN0ZWQgcGF0aC4gJyArICdOYW1lOiAnICsgSlNPTi5zdHJpbmdpZnkoZGVwZW5kZW5jeSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09ICdtYXRoJykge1xuICAgICAgICAgIGRlcGVuZGVuY2llcy5tYXRoID0gbWF0aDtcbiAgICAgICAgfSBlbHNlIGlmIChkZXBlbmRlbmN5ID09PSAnbWF0aFdpdGhUcmFuc2Zvcm0nKSB7XG4gICAgICAgICAgZGVwZW5kZW5jaWVzLm1hdGhXaXRoVHJhbnNmb3JtID0gbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtO1xuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09ICdjbGFzc2VzJykge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IganNvbiByZXZpdmVyXG4gICAgICAgICAgZGVwZW5kZW5jaWVzLmNsYXNzZXMgPSBtYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcGVuZGVuY2llc1tkZXBlbmRlbmN5XSA9IG1hdGhbZGVwZW5kZW5jeV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIGluc3RhbmNlID0gLyogI19fUFVSRV9fICovZmFjdG9yeShkZXBlbmRlbmNpZXMpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zZm9ybXMgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGZhY3RvcnkgZnVuY3Rpb25zLiAnICsgJ1BsZWFzZSBjcmVhdGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgaXQgd2l0aCBleHBvcnRzLnBhdGg9XCJleHByZXNzaW9uLnRyYW5zZm9ybVwiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKGV4aXN0aW5nKSAmJiBpc1R5cGVkRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIG1lcmdlIHRoZSBleGlzdGluZyBhbmQgbmV3IHR5cGVkIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgLy8ga2VlcCBleGlzdGluZywgaWdub3JlIGltcG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgfVxuICAgIH07IC8vIFRPRE86IGFkZCB1bml0IHRlc3Qgd2l0aCBub24tbGF6eSBmYWN0b3J5XG5cblxuICAgIGlmICghZmFjdG9yeS5tZXRhIHx8IGZhY3RvcnkubWV0YS5sYXp5ICE9PSBmYWxzZSkge1xuICAgICAgKDAsIF9vYmplY3QubGF6eSkobmFtZXNwYWNlLCBuYW1lLCByZXNvbHZlcik7IC8vIEZJWE1FOiByZW1vdmUgdGhlIGBpZiAoZXhpc3RpbmcgJiZgIGNvbmRpdGlvbiBhZ2Fpbi4gQ2FuIHdlIG1ha2Ugc3VyZSBzdWJzZXQgaXMgbG9hZGVkIGJlZm9yZSBzdWJzZXQudHJhbnNmb3JtPyAoTmFtZSBjb2xsaXNpb24sIGFuZCBubyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgdHdvKVxuXG4gICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgX2RlbGV0ZVRyYW5zZm9ybShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeShmYWN0b3J5KSB8fCBmYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAoMCwgX29iamVjdC5sYXp5KShtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm0sIG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VbbmFtZV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZXNwYWNlW25hbWVdID0gcmVzb2x2ZXIoKTsgLy8gRklYTUU6IHJlbW92ZSB0aGUgYGlmIChleGlzdGluZyAmJmAgY29uZGl0aW9uIGFnYWluLiBDYW4gd2UgbWFrZSBzdXJlIHN1YnNldCBpcyBsb2FkZWQgYmVmb3JlIHN1YnNldC50cmFuc2Zvcm0/IChOYW1lIGNvbGxpc2lvbiwgYW5kIG5vIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB0d28pXG5cbiAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZ1RyYW5zZm9ybSkge1xuICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpIHx8IGZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSkge1xuICAgICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVtuYW1lXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVE9ETzogaW1wcm92ZSBmYWN0b3JpZXMsIHN0b3JlIGEgbGlzdCB3aXRoIGltcG9ydHMgaW5zdGVhZCB3aGljaCBjYW4gYmUgcmUtcGxheWVkXG5cblxuICAgIGltcG9ydGVkRmFjdG9yaWVzW25hbWVdID0gZmFjdG9yeTtcbiAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSB0eXBlIHdoaWNoIGNhbiBiZSBpbXBvcnRlZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCBVbml0IHwgQ29tcGxleH0gb2JqZWN0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaXNTdXBwb3J0ZWRUeXBlKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmplY3QgPT09ICdudW1iZXInIHx8IHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvYmplY3QgPT09ICdib29sZWFuJyB8fCBvYmplY3QgPT09IG51bGwgfHwgKDAsIF9pcy5pc1VuaXQpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0NvbXBsZXgpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikob2JqZWN0KSB8fCAoMCwgX2lzLmlzRnJhY3Rpb24pKG9iamVjdCkgfHwgKDAsIF9pcy5pc01hdHJpeCkob2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KG9iamVjdCk7XG4gIH1cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGdpdmVuIHRoaW5nIGlzIGEgdHlwZWQtZnVuY3Rpb25cbiAgICogQHBhcmFtIHsqfSBmblxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBgZm5gIGlzIGEgdHlwZWQtZnVuY3Rpb25cbiAgICovXG5cblxuICBmdW5jdGlvbiBpc1R5cGVkRnVuY3Rpb24oZm4pIHtcbiAgICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIF90eXBlb2YoZm4uc2lnbmF0dXJlcykgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzVHlwZWRGdW5jdGlvblNpZ25hdHVyZShmbikge1xuICAgIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBmdW5jdGlvbiBhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSB7XG4gICAgcmV0dXJuICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBuYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlZ2FjeUZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkucGF0aCA9PT0gdW5kZWZpbmVkICYmICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBmYWN0b3J5Lm5hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5mbi5pbmRleE9mKCcuJykgPT09IC0xICYmIC8vIEZJWE1FOiBtYWtlIGNoZWNraW5nIG9uIHBhdGggcmVkdW5kYW50LCBjaGVjayBvbiBtZXRhIGRhdGEgaW5zdGVhZFxuICAgICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBmYWN0b3J5LmZuKSAmJiAoIWZhY3RvcnkubWV0YSB8fCAhZmFjdG9yeS5tZXRhLmlzQ2xhc3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNUcmFuc2Zvcm1GdW5jdGlvbkZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5ICE9PSB1bmRlZmluZWQgJiYgZmFjdG9yeS5tZXRhICE9PSB1bmRlZmluZWQgJiYgZmFjdG9yeS5tZXRhLmlzVHJhbnNmb3JtRnVuY3Rpb24gPT09IHRydWUgfHwgZmFsc2U7XG4gIH0gLy8gbmFtZXNwYWNlcyBhbmQgZnVuY3Rpb25zIG5vdCBhdmFpbGFibGUgaW4gdGhlIHBhcnNlciBmb3Igc2FmZXR5IHJlYXNvbnNcblxuXG4gIHZhciB1bnNhZmUgPSB7XG4gICAgZXhwcmVzc2lvbjogdHJ1ZSxcbiAgICB0eXBlOiB0cnVlLFxuICAgIGRvY3M6IHRydWUsXG4gICAgZXJyb3I6IHRydWUsXG4gICAganNvbjogdHJ1ZSxcbiAgICBjaGFpbjogdHJ1ZSAvLyBjaGFpbiBtZXRob2Qgbm90IHN1cHBvcnRlZC4gTm90ZSB0aGF0IHRoZXJlIGlzIGEgdW5pdCBjaGFpbiB0b28uXG5cbiAgfTtcbiAgcmV0dXJuIG1hdGhJbXBvcnQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVR5cGVkID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3R5cGVkRnVuY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJ0eXBlZC1mdW5jdGlvblwiKSk7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqIENyZWF0ZSBhIHR5cGVkLWZ1bmN0aW9uIHdoaWNoIGNoZWNrcyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBhbmRcbiAqIGNhbiBtYXRjaCB0aGVtIGFnYWluc3QgbXVsdGlwbGUgcHJvdmlkZWQgc2lnbmF0dXJlcy4gVGhlIHR5cGVkLWZ1bmN0aW9uXG4gKiBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIGlucHV0cyBpbiBvcmRlciB0byBmaW5kIGEgbWF0Y2hpbmcgc2lnbmF0dXJlLlxuICogVHlwZWQgZnVuY3Rpb25zIHRocm93IGluZm9ybWF0aXZlIGVycm9ycyBpbiBjYXNlIG9mIHdyb25nIGlucHV0IGFyZ3VtZW50cy5cbiAqXG4gKiBTZWUgdGhlIGxpYnJhcnkgW3R5cGVkLWZ1bmN0aW9uXShodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL3R5cGVkLWZ1bmN0aW9uKVxuICogZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24uXG4gKlxuICogU3ludGF4OlxuICpcbiAqICAgICBtYXRoLnR5cGVkKG5hbWUsIHNpZ25hdHVyZXMpIDogZnVuY3Rpb25cbiAqICAgICBtYXRoLnR5cGVkKHNpZ25hdHVyZXMpIDogZnVuY3Rpb25cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBtdWx0aXBsZSB0eXBlcyBwZXIgYXJndW1lbnQgKHR5cGUgdW5pb24pXG4gKiAgICAgY29uc3QgZm4yID0gdHlwZWQoe1xuICogICAgICAgJ251bWJlciB8IGJvb2xlYW4nOiBmdW5jdGlvbiAoYikge1xuICogICAgICAgICByZXR1cm4gJ2IgaXMgYSBudW1iZXIgb3IgYm9vbGVhbidcbiAqICAgICAgIH0sXG4gKiAgICAgICAnc3RyaW5nLCBudW1iZXIgfCBib29sZWFuJzogZnVuY3Rpb24gKGEsIGIpIHtcbiAqICAgICAgICAgcmV0dXJuICdhIGlzIGEgc3RyaW5nLCBiIGlzIGEgbnVtYmVyIG9yIGJvb2xlYW4nXG4gKiAgICAgICB9XG4gKiAgICAgfSlcbiAqXG4gKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBhbiBhbnkgdHlwZSBhcmd1bWVudFxuICogICAgIGNvbnN0IGxvZyA9IHR5cGVkKHtcbiAqICAgICAgICdzdHJpbmcsIGFueSc6IGZ1bmN0aW9uIChldmVudCwgZGF0YSkge1xuICogICAgICAgICBjb25zb2xlLmxvZygnZXZlbnQ6ICcgKyBldmVudCArICcsIGRhdGE6ICcgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAqICAgICAgIH1cbiAqICAgICB9KVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSB0eXBlZC1mdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBmdW5jdGlvbj59IHNpZ25hdHVyZXMgICBPYmplY3Qgd2l0aCBvbmUgb3IgbXVsdGlwbGUgZnVuY3Rpb24gc2lnbmF0dXJlc1xuICogQHJldHVybnMge2Z1bmN0aW9ufSBUaGUgY3JlYXRlZCB0eXBlZC1mdW5jdGlvbi5cbiAqL1xuLy8gcmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxudmFyIF9jcmVhdGVUeXBlZDIgPSBmdW5jdGlvbiBfY3JlYXRlVHlwZWQoKSB7XG4gIC8vIGluaXRpYWxseSwgcmV0dXJuIHRoZSBvcmlnaW5hbCBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxuICAvLyBjb25zZWN1dGl2ZWx5LCByZXR1cm4gYSBuZXcgaW5zdGFuY2UgZnJvbSB0eXBlZC5jcmVhdGUuXG4gIF9jcmVhdGVUeXBlZDIgPSBfdHlwZWRGdW5jdGlvbltcImRlZmF1bHRcIl0uY3JlYXRlO1xuICByZXR1cm4gX3R5cGVkRnVuY3Rpb25bXCJkZWZhdWx0XCJdO1xufTtcblxudmFyIGRlcGVuZGVuY2llcyA9IFsnP0JpZ051bWJlcicsICc/Q29tcGxleCcsICc/RGVuc2VNYXRyaXgnLCAnP0ZyYWN0aW9uJ107XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IHR5cGVkIGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdH0gZGVwZW5kZW5jaWVzICAgT2JqZWN0IHdpdGggZGF0YSB0eXBlcyBsaWtlIENvbXBsZXggYW5kIEJpZ051bWJlclxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5cbnZhciBjcmVhdGVUeXBlZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgndHlwZWQnLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIGNyZWF0ZVR5cGVkKF9yZWYpIHtcbiAgdmFyIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIEZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvLyBUT0RPOiB0eXBlZC1mdW5jdGlvbiBtdXN0IGJlIGFibGUgdG8gc2lsZW50bHkgaWdub3JlIHNpZ25hdHVyZXMgd2l0aCB1bmtub3duIGRhdGEgdHlwZXNcbiAgLy8gZ2V0IGEgbmV3IGluc3RhbmNlIG9mIHR5cGVkLWZ1bmN0aW9uXG4gIHZhciB0eXBlZCA9IF9jcmVhdGVUeXBlZDIoKTsgLy8gZGVmaW5lIGFsbCB0eXBlcy4gVGhlIG9yZGVyIG9mIHRoZSB0eXBlcyBkZXRlcm1pbmVzIGluIHdoaWNoIG9yZGVyIGZ1bmN0aW9uXG4gIC8vIGFyZ3VtZW50cyBhcmUgdHlwZS1jaGVja2VkIChzbyBmb3IgcGVyZm9ybWFuY2UgaXQncyBpbXBvcnRhbnQgdG8gcHV0IHRoZVxuICAvLyBtb3N0IHVzZWQgdHlwZXMgZmlyc3QpLlxuXG5cbiAgdHlwZWQudHlwZXMgPSBbe1xuICAgIG5hbWU6ICdudW1iZXInLFxuICAgIHRlc3Q6IF9pcy5pc051bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ0NvbXBsZXgnLFxuICAgIHRlc3Q6IF9pcy5pc0NvbXBsZXhcbiAgfSwge1xuICAgIG5hbWU6ICdCaWdOdW1iZXInLFxuICAgIHRlc3Q6IF9pcy5pc0JpZ051bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ0ZyYWN0aW9uJyxcbiAgICB0ZXN0OiBfaXMuaXNGcmFjdGlvblxuICB9LCB7XG4gICAgbmFtZTogJ1VuaXQnLFxuICAgIHRlc3Q6IF9pcy5pc1VuaXRcbiAgfSwge1xuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHRlc3Q6IF9pcy5pc1N0cmluZ1xuICB9LCB7XG4gICAgbmFtZTogJ0NoYWluJyxcbiAgICB0ZXN0OiBfaXMuaXNDaGFpblxuICB9LCB7XG4gICAgbmFtZTogJ0FycmF5JyxcbiAgICB0ZXN0OiBfaXMuaXNBcnJheVxuICB9LCB7XG4gICAgbmFtZTogJ01hdHJpeCcsXG4gICAgdGVzdDogX2lzLmlzTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnRGVuc2VNYXRyaXgnLFxuICAgIHRlc3Q6IF9pcy5pc0RlbnNlTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnU3BhcnNlTWF0cml4JyxcbiAgICB0ZXN0OiBfaXMuaXNTcGFyc2VNYXRyaXhcbiAgfSwge1xuICAgIG5hbWU6ICdSYW5nZScsXG4gICAgdGVzdDogX2lzLmlzUmFuZ2VcbiAgfSwge1xuICAgIG5hbWU6ICdJbmRleCcsXG4gICAgdGVzdDogX2lzLmlzSW5kZXhcbiAgfSwge1xuICAgIG5hbWU6ICdib29sZWFuJyxcbiAgICB0ZXN0OiBfaXMuaXNCb29sZWFuXG4gIH0sIHtcbiAgICBuYW1lOiAnUmVzdWx0U2V0JyxcbiAgICB0ZXN0OiBfaXMuaXNSZXN1bHRTZXRcbiAgfSwge1xuICAgIG5hbWU6ICdIZWxwJyxcbiAgICB0ZXN0OiBfaXMuaXNIZWxwXG4gIH0sIHtcbiAgICBuYW1lOiAnZnVuY3Rpb24nLFxuICAgIHRlc3Q6IF9pcy5pc0Z1bmN0aW9uXG4gIH0sIHtcbiAgICBuYW1lOiAnRGF0ZScsXG4gICAgdGVzdDogX2lzLmlzRGF0ZVxuICB9LCB7XG4gICAgbmFtZTogJ1JlZ0V4cCcsXG4gICAgdGVzdDogX2lzLmlzUmVnRXhwXG4gIH0sIHtcbiAgICBuYW1lOiAnbnVsbCcsXG4gICAgdGVzdDogX2lzLmlzTnVsbFxuICB9LCB7XG4gICAgbmFtZTogJ3VuZGVmaW5lZCcsXG4gICAgdGVzdDogX2lzLmlzVW5kZWZpbmVkXG4gIH0sIHtcbiAgICBuYW1lOiAnQWNjZXNzb3JOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBY2Nlc3Nvck5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdBcnJheU5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0FycmF5Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Fzc2lnbm1lbnROb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBc3NpZ25tZW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Jsb2NrTm9kZScsXG4gICAgdGVzdDogX2lzLmlzQmxvY2tOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnQ29uZGl0aW9uYWxOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNDb25kaXRpb25hbE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdDb25zdGFudE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0NvbnN0YW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Z1bmN0aW9uTm9kZScsXG4gICAgdGVzdDogX2lzLmlzRnVuY3Rpb25Ob2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0luZGV4Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzSW5kZXhOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnTm9kZScsXG4gICAgdGVzdDogX2lzLmlzTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ09iamVjdE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc09iamVjdE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdPcGVyYXRvck5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc09wZXJhdG9yTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ1BhcmVudGhlc2lzTm9kZScsXG4gICAgdGVzdDogX2lzLmlzUGFyZW50aGVzaXNOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnUmFuZ2VOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNSYW5nZU5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdTeW1ib2xOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNTeW1ib2xOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnT2JqZWN0JyxcbiAgICB0ZXN0OiBfaXMuaXNPYmplY3RcbiAgfSAvLyBvcmRlciAnT2JqZWN0JyBsYXN0LCBpdCBtYXRjaGVzIG9uIG90aGVyIGNsYXNzZXMgdG9vXG4gIF07XG4gIHR5cGVkLmNvbnZlcnNpb25zID0gW3tcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfSAvLyBub3RlOiBjb252ZXJzaW9uIGZyb20gbnVtYmVyIHRvIEJpZ051bWJlciBjYW4gZmFpbCBpZiB4IGhhcyA+MTUgZGlnaXRzXG5cblxuICAgICAgaWYgKCgwLCBfbnVtYmVyLmRpZ2l0cykoeCkgPiAxNSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgbnVtYmVyIHdpdGggPjE1IHNpZ25pZmljYW50IGRpZ2l0cyB0byBCaWdOdW1iZXIgJyArICcodmFsdWU6ICcgKyB4ICsgJykuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlci4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ251bWJlcicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdudW1iZXInLFxuICAgIHRvOiAnc3RyaW5nJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIHJldHVybiB4ICsgJyc7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ0JpZ051bWJlcicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ0ZyYWN0aW9uJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgRnJhY3Rpb24gdG8gQmlnTnVtYmVyIG9yIHZpY2UgdmVyc2EuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlciBvciBmcmFjdGlvbih4KSB0byBjb252ZXJ0IHRvIEZyYWN0aW9uLicpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdGcmFjdGlvbicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudmFsdWVPZigpLCAwKTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ0ZyYWN0aW9uJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghRnJhY3Rpb24pIHtcbiAgICAgICAgdGhyb3dOb0ZyYWN0aW9uKHgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZiA9IG5ldyBGcmFjdGlvbih4KTtcblxuICAgICAgaWYgKGYudmFsdWVPZigpICE9PSB4KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBpbXBsaWNpdGx5IGNvbnZlcnQgYSBudW1iZXIgdG8gYSBGcmFjdGlvbiB3aGVuIHRoZXJlIHdpbGwgYmUgYSBsb3NzIG9mIHByZWNpc2lvbiAnICsgJyh2YWx1ZTogJyArIHggKyAnKS4gJyArICdVc2UgZnVuY3Rpb24gZnJhY3Rpb24oeCkgdG8gY29udmVydCB0byBGcmFjdGlvbi4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGY7XG4gICAgfVxuICB9LCB7XG4gICAgLy8gRklYTUU6IGFkZCBjb252ZXJzaW9uIGZyb20gRnJhY3Rpb24gdG8gbnVtYmVyLCBmb3IgZXhhbXBsZSBmb3IgYHNxcnQoZnJhY3Rpb24oMSwzKSlgXG4gICAgLy8gIGZyb206ICdGcmFjdGlvbicsXG4gICAgLy8gIHRvOiAnbnVtYmVyJyxcbiAgICAvLyAgY29udmVydDogZnVuY3Rpb24gKHgpIHtcbiAgICAvLyAgICByZXR1cm4geC52YWx1ZU9mKClcbiAgICAvLyAgfVxuICAgIC8vIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ251bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICB2YXIgbiA9IE51bWJlcih4KTtcblxuICAgICAgaWYgKGlzTmFOKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInICsgeCArICdcIiB0byBhIG51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbjtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gQmlnTnVtYmVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ3N0cmluZycsXG4gICAgdG86ICdGcmFjdGlvbicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUZyYWN0aW9uKSB7XG4gICAgICAgIHRocm93Tm9GcmFjdGlvbih4KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gRnJhY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ0NvbXBsZXgnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFDb21wbGV4KSB7XG4gICAgICAgIHRocm93Tm9Db21wbGV4KHgpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBcIicgKyB4ICsgJ1wiIHRvIENvbXBsZXgnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnYm9vbGVhbicsXG4gICAgdG86ICdudW1iZXInLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgcmV0dXJuICt4O1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigreCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ2Jvb2xlYW4nLFxuICAgIHRvOiAnRnJhY3Rpb24nLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFGcmFjdGlvbikge1xuICAgICAgICB0aHJvd05vRnJhY3Rpb24oeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oK3gpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ3N0cmluZycsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHgpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdBcnJheScsXG4gICAgdG86ICdNYXRyaXgnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoYXJyYXkpIHtcbiAgICAgIGlmICghRGVuc2VNYXRyaXgpIHtcbiAgICAgICAgdGhyb3dOb01hdHJpeCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGFycmF5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnTWF0cml4JyxcbiAgICB0bzogJ0FycmF5JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KG1hdHJpeCkge1xuICAgICAgcmV0dXJuIG1hdHJpeC52YWx1ZU9mKCk7XG4gICAgfVxuICB9XTtcbiAgcmV0dXJuIHR5cGVkO1xufSk7XG5leHBvcnRzLmNyZWF0ZVR5cGVkID0gY3JlYXRlVHlwZWQ7XG5cbmZ1bmN0aW9uIHRocm93Tm9CaWdudW1iZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29udmVydCB2YWx1ZSBcIi5jb25jYXQoeCwgXCIgaW50byBhIEJpZ051bWJlcjogbm8gY2xhc3MgJ0JpZ051bWJlcicgcHJvdmlkZWRcIikpO1xufVxuXG5mdW5jdGlvbiB0aHJvd05vQ29tcGxleCh4KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHZhbHVlIFwiLmNvbmNhdCh4LCBcIiBpbnRvIGEgQ29tcGxleCBudW1iZXI6IG5vIGNsYXNzICdDb21wbGV4JyBwcm92aWRlZFwiKSk7XG59XG5cbmZ1bmN0aW9uIHRocm93Tm9NYXRyaXgoKSB7XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgYXJyYXkgaW50byBhIE1hdHJpeDogbm8gY2xhc3MgXFwnRGVuc2VNYXRyaXhcXCcgcHJvdmlkZWQnKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dOb0ZyYWN0aW9uKHgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdmFsdWUgXCIuY29uY2F0KHgsIFwiIGludG8gYSBGcmFjdGlvbiwgbm8gY2xhc3MgJ0ZyYWN0aW9uJyBwcm92aWRlZC5cIikpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFsbCA9IHZvaWQgMDtcblxudmFyIGFsbEZhY3RvcmllcyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIikpO1xuXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDsgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTsgX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyByZXR1cm4gY2FjaGU7IH07IHJldHVybiBjYWNoZTsgfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgX3R5cGVvZihvYmopICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4geyBcImRlZmF1bHRcIjogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7IGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgeyByZXR1cm4gY2FjaGUuZ2V0KG9iaik7IH0gdmFyIG5ld09iaiA9IHt9OyB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7IGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTsgfSBlbHNlIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqW1wiZGVmYXVsdFwiXSA9IG9iajsgaWYgKGNhY2hlKSB7IGNhY2hlLnNldChvYmosIG5ld09iaik7IH0gcmV0dXJuIG5ld09iajsgfVxuXG4vLyBjcmVhdGluZyBhbGwgZmFjdG9yaWVzIGhlcmUgaW4gYSBzZXBhcmF0ZSBmaWxlIGlzIG5lZWRlZCB0byBnZXQgdHJlZS1zaGFraW5nIHdvcmtpbmdcbnZhciBhbGwgPSBhbGxGYWN0b3JpZXM7XG5leHBvcnRzLmFsbCA9IGFsbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnID0gdm9pZCAwO1xuXG52YXIgX2NvbmZpZyA9IHJlcXVpcmUoXCIuLi9jb3JlL2NvbmZpZ1wiKTtcblxudmFyIF9jb25maWcyID0gcmVxdWlyZShcIi4uL2NvcmUvZnVuY3Rpb24vY29uZmlnXCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vLyBjcmVhdGUgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiBjb25maWdcbnZhciBjb25maWcgPSAvKiAjX19QVVJFX18gKi9mdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdsb2JhbCBjb25maWcgaXMgcmVhZG9ubHkuIFxcbicgKyAnUGxlYXNlIGNyZWF0ZSBhIG1hdGhqcyBpbnN0YW5jZSBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gXFxuJyArICdFeGFtcGxlOlxcbicgKyAnXFxuJyArICcgIGltcG9ydCB7IGNyZWF0ZSwgYWxsIH0gZnJvbSBcXCdtYXRoanNcXCc7XFxuJyArICcgIGNvbnN0IG1hdGhqcyA9IGNyZWF0ZShhbGwpO1xcbicgKyAnICBtYXRoanMuY29uZmlnKHsgbnVtYmVyOiBcXCdCaWdOdW1iZXJcXCcgfSk7XFxuJyk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShfY29uZmlnLkRFRkFVTFRfQ09ORklHKTtcbn07XG5cbmV4cG9ydHMuY29uZmlnID0gY29uZmlnO1xuXG5fZXh0ZW5kcyhjb25maWcsIF9jb25maWcuREVGQVVMVF9DT05GSUcsIHtcbiAgTUFUUklYX09QVElPTlM6IF9jb25maWcyLk1BVFJJWF9PUFRJT05TLFxuICBOVU1CRVJfT1BUSU9OUzogX2NvbmZpZzIuTlVNQkVSX09QVElPTlNcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHlwZWREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlc3VsdFNldERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVzdWx0U2V0LlJlc3VsdFNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaWdOdW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb21wbGV4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGcmFjdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSYW5nZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5SYW5nZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZW5zZU1hdHJpeERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjbG9uZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2xvbmUuY2xvbmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbnRlZ2VyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTmVnYXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuaXNOZWdhdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc051bWVyaWNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUG9zaXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1plcm9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOYU5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInR5cGVPZkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHlwZU9mLnR5cGVPZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0eXBlb2ZEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YudHlwZW9mRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdHJpbmcuc3RyaW5nRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvb2xlYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Jvb2xlYW4uYm9vbGVhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaWdudW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGxleERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGxleC5jb21wbGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyYWN0aW9uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BsaXRVbml0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuc3BsaXRVbml0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuYXJ5TWludXNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmFyeVBsdXNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuYXJ5UGx1cy51bmFyeVBsdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWJzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFwcGx5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBcHBseS5hcHBseURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhZGRTY2FsYXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2JydERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2JydC5jYnJ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNlaWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NlaWwuY2VpbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjdWJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDdWJlLmN1YmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHAuZXhwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cG0xRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHBtLmV4cG0xRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpeERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRml4LmZpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbG9vckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmxvb3IuZmxvb3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2NkRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHY2QuZ2NkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxjbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGNtLmxjbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cxMERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nLmxvZzEwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZzJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xvZzIubG9nMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vZC5tb2REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpcGx5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudGhSb290RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdGhSb290Lm50aFJvb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2lnbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2lnbi5zaWduRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNxcnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXVhcmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NxdWFyZS5zcXVhcmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3VidHJhY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInhnY2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1hnY2QueGdjZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3RNdWx0aXBseURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0QW5kRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaXRBbmQuYml0QW5kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJpdE5vdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0Tm90LmJpdE5vdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaXRPckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0T3IuYml0T3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0WG9yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaXRYb3IuYml0WG9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFyZ0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXJnLmFyZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25qRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ltLmltRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZS5yZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vdC5ub3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09yLm9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInhvckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzWG9yLnhvckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmNhdC5jb25jYXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sdW1uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb2x1bW4uY29sdW1uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyb3NzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDcm9zcy5jcm9zc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaWFnRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaWFnLmRpYWdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXllRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeWUuZXllRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlsdGVyLmZpbHRlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbGF0dGVuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGbGF0dGVuLmZsYXR0ZW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9yRWFjaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9yRWFjaC5mb3JFYWNoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZS5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZGVudGl0eURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia3JvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzS3Jvbi5rcm9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFwLm1hcERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbmVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNPbmVzLm9uZXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmFuZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlc2hhcGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc2hhcGUucmVzaGFwZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc2l6ZS5yZXNpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm93RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSb3cucm93RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXVlZXplRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXVlZXplLnNxdWVlemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3Vic2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zcG9zZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjdHJhbnNwb3NlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDdHJhbnNwb3NlLmN0cmFuc3Bvc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiemVyb3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVyZkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXJmLmVyZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNb2RlLm1vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJvZC5wcm9kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZvcm1hdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9ybWF0LmZvcm1hdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcmludERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJpbnQucHJpbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RvLnRvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUHJpbWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzUHJpbWUuaXNQcmltZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudW1lcmljRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyb3VuZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUm91bmQucm91bmREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMb2czLmxvZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cxcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nMXAubG9nMXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibnRoUm9vdHNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc050aFJvb3RzLm50aFJvb3RzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvdFBvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90UG93LmRvdFBvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3REaXZpZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RvdERpdmlkZS5kb3REaXZpZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibHNvbHZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMc29sdmUubHNvbHZlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzb2x2ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXNvbHZlLnVzb2x2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsZWZ0U2hpZnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xlZnRTaGlmdC5sZWZ0U2hpZnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSaWdodEFyaXRoU2hpZnQucmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JpZ2h0TG9nU2hpZnQucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhbmREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FuZC5hbmREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGFyZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wYXJlVGV4dERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuY29tcGFyZVRleHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXF1YWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsVGV4dERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXF1YWxUZXh0LmVxdWFsVGV4dERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzbWFsbGVyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic21hbGxlckVxRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuc21hbGxlckVxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxhcmdlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsYXJnZXJFcURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVlcEVxdWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZWVwRXF1YWwuZGVlcEVxdWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXF1YWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuZXF1YWwudW5lcXVhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic29ydERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU29ydC5zb3J0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1heERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWF4Lm1heERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01pbi5taW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRmlib25hY2NpSGVhcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLkZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3BhRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFDbGFzcy5TcGFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLnVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BhcnNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFyc2Uuc3BhcnNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVuaXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuY3JlYXRlVW5pdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY29zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY29zLmFjb3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNvc2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3NoLmFjb3NoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3QuYWNvdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY290aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNvdGguYWNvdGhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNzY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNzYy5hY3NjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjc2NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY3NjaC5hY3NjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2VjRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc2VjLmFzZWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNlY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzZWNoLmFzZWNoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzaW4uYXNpbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2luaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXNpbmguYXNpbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXRhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbi5hdGFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF0YW4yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdGFuMi5hdGFuMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdGFuaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbmguYXRhbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb3MuY29zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvc2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Nvc2guY29zaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvdC5jb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY290aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ290aC5jb3RoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNzY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ3NjLmNzY0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjc2NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDc2NoLmNzY2hEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VjRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZWMuc2VjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NlY2guc2VjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Npbi5zaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2luaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2luaC5zaW5oRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVGFuLnRhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YW5oRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNUYW5oLnRhbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRDYXJ0ZXNpYW4uc2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXREaXN0aW5jdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2V0RGlzdGluY3Quc2V0RGlzdGluY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldElzU3Vic2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5zZXRJc1N1YnNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldE11bHRpcGxpY2l0eS5zZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0UG93ZXJzZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0LnNldFBvd2Vyc2V0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldFNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFNpemUuc2V0U2l6ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0VW5pb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFVuaW9uLnNldFVuaW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoeXBvdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSHlwb3QuaHlwb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTm9ybS5ub3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90LmRvdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJhY2UudHJhY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW5kZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4LmluZGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FjY2Vzc29yTm9kZS5BY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJyYXlOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUuQXJyYXlOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCbG9ja05vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5CbG9ja05vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25kaXRpb25hbE5vZGUuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbnN0YW50Tm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLkZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kZXhOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUuSW5kZXhOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9iamVjdE5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09iamVjdE5vZGUuT2JqZWN0Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJhbmdlTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLlJhbmdlTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3ltYm9sTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGlsZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGlsZS5jb21waWxlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV2YWx1YXRlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZS5ldmFsdWF0ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJldmFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbC5ldmFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcnNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuUGFyc2VyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2VyLnBhcnNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsdXBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0x1cC5sdXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1FyLnFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNsdURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2x1LnNsdURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsdXNvbHZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMdXNvbHZlLmx1c29sdmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSGVscERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGVscENsYXNzLkhlbHBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2hhaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuQ2hhaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGVscERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGVscC5oZWxwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNoYWluRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDaGFpbi5jaGFpbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RldC5kZXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW52RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVpZ3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VpZ3MuZWlnc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleHBtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHBtMi5leHBtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNxcnRtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXJ0bS5zcXJ0bURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXZpZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzdGFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Rpc3RhbmNlLmRpc3RhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludGVyc2VjdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSW50ZXJzZWN0LmludGVyc2VjdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1bS5zdW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVhbi5tZWFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lZGlhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVkaWFuLm1lZGlhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hZC5tYWREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyaWFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFZhci52YXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVhbnRpbGVTZXFEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0ZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RkLnN0ZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdhbW1hRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHYW1tYS5nYW1tYURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWN0b3JpYWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5mYWN0b3JpYWxEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2Uua2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpbm9taWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aW5vbWlhbC5tdWx0aW5vbWlhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlja1JhbmRvbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5waWNrUmFuZG9tRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhbmRvbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZG9tLnJhbmRvbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5kb21JbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmRvbUludC5yYW5kb21JbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RpcmxpbmdTMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmVsbE51bWJlcnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhdGFsYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NhdGFsYW4uY2F0YWxhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wb3NpdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcG9zaXRpb24uY29tcG9zaXRpb25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2ltcGxpZnlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlcml2YXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZGVyaXZhdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYXRpb25hbGl6ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUucmF0aW9uYWxpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmV2aXZlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmV2aXZlci5yZXZpdmVyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcGxhY2VyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZXBsYWNlci5yZXBsYWNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFLmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlRS5FRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZhbHNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGYWxzZS5mYWxzZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJLmlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5maW5pdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZmluaXR5LkluZmluaXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxOMTBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xOLkxOMTBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTE4yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMTjIuTE4yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxPRzEwRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE9HMTBFLkxPRzEwRURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMT0cyRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE9HMkUuTE9HMkVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFORGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOYU4uTmFORGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51bGxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051bGwubnVsbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwaGlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BoaS5waGlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BpLnBpRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBJRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5QSURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTUVJUMV8yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTUVJUMV8uU1FSVDFfMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTUVJUMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU1FSVC5TUVJUMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YXVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RhdS50YXVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJ1ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJ1ZS50cnVlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZlcnNpb24udmVyc2lvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdG9taWNNYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdG9taWNNYXNzLmF0b21pY01hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXZvZ2Fkcm9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0F2b2dhZHJvLmF2b2dhZHJvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvaHJNYWduZXRvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQm9ock1hZ25ldG9uLmJvaHJNYWduZXRvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJib2hyUmFkaXVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb2hyUmFkaXVzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYm9sdHptYW5uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb2x0em1hbm4uYm9sdHptYW5uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDbGFzc2ljYWxFbGVjdHJvblJhZGl1cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmR1Y3RhbmNlUXVhbnR1bS5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY291bG9tYkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ291bG9tYi5jb3Vsb21iRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRldXRlcm9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VmaW1vdkZhY3Rvci5lZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudC5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVsZWN0cm9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzLmVsZWN0cm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmFyYWRheURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmFyYWRheS5mYXJhZGF5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Zlcm1pQ291cGxpbmcuZmVybWlDb3VwbGluZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlLmZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdhc0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHYXNDb25zdGFudC5nYXNDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdyYXZpdGF0aW9uQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ3Jhdml0eURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzR3Jhdml0eS5ncmF2aXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kuaGFydHJlZUVuZXJneURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2xpdHppbmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0tsaXR6aW5nLmtsaXR6aW5nRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvc2NobWlkdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9zY2htaWR0Lmxvc2NobWlkdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNYWduZXRpY0NvbnN0YW50Lm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFnbmV0aWNGbHV4UXVhbnR1bS5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vbGFyTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9sYXJNYXNzLm1vbGFyTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhck1hc3NDMTJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyTWFzc0MubW9sYXJNYXNzQzEyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyUGxhbmNrQ29uc3RhbnQubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhclZvbHVtZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUubW9sYXJWb2x1bWVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmV1dHJvbk1hc3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05ldXRyb25NYXNzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTnVjbGVhck1hZ25ldG9uLm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZS5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0NvbnN0YW50LnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja0xlbmd0aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tNYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLnBsYW5ja01hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja1RlbXBlcmF0dXJlLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja1RpbWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja1RpbWUucGxhbmNrVGltZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcm90b25NYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQcm90b25NYXNzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVhbnR1bU9mQ2lyY3VsYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1F1YW50dW1PZkNpcmN1bGF0aW9uLnF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVkdWNlZFBsYW5ja0NvbnN0YW50LnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyeWRiZXJnRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSeWRiZXJnLnJ5ZGJlcmdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2Fja3VyVGV0cm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2Fja3VyVGV0cm9kZS5zYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2Vjb25kUmFkaWF0aW9uLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NwZWVkT2ZMaWdodC5zcGVlZE9mTGlnaHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uc3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRob21zb25Dcm9zc1NlY3Rpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24udGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZS52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNXZWFrTWl4aW5nQW5nbGUud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndpZW5EaXNwbGFjZW1lbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1dpZW5EaXNwbGFjZW1lbnQud2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXBwbHlUcmFuc2Zvcm0uYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlsdGVyVHJhbnNmb3JtLmZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JFYWNoVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGb3JFYWNoVHJhbnNmb3JtLmZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4VHJhbnNmb3JtLmluZGV4VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5tYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVhblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5tZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1pblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtLm1pblRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VUcmFuc2Zvcm0ucmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0ucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3Vic2V0VHJhbnNmb3JtLnN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5jb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdGRUcmFuc2Zvcm0uc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1bVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3VtVHJhbnNmb3JtLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0udmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWxsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hbGxGYWN0b3JpZXNBbnkuYWxsO1xuICB9XG59KTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzdWx0U2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDbG9uZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGFzTnVtZXJpY1ZhbHVlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlT2YgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHlwZU9mLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkVHlwZW9mID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RyaW5nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQm9vbGVhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb29sZWFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBsZXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGxpdFVuaXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BsaXRVbml0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FwcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDYnJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NicnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NlaWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3ViZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDdWJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHBtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cG0xLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbG9vciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGbG9vci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2NkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0djZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGNtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xjbS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzEwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2cyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnRoUm9vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdGhSb290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaWduID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3F1YXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1hnY2QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzWGdjZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdEFuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdE5vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXROb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdE9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaXRYb3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0WG9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcmcgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ltLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm90ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzT3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1hvciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbHVtbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Nyb3NzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaWFnID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RpYWcuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0V5ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeWUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpbHRlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZsYXR0ZW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRm9yRWFjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JFYWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSWRlbnRpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0tyb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS3Jvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT25lcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzaGFwZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZXNpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVzaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxdWVlemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3F1ZWV6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDdHJhbnNwb3NlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXJmID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTW9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQcm9kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Byb2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zvcm1hdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JtYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1ByaW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ByaW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUbyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQcmltZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JvdW5kLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2czID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nMXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc050aFJvb3RzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc050aFJvb3RzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3RQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGVmdFNoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSaWdodEFyaXRoU2hpZnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JpZ2h0TG9nU2hpZnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsVGV4dC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVlcEVxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5lcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmVxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTb3J0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NvcnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01pbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaWJvbmFjY2lIZWFwQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRGdW5jdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NwYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3JlYXRlVW5pdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDcmVhdGVVbml0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY29zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjb3NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY290ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjb3RoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3RoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY3NjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjc2MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjc2NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjc2NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2VjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FzZWNoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2luID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FzaW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzaW5oLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0YW4yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29zaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3RoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NzYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NzY2ggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ3NjaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2VjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2VjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2luLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhbmggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldENhcnRlc2lhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldEludGVyc2VjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldE11bHRpcGxpY2l0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRNdWx0aXBsaWNpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFNpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0VW5pb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0h5cG90ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0h5cG90LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RvdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYWNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RyYWNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJyYXlOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmxvY2tOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmRpdGlvbmFsTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNPYmplY3ROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09iamVjdE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21waWxlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBpbGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0V2YWx1YXRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V2YWx1YXRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0x1cCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1FyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1FyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbHUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2x1LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0x1c29sdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIZWxwQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NoYWluQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSGVscCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIZWxwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDaGFpbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWlncyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFaWdzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHBtMiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeHBtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXJ0bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGlzdGFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGlzdGFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01lYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVkaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01lZGlhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFZhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXVhbnRpbGVTZXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9uc1dpdGhSZXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2FtbWEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpbm9taWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGVybXV0YXRpb25zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQaWNrUmFuZG9tID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BpY2tSYW5kb20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmRvbSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmRvbUludCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0aXJsaW5nUyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGlybGluZ1MyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2F0YWxhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDYXRhbGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wb3NpdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wb3NpdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2ltcGxpZnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2ltcGxpZnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Rlcml2YXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVyaXZhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jldml2ZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVwbGFjZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVwbGFjZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlRSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWxzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmZpbml0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmZpbml0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE4xMC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE4yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE9HMTBFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xPRzEwRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE9HMkUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMkUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bGwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGhpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BoaS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VwcGVyY2FzZVBpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VwcGVyY2FzZVBpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTUVJUMV8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU1FSVDFfMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU1FSVCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTUVJUMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVGF1ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RhdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJ1ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNWZXJzaW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZlcnNpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0b21pY01hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXZvZ2Fkcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvaHJNYWduZXRvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvaHJSYWRpdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9oclJhZGl1cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQm9sdHptYW5uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmR1Y3RhbmNlUXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvdWxvbWIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ291bG9tYi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldXRlcm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWZpbW92RmFjdG9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VmaW1vdkZhY3Rvci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFbGVjdHJpY0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFbGVjdHJvbk1hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZW1lbnRhcnlDaGFyZ2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhcmFkYXkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGZXJtaUNvdXBsaW5nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbmVTdHJ1Y3R1cmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHYXNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHYXNDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR3Jhdml0YXRpb25Db25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHcmF2aXR5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dyYXZpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGFydHJlZUVuZXJneS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNLbGl0emluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNLbGl0emluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9zY2htaWR0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvc2NobWlkdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFnbmV0aWNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWduZXRpY0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYWduZXRpY0ZsdXhRdWFudHVtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyTWFzc0MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJNYXNzQzEyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNb2xhclBsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyVm9sdW1lID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyVm9sdW1lLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVjbGVhck1hZ25ldG9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrQ29uc3RhbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja0xlbmd0aCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tMZW5ndGguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja01hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrVGVtcGVyYXR1cmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGVtcGVyYXR1cmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja1RpbWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUHJvdG9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcm90b25NYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUnlkYmVyZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSeWRiZXJnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NhY2t1clRldHJvZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWNvbmRSYWRpYXRpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwZWVkT2ZMaWdodCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGVlZE9mTGlnaHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZWZhbkJvbHR6bWFubiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGhvbXNvbkNyb3NzU2VjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFjdXVtSW1wZWRhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1dlYWtNaXhpbmdBbmdsZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzV2llbkRpc3BsYWNlbWVudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29sdW1uVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbHVtblRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmlsdGVyVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRm9yRWFjaFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JFYWNoVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF4VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNZWFuVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNaW5UcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm93VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jvd1RyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnNldFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uY2F0VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VtVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2FsbEZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuL2FsbEZhY3Rvcmllc0FueS5qc1wiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWJzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWJzRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBYnM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWJzXG59O1xuZXhwb3J0cy5hYnNEZXBlbmRlbmNpZXMgPSBhYnNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNjZXNzb3JOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjY2Vzc29yTm9kZVxufTtcbmV4cG9ydHMuQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzID0gQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY29zRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY29zRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvc1xufTtcbmV4cG9ydHMuYWNvc0RlcGVuZGVuY2llcyA9IGFjb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY29zaERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY29zaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY29zaFxufTtcbmV4cG9ydHMuYWNvc2hEZXBlbmRlbmNpZXMgPSBhY29zaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjb3REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY290XG59O1xuZXhwb3J0cy5hY290RGVwZW5kZW5jaWVzID0gYWNvdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdGhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjb3RoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvdGg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdGhcbn07XG5leHBvcnRzLmFjb3RoRGVwZW5kZW5jaWVzID0gYWNvdGhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjc2NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjc2NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY3NjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2Ncbn07XG5leHBvcnRzLmFjc2NEZXBlbmRlbmNpZXMgPSBhY3NjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY3NjaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjc2NoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjc2NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2NoXG59O1xuZXhwb3J0cy5hY3NjaERlcGVuZGVuY2llcyA9IGFjc2NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFkZERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFkZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBZGRcbn07XG5leHBvcnRzLmFkZERlcGVuZGVuY2llcyA9IGFkZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBZGRTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkU2NhbGFyXG59O1xuZXhwb3J0cy5hZGRTY2FsYXJEZXBlbmRlbmNpZXMgPSBhZGRTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFuZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhbmREZXBlbmRlbmNpZXMgPSB7XG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG5vdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vdC5ub3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFuZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBbmRcbn07XG5leHBvcnRzLmFuZERlcGVuZGVuY2llcyA9IGFuZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXBwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFwcGx5RGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcHBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVxufTtcbmV4cG9ydHMuYXBwbHlEZXBlbmRlbmNpZXMgPSBhcHBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFwcGx5VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcHBseVRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVRyYW5zZm9ybVxufTtcbmV4cG9ydHMuYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXJnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXJnRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJnXG59O1xuZXhwb3J0cy5hcmdEZXBlbmRlbmNpZXMgPSBhcmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFycmF5Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBBcnJheU5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFycmF5Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcnJheU5vZGVcbn07XG5leHBvcnRzLkFycmF5Tm9kZURlcGVuZGVuY2llcyA9IEFycmF5Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNlY0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzZWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlY1xufTtcbmV4cG9ydHMuYXNlY0RlcGVuZGVuY2llcyA9IGFzZWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzZWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhc2VjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzZWNoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzZWNoXG59O1xuZXhwb3J0cy5hc2VjaERlcGVuZGVuY2llcyA9IGFzZWNoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhc2luRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzaW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNpblxufTtcbmV4cG9ydHMuYXNpbkRlcGVuZGVuY2llcyA9IGFzaW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzaW5oRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNpbmhEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzaW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5oXG59O1xuZXhwb3J0cy5hc2luaERlcGVuZGVuY2llcyA9IGFzaW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzc2lnbm1lbnROb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzc2lnbm1lbnROb2RlXG59O1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IEFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbkRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuXG59O1xuZXhwb3J0cy5hdGFuRGVwZW5kZW5jaWVzID0gYXRhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXRhbjJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhdGFuMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUF0YW4yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW4yXG59O1xuZXhwb3J0cy5hdGFuMkRlcGVuZGVuY2llcyA9IGF0YW4yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbmhEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRhbmg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbmhcbn07XG5leHBvcnRzLmF0YW5oRGVwZW5kZW5jaWVzID0gYXRhbmhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdG9taWNNYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0b21pY01hc3Ncbn07XG5leHBvcnRzLmF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSBhdG9taWNNYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdm9nYWRyb0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdm9nYWRybzogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdm9nYWRyb1xufTtcbmV4cG9ydHMuYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSBhdm9nYWRyb0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdGlybGluZ1MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdGlybGluZ1MyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBzdGlybGluZ1MyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJlbGxOdW1iZXJzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJlbGxOdW1iZXJzXG59O1xuZXhwb3J0cy5iZWxsTnVtYmVyc0RlcGVuZGVuY2llcyA9IGJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBCaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZUJpZ051bWJlckNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpZ051bWJlckNsYXNzXG59O1xuZXhwb3J0cy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSBCaWdOdW1iZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpZ251bWJlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpZ251bWJlckRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaWdudW1iZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnbnVtYmVyXG59O1xuZXhwb3J0cy5iaWdudW1iZXJEZXBlbmRlbmNpZXMgPSBiaWdudW1iZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYml0QW5kRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaXRBbmQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0QW5kXG59O1xuZXhwb3J0cy5iaXRBbmREZXBlbmRlbmNpZXMgPSBiaXRBbmREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE5vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdE5vdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0Tm90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE5vdFxufTtcbmV4cG9ydHMuYml0Tm90RGVwZW5kZW5jaWVzID0gYml0Tm90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRPckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdE9yRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJpdE9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE9yXG59O1xuZXhwb3J0cy5iaXRPckRlcGVuZGVuY2llcyA9IGJpdE9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRYb3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBiaXRYb3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0WG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdFhvclxufTtcbmV4cG9ydHMuYml0WG9yRGVwZW5kZW5jaWVzID0gYml0WG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5CbG9ja05vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jlc3VsdFNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBCbG9ja05vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIFJlc3VsdFNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Jlc3VsdFNldC5SZXN1bHRTZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJsb2NrTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVCbG9ja05vZGVcbn07XG5leHBvcnRzLkJsb2NrTm9kZURlcGVuZGVuY2llcyA9IEJsb2NrTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9ock1hZ25ldG9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBib2hyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2hyTWFnbmV0b246IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9ock1hZ25ldG9uXG59O1xuZXhwb3J0cy5ib2hyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSBib2hyTWFnbmV0b25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2hyUmFkaXVzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJvaHJSYWRpdXNcbn07XG5leHBvcnRzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSBib2hyUmFkaXVzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ib2x0em1hbm5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJvbHR6bWFubjogX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2x0em1hbm5cbn07XG5leHBvcnRzLmJvbHR6bWFubkRlcGVuZGVuY2llcyA9IGJvbHR6bWFubkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9vbGVhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvb2xlYW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJvb2xlYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9vbGVhblxufTtcbmV4cG9ydHMuYm9vbGVhbkRlcGVuZGVuY2llcyA9IGJvb2xlYW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNhdGFsYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjYXRhbGFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDYXRhbGFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNhdGFsYW5cbn07XG5leHBvcnRzLmNhdGFsYW5EZXBlbmRlbmNpZXMgPSBjYXRhbGFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYnJ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNicnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNicnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2JydFxufTtcbmV4cG9ydHMuY2JydERlcGVuZGVuY2llcyA9IGNicnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNlaWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm91bmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjZWlsRGVwZW5kZW5jaWVzID0ge1xuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDZWlsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNlaWxcbn07XG5leHBvcnRzLmNlaWxEZXBlbmRlbmNpZXMgPSBjZWlsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jaGFpbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjaGFpbkRlcGVuZGVuY2llcyA9IHtcbiAgQ2hhaW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzLkNoYWluRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDaGFpbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpblxufTtcbmV4cG9ydHMuY2hhaW5EZXBlbmRlbmNpZXMgPSBjaGFpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ2hhaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDaGFpbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlQ2hhaW5DbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpbkNsYXNzXG59O1xuZXhwb3J0cy5DaGFpbkRlcGVuZGVuY2llcyA9IENoYWluRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1c1xufTtcbmV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSBjbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2xvbmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjbG9uZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ2xvbmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xvbmVcbn07XG5leHBvcnRzLmNsb25lRGVwZW5kZW5jaWVzID0gY2xvbmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbHVtbkRlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICByYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb2x1bW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uXG59O1xuZXhwb3J0cy5jb2x1bW5EZXBlbmRlbmNpZXMgPSBjb2x1bW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICByYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb2x1bW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5jb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBjb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tYmluYXRpb25zOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbWJpbmF0aW9uc1xufTtcbmV4cG9ydHMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzID0gY29tYmluYXRpb25zRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwXG59O1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzID0gY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21wYXJlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBhcmVcbn07XG5leHBvcnRzLmNvbXBhcmVEZXBlbmRlbmNpZXMgPSBjb21wYXJlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZU5hdHVyYWw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZU5hdHVyYWxcbn07XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzID0gY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlVGV4dERlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZVRleHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZVRleHRcbn07XG5leHBvcnRzLmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzID0gY29tcGFyZVRleHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBpbGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21waWxlRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21waWxlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBpbGVcbn07XG5leHBvcnRzLmNvbXBpbGVEZXBlbmRlbmNpZXMgPSBjb21waWxlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wbGV4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wbGV4RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBsZXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleFxufTtcbmV4cG9ydHMuY29tcGxleERlcGVuZGVuY2llcyA9IGNvbXBsZXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbXBsZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb21wbGV4RGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVDb21wbGV4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleENsYXNzXG59O1xuZXhwb3J0cy5Db21wbGV4RGVwZW5kZW5jaWVzID0gQ29tcGxleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMsXG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIGlzUG9zaXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmlzUG9zaXRpdmVEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBvc2l0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBvc2l0aW9uXG59O1xuZXhwb3J0cy5jb21wb3NpdGlvbkRlcGVuZGVuY2llcyA9IGNvbXBvc2l0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29uY2F0RGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb25jYXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uY2F0XG59O1xuZXhwb3J0cy5jb25jYXREZXBlbmRlbmNpZXMgPSBjb25jYXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmNhdFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXRUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIENvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29uZGl0aW9uYWxOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbmRpdGlvbmFsTm9kZVxufTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW1cbn07XG5leHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IGNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uakRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmpEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmo6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29ualxufTtcbmV4cG9ydHMuY29uakRlcGVuZGVuY2llcyA9IGNvbmpEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbnN0YW50Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25zdGFudE5vZGVcbn07XG5leHBvcnRzLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyA9IENvbnN0YW50Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29zRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zXG59O1xuZXhwb3J0cy5jb3NEZXBlbmRlbmNpZXMgPSBjb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvc2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3NoRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvc2hcbn07XG5leHBvcnRzLmNvc2hEZXBlbmRlbmNpZXMgPSBjb3NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ290OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdFxufTtcbmV4cG9ydHMuY290RGVwZW5kZW5jaWVzID0gY290RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3RoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY290aERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdGhcbn07XG5leHBvcnRzLmNvdGhEZXBlbmRlbmNpZXMgPSBjb3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3Vsb21iRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3Vsb21iRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ291bG9tYjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3Vsb21iXG59O1xuZXhwb3J0cy5jb3Vsb21iRGVwZW5kZW5jaWVzID0gY291bG9tYkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3JlYXRlVW5pdERlcGVuZGVuY2llcyA9IHtcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDcmVhdGVVbml0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyZWF0ZVVuaXRcbn07XG5leHBvcnRzLmNyZWF0ZVVuaXREZXBlbmRlbmNpZXMgPSBjcmVhdGVVbml0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcm9zc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3Jvc3NEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNyb3NzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyb3NzXG59O1xuZXhwb3J0cy5jcm9zc0RlcGVuZGVuY2llcyA9IGNyb3NzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc2NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjc2NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3NjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY1xufTtcbmV4cG9ydHMuY3NjRGVwZW5kZW5jaWVzID0gY3NjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc2NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3NjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDc2NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY2hcbn07XG5leHBvcnRzLmNzY2hEZXBlbmRlbmNpZXMgPSBjc2NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmogPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25qLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3RyYW5zcG9zZURlcGVuZGVuY2llcyA9IHtcbiAgY29uakRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmouY29uakRlcGVuZGVuY2llcyxcbiAgdHJhbnNwb3NlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3RyYW5zcG9zZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDdHJhbnNwb3NlXG59O1xuZXhwb3J0cy5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gY3RyYW5zcG9zZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3ViZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGN1YmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUN1YmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3ViZVxufTtcbmV4cG9ydHMuY3ViZURlcGVuZGVuY2llcyA9IGN1YmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZXBFcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRlZXBFcXVhbERlcGVuZGVuY2llcyA9IHtcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGVlcEVxdWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlZXBFcXVhbFxufTtcbmV4cG9ydHMuZGVlcEVxdWFsRGVwZW5kZW5jaWVzID0gZGVlcEVxdWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5NYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlbnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVuc2VNYXRyaXhDbGFzc1xufTtcbmV4cG9ydHMuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSBEZW5zZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXZhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0V2YWx1YXRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV2YWxEZXBlbmRlbmNpZXMgPSB7XG4gIGV2YWx1YXRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXZhbHVhdGUuZXZhbHVhdGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlcHJlY2F0ZWRFdmFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRFdmFsXG59O1xuZXhwb3J0cy5ldmFsRGVwZW5kZW5jaWVzID0gZXZhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZW9mRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHlwZW9mRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVEZXByZWNhdGVkVHlwZW9mOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Zcbn07XG5leHBvcnRzLnR5cGVvZkRlcGVuZGVuY2llcyA9IHR5cGVvZkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyRGVwZW5kZW5jaWVzID0ge1xuICB2YXJpYW5jZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXByZWNhdGVkVmFyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRWYXJcbn07XG5leHBvcnRzLnZhckRlcGVuZGVuY2llcyA9IHZhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRlcml2YXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG51bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHNpbXBsaWZ5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2ltcGxpZnkuc2ltcGxpZnlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlcml2YXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVyaXZhdGl2ZVxufTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURlcGVuZGVuY2llcyA9IGRlcml2YXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMdXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGV0RGVwZW5kZW5jaWVzID0ge1xuICBsdXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMdXAubHVwRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGV0XG59O1xuZXhwb3J0cy5kZXREZXBlbmRlbmNpZXMgPSBkZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGV1dGVyb25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURldXRlcm9uTWFzc1xufTtcbmV4cG9ydHMuZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzID0gZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaWFnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGlhZ0RlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURpYWc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlhZ1xufTtcbmV4cG9ydHMuZGlhZ0RlcGVuZGVuY2llcyA9IGRpYWdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpc3RhbmNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkaXN0YW5jZURlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGlzdGFuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlzdGFuY2Vcbn07XG5leHBvcnRzLmRpc3RhbmNlRGVwZW5kZW5jaWVzID0gZGlzdGFuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpdmlkZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRpdmlkZURlcGVuZGVuY2llcyA9IHtcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgaW52RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW52LmludkRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGl2aWRlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZVxufTtcbmV4cG9ydHMuZGl2aWRlRGVwZW5kZW5jaWVzID0gZGl2aWRlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICBudW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtZXJpYy5udW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEaXZpZGVTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGl2aWRlU2NhbGFyXG59O1xuZXhwb3J0cy5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMgPSBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90RGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRG90XG59O1xuZXhwb3J0cy5kb3REZXBlbmRlbmNpZXMgPSBkb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERpdmlkZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90RGl2aWRlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURvdERpdmlkZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3REaXZpZGVcbn07XG5leHBvcnRzLmRvdERpdmlkZURlcGVuZGVuY2llcyA9IGRvdERpdmlkZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRvdE11bHRpcGx5RGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3RNdWx0aXBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RNdWx0aXBseVxufTtcbmV4cG9ydHMuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXMgPSBkb3RNdWx0aXBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90UG93RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkb3RQb3dEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRG90UG93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdFBvd1xufTtcbmV4cG9ydHMuZG90UG93RGVwZW5kZW5jaWVzID0gZG90UG93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVcbn07XG5leHBvcnRzLmVEZXBlbmRlbmNpZXMgPSBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWZpbW92RmFjdG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVmaW1vdkZhY3RvclxufTtcbmV4cG9ydHMuZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzID0gZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5laWdzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0YW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBdGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Nvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Npbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlaWdzRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBhdGFuRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXRhbi5hdGFuRGVwZW5kZW5jaWVzLFxuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb3MuY29zRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzaW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaW4uc2luRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFaWdzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVpZ3Ncbn07XG5leHBvcnRzLmVpZ3NEZXBlbmRlbmNpZXMgPSBlaWdzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWxlY3RyaWNDb25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJpY0NvbnN0YW50XG59O1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZWxlY3Ryb25NYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFbGVjdHJvbk1hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRWxlY3Ryb25NYXNzXG59O1xuZXhwb3J0cy5lbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXMgPSBlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2Vcbn07XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSBlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVxdWFsRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVxdWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVxdWFsXG59O1xuZXhwb3J0cy5lcXVhbERlcGVuZGVuY2llcyA9IGVxdWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcXVhbFNjYWxhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFNjYWxhclxufTtcbmV4cG9ydHMuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMgPSBlcXVhbFNjYWxhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlcXVhbFRleHREZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuY29tcGFyZVRleHREZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVxdWFsVGV4dDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFRleHRcbn07XG5leHBvcnRzLmVxdWFsVGV4dERlcGVuZGVuY2llcyA9IGVxdWFsVGV4dERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJmRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXJmRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcmY6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXJmXG59O1xuZXhwb3J0cy5lcmZEZXBlbmRlbmNpZXMgPSBlcmZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV2YWx1YXRlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXZhbHVhdGVEZXBlbmRlbmNpZXMgPSB7XG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV2YWx1YXRlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUV2YWx1YXRlXG59O1xuZXhwb3J0cy5ldmFsdWF0ZURlcGVuZGVuY2llcyA9IGV2YWx1YXRlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5leHBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV4cDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBcbn07XG5leHBvcnRzLmV4cERlcGVuZGVuY2llcyA9IGV4cERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXhwbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV4cG1EZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIGludkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ludi5pbnZEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV4cG06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbVxufTtcbmV4cG9ydHMuZXhwbURlcGVuZGVuY2llcyA9IGV4cG1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG0xRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBtMURlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFeHBtMTogX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBtMVxufTtcbmV4cG9ydHMuZXhwbTFEZXBlbmRlbmNpZXMgPSBleHBtMURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXllRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXllRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVFeWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXllXG59O1xuZXhwb3J0cy5leWVEZXBlbmRlbmNpZXMgPSBleWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZhY3RvcmlhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNHYW1tYSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0dhbW1hLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhY3RvcmlhbERlcGVuZGVuY2llcyA9IHtcbiAgZ2FtbWFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNHYW1tYS5nYW1tYURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmFjdG9yaWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZhY3RvcmlhbFxufTtcbmV4cG9ydHMuZmFjdG9yaWFsRGVwZW5kZW5jaWVzID0gZmFjdG9yaWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mYWxzZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhbHNlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVGYWxzZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWxzZVxufTtcbmV4cG9ydHMuZmFsc2VEZXBlbmRlbmNpZXMgPSBmYWxzZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFyYWRheURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmFyYWRheURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZhcmFkYXk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFyYWRheVxufTtcbmV4cG9ydHMuZmFyYWRheURlcGVuZGVuY2llcyA9IGZhcmFkYXlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGZXJtaUNvdXBsaW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZlcm1pQ291cGxpbmdcbn07XG5leHBvcnRzLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSBmZXJtaUNvdXBsaW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IHtcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlib25hY2NpSGVhcENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzc1xufTtcbmV4cG9ydHMuRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IEZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpbHRlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpbHRlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlsdGVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlclxufTtcbmV4cG9ydHMuZmlsdGVyRGVwZW5kZW5jaWVzID0gZmlsdGVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmaWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZpbHRlclRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmluZVN0cnVjdHVyZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaW5lU3RydWN0dXJlXG59O1xuZXhwb3J0cy5maW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzID0gZmluZVN0cnVjdHVyZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlyc3RSYWRpYXRpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlyc3RSYWRpYXRpb25cbn07XG5leHBvcnRzLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NlaWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDZWlsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbG9vciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Zsb29yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpeERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBjZWlsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ2VpbC5jZWlsRGVwZW5kZW5jaWVzLFxuICBmbG9vckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Zsb29yLmZsb29yRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGaXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRml4XG59O1xuZXhwb3J0cy5maXhEZXBlbmRlbmNpZXMgPSBmaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsYXR0ZW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZsYXR0ZW5EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZsYXR0ZW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmxhdHRlblxufTtcbmV4cG9ydHMuZmxhdHRlbkRlcGVuZGVuY2llcyA9IGZsYXR0ZW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsb29yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUm91bmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmxvb3JEZXBlbmRlbmNpZXMgPSB7XG4gIHJvdW5kRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUm91bmQucm91bmREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZsb29yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZsb29yXG59O1xuZXhwb3J0cy5mbG9vckRlcGVuZGVuY2llcyA9IGZsb29yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JFYWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZm9yRWFjaERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRm9yRWFjaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVGb3JFYWNoXG59O1xuZXhwb3J0cy5mb3JFYWNoRGVwZW5kZW5jaWVzID0gZm9yRWFjaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZvckVhY2hUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZvcm1hdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvcm1hdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRm9ybWF0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvcm1hdFxufTtcbmV4cG9ydHMuZm9ybWF0RGVwZW5kZW5jaWVzID0gZm9ybWF0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mcmFjdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmcmFjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGcmFjdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvblxufTtcbmV4cG9ydHMuZnJhY3Rpb25EZXBlbmRlbmNpZXMgPSBmcmFjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRnJhY3Rpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBGcmFjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlRnJhY3Rpb25DbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvbkNsYXNzXG59O1xuZXhwb3J0cy5GcmFjdGlvbkRlcGVuZGVuY2llcyA9IEZyYWN0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxufTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGdW5jdGlvbk5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Ob2RlXG59O1xuZXhwb3J0cy5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMgPSBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdhbW1hRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGdhbW1hRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR2FtbWE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR2FtbWFcbn07XG5leHBvcnRzLmdhbW1hRGVwZW5kZW5jaWVzID0gZ2FtbWFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdhc0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnYXNDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdhc0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhc0NvbnN0YW50XG59O1xuZXhwb3J0cy5nYXNDb25zdGFudERlcGVuZGVuY2llcyA9IGdhc0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nY2REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnY2REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVHY2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR2NkXG59O1xuZXhwb3J0cy5nY2REZXBlbmRlbmNpZXMgPSBnY2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ2V0TWF0cml4RGF0YVR5cGVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlXG59O1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcyA9IGdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50XG59O1xuZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0gZ3Jhdml0YXRpb25Db25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ3Jhdml0eURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ3Jhdml0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdyYXZpdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0eVxufTtcbmV4cG9ydHMuZ3Jhdml0eURlcGVuZGVuY2llcyA9IGdyYXZpdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIYXJ0cmVlRW5lcmd5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhcnRyZWVFbmVyZ3lcbn07XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSBoYXJ0cmVlRW5lcmd5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGhhc051bWVyaWNWYWx1ZURlcGVuZGVuY2llcyA9IHtcbiAgaXNOdW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOdW1lcmljLmlzTnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSGFzTnVtZXJpY1ZhbHVlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhc051bWVyaWNWYWx1ZVxufTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzID0gaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oZWxwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoZWxwRGVwZW5kZW5jaWVzID0ge1xuICBIZWxwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSGVscENsYXNzLkhlbHBEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUhlbHA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscFxufTtcbmV4cG9ydHMuaGVscERlcGVuZGVuY2llcyA9IGhlbHBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkhlbHBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBIZWxwRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIZWxwQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscENsYXNzXG59O1xuZXhwb3J0cy5IZWxwRGVwZW5kZW5jaWVzID0gSGVscERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaHlwb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWJzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoeXBvdERlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgaXNQb3NpdGl2ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSHlwb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSHlwb3Rcbn07XG5leHBvcnRzLmh5cG90RGVwZW5kZW5jaWVzID0gaHlwb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJXG59O1xuZXhwb3J0cy5pRGVwZW5kZW5jaWVzID0gaURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaWRlbnRpdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpZGVudGl0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSWRlbnRpdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSWRlbnRpdHlcbn07XG5leHBvcnRzLmlkZW50aXR5RGVwZW5kZW5jaWVzID0gaWRlbnRpdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmltRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUltOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUltXG59O1xuZXhwb3J0cy5pbURlcGVuZGVuY2llcyA9IGltRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzXG59O1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbmRleERlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmRleDogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFxufTtcbmV4cG9ydHMuaW5kZXhEZXBlbmRlbmNpZXMgPSBpbmRleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW5kZXhEZXBlbmRlbmNpZXMgPSB7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleENsYXNzXG59O1xuZXhwb3J0cy5JbmRleERlcGVuZGVuY2llcyA9IEluZGV4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbmRleE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBJbmRleE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIFJhbmdlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5SYW5nZURlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4Tm9kZVxufTtcbmV4cG9ydHMuSW5kZXhOb2RlRGVwZW5kZW5jaWVzID0gSW5kZXhOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmRleFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBpbmRleFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5maW5pdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBJbmZpbml0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmZpbml0eTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmZpbml0eVxufTtcbmV4cG9ydHMuSW5maW5pdHlEZXBlbmRlbmNpZXMgPSBJbmZpbml0eURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW50ZXJzZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludGVyc2VjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnRlcnNlY3Rcbn07XG5leHBvcnRzLmludGVyc2VjdERlcGVuZGVuY2llcyA9IGludGVyc2VjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbnZEZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RldC5kZXREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnZcbn07XG5leHBvcnRzLmludkRlcGVuZGVuY2llcyA9IGludkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bVxufTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IGludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzSW50ZWdlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzSW50ZWdlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNJbnRlZ2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzSW50ZWdlclxufTtcbmV4cG9ydHMuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzID0gaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05hTkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTmFORGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJc05hTjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05hTlxufTtcbmV4cG9ydHMuaXNOYU5EZXBlbmRlbmNpZXMgPSBpc05hTkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzTmVnYXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOZWdhdGl2ZVxufTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyA9IGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNOdW1lcmljOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTnVtZXJpY1xufTtcbmV4cG9ydHMuaXNOdW1lcmljRGVwZW5kZW5jaWVzID0gaXNOdW1lcmljRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaXNQb3NpdGl2ZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNQb3NpdGl2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1Bvc2l0aXZlXG59O1xuZXhwb3J0cy5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzID0gaXNQb3NpdGl2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNQcmltZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzUHJpbWVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzUHJpbWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQcmltZVxufTtcbmV4cG9ydHMuaXNQcmltZURlcGVuZGVuY2llcyA9IGlzUHJpbWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzWmVyb0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzWmVyb0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNaZXJvOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzWmVyb1xufTtcbmV4cG9ydHMuaXNaZXJvRGVwZW5kZW5jaWVzID0gaXNaZXJvRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5rbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEb3REaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTG9nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBrbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGRvdERpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RvdERpdmlkZS5kb3REaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIGxvZ0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xvZy5sb2dEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1bURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1bS5zdW1EZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtsZGl2ZXJnZW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVLbGRpdmVyZ2VuY2Vcbn07XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURlcGVuZGVuY2llcyA9IGtsZGl2ZXJnZW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMua2xpdHppbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGtsaXR6aW5nRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlS2xpdHppbmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xpdHppbmdcbn07XG5leHBvcnRzLmtsaXR6aW5nRGVwZW5kZW5jaWVzID0ga2xpdHppbmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtyb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGtyb25EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtyb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlS3JvblxufTtcbmV4cG9ydHMua3JvbkRlcGVuZGVuY2llcyA9IGtyb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMTBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBMTjEwRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxOMTA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4xMFxufTtcbmV4cG9ydHMuTE4xMERlcGVuZGVuY2llcyA9IExOMTBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExOMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMTjI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4yXG59O1xuZXhwb3J0cy5MTjJEZXBlbmRlbmNpZXMgPSBMTjJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxPRzEwRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExPRzEwRURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMT0cxMEU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE9HMTBFXG59O1xuZXhwb3J0cy5MT0cxMEVEZXBlbmRlbmNpZXMgPSBMT0cxMEVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxPRzJFRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTE9HMkVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlTE9HMkU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE9HMkVcbn07XG5leHBvcnRzLkxPRzJFRGVwZW5kZW5jaWVzID0gTE9HMkVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxhcmdlckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMYXJnZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyXG59O1xuZXhwb3J0cy5sYXJnZXJEZXBlbmRlbmNpZXMgPSBsYXJnZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckVxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbGFyZ2VyRXFEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTGFyZ2VyRXE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyRXFcbn07XG5leHBvcnRzLmxhcmdlckVxRGVwZW5kZW5jaWVzID0gbGFyZ2VyRXFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxjbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbGNtRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMY206IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGNtXG59O1xuZXhwb3J0cy5sY21EZXBlbmRlbmNpZXMgPSBsY21EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxlZnRTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxlZnRTaGlmdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB6ZXJvc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMZWZ0U2hpZnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGVmdFNoaWZ0XG59O1xuZXhwb3J0cy5sZWZ0U2hpZnREZXBlbmRlbmNpZXMgPSBsZWZ0U2hpZnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb2dEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZ1xufTtcbmV4cG9ydHMubG9nRGVwZW5kZW5jaWVzID0gbG9nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxMERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nMTBEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMTA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMTBcbn07XG5leHBvcnRzLmxvZzEwRGVwZW5kZW5jaWVzID0gbG9nMTBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMb2cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nMXBEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbG9nRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTG9nLmxvZ0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMXBcbn07XG5leHBvcnRzLmxvZzFwRGVwZW5kZW5jaWVzID0gbG9nMXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxvZzJEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cyXG59O1xuZXhwb3J0cy5sb2cyRGVwZW5kZW5jaWVzID0gbG9nMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9zY2htaWR0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb3NjaG1pZHREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMb3NjaG1pZHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9zY2htaWR0XG59O1xuZXhwb3J0cy5sb3NjaG1pZHREZXBlbmRlbmNpZXMgPSBsb3NjaG1pZHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxzb2x2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbHNvbHZlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVMc29sdmVcbn07XG5leHBvcnRzLmxzb2x2ZURlcGVuZGVuY2llcyA9IGxzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbHVwRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYUNsYXNzLlNwYURlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMdXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVwXG59O1xuZXhwb3J0cy5sdXBEZXBlbmRlbmNpZXMgPSBsdXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmx1c29sdmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xzb2x2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTHVwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NsdSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGx1c29sdmVEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbHNvbHZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHNvbHZlLmxzb2x2ZURlcGVuZGVuY2llcyxcbiAgbHVwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHVwLmx1cERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgc2x1RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2x1LnNsdURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdXNvbHZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVXNvbHZlLnVzb2x2ZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlTHVzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVMdXNvbHZlXG59O1xuZXhwb3J0cy5sdXNvbHZlRGVwZW5kZW5jaWVzID0gbHVzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWFwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNZWRpYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNZWRpYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFkRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBtYXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXAubWFwRGVwZW5kZW5jaWVzLFxuICBtZWRpYW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNZWRpYW4ubWVkaWFuRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYWQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFkXG59O1xuZXhwb3J0cy5tYWREZXBlbmRlbmNpZXMgPSBtYWREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYWduZXRpY0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljQ29uc3RhbnRcbn07XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSBtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtXG59O1xuZXhwb3J0cy5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0gbWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFwRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFwXG59O1xuZXhwb3J0cy5tYXBEZXBlbmRlbmNpZXMgPSBtYXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFwVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hcFRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWFwVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gbWFwVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIE1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXRyaXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4XG59O1xuZXhwb3J0cy5tYXRyaXhEZXBlbmRlbmNpZXMgPSBtYXRyaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIE1hdHJpeERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLk1hdHJpeERlcGVuZGVuY2llcyA9IE1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXhEZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1heDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXhcbn07XG5leHBvcnRzLm1heERlcGVuZGVuY2llcyA9IG1heERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF4VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1heFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXhUcmFuc2Zvcm1cbn07XG5leHBvcnRzLm1heFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1heFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNZWFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1lYW5cbn07XG5leHBvcnRzLm1lYW5EZXBlbmRlbmNpZXMgPSBtZWFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1lYW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhblRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWVhblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lZGlhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWRpYW5EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlLmNvbXBhcmVEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIHBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1lZGlhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWRpYW5cbn07XG5leHBvcnRzLm1lZGlhbkRlcGVuZGVuY2llcyA9IG1lZGlhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWluRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1pbkRlcGVuZGVuY2llcyA9IHtcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWluOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblxufTtcbmV4cG9ydHMubWluRGVwZW5kZW5jaWVzID0gbWluRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWluVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBzbWFsbGVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlci5zbWFsbGVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNaW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWluVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBtaW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vZERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNb2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kXG59O1xuZXhwb3J0cy5tb2REZXBlbmRlbmNpZXMgPSBtb2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kZVxufTtcbmV4cG9ydHMubW9kZURlcGVuZGVuY2llcyA9IG1vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTW9sYXJNYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzc1xufTtcbmV4cG9ydHMubW9sYXJNYXNzRGVwZW5kZW5jaWVzID0gbW9sYXJNYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NDMTJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyTWFzc0MxMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhck1hc3NDMTJcbn07XG5leHBvcnRzLm1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcyA9IG1vbGFyTWFzc0MxMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudFxufTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IG1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyVm9sdW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyVm9sdW1lXG59O1xuZXhwb3J0cy5tb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IG1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmFjdG9yaWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpbm9taWFsRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc1Bvc2l0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZS5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aW5vbWlhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aW5vbWlhbFxufTtcbmV4cG9ydHMubXVsdGlub21pYWxEZXBlbmRlbmNpZXMgPSBtdWx0aW5vbWlhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU11bHRpcGx5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5XG59O1xuZXhwb3J0cy5tdWx0aXBseURlcGVuZGVuY2llcyA9IG11bHRpcGx5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aXBseVNjYWxhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aXBseVNjYWxhclxufTtcbmV4cG9ydHMubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMgPSBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTmFORGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTmFORGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5hTjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOYU5cbn07XG5leHBvcnRzLk5hTkRlcGVuZGVuY2llcyA9IE5hTkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubmV1dHJvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTmV1dHJvbk1hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTmV1dHJvbk1hc3Ncbn07XG5leHBvcnRzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0gbmV1dHJvbk1hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vZGVcbn07XG5leHBvcnRzLk5vZGVEZXBlbmRlbmNpZXMgPSBOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5vcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbmpEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5vcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTm9ybVxufTtcbmV4cG9ydHMubm9ybURlcGVuZGVuY2llcyA9IG5vcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5vdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTm90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vdFxufTtcbmV4cG9ydHMubm90RGVwZW5kZW5jaWVzID0gbm90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBudGhSb290RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU50aFJvb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnRoUm9vdFxufTtcbmV4cG9ydHMubnRoUm9vdERlcGVuZGVuY2llcyA9IG50aFJvb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm50aFJvb3RzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG50aFJvb3RzRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU50aFJvb3RzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3RzXG59O1xuZXhwb3J0cy5udGhSb290c0RlcGVuZGVuY2llcyA9IG50aFJvb3RzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51Y2xlYXJNYWduZXRvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOdWNsZWFyTWFnbmV0b25cbn07XG5leHBvcnRzLm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcyA9IG51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVsbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bGxEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZU51bGw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVsbFxufTtcbmV4cG9ydHMubnVsbERlcGVuZGVuY2llcyA9IG51bGxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWJlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bWJlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTnVtYmVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bWJlclxufTtcbmV4cG9ydHMubnVtYmVyRGVwZW5kZW5jaWVzID0gbnVtYmVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udW1lcmljRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bWVyaWNEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIG51bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51bWVyaWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtZXJpY1xufTtcbmV4cG9ydHMubnVtZXJpY0RlcGVuZGVuY2llcyA9IG51bWVyaWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk9iamVjdE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgT2JqZWN0Tm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlT2JqZWN0Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVPYmplY3ROb2RlXG59O1xuZXhwb3J0cy5PYmplY3ROb2RlRGVwZW5kZW5jaWVzID0gT2JqZWN0Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub25lc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgb25lc0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVPbmVzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU9uZXNcbn07XG5leHBvcnRzLm9uZXNEZXBlbmRlbmNpZXMgPSBvbmVzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVPcGVyYXRvck5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT3BlcmF0b3JOb2RlXG59O1xuZXhwb3J0cy5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMgPSBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm9yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgb3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlT3I6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT3Jcbn07XG5leHBvcnRzLm9yRGVwZW5kZW5jaWVzID0gb3JEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBhcmVudGhlc2lzTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJlbnRoZXNpc05vZGVcbn07XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyA9IFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGFyc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fzc2lnbm1lbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Jsb2NrTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09iamVjdE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwYXJzZURlcGVuZGVuY2llcyA9IHtcbiAgQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyxcbiAgQXJyYXlOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXJyYXlOb2RlLkFycmF5Tm9kZURlcGVuZGVuY2llcyxcbiAgQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyxcbiAgQmxvY2tOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmxvY2tOb2RlLkJsb2NrTm9kZURlcGVuZGVuY2llcyxcbiAgQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLkNvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyxcbiAgQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyxcbiAgSW5kZXhOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhOb2RlLkluZGV4Tm9kZURlcGVuZGVuY2llcyxcbiAgT2JqZWN0Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09iamVjdE5vZGUuT2JqZWN0Tm9kZURlcGVuZGVuY2llcyxcbiAgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLk9wZXJhdG9yTm9kZURlcGVuZGVuY2llcyxcbiAgUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyxcbiAgUmFuZ2VOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLlJhbmdlTm9kZURlcGVuZGVuY2llcyxcbiAgUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSZWxhdGlvbmFsTm9kZS5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyxcbiAgU3ltYm9sTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuU3ltYm9sTm9kZURlcGVuZGVuY2llcyxcbiAgbnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWVyaWMubnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2Vcbn07XG5leHBvcnRzLnBhcnNlRGVwZW5kZW5jaWVzID0gcGFyc2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBhcnNlckRlcGVuZGVuY2llcyA9IHtcbiAgUGFyc2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuUGFyc2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJzZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyXG59O1xuZXhwb3J0cy5wYXJzZXJEZXBlbmRlbmNpZXMgPSBwYXJzZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcnNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFBhcnNlckRlcGVuZGVuY2llcyA9IHtcbiAgcGFyc2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJzZS5wYXJzZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2VyQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyQ2xhc3Ncbn07XG5leHBvcnRzLlBhcnNlckRlcGVuZGVuY2llcyA9IFBhcnNlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0ge1xuICBjb21wYXJlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzLFxuICBpc05hTkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJ0aXRpb25TZWxlY3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFydGl0aW9uU2VsZWN0XG59O1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMgPSBwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBlcm11dGF0aW9uc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGVybXV0YXRpb25zRGVwZW5kZW5jaWVzID0ge1xuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQZXJtdXRhdGlvbnM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGVybXV0YXRpb25zXG59O1xuZXhwb3J0cy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXMgPSBwZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBoaURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBoaURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQaGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGhpXG59O1xuZXhwb3J0cy5waGlEZXBlbmRlbmNpZXMgPSBwaGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGlEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGlcbn07XG5leHBvcnRzLnBpRGVwZW5kZW5jaWVzID0gcGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpY2tSYW5kb21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwaWNrUmFuZG9tRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQaWNrUmFuZG9tOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpY2tSYW5kb21cbn07XG5leHBvcnRzLnBpY2tSYW5kb21EZXBlbmRlbmNpZXMgPSBwaWNrUmFuZG9tRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0NoYXJnZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBsYW5ja0NoYXJnZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDaGFyZ2Vcbn07XG5leHBvcnRzLnBsYW5ja0NoYXJnZURlcGVuZGVuY2llcyA9IHBsYW5ja0NoYXJnZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrQ29uc3RhbnRcbn07XG5leHBvcnRzLnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gcGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrTGVuZ3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0xlbmd0aFxufTtcbmV4cG9ydHMucGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzID0gcGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrTWFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tNYXNzXG59O1xuZXhwb3J0cy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0gcGxhbmNrTWFzc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmVcbn07XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0gcGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQbGFuY2tUaW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja1RpbWVcbn07XG5leHBvcnRzLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSBwbGFuY2tUaW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wb3dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwb3dEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtYmVyLm51bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUG93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBvd1xufTtcbmV4cG9ydHMucG93RGVwZW5kZW5jaWVzID0gcG93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcmludERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByaW50RGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcmludDogX2ZhY3Rvcmllc0FueS5jcmVhdGVQcmludFxufTtcbmV4cG9ydHMucHJpbnREZXBlbmRlbmNpZXMgPSBwcmludERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByb2REZXBlbmRlbmNpZXMgPSB7XG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVByb2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUHJvZFxufTtcbmV4cG9ydHMucHJvZERlcGVuZGVuY2llcyA9IHByb2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcm90b25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb3Rvbk1hc3Ncbn07XG5leHBvcnRzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSBwcm90b25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5xckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2lnbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxckRlcGVuZGVuY2llcyA9IHtcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgY29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcyxcbiAgY29uakRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmouY29uakRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgaXNaZXJvRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNaZXJvLmlzWmVyb0RlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc2lnbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpZ24uc2lnbkRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlUXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUXJcbn07XG5leHBvcnRzLnFyRGVwZW5kZW5jaWVzID0gcXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxdWFudGlsZVNlcURlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0LnBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUXVhbnRpbGVTZXE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnRpbGVTZXFcbn07XG5leHBvcnRzLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzID0gcXVhbnRpbGVTZXFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uXG59O1xuZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYW5kb21EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmRvbTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb21cbn07XG5leHBvcnRzLnJhbmRvbURlcGVuZGVuY2llcyA9IHJhbmRvbURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tSW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZG9tSW50RGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYW5kb21JbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZG9tSW50XG59O1xuZXhwb3J0cy5yYW5kb21JbnREZXBlbmRlbmNpZXMgPSByYW5kb21JbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmdlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJFcURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXJFcS5zbWFsbGVyRXFEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlXG59O1xuZXhwb3J0cy5yYW5nZURlcGVuZGVuY2llcyA9IHJhbmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SYW5nZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJhbmdlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVSYW5nZUNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlQ2xhc3Ncbn07XG5leHBvcnRzLlJhbmdlRGVwZW5kZW5jaWVzID0gUmFuZ2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlJhbmdlTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSYW5nZU5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZU5vZGVcbn07XG5leHBvcnRzLlJhbmdlTm9kZURlcGVuZGVuY2llcyA9IFJhbmdlTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgYmlnbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmJpZ251bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXJFcS5sYXJnZXJFcURlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlckVxLnNtYWxsZXJFcURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmFuZ2VUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnJhbmdlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gcmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzLFxuICBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzLFxuICBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzLFxuICBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpc1plcm9EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1plcm8uaXNaZXJvRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICBzaW1wbGlmeURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYXRpb25hbGl6ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYXRpb25hbGl6ZVxufTtcbmV4cG9ydHMucmF0aW9uYWxpemVEZXBlbmRlbmNpZXMgPSByYXRpb25hbGl6ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVcbn07XG5leHBvcnRzLnJlRGVwZW5kZW5jaWVzID0gcmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudFxufTtcbmV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gcmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVsYXRpb25hbE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVsYXRpb25hbE5vZGVcbn07XG5leHBvcnRzLlJlbGF0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlcGxhY2VyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVwbGFjZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZVJlcGxhY2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlcGxhY2VyXG59O1xuZXhwb3J0cy5yZXBsYWNlckRlcGVuZGVuY2llcyA9IHJlcGxhY2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNoYXBlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJlc2hhcGVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJlc2hhcGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaGFwZVxufTtcbmV4cG9ydHMucmVzaGFwZURlcGVuZGVuY2llcyA9IHJlc2hhcGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlc2l6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVzaXplRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSZXNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaXplXG59O1xuZXhwb3J0cy5yZXNpemVEZXBlbmRlbmNpZXMgPSByZXNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlJlc3VsdFNldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJlc3VsdFNldERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmVzdWx0U2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc3VsdFNldFxufTtcbmV4cG9ydHMuUmVzdWx0U2V0RGVwZW5kZW5jaWVzID0gUmVzdWx0U2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXZpdmVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmV2aXZlckRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmV2aXZlcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXZpdmVyXG59O1xuZXhwb3J0cy5yZXZpdmVyRGVwZW5kZW5jaWVzID0gcmV2aXZlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1plcm9zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzWmVyb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodEFyaXRoU2hpZnRcbn07XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llcyA9IHJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmlnaHRMb2dTaGlmdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodExvZ1NoaWZ0XG59O1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RGVwZW5kZW5jaWVzID0gcmlnaHRMb2dTaGlmdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm91bmREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3VuZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJvdW5kOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvdW5kXG59O1xuZXhwb3J0cy5yb3VuZERlcGVuZGVuY2llcyA9IHJvdW5kRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3dEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUm93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvd1xufTtcbmV4cG9ydHMucm93RGVwZW5kZW5jaWVzID0gcm93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3dUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUm93VHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvd1RyYW5zZm9ybVxufTtcbmV4cG9ydHMucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gcm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yeWRiZXJnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByeWRiZXJnRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUnlkYmVyZzogX2ZhY3Rvcmllc0FueS5jcmVhdGVSeWRiZXJnXG59O1xuZXhwb3J0cy5yeWRiZXJnRGVwZW5kZW5jaWVzID0gcnlkYmVyZ0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDFfMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbnZhciBTUVJUMV8yRGVwZW5kZW5jaWVzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNRUlQxXzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDFfMlxufTtcbmV4cG9ydHMuU1FSVDFfMkRlcGVuZGVuY2llcyA9IFNRUlQxXzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNRUlQyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgU1FSVDJEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlU1FSVDI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDJcbn07XG5leHBvcnRzLlNRUlQyRGVwZW5kZW5jaWVzID0gU1FSVDJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNhY2t1clRldHJvZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2Fja3VyVGV0cm9kZVxufTtcbmV4cG9ydHMuc2Fja3VyVGV0cm9kZURlcGVuZGVuY2llcyA9IHNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNlY0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjXG59O1xuZXhwb3J0cy5zZWNEZXBlbmRlbmNpZXMgPSBzZWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZWNoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNlY2g6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjaFxufTtcbmV4cG9ydHMuc2VjaERlcGVuZGVuY2llcyA9IHNlY2hEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2Vjb25kUmFkaWF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY29uZFJhZGlhdGlvblxufTtcbmV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldENhcnRlc2lhbkRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldENhcnRlc2lhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRDYXJ0ZXNpYW5cbn07XG5leHBvcnRzLnNldENhcnRlc2lhbkRlcGVuZGVuY2llcyA9IHNldENhcnRlc2lhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldERpZmZlcmVuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0RGlmZmVyZW5jZVxufTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldERpc3RpbmN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldERpc3RpbmN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldERpc3RpbmN0XG59O1xuZXhwb3J0cy5zZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHNldERpc3RpbmN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldEludGVyc2VjdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldEludGVyc2VjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJbnRlcnNlY3Rcbn07XG5leHBvcnRzLnNldEludGVyc2VjdERlcGVuZGVuY2llcyA9IHNldEludGVyc2VjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0SXNTdWJzZXREZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0SXNTdWJzZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0SXNTdWJzZXRcbn07XG5leHBvcnRzLnNldElzU3Vic2V0RGVwZW5kZW5jaWVzID0gc2V0SXNTdWJzZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldE11bHRpcGxpY2l0eURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0TXVsdGlwbGljaXR5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldE11bHRpcGxpY2l0eVxufTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzID0gc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRQb3dlcnNldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRQb3dlcnNldERlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRQb3dlcnNldDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRQb3dlcnNldFxufTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREZXBlbmRlbmNpZXMgPSBzZXRQb3dlcnNldERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U2l6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFNpemVEZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldFNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0U2l6ZVxufTtcbmV4cG9ydHMuc2V0U2l6ZURlcGVuZGVuY2llcyA9IHNldFNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbmNhdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0U3ltRGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb25jYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25jYXQuY29uY2F0RGVwZW5kZW5jaWVzLFxuICBzZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZS5zZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFN5bURpZmZlcmVuY2Vcbn07XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSBzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRVbmlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uY2F0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uY2F0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFVuaW9uRGVwZW5kZW5jaWVzID0ge1xuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbmNhdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmNhdC5jb25jYXREZXBlbmRlbmNpZXMsXG4gIHNldEludGVyc2VjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NldEludGVyc2VjdC5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMsXG4gIHNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldFVuaW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFVuaW9uXG59O1xuZXhwb3J0cy5zZXRVbmlvbkRlcGVuZGVuY2llcyA9IHNldFVuaW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaWduRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaWduRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIEZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgY29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2lnbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaWduXG59O1xuZXhwb3J0cy5zaWduRGVwZW5kZW5jaWVzID0gc2lnbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNaZXJvID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNaZXJvLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbXBsaWZ5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpbXBsaWZ5XG59O1xuZXhwb3J0cy5zaW1wbGlmeURlcGVuZGVuY2llcyA9IHNpbXBsaWZ5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW5cbn07XG5leHBvcnRzLnNpbkRlcGVuZGVuY2llcyA9IHNpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpbmhEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbmg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2luaFxufTtcbmV4cG9ydHMuc2luaERlcGVuZGVuY2llcyA9IHNpbmhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpemVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2l6ZVxufTtcbmV4cG9ydHMuc2l6ZURlcGVuZGVuY2llcyA9IHNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNsdURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzbHVEZXBlbmRlbmNpZXMgPSB7XG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXJFcS5sYXJnZXJFcURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHJhbnNwb3NlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2x1OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNsdVxufTtcbmV4cG9ydHMuc2x1RGVwZW5kZW5jaWVzID0gc2x1RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc21hbGxlckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTbWFsbGVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJcbn07XG5leHBvcnRzLnNtYWxsZXJEZXBlbmRlbmNpZXMgPSBzbWFsbGVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRXFEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzbWFsbGVyRXFEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU21hbGxlckVxOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJFcVxufTtcbmV4cG9ydHMuc21hbGxlckVxRGVwZW5kZW5jaWVzID0gc21hbGxlckVxRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc29ydERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU29ydDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTb3J0XG59O1xuZXhwb3J0cy5zb3J0RGVwZW5kZW5jaWVzID0gc29ydERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3BhRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFNwYURlcGVuZGVuY2llcyA9IHtcbiAgRmlib25hY2NpSGVhcERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcGFDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFDbGFzc1xufTtcbmV4cG9ydHMuU3BhRGVwZW5kZW5jaWVzID0gU3BhRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGFyc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGFyc2VEZXBlbmRlbmNpZXMgPSB7XG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhcnNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZVxufTtcbmV4cG9ydHMuc3BhcnNlRGVwZW5kZW5jaWVzID0gc3BhcnNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIE1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyA9IFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3BlZWRPZkxpZ2h0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcGVlZE9mTGlnaHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BlZWRPZkxpZ2h0XG59O1xuZXhwb3J0cy5zcGVlZE9mTGlnaHREZXBlbmRlbmNpZXMgPSBzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BsaXRVbml0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwbGl0VW5pdFxufTtcbmV4cG9ydHMuc3BsaXRVbml0RGVwZW5kZW5jaWVzID0gc3BsaXRVbml0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcXJ0RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNxcnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydFxufTtcbmV4cG9ydHMuc3FydERlcGVuZGVuY2llcyA9IHNxcnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxcnRtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbnYgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbnYuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01heC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxcnRtRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBpZGVudGl0eURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lkZW50aXR5LmlkZW50aXR5RGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtYXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXgubWF4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzcXJ0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3FydC5zcXJ0RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXJ0bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcXJ0bVxufTtcbmV4cG9ydHMuc3FydG1EZXBlbmRlbmNpZXMgPSBzcXJ0bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3F1YXJlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3F1YXJlRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXVhcmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1YXJlXG59O1xuZXhwb3J0cy5zcXVhcmVEZXBlbmRlbmNpZXMgPSBzcXVhcmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWVlemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxdWVlemVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNxdWVlemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1ZWV6ZVxufTtcbmV4cG9ydHMuc3F1ZWV6ZURlcGVuZGVuY2llcyA9IHNxdWVlemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0ZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNWYXJpYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdGREZXBlbmRlbmNpZXMgPSB7XG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHZhcmlhbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVmFyaWFuY2UudmFyaWFuY2VEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRcbn07XG5leHBvcnRzLnN0ZERlcGVuZGVuY2llcyA9IHN0ZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNWYXJpYW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0ZFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdmFyaWFuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNWYXJpYW5jZS52YXJpYW5jZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3RkVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0ZFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGVmYW5Cb2x0em1hbm5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZWZhbkJvbHR6bWFubjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGVmYW5Cb2x0em1hbm5cbn07XG5leHBvcnRzLnN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0aXJsaW5nUzJEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGZhY3RvcmlhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5mYWN0b3JpYWxEZXBlbmRlbmNpZXMsXG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0aXJsaW5nUzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RpcmxpbmdTMlxufTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRlcGVuZGVuY2llcyA9IHN0aXJsaW5nUzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0cmluZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0cmluZ0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3RyaW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0cmluZ1xufTtcbmV4cG9ydHMuc3RyaW5nRGVwZW5kZW5jaWVzID0gc3RyaW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnNldERlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3Vic2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFxufTtcbmV4cG9ydHMuc3Vic2V0RGVwZW5kZW5jaWVzID0gc3Vic2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJzZXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3Vic2V0VHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJ0cmFjdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnRyYWN0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1YnRyYWN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnRyYWN0XG59O1xuZXhwb3J0cy5zdWJ0cmFjdERlcGVuZGVuY2llcyA9IHN1YnRyYWN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3VtRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTdW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtXG59O1xuZXhwb3J0cy5zdW1EZXBlbmRlbmNpZXMgPSBzdW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdW1UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1bVRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdW1UcmFuc2Zvcm1cbn07XG5leHBvcnRzLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHN1bVRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3ltYm9sTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3ltYm9sTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTeW1ib2xOb2RlXG59O1xuZXhwb3J0cy5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzID0gU3ltYm9sTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdGFuRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlVGFuXG59O1xuZXhwb3J0cy50YW5EZXBlbmRlbmNpZXMgPSB0YW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbmhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0YW5oRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUYW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhbmhcbn07XG5leHBvcnRzLnRhbmhEZXBlbmRlbmNpZXMgPSB0YW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YXVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0YXVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGF1OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhdVxufTtcbmV4cG9ydHMudGF1RGVwZW5kZW5jaWVzID0gdGF1RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uXG59O1xuZXhwb3J0cy50aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0gdGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRvRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUbzogX2ZhY3Rvcmllc0FueS5jcmVhdGVUb1xufTtcbmV4cG9ydHMudG9EZXBlbmRlbmNpZXMgPSB0b0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHJhY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHJhY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVRyYWNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRyYWNlXG59O1xuZXhwb3J0cy50cmFjZURlcGVuZGVuY2llcyA9IHRyYWNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFuc3Bvc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRyYW5zcG9zZURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVHJhbnNwb3NlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRyYW5zcG9zZVxufTtcbmV4cG9ydHMudHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdHJhbnNwb3NlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cnVlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHJ1ZURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlVHJ1ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVUcnVlXG59O1xuZXhwb3J0cy50cnVlRGVwZW5kZW5jaWVzID0gdHJ1ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZU9mRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHlwZU9mRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUeXBlT2Y6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVHlwZU9mXG59O1xuZXhwb3J0cy50eXBlT2ZEZXBlbmRlbmNpZXMgPSB0eXBlT2ZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHR5cGVkRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVR5cGVkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVkXG59O1xuZXhwb3J0cy50eXBlZERlcGVuZGVuY2llcyA9IHR5cGVkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5hcnlNaW51c0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5hcnlNaW51czogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmFyeU1pbnVzXG59O1xuZXhwb3J0cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzID0gdW5hcnlNaW51c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5hcnlQbHVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5hcnlQbHVzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVVuYXJ5UGx1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmFyeVBsdXNcbn07XG5leHBvcnRzLnVuYXJ5UGx1c0RlcGVuZGVuY2llcyA9IHVuYXJ5UGx1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5lcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHVuZXF1YWxEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5lcXVhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmVxdWFsXG59O1xuZXhwb3J0cy51bmVxdWFsRGVwZW5kZW5jaWVzID0gdW5lcXVhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zvcm1hdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm91bmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBVbml0RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBmaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGaXguZml4RGVwZW5kZW5jaWVzLFxuICBmb3JtYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGb3JtYXQuZm9ybWF0RGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1iZXIubnVtYmVyRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbml0Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5pdENsYXNzXG59O1xuZXhwb3J0cy5Vbml0RGVwZW5kZW5jaWVzID0gVW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5pdERlcGVuZGVuY2llcyA9IHtcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbml0RnVuY3Rpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5pdEZ1bmN0aW9uXG59O1xuZXhwb3J0cy51bml0RGVwZW5kZW5jaWVzID0gdW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBFRGVwZW5kZW5jaWVzID0ge1xuICBlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRS5lRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVcHBlcmNhc2VFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVwcGVyY2FzZUVcbn07XG5leHBvcnRzLkVEZXBlbmRlbmNpZXMgPSBFRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QSURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQaSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFBJRGVwZW5kZW5jaWVzID0ge1xuICBwaURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BpLnBpRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVcHBlcmNhc2VQaTogX2ZhY3Rvcmllc0FueS5jcmVhdGVVcHBlcmNhc2VQaVxufTtcbmV4cG9ydHMuUElEZXBlbmRlbmNpZXMgPSBQSURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudXNvbHZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB1c29sdmVEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVXNvbHZlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVzb2x2ZVxufTtcbmV4cG9ydHMudXNvbHZlRGVwZW5kZW5jaWVzID0gdXNvbHZlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhY3V1bUltcGVkYW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVWYWN1dW1JbXBlZGFuY2Vcbn07XG5leHBvcnRzLnZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llcyA9IHZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFwcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXBwbHkuYXBwbHlEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhcmlhbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlXG59O1xuZXhwb3J0cy52YXJpYW5jZURlcGVuZGVuY2llcyA9IHZhcmlhbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FwcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXBwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgYXBwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBcHBseS5hcHBseURlcGVuZGVuY2llcyxcbiAgZGl2aWRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlLmRpdmlkZURlcGVuZGVuY2llcyxcbiAgaXNOYU5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05hTi5pc05hTkRlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnZhcmlhbmNlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnZlcnNpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2ZXJzaW9uRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVWZXJzaW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZlcnNpb25cbn07XG5leHBvcnRzLnZlcnNpb25EZXBlbmRlbmNpZXMgPSB2ZXJzaW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53ZWFrTWl4aW5nQW5nbGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB3ZWFrTWl4aW5nQW5nbGVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlV2Vha01peGluZ0FuZ2xlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVdlYWtNaXhpbmdBbmdsZVxufTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzID0gd2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB3aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlV2llbkRpc3BsYWNlbWVudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVXaWVuRGlzcGxhY2VtZW50XG59O1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0gd2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMueGdjZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgeGdjZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVYZ2NkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVhnY2Rcbn07XG5leHBvcnRzLnhnY2REZXBlbmRlbmNpZXMgPSB4Z2NkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy54b3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB4b3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVhvclxufTtcbmV4cG9ydHMueG9yRGVwZW5kZW5jaWVzID0geG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy56ZXJvc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgemVyb3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWmVyb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlWmVyb3Ncbn07XG5leHBvcnRzLnplcm9zRGVwZW5kZW5jaWVzID0gemVyb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVycm9yID0gZXhwb3J0cy5qc29uID0gZXhwb3J0cy5leHByZXNzaW9uID0gZXhwb3J0cy50eXBlID0gZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mID0gZXhwb3J0cy5kZXByZWNhdGVkVmFyID0gZXhwb3J0cy5kZXByZWNhdGVkSW1wb3J0ID0gZXhwb3J0cy5kZXByZWNhdGVkRXZhbCA9IHZvaWQgMDtcblxudmFyIF9ldmFsID0gcmVxdWlyZShcIi4uL2V4cHJlc3Npb24vZnVuY3Rpb24vZXZhbFwiKTtcblxudmFyIF9kZXByZWNhdGVkSW1wb3J0ID0gcmVxdWlyZShcIi4uL2NvcmUvZnVuY3Rpb24vZGVwcmVjYXRlZEltcG9ydFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgX3R5cGVPZiA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4uL3V0aWxzL2xvZ1wiKTtcblxudmFyIF9wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vcHVyZUZ1bmN0aW9uc0FueS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfaW1wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vaW1wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE5LTA0LTE0XG4vLyBcImRlcHJlY2F0ZWRFdmFsXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwiZXZhbFwiIGluIHRoZSBjb2RlIGNvbXBpbGVkIHRvIEVTNStDb21tb25Kc1xudmFyIGRlcHJlY2F0ZWRFdmFsID0gLyogI19fUFVSRV9fICovKDAsIF9ldmFsLmNyZWF0ZURlcHJlY2F0ZWRFdmFsKSh7XG4gIGV2YWx1YXRlOiBfaW1wdXJlRnVuY3Rpb25zQW55LmV2YWx1YXRlXG59KTsgLy8gXCJkZXByZWNhdGVkSW1wb3J0XCIgaXMgYWxzbyBleHBvc2VkIGFzIFwiaW1wb3J0XCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZEV2YWwgPSBkZXByZWNhdGVkRXZhbDtcbnZhciBkZXByZWNhdGVkSW1wb3J0ID0gLyogI19fUFVSRV9fICovKDAsIF9kZXByZWNhdGVkSW1wb3J0LmNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQpKHt9KTsgLy8gXCJkZXByZWNhdGVkVmFyXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwidmFyXCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZEltcG9ydCA9IGRlcHJlY2F0ZWRJbXBvcnQ7XG52YXIgZGVwcmVjYXRlZFZhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfdmFyaWFuY2UuY3JlYXRlRGVwcmVjYXRlZFZhcikoe1xuICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2Vcbn0pOyAvLyBcImRlcHJlY2F0ZWRUeXBlb2ZcIiBpcyBhbHNvIGV4cG9zZWQgYXMgXCJ0eXBlb2ZcIiBpbiB0aGUgY29kZSBjb21waWxlZCB0byBFUzUrQ29tbW9uSnNcblxuZXhwb3J0cy5kZXByZWNhdGVkVmFyID0gZGVwcmVjYXRlZFZhcjtcbnZhciBkZXByZWNhdGVkVHlwZW9mID0gLyogI19fUFVSRV9fICovKDAsIF90eXBlT2YuY3JlYXRlRGVwcmVjYXRlZFR5cGVvZikoe1xuICB0eXBlT2Y6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVPZlxufSk7XG5leHBvcnRzLmRlcHJlY2F0ZWRUeXBlb2YgPSBkZXByZWNhdGVkVHlwZW9mO1xudmFyIHR5cGUgPSAvKiAjX19QVVJFX18gKi9jcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygndHlwZScsIHtcbiAgaXNOdW1iZXI6IF9pcy5pc051bWJlcixcbiAgaXNDb21wbGV4OiBfaXMuaXNDb21wbGV4LFxuICBpc0JpZ051bWJlcjogX2lzLmlzQmlnTnVtYmVyLFxuICBpc0ZyYWN0aW9uOiBfaXMuaXNGcmFjdGlvbixcbiAgaXNVbml0OiBfaXMuaXNVbml0LFxuICBpc1N0cmluZzogX2lzLmlzU3RyaW5nLFxuICBpc0FycmF5OiBfaXMuaXNBcnJheSxcbiAgaXNNYXRyaXg6IF9pcy5pc01hdHJpeCxcbiAgaXNDb2xsZWN0aW9uOiBfaXMuaXNDb2xsZWN0aW9uLFxuICBpc0RlbnNlTWF0cml4OiBfaXMuaXNEZW5zZU1hdHJpeCxcbiAgaXNTcGFyc2VNYXRyaXg6IF9pcy5pc1NwYXJzZU1hdHJpeCxcbiAgaXNSYW5nZTogX2lzLmlzUmFuZ2UsXG4gIGlzSW5kZXg6IF9pcy5pc0luZGV4LFxuICBpc0Jvb2xlYW46IF9pcy5pc0Jvb2xlYW4sXG4gIGlzUmVzdWx0U2V0OiBfaXMuaXNSZXN1bHRTZXQsXG4gIGlzSGVscDogX2lzLmlzSGVscCxcbiAgaXNGdW5jdGlvbjogX2lzLmlzRnVuY3Rpb24sXG4gIGlzRGF0ZTogX2lzLmlzRGF0ZSxcbiAgaXNSZWdFeHA6IF9pcy5pc1JlZ0V4cCxcbiAgaXNPYmplY3Q6IF9pcy5pc09iamVjdCxcbiAgaXNOdWxsOiBfaXMuaXNOdWxsLFxuICBpc1VuZGVmaW5lZDogX2lzLmlzVW5kZWZpbmVkLFxuICBpc0FjY2Vzc29yTm9kZTogX2lzLmlzQWNjZXNzb3JOb2RlLFxuICBpc0FycmF5Tm9kZTogX2lzLmlzQXJyYXlOb2RlLFxuICBpc0Fzc2lnbm1lbnROb2RlOiBfaXMuaXNBc3NpZ25tZW50Tm9kZSxcbiAgaXNCbG9ja05vZGU6IF9pcy5pc0Jsb2NrTm9kZSxcbiAgaXNDb25kaXRpb25hbE5vZGU6IF9pcy5pc0NvbmRpdGlvbmFsTm9kZSxcbiAgaXNDb25zdGFudE5vZGU6IF9pcy5pc0NvbnN0YW50Tm9kZSxcbiAgaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICBpc0Z1bmN0aW9uTm9kZTogX2lzLmlzRnVuY3Rpb25Ob2RlLFxuICBpc0luZGV4Tm9kZTogX2lzLmlzSW5kZXhOb2RlLFxuICBpc05vZGU6IF9pcy5pc05vZGUsXG4gIGlzT2JqZWN0Tm9kZTogX2lzLmlzT2JqZWN0Tm9kZSxcbiAgaXNPcGVyYXRvck5vZGU6IF9pcy5pc09wZXJhdG9yTm9kZSxcbiAgaXNQYXJlbnRoZXNpc05vZGU6IF9pcy5pc1BhcmVudGhlc2lzTm9kZSxcbiAgaXNSYW5nZU5vZGU6IF9pcy5pc1JhbmdlTm9kZSxcbiAgaXNTeW1ib2xOb2RlOiBfaXMuaXNTeW1ib2xOb2RlLFxuICBpc0NoYWluOiBfaXMuaXNDaGFpbixcbiAgQmlnTnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5CaWdOdW1iZXIsXG4gIENoYWluOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNoYWluLFxuICBDb21wbGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5Db21wbGV4LFxuICBGcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuRnJhY3Rpb24sXG4gIE1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuTWF0cml4LFxuICBEZW5zZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuRGVuc2VNYXRyaXgsXG4gIFNwYXJzZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuU3BhcnNlTWF0cml4LFxuICBTcGE6IF9wdXJlRnVuY3Rpb25zQW55LlNwYSxcbiAgRmlib25hY2NpSGVhcDogX3B1cmVGdW5jdGlvbnNBbnkuRmlib25hY2NpSGVhcCxcbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55LkltbXV0YWJsZURlbnNlTWF0cml4LFxuICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gIFJhbmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5SYW5nZSxcbiAgUmVzdWx0U2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5SZXN1bHRTZXQsXG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIEhlbHA6IF9pbXB1cmVGdW5jdGlvbnNBbnkuSGVscCxcbiAgUGFyc2VyOiBfaW1wdXJlRnVuY3Rpb25zQW55LlBhcnNlclxufSk7XG5leHBvcnRzLnR5cGUgPSB0eXBlO1xudmFyIGV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi9jcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygnZXhwcmVzc2lvbicsIHtcbiAgcGFyc2U6IF9pbXB1cmVGdW5jdGlvbnNBbnkucGFyc2UsXG4gIFBhcnNlcjogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJzZXIsXG4gIG5vZGU6IGNyZWF0ZURlcHJlY2F0ZWRQcm9wZXJ0aWVzKCdleHByZXNzaW9uLm5vZGUnLCB7XG4gICAgQWNjZXNzb3JOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFjY2Vzc29yTm9kZSxcbiAgICBBcnJheU5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQXJyYXlOb2RlLFxuICAgIEFzc2lnbm1lbnROb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFzc2lnbm1lbnROb2RlLFxuICAgIEJsb2NrTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5CbG9ja05vZGUsXG4gICAgQ29uZGl0aW9uYWxOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNvbmRpdGlvbmFsTm9kZSxcbiAgICBDb25zdGFudE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQ29uc3RhbnROb2RlLFxuICAgIEluZGV4Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5JbmRleE5vZGUsXG4gICAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5GdW5jdGlvbk5vZGUsXG4gICAgTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5Ob2RlLFxuICAgIE9iamVjdE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuT2JqZWN0Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuT3BlcmF0b3JOb2RlLFxuICAgIFBhcmVudGhlc2lzTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJlbnRoZXNpc05vZGUsXG4gICAgUmFuZ2VOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LlJhbmdlTm9kZSxcbiAgICBSZWxhdGlvbmFsTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5SZWxhdGlvbmFsTm9kZSxcbiAgICBTeW1ib2xOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LlN5bWJvbE5vZGVcbiAgfSlcbn0pO1xuZXhwb3J0cy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbnZhciBqc29uID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2pzb24nLCB7XG4gIHJldml2ZXI6IF9pbXB1cmVGdW5jdGlvbnNBbnkucmV2aXZlclxufSk7XG5leHBvcnRzLmpzb24gPSBqc29uO1xudmFyIGVycm9yID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2Vycm9yJywge1xuICBBcmd1bWVudHNFcnJvcjogX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yLFxuICBEaW1lbnNpb25FcnJvcjogX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yLFxuICBJbmRleEVycm9yOiBfSW5kZXhFcnJvci5JbmRleEVycm9yXG59KTtcbmV4cG9ydHMuZXJyb3IgPSBlcnJvcjtcblxuZnVuY3Rpb24gY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMocGF0aCwgcHJvcHMpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICgwLCBfb2JqZWN0LmxhenkpKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKFwibWF0aC5cIi5jb25jYXQocGF0aCwgXCIuXCIpLmNvbmNhdChuYW1lLCBcIiBpcyBtb3ZlZCB0byBtYXRoLlwiKS5jb25jYXQobmFtZSwgXCIgaW4gdjYuMC4wLiBcIikgKyAnUGxlYXNlIHVzZSB0aGUgbmV3IGxvY2F0aW9uIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gcHJvcHNbbmFtZV07XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZG9jc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZW1iZWRkZWREb2NzLmVtYmVkZGVkRG9jcztcbiAgfVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmUgPSBleHBvcnRzLmhlbHAgPSBleHBvcnRzLnJhdGlvbmFsaXplID0gZXhwb3J0cy5zaW1wbGlmeSA9IGV4cG9ydHMucGFyc2VyID0gZXhwb3J0cy5jb21waWxlID0gZXhwb3J0cy5IZWxwID0gZXhwb3J0cy5QYXJzZXIgPSBleHBvcnRzLmV2YWx1YXRlID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuRnVuY3Rpb25Ob2RlID0gZXhwb3J0cy5TeW1ib2xOb2RlID0gZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZSA9IGV4cG9ydHMuSW5kZXhOb2RlID0gZXhwb3J0cy5BY2Nlc3Nvck5vZGUgPSBleHBvcnRzLmNoYWluID0gZXhwb3J0cy5GdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gZXhwb3J0cy5SYW5nZU5vZGUgPSBleHBvcnRzLk9wZXJhdG9yTm9kZSA9IGV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlID0gZXhwb3J0cy5yZXZpdmVyID0gZXhwb3J0cy5DaGFpbiA9IGV4cG9ydHMuUmVsYXRpb25hbE5vZGUgPSBleHBvcnRzLlBhcmVudGhlc2lzTm9kZSA9IGV4cG9ydHMuT2JqZWN0Tm9kZSA9IGV4cG9ydHMuQ29uc3RhbnROb2RlID0gZXhwb3J0cy5CbG9ja05vZGUgPSBleHBvcnRzLkFycmF5Tm9kZSA9IGV4cG9ydHMuTm9kZSA9IHZvaWQgMDtcblxudmFyIF9jb25maWdSZWFkb25seSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1JlYWRvbmx5XCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2VtYmVkZGVkRG9jcyA9IHJlcXVpcmUoXCIuLi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9lbWJlZGRlZERvY3NcIik7XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbnZhciBtYXRoID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSB7fTsgLy8gTk9UIHB1cmUhXG5cbnZhciBjbGFzc2VzID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vZGUpKHtcbiAgbWF0aFdpdGhUcmFuc2Zvcm06IG1hdGhXaXRoVHJhbnNmb3JtXG59KTtcbmV4cG9ydHMuTm9kZSA9IE5vZGU7XG52YXIgQXJyYXlOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJyYXlOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5BcnJheU5vZGUgPSBBcnJheU5vZGU7XG52YXIgQmxvY2tOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmxvY2tOb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0XG59KTtcbmV4cG9ydHMuQmxvY2tOb2RlID0gQmxvY2tOb2RlO1xudmFyIENvbnN0YW50Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbnN0YW50Tm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuQ29uc3RhbnROb2RlID0gQ29uc3RhbnROb2RlO1xudmFyIE9iamVjdE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVPYmplY3ROb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5PYmplY3ROb2RlID0gT2JqZWN0Tm9kZTtcbnZhciBQYXJlbnRoZXNpc05vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJlbnRoZXNpc05vZGUpKHtcbiAgTm9kZTogTm9kZVxufSk7XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZSA9IFBhcmVudGhlc2lzTm9kZTtcbnZhciBSZWxhdGlvbmFsTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlbGF0aW9uYWxOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZSA9IFJlbGF0aW9uYWxOb2RlO1xudmFyIENoYWluID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2hhaW5DbGFzcykoe1xuICBtYXRoOiBtYXRoXG59KTtcbmV4cG9ydHMuQ2hhaW4gPSBDaGFpbjtcbnZhciByZXZpdmVyID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmV2aXZlcikoe1xuICBjbGFzc2VzOiBjbGFzc2VzXG59KTtcbmV4cG9ydHMucmV2aXZlciA9IHJldml2ZXI7XG52YXIgQ29uZGl0aW9uYWxOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uZGl0aW9uYWxOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5Db25kaXRpb25hbE5vZGUgPSBDb25kaXRpb25hbE5vZGU7XG52YXIgT3BlcmF0b3JOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlT3BlcmF0b3JOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvck5vZGUgPSBPcGVyYXRvck5vZGU7XG52YXIgUmFuZ2VOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5SYW5nZU5vZGUgPSBSYW5nZU5vZGU7XG52YXIgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IEZ1bmN0aW9uQXNzaWdubWVudE5vZGU7XG52YXIgY2hhaW4gPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpbikoe1xuICBDaGFpbjogQ2hhaW4sXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmNoYWluID0gY2hhaW47XG52YXIgQWNjZXNzb3JOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNjZXNzb3JOb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIHN1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc3Vic2V0XG59KTtcbmV4cG9ydHMuQWNjZXNzb3JOb2RlID0gQWNjZXNzb3JOb2RlO1xudmFyIEluZGV4Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4Tm9kZSkoe1xuICBOb2RlOiBOb2RlLFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIHNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnNpemVcbn0pO1xuZXhwb3J0cy5JbmRleE5vZGUgPSBJbmRleE5vZGU7XG52YXIgQXNzaWdubWVudE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBc3NpZ25tZW50Tm9kZSkoe1xuICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgTm9kZTogTm9kZSxcbiAgc3Vic2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJzZXRcbn0pO1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZSA9IEFzc2lnbm1lbnROb2RlO1xudmFyIFN5bWJvbE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTeW1ib2xOb2RlKSh7XG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIE5vZGU6IE5vZGUsXG4gIG1hdGg6IG1hdGhcbn0pO1xuZXhwb3J0cy5TeW1ib2xOb2RlID0gU3ltYm9sTm9kZTtcbnZhciBGdW5jdGlvbk5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGdW5jdGlvbk5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgbWF0aDogbWF0aFxufSk7XG5leHBvcnRzLkZ1bmN0aW9uTm9kZSA9IEZ1bmN0aW9uTm9kZTtcbnZhciBwYXJzZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlKSh7XG4gIEFjY2Vzc29yTm9kZTogQWNjZXNzb3JOb2RlLFxuICBBcnJheU5vZGU6IEFycmF5Tm9kZSxcbiAgQXNzaWdubWVudE5vZGU6IEFzc2lnbm1lbnROb2RlLFxuICBCbG9ja05vZGU6IEJsb2NrTm9kZSxcbiAgQ29uZGl0aW9uYWxOb2RlOiBDb25kaXRpb25hbE5vZGUsXG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgSW5kZXhOb2RlOiBJbmRleE5vZGUsXG4gIE9iamVjdE5vZGU6IE9iamVjdE5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgUmFuZ2VOb2RlOiBSYW5nZU5vZGUsXG4gIFJlbGF0aW9uYWxOb2RlOiBSZWxhdGlvbmFsTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBudW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5udW1lcmljLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xudmFyIGV2YWx1YXRlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXZhbHVhdGUpKHtcbiAgcGFyc2U6IHBhcnNlLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZSA9IGV2YWx1YXRlO1xudmFyIFBhcnNlciA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlckNsYXNzKSh7XG4gIHBhcnNlOiBwYXJzZVxufSk7XG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjtcbnZhciBIZWxwID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscENsYXNzKSh7XG4gIHBhcnNlOiBwYXJzZVxufSk7XG5leHBvcnRzLkhlbHAgPSBIZWxwO1xudmFyIGNvbXBpbGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21waWxlKSh7XG4gIHBhcnNlOiBwYXJzZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG52YXIgcGFyc2VyID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyKSh7XG4gIFBhcnNlcjogUGFyc2VyLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJzZXIgPSBwYXJzZXI7XG52YXIgc2ltcGxpZnkgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW1wbGlmeSkoe1xuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSxcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBwYXJzZTogcGFyc2UsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLnNpbXBsaWZ5ID0gc2ltcGxpZnk7XG52YXIgcmF0aW9uYWxpemUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYXRpb25hbGl6ZSkoe1xuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSxcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBwYXJzZTogcGFyc2UsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBzaW1wbGlmeTogc2ltcGxpZnksXG4gIHN1YnRyYWN0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJ0cmFjdCxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMucmF0aW9uYWxpemUgPSByYXRpb25hbGl6ZTtcbnZhciBoZWxwID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscCkoe1xuICBIZWxwOiBIZWxwLFxuICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmhlbHAgPSBoZWxwO1xudmFyIGRlcml2YXRpdmUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXJpdmF0aXZlKSh7XG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlLFxuICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG51bWVyaWM6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWVyaWMsXG4gIHBhcnNlOiBwYXJzZSxcbiAgc2ltcGxpZnk6IHNpbXBsaWZ5LFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5kZXJpdmF0aXZlID0gZGVyaXZhdGl2ZTtcblxuX2V4dGVuZHMobWF0aCwge1xuICAndHlwZW9mJzogX3B1cmVGdW5jdGlvbnNBbnkudHlwZU9mLFxuICBleWU6IF9wdXJlRnVuY3Rpb25zQW55LmV5ZSxcbiAgcmV2aXZlcjogcmV2aXZlcixcbiAgXCJmYWxzZVwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fZmFsc2UsXG4gIFwibnVsbFwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fbnVsbCxcbiAgXCJ0cnVlXCI6IF9wdXJlRnVuY3Rpb25zQW55Ll90cnVlLFxuICByZXBsYWNlcjogX3B1cmVGdW5jdGlvbnNBbnkucmVwbGFjZXIsXG4gIGk6IF9wdXJlRnVuY3Rpb25zQW55LmksXG4gIExOMTA6IF9wdXJlRnVuY3Rpb25zQW55LkxOMTAsXG4gIExPRzEwRTogX3B1cmVGdW5jdGlvbnNBbnkuTE9HMTBFLFxuICBOYU46IF9wdXJlRnVuY3Rpb25zQW55Ll9OYU4sXG4gIHBpOiBfcHVyZUZ1bmN0aW9uc0FueS5waSxcbiAgU1FSVDFfMjogX3B1cmVGdW5jdGlvbnNBbnkuU1FSVDFfMixcbiAgdGF1OiBfcHVyZUZ1bmN0aW9uc0FueS50YXUsXG4gIGVmaW1vdkZhY3RvcjogX3B1cmVGdW5jdGlvbnNBbnkuZWZpbW92RmFjdG9yLFxuICBmaW5lU3RydWN0dXJlOiBfcHVyZUZ1bmN0aW9uc0FueS5maW5lU3RydWN0dXJlLFxuICBzYWNrdXJUZXRyb2RlOiBfcHVyZUZ1bmN0aW9uc0FueS5zYWNrdXJUZXRyb2RlLFxuICB3ZWFrTWl4aW5nQW5nbGU6IF9wdXJlRnVuY3Rpb25zQW55LndlYWtNaXhpbmdBbmdsZSxcbiAgZTogX3B1cmVGdW5jdGlvbnNBbnkuZSxcbiAgSW5maW5pdHk6IF9wdXJlRnVuY3Rpb25zQW55Ll9JbmZpbml0eSxcbiAgTE9HMkU6IF9wdXJlRnVuY3Rpb25zQW55LkxPRzJFLFxuICAnUEknOiBfcHVyZUZ1bmN0aW9uc0FueS5waSxcbiAgdmVyc2lvbjogX3B1cmVGdW5jdGlvbnNBbnkudmVyc2lvbixcbiAgJ0UnOiBfcHVyZUZ1bmN0aW9uc0FueS5lLFxuICBwaGk6IF9wdXJlRnVuY3Rpb25zQW55LnBoaSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkLFxuICBpc0ludGVnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmlzSW50ZWdlcixcbiAgaXNOdW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5pc051bWVyaWMsXG4gIGlzUG9zaXRpdmU6IF9wdXJlRnVuY3Rpb25zQW55LmlzUG9zaXRpdmUsXG4gIGlzTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05hTixcbiAgZXF1YWxTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsU2NhbGFyLFxuICBudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWJlcixcbiAgXCJib29sZWFuXCI6IF9wdXJlRnVuY3Rpb25zQW55W1wiYm9vbGVhblwiXSxcbiAgY29tcGxleDogX3B1cmVGdW5jdGlvbnNBbnkuY29tcGxleCxcbiAgc3BsaXRVbml0OiBfcHVyZUZ1bmN0aW9uc0FueS5zcGxpdFVuaXQsXG4gIHVuYXJ5UGx1czogX3B1cmVGdW5jdGlvbnNBbnkudW5hcnlQbHVzLFxuICBhcHBseTogX3B1cmVGdW5jdGlvbnNBbnkuYXBwbHksXG4gIGN1YmU6IF9wdXJlRnVuY3Rpb25zQW55LmN1YmUsXG4gIGV4cG0xOiBfcHVyZUZ1bmN0aW9uc0FueS5leHBtMSxcbiAgbG9nMTA6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzEwLFxuICBtdWx0aXBseVNjYWxhcjogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHlTY2FsYXIsXG4gIHNpZ246IF9wdXJlRnVuY3Rpb25zQW55LnNpZ24sXG4gIHNxdWFyZTogX3B1cmVGdW5jdGlvbnNBbnkuc3F1YXJlLFxuICBiaXROb3Q6IF9wdXJlRnVuY3Rpb25zQW55LmJpdE5vdCxcbiAgYXJnOiBfcHVyZUZ1bmN0aW9uc0FueS5hcmcsXG4gIGltOiBfcHVyZUZ1bmN0aW9uc0FueS5pbSxcbiAgbm90OiBfcHVyZUZ1bmN0aW9uc0FueS5ub3QsXG4gIGZpbHRlcjogX3B1cmVGdW5jdGlvbnNBbnkuZmlsdGVyLFxuICBmb3JFYWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5mb3JFYWNoLFxuICBtYXA6IF9wdXJlRnVuY3Rpb25zQW55Lm1hcCxcbiAgZXJmOiBfcHVyZUZ1bmN0aW9uc0FueS5lcmYsXG4gIGZvcm1hdDogX3B1cmVGdW5jdGlvbnNBbnkuZm9ybWF0LFxuICBpc1ByaW1lOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1ByaW1lLFxuICBhY29zOiBfcHVyZUZ1bmN0aW9uc0FueS5hY29zLFxuICBhY290OiBfcHVyZUZ1bmN0aW9uc0FueS5hY290LFxuICBhY3NjOiBfcHVyZUZ1bmN0aW9uc0FueS5hY3NjLFxuICBhc2VjOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2VjLFxuICBhc2luOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2luLFxuICBhdGFuOiBfcHVyZUZ1bmN0aW9uc0FueS5hdGFuLFxuICBhdGFuaDogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbmgsXG4gIGNvc2g6IF9wdXJlRnVuY3Rpb25zQW55LmNvc2gsXG4gIGNvdGg6IF9wdXJlRnVuY3Rpb25zQW55LmNvdGgsXG4gIGNzY2g6IF9wdXJlRnVuY3Rpb25zQW55LmNzY2gsXG4gIHNlY2g6IF9wdXJlRnVuY3Rpb25zQW55LnNlY2gsXG4gIHNpbmg6IF9wdXJlRnVuY3Rpb25zQW55LnNpbmgsXG4gIHRhbmg6IF9wdXJlRnVuY3Rpb25zQW55LnRhbmgsXG4gIGNoYWluOiBjaGFpbixcbiAgY29tYmluYXRpb25zOiBfcHVyZUZ1bmN0aW9uc0FueS5jb21iaW5hdGlvbnMsXG4gIHBpY2tSYW5kb206IF9wdXJlRnVuY3Rpb25zQW55LnBpY2tSYW5kb20sXG4gIHJhbmRvbUludDogX3B1cmVGdW5jdGlvbnNBbnkucmFuZG9tSW50LFxuICBMTjI6IF9wdXJlRnVuY3Rpb25zQW55LkxOMixcbiAgY2xvbmU6IF9wdXJlRnVuY3Rpb25zQW55LmNsb25lLFxuICBoYXNOdW1lcmljVmFsdWU6IF9wdXJlRnVuY3Rpb25zQW55Lmhhc051bWVyaWNWYWx1ZSxcbiAgdHlwZU9mOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlT2YsXG4gIHN0cmluZzogX3B1cmVGdW5jdGlvbnNBbnkuc3RyaW5nLFxuICBmcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuZnJhY3Rpb24sXG4gIHVuYXJ5TWludXM6IF9wdXJlRnVuY3Rpb25zQW55LnVuYXJ5TWludXMsXG4gIGFkZFNjYWxhcjogX3B1cmVGdW5jdGlvbnNBbnkuYWRkU2NhbGFyLFxuICBleHA6IF9wdXJlRnVuY3Rpb25zQW55LmV4cCxcbiAgbG9nMjogX3B1cmVGdW5jdGlvbnNBbnkubG9nMixcbiAgc3FydDogX3B1cmVGdW5jdGlvbnNBbnkuc3FydCxcbiAgY29uajogX3B1cmVGdW5jdGlvbnNBbnkuY29uaixcbiAgZ2V0TWF0cml4RGF0YVR5cGU6IF9wdXJlRnVuY3Rpb25zQW55LmdldE1hdHJpeERhdGFUeXBlLFxuICBtb2RlOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2RlLFxuICBwcmludDogX3B1cmVGdW5jdGlvbnNBbnkucHJpbnQsXG4gIGFjb3NoOiBfcHVyZUZ1bmN0aW9uc0FueS5hY29zaCxcbiAgYWNzY2g6IF9wdXJlRnVuY3Rpb25zQW55LmFjc2NoLFxuICBhc2luaDogX3B1cmVGdW5jdGlvbnNBbnkuYXNpbmgsXG4gIGNvczogX3B1cmVGdW5jdGlvbnNBbnkuY29zLFxuICBjc2M6IF9wdXJlRnVuY3Rpb25zQW55LmNzYyxcbiAgc2luOiBfcHVyZUZ1bmN0aW9uc0FueS5zaW4sXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IF9wdXJlRnVuY3Rpb25zQW55LmNvbWJpbmF0aW9uc1dpdGhSZXAsXG4gIHJhbmRvbTogX3B1cmVGdW5jdGlvbnNBbnkucmFuZG9tLFxuICBTUVJUMjogX3B1cmVGdW5jdGlvbnNBbnkuU1FSVDIsXG4gIGlzTmVnYXRpdmU6IF9wdXJlRnVuY3Rpb25zQW55LmlzTmVnYXRpdmUsXG4gIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICBjYnJ0OiBfcHVyZUZ1bmN0aW9uc0FueS5jYnJ0LFxuICBnY2Q6IF9wdXJlRnVuY3Rpb25zQW55LmdjZCxcbiAgbW9kOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2QsXG4gIG50aFJvb3Q6IF9wdXJlRnVuY3Rpb25zQW55Lm50aFJvb3QsXG4gIHhnY2Q6IF9wdXJlRnVuY3Rpb25zQW55LnhnY2QsXG4gIGJpdEFuZDogX3B1cmVGdW5jdGlvbnNBbnkuYml0QW5kLFxuICBiaXRYb3I6IF9wdXJlRnVuY3Rpb25zQW55LmJpdFhvcixcbiAgb3I6IF9wdXJlRnVuY3Rpb25zQW55Lm9yLFxuICBjb25jYXQ6IF9wdXJlRnVuY3Rpb25zQW55LmNvbmNhdCxcbiAgZGlhZzogX3B1cmVGdW5jdGlvbnNBbnkuZGlhZyxcbiAgaWRlbnRpdHk6IF9wdXJlRnVuY3Rpb25zQW55LmlkZW50aXR5LFxuICBvbmVzOiBfcHVyZUZ1bmN0aW9uc0FueS5vbmVzLFxuICByZXNoYXBlOiBfcHVyZUZ1bmN0aW9uc0FueS5yZXNoYXBlLFxuICBzaXplOiBfcHVyZUZ1bmN0aW9uc0FueS5zaXplLFxuICBzdWJzZXQ6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnNldCxcbiAgemVyb3M6IF9wdXJlRnVuY3Rpb25zQW55Lnplcm9zLFxuICB0bzogX3B1cmVGdW5jdGlvbnNBbnkudG8sXG4gIHJvdW5kOiBfcHVyZUZ1bmN0aW9uc0FueS5yb3VuZCxcbiAgbGVmdFNoaWZ0OiBfcHVyZUZ1bmN0aW9uc0FueS5sZWZ0U2hpZnQsXG4gIHJpZ2h0TG9nU2hpZnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJpZ2h0TG9nU2hpZnQsXG4gIGNvbXBhcmU6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBhcmUsXG4gIGNvbXBhcmVUZXh0OiBfcHVyZUZ1bmN0aW9uc0FueS5jb21wYXJlVGV4dCxcbiAgc21hbGxlcjogX3B1cmVGdW5jdGlvbnNBbnkuc21hbGxlcixcbiAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gIHVuZXF1YWw6IF9wdXJlRnVuY3Rpb25zQW55LnVuZXF1YWwsXG4gIG1heDogX3B1cmVGdW5jdGlvbnNBbnkubWF4LFxuICBzcGFyc2U6IF9wdXJlRnVuY3Rpb25zQW55LnNwYXJzZSxcbiAgYWNvdGg6IF9wdXJlRnVuY3Rpb25zQW55LmFjb3RoLFxuICBhdGFuMjogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbjIsXG4gIHNlYzogX3B1cmVGdW5jdGlvbnNBbnkuc2VjLFxuICBhZGQ6IF9wdXJlRnVuY3Rpb25zQW55LmFkZCxcbiAgdHJhY2U6IF9wdXJlRnVuY3Rpb25zQW55LnRyYWNlLFxuICBjb21wb3NpdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuY29tcG9zaXRpb24sXG4gIGlzWmVybzogX3B1cmVGdW5jdGlvbnNBbnkuaXNaZXJvLFxuICBhYnM6IF9wdXJlRnVuY3Rpb25zQW55LmFicyxcbiAgZmxvb3I6IF9wdXJlRnVuY3Rpb25zQW55LmZsb29yLFxuICBtdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHksXG4gIGRvdE11bHRpcGx5OiBfcHVyZUZ1bmN0aW9uc0FueS5kb3RNdWx0aXBseSxcbiAgcmU6IF9wdXJlRnVuY3Rpb25zQW55LnJlLFxuICBmbGF0dGVuOiBfcHVyZUZ1bmN0aW9uc0FueS5mbGF0dGVuLFxuICByZXNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnJlc2l6ZSxcbiAgc3F1ZWV6ZTogX3B1cmVGdW5jdGlvbnNBbnkuc3F1ZWV6ZSxcbiAgcHJvZDogX3B1cmVGdW5jdGlvbnNBbnkucHJvZCxcbiAgcG93OiBfcHVyZUZ1bmN0aW9uc0FueS5wb3csXG4gIGRvdFBvdzogX3B1cmVGdW5jdGlvbnNBbnkuZG90UG93LFxuICByaWdodEFyaXRoU2hpZnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJpZ2h0QXJpdGhTaGlmdCxcbiAgY29tcGFyZU5hdHVyYWw6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBhcmVOYXR1cmFsLFxuICBlcXVhbFRleHQ6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsVGV4dCxcbiAgbGFyZ2VyRXE6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlckVxLFxuICBwYXJ0aXRpb25TZWxlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnBhcnRpdGlvblNlbGVjdCxcbiAgbWluOiBfcHVyZUZ1bmN0aW9uc0FueS5taW4sXG4gIGFzZWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2VjaCxcbiAgdGFuOiBfcHVyZUZ1bmN0aW9uc0FueS50YW4sXG4gIHNldFNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnNldFNpemUsXG4gIG5vcm06IF9wdXJlRnVuY3Rpb25zQW55Lm5vcm0sXG4gIHF1YW50aWxlU2VxOiBfcHVyZUZ1bmN0aW9uc0FueS5xdWFudGlsZVNlcSxcbiAgZ2FtbWE6IF9wdXJlRnVuY3Rpb25zQW55LmdhbW1hLFxuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgbGNtOiBfcHVyZUZ1bmN0aW9uc0FueS5sY20sXG4gIGJpdE9yOiBfcHVyZUZ1bmN0aW9uc0FueS5iaXRPcixcbiAga3JvbjogX3B1cmVGdW5jdGlvbnNBbnkua3JvbixcbiAgdHJhbnNwb3NlOiBfcHVyZUZ1bmN0aW9uc0FueS50cmFuc3Bvc2UsXG4gIG51bWVyaWM6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWVyaWMsXG4gIGFuZDogX3B1cmVGdW5jdGlvbnNBbnkuYW5kLFxuICBzbWFsbGVyRXE6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXJFcSxcbiAgc29ydDogX3B1cmVGdW5jdGlvbnNBbnkuc29ydCxcbiAgY290OiBfcHVyZUZ1bmN0aW9uc0FueS5jb3QsXG4gIGRvdDogX3B1cmVGdW5jdGlvbnNBbnkuZG90LFxuICBzdW06IF9wdXJlRnVuY3Rpb25zQW55LnN1bSxcbiAgZmFjdG9yaWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5mYWN0b3JpYWwsXG4gIHBlcm11dGF0aW9uczogX3B1cmVGdW5jdGlvbnNBbnkucGVybXV0YXRpb25zLFxuICBjZWlsOiBfcHVyZUZ1bmN0aW9uc0FueS5jZWlsLFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIGNyb3NzOiBfcHVyZUZ1bmN0aW9uc0FueS5jcm9zcyxcbiAgY3RyYW5zcG9zZTogX3B1cmVGdW5jdGlvbnNBbnkuY3RyYW5zcG9zZSxcbiAgZXF1YWw6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsLFxuICBzZXRDYXJ0ZXNpYW46IF9wdXJlRnVuY3Rpb25zQW55LnNldENhcnRlc2lhbixcbiAgc2V0RGlzdGluY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnNldERpc3RpbmN0LFxuICBzZXRJc1N1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0SXNTdWJzZXQsXG4gIHNldFBvd2Vyc2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zZXRQb3dlcnNldCxcbiAgaW5kZXg6IF9wdXJlRnVuY3Rpb25zQW55LmluZGV4LFxuICBmaXg6IF9wdXJlRnVuY3Rpb25zQW55LmZpeCxcbiAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICBkaXZpZGVTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmRpdmlkZVNjYWxhcixcbiAgbnRoUm9vdHM6IF9wdXJlRnVuY3Rpb25zQW55Lm50aFJvb3RzLFxuICBsc29sdmU6IF9wdXJlRnVuY3Rpb25zQW55Lmxzb2x2ZSxcbiAgZGVlcEVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5kZWVwRXF1YWwsXG4gIHNldERpZmZlcmVuY2U6IF9wdXJlRnVuY3Rpb25zQW55LnNldERpZmZlcmVuY2UsXG4gIHNldE11bHRpcGxpY2l0eTogX3B1cmVGdW5jdGlvbnNBbnkuc2V0TXVsdGlwbGljaXR5LFxuICBoeXBvdDogX3B1cmVGdW5jdGlvbnNBbnkuaHlwb3QsXG4gIGx1cDogX3B1cmVGdW5jdGlvbnNBbnkubHVwLFxuICBzbHU6IF9wdXJlRnVuY3Rpb25zQW55LnNsdSxcbiAgZGV0OiBfcHVyZUZ1bmN0aW9uc0FueS5kZXQsXG4gIGRpc3RhbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXN0YW5jZSxcbiAgc3RpcmxpbmdTMjogX3B1cmVGdW5jdGlvbnNBbnkuc3RpcmxpbmdTMixcbiAgY2F0YWxhbjogX3B1cmVGdW5jdGlvbnNBbnkuY2F0YWxhbixcbiAgeG9yOiBfcHVyZUZ1bmN0aW9uc0FueS54b3IsXG4gIHJvdzogX3B1cmVGdW5jdGlvbnNBbnkucm93LFxuICBkb3REaXZpZGU6IF9wdXJlRnVuY3Rpb25zQW55LmRvdERpdmlkZSxcbiAgY3JlYXRlVW5pdDogX3B1cmVGdW5jdGlvbnNBbnkuY3JlYXRlVW5pdCxcbiAgc2V0U3ltRGlmZmVyZW5jZTogX3B1cmVGdW5jdGlvbnNBbnkuc2V0U3ltRGlmZmVyZW5jZSxcbiAgcXI6IF9wdXJlRnVuY3Rpb25zQW55LnFyLFxuICBpbnY6IF9wdXJlRnVuY3Rpb25zQW55LmludixcbiAgZXhwbTogX3B1cmVGdW5jdGlvbnNBbnkuZXhwbSxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIG1lYW46IF9wdXJlRnVuY3Rpb25zQW55Lm1lYW4sXG4gIHZhcmlhbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS52YXJpYW5jZSxcbiAgc3RkOiBfcHVyZUZ1bmN0aW9uc0FueS5zdGQsXG4gIG11bHRpbm9taWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5tdWx0aW5vbWlhbCxcbiAgYXRvbWljTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuYXRvbWljTWFzcyxcbiAgYm9ock1hZ25ldG9uOiBfcHVyZUZ1bmN0aW9uc0FueS5ib2hyTWFnbmV0b24sXG4gIGJvbHR6bWFubjogX3B1cmVGdW5jdGlvbnNBbnkuYm9sdHptYW5uLFxuICBjb25kdWN0YW5jZVF1YW50dW06IF9wdXJlRnVuY3Rpb25zQW55LmNvbmR1Y3RhbmNlUXVhbnR1bSxcbiAgZGV1dGVyb25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5kZXV0ZXJvbk1hc3MsXG4gIGVsZWN0cm9uTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuZWxlY3Ryb25NYXNzLFxuICBmYXJhZGF5OiBfcHVyZUZ1bmN0aW9uc0FueS5mYXJhZGF5LFxuICBmaXJzdFJhZGlhdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuZmlyc3RSYWRpYXRpb24sXG4gIGdyYXZpdGF0aW9uQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55LmdyYXZpdGF0aW9uQ29uc3RhbnQsXG4gIGhhcnRyZWVFbmVyZ3k6IF9wdXJlRnVuY3Rpb25zQW55LmhhcnRyZWVFbmVyZ3ksXG4gIGtsaXR6aW5nOiBfcHVyZUZ1bmN0aW9uc0FueS5rbGl0emluZyxcbiAgbWFnbmV0aWNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkubWFnbmV0aWNDb25zdGFudCxcbiAgbW9sYXJNYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhck1hc3MsXG4gIG1vbGFyUGxhbmNrQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1vbGFyUGxhbmNrQ29uc3RhbnQsXG4gIG5ldXRyb25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5uZXV0cm9uTWFzcyxcbiAgcGxhbmNrQ2hhcmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tDaGFyZ2UsXG4gIHBsYW5ja0xlbmd0aDogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrTGVuZ3RoLFxuICBwbGFuY2tUZW1wZXJhdHVyZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrVGVtcGVyYXR1cmUsXG4gIHByb3Rvbk1hc3M6IF9wdXJlRnVuY3Rpb25zQW55LnByb3Rvbk1hc3MsXG4gIHJlZHVjZWRQbGFuY2tDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkucmVkdWNlZFBsYW5ja0NvbnN0YW50LFxuICBzZWNvbmRSYWRpYXRpb246IF9wdXJlRnVuY3Rpb25zQW55LnNlY29uZFJhZGlhdGlvbixcbiAgc3RlZmFuQm9sdHptYW5uOiBfcHVyZUZ1bmN0aW9uc0FueS5zdGVmYW5Cb2x0em1hbm4sXG4gIHZhY3V1bUltcGVkYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFjdXVtSW1wZWRhbmNlLFxuICBjb2x1bW46IF9wdXJlRnVuY3Rpb25zQW55LmNvbHVtbixcbiAgdXNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS51c29sdmUsXG4gIHNldEludGVyc2VjdDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0SW50ZXJzZWN0LFxuICBsdXNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS5sdXNvbHZlLFxuICBlaWdzOiBfcHVyZUZ1bmN0aW9uc0FueS5laWdzLFxuICBpbnRlcnNlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LmludGVyc2VjdCxcbiAgJ3Zhcic6IF9wdXJlRnVuY3Rpb25zQW55LnZhcmlhbmNlLFxuICBiZWxsTnVtYmVyczogX3B1cmVGdW5jdGlvbnNBbnkuYmVsbE51bWJlcnMsXG4gIGF2b2dhZHJvOiBfcHVyZUZ1bmN0aW9uc0FueS5hdm9nYWRybyxcbiAgY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM6IF9wdXJlRnVuY3Rpb25zQW55LmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLFxuICBlbGVjdHJpY0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5lbGVjdHJpY0NvbnN0YW50LFxuICBmZXJtaUNvdXBsaW5nOiBfcHVyZUZ1bmN0aW9uc0FueS5mZXJtaUNvdXBsaW5nLFxuICBncmF2aXR5OiBfcHVyZUZ1bmN0aW9uc0FueS5ncmF2aXR5LFxuICBsb3NjaG1pZHQ6IF9wdXJlRnVuY3Rpb25zQW55Lmxvc2NobWlkdCxcbiAgbW9sYXJNYXNzQzEyOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhck1hc3NDMTIsXG4gIG51Y2xlYXJNYWduZXRvbjogX3B1cmVGdW5jdGlvbnNBbnkubnVjbGVhck1hZ25ldG9uLFxuICBwbGFuY2tNYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tNYXNzLFxuICBxdWFudHVtT2ZDaXJjdWxhdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkucXVhbnR1bU9mQ2lyY3VsYXRpb24sXG4gIHNwZWVkT2ZMaWdodDogX3B1cmVGdW5jdGlvbnNBbnkuc3BlZWRPZkxpZ2h0LFxuICB3aWVuRGlzcGxhY2VtZW50OiBfcHVyZUZ1bmN0aW9uc0FueS53aWVuRGlzcGxhY2VtZW50LFxuICBsb2c6IF9wdXJlRnVuY3Rpb25zQW55LmxvZyxcbiAgdW5pdDogX3B1cmVGdW5jdGlvbnNBbnkudW5pdCxcbiAgcGFyc2U6IHBhcnNlLFxuICBldmFsdWF0ZTogZXZhbHVhdGUsXG4gIHNxcnRtOiBfcHVyZUZ1bmN0aW9uc0FueS5zcXJ0bSxcbiAga2xkaXZlcmdlbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5rbGRpdmVyZ2VuY2UsXG4gIGJvaHJSYWRpdXM6IF9wdXJlRnVuY3Rpb25zQW55LmJvaHJSYWRpdXMsXG4gIGVsZW1lbnRhcnlDaGFyZ2U6IF9wdXJlRnVuY3Rpb25zQW55LmVsZW1lbnRhcnlDaGFyZ2UsXG4gIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IF9wdXJlRnVuY3Rpb25zQW55LmludmVyc2VDb25kdWN0YW5jZVF1YW50dW0sXG4gIG1vbGFyVm9sdW1lOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhclZvbHVtZSxcbiAgcGxhbmNrVGltZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrVGltZSxcbiAgdGhvbXNvbkNyb3NzU2VjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkudGhvbXNvbkNyb3NzU2VjdGlvbixcbiAgbG9nMXA6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzFwLFxuICBjb21waWxlOiBjb21waWxlLFxuICBwYXJzZXI6IHBhcnNlcixcbiAgbWVkaWFuOiBfcHVyZUZ1bmN0aW9uc0FueS5tZWRpYW4sXG4gIHNpbXBsaWZ5OiBzaW1wbGlmeSxcbiAgcmF0aW9uYWxpemU6IHJhdGlvbmFsaXplLFxuICBnYXNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkuZ2FzQ29uc3RhbnQsXG4gIHBsYW5ja0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tDb25zdGFudCxcbiAgc2V0VW5pb246IF9wdXJlRnVuY3Rpb25zQW55LnNldFVuaW9uLFxuICBoZWxwOiBoZWxwLFxuICBkZXJpdmF0aXZlOiBkZXJpdmF0aXZlLFxuICBtYWduZXRpY0ZsdXhRdWFudHVtOiBfcHVyZUZ1bmN0aW9uc0FueS5tYWduZXRpY0ZsdXhRdWFudHVtLFxuICAnZXZhbCc6IGV2YWx1YXRlLFxuICBjb3Vsb21iOiBfcHVyZUZ1bmN0aW9uc0FueS5jb3Vsb21iLFxuICBtYWQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1hZCxcbiAgcnlkYmVyZzogX3B1cmVGdW5jdGlvbnNBbnkucnlkYmVyZyxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuX2V4dGVuZHMobWF0aFdpdGhUcmFuc2Zvcm0sIG1hdGgsIHtcbiAgYXBwbHk6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFwcGx5VHJhbnNmb3JtKSh7XG4gICAgaXNJbnRlZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5pc0ludGVnZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBmaWx0ZXI6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlclRyYW5zZm9ybSkoe1xuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWFwOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXBUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGZvckVhY2g6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIG1heDogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4VHJhbnNmb3JtKSh7XG4gICAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBtaW46ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblRyYW5zZm9ybSkoe1xuICAgIHNtYWxsZXI6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBzdWJzZXQ6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFRyYW5zZm9ybSkoe1xuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgY29uY2F0OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXRUcmFuc2Zvcm0pKHtcbiAgICBpc0ludGVnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmlzSW50ZWdlcixcbiAgICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHJhbmdlOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZVRyYW5zZm9ybSkoe1xuICAgIGJpZ251bWJlcjogX3B1cmVGdW5jdGlvbnNBbnkuYmlnbnVtYmVyLFxuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgICBsYXJnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlcixcbiAgICBsYXJnZXJFcTogX3B1cmVGdW5jdGlvbnNBbnkubGFyZ2VyRXEsXG4gICAgc21hbGxlcjogX3B1cmVGdW5jdGlvbnNBbnkuc21hbGxlcixcbiAgICBzbWFsbGVyRXE6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXJFcSxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHN1bTogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtVHJhbnNmb3JtKSh7XG4gICAgYmlnbnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5iaWdudW1iZXIsXG4gICAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGluZGV4OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFRyYW5zZm9ybSkoe1xuICAgIEluZGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbmRleFxuICB9KSxcbiAgY29sdW1uOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb2x1bW5UcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgcm93OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSb3dUcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWVhbjogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhblRyYW5zZm9ybSkoe1xuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgdmFyaWFuY2U6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtKSh7XG4gICAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gICAgYXBwbHk6IF9wdXJlRnVuY3Rpb25zQW55LmFwcGx5LFxuICAgIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICAgIGlzTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05hTixcbiAgICBtdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHksXG4gICAgc3VidHJhY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnRyYWN0LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgc3RkOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRUcmFuc2Zvcm0pKHtcbiAgICBzcXJ0OiBfcHVyZUZ1bmN0aW9uc0FueS5zcXJ0LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZCxcbiAgICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2VcbiAgfSlcbn0pO1xuXG5fZXh0ZW5kcyhjbGFzc2VzLCB7XG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0LFxuICBDb21wbGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5Db21wbGV4LFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIE5vZGU6IE5vZGUsXG4gIEFycmF5Tm9kZTogQXJyYXlOb2RlLFxuICBCbG9ja05vZGU6IEJsb2NrTm9kZSxcbiAgQ29uc3RhbnROb2RlOiBDb25zdGFudE5vZGUsXG4gIE9iamVjdE5vZGU6IE9iamVjdE5vZGUsXG4gIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlLFxuICBSZWxhdGlvbmFsTm9kZTogUmVsYXRpb25hbE5vZGUsXG4gIENoYWluOiBDaGFpbixcbiAgQmlnTnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5CaWdOdW1iZXIsXG4gIE1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuTWF0cml4LFxuICBDb25kaXRpb25hbE5vZGU6IENvbmRpdGlvbmFsTm9kZSxcbiAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gIEZyYWN0aW9uOiBfcHVyZUZ1bmN0aW9uc0FueS5GcmFjdGlvbixcbiAgUmFuZ2VOb2RlOiBSYW5nZU5vZGUsXG4gIERlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5EZW5zZU1hdHJpeCxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgU3BhcnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5TcGFyc2VNYXRyaXgsXG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbW11dGFibGVEZW5zZU1hdHJpeCxcbiAgRmlib25hY2NpSGVhcDogX3B1cmVGdW5jdGlvbnNBbnkuRmlib25hY2NpSGVhcCxcbiAgQWNjZXNzb3JOb2RlOiBBY2Nlc3Nvck5vZGUsXG4gIEluZGV4Tm9kZTogSW5kZXhOb2RlLFxuICBTcGE6IF9wdXJlRnVuY3Rpb25zQW55LlNwYSxcbiAgQXNzaWdubWVudE5vZGU6IEFzc2lnbm1lbnROb2RlLFxuICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGUsXG4gIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICBQYXJzZXI6IFBhcnNlcixcbiAgSGVscDogSGVscFxufSk7XG5cbkNoYWluLmNyZWF0ZVByb3h5KG1hdGgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIF9leHBvcnROYW1lcyA9IHtcbiAgY29uZmlnOiB0cnVlLFxuICBJbmRleEVycm9yOiB0cnVlLFxuICBEaW1lbnNpb25FcnJvcjogdHJ1ZSxcbiAgQXJndW1lbnRzRXJyb3I6IHRydWUsXG4gIGNyZWF0ZTogdHJ1ZSxcbiAgZmFjdG9yeTogdHJ1ZVxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmZpZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uZmlnUmVhZG9ubHkuY29uZmlnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluZGV4RXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0luZGV4RXJyb3IuSW5kZXhFcnJvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEaW1lbnNpb25FcnJvclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJndW1lbnRzRXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3JlYXRlLmNyZWF0ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWN0b3J5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mYWN0b3J5LmZhY3Rvcnk7XG4gIH1cbn0pO1xuXG52YXIgX2NvbmZpZ1JlYWRvbmx5ID0gcmVxdWlyZShcIi4vY29uZmlnUmVhZG9ubHlcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG5PYmplY3Qua2V5cyhfcHVyZUZ1bmN0aW9uc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3B1cmVGdW5jdGlvbnNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfaW1wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vaW1wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuT2JqZWN0LmtleXMoX2ltcHVyZUZ1bmN0aW9uc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2ltcHVyZUZ1bmN0aW9uc0FueVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF90eXBlQ2hlY2tzID0gcmVxdWlyZShcIi4vdHlwZUNoZWNrc1wiKTtcblxuT2JqZWN0LmtleXMoX3R5cGVDaGVja3MpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF90eXBlQ2hlY2tzW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIF9Bcmd1bWVudHNFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9Bcmd1bWVudHNFcnJvclwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBbnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkuZ2VuZXJhdGVkXCIpO1xuXG5PYmplY3Qua2V5cyhfZGVwZW5kZW5jaWVzQW55KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIik7XG5cbk9iamVjdC5rZXlzKF9mYWN0b3JpZXNBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9mYWN0b3JpZXNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfY3JlYXRlID0gcmVxdWlyZShcIi4uL2NvcmUvY3JlYXRlXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9kZXByZWNhdGVkQW55ID0gcmVxdWlyZShcIi4vZGVwcmVjYXRlZEFueVwiKTtcblxuT2JqZWN0LmtleXMoX2RlcHJlY2F0ZWRBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9kZXByZWNhdGVkQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG5leHBvcnRzWyd2YXInXSA9IGV4cG9ydHMuZGVwcmVjYXRlZFZhcjtcbmV4cG9ydHNbJ3R5cGVvZiddID0gZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mO1xuZXhwb3J0c1snZXZhbCddID0gZXhwb3J0cy5kZXByZWNhdGVkRXZhbDtcbmV4cG9ydHNbJ2ltcG9ydCddID0gZXhwb3J0cy5kZXByZWNhdGVkSW1wb3J0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNicnQgPSBleHBvcnRzLm1hdHJpeCA9IGV4cG9ydHMuU3BhcnNlTWF0cml4ID0gZXhwb3J0cy5pc05lZ2F0aXZlID0gZXhwb3J0cy5TUVJUMiA9IGV4cG9ydHMucmFuZG9tID0gZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwID0gZXhwb3J0cy5zaW4gPSBleHBvcnRzLmNzYyA9IGV4cG9ydHMuY29zID0gZXhwb3J0cy5hc2luaCA9IGV4cG9ydHMuYWNzY2ggPSBleHBvcnRzLmFjb3NoID0gZXhwb3J0cy5wcmludCA9IGV4cG9ydHMubW9kZSA9IGV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGUgPSBleHBvcnRzLmNvbmogPSBleHBvcnRzLnNxcnQgPSBleHBvcnRzLmxvZzIgPSBleHBvcnRzLmV4cCA9IGV4cG9ydHMuYWRkU2NhbGFyID0gZXhwb3J0cy51bmFyeU1pbnVzID0gZXhwb3J0cy5mcmFjdGlvbiA9IGV4cG9ydHMuc3RyaW5nID0gZXhwb3J0cy50eXBlT2YgPSBleHBvcnRzLmhhc051bWVyaWNWYWx1ZSA9IGV4cG9ydHMuY2xvbmUgPSBleHBvcnRzLkxOMiA9IGV4cG9ydHMucmFuZG9tSW50ID0gZXhwb3J0cy5waWNrUmFuZG9tID0gZXhwb3J0cy5jb21iaW5hdGlvbnMgPSBleHBvcnRzLnRhbmggPSBleHBvcnRzLnNpbmggPSBleHBvcnRzLnNlY2ggPSBleHBvcnRzLmNzY2ggPSBleHBvcnRzLmNvdGggPSBleHBvcnRzLmNvc2ggPSBleHBvcnRzLmF0YW5oID0gZXhwb3J0cy5hdGFuID0gZXhwb3J0cy5hc2luID0gZXhwb3J0cy5hc2VjID0gZXhwb3J0cy5hY3NjID0gZXhwb3J0cy5hY290ID0gZXhwb3J0cy5hY29zID0gZXhwb3J0cy5pc1ByaW1lID0gZXhwb3J0cy5mb3JtYXQgPSBleHBvcnRzLmVyZiA9IGV4cG9ydHMubWFwID0gZXhwb3J0cy5mb3JFYWNoID0gZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuaW0gPSBleHBvcnRzLmFyZyA9IGV4cG9ydHMuYml0Tm90ID0gZXhwb3J0cy5zcXVhcmUgPSBleHBvcnRzLnNpZ24gPSBleHBvcnRzLm11bHRpcGx5U2NhbGFyID0gZXhwb3J0cy5sb2cxMCA9IGV4cG9ydHMuZXhwbTEgPSBleHBvcnRzLmN1YmUgPSBleHBvcnRzLmFwcGx5ID0gZXhwb3J0cy51bmFyeVBsdXMgPSBleHBvcnRzLnNwbGl0VW5pdCA9IGV4cG9ydHMuY29tcGxleCA9IGV4cG9ydHNbXCJib29sZWFuXCJdID0gZXhwb3J0cy5udW1iZXIgPSBleHBvcnRzLmVxdWFsU2NhbGFyID0gZXhwb3J0cy5pc05hTiA9IGV4cG9ydHMuaXNQb3NpdGl2ZSA9IGV4cG9ydHMuaXNOdW1lcmljID0gZXhwb3J0cy5pc0ludGVnZXIgPSBleHBvcnRzLnR5cGVkID0gZXhwb3J0cy5waGkgPSBleHBvcnRzLkRlbnNlTWF0cml4ID0gZXhwb3J0cy52ZXJzaW9uID0gZXhwb3J0cy5MT0cyRSA9IGV4cG9ydHMuX0luZmluaXR5ID0gZXhwb3J0cy5lID0gZXhwb3J0cy5GcmFjdGlvbiA9IGV4cG9ydHMud2Vha01peGluZ0FuZ2xlID0gZXhwb3J0cy5zYWNrdXJUZXRyb2RlID0gZXhwb3J0cy5maW5lU3RydWN0dXJlID0gZXhwb3J0cy5lZmltb3ZGYWN0b3IgPSBleHBvcnRzLnRhdSA9IGV4cG9ydHMuU1FSVDFfMiA9IGV4cG9ydHMucGkgPSBleHBvcnRzLl9OYU4gPSBleHBvcnRzLkxPRzEwRSA9IGV4cG9ydHMuTE4xMCA9IGV4cG9ydHMuaSA9IGV4cG9ydHMucmVwbGFjZXIgPSBleHBvcnRzLk1hdHJpeCA9IGV4cG9ydHMuQmlnTnVtYmVyID0gZXhwb3J0cy5fdHJ1ZSA9IGV4cG9ydHMuX251bGwgPSBleHBvcnRzLl9mYWxzZSA9IGV4cG9ydHMuZXllID0gZXhwb3J0cy5SYW5nZSA9IGV4cG9ydHMuQ29tcGxleCA9IGV4cG9ydHMuUmVzdWx0U2V0ID0gdm9pZCAwO1xuZXhwb3J0cy54b3IgPSBleHBvcnRzLmNhdGFsYW4gPSBleHBvcnRzLnN0aXJsaW5nUzIgPSBleHBvcnRzLmRpc3RhbmNlID0gZXhwb3J0cy5kZXQgPSBleHBvcnRzLnNsdSA9IGV4cG9ydHMubHVwID0gZXhwb3J0cy5oeXBvdCA9IGV4cG9ydHMuc2V0TXVsdGlwbGljaXR5ID0gZXhwb3J0cy5zZXREaWZmZXJlbmNlID0gZXhwb3J0cy5kZWVwRXF1YWwgPSBleHBvcnRzLmxzb2x2ZSA9IGV4cG9ydHMubnRoUm9vdHMgPSBleHBvcnRzLmRpdmlkZVNjYWxhciA9IGV4cG9ydHMucmFuZ2UgPSBleHBvcnRzLmZpeCA9IGV4cG9ydHMuaW5kZXggPSBleHBvcnRzLnNldFBvd2Vyc2V0ID0gZXhwb3J0cy5zZXRJc1N1YnNldCA9IGV4cG9ydHMuc2V0RGlzdGluY3QgPSBleHBvcnRzLnNldENhcnRlc2lhbiA9IGV4cG9ydHMuSW5kZXggPSBleHBvcnRzLmVxdWFsID0gZXhwb3J0cy5jdHJhbnNwb3NlID0gZXhwb3J0cy5jcm9zcyA9IGV4cG9ydHMuc3VidHJhY3QgPSBleHBvcnRzLmNlaWwgPSBleHBvcnRzLnBlcm11dGF0aW9ucyA9IGV4cG9ydHMuZmFjdG9yaWFsID0gZXhwb3J0cy5zdW0gPSBleHBvcnRzLmRvdCA9IGV4cG9ydHMuY290ID0gZXhwb3J0cy5zb3J0ID0gZXhwb3J0cy5zbWFsbGVyRXEgPSBleHBvcnRzLmFuZCA9IGV4cG9ydHMubnVtZXJpYyA9IGV4cG9ydHMudHJhbnNwb3NlID0gZXhwb3J0cy5rcm9uID0gZXhwb3J0cy5iaXRPciA9IGV4cG9ydHMubGNtID0gZXhwb3J0cy5iaWdudW1iZXIgPSBleHBvcnRzLmdhbW1hID0gZXhwb3J0cy5xdWFudGlsZVNlcSA9IGV4cG9ydHMubm9ybSA9IGV4cG9ydHMuc2V0U2l6ZSA9IGV4cG9ydHMudGFuID0gZXhwb3J0cy5hc2VjaCA9IGV4cG9ydHMuU3BhID0gZXhwb3J0cy5taW4gPSBleHBvcnRzLnBhcnRpdGlvblNlbGVjdCA9IGV4cG9ydHMubGFyZ2VyRXEgPSBleHBvcnRzLmVxdWFsVGV4dCA9IGV4cG9ydHMuY29tcGFyZU5hdHVyYWwgPSBleHBvcnRzLnJpZ2h0QXJpdGhTaGlmdCA9IGV4cG9ydHMuZG90UG93ID0gZXhwb3J0cy5wb3cgPSBleHBvcnRzLnByb2QgPSBleHBvcnRzLnNxdWVlemUgPSBleHBvcnRzLnJlc2l6ZSA9IGV4cG9ydHMuZmxhdHRlbiA9IGV4cG9ydHMucmUgPSBleHBvcnRzLmRvdE11bHRpcGx5ID0gZXhwb3J0cy5tdWx0aXBseSA9IGV4cG9ydHMuZmxvb3IgPSBleHBvcnRzLmFicyA9IGV4cG9ydHMuaXNaZXJvID0gZXhwb3J0cy5jb21wb3NpdGlvbiA9IGV4cG9ydHMudHJhY2UgPSBleHBvcnRzLmFkZCA9IGV4cG9ydHMuc2VjID0gZXhwb3J0cy5hdGFuMiA9IGV4cG9ydHMuYWNvdGggPSBleHBvcnRzLnNwYXJzZSA9IGV4cG9ydHMuRmlib25hY2NpSGVhcCA9IGV4cG9ydHMuSW1tdXRhYmxlRGVuc2VNYXRyaXggPSBleHBvcnRzLm1heCA9IGV4cG9ydHMudW5lcXVhbCA9IGV4cG9ydHMubGFyZ2VyID0gZXhwb3J0cy5zbWFsbGVyID0gZXhwb3J0cy5jb21wYXJlVGV4dCA9IGV4cG9ydHMuY29tcGFyZSA9IGV4cG9ydHMucmlnaHRMb2dTaGlmdCA9IGV4cG9ydHMubGVmdFNoaWZ0ID0gZXhwb3J0cy5yb3VuZCA9IGV4cG9ydHMudG8gPSBleHBvcnRzLnplcm9zID0gZXhwb3J0cy5zdWJzZXQgPSBleHBvcnRzLnNpemUgPSBleHBvcnRzLnJlc2hhcGUgPSBleHBvcnRzLm9uZXMgPSBleHBvcnRzLmlkZW50aXR5ID0gZXhwb3J0cy5kaWFnID0gZXhwb3J0cy5jb25jYXQgPSBleHBvcnRzLm9yID0gZXhwb3J0cy5iaXRYb3IgPSBleHBvcnRzLmJpdEFuZCA9IGV4cG9ydHMueGdjZCA9IGV4cG9ydHMubnRoUm9vdCA9IGV4cG9ydHMubW9kID0gZXhwb3J0cy5nY2QgPSB2b2lkIDA7XG5leHBvcnRzLnJ5ZGJlcmcgPSBleHBvcnRzLm1hZCA9IGV4cG9ydHMuY291bG9tYiA9IGV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bSA9IGV4cG9ydHMuc2V0VW5pb24gPSBleHBvcnRzLnBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5nYXNDb25zdGFudCA9IGV4cG9ydHMubWVkaWFuID0gZXhwb3J0cy5sb2cxcCA9IGV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbiA9IGV4cG9ydHMucGxhbmNrVGltZSA9IGV4cG9ydHMubW9sYXJWb2x1bWUgPSBleHBvcnRzLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSBleHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2UgPSBleHBvcnRzLmJvaHJSYWRpdXMgPSBleHBvcnRzLmtsZGl2ZXJnZW5jZSA9IGV4cG9ydHMuc3FydG0gPSBleHBvcnRzLnVuaXQgPSBleHBvcnRzLmxvZyA9IGV4cG9ydHMud2llbkRpc3BsYWNlbWVudCA9IGV4cG9ydHMuc3BlZWRPZkxpZ2h0ID0gZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbiA9IGV4cG9ydHMucGxhbmNrTWFzcyA9IGV4cG9ydHMubnVjbGVhck1hZ25ldG9uID0gZXhwb3J0cy5tb2xhck1hc3NDMTIgPSBleHBvcnRzLmxvc2NobWlkdCA9IGV4cG9ydHMuZ3Jhdml0eSA9IGV4cG9ydHMuZmVybWlDb3VwbGluZyA9IGV4cG9ydHMuZWxlY3RyaWNDb25zdGFudCA9IGV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSBleHBvcnRzLmF2b2dhZHJvID0gZXhwb3J0cy5iZWxsTnVtYmVycyA9IGV4cG9ydHMuaW50ZXJzZWN0ID0gZXhwb3J0cy5laWdzID0gZXhwb3J0cy5sdXNvbHZlID0gZXhwb3J0cy5zZXRJbnRlcnNlY3QgPSBleHBvcnRzLnVzb2x2ZSA9IGV4cG9ydHMuY29sdW1uID0gZXhwb3J0cy52YWN1dW1JbXBlZGFuY2UgPSBleHBvcnRzLnN0ZWZhbkJvbHR6bWFubiA9IGV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uID0gZXhwb3J0cy5yZWR1Y2VkUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLnByb3Rvbk1hc3MgPSBleHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlID0gZXhwb3J0cy5wbGFuY2tMZW5ndGggPSBleHBvcnRzLnBsYW5ja0NoYXJnZSA9IGV4cG9ydHMubmV1dHJvbk1hc3MgPSBleHBvcnRzLm1vbGFyUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLm1vbGFyTWFzcyA9IGV4cG9ydHMubWFnbmV0aWNDb25zdGFudCA9IGV4cG9ydHMua2xpdHppbmcgPSBleHBvcnRzLmhhcnRyZWVFbmVyZ3kgPSBleHBvcnRzLmdyYXZpdGF0aW9uQ29uc3RhbnQgPSBleHBvcnRzLmZpcnN0UmFkaWF0aW9uID0gZXhwb3J0cy5mYXJhZGF5ID0gZXhwb3J0cy5lbGVjdHJvbk1hc3MgPSBleHBvcnRzLmRldXRlcm9uTWFzcyA9IGV4cG9ydHMuY29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5ib2x0em1hbm4gPSBleHBvcnRzLmJvaHJNYWduZXRvbiA9IGV4cG9ydHMuYXRvbWljTWFzcyA9IGV4cG9ydHMubXVsdGlub21pYWwgPSBleHBvcnRzLnN0ZCA9IGV4cG9ydHMudmFyaWFuY2UgPSBleHBvcnRzLm1lYW4gPSBleHBvcnRzLmRpdmlkZSA9IGV4cG9ydHMuZXhwbSA9IGV4cG9ydHMuaW52ID0gZXhwb3J0cy5xciA9IGV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZSA9IGV4cG9ydHMuY3JlYXRlVW5pdCA9IGV4cG9ydHMuVW5pdCA9IGV4cG9ydHMuZG90RGl2aWRlID0gZXhwb3J0cy5yb3cgPSB2b2lkIDA7XG5cbnZhciBfY29uZmlnUmVhZG9ubHkgPSByZXF1aXJlKFwiLi9jb25maWdSZWFkb25seVwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vZmFjdG9yaWVzQW55XCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJlc3VsdFNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc3VsdFNldCkoe30pO1xuZXhwb3J0cy5SZXN1bHRTZXQgPSBSZXN1bHRTZXQ7XG52YXIgQ29tcGxleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBsZXhDbGFzcykoe30pO1xuZXhwb3J0cy5Db21wbGV4ID0gQ29tcGxleDtcbnZhciBSYW5nZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlQ2xhc3MpKHt9KTtcbmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTtcbnZhciBleWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFeWUpKHt9KTtcbmV4cG9ydHMuZXllID0gZXllO1xuXG52YXIgX2ZhbHNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFsc2UpKHt9KTtcblxuZXhwb3J0cy5fZmFsc2UgPSBfZmFsc2U7XG5cbnZhciBfbnVsbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bGwpKHt9KTtcblxuZXhwb3J0cy5fbnVsbCA9IF9udWxsO1xuXG52YXIgX3RydWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcnVlKSh7fSk7XG5cbmV4cG9ydHMuX3RydWUgPSBfdHJ1ZTtcbnZhciBCaWdOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaWdOdW1iZXJDbGFzcykoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XG52YXIgTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4Q2xhc3MpKHt9KTtcbmV4cG9ydHMuTWF0cml4ID0gTWF0cml4O1xudmFyIHJlcGxhY2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVwbGFjZXIpKHt9KTtcbmV4cG9ydHMucmVwbGFjZXIgPSByZXBsYWNlcjtcbnZhciBpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSSkoe1xuICBDb21wbGV4OiBDb21wbGV4XG59KTtcbmV4cG9ydHMuaSA9IGk7XG52YXIgTE4xMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxOMTApKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLkxOMTAgPSBMTjEwO1xudmFyIExPRzEwRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzEwRSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuTE9HMTBFID0gTE9HMTBFO1xuXG52YXIgX05hTiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5hTikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuZXhwb3J0cy5fTmFOID0gX05hTjtcbnZhciBwaSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5waSA9IHBpO1xudmFyIFNRUlQxXzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTUVJUMV8yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5TUVJUMV8yID0gU1FSVDFfMjtcbnZhciB0YXUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYXUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnRhdSA9IHRhdTtcbnZhciBlZmltb3ZGYWN0b3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFZmltb3ZGYWN0b3IpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVmaW1vdkZhY3RvciA9IGVmaW1vdkZhY3RvcjtcbnZhciBmaW5lU3RydWN0dXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmluZVN0cnVjdHVyZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZSA9IGZpbmVTdHJ1Y3R1cmU7XG52YXIgc2Fja3VyVGV0cm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNhY2t1clRldHJvZGUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnNhY2t1clRldHJvZGUgPSBzYWNrdXJUZXRyb2RlO1xudmFyIHdlYWtNaXhpbmdBbmdsZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVdlYWtNaXhpbmdBbmdsZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlID0gd2Vha01peGluZ0FuZ2xlO1xudmFyIEZyYWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRnJhY3Rpb25DbGFzcykoe30pO1xuZXhwb3J0cy5GcmFjdGlvbiA9IEZyYWN0aW9uO1xudmFyIGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5lID0gZTtcblxudmFyIF9JbmZpbml0eSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZmluaXR5KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuXG5leHBvcnRzLl9JbmZpbml0eSA9IF9JbmZpbml0eTtcbnZhciBMT0cyRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzJFKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MT0cyRSA9IExPRzJFO1xudmFyIHZlcnNpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWZXJzaW9uKSh7fSk7XG5leHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xudmFyIERlbnNlTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVuc2VNYXRyaXhDbGFzcykoe1xuICBNYXRyaXg6IE1hdHJpeFxufSk7XG5leHBvcnRzLkRlbnNlTWF0cml4ID0gRGVuc2VNYXRyaXg7XG52YXIgcGhpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGhpKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5waGkgPSBwaGk7XG52YXIgdHlwZWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUeXBlZCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBGcmFjdGlvbjogRnJhY3Rpb25cbn0pO1xuZXhwb3J0cy50eXBlZCA9IHR5cGVkO1xudmFyIGlzSW50ZWdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzSW50ZWdlcikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXIgPSBpc0ludGVnZXI7XG52YXIgaXNOdW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOdW1lcmljKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTnVtZXJpYyA9IGlzTnVtZXJpYztcbnZhciBpc1Bvc2l0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQb3NpdGl2ZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlID0gaXNQb3NpdGl2ZTtcbnZhciBpc05hTiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTmFOKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTmFOID0gaXNOYU47XG52YXIgZXF1YWxTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFNjYWxhcikoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsU2NhbGFyID0gZXF1YWxTY2FsYXI7XG52YXIgbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtYmVyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm51bWJlciA9IG51bWJlcjtcblxudmFyIF9ib29sZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9vbGVhbikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuXG5leHBvcnRzW1wiYm9vbGVhblwiXSA9IF9ib29sZWFuO1xudmFyIGNvbXBsZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wbGV4KSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbXBsZXggPSBjb21wbGV4O1xudmFyIHNwbGl0VW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwbGl0VW5pdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXQgPSBzcGxpdFVuaXQ7XG52YXIgdW5hcnlQbHVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlQbHVzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVuYXJ5UGx1cyA9IHVuYXJ5UGx1cztcbnZhciBhcHBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFwcGx5KSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hcHBseSA9IGFwcGx5O1xudmFyIGN1YmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDdWJlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmN1YmUgPSBjdWJlO1xudmFyIGV4cG0xID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbTEpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXhwbTEgPSBleHBtMTtcbnZhciBsb2cxMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzEwKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMTAgPSBsb2cxMDtcbnZhciBtdWx0aXBseVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5U2NhbGFyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm11bHRpcGx5U2NhbGFyID0gbXVsdGlwbHlTY2FsYXI7XG52YXIgc2lnbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpZ24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgY29tcGxleDogY29tcGxleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2lnbiA9IHNpZ247XG52YXIgc3F1YXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1YXJlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxdWFyZSA9IHNxdWFyZTtcbnZhciBiaXROb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaXROb3QpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0Tm90ID0gYml0Tm90O1xudmFyIGFyZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFyZykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hcmcgPSBhcmc7XG52YXIgaW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pbSA9IGltO1xudmFyIG5vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5ub3QgPSBub3Q7XG52YXIgZmlsdGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlsdGVyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbnZhciBmb3JFYWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mb3JFYWNoID0gZm9yRWFjaDtcbnZhciBtYXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXApKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWFwID0gbWFwO1xudmFyIGVyZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVyZikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5lcmYgPSBlcmY7XG52YXIgZm9ybWF0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9ybWF0KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbnZhciBpc1ByaW1lID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQcmltZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc1ByaW1lID0gaXNQcmltZTtcbnZhciBhY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvcykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3MgPSBhY29zO1xudmFyIGFjb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY290KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY290ID0gYWNvdDtcbnZhciBhY3NjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNzYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY3NjID0gYWNzYztcbnZhciBhc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hc2VjID0gYXNlYztcbnZhciBhc2luID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNpbikoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzaW4gPSBhc2luO1xudmFyIGF0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmF0YW4gPSBhdGFuO1xudmFyIGF0YW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbmgpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hdGFuaCA9IGF0YW5oO1xudmFyIGNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3NoKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvc2ggPSBjb3NoO1xudmFyIGNvdGggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3RoKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb3RoID0gY290aDtcbnZhciBjc2NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3NjaCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3NjaCA9IGNzY2g7XG52YXIgc2VjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNlY2ggPSBzZWNoO1xudmFyIHNpbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNpbmggPSBzaW5oO1xudmFyIHRhbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRhbmggPSB0YW5oO1xudmFyIGNvbWJpbmF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbWJpbmF0aW9ucykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnMgPSBjb21iaW5hdGlvbnM7XG52YXIgcGlja1JhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpY2tSYW5kb20pKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5waWNrUmFuZG9tID0gcGlja1JhbmRvbTtcbnZhciByYW5kb21JbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb21JbnQpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yYW5kb21JbnQgPSByYW5kb21JbnQ7XG52YXIgTE4yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MTjIgPSBMTjI7XG52YXIgY2xvbmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDbG9uZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jbG9uZSA9IGNsb25lO1xudmFyIGhhc051bWVyaWNWYWx1ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhc051bWVyaWNWYWx1ZSkoe1xuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlID0gaGFzTnVtZXJpY1ZhbHVlO1xudmFyIHR5cGVPZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVPZikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG52YXIgc3RyaW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RyaW5nKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN0cmluZyA9IHN0cmluZztcbnZhciBmcmFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZyYWN0aW9uKSh7XG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZnJhY3Rpb24gPSBmcmFjdGlvbjtcbnZhciB1bmFyeU1pbnVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlNaW51cykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzID0gdW5hcnlNaW51cztcbnZhciBhZGRTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBZGRTY2FsYXIpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWRkU2NhbGFyID0gYWRkU2NhbGFyO1xudmFyIGV4cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5leHAgPSBleHA7XG52YXIgbG9nMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzIpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sb2cyID0gbG9nMjtcbnZhciBzcXJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxcnQgPSBzcXJ0O1xudmFyIGNvbmogPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25qKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbmogPSBjb25qO1xudmFyIGdldE1hdHJpeERhdGFUeXBlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGUpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGUgPSBnZXRNYXRyaXhEYXRhVHlwZTtcbnZhciBtb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kZSkoe1xuICBpc05hTjogaXNOYU4sXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tb2RlID0gbW9kZTtcbnZhciBwcmludCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByaW50KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnByaW50ID0gcHJpbnQ7XG52YXIgYWNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY29zaCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3NoID0gYWNvc2g7XG52YXIgYWNzY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY3NjaCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNzY2ggPSBhY3NjaDtcbnZhciBhc2luaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzaW5oID0gYXNpbmg7XG52YXIgY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvcyA9IGNvcztcbnZhciBjc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDc2MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNzYyA9IGNzYztcbnZhciBzaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2luID0gc2luO1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXAgPSBjb21iaW5hdGlvbnNXaXRoUmVwO1xudmFyIHJhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmRvbSkoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJhbmRvbSA9IHJhbmRvbTtcbnZhciBTUVJUMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNRUlQyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5TUVJUMiA9IFNRUlQyO1xudmFyIGlzTmVnYXRpdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05lZ2F0aXZlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTmVnYXRpdmUgPSBpc05lZ2F0aXZlO1xudmFyIFNwYXJzZU1hdHJpeCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzKSh7XG4gIE1hdHJpeDogTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLlNwYXJzZU1hdHJpeCA9IFNwYXJzZU1hdHJpeDtcbnZhciBtYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXRyaXgpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBNYXRyaXg6IE1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hdHJpeCA9IG1hdHJpeDtcbnZhciBjYnJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2JydCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5jYnJ0ID0gY2JydDtcbnZhciBnY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVHY2QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZ2NkID0gZ2NkO1xudmFyIG1vZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vZCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1vZCA9IG1vZDtcbnZhciBudGhSb290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnRoUm9vdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubnRoUm9vdCA9IG50aFJvb3Q7XG52YXIgeGdjZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVhnY2QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnhnY2QgPSB4Z2NkO1xudmFyIGJpdEFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdEFuZCkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaXRBbmQgPSBiaXRBbmQ7XG52YXIgYml0WG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0WG9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmJpdFhvciA9IGJpdFhvcjtcbnZhciBvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMub3IgPSBvcjtcbnZhciBjb25jYXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXQpKHtcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb25jYXQgPSBjb25jYXQ7XG52YXIgZGlhZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpYWcpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpYWcgPSBkaWFnO1xudmFyIGlkZW50aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSWRlbnRpdHkpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG52YXIgb25lcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9uZXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm9uZXMgPSBvbmVzO1xudmFyIHJlc2hhcGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXNoYXBlKSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucmVzaGFwZSA9IHJlc2hhcGU7XG52YXIgc2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpemUpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2l6ZSA9IHNpemU7XG52YXIgc3Vic2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3Vic2V0KSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zdWJzZXQgPSBzdWJzZXQ7XG52YXIgemVyb3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVaZXJvcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuemVyb3MgPSB6ZXJvcztcbnZhciB0byA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVRvKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50byA9IHRvO1xudmFyIHJvdW5kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm91bmQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5yb3VuZCA9IHJvdW5kO1xudmFyIGxlZnRTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxlZnRTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMubGVmdFNoaWZ0ID0gbGVmdFNoaWZ0O1xudmFyIHJpZ2h0TG9nU2hpZnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodExvZ1NoaWZ0KSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0ID0gcmlnaHRMb2dTaGlmdDtcbnZhciBjb21wYXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBGcmFjdGlvbjogRnJhY3Rpb24sXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZSA9IGNvbXBhcmU7XG52YXIgY29tcGFyZVRleHQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wYXJlVGV4dCkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZVRleHQgPSBjb21wYXJlVGV4dDtcbnZhciBzbWFsbGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU21hbGxlcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNtYWxsZXIgPSBzbWFsbGVyO1xudmFyIGxhcmdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxhcmdlcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxhcmdlciA9IGxhcmdlcjtcbnZhciB1bmVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5lcXVhbCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudW5lcXVhbCA9IHVuZXF1YWw7XG52YXIgbWF4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4KSh7XG4gIGxhcmdlcjogbGFyZ2VyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tYXggPSBtYXg7XG52YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgc21hbGxlcjogc21hbGxlclxufSk7XG5leHBvcnRzLkltbXV0YWJsZURlbnNlTWF0cml4ID0gSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG52YXIgRmlib25hY2NpSGVhcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcykoe1xuICBsYXJnZXI6IGxhcmdlcixcbiAgc21hbGxlcjogc21hbGxlclxufSk7XG5leHBvcnRzLkZpYm9uYWNjaUhlYXAgPSBGaWJvbmFjY2lIZWFwO1xudmFyIHNwYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZSkoe1xuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3BhcnNlID0gc3BhcnNlO1xudmFyIGFjb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdGgpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNvdGggPSBhY290aDtcbnZhciBhdGFuMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW4yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmF0YW4yID0gYXRhbjI7XG52YXIgc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZWMgPSBzZWM7XG52YXIgYWRkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hZGQgPSBhZGQ7XG52YXIgdHJhY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFjZSkoe1xuICBhZGQ6IGFkZCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRyYWNlID0gdHJhY2U7XG52YXIgY29tcG9zaXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wb3NpdGlvbikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBpc1Bvc2l0aXZlOiBpc1Bvc2l0aXZlLFxuICBsYXJnZXI6IGxhcmdlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb24gPSBjb21wb3NpdGlvbjtcbnZhciBpc1plcm8gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1plcm8pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaXNaZXJvID0gaXNaZXJvO1xudmFyIGFicyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFicykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hYnMgPSBhYnM7XG52YXIgZmxvb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGbG9vcikoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHJvdW5kOiByb3VuZCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZmxvb3IgPSBmbG9vcjtcbnZhciBtdWx0aXBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5KSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm11bHRpcGx5ID0gbXVsdGlwbHk7XG52YXIgZG90TXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RNdWx0aXBseSkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5ID0gZG90TXVsdGlwbHk7XG52YXIgcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yZSA9IHJlO1xudmFyIGZsYXR0ZW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGbGF0dGVuKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mbGF0dGVuID0gZmxhdHRlbjtcbnZhciByZXNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXNpemUpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeFxufSk7XG5leHBvcnRzLnJlc2l6ZSA9IHJlc2l6ZTtcbnZhciBzcXVlZXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1ZWV6ZSkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3F1ZWV6ZSA9IHNxdWVlemU7XG52YXIgcHJvZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb2QpKHtcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wcm9kID0gcHJvZDtcbnZhciBwb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQb3cpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBmcmFjdGlvbjogZnJhY3Rpb24sXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgbnVtYmVyOiBudW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnBvdyA9IHBvdztcbnZhciBkb3RQb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RQb3cpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBwb3c6IHBvdyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZG90UG93ID0gZG90UG93O1xudmFyIHJpZ2h0QXJpdGhTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0ID0gcmlnaHRBcml0aFNoaWZ0O1xudmFyIGNvbXBhcmVOYXR1cmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZU5hdHVyYWwpKHtcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZU5hdHVyYWwgPSBjb21wYXJlTmF0dXJhbDtcbnZhciBlcXVhbFRleHQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFRleHQpKHtcbiAgY29tcGFyZVRleHQ6IGNvbXBhcmVUZXh0LFxuICBpc1plcm86IGlzWmVybyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0ID0gZXF1YWxUZXh0O1xudmFyIGxhcmdlckVxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyRXEpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sYXJnZXJFcSA9IGxhcmdlckVxO1xudmFyIHBhcnRpdGlvblNlbGVjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnRpdGlvblNlbGVjdCkoe1xuICBjb21wYXJlOiBjb21wYXJlLFxuICBpc05hTjogaXNOYU4sXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3QgPSBwYXJ0aXRpb25TZWxlY3Q7XG52YXIgbWluID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWluKSh7XG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1pbiA9IG1pbjtcbnZhciBTcGEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFDbGFzcykoe1xuICBGaWJvbmFjY2lIZWFwOiBGaWJvbmFjY2lIZWFwLFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG59KTtcbmV4cG9ydHMuU3BhID0gU3BhO1xudmFyIGFzZWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYXNlY2ggPSBhc2VjaDtcbnZhciB0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudGFuID0gdGFuO1xudmFyIHNldFNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRTaXplKSh7XG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0U2l6ZSA9IHNldFNpemU7XG52YXIgbm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vcm0pKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBjb25qOiBjb25qLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBwb3c6IHBvdyxcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc3FydDogc3FydCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubm9ybSA9IG5vcm07XG52YXIgcXVhbnRpbGVTZXEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVRdWFudGlsZVNlcSkoe1xuICBhZGQ6IGFkZCxcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBwYXJ0aXRpb25TZWxlY3Q6IHBhcnRpdGlvblNlbGVjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucXVhbnRpbGVTZXEgPSBxdWFudGlsZVNlcTtcbnZhciBnYW1tYSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhbW1hKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgcG93OiBwb3csXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmdhbW1hID0gZ2FtbWE7XG52YXIgYmlnbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnbnVtYmVyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXIgPSBiaWdudW1iZXI7XG52YXIgbGNtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTGNtKSh7XG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxjbSA9IGxjbTtcbnZhciBiaXRPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0T3IgPSBiaXRPcjtcbnZhciBrcm9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlS3Jvbikoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5rcm9uID0ga3JvbjtcbnZhciB0cmFuc3Bvc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFuc3Bvc2UpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRyYW5zcG9zZSA9IHRyYW5zcG9zZTtcbnZhciBudW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtZXJpYykoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICBudW1iZXI6IG51bWJlclxufSk7XG5leHBvcnRzLm51bWVyaWMgPSBudW1lcmljO1xudmFyIGFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFuZCkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBub3Q6IG5vdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5hbmQgPSBhbmQ7XG52YXIgc21hbGxlckVxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU21hbGxlckVxKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc21hbGxlckVxID0gc21hbGxlckVxO1xudmFyIHNvcnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTb3J0KSh7XG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNvcnQgPSBzb3J0O1xudmFyIGNvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY290ID0gY290O1xudmFyIGRvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdCkoe1xuICBhZGQ6IGFkZCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3QgPSBkb3Q7XG52YXIgc3VtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtKSh7XG4gIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICBmcmFjdGlvbjogZnJhY3Rpb24sXG4gIGFkZDogYWRkLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN1bSA9IHN1bTtcbnZhciBmYWN0b3JpYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWN0b3JpYWwpKHtcbiAgZ2FtbWE6IGdhbW1hLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mYWN0b3JpYWwgPSBmYWN0b3JpYWw7XG52YXIgcGVybXV0YXRpb25zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGVybXV0YXRpb25zKSh7XG4gIGZhY3RvcmlhbDogZmFjdG9yaWFsLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wZXJtdXRhdGlvbnMgPSBwZXJtdXRhdGlvbnM7XG52YXIgY2VpbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNlaWwpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICByb3VuZDogcm91bmQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNlaWwgPSBjZWlsO1xudmFyIHN1YnRyYWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VidHJhY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcbnZhciBjcm9zcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyb3NzKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3Jvc3MgPSBjcm9zcztcbnZhciBjdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3RyYW5zcG9zZSkoe1xuICBjb25qOiBjb25qLFxuICB0cmFuc3Bvc2U6IHRyYW5zcG9zZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZSA9IGN0cmFuc3Bvc2U7XG52YXIgZXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsID0gZXF1YWw7XG52YXIgSW5kZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleENsYXNzKSh7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBJbW11dGFibGVEZW5zZU1hdHJpeFxufSk7XG5leHBvcnRzLkluZGV4ID0gSW5kZXg7XG52YXIgc2V0Q2FydGVzaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0Q2FydGVzaWFuKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW4gPSBzZXRDYXJ0ZXNpYW47XG52YXIgc2V0RGlzdGluY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaXN0aW5jdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0RGlzdGluY3QgPSBzZXREaXN0aW5jdDtcbnZhciBzZXRJc1N1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldElzU3Vic2V0KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXQgPSBzZXRJc1N1YnNldDtcbnZhciBzZXRQb3dlcnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFBvd2Vyc2V0KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXQgPSBzZXRQb3dlcnNldDtcbnZhciBpbmRleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaW5kZXggPSBpbmRleDtcbnZhciBmaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaXgpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY2VpbDogY2VpbCxcbiAgZmxvb3I6IGZsb29yLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5maXggPSBmaXg7XG52YXIgcmFuZ2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZSkoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbGFyZ2VyOiBsYXJnZXIsXG4gIGxhcmdlckVxOiBsYXJnZXJFcSxcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc21hbGxlckVxOiBzbWFsbGVyRXEsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJhbmdlID0gcmFuZ2U7XG52YXIgZGl2aWRlU2NhbGFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGl2aWRlU2NhbGFyKSh7XG4gIG51bWVyaWM6IG51bWVyaWMsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpdmlkZVNjYWxhciA9IGRpdmlkZVNjYWxhcjtcbnZhciBudGhSb290cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3RzKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm50aFJvb3RzID0gbnRoUm9vdHM7XG52YXIgbHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHNvbHZlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sc29sdmUgPSBsc29sdmU7XG52YXIgZGVlcEVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVlcEVxdWFsKSh7XG4gIGVxdWFsOiBlcXVhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZGVlcEVxdWFsID0gZGVlcEVxdWFsO1xudmFyIHNldERpZmZlcmVuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaWZmZXJlbmNlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlID0gc2V0RGlmZmVyZW5jZTtcbnZhciBzZXRNdWx0aXBsaWNpdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRNdWx0aXBsaWNpdHkpKHtcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHkgPSBzZXRNdWx0aXBsaWNpdHk7XG52YXIgaHlwb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVIeXBvdCkoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBpc1Bvc2l0aXZlOiBpc1Bvc2l0aXZlLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmh5cG90ID0gaHlwb3Q7XG52YXIgbHVwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVwKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhOiBTcGEsXG4gIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4LFxuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZCxcbiAgdW5hcnlNaW51czogdW5hcnlNaW51c1xufSk7XG5leHBvcnRzLmx1cCA9IGx1cDtcbnZhciBzbHUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTbHUpKHtcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBsYXJnZXJFcTogbGFyZ2VyRXEsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0cmFuc3Bvc2U6IHRyYW5zcG9zZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2x1ID0gc2x1O1xudmFyIGRldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURldCkoe1xuICBsdXA6IGx1cCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5kZXQgPSBkZXQ7XG52YXIgZGlzdGFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEaXN0YW5jZSkoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbnZhciBzdGlybGluZ1MyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RpcmxpbmdTMikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBmYWN0b3JpYWw6IGZhY3RvcmlhbCxcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHBvdzogcG93LFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN0aXJsaW5nUzIgPSBzdGlybGluZ1MyO1xudmFyIGNhdGFsYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDYXRhbGFuKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBjb21iaW5hdGlvbnM6IGNvbWJpbmF0aW9ucyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNhdGFsYW4gPSBjYXRhbGFuO1xudmFyIHhvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVhvcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy54b3IgPSB4b3I7XG52YXIgcm93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm93KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHJhbmdlOiByYW5nZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucm93ID0gcm93O1xudmFyIGRvdERpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdERpdmlkZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGUgPSBkb3REaXZpZGU7XG52YXIgVW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRDbGFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsOiBlcXVhbCxcbiAgZml4OiBmaXgsXG4gIGZvcm1hdDogZm9ybWF0LFxuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBudW1iZXI6IG51bWJlcixcbiAgcG93OiBwb3csXG4gIHJvdW5kOiByb3VuZCxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0XG59KTtcbmV4cG9ydHMuVW5pdCA9IFVuaXQ7XG52YXIgY3JlYXRlVW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyZWF0ZVVuaXQpKHtcbiAgVW5pdDogVW5pdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdCA9IGNyZWF0ZVVuaXQ7XG52YXIgc2V0U3ltRGlmZmVyZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFN5bURpZmZlcmVuY2UpKHtcbiAgSW5kZXg6IEluZGV4LFxuICBjb25jYXQ6IGNvbmNhdCxcbiAgc2V0RGlmZmVyZW5jZTogc2V0RGlmZmVyZW5jZSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2UgPSBzZXRTeW1EaWZmZXJlbmNlO1xudmFyIHFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXIpKHtcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbXBsZXg6IGNvbXBsZXgsXG4gIGNvbmo6IGNvbmosXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbDogZXF1YWwsXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgaXNaZXJvOiBpc1plcm8sXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNpZ246IHNpZ24sXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5xciA9IHFyO1xudmFyIGludiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUludikoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRldDogZGV0LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5pbnYgPSBpbnY7XG52YXIgZXhwbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cG0pKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBpZGVudGl0eTogaWRlbnRpdHksXG4gIGludjogaW52LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmV4cG0gPSBleHBtO1xudmFyIGRpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZSkoe1xuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBpbnY6IGludixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZGl2aWRlID0gZGl2aWRlO1xudmFyIG1lYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWFuKSh7XG4gIGFkZDogYWRkLFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWVhbiA9IG1lYW47XG52YXIgdmFyaWFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWYXJpYW5jZSkoe1xuICBhZGQ6IGFkZCxcbiAgYXBwbHk6IGFwcGx5LFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgaXNOYU46IGlzTmFOLFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudmFyaWFuY2UgPSB2YXJpYW5jZTtcbnZhciBzdGQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGQpKHtcbiAgc3FydDogc3FydCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB2YXJpYW5jZTogdmFyaWFuY2Vcbn0pO1xuZXhwb3J0cy5zdGQgPSBzdGQ7XG52YXIgbXVsdGlub21pYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aW5vbWlhbCkoe1xuICBhZGQ6IGFkZCxcbiAgZGl2aWRlOiBkaXZpZGUsXG4gIGZhY3RvcmlhbDogZmFjdG9yaWFsLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNQb3NpdGl2ZTogaXNQb3NpdGl2ZSxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbCA9IG11bHRpbm9taWFsO1xudmFyIGF0b21pY01hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdG9taWNNYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5hdG9taWNNYXNzID0gYXRvbWljTWFzcztcbnZhciBib2hyTWFnbmV0b24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2hyTWFnbmV0b24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvaHJNYWduZXRvbiA9IGJvaHJNYWduZXRvbjtcbnZhciBib2x0em1hbm4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2x0em1hbm4pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvbHR6bWFubiA9IGJvbHR6bWFubjtcbnZhciBjb25kdWN0YW5jZVF1YW50dW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW0pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bSA9IGNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBkZXV0ZXJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXV0ZXJvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmRldXRlcm9uTWFzcyA9IGRldXRlcm9uTWFzcztcbnZhciBlbGVjdHJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZWN0cm9uTWFzcyA9IGVsZWN0cm9uTWFzcztcbnZhciBmYXJhZGF5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFyYWRheSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmFyYWRheSA9IGZhcmFkYXk7XG52YXIgZmlyc3RSYWRpYXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaXJzdFJhZGlhdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmlyc3RSYWRpYXRpb24gPSBmaXJzdFJhZGlhdGlvbjtcbnZhciBncmF2aXRhdGlvbkNvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZ3Jhdml0YXRpb25Db25zdGFudCA9IGdyYXZpdGF0aW9uQ29uc3RhbnQ7XG52YXIgaGFydHJlZUVuZXJneSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhcnRyZWVFbmVyZ3kpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3kgPSBoYXJ0cmVlRW5lcmd5O1xudmFyIGtsaXR6aW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xpdHppbmcpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmtsaXR6aW5nID0ga2xpdHppbmc7XG52YXIgbWFnbmV0aWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnQgPSBtYWduZXRpY0NvbnN0YW50O1xudmFyIG1vbGFyTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubW9sYXJNYXNzID0gbW9sYXJNYXNzO1xudmFyIG1vbGFyUGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhclBsYW5ja0NvbnN0YW50ID0gbW9sYXJQbGFuY2tDb25zdGFudDtcbnZhciBuZXV0cm9uTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5ldXRyb25NYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5uZXV0cm9uTWFzcyA9IG5ldXRyb25NYXNzO1xudmFyIHBsYW5ja0NoYXJnZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0NoYXJnZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrQ2hhcmdlID0gcGxhbmNrQ2hhcmdlO1xudmFyIHBsYW5ja0xlbmd0aCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0xlbmd0aCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrTGVuZ3RoID0gcGxhbmNrTGVuZ3RoO1xudmFyIHBsYW5ja1RlbXBlcmF0dXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlID0gcGxhbmNrVGVtcGVyYXR1cmU7XG52YXIgcHJvdG9uTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb3Rvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnByb3Rvbk1hc3MgPSBwcm90b25NYXNzO1xudmFyIHJlZHVjZWRQbGFuY2tDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gcmVkdWNlZFBsYW5ja0NvbnN0YW50O1xudmFyIHNlY29uZFJhZGlhdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY29uZFJhZGlhdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uID0gc2Vjb25kUmFkaWF0aW9uO1xudmFyIHN0ZWZhbkJvbHR6bWFubiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0ZWZhbkJvbHR6bWFubikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc3RlZmFuQm9sdHptYW5uID0gc3RlZmFuQm9sdHptYW5uO1xudmFyIHZhY3V1bUltcGVkYW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhY3V1bUltcGVkYW5jZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMudmFjdXVtSW1wZWRhbmNlID0gdmFjdXVtSW1wZWRhbmNlO1xudmFyIGNvbHVtbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbHVtbikoe1xuICBJbmRleDogSW5kZXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICByYW5nZTogcmFuZ2UsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbHVtbiA9IGNvbHVtbjtcbnZhciB1c29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVVc29sdmUpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVzb2x2ZSA9IHVzb2x2ZTtcbnZhciBzZXRJbnRlcnNlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJbnRlcnNlY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBJbmRleDogSW5kZXgsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldEludGVyc2VjdCA9IHNldEludGVyc2VjdDtcbnZhciBsdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVzb2x2ZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGxzb2x2ZTogbHNvbHZlLFxuICBsdXA6IGx1cCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHNsdTogc2x1LFxuICB0eXBlZDogdHlwZWQsXG4gIHVzb2x2ZTogdXNvbHZlXG59KTtcbmV4cG9ydHMubHVzb2x2ZSA9IGx1c29sdmU7XG52YXIgZWlncyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVpZ3MpKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgYXRhbjogYXRhbixcbiAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgY29zOiBjb3MsXG4gIGVxdWFsOiBlcXVhbCxcbiAgaW52OiBpbnYsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc2luOiBzaW4sXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZWlncyA9IGVpZ3M7XG52YXIgaW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSW50ZXJzZWN0KSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzbWFsbGVyOiBzbWFsbGVyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmludGVyc2VjdCA9IGludGVyc2VjdDtcbnZhciBiZWxsTnVtYmVycyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJlbGxOdW1iZXJzKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNOZWdhdGl2ZTogaXNOZWdhdGl2ZSxcbiAgc3RpcmxpbmdTMjogc3RpcmxpbmdTMixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnMgPSBiZWxsTnVtYmVycztcbnZhciBhdm9nYWRybyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF2b2dhZHJvKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5hdm9nYWRybyA9IGF2b2dhZHJvO1xudmFyIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM7XG52YXIgZWxlY3RyaWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZWN0cmljQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZWN0cmljQ29uc3RhbnQgPSBlbGVjdHJpY0NvbnN0YW50O1xudmFyIGZlcm1pQ291cGxpbmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGZXJtaUNvdXBsaW5nKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5mZXJtaUNvdXBsaW5nID0gZmVybWlDb3VwbGluZztcbnZhciBncmF2aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0eSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZ3Jhdml0eSA9IGdyYXZpdHk7XG52YXIgbG9zY2htaWR0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9zY2htaWR0KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5sb3NjaG1pZHQgPSBsb3NjaG1pZHQ7XG52YXIgbW9sYXJNYXNzQzEyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJNYXNzQzEyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NDMTIgPSBtb2xhck1hc3NDMTI7XG52YXIgbnVjbGVhck1hZ25ldG9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVjbGVhck1hZ25ldG9uKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b24gPSBudWNsZWFyTWFnbmV0b247XG52YXIgcGxhbmNrTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja01hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja01hc3MgPSBwbGFuY2tNYXNzO1xudmFyIHF1YW50dW1PZkNpcmN1bGF0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnF1YW50dW1PZkNpcmN1bGF0aW9uID0gcXVhbnR1bU9mQ2lyY3VsYXRpb247XG52YXIgc3BlZWRPZkxpZ2h0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BlZWRPZkxpZ2h0KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5zcGVlZE9mTGlnaHQgPSBzcGVlZE9mTGlnaHQ7XG52YXIgd2llbkRpc3BsYWNlbWVudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLndpZW5EaXNwbGFjZW1lbnQgPSB3aWVuRGlzcGxhY2VtZW50O1xudmFyIGxvZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG52YXIgdW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRGdW5jdGlvbikoe1xuICBVbml0OiBVbml0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bml0ID0gdW5pdDtcbnZhciBzcXJ0bSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxcnRtKSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBpbnY6IGludixcbiAgbWF4OiBtYXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3FydDogc3FydCxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcXJ0bSA9IHNxcnRtO1xudmFyIGtsZGl2ZXJnZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUtsZGl2ZXJnZW5jZSkoe1xuICBkaXZpZGU6IGRpdmlkZSxcbiAgZG90RGl2aWRlOiBkb3REaXZpZGUsXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICBsb2c6IGxvZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VtOiBzdW0sXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmtsZGl2ZXJnZW5jZSA9IGtsZGl2ZXJnZW5jZTtcbnZhciBib2hyUmFkaXVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9oclJhZGl1cykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuYm9oclJhZGl1cyA9IGJvaHJSYWRpdXM7XG52YXIgZWxlbWVudGFyeUNoYXJnZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2UpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2UgPSBlbGVtZW50YXJ5Q2hhcmdlO1xudmFyIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5pbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBtb2xhclZvbHVtZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyVm9sdW1lKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhclZvbHVtZSA9IG1vbGFyVm9sdW1lO1xudmFyIHBsYW5ja1RpbWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tUaW1lKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5wbGFuY2tUaW1lID0gcGxhbmNrVGltZTtcbnZhciB0aG9tc29uQ3Jvc3NTZWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbiA9IHRob21zb25Dcm9zc1NlY3Rpb247XG52YXIgbG9nMXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cxcCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBsb2c6IGxvZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMXAgPSBsb2cxcDtcbnZhciBtZWRpYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWRpYW4pKHtcbiAgYWRkOiBhZGQsXG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIGRpdmlkZTogZGl2aWRlLFxuICBwYXJ0aXRpb25TZWxlY3Q6IHBhcnRpdGlvblNlbGVjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWVkaWFuID0gbWVkaWFuO1xudmFyIGdhc0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2FzQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmdhc0NvbnN0YW50ID0gZ2FzQ29uc3RhbnQ7XG52YXIgcGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrQ29uc3RhbnQgPSBwbGFuY2tDb25zdGFudDtcbnZhciBzZXRVbmlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFVuaW9uKSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29uY2F0OiBjb25jYXQsXG4gIHNldEludGVyc2VjdDogc2V0SW50ZXJzZWN0LFxuICBzZXRTeW1EaWZmZXJlbmNlOiBzZXRTeW1EaWZmZXJlbmNlLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0VW5pb24gPSBzZXRVbmlvbjtcbnZhciBtYWduZXRpY0ZsdXhRdWFudHVtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bSA9IG1hZ25ldGljRmx1eFF1YW50dW07XG52YXIgY291bG9tYiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdWxvbWIpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNvdWxvbWIgPSBjb3Vsb21iO1xudmFyIG1hZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZCkoe1xuICBhYnM6IGFicyxcbiAgbWFwOiBtYXAsXG4gIG1lZGlhbjogbWVkaWFuLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hZCA9IG1hZDtcbnZhciByeWRiZXJnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUnlkYmVyZykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucnlkYmVyZyA9IHJ5ZGJlcmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FjY2Vzc29yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBY2Nlc3Nvck5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBcnJheVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBcnJheTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FycmF5Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBcnJheU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0JpZ051bWJlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNCaWdOdW1iZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCbG9ja05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQmxvY2tOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQm9vbGVhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNCb29sZWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ2hhaW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQ2hhaW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb2xsZWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbGxlY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb21wbGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbXBsZXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb25kaXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQ29uZGl0aW9uYWxOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ29uc3RhbnROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbnN0YW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRGF0ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RlbnNlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0RlbnNlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRnJhY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnJhY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNGdW5jdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNGdW5jdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Z1bmN0aW9uTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNGdW5jdGlvbk5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNIZWxwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0hlbHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbmRleFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNJbmRleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0luZGV4Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNJbmRleE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNNYXRyaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTnVsbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOdWxsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc051bWJlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1N0cmluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNTdHJpbmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNVbmRlZmluZWRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzVW5kZWZpbmVkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT2JqZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc09iamVjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzT2JqZWN0Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09wZXJhdG9yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNPcGVyYXRvck5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNQYXJlbnRoZXNpc05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUGFyZW50aGVzaXNOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmFuZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmFuZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNSYW5nZU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmFuZ2VOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVnRXhwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc1JlZ0V4cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1Jlc3VsdFNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNSZXN1bHRTZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNTcGFyc2VNYXRyaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzU3BhcnNlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU3ltYm9sTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNTeW1ib2xOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNVbml0O1xuICB9XG59KTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQXJndW1lbnRzRXJyb3IgPSBBcmd1bWVudHNFcnJvcjtcblxuLyoqXG4gKiBDcmVhdGUgYSBzeW50YXggZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiA8Zm4+ICg8Y291bnQ+IHByb3ZpZGVkLCA8bWluPi08bWF4PiBleHBlY3RlZCknXG4gKiBAcGFyYW0ge3N0cmluZ30gZm4gICAgIEZ1bmN0aW9uIG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAgQWN0dWFsIGFyZ3VtZW50IGNvdW50XG4gKiBAcGFyYW0ge251bWJlcn0gbWluICAgIE1pbmltdW0gcmVxdWlyZWQgYXJndW1lbnQgY291bnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAgTWF4aW11bSByZXF1aXJlZCBhcmd1bWVudCBjb3VudFxuICogQGV4dGVuZHMgRXJyb3JcbiAqL1xuZnVuY3Rpb24gQXJndW1lbnRzRXJyb3IoZm4sIGNvdW50LCBtaW4sIG1heCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJndW1lbnRzRXJyb3IpKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgfVxuXG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb3VudCA9IGNvdW50O1xuICB0aGlzLm1pbiA9IG1pbjtcbiAgdGhpcy5tYXggPSBtYXg7XG4gIHRoaXMubWVzc2FnZSA9ICdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGluIGZ1bmN0aW9uICcgKyBmbiArICcgKCcgKyBjb3VudCArICcgcHJvdmlkZWQsICcgKyBtaW4gKyAobWF4ICE9PSB1bmRlZmluZWQgJiYgbWF4ICE9PSBudWxsID8gJy0nICsgbWF4IDogJycpICsgJyBleHBlY3RlZCknO1xuICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG59XG5cbkFyZ3VtZW50c0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuQXJndW1lbnRzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3I7XG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUubmFtZSA9ICdBcmd1bWVudHNFcnJvcic7XG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUuaXNBcmd1bWVudHNFcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRpbWVuc2lvbkVycm9yID0gRGltZW5zaW9uRXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnRGltZW5zaW9uIG1pc21hdGNoICg8YWN0dWFsIHNpemU+ICE9IDxleHBlY3RlZCBzaXplPiknXG4gKiBAcGFyYW0ge251bWJlciB8IG51bWJlcltdfSBhY3R1YWwgICAgICAgIFRoZSBhY3R1YWwgc2l6ZVxuICogQHBhcmFtIHtudW1iZXIgfCBudW1iZXJbXX0gZXhwZWN0ZWQgICAgICBUaGUgZXhwZWN0ZWQgc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IFtyZWxhdGlvbj0nIT0nXSAgICAgICAgICBPcHRpb25hbCByZWxhdGlvbiBiZXR3ZWVuIGFjdHVhbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXhwZWN0ZWQgc2l6ZTogJyE9JywgJzwnLCBldGMuXG4gKiBAZXh0ZW5kcyBSYW5nZUVycm9yXG4gKi9cbmZ1bmN0aW9uIERpbWVuc2lvbkVycm9yKGFjdHVhbCwgZXhwZWN0ZWQsIHJlbGF0aW9uKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEaW1lbnNpb25FcnJvcikpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICB9XG5cbiAgdGhpcy5hY3R1YWwgPSBhY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgdGhpcy5yZWxhdGlvbiA9IHJlbGF0aW9uO1xuICB0aGlzLm1lc3NhZ2UgPSAnRGltZW5zaW9uIG1pc21hdGNoICgnICsgKEFycmF5LmlzQXJyYXkoYWN0dWFsKSA/ICdbJyArIGFjdHVhbC5qb2luKCcsICcpICsgJ10nIDogYWN0dWFsKSArICcgJyArICh0aGlzLnJlbGF0aW9uIHx8ICchPScpICsgJyAnICsgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpID8gJ1snICsgZXhwZWN0ZWQuam9pbignLCAnKSArICddJyA6IGV4cGVjdGVkKSArICcpJztcbiAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xufVxuXG5EaW1lbnNpb25FcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpO1xuRGltZW5zaW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZ2VFcnJvcjtcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0RpbWVuc2lvbkVycm9yJztcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5pc0RpbWVuc2lvbkVycm9yID0gdHJ1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhFcnJvciA9IEluZGV4RXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnSW5kZXggb3V0IG9mIHJhbmdlIChpbmRleCA8IG1pbiknXG4gKiAgICAgJ0luZGV4IG91dCBvZiByYW5nZSAoaW5kZXggPCBtYXgpJ1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAgICAgVGhlIGFjdHVhbCBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gICBNaW5pbXVtIGluZGV4IChpbmNsdWRlZClcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAgICAgTWF4aW11bSBpbmRleCAoZXhjbHVkZWQpXG4gKiBAZXh0ZW5kcyBSYW5nZUVycm9yXG4gKi9cbmZ1bmN0aW9uIEluZGV4RXJyb3IoaW5kZXgsIG1pbiwgbWF4KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmRleEVycm9yKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gIH1cblxuICB0aGlzLmluZGV4ID0gaW5kZXg7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhpcy5taW4gPSAwO1xuICAgIHRoaXMubWF4ID0gbWluO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWluID0gbWluO1xuICAgIHRoaXMubWF4ID0gbWF4O1xuICB9XG5cbiAgaWYgKHRoaXMubWluICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA8IHRoaXMubWluKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gJ0luZGV4IG91dCBvZiByYW5nZSAoJyArIHRoaXMuaW5kZXggKyAnIDwgJyArIHRoaXMubWluICsgJyknO1xuICB9IGVsc2UgaWYgKHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA+PSB0aGlzLm1heCkge1xuICAgIHRoaXMubWVzc2FnZSA9ICdJbmRleCBvdXQgb2YgcmFuZ2UgKCcgKyB0aGlzLmluZGV4ICsgJyA+ICcgKyAodGhpcy5tYXggLSAxKSArICcpJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSAnSW5kZXggb3V0IG9mIHJhbmdlICgnICsgdGhpcy5pbmRleCArICcpJztcbiAgfVxuXG4gIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbn1cblxuSW5kZXhFcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpO1xuSW5kZXhFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5nZUVycm9yO1xuSW5kZXhFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbmRleEVycm9yJztcbkluZGV4RXJyb3IucHJvdG90eXBlLmlzSW5kZXhFcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHBDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdIZWxwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3BhcnNlJ107XG52YXIgY3JlYXRlSGVscENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZTtcblxuICAvKipcbiAgICogRG9jdW1lbnRhdGlvbiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGRvYyAgT2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllczpcbiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBjYXRlZ29yeVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBkZXNjcmlwdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IHN5bnRheFxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IGV4YW1wbGVzXG4gICAqICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmdbXX0gc2VlYWxzb1xuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGZ1bmN0aW9uIEhlbHAoZG9jKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhlbHApKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmICghZG9jKSB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiZG9jXCIgbWlzc2luZycpO1xuICAgIHRoaXMuZG9jID0gZG9jO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnR5cGUgPSAnSGVscCc7XG4gIEhlbHAucHJvdG90eXBlLmlzSGVscCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgSGVscCBvYmplY3RcbiAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIGEgc3RyaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIEhlbHAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkb2MgPSB0aGlzLmRvYyB8fCB7fTtcbiAgICB2YXIgZGVzYyA9ICdcXG4nO1xuXG4gICAgaWYgKGRvYy5uYW1lKSB7XG4gICAgICBkZXNjICs9ICdOYW1lOiAnICsgZG9jLm5hbWUgKyAnXFxuXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLmNhdGVnb3J5KSB7XG4gICAgICBkZXNjICs9ICdDYXRlZ29yeTogJyArIGRvYy5jYXRlZ29yeSArICdcXG5cXG4nO1xuICAgIH1cblxuICAgIGlmIChkb2MuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgKz0gJ0Rlc2NyaXB0aW9uOlxcbiAgICAnICsgZG9jLmRlc2NyaXB0aW9uICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5zeW50YXgpIHtcbiAgICAgIGRlc2MgKz0gJ1N5bnRheDpcXG4gICAgJyArIGRvYy5zeW50YXguam9pbignXFxuICAgICcpICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5leGFtcGxlcykge1xuICAgICAgZGVzYyArPSAnRXhhbXBsZXM6XFxuJztcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5leGFtcGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXhwciA9IGRvYy5leGFtcGxlc1tpXTtcbiAgICAgICAgZGVzYyArPSAnICAgICcgKyBleHByICsgJ1xcbic7XG4gICAgICAgIHZhciByZXMgPSB2b2lkIDA7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBub3RlOiByZXMgY2FuIGJlIHVuZGVmaW5lZCB3aGVuIGBleHByYCBpcyBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgICByZXMgPSBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVzID0gZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCAmJiAhKDAsIF9pcy5pc0hlbHApKHJlcykpIHtcbiAgICAgICAgICBkZXNjICs9ICcgICAgICAgICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHJlcywge1xuICAgICAgICAgICAgcHJlY2lzaW9uOiAxNFxuICAgICAgICAgIH0pICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVzYyArPSAnXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLnNlZWFsc28gJiYgZG9jLnNlZWFsc28ubGVuZ3RoKSB7XG4gICAgICBkZXNjICs9ICdTZWUgYWxzbzogJyArIGRvYy5zZWVhbHNvLmpvaW4oJywgJykgKyAnXFxuJztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzYztcbiAgfTtcbiAgLyoqXG4gICAqIEV4cG9ydCB0aGUgaGVscCBvYmplY3QgdG8gSlNPTlxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JqID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuZG9jKTtcbiAgICBvYmoubWF0aGpzID0gJ0hlbHAnO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIEhlbHAgb2JqZWN0IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvblxuICAgKiBAcmV0dXJucyB7SGVscH0gUmV0dXJucyBhIG5ldyBIZWxwIG9iamVjdFxuICAgKi9cblxuXG4gIEhlbHAuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHZhciBkb2MgPSB7fTtcblxuICAgIGZvciAodmFyIHByb3AgaW4ganNvbikge1xuICAgICAgaWYgKHByb3AgIT09ICdtYXRoanMnKSB7XG4gICAgICAgIC8vIGlnbm9yZSBtYXRoanMgZmllbGRcbiAgICAgICAgZG9jW3Byb3BdID0ganNvbltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEhlbHAoZG9jKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEhlbHAgb2JqZWN0XG4gICAqL1xuXG5cbiAgSGVscC5wcm90b3R5cGUudmFsdWVPZiA9IEhlbHAucHJvdG90eXBlLnRvU3RyaW5nO1xuICByZXR1cm4gSGVscDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHBDbGFzcyA9IGNyZWF0ZUhlbHBDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2VyQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBuYW1lID0gJ1BhcnNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZSddO1xudmFyIGNyZWF0ZVBhcnNlckNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFBhcnNlclxuICAgKiBQYXJzZXIgY29udGFpbnMgbWV0aG9kcyB0byBldmFsdWF0ZSBvciBwYXJzZSBleHByZXNzaW9ucywgYW5kIGhhcyBhIG51bWJlclxuICAgKiBvZiBjb252ZW5pZW5jZSBtZXRob2RzIHRvIGdldCwgc2V0LCBhbmQgcmVtb3ZlIHZhcmlhYmxlcyBmcm9tIG1lbW9yeS4gUGFyc2VyXG4gICAqIGtlZXBzIGEgc2NvcGUgY29udGFpbmluZyB2YXJpYWJsZXMgaW4gbWVtb3J5LCB3aGljaCBpcyB1c2VkIGZvciBhbGxcbiAgICogZXZhbHVhdGlvbnMuXG4gICAqXG4gICAqIE1ldGhvZHM6XG4gICAqICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlci5ldmFsdWF0ZShleHByKSAgLy8gZXZhbHVhdGUgYW4gZXhwcmVzc2lvblxuICAgKiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlci5nZXQobmFtZSkgICAgICAgIC8vIHJldHJpZXZlIGEgdmFyaWFibGUgZnJvbSB0aGUgcGFyc2VyXG4gICAqICAgIGNvbnN0IHZhbHVlcyA9IHBhcnNlci5nZXRBbGwoKSAgICAgICAgLy8gcmV0cmlldmUgYWxsIGRlZmluZWQgdmFyaWFibGVzXG4gICAqICAgIHBhcnNlci5zZXQobmFtZSwgdmFsdWUpICAgICAgICAgICAgICAgLy8gc2V0IGEgdmFyaWFibGUgaW4gdGhlIHBhcnNlclxuICAgKiAgICBwYXJzZXIucmVtb3ZlKG5hbWUpICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIGEgdmFyaWFibGUgZnJvbSB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXJzIHNjb3BlXG4gICAqICAgIHBhcnNlci5jbGVhcigpICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHBhcnNlcnMgc2NvcGVcbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICogICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAqICAgIC8vIE5vdGU6IHRoZXJlIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHdoaWNoIGNhbiBiZSB1c2VkIGluc3RlYWQ6XG4gICAqICAgIC8vIGNvbnN0IHBhcnNlciA9IG5ldyBtYXRoLnBhcnNlcigpXG4gICAqXG4gICAqICAgIC8vIGV2YWx1YXRlIGV4cHJlc3Npb25zXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgICAgICAgIC8vIDVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCcyIGluY2ggaW4gY20nKSAgICAgICAgICAgLy8gNS4wOCBjbVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2Nvcyg0NSBkZWcpJykgICAgICAgICAgICAvLyAwLjcwNzEwNjc4MTE4NjU0NzZcbiAgICpcbiAgICogICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgneCA9IDcgLyAyJykgICAgICAgICAgICAgIC8vIDMuNVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggKyAzJykgICAgICAgICAgICAgICAgICAvLyA2LjVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgLy8gZih4LCB5KVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2YoMiwgMyknKSAgICAgICAgICAgICAgICAvLyA4XG4gICAqXG4gICAqICAgIC8vIGdldCBhbmQgc2V0IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgIGNvbnN0IHggPSBwYXJzZXIuZ2V0KCd4JykgICAgICAgICAgICAgICAgIC8vIDdcbiAgICogICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb25cbiAgICogICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAgLy8gOVxuICAgKiAgICBwYXJzZXIuc2V0KCdoJywgNTAwKVxuICAgKiAgICBjb25zdCBpID0gcGFyc2VyLmV2YWx1YXRlKCdoIC8gMicpICAgICAgICAvLyAyNTBcbiAgICogICAgcGFyc2VyLnNldCgnaGVsbG8nLCBmdW5jdGlvbiAobmFtZSkge1xuICAgKiAgICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnISdcbiAgICogICAgfSlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdoZWxsbyhcInVzZXJcIiknKSAgICAgICAgICAvLyBcImhlbGxvLCB1c2VyIVwiXG4gICAqXG4gICAqICAgIC8vIGNsZWFyIGRlZmluZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXNcbiAgICogICAgcGFyc2VyLmNsZWFyKClcbiAgICpcbiAgICovXG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFyc2VyKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLnNjb3BlID0ge307XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS50eXBlID0gJ1BhcnNlcic7XG4gIFBhcnNlci5wcm90b3R5cGUuaXNQYXJzZXIgPSB0cnVlO1xuICAvKipcbiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJuIHRoZSBwYXJzZWQgZnVuY3Rpb24gbm9kZS5cbiAgICogVGhlIG5vZGUgdHJlZSBjYW4gYmUgY29tcGlsZWQgdmlhIGBjb2RlID0gbm9kZS5jb21waWxlKG1hdGgpYCxcbiAgICogYW5kIHRoZSBjb21waWxlZCBjb2RlIGNhbiBiZSBleGVjdXRlZCBhcyBgY29kZS5ldmFsdWF0ZShbc2NvcGVdKWBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIucGFyc2UgaXMgZGVwcmVjYXRlZC4gVXNlIG1hdGgucGFyc2UgaW5zdGVhZC4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBjb21waWxlIGFuIGV4cHJlc3Npb24sIHJldHVybiB0aGUgY29tcGlsZWQgamF2YXNjcmlwdCBjb2RlLlxuICAgKiBUaGUgbm9kZSBjYW4gYmUgZXZhbHVhdGVkIHZpYSBjb2RlLmV2YWx1YXRlKFtzY29wZV0pXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHByXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogZnVuY3Rpb259fSBjb2RlXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIFBhcnNlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIuY29tcGlsZSBpcyBkZXByZWNhdGVkLiBVc2UgbWF0aC5jb21waWxlIGluc3RlYWQuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBQYXJzZSBhbmQgZXZhbHVhdGUgdGhlIGdpdmVuIGV4cHJlc3Npb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgICBBIHN0cmluZyBjb250YWluaW5nIGFuIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIFwiMiszXCJcbiAgICogQHJldHVybiB7Kn0gcmVzdWx0ICAgICBUaGUgcmVzdWx0LCBvciB1bmRlZmluZWQgd2hlbiB0aGUgZXhwcmVzc2lvbiB3YXMgZW1wdHlcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgcmV0dXJuIHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZSh0aGlzLnNjb3BlKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgZ2l2ZW4gZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwciAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gZXhwcmVzc2lvbiwgZm9yIGV4YW1wbGUgXCIyKzNcIlxuICAgKiBAcmV0dXJuIHsqfSByZXN1bHQgICAgIFRoZSByZXN1bHQsIG9yIHVuZGVmaW5lZCB3aGVuIHRoZSBleHByZXNzaW9uIHdhcyBlbXB0eVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5ldmFsID0gZnVuY3Rpb24gKGV4cHIpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBQYXJzZXIuZXZhbCBpcyByZW5hbWVkIHRvIFBhcnNlci5ldmFsdWF0ZS4gUGxlYXNlIHVzZSB0aGUgbmV3IG1ldGhvZCBuYW1lLicpO1xuICAgIHJldHVybiB0aGlzLmV2YWx1YXRlKGV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgdmFyaWFibGUgKGEgZnVuY3Rpb24gb3IgdmFyaWFibGUpIGJ5IG5hbWUgZnJvbSB0aGUgcGFyc2VycyBzY29wZS5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgd2hlbiBub3QgZm91bmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7KiB8IHVuZGVmaW5lZH0gdmFsdWVcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgcmV0dXJuIG5hbWUgaW4gdGhpcy5zY29wZSA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKHRoaXMuc2NvcGUsIG5hbWUpIDogdW5kZWZpbmVkO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgbWFwIHdpdGggYWxsIGRlZmluZWQgdmFyaWFibGVzXG4gICAqIEByZXR1cm4ge09iamVjdH0gdmFsdWVzXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5nZXRBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfb2JqZWN0LmV4dGVuZCkoe30sIHRoaXMuc2NvcGUpO1xuICB9O1xuICAvKipcbiAgICogU2V0IGEgc3ltYm9sIChhIGZ1bmN0aW9uIG9yIHZhcmlhYmxlKSBieSBuYW1lIGZyb20gdGhlIHBhcnNlcnMgc2NvcGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7KiB8IHVuZGVmaW5lZH0gdmFsdWVcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KSh0aGlzLnNjb3BlLCBuYW1lLCB2YWx1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmUgYSB2YXJpYWJsZSBmcm9tIHRoZSBwYXJzZXJzIHNjb3BlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGRlbGV0ZSB0aGlzLnNjb3BlW25hbWVdO1xuICB9O1xuICAvKipcbiAgICogQ2xlYXIgdGhlIHNjb3BlIHdpdGggdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9uYW1lIGluIHRoaXMuc2NvcGUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5zY29wZSwgX25hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNjb3BlW19uYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlckNsYXNzID0gY3JlYXRlUGFyc2VyQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkluZmluaXR5RG9jcyA9IHZvaWQgMDtcbnZhciBJbmZpbml0eURvY3MgPSB7XG4gIG5hbWU6ICdJbmZpbml0eScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0luZmluaXR5J10sXG4gIGRlc2NyaXB0aW9uOiAnSW5maW5pdHksIGEgbnVtYmVyIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciB0aGF0IGNhbiBiZSBoYW5kbGVkIGJ5IGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ0luZmluaXR5JywgJzEgLyAwJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5JbmZpbml0eURvY3MgPSBJbmZpbml0eURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMTBEb2NzID0gdm9pZCAwO1xudmFyIExOMTBEb2NzID0ge1xuICBuYW1lOiAnTE4xMCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0xOMTAnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiAxMCwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAyLjMwMicsXG4gIGV4YW1wbGVzOiBbJ0xOMTAnLCAnbG9nKDEwKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuTE4xMERvY3MgPSBMTjEwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTE4yRG9jcyA9IHZvaWQgMDtcbnZhciBMTjJEb2NzID0ge1xuICBuYW1lOiAnTE4yJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnTE4yJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjY5MycsXG4gIGV4YW1wbGVzOiBbJ0xOMicsICdsb2coMiknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxOMkRvY3MgPSBMTjJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cxMEVEb2NzID0gdm9pZCAwO1xudmFyIExPRzEwRURvY3MgPSB7XG4gIG5hbWU6ICdMT0cxMEUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMT0cxMEUnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBFLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDAuNDM0JyxcbiAgZXhhbXBsZXM6IFsnTE9HMTBFJywgJ2xvZyhlLCAxMCknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxPRzEwRURvY3MgPSBMT0cxMEVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cyRURvY3MgPSB2b2lkIDA7XG52YXIgTE9HMkVEb2NzID0ge1xuICBuYW1lOiAnTE9HMkUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMT0cyRSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgRSwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAxLjQ0MicsXG4gIGV4YW1wbGVzOiBbJ0xPRzJFJywgJ2xvZyhlLCAyKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuTE9HMkVEb2NzID0gTE9HMkVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5OYU5Eb2NzID0gdm9pZCAwO1xudmFyIE5hTkRvY3MgPSB7XG4gIG5hbWU6ICdOYU4nLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydOYU4nXSxcbiAgZGVzY3JpcHRpb246ICdOb3QgYSBudW1iZXInLFxuICBleGFtcGxlczogWydOYU4nLCAnMCAvIDAnXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLk5hTkRvY3MgPSBOYU5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TUVJUMTJEb2NzID0gdm9pZCAwO1xudmFyIFNRUlQxMkRvY3MgPSB7XG4gIG5hbWU6ICdTUVJUMV8yJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnU1FSVDFfMiddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIHNxdWFyZSByb290IG9mIDEvMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjcwNycsXG4gIGV4YW1wbGVzOiBbJ1NRUlQxXzInLCAnc3FydCgxLzIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5TUVJUMTJEb2NzID0gU1FSVDEyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDJEb2NzID0gdm9pZCAwO1xudmFyIFNRUlQyRG9jcyA9IHtcbiAgbmFtZTogJ1NRUlQyJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnU1FSVDInXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiAyLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDEuNDE0JyxcbiAgZXhhbXBsZXM6IFsnU1FSVDInLCAnc3FydCgyKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuU1FSVDJEb2NzID0gU1FSVDJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lRG9jcyA9IHZvaWQgMDtcbnZhciBlRG9jcyA9IHtcbiAgbmFtZTogJ2UnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydlJ10sXG4gIGRlc2NyaXB0aW9uOiAnRXVsZXJcXCdzIG51bWJlciwgdGhlIGJhc2Ugb2YgdGhlIG5hdHVyYWwgbG9nYXJpdGhtLiBBcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDIuNzE4MjgnLFxuICBleGFtcGxlczogWydlJywgJ2UgXiAyJywgJ2V4cCgyKScsICdsb2coZSknXSxcbiAgc2VlYWxzbzogWydleHAnXVxufTtcbmV4cG9ydHMuZURvY3MgPSBlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFsc2VEb2NzID0gdm9pZCAwO1xudmFyIGZhbHNlRG9jcyA9IHtcbiAgbmFtZTogJ2ZhbHNlJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnZmFsc2UnXSxcbiAgZGVzY3JpcHRpb246ICdCb29sZWFuIHZhbHVlIGZhbHNlJyxcbiAgZXhhbXBsZXM6IFsnZmFsc2UnXSxcbiAgc2VlYWxzbzogWyd0cnVlJ11cbn07XG5leHBvcnRzLmZhbHNlRG9jcyA9IGZhbHNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaURvY3MgPSB2b2lkIDA7XG52YXIgaURvY3MgPSB7XG4gIG5hbWU6ICdpJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnaSddLFxuICBkZXNjcmlwdGlvbjogJ0ltYWdpbmFyeSB1bml0LCBkZWZpbmVkIGFzIGkqaT0tMS4gQSBjb21wbGV4IG51bWJlciBpcyBkZXNjcmliZWQgYXMgYSArIGIqaSwgd2hlcmUgYSBpcyB0aGUgcmVhbCBwYXJ0LCBhbmQgYiBpcyB0aGUgaW1hZ2luYXJ5IHBhcnQuJyxcbiAgZXhhbXBsZXM6IFsnaScsICdpICogaScsICdzcXJ0KC0xKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaURvY3MgPSBpRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVsbERvY3MgPSB2b2lkIDA7XG52YXIgbnVsbERvY3MgPSB7XG4gIG5hbWU6ICdudWxsJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnbnVsbCddLFxuICBkZXNjcmlwdGlvbjogJ1ZhbHVlIG51bGwnLFxuICBleGFtcGxlczogWydudWxsJ10sXG4gIHNlZWFsc286IFsndHJ1ZScsICdmYWxzZSddXG59O1xuZXhwb3J0cy5udWxsRG9jcyA9IG51bGxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5waGlEb2NzID0gdm9pZCAwO1xudmFyIHBoaURvY3MgPSB7XG4gIG5hbWU6ICdwaGknLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydwaGknXSxcbiAgZGVzY3JpcHRpb246ICdQaGkgaXMgdGhlIGdvbGRlbiByYXRpby4gVHdvIHF1YW50aXRpZXMgYXJlIGluIHRoZSBnb2xkZW4gcmF0aW8gaWYgdGhlaXIgcmF0aW8gaXMgdGhlIHNhbWUgYXMgdGhlIHJhdGlvIG9mIHRoZWlyIHN1bSB0byB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcXVhbnRpdGllcy4gUGhpIGlzIGRlZmluZWQgYXMgYCgxICsgc3FydCg1KSkgLyAyYCBhbmQgaXMgYXBwcm94aW1hdGVseSAxLjYxODAzNC4uLicsXG4gIGV4YW1wbGVzOiBbJ3BoaSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMucGhpRG9jcyA9IHBoaURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpRG9jcyA9IHZvaWQgMDtcbnZhciBwaURvY3MgPSB7XG4gIG5hbWU6ICdwaScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3BpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIG51bWJlciBwaSBpcyBhIG1hdGhlbWF0aWNhbCBjb25zdGFudCB0aGF0IGlzIHRoZSByYXRpbyBvZiBhIGNpcmNsZVxcJ3MgY2lyY3VtZmVyZW5jZSB0byBpdHMgZGlhbWV0ZXIsIGFuZCBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDMuMTQxNTknLFxuICBleGFtcGxlczogWydwaScsICdzaW4ocGkvMiknXSxcbiAgc2VlYWxzbzogWyd0YXUnXVxufTtcbmV4cG9ydHMucGlEb2NzID0gcGlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YXVEb2NzID0gdm9pZCAwO1xudmFyIHRhdURvY3MgPSB7XG4gIG5hbWU6ICd0YXUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWyd0YXUnXSxcbiAgZGVzY3JpcHRpb246ICdUYXUgaXMgdGhlIHJhdGlvIGNvbnN0YW50IG9mIGEgY2lyY2xlXFwncyBjaXJjdW1mZXJlbmNlIHRvIHJhZGl1cywgZXF1YWwgdG8gMiAqIHBpLCBhcHByb3hpbWF0ZWx5IDYuMjgzMi4nLFxuICBleGFtcGxlczogWyd0YXUnLCAnMiAqIHBpJ10sXG4gIHNlZWFsc286IFsncGknXVxufTtcbmV4cG9ydHMudGF1RG9jcyA9IHRhdURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRydWVEb2NzID0gdm9pZCAwO1xudmFyIHRydWVEb2NzID0ge1xuICBuYW1lOiAndHJ1ZScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3RydWUnXSxcbiAgZGVzY3JpcHRpb246ICdCb29sZWFuIHZhbHVlIHRydWUnLFxuICBleGFtcGxlczogWyd0cnVlJ10sXG4gIHNlZWFsc286IFsnZmFsc2UnXVxufTtcbmV4cG9ydHMudHJ1ZURvY3MgPSB0cnVlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmVyc2lvbkRvY3MgPSB2b2lkIDA7XG52YXIgdmVyc2lvbkRvY3MgPSB7XG4gIG5hbWU6ICd2ZXJzaW9uJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsndmVyc2lvbiddLFxuICBkZXNjcmlwdGlvbjogJ0Egc3RyaW5nIHdpdGggdGhlIHZlcnNpb24gbnVtYmVyIG9mIG1hdGguanMnLFxuICBleGFtcGxlczogWyd2ZXJzaW9uJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy52ZXJzaW9uRG9jcyA9IHZlcnNpb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXJEb2NzID0gdm9pZCAwO1xudmFyIGJpZ251bWJlckRvY3MgPSB7XG4gIG5hbWU6ICdiaWdudW1iZXInLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydiaWdudW1iZXIoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBiaWcgbnVtYmVyIGZyb20gYSBudW1iZXIgb3Igc3RyaW5nLicsXG4gIGV4YW1wbGVzOiBbJzAuMSArIDAuMicsICdiaWdudW1iZXIoMC4xKSArIGJpZ251bWJlcigwLjIpJywgJ2JpZ251bWJlcihcIjcuMlwiKScsICdiaWdudW1iZXIoXCI3LjJlNTAwXCIpJywgJ2JpZ251bWJlcihbMC4xLCAwLjIsIDAuM10pJ10sXG4gIHNlZWFsc286IFsnYm9vbGVhbicsICdjb21wbGV4JywgJ2ZyYWN0aW9uJywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5iaWdudW1iZXJEb2NzID0gYmlnbnVtYmVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9vbGVhbkRvY3MgPSB2b2lkIDA7XG52YXIgYm9vbGVhbkRvY3MgPSB7XG4gIG5hbWU6ICdib29sZWFuJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsneCcsICdib29sZWFuKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29udmVydCBhIHN0cmluZyBvciBudW1iZXIgaW50byBhIGJvb2xlYW4uJyxcbiAgZXhhbXBsZXM6IFsnYm9vbGVhbigwKScsICdib29sZWFuKDEpJywgJ2Jvb2xlYW4oMyknLCAnYm9vbGVhbihcInRydWVcIiknLCAnYm9vbGVhbihcImZhbHNlXCIpJywgJ2Jvb2xlYW4oWzEsIDAsIDEsIDFdKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuYm9vbGVhbkRvY3MgPSBib29sZWFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGxleERvY3MgPSB2b2lkIDA7XG52YXIgY29tcGxleERvY3MgPSB7XG4gIG5hbWU6ICdjb21wbGV4JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnY29tcGxleCgpJywgJ2NvbXBsZXgocmUsIGltKScsICdjb21wbGV4KHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBjb21wbGV4IG51bWJlci4nLFxuICBleGFtcGxlczogWydjb21wbGV4KCknLCAnY29tcGxleCgyLCAzKScsICdjb21wbGV4KFwiNyAtIDJpXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5jb21wbGV4RG9jcyA9IGNvbXBsZXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RG9jcyA9IHZvaWQgMDtcbnZhciBjcmVhdGVVbml0RG9jcyA9IHtcbiAgbmFtZTogJ2NyZWF0ZVVuaXQnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydjcmVhdGVVbml0KGRlZmluaXRpb25zKScsICdjcmVhdGVVbml0KG5hbWUsIGRlZmluaXRpb24pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS4nLFxuICBleGFtcGxlczogWydjcmVhdGVVbml0KFwiZm9vXCIpJywgJ2NyZWF0ZVVuaXQoXCJrbm90XCIsIHtkZWZpbml0aW9uOiBcIjAuNTE0NDQ0NDQ0IG0vc1wiLCBhbGlhc2VzOiBbXCJrbm90c1wiLCBcImt0XCIsIFwia3RzXCJdfSknLCAnY3JlYXRlVW5pdChcIm1waFwiLCBcIjEgbWlsZS9ob3VyXCIpJ10sXG4gIHNlZWFsc286IFsndW5pdCcsICdzcGxpdFVuaXQnXVxufTtcbmV4cG9ydHMuY3JlYXRlVW5pdERvY3MgPSBjcmVhdGVVbml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZnJhY3Rpb25Eb2NzID0gdm9pZCAwO1xudmFyIGZyYWN0aW9uRG9jcyA9IHtcbiAgbmFtZTogJ2ZyYWN0aW9uJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnZnJhY3Rpb24obnVtKScsICdmcmFjdGlvbihudW0sZGVuKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGZyYWN0aW9uIGZyb20gYSBudW1iZXIgb3IgZnJvbSBhIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuJyxcbiAgZXhhbXBsZXM6IFsnZnJhY3Rpb24oMC4xMjUpJywgJ2ZyYWN0aW9uKDEsIDMpICsgZnJhY3Rpb24oMiwgNSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5mcmFjdGlvbkRvY3MgPSBmcmFjdGlvbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmluZGV4RG9jcyA9IHZvaWQgMDtcbnZhciBpbmRleERvY3MgPSB7XG4gIG5hbWU6ICdpbmRleCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ1tzdGFydF0nLCAnW3N0YXJ0OmVuZF0nLCAnW3N0YXJ0OnN0ZXA6ZW5kXScsICdbc3RhcnQxLCBzdGFydCAyLCAuLi5dJywgJ1tzdGFydDE6ZW5kMSwgc3RhcnQyOmVuZDIsIC4uLl0nLCAnW3N0YXJ0MTpzdGVwMTplbmQxLCBzdGFydDI6c3RlcDI6ZW5kMiwgLi4uXSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhbiBpbmRleCB0byBnZXQgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdBID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ0FbMSwgOl0nLCAnQVsxLCAyXSA9IDUwJywgJ0FbMDoyLCAwOjJdID0gb25lcygyLCAyKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnbWF0cml4LCcsICdudW1iZXInLCAncmFuZ2UnLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuaW5kZXhEb2NzID0gaW5kZXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXRyaXhEb2NzID0gdm9pZCAwO1xudmFyIG1hdHJpeERvY3MgPSB7XG4gIG5hbWU6ICdtYXRyaXgnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydbXScsICdbYTEsIGIxLCAuLi47IGEyLCBiMiwgLi4uXScsICdtYXRyaXgoKScsICdtYXRyaXgoXCJkZW5zZVwiKScsICdtYXRyaXgoWy4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdbMSwgMiwgMzsgNCwgNSwgNl0nLCAnbWF0cml4KCknLCAnbWF0cml4KFszLCA0XSknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgXCJzcGFyc2VcIiknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgXCJzcGFyc2VcIiwgXCJudW1iZXJcIiknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMubWF0cml4RG9jcyA9IG1hdHJpeERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWJlckRvY3MgPSB2b2lkIDA7XG52YXIgbnVtYmVyRG9jcyA9IHtcbiAgbmFtZTogJ251bWJlcicsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ3gnLCAnbnVtYmVyKHgpJywgJ251bWJlcih1bml0LCB2YWx1ZWxlc3NVbml0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG51bWJlciBvciBjb252ZXJ0IGEgc3RyaW5nIG9yIGJvb2xlYW4gaW50byBhIG51bWJlci4nLFxuICBleGFtcGxlczogWycyJywgJzJlMycsICc0LjA1JywgJ251bWJlcigyKScsICdudW1iZXIoXCI3LjJcIiknLCAnbnVtYmVyKHRydWUpJywgJ251bWJlcihbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWVdKScsICdudW1iZXIodW5pdChcIjUyY21cIiksIFwibVwiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnZnJhY3Rpb24nLCAnaW5kZXgnLCAnbWF0cml4JywgJ3N0cmluZycsICd1bml0J11cbn07XG5leHBvcnRzLm51bWJlckRvY3MgPSBudW1iZXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGFyc2VEb2NzID0gdm9pZCAwO1xudmFyIHNwYXJzZURvY3MgPSB7XG4gIG5hbWU6ICdzcGFyc2UnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydzcGFyc2UoKScsICdzcGFyc2UoW2ExLCBiMSwgLi4uOyBhMSwgYjIsIC4uLl0pJywgJ3NwYXJzZShbYTEsIGIxLCAuLi47IGExLCBiMiwgLi4uXSwgXCJudW1iZXJcIiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBzcGFyc2UgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ3NwYXJzZSgpJywgJ3NwYXJzZShbMywgNDsgNSwgNl0pJywgJ3NwYXJzZShbMywgMDsgNSwgMF0sIFwibnVtYmVyXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnLCAnbWF0cml4J11cbn07XG5leHBvcnRzLnNwYXJzZURvY3MgPSBzcGFyc2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXREb2NzID0gdm9pZCAwO1xudmFyIHNwbGl0VW5pdERvY3MgPSB7XG4gIG5hbWU6ICdzcGxpdFVuaXQnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydzcGxpdFVuaXQodW5pdDogVW5pdCwgcGFydHM6IFVuaXRbXSknXSxcbiAgZGVzY3JpcHRpb246ICdTcGxpdCBhIHVuaXQgaW4gYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCB1bml0LicsXG4gIGV4YW1wbGVzOiBbJ3NwbGl0VW5pdCgxIG0sIFtcImZlZXRcIiwgXCJpbmNoXCJdKSddLFxuICBzZWVhbHNvOiBbJ3VuaXQnLCAnY3JlYXRlVW5pdCddXG59O1xuZXhwb3J0cy5zcGxpdFVuaXREb2NzID0gc3BsaXRVbml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RyaW5nRG9jcyA9IHZvaWQgMDtcbnZhciBzdHJpbmdEb2NzID0ge1xuICBuYW1lOiAnc3RyaW5nJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnXCJ0ZXh0XCInLCAnc3RyaW5nKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgc3RyaW5nIG9yIGNvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZycsXG4gIGV4YW1wbGVzOiBbJ1wiSGVsbG8gV29ybGQhXCInLCAnc3RyaW5nKDQuMiknLCAnc3RyaW5nKDMgKyAyaSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAndW5pdCddXG59O1xuZXhwb3J0cy5zdHJpbmdEb2NzID0gc3RyaW5nRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5pdERvY3MgPSB2b2lkIDA7XG52YXIgdW5pdERvY3MgPSB7XG4gIG5hbWU6ICd1bml0JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsndmFsdWUgdW5pdCcsICd1bml0KHZhbHVlLCB1bml0KScsICd1bml0KHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSB1bml0LicsXG4gIGV4YW1wbGVzOiBbJzUuNSBtbScsICczIGluY2gnLCAndW5pdCg3LjEsIFwia2lsb2dyYW1cIiknLCAndW5pdChcIjIzIGRlZ1wiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnXVxufTtcbmV4cG9ydHMudW5pdERvY3MgPSB1bml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnRG9jcyA9IHZvaWQgMDtcbnZhciBjb25maWdEb2NzID0ge1xuICBuYW1lOiAnY29uZmlnJyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ2NvbmZpZygpJywgJ2NvbmZpZyhvcHRpb25zKSddLFxuICBkZXNjcmlwdGlvbjogJ0dldCBjb25maWd1cmF0aW9uIG9yIGNoYW5nZSBjb25maWd1cmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2NvbmZpZygpJywgJzEvMyArIDEvNCcsICdjb25maWcoe251bWJlcjogXCJGcmFjdGlvblwifSknLCAnMS8zICsgMS80J10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5jb25maWdEb2NzID0gY29uZmlnRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1wb3J0RG9jcyA9IHZvaWQgMDtcbnZhciBpbXBvcnREb2NzID0ge1xuICBuYW1lOiAnaW1wb3J0JyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ2ltcG9ydChmdW5jdGlvbnMpJywgJ2ltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnSW1wb3J0IGZ1bmN0aW9ucyBvciBjb25zdGFudHMgZnJvbSBhbiBvYmplY3QuJyxcbiAgZXhhbXBsZXM6IFsnaW1wb3J0KHtteUZuOiBmKHgpPXheMiwgbXlDb25zdGFudDogMzIgfSknLCAnbXlGbigyKScsICdteUNvbnN0YW50J10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5pbXBvcnREb2NzID0gaW1wb3J0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZWREb2NzID0gdm9pZCAwO1xudmFyIHR5cGVkRG9jcyA9IHtcbiAgbmFtZTogJ3R5cGVkJyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ3R5cGVkKHNpZ25hdHVyZXMpJywgJ3R5cGVkKG5hbWUsIHNpZ25hdHVyZXMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24uJyxcbiAgZXhhbXBsZXM6IFsnZG91YmxlID0gdHlwZWQoeyBcIm51bWJlciwgbnVtYmVyXCI6IGYoeCk9eCt4IH0pJywgJ2RvdWJsZSgyKScsICdkb3VibGUoXCJoZWxsb1wiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMudHlwZWREb2NzID0gdHlwZWREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbWJlZGRlZERvY3MgPSB2b2lkIDA7XG5cbnZhciBfYmlnbnVtYmVyID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2JpZ251bWJlclwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfaXNaZXJvID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNaZXJvXCIpO1xuXG52YXIgX2lzUHJpbWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1ByaW1lXCIpO1xuXG52YXIgX2lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlXCIpO1xuXG52YXIgX2lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTnVtZXJpY1wiKTtcblxudmFyIF9oYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWVcIik7XG5cbnZhciBfaXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmVcIik7XG5cbnZhciBfaXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyXCIpO1xuXG52YXIgX2lzTmFOID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOYU5cIik7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvZm9ybWF0XCIpO1xuXG52YXIgX2Nsb25lID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvY2xvbmVcIik7XG5cbnZhciBfdG8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91bml0cy90b1wiKTtcblxudmFyIF90YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmhcIik7XG5cbnZhciBfdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhblwiKTtcblxudmFyIF9zaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmhcIik7XG5cbnZhciBfc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNoXCIpO1xuXG52YXIgX3NlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNcIik7XG5cbnZhciBfY3NjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NoXCIpO1xuXG52YXIgX2NzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NcIik7XG5cbnZhciBfY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RoXCIpO1xuXG52YXIgX2NvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RcIik7XG5cbnZhciBfY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NoXCIpO1xuXG52YXIgX2NvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NcIik7XG5cbnZhciBfYXRhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuMlwiKTtcblxudmFyIF9hdGFuaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuaFwiKTtcblxudmFyIF9hdGFuMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuXCIpO1xuXG52YXIgX2FzaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oXCIpO1xuXG52YXIgX2FzaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpblwiKTtcblxudmFyIF9hc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaFwiKTtcblxudmFyIF9hc2VjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNcIik7XG5cbnZhciBfYWNzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2hcIik7XG5cbnZhciBfYWNzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY3NjXCIpO1xuXG52YXIgX2Fjb3RoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoXCIpO1xuXG52YXIgX2Fjb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdFwiKTtcblxudmFyIF9hY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaFwiKTtcblxudmFyIF9hY29zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NcIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdW1cIik7XG5cbnZhciBfc3RkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdGRcIik7XG5cbnZhciBfcXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxXCIpO1xuXG52YXIgX3Byb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2RcIik7XG5cbnZhciBfbW9kZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZVwiKTtcblxudmFyIF9taW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pblwiKTtcblxudmFyIF9tZWRpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhblwiKTtcblxudmFyIF9tZWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuXCIpO1xuXG52YXIgX21heCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgX21hZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWFkXCIpO1xuXG52YXIgX2VyZiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NwZWNpYWwvZXJmXCIpO1xuXG52YXIgX3NldFVuaW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFVuaW9uXCIpO1xuXG52YXIgX3NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZVwiKTtcblxudmFyIF9zZXRTaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFNpemVcIik7XG5cbnZhciBfc2V0UG93ZXJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXRcIik7XG5cbnZhciBfc2V0TXVsdGlwbGljaXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldE11bHRpcGxpY2l0eVwiKTtcblxudmFyIF9zZXRJc1N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldFwiKTtcblxudmFyIF9zZXRJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0SW50ZXJzZWN0XCIpO1xuXG52YXIgX3NldERpc3RpbmN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0XCIpO1xuXG52YXIgX3NldERpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZVwiKTtcblxudmFyIF9zZXRDYXJ0ZXNpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0Q2FydGVzaWFuXCIpO1xuXG52YXIgX3VuZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWxcIik7XG5cbnZhciBfc21hbGxlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyRXFcIik7XG5cbnZhciBfc21hbGxlciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlclwiKTtcblxudmFyIF9sYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXFcIik7XG5cbnZhciBfbGFyZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJcIik7XG5cbnZhciBfZXF1YWxUZXh0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHRcIik7XG5cbnZhciBfZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsXCIpO1xuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsXCIpO1xuXG52YXIgX2NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dFwiKTtcblxudmFyIF9jb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWxcIik7XG5cbnZhciBfY29tcGFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVwiKTtcblxudmFyIF9yYW5kb21JbnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9yYW5kb21JbnRcIik7XG5cbnZhciBfcmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tXCIpO1xuXG52YXIgX3BpY2tSYW5kb20gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9waWNrUmFuZG9tXCIpO1xuXG52YXIgX3Blcm11dGF0aW9ucyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3Blcm11dGF0aW9uc1wiKTtcblxudmFyIF9tdWx0aW5vbWlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsXCIpO1xuXG52YXIgX2tsZGl2ZXJnZW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZVwiKTtcblxudmFyIF9nYW1tYSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hXCIpO1xuXG52YXIgX2ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2ZhY3RvcmlhbFwiKTtcblxudmFyIF9jb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBfY29tYmluYXRpb25zV2l0aFJlcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXBcIik7XG5cbnZhciBfemVyb3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvemVyb3NcIik7XG5cbnZhciBfdHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZVwiKTtcblxudmFyIF90cmFjZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFjZVwiKTtcblxudmFyIF9zdWJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0XCIpO1xuXG52YXIgX3NxdWVlemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3F1ZWV6ZVwiKTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NvcnRcIik7XG5cbnZhciBfc2l6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9zaXplXCIpO1xuXG52YXIgX3Jlc2hhcGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmVzaGFwZVwiKTtcblxudmFyIF9yZXNpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmVzaXplXCIpO1xuXG52YXIgX3JhbmdlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3JhbmdlXCIpO1xuXG52YXIgX3BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9wYXJ0aXRpb25TZWxlY3RcIik7XG5cbnZhciBfb25lcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9vbmVzXCIpO1xuXG52YXIgX21hcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9tYXBcIik7XG5cbnZhciBfa3JvbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9rcm9uXCIpO1xuXG52YXIgX2ludiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pbnZcIik7XG5cbnZhciBfZm9yRWFjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoXCIpO1xuXG52YXIgX2ZsYXR0ZW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlblwiKTtcblxudmFyIF9maWx0ZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZmlsdGVyXCIpO1xuXG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5XCIpO1xuXG52YXIgX2dldE1hdHJpeERhdGFUeXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlXCIpO1xuXG52YXIgX2RvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kb3RcIik7XG5cbnZhciBfZGlhZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kaWFnXCIpO1xuXG52YXIgX2RldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kZXRcIik7XG5cbnZhciBfY3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jdHJhbnNwb3NlXCIpO1xuXG52YXIgX2Nyb3NzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2Nyb3NzXCIpO1xuXG52YXIgX2NvbmNhdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb25jYXRcIik7XG5cbnZhciBfeG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC94b3JcIik7XG5cbnZhciBfb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL29yXCIpO1xuXG52YXIgX25vdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvbm90XCIpO1xuXG52YXIgX2FuZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvYW5kXCIpO1xuXG52YXIgX2ludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2dlb21ldHJ5L2ludGVyc2VjdFwiKTtcblxudmFyIF9kaXN0YW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2dlb21ldHJ5L2Rpc3RhbmNlXCIpO1xuXG52YXIgX2hlbHAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9leHByZXNzaW9uL2hlbHBcIik7XG5cbnZhciBfZXZhbHVhdGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlXCIpO1xuXG52YXIgX2ltID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9pbVwiKTtcblxudmFyIF9yZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvcmVcIik7XG5cbnZhciBfY29uaiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvY29ualwiKTtcblxudmFyIF9hcmcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L2FyZ1wiKTtcblxudmFyIF90eXBlZCA9IHJlcXVpcmUoXCIuL2NvcmUvdHlwZWRcIik7XG5cbnZhciBfaW1wb3J0ID0gcmVxdWlyZShcIi4vY29yZS9pbXBvcnRcIik7XG5cbnZhciBfY29uZmlnID0gcmVxdWlyZShcIi4vY29yZS9jb25maWdcIik7XG5cbnZhciBfc3RpcmxpbmdTID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9zdGlybGluZ1MyXCIpO1xuXG52YXIgX2NvbXBvc2l0aW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvblwiKTtcblxudmFyIF9jYXRhbGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuXCIpO1xuXG52YXIgX2JlbGxOdW1iZXJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVyc1wiKTtcblxudmFyIF9yaWdodExvZ1NoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0XCIpO1xuXG52YXIgX3JpZ2h0QXJpdGhTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0XCIpO1xuXG52YXIgX2xlZnRTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0XCIpO1xuXG52YXIgX2JpdFhvciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0WG9yXCIpO1xuXG52YXIgX2JpdE9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRPclwiKTtcblxudmFyIF9iaXROb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdFwiKTtcblxudmFyIF9iaXRBbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdEFuZFwiKTtcblxudmFyIF94Z2NkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkXCIpO1xuXG52YXIgX3VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzXCIpO1xuXG52YXIgX3VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXNcIik7XG5cbnZhciBfc3F1YXJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXVhcmVcIik7XG5cbnZhciBfc3FydG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnRtXCIpO1xuXG52YXIgX3NxcnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnRcIik7XG5cbnZhciBfc2lnbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc2lnblwiKTtcblxudmFyIF9yb3VuZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmRcIik7XG5cbnZhciBfcG93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3dcIik7XG5cbnZhciBfbnRoUm9vdHMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzXCIpO1xuXG52YXIgX250aFJvb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RcIik7XG5cbnZhciBfbm9ybSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybVwiKTtcblxudmFyIF9tdWx0aXBseSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHlcIik7XG5cbnZhciBfbW9kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2RcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMFwiKTtcblxudmFyIF9sb2cxcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXBcIik7XG5cbnZhciBfbG9nMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMlwiKTtcblxudmFyIF9sb2czID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2dcIik7XG5cbnZhciBfbGNtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sY21cIik7XG5cbnZhciBfaHlwb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90XCIpO1xuXG52YXIgX2djZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZ2NkXCIpO1xuXG52YXIgX2Zsb29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9mbG9vclwiKTtcblxudmFyIF9maXggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeFwiKTtcblxudmFyIF9leHBtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBtMVwiKTtcblxudmFyIF9leHBtMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbVwiKTtcblxudmFyIF9laWdzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2VpZ3NcIik7XG5cbnZhciBfZXhwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBcIik7XG5cbnZhciBfZG90TXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5XCIpO1xuXG52YXIgX2RvdERpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlXCIpO1xuXG52YXIgX2RpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlXCIpO1xuXG52YXIgX2N1YmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmVcIik7XG5cbnZhciBfY2VpbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbFwiKTtcblxudmFyIF9jYnJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0XCIpO1xuXG52YXIgX2FkZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkXCIpO1xuXG52YXIgX2FicyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWJzXCIpO1xuXG52YXIgX3FyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9xclwiKTtcblxudmFyIF91c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3Vzb2x2ZVwiKTtcblxudmFyIF9zbHUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NsdVwiKTtcblxudmFyIF9yYXRpb25hbGl6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvcmF0aW9uYWxpemVcIik7XG5cbnZhciBfc2ltcGxpZnkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NpbXBsaWZ5XCIpO1xuXG52YXIgX2x1cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvbHVwXCIpO1xuXG52YXIgX2xzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlXCIpO1xuXG52YXIgX2Rlcml2YXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmVcIik7XG5cbnZhciBfdmVyc2lvbiA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy92ZXJzaW9uXCIpO1xuXG52YXIgX3RydWUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdHJ1ZVwiKTtcblxudmFyIF90YXUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdGF1XCIpO1xuXG52YXIgX1NRUlQgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvU1FSVDJcIik7XG5cbnZhciBfU1FSVDFfID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL1NRUlQxXzJcIik7XG5cbnZhciBfcGhpID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL3BoaVwiKTtcblxudmFyIF9waSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9waVwiKTtcblxudmFyIF9udWxsID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL251bGxcIik7XG5cbnZhciBfTmFOID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL05hTlwiKTtcblxudmFyIF9MT0cxMEUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvTE9HMTBFXCIpO1xuXG52YXIgX0xPRzJFID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xPRzJFXCIpO1xuXG52YXIgX0xOID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xOMTBcIik7XG5cbnZhciBfTE4yID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xOMlwiKTtcblxudmFyIF9JbmZpbml0eSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9JbmZpbml0eVwiKTtcblxudmFyIF9pID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL2lcIik7XG5cbnZhciBfZmFsc2UgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvZmFsc2VcIik7XG5cbnZhciBfZSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9lXCIpO1xuXG52YXIgX3VuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vdW5pdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vc3RyaW5nXCIpO1xuXG52YXIgX3NwbGl0VW5pdCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXRcIik7XG5cbnZhciBfc3BhcnNlID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL3NwYXJzZVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vbnVtYmVyXCIpO1xuXG52YXIgX21hdHJpeCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9tYXRyaXhcIik7XG5cbnZhciBfY29uc3RydWN0aW9uID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uXCIpO1xuXG52YXIgX2ZyYWN0aW9uID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2ZyYWN0aW9uXCIpO1xuXG52YXIgX2NyZWF0ZVVuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdFwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2NvbXBsZXhcIik7XG5cbnZhciBfYm9vbGVhbiA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9ib29sZWFuXCIpO1xuXG52YXIgX2RvdFBvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93XCIpO1xuXG52YXIgX2x1c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmVcIik7XG5cbnZhciBfc3VidHJhY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3N1YnRyYWN0XCIpO1xuXG52YXIgX3ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZVwiKTtcblxudmFyIF9zaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luXCIpO1xuXG52YXIgX251bWVyaWMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9udW1lcmljXCIpO1xuXG52YXIgX2NvbHVtbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfcm93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jvd1wiKTtcblxudmFyIGVtYmVkZGVkRG9jcyA9IHtcbiAgLy8gY29uc3RydWN0aW9uIGZ1bmN0aW9uc1xuICBiaWdudW1iZXI6IF9iaWdudW1iZXIuYmlnbnVtYmVyRG9jcyxcbiAgXCJib29sZWFuXCI6IF9ib29sZWFuLmJvb2xlYW5Eb2NzLFxuICBjb21wbGV4OiBfY29tcGxleC5jb21wbGV4RG9jcyxcbiAgY3JlYXRlVW5pdDogX2NyZWF0ZVVuaXQuY3JlYXRlVW5pdERvY3MsXG4gIGZyYWN0aW9uOiBfZnJhY3Rpb24uZnJhY3Rpb25Eb2NzLFxuICBpbmRleDogX2NvbnN0cnVjdGlvbi5pbmRleERvY3MsXG4gIG1hdHJpeDogX21hdHJpeC5tYXRyaXhEb2NzLFxuICBudW1iZXI6IF9udW1iZXIubnVtYmVyRG9jcyxcbiAgc3BhcnNlOiBfc3BhcnNlLnNwYXJzZURvY3MsXG4gIHNwbGl0VW5pdDogX3NwbGl0VW5pdC5zcGxpdFVuaXREb2NzLFxuICBzdHJpbmc6IF9zdHJpbmcuc3RyaW5nRG9jcyxcbiAgdW5pdDogX3VuaXQudW5pdERvY3MsXG4gIC8vIGNvbnN0YW50c1xuICBlOiBfZS5lRG9jcyxcbiAgRTogX2UuZURvY3MsXG4gIFwiZmFsc2VcIjogX2ZhbHNlLmZhbHNlRG9jcyxcbiAgaTogX2kuaURvY3MsXG4gIEluZmluaXR5OiBfSW5maW5pdHkuSW5maW5pdHlEb2NzLFxuICBMTjI6IF9MTjIuTE4yRG9jcyxcbiAgTE4xMDogX0xOLkxOMTBEb2NzLFxuICBMT0cyRTogX0xPRzJFLkxPRzJFRG9jcyxcbiAgTE9HMTBFOiBfTE9HMTBFLkxPRzEwRURvY3MsXG4gIE5hTjogX05hTi5OYU5Eb2NzLFxuICBcIm51bGxcIjogX251bGwubnVsbERvY3MsXG4gIHBpOiBfcGkucGlEb2NzLFxuICBQSTogX3BpLnBpRG9jcyxcbiAgcGhpOiBfcGhpLnBoaURvY3MsXG4gIFNRUlQxXzI6IF9TUVJUMV8uU1FSVDEyRG9jcyxcbiAgU1FSVDI6IF9TUVJULlNRUlQyRG9jcyxcbiAgdGF1OiBfdGF1LnRhdURvY3MsXG4gIFwidHJ1ZVwiOiBfdHJ1ZS50cnVlRG9jcyxcbiAgdmVyc2lvbjogX3ZlcnNpb24udmVyc2lvbkRvY3MsXG4gIC8vIHBoeXNpY2FsIGNvbnN0YW50c1xuICAvLyBUT0RPOiBtb3JlIGRldGFpbGVkIGRvY3MgZm9yIHBoeXNpY2FsIGNvbnN0YW50c1xuICBzcGVlZE9mTGlnaHQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1NwZWVkIG9mIGxpZ2h0IGluIHZhY3V1bScsXG4gICAgZXhhbXBsZXM6IFsnc3BlZWRPZkxpZ2h0J11cbiAgfSxcbiAgZ3Jhdml0YXRpb25Db25zdGFudDoge1xuICAgIGRlc2NyaXB0aW9uOiAnTmV3dG9uaWFuIGNvbnN0YW50IG9mIGdyYXZpdGF0aW9uJyxcbiAgICBleGFtcGxlczogWydncmF2aXRhdGlvbkNvbnN0YW50J11cbiAgfSxcbiAgcGxhbmNrQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICByZWR1Y2VkUGxhbmNrQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlZHVjZWQgUGxhbmNrIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydyZWR1Y2VkUGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICBtYWduZXRpY0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdNYWduZXRpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSknLFxuICAgIGV4YW1wbGVzOiBbJ21hZ25ldGljQ29uc3RhbnQnXVxuICB9LFxuICBlbGVjdHJpY0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdFbGVjdHJpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSknLFxuICAgIGV4YW1wbGVzOiBbJ2VsZWN0cmljQ29uc3RhbnQnXVxuICB9LFxuICB2YWN1dW1JbXBlZGFuY2U6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NoYXJhY3RlcmlzdGljIGltcGVkYW5jZSBvZiB2YWN1dW0nLFxuICAgIGV4YW1wbGVzOiBbJ3ZhY3V1bUltcGVkYW5jZSddXG4gIH0sXG4gIGNvdWxvbWI6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NvdWxvbWJcXCdzIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydjb3Vsb21iJ11cbiAgfSxcbiAgZWxlbWVudGFyeUNoYXJnZToge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlbWVudGFyeSBjaGFyZ2UnLFxuICAgIGV4YW1wbGVzOiBbJ2VsZW1lbnRhcnlDaGFyZ2UnXVxuICB9LFxuICBib2hyTWFnbmV0b246IHtcbiAgICBkZXNjcmlwdGlvbjogJ0JvcmggbWFnbmV0b24nLFxuICAgIGV4YW1wbGVzOiBbJ2JvaHJNYWduZXRvbiddXG4gIH0sXG4gIGNvbmR1Y3RhbmNlUXVhbnR1bToge1xuICAgIGRlc2NyaXB0aW9uOiAnQ29uZHVjdGFuY2UgcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnY29uZHVjdGFuY2VRdWFudHVtJ11cbiAgfSxcbiAgaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bToge1xuICAgIGRlc2NyaXB0aW9uOiAnSW52ZXJzZSBjb25kdWN0YW5jZSBxdWFudHVtJyxcbiAgICBleGFtcGxlczogWydpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtJ11cbiAgfSxcbiAgLy8gam9zZXBoc29uOiB7ZGVzY3JpcHRpb246ICdKb3NlcGhzb24gY29uc3RhbnQnLCBleGFtcGxlczogWydqb3NlcGhzb24nXX0sXG4gIG1hZ25ldGljRmx1eFF1YW50dW06IHtcbiAgICBkZXNjcmlwdGlvbjogJ01hZ25ldGljIGZsdXggcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnbWFnbmV0aWNGbHV4UXVhbnR1bSddXG4gIH0sXG4gIG51Y2xlYXJNYWduZXRvbjoge1xuICAgIGRlc2NyaXB0aW9uOiAnTnVjbGVhciBtYWduZXRvbicsXG4gICAgZXhhbXBsZXM6IFsnbnVjbGVhck1hZ25ldG9uJ11cbiAgfSxcbiAga2xpdHppbmc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1ZvbiBLbGl0emluZyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsna2xpdHppbmcnXVxuICB9LFxuICBib2hyUmFkaXVzOiB7XG4gICAgZGVzY3JpcHRpb246ICdCb3JoIHJhZGl1cycsXG4gICAgZXhhbXBsZXM6IFsnYm9oclJhZGl1cyddXG4gIH0sXG4gIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzOiB7XG4gICAgZGVzY3JpcHRpb246ICdDbGFzc2ljYWwgZWxlY3Ryb24gcmFkaXVzJyxcbiAgICBleGFtcGxlczogWydjbGFzc2ljYWxFbGVjdHJvblJhZGl1cyddXG4gIH0sXG4gIGVsZWN0cm9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlY3Ryb24gbWFzcycsXG4gICAgZXhhbXBsZXM6IFsnZWxlY3Ryb25NYXNzJ11cbiAgfSxcbiAgZmVybWlDb3VwbGluZzoge1xuICAgIGRlc2NyaXB0aW9uOiAnRmVybWkgY291cGxpbmcgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2Zlcm1pQ291cGxpbmcnXVxuICB9LFxuICBmaW5lU3RydWN0dXJlOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaW5lLXN0cnVjdHVyZSBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZmluZVN0cnVjdHVyZSddXG4gIH0sXG4gIGhhcnRyZWVFbmVyZ3k6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0hhcnRyZWUgZW5lcmd5JyxcbiAgICBleGFtcGxlczogWydoYXJ0cmVlRW5lcmd5J11cbiAgfSxcbiAgcHJvdG9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnUHJvdG9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ3Byb3Rvbk1hc3MnXVxuICB9LFxuICBkZXV0ZXJvbk1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0RldXRlcm9uIE1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ2RldXRlcm9uTWFzcyddXG4gIH0sXG4gIG5ldXRyb25NYXNzOiB7XG4gICAgZGVzY3JpcHRpb246ICdOZXV0cm9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ25ldXRyb25NYXNzJ11cbiAgfSxcbiAgcXVhbnR1bU9mQ2lyY3VsYXRpb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1F1YW50dW0gb2YgY2lyY3VsYXRpb24nLFxuICAgIGV4YW1wbGVzOiBbJ3F1YW50dW1PZkNpcmN1bGF0aW9uJ11cbiAgfSxcbiAgcnlkYmVyZzoge1xuICAgIGRlc2NyaXB0aW9uOiAnUnlkYmVyZyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncnlkYmVyZyddXG4gIH0sXG4gIHRob21zb25Dcm9zc1NlY3Rpb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1Rob21zb24gY3Jvc3Mgc2VjdGlvbicsXG4gICAgZXhhbXBsZXM6IFsndGhvbXNvbkNyb3NzU2VjdGlvbiddXG4gIH0sXG4gIHdlYWtNaXhpbmdBbmdsZToge1xuICAgIGRlc2NyaXB0aW9uOiAnV2VhayBtaXhpbmcgYW5nbGUnLFxuICAgIGV4YW1wbGVzOiBbJ3dlYWtNaXhpbmdBbmdsZSddXG4gIH0sXG4gIGVmaW1vdkZhY3Rvcjoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWZpbW92IGZhY3RvcicsXG4gICAgZXhhbXBsZXM6IFsnZWZpbW92RmFjdG9yJ11cbiAgfSxcbiAgYXRvbWljTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnQXRvbWljIG1hc3MgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2F0b21pY01hc3MnXVxuICB9LFxuICBhdm9nYWRybzoge1xuICAgIGRlc2NyaXB0aW9uOiAnQXZvZ2Fkcm9cXCdzIG51bWJlcicsXG4gICAgZXhhbXBsZXM6IFsnYXZvZ2Fkcm8nXVxuICB9LFxuICBib2x0em1hbm46IHtcbiAgICBkZXNjcmlwdGlvbjogJ0JvbHR6bWFubiBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnYm9sdHptYW5uJ11cbiAgfSxcbiAgZmFyYWRheToge1xuICAgIGRlc2NyaXB0aW9uOiAnRmFyYWRheSBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZmFyYWRheSddXG4gIH0sXG4gIGZpcnN0UmFkaWF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaXJzdCByYWRpYXRpb24gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2ZpcnN0UmFkaWF0aW9uJ11cbiAgfSxcbiAgbG9zY2htaWR0OiB7XG4gICAgZGVzY3JpcHRpb246ICdMb3NjaG1pZHQgY29uc3RhbnQgYXQgVD0yNzMuMTUgSyBhbmQgcD0xMDEuMzI1IGtQYScsXG4gICAgZXhhbXBsZXM6IFsnbG9zY2htaWR0J11cbiAgfSxcbiAgZ2FzQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0dhcyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZ2FzQ29uc3RhbnQnXVxuICB9LFxuICBtb2xhclBsYW5ja0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdNb2xhciBQbGFuY2sgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyUGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICBtb2xhclZvbHVtZToge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgdm9sdW1lIG9mIGFuIGlkZWFsIGdhcyBhdCBUPTI3My4xNSBLIGFuZCBwPTEwMS4zMjUga1BhJyxcbiAgICBleGFtcGxlczogWydtb2xhclZvbHVtZSddXG4gIH0sXG4gIHNhY2t1clRldHJvZGU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1NhY2t1ci1UZXRyb2RlIGNvbnN0YW50IGF0IFQ9MSBLIGFuZCBwPTEwMS4zMjUga1BhJyxcbiAgICBleGFtcGxlczogWydzYWNrdXJUZXRyb2RlJ11cbiAgfSxcbiAgc2Vjb25kUmFkaWF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdTZWNvbmQgcmFkaWF0aW9uIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydzZWNvbmRSYWRpYXRpb24nXVxuICB9LFxuICBzdGVmYW5Cb2x0em1hbm46IHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0ZWZhbi1Cb2x0em1hbm4gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ3N0ZWZhbkJvbHR6bWFubiddXG4gIH0sXG4gIHdpZW5EaXNwbGFjZW1lbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1dpZW4gZGlzcGxhY2VtZW50IGxhdyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnd2llbkRpc3BsYWNlbWVudCddXG4gIH0sXG4gIC8vIHNwZWN0cmFsUmFkaWFuY2U6IHtkZXNjcmlwdGlvbjogJ0ZpcnN0IHJhZGlhdGlvbiBjb25zdGFudCBmb3Igc3BlY3RyYWwgcmFkaWFuY2UnLCBleGFtcGxlczogWydzcGVjdHJhbFJhZGlhbmNlJ119LFxuICBtb2xhck1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ01vbGFyIG1hc3MgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzcyddXG4gIH0sXG4gIG1vbGFyTWFzc0MxMjoge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgbWFzcyBjb25zdGFudCBvZiBjYXJib24tMTInLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzc0MxMiddXG4gIH0sXG4gIGdyYXZpdHk6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0YW5kYXJkIGFjY2VsZXJhdGlvbiBvZiBncmF2aXR5IChzdGFuZGFyZCBhY2NlbGVyYXRpb24gb2YgZnJlZS1mYWxsIG9uIEVhcnRoKScsXG4gICAgZXhhbXBsZXM6IFsnZ3Jhdml0eSddXG4gIH0sXG4gIHBsYW5ja0xlbmd0aDoge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIGxlbmd0aCcsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrTGVuZ3RoJ11cbiAgfSxcbiAgcGxhbmNrTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ3BsYW5ja01hc3MnXVxuICB9LFxuICBwbGFuY2tUaW1lOiB7XG4gICAgZGVzY3JpcHRpb246ICdQbGFuY2sgdGltZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrVGltZSddXG4gIH0sXG4gIHBsYW5ja0NoYXJnZToge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIGNoYXJnZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrQ2hhcmdlJ11cbiAgfSxcbiAgcGxhbmNrVGVtcGVyYXR1cmU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayB0ZW1wZXJhdHVyZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrVGVtcGVyYXR1cmUnXVxuICB9LFxuICAvLyBmdW5jdGlvbnMgLSBhbGdlYnJhXG4gIGRlcml2YXRpdmU6IF9kZXJpdmF0aXZlLmRlcml2YXRpdmVEb2NzLFxuICBsc29sdmU6IF9sc29sdmUubHNvbHZlRG9jcyxcbiAgbHVwOiBfbHVwLmx1cERvY3MsXG4gIGx1c29sdmU6IF9sdXNvbHZlLmx1c29sdmVEb2NzLFxuICBzaW1wbGlmeTogX3NpbXBsaWZ5LnNpbXBsaWZ5RG9jcyxcbiAgcmF0aW9uYWxpemU6IF9yYXRpb25hbGl6ZS5yYXRpb25hbGl6ZURvY3MsXG4gIHNsdTogX3NsdS5zbHVEb2NzLFxuICB1c29sdmU6IF91c29sdmUudXNvbHZlRG9jcyxcbiAgcXI6IF9xci5xckRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGFyaXRobWV0aWNcbiAgYWJzOiBfYWJzLmFic0RvY3MsXG4gIGFkZDogX2FkZC5hZGREb2NzLFxuICBjYnJ0OiBfY2JydC5jYnJ0RG9jcyxcbiAgY2VpbDogX2NlaWwuY2VpbERvY3MsXG4gIGN1YmU6IF9jdWJlLmN1YmVEb2NzLFxuICBkaXZpZGU6IF9kaXZpZGUuZGl2aWRlRG9jcyxcbiAgZG90RGl2aWRlOiBfZG90RGl2aWRlLmRvdERpdmlkZURvY3MsXG4gIGRvdE11bHRpcGx5OiBfZG90TXVsdGlwbHkuZG90TXVsdGlwbHlEb2NzLFxuICBkb3RQb3c6IF9kb3RQb3cuZG90UG93RG9jcyxcbiAgZXhwOiBfZXhwLmV4cERvY3MsXG4gIGV4cG06IF9leHBtMi5leHBtRG9jcyxcbiAgZXhwbTE6IF9leHBtLmV4cG0xRG9jcyxcbiAgZml4OiBfZml4LmZpeERvY3MsXG4gIGZsb29yOiBfZmxvb3IuZmxvb3JEb2NzLFxuICBnY2Q6IF9nY2QuZ2NkRG9jcyxcbiAgaHlwb3Q6IF9oeXBvdC5oeXBvdERvY3MsXG4gIGxjbTogX2xjbS5sY21Eb2NzLFxuICBsb2c6IF9sb2czLmxvZ0RvY3MsXG4gIGxvZzI6IF9sb2cyLmxvZzJEb2NzLFxuICBsb2cxcDogX2xvZzFwLmxvZzFwRG9jcyxcbiAgbG9nMTA6IF9sb2cubG9nMTBEb2NzLFxuICBtb2Q6IF9tb2QubW9kRG9jcyxcbiAgbXVsdGlwbHk6IF9tdWx0aXBseS5tdWx0aXBseURvY3MsXG4gIG5vcm06IF9ub3JtLm5vcm1Eb2NzLFxuICBudGhSb290OiBfbnRoUm9vdC5udGhSb290RG9jcyxcbiAgbnRoUm9vdHM6IF9udGhSb290cy5udGhSb290c0RvY3MsXG4gIHBvdzogX3Bvdy5wb3dEb2NzLFxuICByb3VuZDogX3JvdW5kLnJvdW5kRG9jcyxcbiAgc2lnbjogX3NpZ24uc2lnbkRvY3MsXG4gIHNxcnQ6IF9zcXJ0LnNxcnREb2NzLFxuICBzcXJ0bTogX3NxcnRtLnNxcnRtRG9jcyxcbiAgc3F1YXJlOiBfc3F1YXJlLnNxdWFyZURvY3MsXG4gIHN1YnRyYWN0OiBfc3VidHJhY3Quc3VidHJhY3REb2NzLFxuICB1bmFyeU1pbnVzOiBfdW5hcnlNaW51cy51bmFyeU1pbnVzRG9jcyxcbiAgdW5hcnlQbHVzOiBfdW5hcnlQbHVzLnVuYXJ5UGx1c0RvY3MsXG4gIHhnY2Q6IF94Z2NkLnhnY2REb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBiaXR3aXNlXG4gIGJpdEFuZDogX2JpdEFuZC5iaXRBbmREb2NzLFxuICBiaXROb3Q6IF9iaXROb3QuYml0Tm90RG9jcyxcbiAgYml0T3I6IF9iaXRPci5iaXRPckRvY3MsXG4gIGJpdFhvcjogX2JpdFhvci5iaXRYb3JEb2NzLFxuICBsZWZ0U2hpZnQ6IF9sZWZ0U2hpZnQubGVmdFNoaWZ0RG9jcyxcbiAgcmlnaHRBcml0aFNoaWZ0OiBfcmlnaHRBcml0aFNoaWZ0LnJpZ2h0QXJpdGhTaGlmdERvY3MsXG4gIHJpZ2h0TG9nU2hpZnQ6IF9yaWdodExvZ1NoaWZ0LnJpZ2h0TG9nU2hpZnREb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBjb21iaW5hdG9yaWNzXG4gIGJlbGxOdW1iZXJzOiBfYmVsbE51bWJlcnMuYmVsbE51bWJlcnNEb2NzLFxuICBjYXRhbGFuOiBfY2F0YWxhbi5jYXRhbGFuRG9jcyxcbiAgY29tcG9zaXRpb246IF9jb21wb3NpdGlvbi5jb21wb3NpdGlvbkRvY3MsXG4gIHN0aXJsaW5nUzI6IF9zdGlybGluZ1Muc3RpcmxpbmdTMkRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGNvcmVcbiAgY29uZmlnOiBfY29uZmlnLmNvbmZpZ0RvY3MsXG4gIFwiaW1wb3J0XCI6IF9pbXBvcnQuaW1wb3J0RG9jcyxcbiAgdHlwZWQ6IF90eXBlZC50eXBlZERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGNvbXBsZXhcbiAgYXJnOiBfYXJnLmFyZ0RvY3MsXG4gIGNvbmo6IF9jb25qLmNvbmpEb2NzLFxuICByZTogX3JlLnJlRG9jcyxcbiAgaW06IF9pbS5pbURvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGV4cHJlc3Npb25cbiAgZXZhbHVhdGU6IF9ldmFsdWF0ZS5ldmFsdWF0ZURvY3MsXG4gIGV2YWw6IF9ldmFsdWF0ZS5ldmFsdWF0ZURvY3MsXG4gIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjdcbiAgaGVscDogX2hlbHAuaGVscERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGdlb21ldHJ5XG4gIGRpc3RhbmNlOiBfZGlzdGFuY2UuZGlzdGFuY2VEb2NzLFxuICBpbnRlcnNlY3Q6IF9pbnRlcnNlY3QuaW50ZXJzZWN0RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gbG9naWNhbFxuICBhbmQ6IF9hbmQuYW5kRG9jcyxcbiAgbm90OiBfbm90Lm5vdERvY3MsXG4gIG9yOiBfb3Iub3JEb2NzLFxuICB4b3I6IF94b3IueG9yRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gbWF0cml4XG4gIGNvbmNhdDogX2NvbmNhdC5jb25jYXREb2NzLFxuICBjcm9zczogX2Nyb3NzLmNyb3NzRG9jcyxcbiAgY29sdW1uOiBfY29sdW1uLmNvbHVtbkRvY3MsXG4gIGN0cmFuc3Bvc2U6IF9jdHJhbnNwb3NlLmN0cmFuc3Bvc2VEb2NzLFxuICBkZXQ6IF9kZXQuZGV0RG9jcyxcbiAgZGlhZzogX2RpYWcuZGlhZ0RvY3MsXG4gIGRvdDogX2RvdC5kb3REb2NzLFxuICBnZXRNYXRyaXhEYXRhVHlwZTogX2dldE1hdHJpeERhdGFUeXBlLmdldE1hdHJpeERhdGFUeXBlRG9jcyxcbiAgaWRlbnRpdHk6IF9pZGVudGl0eS5pZGVudGl0eURvY3MsXG4gIGZpbHRlcjogX2ZpbHRlci5maWx0ZXJEb2NzLFxuICBmbGF0dGVuOiBfZmxhdHRlbi5mbGF0dGVuRG9jcyxcbiAgZm9yRWFjaDogX2ZvckVhY2guZm9yRWFjaERvY3MsXG4gIGludjogX2ludi5pbnZEb2NzLFxuICBlaWdzOiBfZWlncy5laWdzRG9jcyxcbiAga3JvbjogX2tyb24ua3JvbkRvY3MsXG4gIG1hcDogX21hcC5tYXBEb2NzLFxuICBvbmVzOiBfb25lcy5vbmVzRG9jcyxcbiAgcGFydGl0aW9uU2VsZWN0OiBfcGFydGl0aW9uU2VsZWN0LnBhcnRpdGlvblNlbGVjdERvY3MsXG4gIHJhbmdlOiBfcmFuZ2UucmFuZ2VEb2NzLFxuICByZXNpemU6IF9yZXNpemUucmVzaXplRG9jcyxcbiAgcmVzaGFwZTogX3Jlc2hhcGUucmVzaGFwZURvY3MsXG4gIHJvdzogX3Jvdy5yb3dEb2NzLFxuICBzaXplOiBfc2l6ZS5zaXplRG9jcyxcbiAgc29ydDogX3NvcnQuc29ydERvY3MsXG4gIHNxdWVlemU6IF9zcXVlZXplLnNxdWVlemVEb2NzLFxuICBzdWJzZXQ6IF9zdWJzZXQuc3Vic2V0RG9jcyxcbiAgdHJhY2U6IF90cmFjZS50cmFjZURvY3MsXG4gIHRyYW5zcG9zZTogX3RyYW5zcG9zZS50cmFuc3Bvc2VEb2NzLFxuICB6ZXJvczogX3plcm9zLnplcm9zRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gcHJvYmFiaWxpdHlcbiAgY29tYmluYXRpb25zOiBfY29tYmluYXRpb25zLmNvbWJpbmF0aW9uc0RvY3MsXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IF9jb21iaW5hdGlvbnNXaXRoUmVwLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzLFxuICAvLyBkaXN0cmlidXRpb246IGRpc3RyaWJ1dGlvbkRvY3MsXG4gIGZhY3RvcmlhbDogX2ZhY3RvcmlhbC5mYWN0b3JpYWxEb2NzLFxuICBnYW1tYTogX2dhbW1hLmdhbW1hRG9jcyxcbiAga2xkaXZlcmdlbmNlOiBfa2xkaXZlcmdlbmNlLmtsZGl2ZXJnZW5jZURvY3MsXG4gIG11bHRpbm9taWFsOiBfbXVsdGlub21pYWwubXVsdGlub21pYWxEb2NzLFxuICBwZXJtdXRhdGlvbnM6IF9wZXJtdXRhdGlvbnMucGVybXV0YXRpb25zRG9jcyxcbiAgcGlja1JhbmRvbTogX3BpY2tSYW5kb20ucGlja1JhbmRvbURvY3MsXG4gIHJhbmRvbTogX3JhbmRvbS5yYW5kb21Eb2NzLFxuICByYW5kb21JbnQ6IF9yYW5kb21JbnQucmFuZG9tSW50RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gcmVsYXRpb25hbFxuICBjb21wYXJlOiBfY29tcGFyZS5jb21wYXJlRG9jcyxcbiAgY29tcGFyZU5hdHVyYWw6IF9jb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERvY3MsXG4gIGNvbXBhcmVUZXh0OiBfY29tcGFyZVRleHQuY29tcGFyZVRleHREb2NzLFxuICBkZWVwRXF1YWw6IF9kZWVwRXF1YWwuZGVlcEVxdWFsRG9jcyxcbiAgZXF1YWw6IF9lcXVhbC5lcXVhbERvY3MsXG4gIGVxdWFsVGV4dDogX2VxdWFsVGV4dC5lcXVhbFRleHREb2NzLFxuICBsYXJnZXI6IF9sYXJnZXIubGFyZ2VyRG9jcyxcbiAgbGFyZ2VyRXE6IF9sYXJnZXJFcS5sYXJnZXJFcURvY3MsXG4gIHNtYWxsZXI6IF9zbWFsbGVyLnNtYWxsZXJEb2NzLFxuICBzbWFsbGVyRXE6IF9zbWFsbGVyRXEuc21hbGxlckVxRG9jcyxcbiAgdW5lcXVhbDogX3VuZXF1YWwudW5lcXVhbERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIHNldFxuICBzZXRDYXJ0ZXNpYW46IF9zZXRDYXJ0ZXNpYW4uc2V0Q2FydGVzaWFuRG9jcyxcbiAgc2V0RGlmZmVyZW5jZTogX3NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURvY3MsXG4gIHNldERpc3RpbmN0OiBfc2V0RGlzdGluY3Quc2V0RGlzdGluY3REb2NzLFxuICBzZXRJbnRlcnNlY3Q6IF9zZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RG9jcyxcbiAgc2V0SXNTdWJzZXQ6IF9zZXRJc1N1YnNldC5zZXRJc1N1YnNldERvY3MsXG4gIHNldE11bHRpcGxpY2l0eTogX3NldE11bHRpcGxpY2l0eS5zZXRNdWx0aXBsaWNpdHlEb2NzLFxuICBzZXRQb3dlcnNldDogX3NldFBvd2Vyc2V0LnNldFBvd2Vyc2V0RG9jcyxcbiAgc2V0U2l6ZTogX3NldFNpemUuc2V0U2l6ZURvY3MsXG4gIHNldFN5bURpZmZlcmVuY2U6IF9zZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEb2NzLFxuICBzZXRVbmlvbjogX3NldFVuaW9uLnNldFVuaW9uRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gc3BlY2lhbFxuICBlcmY6IF9lcmYuZXJmRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gc3RhdGlzdGljc1xuICBtYWQ6IF9tYWQubWFkRG9jcyxcbiAgbWF4OiBfbWF4Lm1heERvY3MsXG4gIG1lYW46IF9tZWFuLm1lYW5Eb2NzLFxuICBtZWRpYW46IF9tZWRpYW4ubWVkaWFuRG9jcyxcbiAgbWluOiBfbWluLm1pbkRvY3MsXG4gIG1vZGU6IF9tb2RlLm1vZGVEb2NzLFxuICBwcm9kOiBfcHJvZC5wcm9kRG9jcyxcbiAgcXVhbnRpbGVTZXE6IF9xdWFudGlsZVNlcS5xdWFudGlsZVNlcURvY3MsXG4gIHN0ZDogX3N0ZC5zdGREb2NzLFxuICBzdW06IF9zdW0uc3VtRG9jcyxcbiAgdmFyaWFuY2U6IF92YXJpYW5jZS52YXJpYW5jZURvY3MsXG4gIFwidmFyXCI6IF92YXJpYW5jZS52YXJpYW5jZURvY3MsXG4gIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjdcbiAgLy8gZnVuY3Rpb25zIC0gdHJpZ29ub21ldHJ5XG4gIGFjb3M6IF9hY29zLmFjb3NEb2NzLFxuICBhY29zaDogX2Fjb3NoLmFjb3NoRG9jcyxcbiAgYWNvdDogX2Fjb3QuYWNvdERvY3MsXG4gIGFjb3RoOiBfYWNvdGguYWNvdGhEb2NzLFxuICBhY3NjOiBfYWNzYy5hY3NjRG9jcyxcbiAgYWNzY2g6IF9hY3NjaC5hY3NjaERvY3MsXG4gIGFzZWM6IF9hc2VjLmFzZWNEb2NzLFxuICBhc2VjaDogX2FzZWNoLmFzZWNoRG9jcyxcbiAgYXNpbjogX2FzaW4uYXNpbkRvY3MsXG4gIGFzaW5oOiBfYXNpbmguYXNpbmhEb2NzLFxuICBhdGFuOiBfYXRhbjIuYXRhbkRvY3MsXG4gIGF0YW5oOiBfYXRhbmguYXRhbmhEb2NzLFxuICBhdGFuMjogX2F0YW4uYXRhbjJEb2NzLFxuICBjb3M6IF9jb3MuY29zRG9jcyxcbiAgY29zaDogX2Nvc2guY29zaERvY3MsXG4gIGNvdDogX2NvdC5jb3REb2NzLFxuICBjb3RoOiBfY290aC5jb3RoRG9jcyxcbiAgY3NjOiBfY3NjLmNzY0RvY3MsXG4gIGNzY2g6IF9jc2NoLmNzY2hEb2NzLFxuICBzZWM6IF9zZWMuc2VjRG9jcyxcbiAgc2VjaDogX3NlY2guc2VjaERvY3MsXG4gIHNpbjogX3Npbi5zaW5Eb2NzLFxuICBzaW5oOiBfc2luaC5zaW5oRG9jcyxcbiAgdGFuOiBfdGFuLnRhbkRvY3MsXG4gIHRhbmg6IF90YW5oLnRhbmhEb2NzLFxuICAvLyBmdW5jdGlvbnMgLSB1bml0c1xuICB0bzogX3RvLnRvRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gdXRpbHNcbiAgY2xvbmU6IF9jbG9uZS5jbG9uZURvY3MsXG4gIGZvcm1hdDogX2Zvcm1hdC5mb3JtYXREb2NzLFxuICBpc05hTjogX2lzTmFOLmlzTmFORG9jcyxcbiAgaXNJbnRlZ2VyOiBfaXNJbnRlZ2VyLmlzSW50ZWdlckRvY3MsXG4gIGlzTmVnYXRpdmU6IF9pc05lZ2F0aXZlLmlzTmVnYXRpdmVEb2NzLFxuICBpc051bWVyaWM6IF9pc051bWVyaWMuaXNOdW1lcmljRG9jcyxcbiAgaGFzTnVtZXJpY1ZhbHVlOiBfaGFzTnVtZXJpY1ZhbHVlLmhhc051bWVyaWNWYWx1ZURvY3MsXG4gIGlzUG9zaXRpdmU6IF9pc1Bvc2l0aXZlLmlzUG9zaXRpdmVEb2NzLFxuICBpc1ByaW1lOiBfaXNQcmltZS5pc1ByaW1lRG9jcyxcbiAgaXNaZXJvOiBfaXNaZXJvLmlzWmVyb0RvY3MsXG4gIC8vIHByaW50OiBwcmludERvY3MgLy8gVE9ETzogYWRkIGRvY3VtZW50YXRpb24gZm9yIHByaW50IGFzIHNvb24gYXMgdGhlIHBhcnNlciBzdXBwb3J0cyBvYmplY3RzLlxuICB0eXBlT2Y6IF90eXBlT2YudHlwZU9mRG9jcyxcbiAgXCJ0eXBlb2ZcIjogX3R5cGVPZi50eXBlT2ZEb2NzLFxuICAvLyBUT0RPOiBkZXByZWNhdGVkLCBjbGVhbnVwIGluIHY3XG4gIG51bWVyaWM6IF9udW1lcmljLm51bWVyaWNEb2NzXG59O1xuZXhwb3J0cy5lbWJlZGRlZERvY3MgPSBlbWJlZGRlZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmVEb2NzID0gdm9pZCAwO1xudmFyIGRlcml2YXRpdmVEb2NzID0ge1xuICBuYW1lOiAnZGVyaXZhdGl2ZScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlKScsICdkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlLCB7c2ltcGxpZnk6IGJvb2xlYW59KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rha2VzIHRoZSBkZXJpdmF0aXZlIG9mIGFuIGV4cHJlc3Npb24gZXhwcmVzc2VkIGluIHBhcnNlciBOb2Rlcy4gVGhlIGRlcml2YXRpdmUgd2lsbCBiZSB0YWtlbiBvdmVyIHRoZSBzdXBwbGllZCB2YXJpYWJsZSBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlci4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZhcmlhYmxlcyBpbiB0aGUgZXhwcmVzc2lvbiwgaXQgd2lsbCByZXR1cm4gYSBwYXJ0aWFsIGRlcml2YXRpdmUuJyxcbiAgZXhhbXBsZXM6IFsnZGVyaXZhdGl2ZShcIjJ4XjNcIiwgXCJ4XCIpJywgJ2Rlcml2YXRpdmUoXCIyeF4zXCIsIFwieFwiLCB7c2ltcGxpZnk6IGZhbHNlfSknLCAnZGVyaXZhdGl2ZShcIjJ4XjIgKyAzeCArIDRcIiwgXCJ4XCIpJywgJ2Rlcml2YXRpdmUoXCJzaW4oMngpXCIsIFwieFwiKScsICdmID0gcGFyc2UoXCJ4XjIgKyB4XCIpJywgJ3ggPSBwYXJzZShcInhcIiknLCAnZGYgPSBkZXJpdmF0aXZlKGYsIHgpJywgJ2RmLmV2YWx1YXRlKHt4OiAzfSknXSxcbiAgc2VlYWxzbzogWydzaW1wbGlmeScsICdwYXJzZScsICdldmFsdWF0ZSddXG59O1xuZXhwb3J0cy5kZXJpdmF0aXZlRG9jcyA9IGRlcml2YXRpdmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sc29sdmVEb2NzID0gdm9pZCAwO1xudmFyIGxzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICdsc29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD1sc29sdmUoTCwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gTCAqIHggPSBiIHdoZXJlIEwgaXMgYW4gW24geCBuXSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbLTIsIDM7IDIsIDFdJywgJ2IgPSBbMTEsIDldJywgJ3ggPSBsc29sdmUoYSwgYiknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnbHVzb2x2ZScsICd1c29sdmUnLCAnbWF0cml4JywgJ3NwYXJzZSddXG59O1xuZXhwb3J0cy5sc29sdmVEb2NzID0gbHNvbHZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVwRG9jcyA9IHZvaWQgMDtcbnZhciBsdXBEb2NzID0ge1xuICBuYW1lOiAnbHVwJyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ2x1cChtKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggQSBpcyBkZWNvbXBvc2VkIGluIHRocmVlIG1hdHJpY2VzIChMLCBVLCBQKSB3aGVyZSBQICogQSA9IEwgKiBVJyxcbiAgZXhhbXBsZXM6IFsnbHVwKFtbMiwgMV0sIFsxLCA0XV0pJywgJ2x1cChtYXRyaXgoW1syLCAxXSwgWzEsIDRdXSkpJywgJ2x1cChzcGFyc2UoW1syLCAxXSwgWzEsIDRdXSkpJ10sXG4gIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnc2x1JywgJ3FyJ11cbn07XG5leHBvcnRzLmx1cERvY3MgPSBsdXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sdXNvbHZlRG9jcyA9IHZvaWQgMDtcbnZhciBsdXNvbHZlRG9jcyA9IHtcbiAgbmFtZTogJ2x1c29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD1sdXNvbHZlKEEsIGIpJywgJ3g9bHVzb2x2ZShsdSwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiIHdoZXJlIEEgaXMgYW4gW24geCBuXSBtYXRyaXggYW5kIGIgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci4nLFxuICBleGFtcGxlczogWydhID0gWy0yLCAzOyAyLCAxXScsICdiID0gWzExLCA5XScsICd4ID0gbHVzb2x2ZShhLCBiKSddLFxuICBzZWVhbHNvOiBbJ2x1cCcsICdzbHUnLCAnbHNvbHZlJywgJ3Vzb2x2ZScsICdtYXRyaXgnLCAnc3BhcnNlJ11cbn07XG5leHBvcnRzLmx1c29sdmVEb2NzID0gbHVzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnFyRG9jcyA9IHZvaWQgMDtcbnZhciBxckRvY3MgPSB7XG4gIG5hbWU6ICdxcicsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydxcihBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIE1hdHJpeCBRUiBkZWNvbXBvc2l0aW9uLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgUWAsIGBSYCkgd2hlcmUgYFFgIGlzIGFuIG9ydGhvZ29uYWwgbWF0cml4IGFuZCBgUmAgaXMgYW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsncXIoW1sxLCAtMSwgIDRdLCBbMSwgIDQsIC0yXSwgWzEsICA0LCAgMl0sIFsxLCAgLTEsIDBdXSknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnc2x1JywgJ21hdHJpeCddXG59O1xuZXhwb3J0cy5xckRvY3MgPSBxckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplRG9jcyA9IHZvaWQgMDtcbnZhciByYXRpb25hbGl6ZURvY3MgPSB7XG4gIG5hbWU6ICdyYXRpb25hbGl6ZScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydyYXRpb25hbGl6ZShleHByKScsICdyYXRpb25hbGl6ZShleHByLCBzY29wZSknLCAncmF0aW9uYWxpemUoZXhwciwgc2NvcGUsIGRldGFpbGVkKSddLFxuICBkZXNjcmlwdGlvbjogJ1RyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi4gSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0cyB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLicsXG4gIGV4YW1wbGVzOiBbJ3JhdGlvbmFsaXplKFwiMngveSAtIHkvKHgrMSlcIiknLCAncmF0aW9uYWxpemUoXCIyeC95IC0geS8oeCsxKVwiLCB0cnVlKSddLFxuICBzZWVhbHNvOiBbJ3NpbXBsaWZ5J11cbn07XG5leHBvcnRzLnJhdGlvbmFsaXplRG9jcyA9IHJhdGlvbmFsaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2ltcGxpZnlEb2NzID0gdm9pZCAwO1xudmFyIHNpbXBsaWZ5RG9jcyA9IHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ3NpbXBsaWZ5KGV4cHIpJywgJ3NpbXBsaWZ5KGV4cHIsIHJ1bGVzKSddLFxuICBkZXNjcmlwdGlvbjogJ1NpbXBsaWZ5IGFuIGV4cHJlc3Npb24gdHJlZS4nLFxuICBleGFtcGxlczogWydzaW1wbGlmeShcIjMgKyAyIC8gNFwiKScsICdzaW1wbGlmeShcIjJ4ICsgeFwiKScsICdmID0gcGFyc2UoXCJ4ICogKHggKyAyICsgeClcIiknLCAnc2ltcGxpZmllZCA9IHNpbXBsaWZ5KGYpJywgJ3NpbXBsaWZpZWQuZXZhbHVhdGUoe3g6IDJ9KSddLFxuICBzZWVhbHNvOiBbJ2Rlcml2YXRpdmUnLCAncGFyc2UnLCAnZXZhbHVhdGUnXVxufTtcbmV4cG9ydHMuc2ltcGxpZnlEb2NzID0gc2ltcGxpZnlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbHVEb2NzID0gdm9pZCAwO1xudmFyIHNsdURvY3MgPSB7XG4gIG5hbWU6ICdzbHUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsnc2x1KEEsIG9yZGVyLCB0aHJlc2hvbGQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBNYXRyaXggTFUgZGVjb21wb3NpdGlvbiB3aXRoIGZ1bGwgcGl2b3RpbmcuIE1hdHJpeCBBIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChMLCBVKSBhbmQgdHdvIHBlcm11dGF0aW9uIHZlY3RvcnMgKHBpbnYsIHEpIHdoZXJlIFAgKiBBICogUSA9IEwgKiBVJyxcbiAgZXhhbXBsZXM6IFsnc2x1KHNwYXJzZShbNC41LCAwLCAzLjIsIDA7IDMuMSwgMi45LCAwLCAwLjk7IDAsIDEuNywgMywgMDsgMy41LCAwLjQsIDAsIDFdKSwgMSwgMC4wMDEpJ10sXG4gIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnbHVwJywgJ3FyJ11cbn07XG5leHBvcnRzLnNsdURvY3MgPSBzbHVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51c29sdmVEb2NzID0gdm9pZCAwO1xudmFyIHVzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICd1c29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD11c29sdmUoVSwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gVSAqIHggPSBiIHdoZXJlIFUgaXMgYW4gW24geCBuXSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsXG4gIGV4YW1wbGVzOiBbJ3g9dXNvbHZlKHNwYXJzZShbMSwgMSwgMSwgMTsgMCwgMSwgMSwgMTsgMCwgMCwgMSwgMTsgMCwgMCwgMCwgMV0pLCBbMTsgMjsgMzsgNF0pJ10sXG4gIHNlZWFsc286IFsnbHVwJywgJ2x1c29sdmUnLCAnbHNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMudXNvbHZlRG9jcyA9IHVzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFic0RvY3MgPSB2b2lkIDA7XG52YXIgYWJzRG9jcyA9IHtcbiAgbmFtZTogJ2FicycsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydhYnMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhYnMoMy41KScsICdhYnMoLTQuMiknXSxcbiAgc2VlYWxzbzogWydzaWduJ11cbn07XG5leHBvcnRzLmFic0RvY3MgPSBhYnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGREb2NzID0gdm9pZCAwO1xudmFyIGFkZERvY3MgPSB7XG4gIG5hbWU6ICdhZGQnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICsgeScsICdhZGQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdBZGQgdHdvIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydhID0gMi4xICsgMy42JywgJ2EgLSAzLjYnLCAnMyArIDJpJywgJzMgY20gKyAyIGluY2gnLCAnXCIyLjNcIiArIFwiNFwiJ10sXG4gIHNlZWFsc286IFsnc3VidHJhY3QnXVxufTtcbmV4cG9ydHMuYWRkRG9jcyA9IGFkZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNicnREb2NzID0gdm9pZCAwO1xudmFyIGNicnREb2NzID0ge1xuICBuYW1lOiAnY2JydCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjYnJ0KHgpJywgJ2NicnQoeCwgYWxsUm9vdHMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViaWMgcm9vdCB2YWx1ZS4gSWYgeCA9IHkgKiB5ICogeSwgdGhlbiB5IGlzIHRoZSBjdWJpYyByb290IG9mIHguIFdoZW4gYHhgIGlzIGEgbnVtYmVyIG9yIGNvbXBsZXggbnVtYmVyLCBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgYGFsbFJvb3RzYCBjYW4gYmUgcHJvdmlkZWQgdG8gcmV0dXJuIGFsbCB0aHJlZSBjdWJpYyByb290cy4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQnLFxuICBleGFtcGxlczogWydjYnJ0KDY0KScsICdjdWJlKDQpJywgJ2NicnQoLTgpJywgJ2NicnQoMiArIDNpKScsICdjYnJ0KDhpKScsICdjYnJ0KDhpLCB0cnVlKScsICdjYnJ0KDI3IG1eMyknXSxcbiAgc2VlYWxzbzogWydzcXVhcmUnLCAnc3FydCcsICdjdWJlJywgJ211bHRpcGx5J11cbn07XG5leHBvcnRzLmNicnREb2NzID0gY2JydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNlaWxEb2NzID0gdm9pZCAwO1xudmFyIGNlaWxEb2NzID0ge1xuICBuYW1lOiAnY2VpbCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjZWlsKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHkuIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuJyxcbiAgZXhhbXBsZXM6IFsnY2VpbCgzLjIpJywgJ2NlaWwoMy44KScsICdjZWlsKC00LjIpJ10sXG4gIHNlZWFsc286IFsnZmxvb3InLCAnZml4JywgJ3JvdW5kJ11cbn07XG5leHBvcnRzLmNlaWxEb2NzID0gY2VpbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmN1YmVEb2NzID0gdm9pZCAwO1xudmFyIGN1YmVEb2NzID0ge1xuICBuYW1lOiAnY3ViZScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjdWJlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLiBUaGUgY3ViZSBvZiB4IGlzIHggKiB4ICogeC4nLFxuICBleGFtcGxlczogWydjdWJlKDIpJywgJzJeMycsICcyICogMiAqIDInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdzcXVhcmUnLCAncG93J11cbn07XG5leHBvcnRzLmN1YmVEb2NzID0gY3ViZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpdmlkZURvY3MgPSB2b2lkIDA7XG52YXIgZGl2aWRlRG9jcyA9IHtcbiAgbmFtZTogJ2RpdmlkZScsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLyB5JywgJ2RpdmlkZSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0RpdmlkZSB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSAyIC8gMycsICdhICogMycsICc0LjUgLyAyJywgJzMgKyA0IC8gMicsICcoMyArIDQpIC8gMicsICcxOCBrbSAvIDQuNSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5J11cbn07XG5leHBvcnRzLmRpdmlkZURvY3MgPSBkaXZpZGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGVEb2NzID0gdm9pZCAwO1xudmFyIGRvdERpdmlkZURvY3MgPSB7XG4gIG5hbWU6ICdkb3REaXZpZGUnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4IC4vIHknLCAnZG90RGl2aWRlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnRGl2aWRlIHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYiA9IFsyLCAxLCAxOyAzLCAyLCA1XScsICdhIC4vIGInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkb3RNdWx0aXBseScsICdkaXZpZGUnXVxufTtcbmV4cG9ydHMuZG90RGl2aWRlRG9jcyA9IGRvdERpdmlkZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5RG9jcyA9IHZvaWQgMDtcbnZhciBkb3RNdWx0aXBseURvY3MgPSB7XG4gIG5hbWU6ICdkb3RNdWx0aXBseScsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLiogeScsICdkb3RNdWx0aXBseSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ011bHRpcGx5IHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYiA9IFsyLCAxLCAxOyAzLCAyLCA1XScsICdhIC4qIGInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkaXZpZGUnLCAnZG90RGl2aWRlJ11cbn07XG5leHBvcnRzLmRvdE11bHRpcGx5RG9jcyA9IGRvdE11bHRpcGx5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90UG93RG9jcyA9IHZvaWQgMDtcbnZhciBkb3RQb3dEb2NzID0ge1xuICBuYW1lOiAnZG90UG93JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAuXiB5JywgJ2RvdFBvdyh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSBlbGVtZW50IHdpc2UuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdhIC5eIDInXSxcbiAgc2VlYWxzbzogWydwb3cnXVxufTtcbmV4cG9ydHMuZG90UG93RG9jcyA9IGRvdFBvd0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cERvY3MgPSB2b2lkIDA7XG52YXIgZXhwRG9jcyA9IHtcbiAgbmFtZTogJ2V4cCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGV4cG9uZW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnZXhwKDEuMyknLCAnZSBeIDEuMycsICdsb2coZXhwKDEuMykpJywgJ3ggPSAyLjQnLCAnKGV4cChpKngpID09IGNvcyh4KSArIGkqc2luKHgpKSAgICMgRXVsZXJcXCdzIGZvcm11bGEnXSxcbiAgc2VlYWxzbzogWydleHBtJywgJ2V4cG0xJywgJ3BvdycsICdsb2cnXVxufTtcbmV4cG9ydHMuZXhwRG9jcyA9IGV4cERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG1Eb2NzID0gdm9pZCAwO1xudmFyIGV4cG1Eb2NzID0ge1xuICBuYW1lOiAnZXhwbScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtYXRyaXggZXhwb25lbnRpYWwsIGV4cG0oQSkgPSBlXkEuICcgKyAnVGhlIG1hdHJpeCBtdXN0IGJlIHNxdWFyZS4gJyArICdOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCBleHAoYSksIHdoaWNoIHBlcmZvcm1zIGVsZW1lbnQtd2lzZSBleHBvbmVudGlhdGlvbi4nLFxuICBleGFtcGxlczogWydleHBtKFtbMCwyXSxbMCwwXV0pJ10sXG4gIHNlZWFsc286IFsnZXhwJ11cbn07XG5leHBvcnRzLmV4cG1Eb2NzID0gZXhwbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG0xRG9jcyA9IHZvaWQgMDtcbnZhciBleHBtMURvY3MgPSB7XG4gIG5hbWU6ICdleHBtMScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHBtMSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgdmFsdWUgb2Ygc3VidHJhY3RpbmcgMSBmcm9tIHRoZSBleHBvbmVudGlhbCB2YWx1ZS4nLFxuICBleGFtcGxlczogWydleHBtMSgyKScsICdwb3coZSwgMikgLSAxJywgJ2xvZyhleHBtMSgyKSArIDEpJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ3BvdycsICdsb2cnXVxufTtcbmV4cG9ydHMuZXhwbTFEb2NzID0gZXhwbTFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maXhEb2NzID0gdm9pZCAwO1xudmFyIGZpeERvY3MgPSB7XG4gIG5hbWU6ICdmaXgnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnZml4KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHplcm8uIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHplcm8uJyxcbiAgZXhhbXBsZXM6IFsnZml4KDMuMiknLCAnZml4KDMuOCknLCAnZml4KC00LjIpJywgJ2ZpeCgtNC44KSddLFxuICBzZWVhbHNvOiBbJ2NlaWwnLCAnZmxvb3InLCAncm91bmQnXVxufTtcbmV4cG9ydHMuZml4RG9jcyA9IGZpeERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsb29yRG9jcyA9IHZvaWQgMDtcbnZhciBmbG9vckRvY3MgPSB7XG4gIG5hbWU6ICdmbG9vcicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydmbG9vcih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JvdW5kIGEgdmFsdWUgdG93YXJkcyBtaW51cyBpbmZpbml0eS5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBtaW51cyBpbmZpbml0eS4nLFxuICBleGFtcGxlczogWydmbG9vcigzLjIpJywgJ2Zsb29yKDMuOCknLCAnZmxvb3IoLTQuMiknXSxcbiAgc2VlYWxzbzogWydjZWlsJywgJ2ZpeCcsICdyb3VuZCddXG59O1xuZXhwb3J0cy5mbG9vckRvY3MgPSBmbG9vckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdjZERvY3MgPSB2b2lkIDA7XG52YXIgZ2NkRG9jcyA9IHtcbiAgbmFtZTogJ2djZCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydnY2QoYSwgYiknLCAnZ2NkKGEsIGIsIGMsIC4uLiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvci4nLFxuICBleGFtcGxlczogWydnY2QoOCwgMTIpJywgJ2djZCgtNCwgNiknLCAnZ2NkKDI1LCAxNSwgLTEwKSddLFxuICBzZWVhbHNvOiBbJ2xjbScsICd4Z2NkJ11cbn07XG5leHBvcnRzLmdjZERvY3MgPSBnY2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oeXBvdERvY3MgPSB2b2lkIDA7XG52YXIgaHlwb3REb2NzID0ge1xuICBuYW1lOiAnaHlwb3QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnaHlwb3QoYSwgYiwgYywgLi4uKScsICdoeXBvdChbYSwgYiwgYywgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiAnLFxuICBleGFtcGxlczogWydoeXBvdCgzLCA0KScsICdzcXJ0KDNeMiArIDReMiknLCAnaHlwb3QoLTIpJywgJ2h5cG90KFszLCA0LCA1XSknXSxcbiAgc2VlYWxzbzogWydhYnMnLCAnbm9ybSddXG59O1xuZXhwb3J0cy5oeXBvdERvY3MgPSBoeXBvdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxjbURvY3MgPSB2b2lkIDA7XG52YXIgbGNtRG9jcyA9IHtcbiAgbmFtZTogJ2xjbScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsY20oeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUuJyxcbiAgZXhhbXBsZXM6IFsnbGNtKDQsIDYpJywgJ2xjbSg2LCAyMSknLCAnbGNtKDYsIDIxLCA1KSddLFxuICBzZWVhbHNvOiBbJ2djZCddXG59O1xuZXhwb3J0cy5sY21Eb2NzID0gbGNtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9nRG9jcyA9IHZvaWQgMDtcbnZhciBsb2dEb2NzID0ge1xuICBuYW1lOiAnbG9nJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ2xvZyh4KScsICdsb2coeCwgYmFzZSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS4gSWYgbm8gYmFzZSBpcyBwcm92aWRlZCwgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHggaXMgY2FsY3VsYXRlZC4gSWYgYmFzZSBpZiBwcm92aWRlZCwgdGhlIGxvZ2FyaXRobSBpcyBjYWxjdWxhdGVkIGZvciB0aGUgc3BlY2lmaWVkIGJhc2UuIGxvZyh4LCBiYXNlKSBpcyBkZWZpbmVkIGFzIGxvZyh4KSAvIGxvZyhiYXNlKS4nLFxuICBleGFtcGxlczogWydsb2coMy41KScsICdhID0gbG9nKDIuNCknLCAnZXhwKGEpJywgJzEwIF4gNCcsICdsb2coMTAwMDAsIDEwKScsICdsb2coMTAwMDApIC8gbG9nKDEwKScsICdiID0gbG9nKDEwMjQsIDIpJywgJzIgXiBiJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ2xvZzFwJywgJ2xvZzInLCAnbG9nMTAnXVxufTtcbmV4cG9ydHMubG9nRG9jcyA9IGxvZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzEwRG9jcyA9IHZvaWQgMDtcbnZhciBsb2cxMERvY3MgPSB7XG4gIG5hbWU6ICdsb2cxMCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2cxMCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnbG9nMTAoMC4wMDAwMSknLCAnbG9nMTAoMTAwMDApJywgJzEwIF4gNCcsICdsb2coMTAwMDApIC8gbG9nKDEwKScsICdsb2coMTAwMDAsIDEwKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnXVxufTtcbmV4cG9ydHMubG9nMTBEb2NzID0gbG9nMTBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxcERvY3MgPSB2b2lkIDA7XG52YXIgbG9nMXBEb2NzID0ge1xuICBuYW1lOiAnbG9nMXAnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbG9nMXAoeCknLCAnbG9nMXAoeCwgYmFzZSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIGB2YWx1ZSsxYCcsXG4gIGV4YW1wbGVzOiBbJ2xvZzFwKDIuNSknLCAnZXhwKGxvZzFwKDEuNCkpJywgJ3BvdygxMCwgNCknLCAnbG9nMXAoOTk5OSwgMTApJywgJ2xvZzFwKDk5OTkpIC8gbG9nKDEwKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnLCAnbG9nMicsICdsb2cxMCddXG59O1xuZXhwb3J0cy5sb2cxcERvY3MgPSBsb2cxcERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzJEb2NzID0gdm9pZCAwO1xudmFyIGxvZzJEb2NzID0ge1xuICBuYW1lOiAnbG9nMicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2cyKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSAyLWJhc2Ugb2YgYSB2YWx1ZS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxjdWxhdGluZyBgbG9nKHgsIDIpYC4nLFxuICBleGFtcGxlczogWydsb2cyKDAuMDMxMjUpJywgJ2xvZzIoMTYpJywgJ2xvZzIoMTYpIC8gbG9nMigyKScsICdwb3coMiwgNCknXSxcbiAgc2VlYWxzbzogWydleHAnLCAnbG9nMXAnLCAnbG9nJywgJ2xvZzEwJ11cbn07XG5leHBvcnRzLmxvZzJEb2NzID0gbG9nMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZERvY3MgPSB2b2lkIDA7XG52YXIgbW9kRG9jcyA9IHtcbiAgbmFtZTogJ21vZCcsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggJSB5JywgJ3ggbW9kIHknLCAnbW9kKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgbW9kdWx1cywgdGhlIHJlbWFpbmRlciBvZiBhbiBpbnRlZ2VyIGRpdmlzaW9uLicsXG4gIGV4YW1wbGVzOiBbJzcgJSAzJywgJzExICUgMicsICcxMCBtb2QgNCcsICdpc09kZCh4KSA9IHggJSAyJywgJ2lzT2RkKDIpJywgJ2lzT2RkKDMpJ10sXG4gIHNlZWFsc286IFsnZGl2aWRlJ11cbn07XG5leHBvcnRzLm1vZERvY3MgPSBtb2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aXBseURvY3MgPSB2b2lkIDA7XG52YXIgbXVsdGlwbHlEb2NzID0ge1xuICBuYW1lOiAnbXVsdGlwbHknLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICogeScsICdtdWx0aXBseSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ211bHRpcGx5IHR3byB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IDIuMSAqIDMuNCcsICdhIC8gMy40JywgJzIgKiAzICsgNCcsICcyICogKDMgKyA0KScsICczICogMi4xIGttJ10sXG4gIHNlZWFsc286IFsnZGl2aWRlJ11cbn07XG5leHBvcnRzLm11bHRpcGx5RG9jcyA9IG11bHRpcGx5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubm9ybURvY3MgPSB2b2lkIDA7XG52YXIgbm9ybURvY3MgPSB7XG4gIG5hbWU6ICdub3JtJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ25vcm0oeCknLCAnbm9ybSh4LCBwKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgbm9ybSBvZiBhIG51bWJlciwgdmVjdG9yIG9yIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydhYnMoLTMuNSknLCAnbm9ybSgtMy41KScsICdub3JtKDMgLSA0aSknLCAnbm9ybShbMSwgMiwgLTNdLCBJbmZpbml0eSknLCAnbm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpJywgJ25vcm0oWzMsIDRdLCAyKScsICdub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpJywgJ25vcm0oW1sxLCAyXSwgWzMsIDRdXSwgXCJpbmZcIiknLCAnbm9ybShbWzEsIDJdLCBbMywgNF1dLCBcImZyb1wiKSddXG59O1xuZXhwb3J0cy5ub3JtRG9jcyA9IG5vcm1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290RG9jcyA9IHZvaWQgMDtcbnZhciBudGhSb290RG9jcyA9IHtcbiAgbmFtZTogJ250aFJvb3QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbnRoUm9vdChhKScsICdudGhSb290KGEsIHJvb3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLiAnICsgJ1RoZSBwcmluY2lwYWwgbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCAnICsgJ2lzIHRoZSBwb3NpdGl2ZSByZWFsIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvbiBcInhecm9vdCA9IEFcIi4nLFxuICBleGFtcGxlczogWyc0IF4gMycsICdudGhSb290KDY0LCAzKScsICdudGhSb290KDksIDIpJywgJ3NxcnQoOSknXSxcbiAgc2VlYWxzbzogWydudGhSb290cycsICdwb3cnLCAnc3FydCddXG59O1xuZXhwb3J0cy5udGhSb290RG9jcyA9IG50aFJvb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290c0RvY3MgPSB2b2lkIDA7XG52YXIgbnRoUm9vdHNEb2NzID0ge1xuICBuYW1lOiAnbnRoUm9vdHMnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbnRoUm9vdHMoQSknLCAnbnRoUm9vdHMoQSwgcm9vdCknXSxcbiAgZGVzY3JpcHRpb246ICcnICsgJ0NhbGN1bGF0ZSB0aGUgbnRoIHJvb3RzIG9mIGEgdmFsdWUuICcgKyAnQW4gbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCAnICsgJ2lzIGEgcG9zaXRpdmUgcmVhbCBzb2x1dGlvbiBvZiB0aGUgZXF1YXRpb24gXCJ4XnJvb3QgPSBBXCIuICcgKyAnVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGNvbXBsZXggdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ250aFJvb3RzKDEpJywgJ250aFJvb3RzKDEsIDMpJ10sXG4gIHNlZWFsc286IFsnc3FydCcsICdwb3cnLCAnbnRoUm9vdCddXG59O1xuZXhwb3J0cy5udGhSb290c0RvY3MgPSBudGhSb290c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBvd0RvY3MgPSB2b2lkIDA7XG52YXIgcG93RG9jcyA9IHtcbiAgbmFtZTogJ3BvdycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggXiB5JywgJ3Bvdyh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgeF55LicsXG4gIGV4YW1wbGVzOiBbJzJeMycsICcyKjIqMicsICcxICsgZSBeIChwaSAqIGkpJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnbnRoUm9vdCcsICdudGhSb290cycsICdzcXJ0J11cbn07XG5leHBvcnRzLnBvd0RvY3MgPSBwb3dEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3VuZERvY3MgPSB2b2lkIDA7XG52YXIgcm91bmREb2NzID0ge1xuICBuYW1lOiAncm91bmQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsncm91bmQoeCknLCAncm91bmQoeCwgbiknXSxcbiAgZGVzY3JpcHRpb246ICdyb3VuZCBhIHZhbHVlIHRvd2FyZHMgdGhlIG5lYXJlc3QgaW50ZWdlci5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLiBXaGVuIG4gaXMgc3BlY2lmaWVkLCB0aGUgdmFsdWUgaXMgcm91bmRlZCB0byBuIGRlY2ltYWxzLicsXG4gIGV4YW1wbGVzOiBbJ3JvdW5kKDMuMiknLCAncm91bmQoMy44KScsICdyb3VuZCgtNC4yKScsICdyb3VuZCgtNC44KScsICdyb3VuZChwaSwgMyknLCAncm91bmQoMTIzLjQ1Njc4LCAyKSddLFxuICBzZWVhbHNvOiBbJ2NlaWwnLCAnZmxvb3InLCAnZml4J11cbn07XG5leHBvcnRzLnJvdW5kRG9jcyA9IHJvdW5kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2lnbkRvY3MgPSB2b2lkIDA7XG52YXIgc2lnbkRvY3MgPSB7XG4gIG5hbWU6ICdzaWduJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NpZ24oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzaWduIG9mIGEgdmFsdWUuIFRoZSBzaWduIG9mIGEgdmFsdWUgeCBpcyAxIHdoZW4geD4xLCAtMSB3aGVuIHg8MCwgYW5kIDAgd2hlbiB4PTAuJyxcbiAgZXhhbXBsZXM6IFsnc2lnbigzLjUpJywgJ3NpZ24oLTQuMiknLCAnc2lnbigwKSddLFxuICBzZWVhbHNvOiBbJ2FicyddXG59O1xuZXhwb3J0cy5zaWduRG9jcyA9IHNpZ25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0RG9jcyA9IHZvaWQgMDtcbnZhciBzcXJ0RG9jcyA9IHtcbiAgbmFtZTogJ3NxcnQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnc3FydCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSByb290IHZhbHVlLiBJZiB4ID0geSAqIHksIHRoZW4geSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgeC4nLFxuICBleGFtcGxlczogWydzcXJ0KDI1KScsICc1ICogNScsICdzcXJ0KC0xKSddLFxuICBzZWVhbHNvOiBbJ3NxdWFyZScsICdzcXJ0bScsICdtdWx0aXBseScsICdudGhSb290JywgJ250aFJvb3RzJywgJ3BvdyddXG59O1xuZXhwb3J0cy5zcXJ0RG9jcyA9IHNxcnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0bURvY3MgPSB2b2lkIDA7XG52YXIgc3FydG1Eb2NzID0ge1xuICBuYW1lOiAnc3FydG0nLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnc3FydG0oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBhIHNxdWFyZSBtYXRyaXguIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3QgbWF0cml4IGBYYCBvZiBhbm90aGVyIG1hdHJpeCBgQWAgaXMgc3VjaCB0aGF0IGBYICogWCA9IEFgLicsXG4gIGV4YW1wbGVzOiBbJ3NxcnRtKFtbMSwgMl0sIFszLCA0XV0pJ10sXG4gIHNlZWFsc286IFsnc3FydCcsICdhYnMnLCAnc3F1YXJlJywgJ211bHRpcGx5J11cbn07XG5leHBvcnRzLnNxcnRtRG9jcyA9IHNxcnRtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3F1YXJlRG9jcyA9IHZvaWQgMDtcbnZhciBzcXVhcmVEb2NzID0ge1xuICBuYW1lOiAnc3F1YXJlJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NxdWFyZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLiBUaGUgc3F1YXJlIG9mIHggaXMgeCAqIHguJyxcbiAgZXhhbXBsZXM6IFsnc3F1YXJlKDMpJywgJ3NxcnQoOSknLCAnM14yJywgJzMgKiAzJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAncG93JywgJ3NxcnQnLCAnY3ViZSddXG59O1xuZXhwb3J0cy5zcXVhcmVEb2NzID0gc3F1YXJlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VidHJhY3REb2NzID0gdm9pZCAwO1xudmFyIHN1YnRyYWN0RG9jcyA9IHtcbiAgbmFtZTogJ3N1YnRyYWN0JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAtIHknLCAnc3VidHJhY3QoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdzdWJ0cmFjdCB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSA1LjMgLSAyJywgJ2EgKyAyJywgJzIvMyAtIDEvNicsICcyICogMyAtIDMnLCAnMi4xIGttIC0gNTAwbSddLFxuICBzZWVhbHNvOiBbJ2FkZCddXG59O1xuZXhwb3J0cy5zdWJ0cmFjdERvY3MgPSBzdWJ0cmFjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5TWludXNEb2NzID0gdm9pZCAwO1xudmFyIHVuYXJ5TWludXNEb2NzID0ge1xuICBuYW1lOiAndW5hcnlNaW51cycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJy14JywgJ3VuYXJ5TWludXMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUuIENvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuJyxcbiAgZXhhbXBsZXM6IFsnLTQuNScsICctKC01LjYpJywgJy1cIjIyXCInXSxcbiAgc2VlYWxzbzogWydhZGQnLCAnc3VidHJhY3QnLCAndW5hcnlQbHVzJ11cbn07XG5leHBvcnRzLnVuYXJ5TWludXNEb2NzID0gdW5hcnlNaW51c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5UGx1c0RvY3MgPSB2b2lkIDA7XG52YXIgdW5hcnlQbHVzRG9jcyA9IHtcbiAgbmFtZTogJ3VuYXJ5UGx1cycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJyt4JywgJ3VuYXJ5UGx1cyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuJyxcbiAgZXhhbXBsZXM6IFsnK3RydWUnLCAnK1wiMlwiJ10sXG4gIHNlZWFsc286IFsnYWRkJywgJ3N1YnRyYWN0JywgJ3VuYXJ5TWludXMnXVxufTtcbmV4cG9ydHMudW5hcnlQbHVzRG9jcyA9IHVuYXJ5UGx1c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhnY2REb2NzID0gdm9pZCAwO1xudmFyIHhnY2REb2NzID0ge1xuICBuYW1lOiAneGdjZCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWyd4Z2NkKGEsIGIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy4gVGhlIHJlc3VsdCBpcyBhbiBhcnJheSBbZCwgeCwgeV0gd2l0aCAzIGVudHJpZXMsIHdoZXJlIGQgaXMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yLCBhbmQgZCA9IHggKiBhICsgeSAqIGIuJyxcbiAgZXhhbXBsZXM6IFsneGdjZCg4LCAxMiknLCAnZ2NkKDgsIDEyKScsICd4Z2NkKDM2MTYzLCAyMTE5OSknXSxcbiAgc2VlYWxzbzogWydnY2QnLCAnbGNtJ11cbn07XG5leHBvcnRzLnhnY2REb2NzID0geGdjZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZERvY3MgPSB2b2lkIDA7XG52YXIgYml0QW5kRG9jcyA9IHtcbiAgbmFtZTogJ2JpdEFuZCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4ICYgeScsICdiaXRBbmQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIEFORCBvcGVyYXRpb24uIFBlcmZvcm1zIHRoZSBsb2dpY2FsIEFORCBvcGVyYXRpb24gb24gZWFjaCBwYWlyIG9mIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcgdGhlbS4gSWYgYm90aCBiaXRzIGluIHRoZSBjb21wYXJlZCBwb3NpdGlvbiBhcmUgMSwgdGhlIGJpdCBpbiB0aGUgcmVzdWx0aW5nIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyAxLCBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgMCcsXG4gIGV4YW1wbGVzOiBbJzUgJiAzJywgJ2JpdEFuZCg1MywgMTMxKScsICdbMSwgMTIsIDMxXSAmIDQyJ10sXG4gIHNlZWFsc286IFsnYml0Tm90JywgJ2JpdE9yJywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0QW5kRG9jcyA9IGJpdEFuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE5vdERvY3MgPSB2b2lkIDA7XG52YXIgYml0Tm90RG9jcyA9IHtcbiAgbmFtZTogJ2JpdE5vdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd+eCcsICdiaXROb3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIE5PVCBvcGVyYXRpb24uIFBlcmZvcm1zIGEgbG9naWNhbCBuZWdhdGlvbiBvbiBlYWNoIGJpdCBvZiB0aGUgZ2l2ZW4gdmFsdWUuIEJpdHMgdGhhdCBhcmUgMCBiZWNvbWUgMSwgYW5kIHRob3NlIHRoYXQgYXJlIDEgYmVjb21lIDAuJyxcbiAgZXhhbXBsZXM6IFsnfjEnLCAnfjInLCAnYml0Tm90KFsyLCAtMywgNF0pJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE9yJywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0Tm90RG9jcyA9IGJpdE5vdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE9yRG9jcyA9IHZvaWQgMDtcbnZhciBiaXRPckRvY3MgPSB7XG4gIG5hbWU6ICdiaXRPcicsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4IHwgeScsICdiaXRPcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgT1Igb3BlcmF0aW9uLiBQZXJmb3JtcyB0aGUgbG9naWNhbCBpbmNsdXNpdmUgT1Igb3BlcmF0aW9uIG9uIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMuIFRoZSByZXN1bHQgaW4gZWFjaCBwb3NpdGlvbiBpcyAxIGlmIHRoZSBmaXJzdCBiaXQgaXMgMSBvciB0aGUgc2Vjb25kIGJpdCBpcyAxIG9yIGJvdGggYml0cyBhcmUgMSwgb3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIDAuJyxcbiAgZXhhbXBsZXM6IFsnNSB8IDMnLCAnYml0T3IoWzEsIDIsIDNdLCA0KSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0WG9yJywgJ2xlZnRTaGlmdCcsICdyaWdodEFyaXRoU2hpZnQnLCAncmlnaHRMb2dTaGlmdCddXG59O1xuZXhwb3J0cy5iaXRPckRvY3MgPSBiaXRPckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdFhvckRvY3MgPSB2b2lkIDA7XG52YXIgYml0WG9yRG9jcyA9IHtcbiAgbmFtZTogJ2JpdFhvcicsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWydiaXRYb3IoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIFhPUiBvcGVyYXRpb24sIGV4Y2x1c2l2ZSBPUi4gUGVyZm9ybXMgdGhlIGxvZ2ljYWwgZXhjbHVzaXZlIE9SIG9wZXJhdGlvbiBvbiBlYWNoIHBhaXIgb2YgY29ycmVzcG9uZGluZyBiaXRzIG9mIHRoZSB0d28gZ2l2ZW4gdmFsdWVzLiBUaGUgcmVzdWx0IGluIGVhY2ggcG9zaXRpb24gaXMgMSBpZiBvbmx5IHRoZSBmaXJzdCBiaXQgaXMgMSBvciBvbmx5IHRoZSBzZWNvbmQgYml0IGlzIDEsIGJ1dCB3aWxsIGJlIDAgaWYgYm90aCBhcmUgMCBvciBib3RoIGFyZSAxLicsXG4gIGV4YW1wbGVzOiBbJ2JpdE9yKDEsIDIpJywgJ2JpdFhvcihbMiwgMywgNF0sIDQpJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0WG9yRG9jcyA9IGJpdFhvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxlZnRTaGlmdERvY3MgPSB2b2lkIDA7XG52YXIgbGVmdFNoaWZ0RG9jcyA9IHtcbiAgbmFtZTogJ2xlZnRTaGlmdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4IDw8IHknLCAnbGVmdFNoaWZ0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQml0d2lzZSBsZWZ0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnNCA8PCAxJywgJzggPj4gMSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0T3InLCAnYml0WG9yJywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J11cbn07XG5leHBvcnRzLmxlZnRTaGlmdERvY3MgPSBsZWZ0U2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yaWdodEFyaXRoU2hpZnREb2NzID0gdm9pZCAwO1xudmFyIHJpZ2h0QXJpdGhTaGlmdERvY3MgPSB7XG4gIG5hbWU6ICdyaWdodEFyaXRoU2hpZnQnLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsneCA+PiB5JywgJ3JpZ2h0QXJpdGhTaGlmdCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cy4nLFxuICBleGFtcGxlczogWyc4ID4+IDEnLCAnNCA8PCAxJywgJy0xMiA+PiAyJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RG9jcyA9IHJpZ2h0QXJpdGhTaGlmdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJpZ2h0TG9nU2hpZnREb2NzID0gdm9pZCAwO1xudmFyIHJpZ2h0TG9nU2hpZnREb2NzID0ge1xuICBuYW1lOiAncmlnaHRMb2dTaGlmdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4ID4+PiB5JywgJ3JpZ2h0TG9nU2hpZnQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIHJpZ2h0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnOCA+Pj4gMScsICc0IDw8IDEnLCAnLTEyID4+PiAyJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCddXG59O1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RG9jcyA9IHJpZ2h0TG9nU2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iZWxsTnVtYmVyc0RvY3MgPSB2b2lkIDA7XG52YXIgYmVsbE51bWJlcnNEb2NzID0ge1xuICBuYW1lOiAnYmVsbE51bWJlcnMnLFxuICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLFxuICBzeW50YXg6IFsnYmVsbE51bWJlcnMobiknXSxcbiAgZGVzY3JpcHRpb246ICdUaGUgQmVsbCBOdW1iZXJzIGNvdW50IHRoZSBudW1iZXIgb2YgcGFydGl0aW9ucyBvZiBhIHNldC4gQSBwYXJ0aXRpb24gaXMgYSBwYWlyd2lzZSBkaXNqb2ludCBzdWJzZXQgb2YgUyB3aG9zZSB1bmlvbiBpcyBTLiBgYmVsbE51bWJlcnNgIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IG4gPj0gMC4nLFxuICBleGFtcGxlczogWydiZWxsTnVtYmVycygzKScsICdiZWxsTnVtYmVycyg4KSddLFxuICBzZWVhbHNvOiBbJ3N0aXJsaW5nUzInXVxufTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEb2NzID0gYmVsbE51bWJlcnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYXRhbGFuRG9jcyA9IHZvaWQgMDtcbnZhciBjYXRhbGFuRG9jcyA9IHtcbiAgbmFtZTogJ2NhdGFsYW4nLFxuICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLFxuICBzeW50YXg6IFsnY2F0YWxhbihuKSddLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy4gY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDAuJyxcbiAgZXhhbXBsZXM6IFsnY2F0YWxhbigzKScsICdjYXRhbGFuKDgpJ10sXG4gIHNlZWFsc286IFsnYmVsbE51bWJlcnMnXVxufTtcbmV4cG9ydHMuY2F0YWxhbkRvY3MgPSBjYXRhbGFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb25Eb2NzID0gdm9pZCAwO1xudmFyIGNvbXBvc2l0aW9uRG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBvc2l0aW9uJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ2NvbXBvc2l0aW9uKG4sIGspJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy4gY29tcG9zaXRpb24gb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBvc2l0aW9uKDUsIDMpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJ11cbn07XG5leHBvcnRzLmNvbXBvc2l0aW9uRG9jcyA9IGNvbXBvc2l0aW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRvY3MgPSB2b2lkIDA7XG52YXIgc3RpcmxpbmdTMkRvY3MgPSB7XG4gIG5hbWU6ICdzdGlybGluZ1MyJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ3N0aXJsaW5nUzIobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdoZSBTdGlybGluZyBudW1iZXJzIG9mIHRoZSBzZWNvbmQga2luZCwgY291bnRzIHRoZSBudW1iZXIgb2Ygd2F5cyB0byBwYXJ0aXRpb24gYSBzZXQgb2YgbiBsYWJlbGxlZCBvYmplY3RzIGludG8gayBub25lbXB0eSB1bmxhYmVsbGVkIHN1YnNldHMuIGBzdGlybGluZ1MyYCBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4uIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDEuJyxcbiAgZXhhbXBsZXM6IFsnc3RpcmxpbmdTMig1LCAzKSddLFxuICBzZWVhbHNvOiBbJ2JlbGxOdW1iZXJzJ11cbn07XG5leHBvcnRzLnN0aXJsaW5nUzJEb2NzID0gc3RpcmxpbmdTMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFyZ0RvY3MgPSB2b2lkIDA7XG52YXIgYXJnRG9jcyA9IHtcbiAgbmFtZTogJ2FyZycsXG4gIGNhdGVnb3J5OiAnQ29tcGxleCcsXG4gIHN5bnRheDogWydhcmcoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYXRhbjIoYiwgYSkuJyxcbiAgZXhhbXBsZXM6IFsnYXJnKDIgKyAyaSknLCAnYXRhbjIoMywgMiknLCAnYXJnKDIgKyAzaSknXSxcbiAgc2VlYWxzbzogWydyZScsICdpbScsICdjb25qJywgJ2FicyddXG59O1xuZXhwb3J0cy5hcmdEb2NzID0gYXJnRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uakRvY3MgPSB2b2lkIDA7XG52YXIgY29uakRvY3MgPSB7XG4gIG5hbWU6ICdjb25qJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ2NvbmooeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgY29tcGxleCBjb25qdWdhdGUgaXMgYS1iaS4nLFxuICBleGFtcGxlczogWydjb25qKDIgKyAzaSknLCAnY29uaigyIC0gM2kpJywgJ2NvbmooLTUuMmkpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnaW0nLCAnYWJzJywgJ2FyZyddXG59O1xuZXhwb3J0cy5jb25qRG9jcyA9IGNvbmpEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbURvY3MgPSB2b2lkIDA7XG52YXIgaW1Eb2NzID0ge1xuICBuYW1lOiAnaW0nLFxuICBjYXRlZ29yeTogJ0NvbXBsZXgnLFxuICBzeW50YXg6IFsnaW0oeCknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsnaW0oMiArIDNpKScsICdyZSgyICsgM2kpJywgJ2ltKC01LjJpKScsICdpbSgyLjQpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnY29uaicsICdhYnMnLCAnYXJnJ11cbn07XG5leHBvcnRzLmltRG9jcyA9IGltRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVEb2NzID0gdm9pZCAwO1xudmFyIHJlRG9jcyA9IHtcbiAgbmFtZTogJ3JlJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ3JlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlci4nLFxuICBleGFtcGxlczogWydyZSgyICsgM2kpJywgJ2ltKDIgKyAzaSknLCAncmUoLTUuMmkpJywgJ3JlKDIuNCknXSxcbiAgc2VlYWxzbzogWydpbScsICdjb25qJywgJ2FicycsICdhcmcnXVxufTtcbmV4cG9ydHMucmVEb2NzID0gcmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZURvY3MgPSB2b2lkIDA7XG52YXIgZXZhbHVhdGVEb2NzID0ge1xuICBuYW1lOiAnZXZhbHVhdGUnLFxuICBjYXRlZ29yeTogJ0V4cHJlc3Npb24nLFxuICBzeW50YXg6IFsnZXZhbHVhdGUoZXhwcmVzc2lvbiknLCAnZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnRXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBvciBhbiBhcnJheSB3aXRoIGV4cHJlc3Npb25zLicsXG4gIGV4YW1wbGVzOiBbJ2V2YWx1YXRlKFwiMiArIDNcIiknLCAnZXZhbHVhdGUoXCJzcXJ0KFwiICsgNCArIFwiKVwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZXZhbHVhdGVEb2NzID0gZXZhbHVhdGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oZWxwRG9jcyA9IHZvaWQgMDtcbnZhciBoZWxwRG9jcyA9IHtcbiAgbmFtZTogJ2hlbHAnLFxuICBjYXRlZ29yeTogJ0V4cHJlc3Npb24nLFxuICBzeW50YXg6IFsnaGVscChvYmplY3QpJywgJ2hlbHAoc3RyaW5nKSddLFxuICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXkgZG9jdW1lbnRhdGlvbiBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS4nLFxuICBleGFtcGxlczogWydoZWxwKHNxcnQpJywgJ2hlbHAoXCJjb21wbGV4XCIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5oZWxwRG9jcyA9IGhlbHBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXN0YW5jZURvY3MgPSB2b2lkIDA7XG52YXIgZGlzdGFuY2VEb2NzID0ge1xuICBuYW1lOiAnZGlzdGFuY2UnLFxuICBjYXRlZ29yeTogJ0dlb21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Rpc3RhbmNlKFt4MSwgeTFdLCBbeDIsIHkyXSknLCAnZGlzdGFuY2UoW1t4MSwgeTFdLCBbeDIsIHkyXV0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50cy4nLFxuICBleGFtcGxlczogWydkaXN0YW5jZShbMCwwXSwgWzQsNF0pJywgJ2Rpc3RhbmNlKFtbMCwwXSwgWzQsNF1dKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZGlzdGFuY2VEb2NzID0gZGlzdGFuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbnRlcnNlY3REb2NzID0gdm9pZCAwO1xudmFyIGludGVyc2VjdERvY3MgPSB7XG4gIG5hbWU6ICdpbnRlcnNlY3QnLFxuICBjYXRlZ29yeTogJ0dlb21ldHJ5JyxcbiAgc3ludGF4OiBbJ2ludGVyc2VjdChleHByMSwgZXhwcjIsIGV4cHIzLCBleHByNCknLCAnaW50ZXJzZWN0KGV4cHIxLCBleHByMiwgZXhwcjMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIGludGVyc2VjdGlvbiBwb2ludCBvZiBsaW5lcyBhbmQvb3IgcGxhbmVzLicsXG4gIGV4YW1wbGVzOiBbJ2ludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKScsICdpbnRlcnNlY3QoWzEsIDAsIDFdLCAgWzQsIC0yLCAyXSwgWzEsIDEsIDEsIDZdKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaW50ZXJzZWN0RG9jcyA9IGludGVyc2VjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFuZERvY3MgPSB2b2lkIDA7XG52YXIgYW5kRG9jcyA9IHtcbiAgbmFtZTogJ2FuZCcsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IGFuZCB5JywgJ2FuZCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgYW5kLiBUZXN0IHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgYm90aCBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ3RydWUgYW5kIGZhbHNlJywgJ3RydWUgYW5kIHRydWUnLCAnMiBhbmQgNCddLFxuICBzZWVhbHNvOiBbJ25vdCcsICdvcicsICd4b3InXVxufTtcbmV4cG9ydHMuYW5kRG9jcyA9IGFuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vdERvY3MgPSB2b2lkIDA7XG52YXIgbm90RG9jcyA9IHtcbiAgbmFtZTogJ25vdCcsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWydub3QgeCcsICdub3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdMb2dpY2FsIG5vdC4gRmxpcHMgdGhlIGJvb2xlYW4gdmFsdWUgb2YgZ2l2ZW4gYXJndW1lbnQuJyxcbiAgZXhhbXBsZXM6IFsnbm90IHRydWUnLCAnbm90IGZhbHNlJywgJ25vdCAyJywgJ25vdCAwJ10sXG4gIHNlZWFsc286IFsnYW5kJywgJ29yJywgJ3hvciddXG59O1xuZXhwb3J0cy5ub3REb2NzID0gbm90RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub3JEb2NzID0gdm9pZCAwO1xudmFyIG9yRG9jcyA9IHtcbiAgbmFtZTogJ29yJyxcbiAgY2F0ZWdvcnk6ICdMb2dpY2FsJyxcbiAgc3ludGF4OiBbJ3ggb3IgeScsICdvcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgb3IuIFRlc3QgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSBvciBmYWxzZScsICdmYWxzZSBvciBmYWxzZScsICcwIG9yIDQnXSxcbiAgc2VlYWxzbzogWydub3QnLCAnYW5kJywgJ3hvciddXG59O1xuZXhwb3J0cy5vckRvY3MgPSBvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhvckRvY3MgPSB2b2lkIDA7XG52YXIgeG9yRG9jcyA9IHtcbiAgbmFtZTogJ3hvcicsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IHhvciB5JywgJ3hvcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgZXhjbHVzaXZlIG9yLCB4b3IuIFRlc3Qgd2hldGhlciBvbmUgYW5kIG9ubHkgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSB4b3IgZmFsc2UnLCAnZmFsc2UgeG9yIGZhbHNlJywgJ3RydWUgeG9yIHRydWUnLCAnMCB4b3IgNCddLFxuICBzZWVhbHNvOiBbJ25vdCcsICdhbmQnLCAnb3InXVxufTtcbmV4cG9ydHMueG9yRG9jcyA9IHhvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtbkRvY3MgPSB2b2lkIDA7XG52YXIgY29sdW1uRG9jcyA9IHtcbiAgbmFtZTogJ2NvbHVtbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2NvbHVtbih4LCBpbmRleCknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIG1hdHJpeCBvciBhcnJheS4nLFxuICBleGFtcGxlczogWydBID0gW1sxLCAyXSwgWzMsIDRdXScsICdjb2x1bW4oQSwgMSknLCAnY29sdW1uKEEsIDIpJ10sXG4gIHNlZWFsc286IFsncm93J11cbn07XG5leHBvcnRzLmNvbHVtbkRvY3MgPSBjb2x1bW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXREb2NzID0gdm9pZCAwO1xudmFyIGNvbmNhdERvY3MgPSB7XG4gIG5hbWU6ICdjb25jYXQnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydjb25jYXQoQSwgQiwgQywgLi4uKScsICdjb25jYXQoQSwgQiwgQywgLi4uLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29uY2F0ZW5hdGUgbWF0cmljZXMuIEJ5IGRlZmF1bHQsIHRoZSBtYXRyaWNlcyBhcmUgY29uY2F0ZW5hdGVkIGJ5IHRoZSBsYXN0IGRpbWVuc2lvbi4gVGhlIGRpbWVuc2lvbiBvbiB3aGljaCB0byBjb25jYXRlbmF0ZSBjYW4gYmUgcHJvdmlkZWQgYXMgbGFzdCBhcmd1bWVudC4nLFxuICBleGFtcGxlczogWydBID0gWzEsIDI7IDUsIDZdJywgJ0IgPSBbMywgNDsgNywgOF0nLCAnY29uY2F0KEEsIEIpJywgJ2NvbmNhdChBLCBCLCAxKScsICdjb25jYXQoQSwgQiwgMiknXSxcbiAgc2VlYWxzbzogWydkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5jb25jYXREb2NzID0gY29uY2F0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3Jvc3NEb2NzID0gdm9pZCAwO1xudmFyIGNyb3NzRG9jcyA9IHtcbiAgbmFtZTogJ2Nyb3NzJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnY3Jvc3MoQSwgQiknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byB2ZWN0b3JzIGluIHRocmVlIGRpbWVuc2lvbmFsIHNwYWNlLicsXG4gIGV4YW1wbGVzOiBbJ2Nyb3NzKFsxLCAxLCAwXSwgIFswLCAxLCAxXSknLCAnY3Jvc3MoWzMsIC0zLCAxXSwgWzQsIDksIDJdKScsICdjcm9zcyhbMiwgMywgNF0sICBbNSwgNiwgN10pJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnZG90J11cbn07XG5leHBvcnRzLmNyb3NzRG9jcyA9IGNyb3NzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZURvY3MgPSB2b2lkIDA7XG52YXIgY3RyYW5zcG9zZURvY3MgPSB7XG4gIG5hbWU6ICdjdHJhbnNwb3NlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsneFxcJycsICdjdHJhbnNwb3NlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGxleCBDb25qdWdhdGUgYW5kIFRyYW5zcG9zZSBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYVxcJycsICdjdHJhbnNwb3NlKGEpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuY3RyYW5zcG9zZURvY3MgPSBjdHJhbnNwb3NlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGV0RG9jcyA9IHZvaWQgMDtcbnZhciBkZXREb2NzID0ge1xuICBuYW1lOiAnZGV0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZGV0KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2RldChbMSwgMjsgMywgNF0pJywgJ2RldChbLTIsIDIsIDM7IC0xLCAxLCAzOyAyLCAwLCAtMV0pJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuZGV0RG9jcyA9IGRldERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpYWdEb2NzID0gdm9pZCAwO1xudmFyIGRpYWdEb2NzID0ge1xuICBuYW1lOiAnZGlhZycsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RpYWcoeCknLCAnZGlhZyh4LCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXguIFdoZW4geCBpcyBhIHZlY3RvciwgYSBtYXRyaXggd2l0aCB0aGUgdmVjdG9yIHZhbHVlcyBvbiB0aGUgZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZC4gV2hlbiB4IGlzIGEgbWF0cml4LCBhIHZlY3RvciB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMgb2YgdGhlIG1hdHJpeCBpcyByZXR1cm5lZC4gV2hlbiBrIGlzIHByb3ZpZGVkLCB0aGUgay10aCBkaWFnb25hbCB3aWxsIGJlIGZpbGxlZCBpbiBvciByZXRyaWV2ZWQsIGlmIGsgaXMgcG9zaXRpdmUsIHRoZSB2YWx1ZXMgYXJlIHBsYWNlZCBvbiB0aGUgc3VwZXIgZGlhZ29uYWwuIFdoZW4gayBpcyBuZWdhdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdWIgZGlhZ29uYWwuJyxcbiAgZXhhbXBsZXM6IFsnZGlhZygxOjMpJywgJ2RpYWcoMTozLCAxKScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDY7IDcsIDgsIDldJywgJ2RpYWcoYSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmRpYWdEb2NzID0gZGlhZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERvY3MgPSB2b2lkIDA7XG52YXIgZG90RG9jcyA9IHtcbiAgbmFtZTogJ2RvdCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RvdChBLCBCKScsICdBICogQiddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMuICcgKyAnVGhlIGRvdCBwcm9kdWN0IG9mIEEgPSBbYTEsIGEyLCBhMywgLi4uLCBhbl0gYW5kIEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl0gJyArICdpcyBkZWZpbmVkIGFzIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm4nLFxuICBleGFtcGxlczogWydkb3QoWzIsIDQsIDFdLCBbMiwgMiwgM10pJywgJ1syLCA0LCAxXSAqIFsyLCAyLCAzXSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2Nyb3NzJ11cbn07XG5leHBvcnRzLmRvdERvY3MgPSBkb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5laWdzRG9jcyA9IHZvaWQgMDtcbnZhciBlaWdzRG9jcyA9IHtcbiAgbmFtZTogJ2VpZ3MnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydlaWdzKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBlaWdlbnZhbHVlcyBhbmQgZWlnZW52ZWN0b3JzIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnZWlncyhbWzUsIDIuM10sIFsyLjMsIDFdXSknXSxcbiAgc2VlYWxzbzogWydpbnYnXVxufTtcbmV4cG9ydHMuZWlnc0RvY3MgPSBlaWdzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlsdGVyRG9jcyA9IHZvaWQgMDtcbnZhciBmaWx0ZXJEb2NzID0ge1xuICBuYW1lOiAnZmlsdGVyJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZmlsdGVyKHgsIHRlc3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGl0ZW1zIGluIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoeCkgPSB4ID4gMCcsICdmaWx0ZXIoWzYsIC0yLCAtMSwgNCwgM10sIGlzUG9zaXRpdmUpJywgJ2ZpbHRlcihbNiwgLTIsIDAsIDEsIDBdLCB4ICE9IDApJ10sXG4gIHNlZWFsc286IFsnc29ydCcsICdtYXAnLCAnZm9yRWFjaCddXG59O1xuZXhwb3J0cy5maWx0ZXJEb2NzID0gZmlsdGVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmxhdHRlbkRvY3MgPSB2b2lkIDA7XG52YXIgZmxhdHRlbkRvY3MgPSB7XG4gIG5hbWU6ICdmbGF0dGVuJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZmxhdHRlbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaXggaW50byBhIHNpbmdsZSBkaW1lbnNpb25hbCBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdzaXplKGEpJywgJ2IgPSBmbGF0dGVuKGEpJywgJ3NpemUoYiknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAncmVzaXplJywgJ3NpemUnLCAnc3F1ZWV6ZSddXG59O1xuZXhwb3J0cy5mbGF0dGVuRG9jcyA9IGZsYXR0ZW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JFYWNoRG9jcyA9IHZvaWQgMDtcbnZhciBmb3JFYWNoRG9jcyA9IHtcbiAgbmFtZTogJ2ZvckVhY2gnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydmb3JFYWNoKHgsIGNhbGxiYWNrKSddLFxuICBkZXNjcmlwdGlvbjogJ0l0ZXJhdGVzIG92ZXIgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4L2FycmF5LCBhbmQgZXhlY3V0ZXMgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2ZvckVhY2goWzEsIDIsIDNdLCBmdW5jdGlvbih2YWwpIHsgY29uc29sZS5sb2codmFsKSB9KSddLFxuICBzZWVhbHNvOiBbJ21hcCcsICdzb3J0JywgJ2ZpbHRlciddXG59O1xuZXhwb3J0cy5mb3JFYWNoRG9jcyA9IGZvckVhY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURvY3MgPSB2b2lkIDA7XG52YXIgZ2V0TWF0cml4RGF0YVR5cGVEb2NzID0ge1xuICBuYW1lOiAnZ2V0TWF0cml4RGF0YVR5cGUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydnZXRNYXRyaXhEYXRhVHlwZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksICcgKyAnZm9yIGV4YW1wbGUgXCJudW1iZXJcIiBpZiBhbGwgaXRlbXMgYXJlIGEgbnVtYmVyICcgKyAnYW5kIFwiQ29tcGxleFwiIGlmIGFsbCB2YWx1ZXMgYXJlIGNvbXBsZXggbnVtYmVycy4gJyArICdJZiBhIG1hdHJpeCBjb250YWlucyBtb3JlIHRoYW4gb25lIGRhdGEgdHlwZSwgaXQgd2lsbCByZXR1cm4gXCJtaXhlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ2dldE1hdHJpeERhdGFUeXBlKFsxLCAyLCAzXSknLCAnZ2V0TWF0cml4RGF0YVR5cGUoW1s1IGNtXSwgWzIgaW5jaF1dKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgXCJ0ZXh0XCJdKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgYmlnbnVtYmVyKDQpXSknXSxcbiAgc2VlYWxzbzogWydtYXRyaXgnLCAnc3BhcnNlJywgJ3R5cGVPZiddXG59O1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURvY3MgPSBnZXRNYXRyaXhEYXRhVHlwZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlkZW50aXR5RG9jcyA9IHZvaWQgMDtcbnZhciBpZGVudGl0eURvY3MgPSB7XG4gIG5hbWU6ICdpZGVudGl0eScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2lkZW50aXR5KG4pJywgJ2lkZW50aXR5KG0sIG4pJywgJ2lkZW50aXR5KFttLCBuXSknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBpZGVudGl0eSBtYXRyaXggd2l0aCBzaXplIG0tYnktbi4gVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS4nLFxuICBleGFtcGxlczogWydpZGVudGl0eSgzKScsICdpZGVudGl0eSgzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2lkZW50aXR5KHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmlkZW50aXR5RG9jcyA9IGlkZW50aXR5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52RG9jcyA9IHZvaWQgMDtcbnZhciBpbnZEb2NzID0ge1xuICBuYW1lOiAnaW52JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnaW52KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnaW52KFsxLCAyOyAzLCA0XSknLCAnaW52KDQpJywgJzEgLyA0J10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuaW52RG9jcyA9IGludkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtyb25Eb2NzID0gdm9pZCAwO1xudmFyIGtyb25Eb2NzID0ge1xuICBuYW1lOiAna3JvbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2tyb24oeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGVzIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiAyIG1hdHJpY2VzIG9yIHZlY3RvcnMuJyxcbiAgZXhhbXBsZXM6IFsna3JvbihbWzEsIDBdLCBbMCwgMV1dLCBbWzEsIDJdLCBbMywgNF1dKScsICdrcm9uKFsxLDFdLCBbMiwzLDRdKSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2RvdCcsICdjcm9zcyddXG59O1xuZXhwb3J0cy5rcm9uRG9jcyA9IGtyb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXBEb2NzID0gdm9pZCAwO1xudmFyIG1hcERvY3MgPSB7XG4gIG5hbWU6ICdtYXAnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydtYXAoeCwgY2FsbGJhY2spJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvbiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuJyxcbiAgZXhhbXBsZXM6IFsnbWFwKFsxLCAyLCAzXSwgc3F1YXJlKSddLFxuICBzZWVhbHNvOiBbJ2ZpbHRlcicsICdmb3JFYWNoJ11cbn07XG5leHBvcnRzLm1hcERvY3MgPSBtYXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5vbmVzRG9jcyA9IHZvaWQgMDtcbnZhciBvbmVzRG9jcyA9IHtcbiAgbmFtZTogJ29uZXMnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydvbmVzKG0pJywgJ29uZXMobSwgbiknLCAnb25lcyhtLCBuLCBwLCAuLi4pJywgJ29uZXMoW21dKScsICdvbmVzKFttLCBuXSknLCAnb25lcyhbbSwgbiwgcCwgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyBvbmVzLicsXG4gIGV4YW1wbGVzOiBbJ29uZXMoMyknLCAnb25lcygzLCA1KScsICdvbmVzKFsyLDNdKSAqIDQuNScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ29uZXMoc2l6ZShhKSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLm9uZXNEb2NzID0gb25lc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnRpdGlvblNlbGVjdERvY3MgPSB2b2lkIDA7XG52YXIgcGFydGl0aW9uU2VsZWN0RG9jcyA9IHtcbiAgbmFtZTogJ3BhcnRpdGlvblNlbGVjdCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3BhcnRpdGlvblNlbGVjdCh4LCBrKScsICdwYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSknXSxcbiAgZGVzY3JpcHRpb246ICdQYXJ0aXRpb24tYmFzZWQgc2VsZWN0aW9uIG9mIGFuIGFycmF5IG9yIDFEIG1hdHJpeC4gV2lsbCBmaW5kIHRoZSBrdGggc21hbGxlc3QgdmFsdWUsIGFuZCBtdXRhdGVzIHRoZSBpbnB1dCBhcnJheS4gVXNlcyBRdWlja3NlbGVjdC4nLFxuICBleGFtcGxlczogWydwYXJ0aXRpb25TZWxlY3QoWzUsIDEwLCAxXSwgMiknLCAncGFydGl0aW9uU2VsZWN0KFtcIkNcIiwgXCJCXCIsIFwiQVwiLCBcIkRcIl0sIDEpJ10sXG4gIHNlZWFsc286IFsnc29ydCddXG59O1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REb2NzID0gcGFydGl0aW9uU2VsZWN0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZ2VEb2NzID0gdm9pZCAwO1xudmFyIHJhbmdlRG9jcyA9IHtcbiAgbmFtZTogJ3JhbmdlJyxcbiAgY2F0ZWdvcnk6ICdUeXBlJyxcbiAgc3ludGF4OiBbJ3N0YXJ0OmVuZCcsICdzdGFydDpzdGVwOmVuZCcsICdyYW5nZShzdGFydCwgZW5kKScsICdyYW5nZShzdGFydCwgZW5kLCBzdGVwKScsICdyYW5nZShzdHJpbmcpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgcmFuZ2UuIExvd2VyIGJvdW5kIG9mIHRoZSByYW5nZSBpcyBpbmNsdWRlZCwgdXBwZXIgYm91bmQgaXMgZXhjbHVkZWQuJyxcbiAgZXhhbXBsZXM6IFsnMTo1JywgJzM6LTE6LTMnLCAncmFuZ2UoMywgNyknLCAncmFuZ2UoMCwgMTIsIDIpJywgJ3JhbmdlKFwiNDoxMFwiKScsICdhID0gWzEsIDIsIDMsIDQ7IDUsIDYsIDcsIDhdJywgJ2FbMToyLCAxOjJdJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnJhbmdlRG9jcyA9IHJhbmdlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVzaGFwZURvY3MgPSB2b2lkIDA7XG52YXIgcmVzaGFwZURvY3MgPSB7XG4gIG5hbWU6ICdyZXNoYXBlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncmVzaGFwZSh4LCBzaXplcyknXSxcbiAgZGVzY3JpcHRpb246ICdSZXNoYXBlIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkgdG8gZml0IHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucy4nLFxuICBleGFtcGxlczogWydyZXNoYXBlKFsxLCAyLCAzLCA0LCA1LCA2XSwgWzIsIDNdKScsICdyZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFsxLCA0XSknLCAncmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbNF0pJ10sXG4gIHNlZWFsc286IFsnc2l6ZScsICdzcXVlZXplJywgJ3Jlc2l6ZSddXG59O1xuZXhwb3J0cy5yZXNoYXBlRG9jcyA9IHJlc2hhcGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNpemVEb2NzID0gdm9pZCAwO1xudmFyIHJlc2l6ZURvY3MgPSB7XG4gIG5hbWU6ICdyZXNpemUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydyZXNpemUoeCwgc2l6ZSknLCAncmVzaXplKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSknXSxcbiAgZGVzY3JpcHRpb246ICdSZXNpemUgYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsncmVzaXplKFsxLDIsMyw0LDVdLCBbM10pJywgJ3Jlc2l6ZShbMSwyLDNdLCBbNV0pJywgJ3Jlc2l6ZShbMSwyLDNdLCBbNV0sIC0xKScsICdyZXNpemUoMiwgWzIsIDNdKScsICdyZXNpemUoXCJoZWxsb1wiLCBbOF0sIFwiIVwiKSddLFxuICBzZWVhbHNvOiBbJ3NpemUnLCAnc3Vic2V0JywgJ3NxdWVlemUnLCAncmVzaGFwZSddXG59O1xuZXhwb3J0cy5yZXNpemVEb2NzID0gcmVzaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm93RG9jcyA9IHZvaWQgMDtcbnZhciByb3dEb2NzID0ge1xuICBuYW1lOiAncm93JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncm93KHgsIGluZGV4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJvdyBmcm9tIGEgbWF0cml4IG9yIGFycmF5LicsXG4gIGV4YW1wbGVzOiBbJ0EgPSBbWzEsIDJdLCBbMywgNF1dJywgJ3JvdyhBLCAxKScsICdyb3coQSwgMiknXSxcbiAgc2VlYWxzbzogWydjb2x1bW4nXVxufTtcbmV4cG9ydHMucm93RG9jcyA9IHJvd0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVEb2NzID0gdm9pZCAwO1xudmFyIHNpemVEb2NzID0ge1xuICBuYW1lOiAnc2l6ZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3NpemUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnc2l6ZSgyLjMpJywgJ3NpemUoXCJoZWxsbyB3b3JsZFwiKScsICdhID0gWzEsIDI7IDMsIDQ7IDUsIDZdJywgJ3NpemUoYSknLCAnc2l6ZSgxOjYpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5zaXplRG9jcyA9IHNpemVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0RG9jcyA9IHZvaWQgMDtcbnZhciBzb3J0RG9jcyA9IHtcbiAgbmFtZTogJ3NvcnQnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydzb3J0KHgpJywgJ3NvcnQoeCwgY29tcGFyZSknXSxcbiAgZGVzY3JpcHRpb246ICdTb3J0IHRoZSBpdGVtcyBpbiBhIG1hdHJpeC4gQ29tcGFyZSBjYW4gYmUgYSBzdHJpbmcgXCJhc2NcIiwgXCJkZXNjXCIsIFwibmF0dXJhbFwiLCBvciBhIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NvcnQoWzUsIDEwLCAxXSknLCAnc29ydChbXCJDXCIsIFwiQlwiLCBcIkFcIiwgXCJEXCJdKScsICdzb3J0QnlMZW5ndGgoYSwgYikgPSBzaXplKGEpWzFdIC0gc2l6ZShiKVsxXScsICdzb3J0KFtcIkxhbmdkb25cIiwgXCJUb21cIiwgXCJTYXJhXCJdLCBzb3J0QnlMZW5ndGgpJywgJ3NvcnQoW1wiMTBcIiwgXCIxXCIsIFwiMlwiXSwgXCJuYXR1cmFsXCIpJ10sXG4gIHNlZWFsc286IFsnbWFwJywgJ2ZpbHRlcicsICdmb3JFYWNoJ11cbn07XG5leHBvcnRzLnNvcnREb2NzID0gc29ydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWVlemVEb2NzID0gdm9pZCAwO1xudmFyIHNxdWVlemVEb2NzID0ge1xuICBuYW1lOiAnc3F1ZWV6ZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3NxdWVlemUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdSZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYSA9IHplcm9zKDMsMiwxKScsICdzaXplKHNxdWVlemUoYSkpJywgJ2IgPSB6ZXJvcygxLDEsMyknLCAnc2l6ZShzcXVlZXplKGIpKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuc3F1ZWV6ZURvY3MgPSBzcXVlZXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3Vic2V0RG9jcyA9IHZvaWQgMDtcbnZhciBzdWJzZXREb2NzID0ge1xuICBuYW1lOiAnc3Vic2V0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsndmFsdWUoaW5kZXgpJywgJ3ZhbHVlKGluZGV4KSA9IHJlcGxhY2VtZW50JywgJ3N1YnNldCh2YWx1ZSwgW2luZGV4XSknLCAnc3Vic2V0KHZhbHVlLCBbaW5kZXhdLCByZXBsYWNlbWVudCknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgb3Igc2V0IGEgc3Vic2V0IG9mIGEgbWF0cml4IG9yIHN0cmluZy4gJyArICdJbmRleGVzIGFyZSBvbmUtYmFzZWQuICcgKyAnQm90aCB0aGUgcmFuZ2VzIGxvd2VyLWJvdW5kIGFuZCB1cHBlci1ib3VuZCBhcmUgaW5jbHVkZWQuJyxcbiAgZXhhbXBsZXM6IFsnZCA9IFsxLCAyOyAzLCA0XScsICdlID0gW10nLCAnZVsxLCAxOjJdID0gWzUsIDZdJywgJ2VbMiwgOl0gPSBbNywgOF0nLCAnZiA9IGQgKiBlJywgJ2ZbMiwgMV0nLCAnZls6LCAxXSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnN1YnNldERvY3MgPSBzdWJzZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFjZURvY3MgPSB2b2lkIDA7XG52YXIgdHJhY2VEb2NzID0ge1xuICBuYW1lOiAndHJhY2UnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd0cmFjZShBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgdHJhY2Ugb2YgYSBtYXRyaXg6IHRoZSBzdW0gb2YgdGhlIGVsZW1lbnRzIG9uIHRoZSBtYWluIGRpYWdvbmFsIG9mIGEgc3F1YXJlIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydBID0gWzEsIDIsIDM7IC0xLCAyLCAzOyAyLCAwLCAzXScsICd0cmFjZShBKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy50cmFjZURvY3MgPSB0cmFjZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRyYW5zcG9zZURvY3MgPSB2b2lkIDA7XG52YXIgdHJhbnNwb3NlRG9jcyA9IHtcbiAgbmFtZTogJ3RyYW5zcG9zZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3hcXCcnLCAndHJhbnNwb3NlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVHJhbnNwb3NlIGEgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdhXFwnJywgJ3RyYW5zcG9zZShhKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnRyYW5zcG9zZURvY3MgPSB0cmFuc3Bvc2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy56ZXJvc0RvY3MgPSB2b2lkIDA7XG52YXIgemVyb3NEb2NzID0ge1xuICBuYW1lOiAnemVyb3MnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd6ZXJvcyhtKScsICd6ZXJvcyhtLCBuKScsICd6ZXJvcyhtLCBuLCBwLCAuLi4pJywgJ3plcm9zKFttXSknLCAnemVyb3MoW20sIG5dKScsICd6ZXJvcyhbbSwgbiwgcCwgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyB6ZXJvcy4nLFxuICBleGFtcGxlczogWyd6ZXJvcygzKScsICd6ZXJvcygzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ3plcm9zKHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJ11cbn07XG5leHBvcnRzLnplcm9zRG9jcyA9IHplcm9zRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zRG9jcyA9IHZvaWQgMDtcbnZhciBjb21iaW5hdGlvbnNEb2NzID0ge1xuICBuYW1lOiAnY29tYmluYXRpb25zJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydjb21iaW5hdGlvbnMobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBudW1iZXIgb2YgY29tYmluYXRpb25zIG9mIG4gaXRlbXMgdGFrZW4gayBhdCBhIHRpbWUnLFxuICBleGFtcGxlczogWydjb21iaW5hdGlvbnMoNywgNSknXSxcbiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnNXaXRoUmVwJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zRG9jcyA9IGNvbWJpbmF0aW9uc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0gdm9pZCAwO1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0ge1xuICBuYW1lOiAnY29tYmluYXRpb25zV2l0aFJlcCcsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsnY29tYmluYXRpb25zV2l0aFJlcChuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBjb21iaW5hdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZSB3aXRoIHJlcGxhY2VtZW50cy4nLFxuICBleGFtcGxlczogWydjb21iaW5hdGlvbnNXaXRoUmVwKDcsIDUpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zV2l0aFJlcERvY3MgPSBjb21iaW5hdGlvbnNXaXRoUmVwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFjdG9yaWFsRG9jcyA9IHZvaWQgMDtcbnZhciBmYWN0b3JpYWxEb2NzID0ge1xuICBuYW1lOiAnZmFjdG9yaWFsJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWyduIScsICdmYWN0b3JpYWwobiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBmYWN0b3JpYWwgb2YgYSB2YWx1ZScsXG4gIGV4YW1wbGVzOiBbJzUhJywgJzUgKiA0ICogMyAqIDIgKiAxJywgJzMhJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2NvbWJpbmF0aW9uc1dpdGhSZXAnLCAncGVybXV0YXRpb25zJywgJ2dhbW1hJ11cbn07XG5leHBvcnRzLmZhY3RvcmlhbERvY3MgPSBmYWN0b3JpYWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYW1tYURvY3MgPSB2b2lkIDA7XG52YXIgZ2FtbWFEb2NzID0ge1xuICBuYW1lOiAnZ2FtbWEnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ2dhbW1hKG4pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgZ2FtbWEgZnVuY3Rpb24uIEZvciBzbWFsbCB2YWx1ZXMsIHRoZSBMYW5jem9zIGFwcHJveGltYXRpb24gaXMgdXNlZCwgYW5kIGZvciBsYXJnZSB2YWx1ZXMgdGhlIGV4dGVuZGVkIFN0aXJsaW5nIGFwcHJveGltYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnZ2FtbWEoNCknLCAnMyEnLCAnZ2FtbWEoMS8yKScsICdzcXJ0KHBpKSddLFxuICBzZWVhbHNvOiBbJ2ZhY3RvcmlhbCddXG59O1xuZXhwb3J0cy5nYW1tYURvY3MgPSBnYW1tYURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURvY3MgPSB2b2lkIDA7XG52YXIga2xkaXZlcmdlbmNlRG9jcyA9IHtcbiAgbmFtZTogJ2tsZGl2ZXJnZW5jZScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsna2xkaXZlcmdlbmNlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBLdWxsYmFjay1MZWlibGVyIChLTCkgZGl2ZXJnZW5jZSAgYmV0d2VlbiB0d28gZGlzdHJpYnV0aW9ucy4nLFxuICBleGFtcGxlczogWydrbGRpdmVyZ2VuY2UoWzAuNywwLjUsMC40XSwgWzAuMiwwLjksMC41XSknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURvY3MgPSBrbGRpdmVyZ2VuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbERvY3MgPSB2b2lkIDA7XG52YXIgbXVsdGlub21pYWxEb2NzID0ge1xuICBuYW1lOiAnbXVsdGlub21pYWwnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ211bHRpbm9taWFsKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnTXVsdGlub21pYWwgQ29lZmZpY2llbnRzIGNvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYTEsIGEyLCAuLi4sIGFpIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYCBwb3NzaWJpbGl0aWVzLiBtdWx0aW5vbWlhbCB0YWtlcyBvbmUgYXJyYXkgb2YgaW50ZWdlcnMgYXMgYW4gYXJndW1lbnQuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGV2ZXJ5IGFpID4gMC4nLFxuICBleGFtcGxlczogWydtdWx0aW5vbWlhbChbMSwgMiwgMV0pJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2ZhY3RvcmlhbCddXG59O1xuZXhwb3J0cy5tdWx0aW5vbWlhbERvY3MgPSBtdWx0aW5vbWlhbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBlcm11dGF0aW9uc0RvY3MgPSB2b2lkIDA7XG52YXIgcGVybXV0YXRpb25zRG9jcyA9IHtcbiAgbmFtZTogJ3Blcm11dGF0aW9ucycsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncGVybXV0YXRpb25zKG4pJywgJ3Blcm11dGF0aW9ucyhuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZScsXG4gIGV4YW1wbGVzOiBbJ3Blcm11dGF0aW9ucyg1KScsICdwZXJtdXRhdGlvbnMoNSwgMyknXSxcbiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnMnLCAnY29tYmluYXRpb25zV2l0aFJlcCcsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMucGVybXV0YXRpb25zRG9jcyA9IHBlcm11dGF0aW9uc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpY2tSYW5kb21Eb2NzID0gdm9pZCAwO1xudmFyIHBpY2tSYW5kb21Eb2NzID0ge1xuICBuYW1lOiAncGlja1JhbmRvbScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncGlja1JhbmRvbShhcnJheSknLCAncGlja1JhbmRvbShhcnJheSwgbnVtYmVyKScsICdwaWNrUmFuZG9tKGFycmF5LCB3ZWlnaHRzKScsICdwaWNrUmFuZG9tKGFycmF5LCBudW1iZXIsIHdlaWdodHMpJywgJ3BpY2tSYW5kb20oYXJyYXksIHdlaWdodHMsIG51bWJlciknXSxcbiAgZGVzY3JpcHRpb246ICdQaWNrIGEgcmFuZG9tIGVudHJ5IGZyb20gYSBnaXZlbiBhcnJheS4nLFxuICBleGFtcGxlczogWydwaWNrUmFuZG9tKDA6MTApJywgJ3BpY2tSYW5kb20oWzEsIDMsIDEsIDZdKScsICdwaWNrUmFuZG9tKFsxLCAzLCAxLCA2XSwgMiknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIDIsIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSwgMiknXSxcbiAgc2VlYWxzbzogWydyYW5kb20nLCAncmFuZG9tSW50J11cbn07XG5leHBvcnRzLnBpY2tSYW5kb21Eb2NzID0gcGlja1JhbmRvbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmRvbURvY3MgPSB2b2lkIDA7XG52YXIgcmFuZG9tRG9jcyA9IHtcbiAgbmFtZTogJ3JhbmRvbScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncmFuZG9tKCknLCAncmFuZG9tKG1heCknLCAncmFuZG9tKG1pbiwgbWF4KScsICdyYW5kb20oc2l6ZSknLCAncmFuZG9tKHNpemUsIG1heCknLCAncmFuZG9tKHNpemUsIG1pbiwgbWF4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJhbmRvbSBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsncmFuZG9tKCknLCAncmFuZG9tKDEwLCAyMCknLCAncmFuZG9tKFsyLCAzXSknXSxcbiAgc2VlYWxzbzogWydwaWNrUmFuZG9tJywgJ3JhbmRvbUludCddXG59O1xuZXhwb3J0cy5yYW5kb21Eb2NzID0gcmFuZG9tRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tSW50RG9jcyA9IHZvaWQgMDtcbnZhciByYW5kb21JbnREb2NzID0ge1xuICBuYW1lOiAncmFuZG9tSW50JyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydyYW5kb21JbnQobWF4KScsICdyYW5kb21JbnQobWluLCBtYXgpJywgJ3JhbmRvbUludChzaXplKScsICdyYW5kb21JbnQoc2l6ZSwgbWF4KScsICdyYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyJyxcbiAgZXhhbXBsZXM6IFsncmFuZG9tSW50KDEwLCAyMCknLCAncmFuZG9tSW50KFsyLCAzXSwgMTApJ10sXG4gIHNlZWFsc286IFsncGlja1JhbmRvbScsICdyYW5kb20nXVxufTtcbmV4cG9ydHMucmFuZG9tSW50RG9jcyA9IHJhbmRvbUludERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVEb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVEb2NzID0ge1xuICBuYW1lOiAnY29tcGFyZScsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWydjb21wYXJlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gdmFsdWVzLiAnICsgJ1JldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4nLFxuICBleGFtcGxlczogWydjb21wYXJlKDIsIDMpJywgJ2NvbXBhcmUoMywgMiknLCAnY29tcGFyZSgyLCAyKScsICdjb21wYXJlKDVjbSwgNDBtbSknLCAnY29tcGFyZSgyLCBbMSwgMiwgM10pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlTmF0dXJhbCcsICdjb21wYXJlVGV4dCddXG59O1xuZXhwb3J0cy5jb21wYXJlRG9jcyA9IGNvbXBhcmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERvY3MgPSB2b2lkIDA7XG52YXIgY29tcGFyZU5hdHVyYWxEb2NzID0ge1xuICBuYW1lOiAnY29tcGFyZU5hdHVyYWwnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnY29tcGFyZU5hdHVyYWwoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wYXJlIHR3byB2YWx1ZXMgb2YgYW55IHR5cGUgaW4gYSBkZXRlcm1pbmlzdGljLCBuYXR1cmFsIHdheS4gJyArICdSZXR1cm5zIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuJyxcbiAgZXhhbXBsZXM6IFsnY29tcGFyZU5hdHVyYWwoMiwgMyknLCAnY29tcGFyZU5hdHVyYWwoMywgMiknLCAnY29tcGFyZU5hdHVyYWwoMiwgMiknLCAnY29tcGFyZU5hdHVyYWwoNWNtLCA0MG1tKScsICdjb21wYXJlTmF0dXJhbChcIjJcIiwgXCIxMFwiKScsICdjb21wYXJlTmF0dXJhbCgyICsgM2ksIDIgKyA0aSknLCAnY29tcGFyZU5hdHVyYWwoWzEsIDIsIDRdLCBbMSwgMiwgM10pJywgJ2NvbXBhcmVOYXR1cmFsKFsxLCA1XSwgWzEsIDIsIDNdKScsICdjb21wYXJlTmF0dXJhbChbMSwgMl0sIFsxLCAyXSknLCAnY29tcGFyZU5hdHVyYWwoe2E6IDJ9LCB7YTogNH0pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2NvbXBhcmVUZXh0J11cbn07XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsRG9jcyA9IGNvbXBhcmVOYXR1cmFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZVRleHREb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVUZXh0RG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBhcmVUZXh0JyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2NvbXBhcmVUZXh0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gc3RyaW5ncyBsZXhpY2FsbHkuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuICcgKyAnUmV0dXJucyAxIHdoZW4geCA+IHksIC0xIHdoZW4geCA8IHksIGFuZCAwIHdoZW4geCA9PSB5LicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBhcmVUZXh0KFwiQlwiLCBcIkFcIiknLCAnY29tcGFyZVRleHQoXCJBXCIsIFwiQlwiKScsICdjb21wYXJlVGV4dChcIkFcIiwgXCJBXCIpJywgJ2NvbXBhcmVUZXh0KFwiMlwiLCBcIjEwXCIpJywgJ2NvbXBhcmUoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZSgyLCAxMCknLCAnY29tcGFyZU5hdHVyYWwoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZVRleHQoXCJCXCIsIFtcIkFcIiwgXCJCXCIsIFwiQ1wiXSknXSxcbiAgc2VlYWxzbzogWydjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ11cbn07XG5leHBvcnRzLmNvbXBhcmVUZXh0RG9jcyA9IGNvbXBhcmVUZXh0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVlcEVxdWFsRG9jcyA9IHZvaWQgMDtcbnZhciBkZWVwRXF1YWxEb2NzID0ge1xuICBuYW1lOiAnZGVlcEVxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2RlZXBFcXVhbCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGVxdWFsaXR5IG9mIHR3byBtYXRyaWNlcyBlbGVtZW50IHdpc2UuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2l6ZSBvZiBib3RoIG1hdHJpY2VzIGlzIGVxdWFsIGFuZCB3aGVuIGFuZCBlYWNoIG9mIHRoZSBlbGVtZW50cyBhcmUgZXF1YWwuJyxcbiAgZXhhbXBsZXM6IFsnZGVlcEVxdWFsKFsxLDMsNF0sIFsxLDMsNF0pJywgJ2RlZXBFcXVhbChbMSwzLDRdLCBbMSwzXSknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJ11cbn07XG5leHBvcnRzLmRlZXBFcXVhbERvY3MgPSBkZWVwRXF1YWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgZXF1YWxEb2NzID0ge1xuICBuYW1lOiAnZXF1YWwnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA9PSB5JywgJ2VxdWFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHZhbHVlcy4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIrMiA9PSAzJywgJzIrMiA9PSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgPT0gYicsICc1MGNtID09IDAuNW0nXSxcbiAgc2VlYWxzbzogWyd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2RlZXBFcXVhbCcsICdlcXVhbFRleHQnXVxufTtcbmV4cG9ydHMuZXF1YWxEb2NzID0gZXF1YWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbFRleHREb2NzID0gdm9pZCAwO1xudmFyIGVxdWFsVGV4dERvY3MgPSB7XG4gIG5hbWU6ICdlcXVhbFRleHQnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnZXF1YWxUZXh0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHN0cmluZ3MuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgYW5kIGZhbHNlIGlmIG5vdC4nLFxuICBleGFtcGxlczogWydlcXVhbFRleHQoXCJIZWxsb1wiLCBcIkhlbGxvXCIpJywgJ2VxdWFsVGV4dChcImFcIiwgXCJBXCIpJywgJ2VxdWFsKFwiMmUzXCIsIFwiMjAwMFwiKScsICdlcXVhbFRleHQoXCIyZTNcIiwgXCIyMDAwXCIpJywgJ2VxdWFsVGV4dChcIkJcIiwgW1wiQVwiLCBcIkJcIiwgXCJDXCJdKSddLFxuICBzZWVhbHNvOiBbJ2NvbXBhcmUnLCAnY29tcGFyZU5hdHVyYWwnLCAnY29tcGFyZVRleHQnLCAnZXF1YWwnXVxufTtcbmV4cG9ydHMuZXF1YWxUZXh0RG9jcyA9IGVxdWFsVGV4dERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckRvY3MgPSB2b2lkIDA7XG52YXIgbGFyZ2VyRG9jcyA9IHtcbiAgbmFtZTogJ2xhcmdlcicsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWyd4ID4geScsICdsYXJnZXIoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIGxhcmdlciB0aGFuIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnMiA+IDMnLCAnNSA+IDIqMicsICdhID0gMy4zJywgJ2IgPSA2LTIuOCcsICcoYSA+IGIpJywgJyhiIDwgYSknLCAnNSBjbSA+IDIgaW5jaCddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnc21hbGxlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5sYXJnZXJEb2NzID0gbGFyZ2VyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubGFyZ2VyRXFEb2NzID0gdm9pZCAwO1xudmFyIGxhcmdlckVxRG9jcyA9IHtcbiAgbmFtZTogJ2xhcmdlckVxJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPj0geScsICdsYXJnZXJFcSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciBvciBlcXVhbCB0byB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPj0gMSsxJywgJzIgPiAxKzEnLCAnYSA9IDMuMicsICdiID0gNi0yLjgnLCAnKGEgPj0gYiknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXJFcScsICdzbWFsbGVyJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMubGFyZ2VyRXFEb2NzID0gbGFyZ2VyRXFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRG9jcyA9IHZvaWQgMDtcbnZhciBzbWFsbGVyRG9jcyA9IHtcbiAgbmFtZTogJ3NtYWxsZXInLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA8IHknLCAnc21hbGxlcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgc21hbGxlciB0aGFuIHZhbHVlIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIHNtYWxsZXIgdGhhbiB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPCAzJywgJzUgPCAyKjInLCAnYSA9IDMuMycsICdiID0gNi0yLjgnLCAnKGEgPCBiKScsICc1IGNtIDwgMiBpbmNoJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdsYXJnZXInLCAnc21hbGxlckVxJywgJ2xhcmdlckVxJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMuc21hbGxlckRvY3MgPSBzbWFsbGVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc21hbGxlckVxRG9jcyA9IHZvaWQgMDtcbnZhciBzbWFsbGVyRXFEb2NzID0ge1xuICBuYW1lOiAnc21hbGxlckVxJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPD0geScsICdzbWFsbGVyRXEoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdmFsdWUgeS4gUmV0dXJucyB0cnVlIGlmIHggaXMgc21hbGxlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnMiA8PSAxKzEnLCAnMiA8IDErMScsICdhID0gMy4yJywgJ2IgPSA2LTIuOCcsICcoYSA8PSBiKSddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5zbWFsbGVyRXFEb2NzID0gc21hbGxlckVxRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5lcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgdW5lcXVhbERvY3MgPSB7XG4gIG5hbWU6ICd1bmVxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggIT0geScsICd1bmVxdWFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgdW5lcXVhbGl0eSBvZiB0d28gdmFsdWVzLiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdW5lcXVhbCwgYW5kIGZhbHNlIGlmIHRoZXkgYXJlIGVxdWFsLicsXG4gIGV4YW1wbGVzOiBbJzIrMiAhPSAzJywgJzIrMiAhPSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgIT0gYicsICc1MGNtICE9IDAuNW0nLCAnNSBjbSAhPSAyIGluY2gnXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICdzbWFsbGVyJywgJ2xhcmdlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZScsICdkZWVwRXF1YWwnXVxufTtcbmV4cG9ydHMudW5lcXVhbERvY3MgPSB1bmVxdWFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0Q2FydGVzaWFuRG9jcyA9IHZvaWQgMDtcbnZhciBzZXRDYXJ0ZXNpYW5Eb2NzID0ge1xuICBuYW1lOiAnc2V0Q2FydGVzaWFuJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0Q2FydGVzaWFuKHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0Q2FydGVzaWFuKFsxLCAyXSwgWzMsIDRdKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJywgJ3NldFBvd2Vyc2V0J11cbn07XG5leHBvcnRzLnNldENhcnRlc2lhbkRvY3MgPSBzZXRDYXJ0ZXNpYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlRG9jcyA9IHZvaWQgMDtcbnZhciBzZXREaWZmZXJlbmNlRG9jcyA9IHtcbiAgbmFtZTogJ3NldERpZmZlcmVuY2UnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXREaWZmZXJlbmNlKHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0czogZXZlcnkgZWxlbWVudCBvZiBzZXQxLCB0aGF0IGlzIG5vdCB0aGUgZWxlbWVudCBvZiBzZXQyLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldERpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldERpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0U3ltRGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlRG9jcyA9IHNldERpZmZlcmVuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaXN0aW5jdERvY3MgPSB2b2lkIDA7XG52YXIgc2V0RGlzdGluY3REb2NzID0ge1xuICBuYW1lOiAnc2V0RGlzdGluY3QnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXREaXN0aW5jdChzZXQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29sbGVjdCB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBtdWx0aXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldERpc3RpbmN0KFsxLCAxLCAxLCAyLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydzZXRNdWx0aXBsaWNpdHknXVxufTtcbmV4cG9ydHMuc2V0RGlzdGluY3REb2NzID0gc2V0RGlzdGluY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REb2NzID0gdm9pZCAwO1xudmFyIHNldEludGVyc2VjdERvY3MgPSB7XG4gIG5hbWU6ICdzZXRJbnRlcnNlY3QnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRJbnRlcnNlY3Qoc2V0MSwgc2V0MiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0SW50ZXJzZWN0KFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRJbnRlcnNlY3QoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldEludGVyc2VjdERvY3MgPSBzZXRJbnRlcnNlY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJc1N1YnNldERvY3MgPSB2b2lkIDA7XG52YXIgc2V0SXNTdWJzZXREb2NzID0ge1xuICBuYW1lOiAnc2V0SXNTdWJzZXQnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRJc1N1YnNldChzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIHdoZXRoZXIgYSAobXVsdGkpc2V0IGlzIGEgc3Vic2V0IG9mIGFub3RoZXIgKG11bHRpKXNldDogZXZlcnkgZWxlbWVudCBvZiBzZXQxIGlzIHRoZSBlbGVtZW50IG9mIHNldDIuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0SXNTdWJzZXQoWzEsIDJdLCBbMywgNCwgNSwgNl0pJywgJ3NldElzU3Vic2V0KFszLCA0XSwgWzMsIDQsIDUsIDZdKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldElzU3Vic2V0RG9jcyA9IHNldElzU3Vic2V0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RG9jcyA9IHZvaWQgMDtcbnZhciBzZXRNdWx0aXBsaWNpdHlEb2NzID0ge1xuICBuYW1lOiAnc2V0TXVsdGlwbGljaXR5JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0TXVsdGlwbGljaXR5KGVsZW1lbnQsIHNldCknXSxcbiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbXVsdGlwbGljaXR5IG9mIGFuIGVsZW1lbnQgaW4gYSBtdWx0aXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldE11bHRpcGxpY2l0eSgxLCBbMSwgMiwgMiwgNF0pJywgJ3NldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pJ10sXG4gIHNlZWFsc286IFsnc2V0RGlzdGluY3QnLCAnc2V0U2l6ZSddXG59O1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHlEb2NzID0gc2V0TXVsdGlwbGljaXR5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREb2NzID0gdm9pZCAwO1xudmFyIHNldFBvd2Vyc2V0RG9jcyA9IHtcbiAgbmFtZTogJ3NldFBvd2Vyc2V0JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0UG93ZXJzZXQoc2V0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgcG93ZXJzZXQgb2YgYSAobXVsdGkpc2V0OiB0aGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFBvd2Vyc2V0KFsxLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydzZXRDYXJ0ZXNpYW4nXVxufTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREb2NzID0gc2V0UG93ZXJzZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRTaXplRG9jcyA9IHZvaWQgMDtcbnZhciBzZXRTaXplRG9jcyA9IHtcbiAgbmFtZTogJ3NldFNpemUnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRTaXplKHNldCknLCAnc2V0U2l6ZShzZXQsIHVuaXF1ZSknXSxcbiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEgKG11bHRpKXNldC4gV2hlbiB0aGUgc2Vjb25kIHBhcmFtZXRlciBcInVuaXF1ZVwiIGlzIHRydWUsIGNvdW50IG9ubHkgdGhlIHVuaXF1ZSB2YWx1ZXMuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXRTaXplKFsxLCAyLCAyLCA0XSknLCAnc2V0U2l6ZShbMSwgMiwgMiwgNF0sIHRydWUpJ10sXG4gIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0SW50ZXJzZWN0JywgJ3NldERpZmZlcmVuY2UnXVxufTtcbmV4cG9ydHMuc2V0U2l6ZURvY3MgPSBzZXRTaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZURvY3MgPSB2b2lkIDA7XG52YXIgc2V0U3ltRGlmZmVyZW5jZURvY3MgPSB7XG4gIG5hbWU6ICdzZXRTeW1EaWZmZXJlbmNlJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0U3ltRGlmZmVyZW5jZShzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFN5bURpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldFN5bURpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0RGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXRTeW1EaWZmZXJlbmNlRG9jcyA9IHNldFN5bURpZmZlcmVuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRVbmlvbkRvY3MgPSB2b2lkIDA7XG52YXIgc2V0VW5pb25Eb2NzID0ge1xuICBuYW1lOiAnc2V0VW5pb24nLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRVbmlvbihzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFVuaW9uKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRVbmlvbihbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSddLFxuICBzZWVhbHNvOiBbJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldFVuaW9uRG9jcyA9IHNldFVuaW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJmRG9jcyA9IHZvaWQgMDtcbnZhciBlcmZEb2NzID0ge1xuICBuYW1lOiAnZXJmJyxcbiAgY2F0ZWdvcnk6ICdTcGVjaWFsJyxcbiAgc3ludGF4OiBbJ2VyZih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGVyZiBmdW5jdGlvbiBvZiBhIHZhbHVlIHVzaW5nIGEgcmF0aW9uYWwgQ2hlYnlzaGV2IGFwcHJveGltYXRpb25zIGZvciBkaWZmZXJlbnQgaW50ZXJ2YWxzIG9mIHgnLFxuICBleGFtcGxlczogWydlcmYoMC4yKScsICdlcmYoLTAuNSknLCAnZXJmKDQpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5lcmZEb2NzID0gZXJmRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFkRG9jcyA9IHZvaWQgMDtcbnZhciBtYWREb2NzID0ge1xuICBuYW1lOiAnbWFkJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21hZChhLCBiLCBjLCAuLi4pJywgJ21hZChBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiBpcyBkZWZpbmVkIGFzIHRoZSBtZWRpYW4gb2YgdGhlIGFic29sdXRlIGRldmlhdGlvbnMgZnJvbSB0aGUgbWVkaWFuLicsXG4gIGV4YW1wbGVzOiBbJ21hZCgxMCwgMjAsIDMwKScsICdtYWQoWzEsIDIsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21lYW4nLCAnbWVkaWFuJywgJ3N0ZCcsICdhYnMnXVxufTtcbmV4cG9ydHMubWFkRG9jcyA9IG1hZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1heERvY3MgPSB2b2lkIDA7XG52YXIgbWF4RG9jcyA9IHtcbiAgbmFtZTogJ21heCcsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtYXgoYSwgYiwgYywgLi4uKScsICdtYXgoQSknLCAnbWF4KEEsIGRpbSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgbGlzdCBvZiB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnbWF4KDIsIDMsIDQsIDEpJywgJ21heChbMiwgMywgNCwgMV0pJywgJ21heChbMiwgNTsgNCwgM10pJywgJ21heChbMiwgNTsgNCwgM10sIDEpJywgJ21heChbMiwgNTsgNCwgM10sIDIpJywgJ21heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJywgJ21pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJ10sXG4gIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5tYXhEb2NzID0gbWF4RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhbkRvY3MgPSB2b2lkIDA7XG52YXIgbWVhbkRvY3MgPSB7XG4gIG5hbWU6ICdtZWFuJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21lYW4oYSwgYiwgYywgLi4uKScsICdtZWFuKEEpJywgJ21lYW4oQSwgZGltKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGFyaXRobWV0aWMgbWVhbiBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21lYW4oMiwgMywgNCwgMSknLCAnbWVhbihbMiwgMywgNCwgMV0pJywgJ21lYW4oWzIsIDU7IDQsIDNdKScsICdtZWFuKFsyLCA1OyA0LCAzXSwgMSknLCAnbWVhbihbMiwgNTsgNCwgM10sIDIpJywgJ21lYW4oWzEuMCwgMi43LCAzLjIsIDQuMF0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLm1lYW5Eb2NzID0gbWVhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lZGlhbkRvY3MgPSB2b2lkIDA7XG52YXIgbWVkaWFuRG9jcyA9IHtcbiAgbmFtZTogJ21lZGlhbicsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtZWRpYW4oYSwgYiwgYywgLi4uKScsICdtZWRpYW4oQSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtZWRpYW4gb2YgYWxsIHZhbHVlcy4gVGhlIHZhbHVlcyBhcmUgc29ydGVkIGFuZCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLiBJbiBjYXNlIG9mIGFuIGV2ZW4gbnVtYmVyIG9mIHZhbHVlcywgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLicsXG4gIGV4YW1wbGVzOiBbJ21lZGlhbig1LCAyLCA3KScsICdtZWRpYW4oWzMsIC0xLCA1LCA3XSknXSxcbiAgc2VlYWxzbzogWydtYXgnLCAnbWVhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJywgJ3F1YW50aWxlU2VxJ11cbn07XG5leHBvcnRzLm1lZGlhbkRvY3MgPSBtZWRpYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taW5Eb2NzID0gdm9pZCAwO1xudmFyIG1pbkRvY3MgPSB7XG4gIG5hbWU6ICdtaW4nLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnbWluKGEsIGIsIGMsIC4uLiknLCAnbWluKEEpJywgJ21pbihBLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWluaW11bSB2YWx1ZSBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21pbigyLCAzLCA0LCAxKScsICdtaW4oWzIsIDMsIDQsIDFdKScsICdtaW4oWzIsIDU7IDQsIDNdKScsICdtaW4oWzIsIDU7IDQsIDNdLCAxKScsICdtaW4oWzIsIDU7IDQsIDNdLCAyKScsICdtaW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKScsICdtYXgoMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubWluRG9jcyA9IG1pbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZGVEb2NzID0gdm9pZCAwO1xudmFyIG1vZGVEb2NzID0ge1xuICBuYW1lOiAnbW9kZScsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtb2RlKGEsIGIsIGMsIC4uLiknLCAnbW9kZShBKScsICdtb2RlKEEsIGEsIGIsIEIsIGMsIC4uLiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlcyB0aGUgbW9kZSBvZiBhbGwgdmFsdWVzIGFzIGFuIGFycmF5LiBJbiBjYXNlIG1vZGUgYmVpbmcgbW9yZSB0aGFuIG9uZSwgbXVsdGlwbGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBhbiBhcnJheS4nLFxuICBleGFtcGxlczogWydtb2RlKDIsIDEsIDQsIDMsIDEpJywgJ21vZGUoWzEsIDIuNywgMy4yLCA0LCAyLjddKScsICdtb2RlKDEsIDQsIDYsIDEsIDYpJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubW9kZURvY3MgPSBtb2RlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZERvY3MgPSB2b2lkIDA7XG52YXIgcHJvZERvY3MgPSB7XG4gIG5hbWU6ICdwcm9kJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3Byb2QoYSwgYiwgYywgLi4uKScsICdwcm9kKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiBhbGwgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ3Byb2QoMiwgMywgNCknLCAncHJvZChbMiwgMywgNF0pJywgJ3Byb2QoWzIsIDU7IDQsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAnbWluJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMucHJvZERvY3MgPSBwcm9kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucXVhbnRpbGVTZXFEb2NzID0gdm9pZCAwO1xudmFyIHF1YW50aWxlU2VxRG9jcyA9IHtcbiAgbmFtZTogJ3F1YW50aWxlU2VxJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3F1YW50aWxlU2VxKEEsIHByb2JbLCBzb3J0ZWRdKScsICdxdWFudGlsZVNlcShBLCBbcHJvYjEsIHByb2IyLCAuLi5dWywgc29ydGVkXSknLCAncXVhbnRpbGVTZXEoQSwgTlssIHNvcnRlZF0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvYiBvcmRlciBxdWFudGlsZSBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuIFRoZSBzZXF1ZW5jZSBpcyBzb3J0ZWQgYW5kIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuIFN1cHBvcnRlZCB0eXBlcyBvZiBzZXF1ZW5jZSB2YWx1ZXMgYXJlOiBOdW1iZXIsIEJpZ051bWJlciwgVW5pdCBTdXBwb3J0ZWQgdHlwZXMgb2YgcHJvYmFibGl0eSBhcmU6IE51bWJlciwgQmlnTnVtYmVyLiBcXG5cXG5JbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuJyxcbiAgZXhhbXBsZXM6IFsncXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMC41KScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCAyKScsICdxdWFudGlsZVNlcShbLTEsIDMsIDUsIDddLCAwLjUsIHRydWUpJ10sXG4gIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ21heCcsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMucXVhbnRpbGVTZXFEb2NzID0gcXVhbnRpbGVTZXFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGREb2NzID0gdm9pZCAwO1xudmFyIHN0ZERvY3MgPSB7XG4gIG5hbWU6ICdzdGQnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnc3RkKGEsIGIsIGMsIC4uLiknLCAnc3RkKEEpJywgJ3N0ZChBLCBub3JtYWxpemF0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBhbGwgdmFsdWVzLCBkZWZpbmVkIGFzIHN0ZChBKSA9IHNxcnQodmFyaWFuY2UoQSkpLiBPcHRpb25hbCBwYXJhbWV0ZXIgbm9ybWFsaXphdGlvbiBjYW4gYmUgXCJ1bmJpYXNlZFwiIChkZWZhdWx0KSwgXCJ1bmNvcnJlY3RlZFwiLCBvciBcImJpYXNlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ3N0ZCgyLCA0LCA2KScsICdzdGQoWzIsIDQsIDYsIDhdKScsICdzdGQoWzIsIDQsIDYsIDhdLCBcInVuY29ycmVjdGVkXCIpJywgJ3N0ZChbMiwgNCwgNiwgOF0sIFwiYmlhc2VkXCIpJywgJ3N0ZChbMSwgMiwgMzsgNCwgNSwgNl0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5zdGREb2NzID0gc3RkRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VtRG9jcyA9IHZvaWQgMDtcbnZhciBzdW1Eb2NzID0ge1xuICBuYW1lOiAnc3VtJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3N1bShhLCBiLCBjLCAuLi4pJywgJ3N1bShBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHN1bSBvZiBhbGwgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ3N1bSgyLCAzLCA0LCAxKScsICdzdW0oWzIsIDMsIDQsIDFdKScsICdzdW0oWzIsIDU7IDQsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLnN1bURvY3MgPSBzdW1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YXJpYW5jZURvY3MgPSB2b2lkIDA7XG52YXIgdmFyaWFuY2VEb2NzID0ge1xuICBuYW1lOiAndmFyaWFuY2UnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsndmFyaWFuY2UoYSwgYiwgYywgLi4uKScsICd2YXJpYW5jZShBKScsICd2YXJpYW5jZShBLCBub3JtYWxpemF0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHZhcmlhbmNlIG9mIGFsbCB2YWx1ZXMuIE9wdGlvbmFsIHBhcmFtZXRlciBub3JtYWxpemF0aW9uIGNhbiBiZSBcInVuYmlhc2VkXCIgKGRlZmF1bHQpLCBcInVuY29ycmVjdGVkXCIsIG9yIFwiYmlhc2VkXCIuJyxcbiAgZXhhbXBsZXM6IFsndmFyaWFuY2UoMiwgNCwgNiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdKScsICd2YXJpYW5jZShbMiwgNCwgNiwgOF0sIFwidW5jb3JyZWN0ZWRcIiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdLCBcImJpYXNlZFwiKScsICd2YXJpYW5jZShbMSwgMiwgMzsgNCwgNSwgNl0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJ11cbn07XG5leHBvcnRzLnZhcmlhbmNlRG9jcyA9IHZhcmlhbmNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvc0RvY3MgPSB2b2lkIDA7XG52YXIgYWNvc0RvY3MgPSB7XG4gIG5hbWU6ICdhY29zJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvcyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgdmFsdWUgaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydhY29zKDAuNSknLCAnYWNvcyhjb3MoMi4zKSknXSxcbiAgc2VlYWxzbzogWydjb3MnLCAnYXRhbicsICdhc2luJ11cbn07XG5leHBvcnRzLmFjb3NEb2NzID0gYWNvc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NoRG9jcyA9IHZvaWQgMDtcbnZhciBhY29zaERvY3MgPSB7XG4gIG5hbWU6ICdhY29zaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Fjb3NoKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY29zaCh4KSA9IGxuKHNxcnQoeF4yIC0gMSkgKyB4KWAuJyxcbiAgZXhhbXBsZXM6IFsnYWNvc2goMS41KSddLFxuICBzZWVhbHNvOiBbJ2Nvc2gnLCAnYXNpbmgnLCAnYXRhbmgnXVxufTtcbmV4cG9ydHMuYWNvc2hEb2NzID0gYWNvc2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY290RG9jcyA9IHZvaWQgMDtcbnZhciBhY290RG9jcyA9IHtcbiAgbmFtZTogJ2Fjb3QnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhY290KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2Fjb3QoMC41KScsICdhY290KGNvdCgwLjUpKScsICdhY290KDIpJ10sXG4gIHNlZWFsc286IFsnY290JywgJ2F0YW4nXVxufTtcbmV4cG9ydHMuYWNvdERvY3MgPSBhY290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdGhEb2NzID0gdm9pZCAwO1xudmFyIGFjb3RoRG9jcyA9IHtcbiAgbmFtZTogJ2Fjb3RoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvdGgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFjb3RoKHgpID0gKGxuKCh4KzEpL3gpICsgbG4oeC8oeC0xKSkpIC8gMmAuJyxcbiAgZXhhbXBsZXM6IFsnYWNvdGgoMiknLCAnYWNvdGgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2FzZWNoJ11cbn07XG5leHBvcnRzLmFjb3RoRG9jcyA9IGFjb3RoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY0RvY3MgPSB2b2lkIDA7XG52YXIgYWNzY0RvY3MgPSB7XG4gIG5hbWU6ICdhY3NjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNzYyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhY3NjKDIpJywgJ2Fjc2MoY3NjKDAuNSkpJywgJ2Fjc2MoMC41KSddLFxuICBzZWVhbHNvOiBbJ2NzYycsICdhc2luJywgJ2FzZWMnXVxufTtcbmV4cG9ydHMuYWNzY0RvY3MgPSBhY3NjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY2hEb2NzID0gdm9pZCAwO1xudmFyIGFjc2NoRG9jcyA9IHtcbiAgbmFtZTogJ2Fjc2NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNzY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNzY2goeCkgPSBsbigxL3ggKyBzcXJ0KDEveF4yICsgMSkpYC4nLFxuICBleGFtcGxlczogWydhY3NjaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnYXNlY2gnLCAnYWNvdGgnXVxufTtcbmV4cG9ydHMuYWNzY2hEb2NzID0gYWNzY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2VjRG9jcyA9IHZvaWQgMDtcbnZhciBhc2VjRG9jcyA9IHtcbiAgbmFtZTogJ2FzZWMnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhc2VjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2FzZWMoMC41KScsICdhc2VjKHNlYygwLjUpKScsICdhc2VjKDIpJ10sXG4gIHNlZWFsc286IFsnYWNvcycsICdhY290JywgJ2Fjc2MnXVxufTtcbmV4cG9ydHMuYXNlY0RvY3MgPSBhc2VjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY2hEb2NzID0gdm9pZCAwO1xudmFyIGFzZWNoRG9jcyA9IHtcbiAgbmFtZTogJ2FzZWNoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNlY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGludmVyc2Ugc2VjYW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnYXNlY2goMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2Fjb3RoJ11cbn07XG5leHBvcnRzLmFzZWNoRG9jcyA9IGFzZWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNpbkRvY3MgPSB2b2lkIDA7XG52YXIgYXNpbkRvY3MgPSB7XG4gIG5hbWU6ICdhc2luJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNpbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2Ugc2luZSBvZiBhIHZhbHVlIGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXNpbigwLjUpJywgJ2FzaW4oc2luKDAuNSkpJ10sXG4gIHNlZWFsc286IFsnc2luJywgJ2Fjb3MnLCAnYXRhbiddXG59O1xuZXhwb3J0cy5hc2luRG9jcyA9IGFzaW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luaERvY3MgPSB2b2lkIDA7XG52YXIgYXNpbmhEb2NzID0ge1xuICBuYW1lOiAnYXNpbmgnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhc2luaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNzaW5lIG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC4nLFxuICBleGFtcGxlczogWydhc2luaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnYWNvc2gnLCAnYXRhbmgnXVxufTtcbmV4cG9ydHMuYXNpbmhEb2NzID0gYXNpbmhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuRG9jcyA9IHtcbiAgbmFtZTogJ2F0YW4nLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhdGFuKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgdmFsdWUgaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydhdGFuKDAuNSknLCAnYXRhbih0YW4oMC41KSknXSxcbiAgc2VlYWxzbzogWyd0YW4nLCAnYWNvcycsICdhc2luJ11cbn07XG5leHBvcnRzLmF0YW5Eb2NzID0gYXRhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW4yRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuMkRvY3MgPSB7XG4gIG5hbWU6ICdhdGFuMicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2F0YW4yKHksIHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIHByaW5jaXBhbCB2YWx1ZSBvZiB0aGUgYXJjIHRhbmdlbnQgb2YgeS94IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbjIoMiwgMikgLyBwaScsICdhbmdsZSA9IDYwIGRlZyBpbiByYWQnLCAneCA9IGNvcyhhbmdsZSknLCAneSA9IHNpbihhbmdsZSknLCAnYXRhbjIoeSwgeCknXSxcbiAgc2VlYWxzbzogWydzaW4nLCAnY29zJywgJ3RhbiddXG59O1xuZXhwb3J0cy5hdGFuMkRvY3MgPSBhdGFuMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW5oRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuaERvY3MgPSB7XG4gIG5hbWU6ICdhdGFuaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2F0YW5oKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYXRhbmgoeCkgPSBsbigoMSArIHgpLygxIC0geCkpIC8gMmAuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbmgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjb3NoJywgJ2FzaW5oJ11cbn07XG5leHBvcnRzLmF0YW5oRG9jcyA9IGF0YW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zRG9jcyA9IHZvaWQgMDtcbnZhciBjb3NEb2NzID0ge1xuICBuYW1lOiAnY29zJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY29zKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3MoMiknLCAnY29zKHBpIC8gNCkgXiAyJywgJ2NvcygxODAgZGVnKScsICdjb3MoNjAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLFxuICBzZWVhbHNvOiBbJ2Fjb3MnLCAnc2luJywgJ3RhbiddXG59O1xuZXhwb3J0cy5jb3NEb2NzID0gY29zRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zaERvY3MgPSB2b2lkIDA7XG52YXIgY29zaERvY3MgPSB7XG4gIG5hbWU6ICdjb3NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY29zaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3NoKDAuNSknXSxcbiAgc2VlYWxzbzogWydzaW5oJywgJ3RhbmgnLCAnY290aCddXG59O1xuZXhwb3J0cy5jb3NoRG9jcyA9IGNvc2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3REb2NzID0gdm9pZCAwO1xudmFyIGNvdERvY3MgPSB7XG4gIG5hbWU6ICdjb3QnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydjb3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb3RhbmdlbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvdGFuKHgpJyxcbiAgZXhhbXBsZXM6IFsnY290KDIpJywgJzEgLyB0YW4oMiknXSxcbiAgc2VlYWxzbzogWydzZWMnLCAnY3NjJywgJ3RhbiddXG59O1xuZXhwb3J0cy5jb3REb2NzID0gY290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY290aERvY3MgPSB2b2lkIDA7XG52YXIgY290aERvY3MgPSB7XG4gIG5hbWU6ICdjb3RoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY290aCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY290YW5nZW50IG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3RoKDIpJywgJzEgLyB0YW5oKDIpJ10sXG4gIHNlZWFsc286IFsnc2VjaCcsICdjc2NoJywgJ3RhbmgnXVxufTtcbmV4cG9ydHMuY290aERvY3MgPSBjb3RoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjRG9jcyA9IHZvaWQgMDtcbnZhciBjc2NEb2NzID0ge1xuICBuYW1lOiAnY3NjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY3NjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luKHgpJyxcbiAgZXhhbXBsZXM6IFsnY3NjKDIpJywgJzEgLyBzaW4oMiknXSxcbiAgc2VlYWxzbzogWydzZWMnLCAnY290JywgJ3NpbiddXG59O1xuZXhwb3J0cy5jc2NEb2NzID0gY3NjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjaERvY3MgPSB2b2lkIDA7XG52YXIgY3NjaERvY3MgPSB7XG4gIG5hbWU6ICdjc2NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY3NjaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luaCh4KScsXG4gIGV4YW1wbGVzOiBbJ2NzY2goMiknLCAnMSAvIHNpbmgoMiknXSxcbiAgc2VlYWxzbzogWydzZWNoJywgJ2NvdGgnLCAnc2luaCddXG59O1xuZXhwb3J0cy5jc2NoRG9jcyA9IGNzY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZWNEb2NzID0gdm9pZCAwO1xudmFyIHNlY0RvY3MgPSB7XG4gIG5hbWU6ICdzZWMnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydzZWMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvY29zKHgpJyxcbiAgZXhhbXBsZXM6IFsnc2VjKDIpJywgJzEgLyBjb3MoMiknXSxcbiAgc2VlYWxzbzogWydjb3QnLCAnY3NjJywgJ2NvcyddXG59O1xuZXhwb3J0cy5zZWNEb2NzID0gc2VjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2VjaERvY3MgPSB2b2lkIDA7XG52YXIgc2VjaERvY3MgPSB7XG4gIG5hbWU6ICdzZWNoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2VjaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL2Nvc2goeCknLFxuICBleGFtcGxlczogWydzZWNoKDIpJywgJzEgLyBjb3NoKDIpJ10sXG4gIHNlZWFsc286IFsnY290aCcsICdjc2NoJywgJ2Nvc2gnXVxufTtcbmV4cG9ydHMuc2VjaERvY3MgPSBzZWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luRG9jcyA9IHZvaWQgMDtcbnZhciBzaW5Eb2NzID0ge1xuICBuYW1lOiAnc2luJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2luKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnc2luKDIpJywgJ3NpbihwaSAvIDQpIF4gMicsICdzaW4oOTAgZGVnKScsICdzaW4oMzAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLFxuICBzZWVhbHNvOiBbJ2FzaW4nLCAnY29zJywgJ3RhbiddXG59O1xuZXhwb3J0cy5zaW5Eb2NzID0gc2luRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luaERvY3MgPSB2b2lkIDA7XG52YXIgc2luaERvY3MgPSB7XG4gIG5hbWU6ICdzaW5oJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2luaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnc2luaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnY29zaCcsICd0YW5oJ11cbn07XG5leHBvcnRzLnNpbmhEb2NzID0gc2luaERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbkRvY3MgPSB2b2lkIDA7XG52YXIgdGFuRG9jcyA9IHtcbiAgbmFtZTogJ3RhbicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3Rhbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3RhbigwLjUpJywgJ3NpbigwLjUpIC8gY29zKDAuNSknLCAndGFuKHBpIC8gNCknLCAndGFuKDQ1IGRlZyknXSxcbiAgc2VlYWxzbzogWydhdGFuJywgJ3NpbicsICdjb3MnXVxufTtcbmV4cG9ydHMudGFuRG9jcyA9IHRhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbmhEb2NzID0gdm9pZCAwO1xudmFyIHRhbmhEb2NzID0ge1xuICBuYW1lOiAndGFuaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3RhbmgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3RhbmgoMC41KScsICdzaW5oKDAuNSkgLyBjb3NoKDAuNSknXSxcbiAgc2VlYWxzbzogWydzaW5oJywgJ2Nvc2gnXVxufTtcbmV4cG9ydHMudGFuaERvY3MgPSB0YW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9Eb2NzID0gdm9pZCAwO1xudmFyIHRvRG9jcyA9IHtcbiAgbmFtZTogJ3RvJyxcbiAgY2F0ZWdvcnk6ICdVbml0cycsXG4gIHN5bnRheDogWyd4IHRvIHVuaXQnLCAndG8oeCwgdW5pdCknXSxcbiAgZGVzY3JpcHRpb246ICdDaGFuZ2UgdGhlIHVuaXQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWyc1IGluY2ggdG8gY20nLCAnMy4ya2cgdG8gZycsICcxNiBieXRlcyBpbiBiaXRzJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy50b0RvY3MgPSB0b0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNsb25lRG9jcyA9IHZvaWQgMDtcbnZhciBjbG9uZURvY3MgPSB7XG4gIG5hbWU6ICdjbG9uZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnY2xvbmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDbG9uZSBhIHZhcmlhYmxlLiBDcmVhdGVzIGEgY29weSBvZiBwcmltaXRpdmUgdmFyaWFibGVzLGFuZCBhIGRlZXAgY29weSBvZiBtYXRyaWNlcycsXG4gIGV4YW1wbGVzOiBbJ2Nsb25lKDMuNSknLCAnY2xvbmUoMiAtIDRpKScsICdjbG9uZSg0NSBkZWcpJywgJ2Nsb25lKFsxLCAyOyAzLCA0XSknLCAnY2xvbmUoXCJoZWxsbyB3b3JsZFwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuY2xvbmVEb2NzID0gY2xvbmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JtYXREb2NzID0gdm9pZCAwO1xudmFyIGZvcm1hdERvY3MgPSB7XG4gIG5hbWU6ICdmb3JtYXQnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2Zvcm1hdCh2YWx1ZSknLCAnZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pJ10sXG4gIGRlc2NyaXB0aW9uOiAnRm9ybWF0IGEgdmFsdWUgb2YgYW55IHR5cGUgYXMgc3RyaW5nLicsXG4gIGV4YW1wbGVzOiBbJ2Zvcm1hdCgyLjMpJywgJ2Zvcm1hdCgzIC0gNGkpJywgJ2Zvcm1hdChbXSknLCAnZm9ybWF0KHBpLCAzKSddLFxuICBzZWVhbHNvOiBbJ3ByaW50J11cbn07XG5leHBvcnRzLmZvcm1hdERvY3MgPSBmb3JtYXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEb2NzID0gdm9pZCAwO1xudmFyIGhhc051bWVyaWNWYWx1ZURvY3MgPSB7XG4gIG5hbWU6ICdoYXNOdW1lcmljVmFsdWUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2hhc051bWVyaWNWYWx1ZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIG51bWVyaWMgdmFsdWUuICcgKyAnSW4gY2FzZSBvZiBhIHN0cmluZywgdHJ1ZSBpcyByZXR1cm5lZCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtZXJpYyB2YWx1ZS4nLFxuICBleGFtcGxlczogWydoYXNOdW1lcmljVmFsdWUoMiknLCAnaGFzTnVtZXJpY1ZhbHVlKFwiMlwiKScsICdpc051bWVyaWMoXCIyXCIpJywgJ2hhc051bWVyaWNWYWx1ZSgwKScsICdoYXNOdW1lcmljVmFsdWUoYmlnbnVtYmVyKDUwMCkpJywgJ2hhc051bWVyaWNWYWx1ZShmcmFjdGlvbigwLjEyNSkpJywgJ2hhc051bWVyaWNWYWx1ZSgyICsgM2kpJywgJ2hhc051bWVyaWNWYWx1ZShbMi4zLCBcImZvb1wiLCBmYWxzZV0pJ10sXG4gIHNlZWFsc286IFsnaXNJbnRlZ2VyJywgJ2lzWmVybycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNOYU4nLCAnaXNOdW1lcmljJ11cbn07XG5leHBvcnRzLmhhc051bWVyaWNWYWx1ZURvY3MgPSBoYXNOdW1lcmljVmFsdWVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXJEb2NzID0gdm9pZCAwO1xudmFyIGlzSW50ZWdlckRvY3MgPSB7XG4gIG5hbWU6ICdpc0ludGVnZXInLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzSW50ZWdlcih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIGludGVnZXIgbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ2lzSW50ZWdlcigyKScsICdpc0ludGVnZXIoMy41KScsICdpc0ludGVnZXIoWzMsIDAuNSwgLTJdKSddLFxuICBzZWVhbHNvOiBbJ2lzTmVnYXRpdmUnLCAnaXNOdW1lcmljJywgJ2lzUG9zaXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzSW50ZWdlckRvY3MgPSBpc0ludGVnZXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05hTkRvY3MgPSB2b2lkIDA7XG52YXIgaXNOYU5Eb2NzID0ge1xuICBuYW1lOiAnaXNOYU4nLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzTmFOKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgTmFOIChub3QgYSBudW1iZXIpJyxcbiAgZXhhbXBsZXM6IFsnaXNOYU4oMiknLCAnaXNOYU4oMCAvIDApJywgJ2lzTmFOKE5hTiknLCAnaXNOYU4oSW5maW5pdHkpJ10sXG4gIHNlZWFsc286IFsnaXNOZWdhdGl2ZScsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNOYU5Eb2NzID0gaXNOYU5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05lZ2F0aXZlRG9jcyA9IHZvaWQgMDtcbnZhciBpc05lZ2F0aXZlRG9jcyA9IHtcbiAgbmFtZTogJ2lzTmVnYXRpdmUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzTmVnYXRpdmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBuZWdhdGl2ZTogc21hbGxlciB0aGFuIHplcm8uJyxcbiAgZXhhbXBsZXM6IFsnaXNOZWdhdGl2ZSgyKScsICdpc05lZ2F0aXZlKDApJywgJ2lzTmVnYXRpdmUoLTQpJywgJ2lzTmVnYXRpdmUoWzMsIDAuNSwgLTJdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURvY3MgPSBpc05lZ2F0aXZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOdW1lcmljRG9jcyA9IHZvaWQgMDtcbnZhciBpc051bWVyaWNEb2NzID0ge1xuICBuYW1lOiAnaXNOdW1lcmljJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc051bWVyaWMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhIG51bWVyaWMgdmFsdWUuICcgKyAnUmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgbnVtYmVyLCBCaWdOdW1iZXIsIEZyYWN0aW9uLCBvciBib29sZWFuLicsXG4gIGV4YW1wbGVzOiBbJ2lzTnVtZXJpYygyKScsICdpc051bWVyaWMoXCIyXCIpJywgJ2hhc051bWVyaWNWYWx1ZShcIjJcIiknLCAnaXNOdW1lcmljKDApJywgJ2lzTnVtZXJpYyhiaWdudW1iZXIoNTAwKSknLCAnaXNOdW1lcmljKGZyYWN0aW9uKDAuMTI1KSknLCAnaXNOdW1lcmljKDIgKyAzaSknLCAnaXNOdW1lcmljKFsyLjMsIFwiZm9vXCIsIGZhbHNlXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNaZXJvJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZScsICdpc05hTicsICdoYXNOdW1lcmljVmFsdWUnXVxufTtcbmV4cG9ydHMuaXNOdW1lcmljRG9jcyA9IGlzTnVtZXJpY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUG9zaXRpdmVEb2NzID0gdm9pZCAwO1xudmFyIGlzUG9zaXRpdmVEb2NzID0ge1xuICBuYW1lOiAnaXNQb3NpdGl2ZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNQb3NpdGl2ZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHBvc2l0aXZlOiBsYXJnZXIgdGhhbiB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoMiknLCAnaXNQb3NpdGl2ZSgwKScsICdpc1Bvc2l0aXZlKC00KScsICdpc1Bvc2l0aXZlKFszLCAwLjUsIC0yXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzUG9zaXRpdmVEb2NzID0gaXNQb3NpdGl2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUHJpbWVEb2NzID0gdm9pZCAwO1xudmFyIGlzUHJpbWVEb2NzID0ge1xuICBuYW1lOiAnaXNQcmltZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNQcmltZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHByaW1lOiBoYXMgbm8gZGl2aXNvcnMgb3RoZXIgdGhhbiBpdHNlbGYgYW5kIG9uZS4nLFxuICBleGFtcGxlczogWydpc1ByaW1lKDMpJywgJ2lzUHJpbWUoLTIpJywgJ2lzUHJpbWUoWzIsIDE3LCAxMDBdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNOZWdhdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNQcmltZURvY3MgPSBpc1ByaW1lRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNaZXJvRG9jcyA9IHZvaWQgMDtcbnZhciBpc1plcm9Eb2NzID0ge1xuICBuYW1lOiAnaXNaZXJvJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc1plcm8oeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzWmVybygyKScsICdpc1plcm8oMCknLCAnaXNaZXJvKC00KScsICdpc1plcm8oWzMsIDAsIC0yLCAwXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZSddXG59O1xuZXhwb3J0cy5pc1plcm9Eb2NzID0gaXNaZXJvRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVtZXJpY0RvY3MgPSB2b2lkIDA7XG52YXIgbnVtZXJpY0RvY3MgPSB7XG4gIG5hbWU6ICdudW1lcmljJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydudW1lcmljKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29udmVydCBhIG51bWVyaWMgaW5wdXQgdG8gYSBzcGVjaWZpYyBudW1lcmljIHR5cGU6IG51bWJlciwgQmlnTnVtYmVyLCBvciBGcmFjdGlvbi4nLFxuICBleGFtcGxlczogWydudW1lcmljKFwiNFwiKScsICdudW1lcmljKFwiNFwiLCBcIm51bWJlclwiKScsICdudW1lcmljKFwiNFwiLCBcIkJpZ051bWJlclwiKScsICdudW1lcmljKFwiNFwiLCBcIkZyYWN0aW9uKScsICdudW1lcmljKDQsIFwiRnJhY3Rpb25cIiknLCAnbnVtZXJpYyhmcmFjdGlvbigyLCA1KSwgXCJudW1iZXIpJ10sXG4gIHNlZWFsc286IFsnbnVtYmVyJywgJ2ZyYWN0aW9uJywgJ2JpZ251bWJlcicsICdzdHJpbmcnLCAnZm9ybWF0J11cbn07XG5leHBvcnRzLm51bWVyaWNEb2NzID0gbnVtZXJpY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVPZkRvY3MgPSB2b2lkIDA7XG52YXIgdHlwZU9mRG9jcyA9IHtcbiAgbmFtZTogJ3R5cGVPZicsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsndHlwZU9mKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSB0eXBlIG9mIGEgdmFyaWFibGUuJyxcbiAgZXhhbXBsZXM6IFsndHlwZU9mKDMuNSknLCAndHlwZU9mKDIgLSA0aSknLCAndHlwZU9mKDQ1IGRlZyknLCAndHlwZU9mKFwiaGVsbG8gd29ybGRcIiknXSxcbiAgc2VlYWxzbzogWydnZXRNYXRyaXhEYXRhVHlwZSddXG59O1xuZXhwb3J0cy50eXBlT2ZEb2NzID0gdHlwZU9mRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGlsZSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjb21waWxlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3BhcnNlJ107XG52YXIgY3JlYXRlQ29tcGlsZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBjb21waWxlIGFuIGV4cHJlc3Npb24uXG4gICAqIFJldHVybnMgYSBhbiBvYmplY3Qgd2l0aCBhIGZ1bmN0aW9uIGBldmFsdWF0ZShbc2NvcGVdKWAgdG8gZXZhbHVhdGUgdGhlXG4gICAqIGNvbXBpbGVkIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tcGlsZShleHByKSAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBvbmUgbm9kZVxuICAgKiAgICAgbWF0aC5jb21waWxlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKSAvLyByZXR1cm5zIGFuIGFycmF5IHdpdGggbm9kZXNcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBjb2RlMSA9IG1hdGguY29tcGlsZSgnc3FydCgzXjIgKyA0XjIpJylcbiAgICogICAgIGNvZGUxLmV2YWx1YXRlKCkgLy8gNVxuICAgKlxuICAgKiAgICAgbGV0IHNjb3BlID0ge2E6IDMsIGI6IDR9XG4gICAqICAgICBjb25zdCBjb2RlMiA9IG1hdGguY29tcGlsZSgnYSAqIGInKSAvLyAxMlxuICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDEyXG4gICAqICAgICBzY29wZS5hID0gNVxuICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDIwXG4gICAqXG4gICAqICAgICBjb25zdCBub2RlcyA9IG1hdGguY29tcGlsZShbJ2EgPSAzJywgJ2IgPSA0JywgJ2EgKiBiJ10pXG4gICAqICAgICBub2Rlc1syXS5ldmFsdWF0ZSgpIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwYXJzZSwgZXZhbHVhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IEFycmF5IHwgTWF0cml4fSBleHByXG4gICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgY29tcGlsZWRcbiAgICogQHJldHVybiB7e2V2YWx1YXRlOiBGdW5jdGlvbn0gfCBBcnJheS48e2V2YWx1YXRlOiBGdW5jdGlvbn0+fSBjb2RlXG4gICAqICAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggdGhlIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGlsZSA9IGNyZWF0ZUNvbXBpbGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURlcHJlY2F0ZWRFdmFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG4vLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE4LTEyLTA1XG52YXIgY3JlYXRlRGVwcmVjYXRlZEV2YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ2V2YWwnLCBbJ2V2YWx1YXRlJ10sIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBldmFsdWF0ZSA9IF9yZWYuZXZhbHVhdGU7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9sb2cud2Fybk9uY2UpKCdGdW5jdGlvbiBcImV2YWxcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwiZXZhbHVhdGVcIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBldmFsdWF0ZS5hcHBseShldmFsdWF0ZSwgYXJncyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZEV2YWwgPSBjcmVhdGVEZXByZWNhdGVkRXZhbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXZhbHVhdGUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZXZhbHVhdGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAncGFyc2UnXTtcbnZhciBjcmVhdGVFdmFsdWF0ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlIGFuIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLFxuICAgKiBzZWUgW2h0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWxdKGh0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIpXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIsIHNjb3BlKVxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0sIHNjb3BlKVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnKDIrMykvNCcpICAgICAgICAgICAgICAgIC8vIDEuMjVcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJ3NxcnQoM14yICsgNF4yKScpICAgICAgICAvLyA1XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoWydhPTMnLCAnYj00JywgJ2EqYiddKSAgICAvLyBbMywgNCwgMTJdXG4gICAqXG4gICAqICAgICBsZXQgc2NvcGUgPSB7YTozLCBiOjR9XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdhICogYicsIHNjb3BlKSAgICAgICAgICAgLy8gMTJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHBhcnNlLCBjb21waWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBNYXRyaXh9IGV4cHIgICBUaGUgZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtzY29wZV0gICAgICAgICAgICAgICAgICAgIFNjb3BlIHRvIHJlYWQvd3JpdGUgdmFyaWFibGVzXG4gICAqIEByZXR1cm4geyp9IFRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb25cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHtcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuICAgICAgcmV0dXJuIHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZXhwcikge1xuICAgICAgdmFyIHNjb3BlID0ge307XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgT2JqZWN0JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoZXhwciwgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBwYXJzZShlbnRyeSkuY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXZhbHVhdGUgPSBjcmVhdGVFdmFsdWF0ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSGVscCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2VtYmVkZGVkRG9jcyA9IHJlcXVpcmUoXCIuLi9lbWJlZGRlZERvY3MvZW1iZWRkZWREb2NzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBuYW1lID0gJ2hlbHAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0aFdpdGhUcmFuc2Zvcm0nLCAnSGVscCddO1xudmFyIGNyZWF0ZUhlbHAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLFxuICAgICAgSGVscCA9IF9yZWYuSGVscDtcblxuICAvKipcbiAgICogUmV0cmlldmUgaGVscCBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS5cbiAgICogSGVscCBmaWxlcyBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGVtYmVkZGVkIGRvY3VtZW50YXRpb24gaW4gbWF0aC5kb2NzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaGVscChzZWFyY2gpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zb2xlLmxvZyhtYXRoLmhlbHAoJ3NpbicpLnRvU3RyaW5nKCkpXG4gICAqICAgIGNvbnNvbGUubG9nKG1hdGguaGVscChtYXRoLmFkZCkudG9TdHJpbmcoKSlcbiAgICogICAgY29uc29sZS5sb2cobWF0aC5oZWxwKG1hdGguYWRkKS50b0pTT04oKSlcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8IHN0cmluZyB8IE9iamVjdH0gc2VhcmNoICAgQSBmdW5jdGlvbiBvciBmdW5jdGlvbiBuYW1lXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB0byBnZXQgaGVscFxuICAgKiBAcmV0dXJuIHtIZWxwfSBBIGhlbHAgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHNlYXJjaCkge1xuICAgICAgdmFyIHByb3A7XG4gICAgICB2YXIgc2VhcmNoTmFtZSA9IHNlYXJjaDtcblxuICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBtYXRoV2l0aFRyYW5zZm9ybSkge1xuICAgICAgICAgIC8vIHNlYXJjaCBpbiBmdW5jdGlvbnMgYW5kIGNvbnN0YW50c1xuICAgICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobWF0aFdpdGhUcmFuc2Zvcm0sIHByb3ApICYmIHNlYXJjaCA9PT0gbWF0aFdpdGhUcmFuc2Zvcm1bcHJvcF0pIHtcbiAgICAgICAgICAgIHNlYXJjaE5hbWUgPSBwcm9wO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIFRPRE86IGltcGxlbWVudCBoZWxwIGZvciBkYXRhIHR5cGVzXG4gICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgIC8vIHNlYXJjaCBkYXRhIHR5cGVcbiAgICAgICAgIGZvciAocHJvcCBpbiBtYXRoLnR5cGUpIHtcbiAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShtYXRoLCBwcm9wKSkge1xuICAgICAgICAgaWYgKHNlYXJjaCA9PT0gbWF0aC50eXBlW3Byb3BdKSB7XG4gICAgICAgICB0ZXh0ID0gcHJvcFxuICAgICAgICAgYnJlYWtcbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgICovXG5cbiAgICAgIH1cblxuICAgICAgdmFyIGRvYyA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKF9lbWJlZGRlZERvY3MuZW1iZWRkZWREb2NzLCBzZWFyY2hOYW1lKTtcblxuICAgICAgaWYgKCFkb2MpIHtcbiAgICAgICAgdmFyIHNlYXJjaFRleHQgPSB0eXBlb2Ygc2VhcmNoTmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IHNlYXJjaE5hbWUubmFtZSA6IHNlYXJjaE5hbWU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZG9jdW1lbnRhdGlvbiBmb3VuZCBvbiBcIicgKyBzZWFyY2hUZXh0ICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgSGVscChkb2MpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSGVscCA9IGNyZWF0ZUhlbHA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3BhcnNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdQYXJzZXInXTtcbnZhciBjcmVhdGVQYXJzZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgUGFyc2VyID0gX3JlZi5QYXJzZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHBhcnNlci4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguUGFyc2VyYCBvYmplY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wYXJzZXIoKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IHBhcnNlciA9IG5ldyBtYXRoLnBhcnNlcigpXG4gICAqXG4gICAqICAgICAvLyBldmFsdWF0ZSBleHByZXNzaW9uc1xuICAgKiAgICAgY29uc3QgYSA9IHBhcnNlci5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgLy8gNVxuICAgKiAgICAgY29uc3QgYiA9IHBhcnNlci5ldmFsdWF0ZSgnc3FydCgtNCknKSAgICAgICAgLy8gMmlcbiAgICogICAgIGNvbnN0IGMgPSBwYXJzZXIuZXZhbHVhdGUoJzIgaW5jaCBpbiBjbScpICAgIC8vIDUuMDggY21cbiAgICogICAgIGNvbnN0IGQgPSBwYXJzZXIuZXZhbHVhdGUoJ2Nvcyg0NSBkZWcpJykgICAgIC8vIDAuNzA3MTA2NzgxMTg2NTQ3NlxuICAgKlxuICAgKiAgICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggPSA3IC8gMicpICAgICAgICAgICAgICAgICAvLyAzLjVcbiAgICogICAgIHBhcnNlci5ldmFsdWF0ZSgneCArIDMnKSAgICAgICAgICAgICAgICAgICAgIC8vIDYuNVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgICAgLy8gZih4LCB5KVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmKDIsIDMpJykgICAgICAgICAgICAgICAgICAgLy8gOFxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGFuZCBzZXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICogICAgIGNvbnN0IHggPSBwYXJzZXIuZ2V0KCd4JykgICAgICAgICAgICAgICAgLy8gN1xuICAgKiAgICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAvLyBmdW5jdGlvblxuICAgKiAgICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAvLyA5XG4gICAqICAgICBwYXJzZXIuc2V0KCdoJywgNTAwKVxuICAgKiAgICAgY29uc3QgaSA9IHBhcnNlci5ldmFsdWF0ZSgnaCAvIDInKSAgICAgICAvLyAyNTBcbiAgICogICAgIHBhcnNlci5zZXQoJ2hlbGxvJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnISdcbiAgICogICAgIH0pXG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ2hlbGxvKFwidXNlclwiKScpICAgICAgICAgLy8gXCJoZWxsbywgdXNlciFcIlxuICAgKlxuICAgKiAgICAgLy8gY2xlYXIgZGVmaW5lZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlc1xuICAgKiAgICAgcGFyc2VyLmNsZWFyKClcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV2YWx1YXRlLCBjb21waWxlLCBwYXJzZVxuICAgKlxuICAgKiBAcmV0dXJuIHtQYXJzZXJ9IFBhcnNlclxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2VyKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJzZXIgPSBjcmVhdGVQYXJzZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtleXdvcmRzID0gdm9pZCAwO1xuLy8gUmVzZXJ2ZWQga2V5d29yZHMgbm90IGFsbG93ZWQgdG8gdXNlIGluIHRoZSBwYXJzZXJcbnZhciBrZXl3b3JkcyA9IHtcbiAgZW5kOiB0cnVlXG59O1xuZXhwb3J0cy5rZXl3b3JkcyA9IGtleXdvcmRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY2Nlc3Nvck5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hY2Nlc3MgPSByZXF1aXJlKFwiLi91dGlscy9hY2Nlc3NcIik7XG5cbnZhciBuYW1lID0gJ0FjY2Vzc29yTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzdWJzZXQnLCAnTm9kZSddO1xudmFyIGNyZWF0ZUFjY2Vzc29yTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG4gIHZhciBhY2Nlc3MgPSAoMCwgX2FjY2Vzcy5hY2Nlc3NGYWN0b3J5KSh7XG4gICAgc3Vic2V0OiBzdWJzZXRcbiAgfSk7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgQWNjZXNzb3JOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBBY2Nlc3MgYW4gb2JqZWN0IHByb3BlcnR5IG9yIGdldCBhIG1hdHJpeCBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBvYmplY3QgICAgICAgICAgICAgICAgIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0byByZXRyaWV2ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwcm9wZXJ0eSBvciBzdWJzZXQuXG4gICAqIEBwYXJhbSB7SW5kZXhOb2RlfSBpbmRleCAgICAgICAgICAgICBJbmRleE5vZGUgY29udGFpbmluZyByYW5nZXNcbiAgICovXG5cbiAgZnVuY3Rpb24gQWNjZXNzb3JOb2RlKG9iamVjdCwgaW5kZXgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWNjZXNzb3JOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJvYmplY3RcIicpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9pcy5pc0luZGV4Tm9kZSkoaW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleE5vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImluZGV4XCInKTtcbiAgICB9XG5cbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdCB8fCBudWxsO1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpID8gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0Lm5hbWUgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhc3NpZ24gYSBuZXcgbmFtZSwgbmFtZSBpcyByZWFkLW9ubHknKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnQWNjZXNzb3JOb2RlJztcbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5pc0FjY2Vzc29yTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIHZhciBldmFsSW5kZXggPSB0aGlzLmluZGV4Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIGlmICh0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgdmFyIHByb3AgPSB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFjY2Vzc29yTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCksIHByb3ApO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBY2Nlc3Nvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IGV2YWxPYmplY3Qoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB2YXIgaW5kZXggPSBldmFsSW5kZXgoc2NvcGUsIGFyZ3MsIG9iamVjdCk7IC8vIHdlIHBhc3Mgb2JqZWN0IGhlcmUgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgcmV0dXJuIGFjY2VzcyhvYmplY3QsIGluZGV4KTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMub2JqZWN0LCAnb2JqZWN0JywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQWNjZXNzb3JOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBY2Nlc3Nvck5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5vYmplY3QsICdvYmplY3QnLCB0aGlzKSksIHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmluZGV4LCAnaW5kZXgnLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtBY2Nlc3Nvck5vZGV9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLm9iamVjdCwgdGhpcy5pbmRleCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHtcbiAgICAgIG9iamVjdCA9ICcoJyArIG9iamVjdCArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgdGhpcy5pbmRleC50b1N0cmluZyhvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcy5vYmplY3QpKSB7XG4gICAgICBvYmplY3QgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBvYmplY3QgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIHRoaXMuaW5kZXgudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHtcbiAgICAgIG9iamVjdCA9ICdcXFxcbGVmdChcXCcgKyBvYmplY3QgKyBcXCdcXFxccmlnaHQpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgdGhpcy5pbmRleC50b1RleChvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQWNjZXNzb3JOb2RlJyxcbiAgICAgIG9iamVjdDogdGhpcy5vYmplY3QsXG4gICAgICBpbmRleDogdGhpcy5pbmRleFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBY2Nlc3Nvck5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFjY2Vzc29yTm9kZVwiLCBvYmplY3Q6IC4uLiwgaW5kZXg6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtBY2Nlc3Nvck5vZGV9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZShqc29uLm9iamVjdCwganNvbi5pbmRleCk7XG4gIH07XG4gIC8qKlxuICAgKiBBcmUgcGFyZW50aGVzaXMgbmVlZGVkP1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG5lZWRQYXJlbnRoZXNpcyhub2RlKSB7XG4gICAgLy8gVE9ETzogbWF5YmUgbWFrZSBhIG1ldGhvZCBvbiB0aGUgbm9kZXMgd2hpY2ggdGVsbHMgd2hldGhlciB0aGV5IG5lZWQgcGFyZW50aGVzaXM/XG4gICAgcmV0dXJuICEoKDAsIF9pcy5pc0FjY2Vzc29yTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0FycmF5Tm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc09iamVjdE5vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSk7XG4gIH1cblxuICByZXR1cm4gQWNjZXNzb3JOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY2Nlc3Nvck5vZGUgPSBjcmVhdGVBY2Nlc3Nvck5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFycmF5Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0FycmF5Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlQXJyYXlOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBBcnJheU5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqIEhvbGRzIGFuIDEtZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gW2l0ZW1zXSAgIDEgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtc1xuICAgKi9cbiAgZnVuY3Rpb24gQXJyYXlOb2RlKGl0ZW1zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFycmF5Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVtcyA9IGl0ZW1zIHx8IFtdOyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpIHx8ICF0aGlzLml0ZW1zLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkJyk7XG4gICAgfSAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHYzLCByZW1vdmUgc29tZSBkYXlcblxuXG4gICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgQXJyYXlOb2RlLm5vZGVzYCBpcyBkZXByZWNhdGVkLCB1c2UgYEFycmF5Tm9kZS5pdGVtc2AgaW5zdGVhZCcpO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25vZGVzJywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBBcnJheU5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50eXBlID0gJ0FycmF5Tm9kZSc7XG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuaXNBcnJheU5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBBcnJheU5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGV2YWxJdGVtcyA9ICgwLCBfYXJyYXkubWFwKSh0aGlzLml0ZW1zLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuICAgIH0pO1xuICAgIHZhciBhc01hdHJpeCA9IG1hdGguY29uZmlnLm1hdHJpeCAhPT0gJ0FycmF5JztcblxuICAgIGlmIChhc01hdHJpeCkge1xuICAgICAgdmFyIG1hdHJpeCA9IG1hdGgubWF0cml4O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBcnJheU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX2FycmF5Lm1hcCkoZXZhbEl0ZW1zLCBmdW5jdGlvbiAoZXZhbEl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gZXZhbEl0ZW0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFycmF5Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5tYXApKGV2YWxJdGVtcywgZnVuY3Rpb24gKGV2YWxJdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxJdGVtKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5pdGVtc1tpXTtcbiAgICAgIGNhbGxiYWNrKG5vZGUsICdpdGVtc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFycmF5Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW1zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuaXRlbXNbaV0sICdpdGVtc1snICsgaSArICddJywgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXJyYXlOb2RlKGl0ZW1zKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QXJyYXlOb2RlfVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUodGhpcy5pdGVtcy5zbGljZSgwKSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgfSk7XG4gICAgcmV0dXJuICdbJyArIGl0ZW1zLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0FycmF5Tm9kZScsXG4gICAgICBpdGVtczogdGhpcy5pdGVtc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBcnJheU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFycmF5Tm9kZVwiLCBpdGVtczogWy4uLl19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUoanNvbi5pdGVtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnRvSFRNTChvcHRpb25zKTtcbiAgICB9KTtcbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPls8L3NwYW4+JyArIGl0ZW1zLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPl08L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcyA9ICdcXFxcYmVnaW57Ym1hdHJpeH0nO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgaWYgKG5vZGUuaXRlbXMpIHtcbiAgICAgICAgcyArPSBub2RlLml0ZW1zLm1hcChmdW5jdGlvbiAoY2hpbGROb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS50b1RleChvcHRpb25zKTtcbiAgICAgICAgfSkuam9pbignJicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcyArPSBub2RlLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgfSAvLyBuZXcgbGluZVxuXG5cbiAgICAgIHMgKz0gJ1xcXFxcXFxcJztcbiAgICB9KTtcbiAgICBzICs9ICdcXFxcZW5ke2JtYXRyaXh9JztcbiAgICByZXR1cm4gcztcbiAgfTtcblxuICByZXR1cm4gQXJyYXlOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcnJheU5vZGUgPSBjcmVhdGVBcnJheU5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzc2lnbm1lbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWNjZXNzID0gcmVxdWlyZShcIi4vdXRpbHMvYWNjZXNzXCIpO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2Fzc2lnblwiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgbmFtZSA9ICdBc3NpZ25tZW50Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzdWJzZXQnLCAnP21hdHJpeCcsIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCBhbGwsIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHN1YnNldFxuJ05vZGUnXTtcbnZhciBjcmVhdGVBc3NpZ25tZW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcbiAgdmFyIGFjY2VzcyA9ICgwLCBfYWNjZXNzLmFjY2Vzc0ZhY3RvcnkpKHtcbiAgICBzdWJzZXQ6IHN1YnNldFxuICB9KTtcbiAgdmFyIGFzc2lnbiA9ICgwLCBfYXNzaWduLmFzc2lnbkZhY3RvcnkpKHtcbiAgICBzdWJzZXQ6IHN1YnNldCxcbiAgICBtYXRyaXg6IG1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBBc3NpZ25tZW50Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICpcbiAgICogRGVmaW5lIGEgc3ltYm9sLCBsaWtlIGBhPTMuMmAsIHVwZGF0ZSBhIHByb3BlcnR5IGxpa2UgYGEuYj0zLjJgLCBvclxuICAgKiByZXBsYWNlIGEgc3Vic2V0IG9mIGEgbWF0cml4IGxpa2UgYEFbMiwyXT00MmAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG5ldyBBc3NpZ25tZW50Tm9kZShzeW1ib2wsIHZhbHVlKVxuICAgKiAgICAgbmV3IEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKVxuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBDb25zdGFudE5vZGUoMikpICAgICAgICAgICAgICAgICAgICAgICAvLyBhPTJcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBJbmRleE5vZGUoJ2InKSwgbmV3IENvbnN0YW50Tm9kZSgyKSkgICAvLyBhLmI9MlxuICAgKiAgICBuZXcgQXNzaWdubWVudE5vZGUobmV3IFN5bWJvbE5vZGUoJ2EnKSwgbmV3IEluZGV4Tm9kZSgxLCAyKSwgbmV3IENvbnN0YW50Tm9kZSgzKSkgIC8vIGFbMSwyXT0zXG4gICAqXG4gICAqIEBwYXJhbSB7U3ltYm9sTm9kZSB8IEFjY2Vzc29yTm9kZX0gb2JqZWN0ICBPYmplY3Qgb24gd2hpY2ggdG8gYXNzaWduIGEgdmFsdWVcbiAgICogQHBhcmFtIHtJbmRleE5vZGV9IFtpbmRleD1udWxsXSAgICAgICAgICAgIEluZGV4LCBwcm9wZXJ0eSBuYW1lIG9yIG1hdHJpeFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguIE9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgb2JqZWN0YCBpcyBhIFN5bWJvbE5vZGUsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvcGVydHkgaXMgYXNzaWduZWQgdG8gdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgc2NvcGUuXG4gICAqIEBwYXJhbSB7Tm9kZX0gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gYmUgYXNzaWduZWRcbiAgICovXG5cbiAgZnVuY3Rpb24gQXNzaWdubWVudE5vZGUob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXNzaWdubWVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuICAgIHRoaXMuaW5kZXggPSB2YWx1ZSA/IGluZGV4IDogbnVsbDtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgfHwgaW5kZXg7IC8vIHZhbGlkYXRlIGlucHV0XG5cbiAgICBpZiAoISgwLCBfaXMuaXNTeW1ib2xOb2RlKShvYmplY3QpICYmICEoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2xOb2RlIG9yIEFjY2Vzc29yTm9kZSBleHBlY3RlZCBhcyBcIm9iamVjdFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShvYmplY3QpICYmIG9iamVjdC5uYW1lID09PSAnZW5kJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIHRvIHN5bWJvbCBcImVuZFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5kZXggJiYgISgwLCBfaXMuaXNJbmRleE5vZGUpKHRoaXMuaW5kZXgpKSB7XG4gICAgICAvLyBpbmRleCBpcyBvcHRpb25hbFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXhOb2RlIGV4cGVjdGVkIGFzIFwiaW5kZXhcIicpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGFzIFwidmFsdWVcIicpO1xuICAgIH0gLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hbWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCkgPyB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCkgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QubmFtZSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFzc2lnbiBhIG5ldyBuYW1lLCBuYW1lIGlzIHJlYWQtb25seScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQXNzaWdubWVudE5vZGUnO1xuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuaXNBc3NpZ25tZW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsT2JqZWN0ID0gdGhpcy5vYmplY3QuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxJbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSA6IG51bGw7XG5cbiAgICB2YXIgZXZhbFZhbHVlID0gdGhpcy52YWx1ZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMub2JqZWN0Lm5hbWU7XG5cbiAgICBpZiAoIXRoaXMuaW5kZXgpIHtcbiAgICAgIC8vIGFwcGx5IGEgdmFyaWFibGUgdG8gdGhlIHNjb3BlLCBmb3IgZXhhbXBsZSBgYT0yYFxuICAgICAgaWYgKCEoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5vYmplY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbE5vZGUgZXhwZWN0ZWQgYXMgb2JqZWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHNjb3BlLCBuYW1lLCBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgLy8gYXBwbHkgYW4gb2JqZWN0IHByb3BlcnR5IGZvciBleGFtcGxlIGBhLmI9MmBcbiAgICAgIHZhciBwcm9wID0gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciB2YWx1ZSA9IGV2YWxWYWx1ZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShvYmplY3QsIHByb3AsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5vYmplY3QpKSB7XG4gICAgICAvLyB1cGRhdGUgYSBtYXRyaXggc3Vic2V0LCBmb3IgZXhhbXBsZSBgYVsyXT0zYFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBldmFsT2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIHZhbHVlID0gZXZhbFZhbHVlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBjaGlsZE9iamVjdCk7IC8vIEltcG9ydGFudDogIHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgKDAsIF9jdXN0b21zLnNldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUsIGFzc2lnbihjaGlsZE9iamVjdCwgaW5kZXgsIHZhbHVlKSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlzQWNjZXNzb3JOb2RlKG5vZGUub2JqZWN0KSA9PT0gdHJ1ZVxuICAgICAgLy8gdXBkYXRlIGEgbWF0cml4IHN1YnNldCwgZm9yIGV4YW1wbGUgYGEuYlsyXT0zYFxuICAgICAgLy8gd2Ugd2lsbCBub3QgdXNlIHRoZSBjb21waWxlIGZ1bmN0aW9uIG9mIHRoZSBBY2Nlc3Nvck5vZGUsIGJ1dCBjb21waWxlIGl0XG4gICAgICAvLyBvdXJzZWx2ZXMgaGVyZSBhcyB3ZSBuZWVkIHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBBY2Nlc3Nvck5vZGU6XG4gICAgICAvLyB3ZWUgbmVlZCB0byBhcHBseSB0aGUgdXBkYXRlZCBvYmplY3QgdG8gcGFyZW50IG9iamVjdFxuICAgICAgdmFyIGV2YWxQYXJlbnRPYmplY3QgPSB0aGlzLm9iamVjdC5vYmplY3QuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICBpZiAodGhpcy5vYmplY3QuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKSB7XG4gICAgICAgIHZhciBwYXJlbnRQcm9wID0gdGhpcy5vYmplY3QuaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShwYXJlbnQsIHBhcmVudFByb3ApO1xuICAgICAgICAgIHZhciBpbmRleCA9IGV2YWxJbmRleChzY29wZSwgYXJncywgY2hpbGRPYmplY3QpOyAvLyBJbXBvcnRhbnQ6IHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHBhcmVudCwgcGFyZW50UHJvcCwgYXNzaWduKGNoaWxkT2JqZWN0LCBpbmRleCwgdmFsdWUpKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiBzb21lIHBhcmFtZXRlcnMgdXNlIHRoZSAnZW5kJyBwYXJhbWV0ZXIsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzaXplXG4gICAgICAgIHZhciBldmFsUGFyZW50SW5kZXggPSB0aGlzLm9iamVjdC5pbmRleC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgcGFyZW50SW5kZXggPSBldmFsUGFyZW50SW5kZXgoc2NvcGUsIGFyZ3MsIHBhcmVudCk7IC8vIEltcG9ydGFudDogd2UgcGFzcyBwYXJlbnQgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBhY2Nlc3MocGFyZW50LCBwYXJlbnRJbmRleCk7XG4gICAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBjaGlsZE9iamVjdCk7IC8vIEltcG9ydGFudDogIHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAgIGFzc2lnbihwYXJlbnQsIHBhcmVudEluZGV4LCBhc3NpZ24oY2hpbGRPYmplY3QsIGluZGV4LCB2YWx1ZSkpO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpO1xuXG4gICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuaW5kZXgsICdpbmRleCcsIHRoaXMpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHRoaXMudmFsdWUsICd2YWx1ZScsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFzc2lnbm1lbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBc3NpZ25tZW50Tm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpKTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcykpIDogbnVsbDtcblxuICAgIHZhciB2YWx1ZSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnZhbHVlLCAndmFsdWUnLCB0aGlzKSk7XG5cbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQXNzaWdubWVudE5vZGUodGhpcy5vYmplY3QsIHRoaXMuaW5kZXgsIHRoaXMudmFsdWUpO1xuICB9O1xuICAvKlxuICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/XG4gICAqIEBwYXJhbSB7bm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmVudGhlc2lzPSdrZWVwJ11cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgICBpZiAoIXBhcmVudGhlc2lzKSB7XG4gICAgICBwYXJlbnRoZXNpcyA9ICdrZWVwJztcbiAgICB9XG5cbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnZhbHVlLCBwYXJlbnRoZXNpcyk7XG4gICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBleHByUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBleHByUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9TdHJpbmcob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9ICcoJyArIHZhbHVlICsgJyknO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICcgPSAnICsgdmFsdWU7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQXNzaWdubWVudE5vZGUnLFxuICAgICAgb2JqZWN0OiB0aGlzLm9iamVjdCxcbiAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFzc2lnbm1lbnROb2RlXCIsIG9iamVjdDogLi4uLCBpbmRleDogLi4uLCB2YWx1ZTogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Fzc2lnbm1lbnROb2RlfVxuICAgKi9cblxuXG4gIEFzc2lnbm1lbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKGpzb24ub2JqZWN0LCBqc29uLmluZGV4LCBqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9IVE1MKG9wdGlvbnMpO1xuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4LnRvSFRNTChvcHRpb25zKSA6ICcnO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9ICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHZhbHVlICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJhbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtdmFyaWFibGUtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvclwiPj08L3NwYW4+JyArIHZhbHVlO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9UZXgob3B0aW9ucyk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9UZXgob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KHZhbHVlLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIGluZGV4ICsgJzo9JyArIHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBBc3NpZ25tZW50Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXNzaWdubWVudE5vZGUgPSBjcmVhdGVBc3NpZ25tZW50Tm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmxvY2tOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnQmxvY2tOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ1Jlc3VsdFNldCcsICdOb2RlJ107XG52YXIgY3JlYXRlQmxvY2tOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIFJlc3VsdFNldCA9IF9yZWYuUmVzdWx0U2V0LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEJsb2NrTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogSG9sZHMgYSBzZXQgd2l0aCBibG9ja3NcbiAgICogQHBhcmFtIHtBcnJheS48e25vZGU6IE5vZGV9IHwge25vZGU6IE5vZGUsIHZpc2libGU6IGJvb2xlYW59Pn0gYmxvY2tzXG4gICAqICAgICAgICAgICAgQW4gYXJyYXkgd2l0aCBibG9ja3MsIHdoZXJlIGEgYmxvY2sgaXMgY29uc3RydWN0ZWQgYXMgYW4gT2JqZWN0XG4gICAqICAgICAgICAgICAgd2l0aCBwcm9wZXJ0aWVzIGJsb2NrLCB3aGljaCBpcyBhIE5vZGUsIGFuZCB2aXNpYmxlLCB3aGljaCBpc1xuICAgKiAgICAgICAgICAgIGEgYm9vbGVhbi4gVGhlIHByb3BlcnR5IHZpc2libGUgaXMgb3B0aW9uYWwgYW5kIGlzIHRydWUgYnkgZGVmYXVsdFxuICAgKi9cbiAgZnVuY3Rpb24gQmxvY2tOb2RlKGJsb2Nrcykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCbG9ja05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXQsIGNvcHkgYmxvY2tzXG5cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShibG9ja3MpKSB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgdGhpcy5ibG9ja3MgPSBibG9ja3MubWFwKGZ1bmN0aW9uIChibG9jaykge1xuICAgICAgdmFyIG5vZGUgPSBibG9jayAmJiBibG9jay5ub2RlO1xuICAgICAgdmFyIHZpc2libGUgPSBibG9jayAmJiBibG9jay52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBibG9jay52aXNpYmxlIDogdHJ1ZTtcbiAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKG5vZGUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcIm5vZGVcIiBtdXN0IGJlIGEgTm9kZScpO1xuICAgICAgaWYgKHR5cGVvZiB2aXNpYmxlICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3BlcnR5IFwidmlzaWJsZVwiIG11c3QgYmUgYSBib29sZWFuJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICB2aXNpYmxlOiB2aXNpYmxlXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudHlwZSA9ICdCbG9ja05vZGUnO1xuICBCbG9ja05vZGUucHJvdG90eXBlLmlzQmxvY2tOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsQmxvY2tzID0gKDAsIF9hcnJheS5tYXApKHRoaXMuYmxvY2tzLCBmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV2YWx1YXRlOiBibG9jay5ub2RlLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSxcbiAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEJsb2NrTm9kZXMoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAoMCwgX2FycmF5LmZvckVhY2gpKGV2YWxCbG9ja3MsIGZ1bmN0aW9uIGV2YWxCbG9ja05vZGUoYmxvY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGJsb2NrLmV2YWx1YXRlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoYmxvY2sudmlzaWJsZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUmVzdWx0U2V0KHJlc3VsdHMpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIGJsb2NrcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ibG9ja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuYmxvY2tzW2ldLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEJsb2NrTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGJsb2NrcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGJsb2NrID0gdGhpcy5ibG9ja3NbaV07XG5cbiAgICAgIHZhciBub2RlID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKGJsb2NrLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcykpO1xuXG4gICAgICBibG9ja3NbaV0gPSB7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QmxvY2tOb2RlfVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGU6IGJsb2NrLm5vZGUsXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b1N0cmluZyhvcHRpb25zKSArIChwYXJhbS52aXNpYmxlID8gJycgOiAnOycpO1xuICAgIH0pLmpvaW4oJ1xcbicpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdCbG9ja05vZGUnLFxuICAgICAgYmxvY2tzOiB0aGlzLmJsb2Nrc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBCbG9ja05vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkJsb2NrTm9kZVwiLCBibG9ja3M6IFt7bm9kZTogLi4uLCB2aXNpYmxlOiBmYWxzZX0sIC4uLl19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoanNvbi5ibG9ja3MpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b0hUTUwob3B0aW9ucykgKyAocGFyYW0udmlzaWJsZSA/ICcnIDogJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj47PC9zcGFuPicpO1xuICAgIH0pLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj48YnIgLz48L3NwYW4+Jyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBCbG9ja05vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbS5ub2RlLnRvVGV4KG9wdGlvbnMpICsgKHBhcmFtLnZpc2libGUgPyAnJyA6ICc7Jyk7XG4gICAgfSkuam9pbignXFxcXDtcXFxcO1xcbicpO1xuICB9O1xuXG4gIHJldHVybiBCbG9ja05vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJsb2NrTm9kZSA9IGNyZWF0ZUJsb2NrTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uZGl0aW9uYWxOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgbmFtZSA9ICdDb25kaXRpb25hbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIGxhenkgZXZhbHVhdGluZyBjb25kaXRpb25hbCBvcGVyYXRvcjogJ2NvbmRpdGlvbiA/IHRydWVFeHByIDogZmFsc2VFeHByJ1xuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IGNvbmRpdGlvbiAgIENvbmRpdGlvbiwgbXVzdCByZXN1bHQgaW4gYSBib29sZWFuXG4gICAqIEBwYXJhbSB7Tm9kZX0gdHJ1ZUV4cHIgICAgRXhwcmVzc2lvbiBldmFsdWF0ZWQgd2hlbiBjb25kaXRpb24gaXMgdHJ1ZVxuICAgKiBAcGFyYW0ge05vZGV9IGZhbHNlRXhwciAgIEV4cHJlc3Npb24gZXZhbHVhdGVkIHdoZW4gY29uZGl0aW9uIGlzIHRydWVcbiAgICpcbiAgICogQGNvbnN0cnVjdG9yIENvbmRpdGlvbmFsTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29uZGl0aW9uYWxOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShjb25kaXRpb24pKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgY29uZGl0aW9uIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkodHJ1ZUV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgdHJ1ZUV4cHIgbXVzdCBiZSBhIE5vZGUnKTtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShmYWxzZUV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgZmFsc2VFeHByIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgdGhpcy50cnVlRXhwciA9IHRydWVFeHByO1xuICAgIHRoaXMuZmFsc2VFeHByID0gZmFsc2VFeHByO1xuICB9XG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudHlwZSA9ICdDb25kaXRpb25hbE5vZGUnO1xuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLmlzQ29uZGl0aW9uYWxOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsQ29uZGl0aW9uID0gdGhpcy5jb25kaXRpb24uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxUcnVlRXhwciA9IHRoaXMudHJ1ZUV4cHIuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxGYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbENvbmRpdGlvbmFsTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgcmV0dXJuIHRlc3RDb25kaXRpb24oZXZhbENvbmRpdGlvbihzY29wZSwgYXJncywgY29udGV4dCkpID8gZXZhbFRydWVFeHByKHNjb3BlLCBhcmdzLCBjb250ZXh0KSA6IGV2YWxGYWxzZUV4cHIoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5jb25kaXRpb24sICdjb25kaXRpb24nLCB0aGlzKTtcbiAgICBjYWxsYmFjayh0aGlzLnRydWVFeHByLCAndHJ1ZUV4cHInLCB0aGlzKTtcbiAgICBjYWxsYmFjayh0aGlzLmZhbHNlRXhwciwgJ2ZhbHNlRXhwcicsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENvbmRpdGlvbmFsTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7Q29uZGl0aW9uYWxOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbE5vZGUodGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuY29uZGl0aW9uLCAnY29uZGl0aW9uJywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy50cnVlRXhwciwgJ3RydWVFeHByJywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5mYWxzZUV4cHIsICdmYWxzZUV4cHInLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtDb25kaXRpb25hbE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbiwgdGhpcy50cnVlRXhwciwgdGhpcy5mYWxzZUV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGVcbiAgICAvLyBvciBoYXZlIGxvd2VyIG9yIGVxdWFsIHByZWNlZGVuY2VcbiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvblxuICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eVxuXG4gICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciBjb25kaXRpb25QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5jb25kaXRpb24sIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5jb25kaXRpb24udHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgY29uZGl0aW9uUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBjb25kaXRpb25QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgIGNvbmRpdGlvbiA9ICcoJyArIGNvbmRpdGlvbiArICcpJztcbiAgICB9XG5cbiAgICB2YXIgdHJ1ZUV4cHIgPSB0aGlzLnRydWVFeHByLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciB0cnVlUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMudHJ1ZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy50cnVlRXhwci50eXBlID09PSAnT3BlcmF0b3JOb2RlJyB8fCB0cnVlUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiB0cnVlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICB0cnVlRXhwciA9ICcoJyArIHRydWVFeHByICsgJyknO1xuICAgIH1cblxuICAgIHZhciBmYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci50b1N0cmluZyhvcHRpb25zKTtcbiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBmYWxzZUV4cHIgPSAnKCcgKyBmYWxzZUV4cHIgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbiArICcgPyAnICsgdHJ1ZUV4cHIgKyAnIDogJyArIGZhbHNlRXhwcjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQ29uZGl0aW9uYWxOb2RlJyxcbiAgICAgIGNvbmRpdGlvbjogdGhpcy5jb25kaXRpb24sXG4gICAgICB0cnVlRXhwcjogdGhpcy50cnVlRXhwcixcbiAgICAgIGZhbHNlRXhwcjogdGhpcy5mYWxzZUV4cHJcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQ29uZGl0aW9uYWxOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDb25kaXRpb25hbE5vZGVcIiwgXCJjb25kaXRpb25cIjogLi4uLCBcInRydWVFeHByXCI6IC4uLiwgXCJmYWxzZUV4cHJcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0NvbmRpdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxOb2RlKGpzb24uY29uZGl0aW9uLCBqc29uLnRydWVFeHByLCBqc29uLmZhbHNlRXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGVcbiAgICAvLyBvciBoYXZlIGxvd2VyIG9yIGVxdWFsIHByZWNlZGVuY2VcbiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvblxuICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eVxuXG4gICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgY29uZGl0aW9uUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMuY29uZGl0aW9uLCBwYXJlbnRoZXNpcyk7XG5cbiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMuY29uZGl0aW9uLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IGNvbmRpdGlvblByZWNlZGVuY2UgIT09IG51bGwgJiYgY29uZGl0aW9uUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBjb25kaXRpb24gPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBjb25kaXRpb24gKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgdmFyIHRydWVFeHByID0gdGhpcy50cnVlRXhwci50b0hUTUwob3B0aW9ucyk7XG4gICAgdmFyIHRydWVQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy50cnVlRXhwciwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCB0aGlzLnRydWVFeHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IHRydWVQcmVjZWRlbmNlICE9PSBudWxsICYmIHRydWVQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgIHRydWVFeHByID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgdHJ1ZUV4cHIgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgdmFyIGZhbHNlRXhwciA9IHRoaXMuZmFsc2VFeHByLnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBmYWxzZUV4cHIgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBmYWxzZUV4cHIgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbiArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1jb25kaXRpb25hbC1vcGVyYXRvclwiPj88L3NwYW4+JyArIHRydWVFeHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWNvbmRpdGlvbmFsLW9wZXJhdG9yXCI+Ojwvc3Bhbj4nICsgZmFsc2VFeHByO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiAnXFxcXGJlZ2lue2Nhc2VzfSB7JyArIHRoaXMudHJ1ZUV4cHIudG9UZXgob3B0aW9ucykgKyAnfSwgJlxcXFxxdWFke1xcXFx0ZXh0e2lmIH1cXFxcOycgKyB0aGlzLmNvbmRpdGlvbi50b1RleChvcHRpb25zKSArICd9XFxcXFxcXFx7JyArIHRoaXMuZmFsc2VFeHByLnRvVGV4KG9wdGlvbnMpICsgJ30sICZcXFxccXVhZHtcXFxcdGV4dHtvdGhlcndpc2V9fVxcXFxlbmR7Y2FzZXN9JztcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGNvbmRpdGlvbiBpcyBtZXRcbiAgICogQHBhcmFtIHsqfSBjb25kaXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgY29uZGl0aW9uIGlzIHRydWUgb3Igbm9uLXplcm8sIGVsc2UgZmFsc2VcbiAgICovXG5cblxuICBmdW5jdGlvbiB0ZXN0Q29uZGl0aW9uKGNvbmRpdGlvbikge1xuICAgIGlmICh0eXBlb2YgY29uZGl0aW9uID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgY29uZGl0aW9uID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmRpdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAhIWNvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoY29uZGl0aW9uKSkge1xuICAgICAgICByZXR1cm4gIWNvbmRpdGlvbi5pc1plcm8oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNDb21wbGV4KShjb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiAhIShjb25kaXRpb24ucmUgfHwgY29uZGl0aW9uLmltKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNVbml0KShjb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiAhIWNvbmRpdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBvZiBjb25kaXRpb24gXCInICsgKDAsIF9pcy50eXBlT2YpKGNvbmRpdGlvbikgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiBDb25kaXRpb25hbE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IGNyZWF0ZUNvbmRpdGlvbmFsTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uc3RhbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdDb25zdGFudE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUNvbnN0YW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIENvbnN0YW50Tm9kZSBob2xkcyBhIGNvbnN0YW50IHZhbHVlIGxpa2UgYSBudW1iZXIgb3Igc3RyaW5nLlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgIG5ldyBDb25zdGFudE5vZGUoMi4zKVxuICAgKiAgICAgbmV3IENvbnN0YW50Tm9kZSgnaGVsbG8nKVxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlICAgIFZhbHVlIGNhbiBiZSBhbnkgdHlwZSAobnVtYmVyLCBCaWdOdW1iZXIsIHN0cmluZywgLi4uKVxuICAgKiBAY29uc3RydWN0b3IgQ29uc3RhbnROb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cbiAgZnVuY3Rpb24gQ29uc3RhbnROb2RlKHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGlvbiBlcnJvciBzb21lIGRheSAoY3JlYXRlZCAyMDE4LTAxLTIzKVxuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCduZXcgQ29uc3RhbnROb2RlKHZhbHVlU3RyLCB2YWx1ZVR5cGUpIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSBzaW5jZSBtYXRoIHY0LjAuMC4gVXNlIG5ldyBDb25zdGFudE5vZGUodmFsdWUpIGluc3RlYWQsIHdoZXJlIHZhbHVlIGlzIGEgbm9uLXN0cmluZ2lmaWVkIHZhbHVlLicpO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBDb25zdGFudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQ29uc3RhbnROb2RlJztcbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5pc0NvbnN0YW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsQ29uc3RhbnROb2RlKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7fSAvLyBub3RoaW5nIHRvIGRvLCB3ZSBkb24ndCBoYXZlIGNoaWxkc1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQ29uc3RhbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7Q29uc3RhbnROb2RlfSBSZXR1cm5zIGEgY2xvbmUgb2YgdGhlIG5vZGVcbiAgICovXG4gIDtcblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZX1cbiAgICovXG5cblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKHRoaXMudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLnZhbHVlLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuX3RvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgc3dpdGNoICgoMCwgX2lzLnR5cGVPZikodGhpcy52YWx1ZSkpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdCaWdOdW1iZXInOlxuICAgICAgY2FzZSAnRnJhY3Rpb24nOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1udW1iZXJcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN0cmluZ1wiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLWJvb2xlYW5cIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1udWxsLXN5bWJvbFwiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtdW5kZWZpbmVkXCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2xcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdDb25zdGFudE5vZGUnLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBDb25zdGFudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlN5bWJvbE5vZGVcIiwgdmFsdWU6IDIuM31gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLl90b1N0cmluZyhvcHRpb25zKTtcblxuICAgIHN3aXRjaCAoKDAsIF9pcy50eXBlT2YpKHRoaXMudmFsdWUpKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gJ1xcXFxtYXRodHR7JyArICgwLCBfbGF0ZXguZXNjYXBlTGF0ZXgpKHZhbHVlKSArICd9JztcblxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ0JpZ051bWJlcic6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIWlzRmluaXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS52YWx1ZU9mKCkgPCAwID8gJy1cXFxcaW5mdHknIDogJ1xcXFxpbmZ0eSc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZGV4ID0gdmFsdWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdlJyk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KSArICdcXFxcY2RvdDEwXnsnICsgdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSkgKyAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgICAgY2FzZSAnRnJhY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b0xhdGV4KCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENvbnN0YW50Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uc3RhbnROb2RlID0gY3JlYXRlQ29uc3RhbnROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZShcIi4uL2tleXdvcmRzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ05vZGUnXTtcbnZhciBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBGdW5jdGlvbkFzc2lnbm1lbnROb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBGdW5jdGlvbiBhc3NpZ25tZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICBGdW5jdGlvbiBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBBcnJheS48e25hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nfT59IHBhcmFtc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkgd2l0aCBmdW5jdGlvbiBwYXJhbWV0ZXIgbmFtZXMsIG9yIGFuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSB3aXRoIG9iamVjdHMgY29udGFpbmluZyB0aGUgbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHR5cGUgb2YgdGhlIHBhcmFtZXRlclxuICAgKiBAcGFyYW0ge05vZGV9IGV4cHIgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICovXG4gIGZ1bmN0aW9uIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUobmFtZSwgcGFyYW1zLCBleHByKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJuYW1lXCInKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBzdHJpbmdzIG9yIG9iamVjdHMgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcInBhcmFtc1wiJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoZXhwcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImV4cHJcIicpO1xuICAgIGlmIChuYW1lIGluIF9rZXl3b3Jkcy5rZXl3b3JkcykgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGZ1bmN0aW9uIG5hbWUsIFwiJyArIG5hbWUgKyAnXCIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0gJiYgcGFyYW0ubmFtZSB8fCBwYXJhbTtcbiAgICB9KTtcbiAgICB0aGlzLnR5cGVzID0gcGFyYW1zLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbSAmJiBwYXJhbS50eXBlIHx8ICdhbnknO1xuICAgIH0pO1xuICAgIHRoaXMuZXhwciA9IGV4cHI7XG4gIH1cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSc7XG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGNoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcbiAgICAoMCwgX2FycmF5LmZvckVhY2gpKHRoaXMucGFyYW1zLCBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIGNoaWxkQXJnTmFtZXNbcGFyYW1dID0gdHJ1ZTtcbiAgICB9KTsgLy8gY29tcGlsZSB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aXRoIHRoZSBjaGlsZCBhcmdzXG5cbiAgICB2YXIgZXZhbEV4cHIgPSB0aGlzLmV4cHIuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcbiAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXM7XG4gICAgdmFyIHNpZ25hdHVyZSA9ICgwLCBfYXJyYXkuam9pbikodGhpcy50eXBlcywgJywnKTtcbiAgICB2YXIgc3ludGF4ID0gbmFtZSArICcoJyArICgwLCBfYXJyYXkuam9pbikodGhpcy5wYXJhbXMsICcsICcpICsgJyknO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgdmFyIHNpZ25hdHVyZXMgPSB7fTtcblxuICAgICAgc2lnbmF0dXJlc1tzaWduYXR1cmVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGRBcmdzID0gT2JqZWN0LmNyZWF0ZShhcmdzKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNoaWxkQXJnc1twYXJhbXNbaV1dID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV2YWxFeHByKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGZuID0gdHlwZWQobmFtZSwgc2lnbmF0dXJlcyk7XG4gICAgICBmbi5zeW50YXggPSBzeW50YXg7XG4gICAgICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSwgZm4pO1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuZXhwciwgJ2V4cHInLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbkFzc2lnbm1lbnROb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBleHByID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZXhwciwgJ2V4cHInLCB0aGlzKSk7XG5cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUodGhpcy5uYW1lLCB0aGlzLnBhcmFtcy5zbGljZSgwKSwgZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHRoaXMubmFtZSwgdGhpcy5wYXJhbXMuc2xpY2UoMCksIHRoaXMuZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50aGVzaXNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLmV4cHIsIHBhcmVudGhlc2lzKTtcbiAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IGV4cHJQcmVjZWRlbmNlICE9PSBudWxsICYmIGV4cHJQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2U7XG4gIH1cbiAgLyoqXG4gICAqIGdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGV4cHIgPSB0aGlzLmV4cHIudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMsIHBhcmVudGhlc2lzKSkge1xuICAgICAgZXhwciA9ICcoJyArIGV4cHIgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubmFtZSArICcoJyArIHRoaXMucGFyYW1zLmpvaW4oJywgJykgKyAnKSA9ICcgKyBleHByO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdHlwZXMgPSB0aGlzLnR5cGVzO1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJyxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBhcmFtczogdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwYXJhbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBwYXJhbSxcbiAgICAgICAgICB0eXBlOiB0eXBlc1tpbmRleF1cbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgZXhwcjogdGhpcy5leHByXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkZ1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwgbmFtZTogLi4uLCBwYXJhbXM6IC4uLiwgZXhwcjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKGpzb24ubmFtZSwganNvbi5wYXJhbXMsIGpzb24uZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBnZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYXJhbXMucHVzaCgnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXBhcmFtZXRlclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMucGFyYW1zW2ldKSArICc8L3NwYW4+Jyk7XG4gICAgfVxuXG4gICAgdmFyIGV4cHIgPSB0aGlzLmV4cHIudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBleHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLWZ1bmN0aW9uXCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5uYW1lKSArICc8L3NwYW4+JyArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHBhcmFtcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+PHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLXZhcmlhYmxlLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3JcIj49PC9zcGFuPicgKyBleHByO1xuICB9O1xuICAvKipcbiAgICogZ2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBleHByID0gdGhpcy5leHByLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChleHByLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyB0aGlzLm5hbWUgKyAnfVxcXFxsZWZ0KCcgKyB0aGlzLnBhcmFtcy5tYXAoX2xhdGV4LnRvU3ltYm9sKS5qb2luKCcsJykgKyAnXFxcXHJpZ2h0KTo9JyArIGV4cHI7XG4gIH07XG5cbiAgcmV0dXJuIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbk5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAnRnVuY3Rpb25Ob2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ21hdGgnLCAnTm9kZScsICdTeW1ib2xOb2RlJ107XG52YXIgY3JlYXRlRnVuY3Rpb25Ob2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEZ1bmN0aW9uTm9kZVxuICAgKiBAZXh0ZW5kcyB7Li9Ob2RlfVxuICAgKiBpbnZva2UgYSBsaXN0IHdpdGggYXJndW1lbnRzIG9uIGEgbm9kZVxuICAgKiBAcGFyYW0gey4vTm9kZSB8IHN0cmluZ30gZm4gTm9kZSByZXNvbHZpbmcgd2l0aCBhIGZ1bmN0aW9uIG9uIHdoaWNoIHRvIGludm9rZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFyZ3VtZW50cywgdHlwaWNhbGx5IGEgU3ltYm9Ob2RlIG9yIEFjY2Vzc29yTm9kZVxuICAgKiBAcGFyYW0gey4vTm9kZVtdfSBhcmdzXG4gICAqL1xuICBmdW5jdGlvbiBGdW5jdGlvbk5vZGUoZm4sIGFyZ3MpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnc3RyaW5nJykge1xuICAgICAgZm4gPSBuZXcgU3ltYm9sTm9kZShmbik7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShmbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgYXMgcGFyYW1ldGVyIFwiZm5cIicpO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpIHx8ICFhcmdzLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJhcmdzXCInKTtcbiAgICB9XG5cbiAgICB0aGlzLmZuID0gZm47XG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZuLm5hbWUgfHwgJyc7XG4gICAgICB9LmJpbmQodGhpcyksXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIGEgbmV3IG5hbWUsIG5hbWUgaXMgcmVhZC1vbmx5Jyk7XG4gICAgICB9XG4gICAgfSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjMsIHJlbW92ZSBzb21lIGRheVxuXG4gICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgRnVuY3Rpb25Ob2RlLm9iamVjdGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBGdW5jdGlvbk5vZGUuZm5gIGluc3RlYWQnKTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdvYmplY3QnLCB7XG4gICAgICBnZXQ6IGRlcHJlY2F0ZWQsXG4gICAgICBzZXQ6IGRlcHJlY2F0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Ob2RlJztcbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5pc0Z1bmN0aW9uTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdmFsaWQgRnVuY3Rpb25Ob2RlJyk7XG4gICAgfSAvLyBjb21waWxlIGFyZ3VtZW50c1xuXG5cbiAgICB2YXIgZXZhbEFyZ3MgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcblxuICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5mbikpIHtcbiAgICAgIC8vIHdlIGNhbiBzdGF0aWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBoYXMgYW4gcmF3QXJncyBwcm9wZXJ0eVxuICAgICAgdmFyIF9uYW1lID0gdGhpcy5mbi5uYW1lO1xuICAgICAgdmFyIGZuID0gX25hbWUgaW4gbWF0aCA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsIF9uYW1lKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBpc1JhdyA9IHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiBmbi5yYXdBcmdzID09PSB0cnVlO1xuXG4gICAgICBpZiAoaXNSYXcpIHtcbiAgICAgICAgLy8gcGFzcyB1bmV2YWx1YXRlZCBwYXJhbWV0ZXJzIChub2RlcykgdG8gdGhlIGZ1bmN0aW9uXG4gICAgICAgIC8vIFwicmF3XCIgZXZhbHVhdGlvblxuICAgICAgICB2YXIgcmF3QXJncyA9IHRoaXMuYXJncztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShyYXdBcmdzLCBtYXRoLCBfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwicmVndWxhclwiIGV2YWx1YXRpb25cbiAgICAgICAgaWYgKGV2YWxBcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShldmFsQXJnMChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdmFyIF9ldmFsQXJnID0gZXZhbEFyZ3NbMF07XG4gICAgICAgICAgdmFyIGV2YWxBcmcxID0gZXZhbEFyZ3NbMV07XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAoX25hbWUgaW4gc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShzY29wZSwgX25hbWUpIDogZm4pKF9ldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEFyZzEoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKS5hcHBseShudWxsLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKSh0aGlzLmZuKSAmJiAoMCwgX2lzLmlzSW5kZXhOb2RlKSh0aGlzLmZuLmluZGV4KSAmJiB0aGlzLmZuLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgLy8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgY29udGV4dDogdGhlIG9iamVjdCBvZiB0aGUgQWNjZXNzb3JOb2RlXG4gICAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMuZm4ub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgdmFyIHByb3AgPSB0aGlzLmZuLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICB2YXIgX3Jhd0FyZ3MgPSB0aGlzLmFyZ3M7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgICgwLCBfY3VzdG9tcy52YWxpZGF0ZVNhZmVNZXRob2QpKG9iamVjdCwgcHJvcCk7XG4gICAgICAgIHZhciBpc1JhdyA9IG9iamVjdFtwcm9wXSAmJiBvYmplY3RbcHJvcF0ucmF3QXJncztcbiAgICAgICAgcmV0dXJuIGlzUmF3ID8gb2JqZWN0W3Byb3BdKF9yYXdBcmdzLCBtYXRoLCBfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKSAvLyBcInJhd1wiIGV2YWx1YXRpb25cbiAgICAgICAgOiBvYmplY3RbcHJvcF0uYXBwbHkob2JqZWN0LCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgLy8gXCJyZWd1bGFyXCIgZXZhbHVhdGlvblxuICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm9kZS5mbi5pc0FjY2Vzc29yTm9kZSAmJiAhbm9kZS5mbi5pbmRleC5pc09iamVjdFByb3BlcnR5KClcbiAgICAgIC8vIHdlIGhhdmUgdG8gZHluYW1pY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGhhcyBhIHJhd0FyZ3MgcHJvcGVydHlcbiAgICAgIHZhciBldmFsRm4gPSB0aGlzLmZuLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgdmFyIF9yYXdBcmdzMiA9IHRoaXMuYXJncztcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBmbiA9IGV2YWxGbihzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciBpc1JhdyA9IGZuICYmIGZuLnJhd0FyZ3M7XG4gICAgICAgIHJldHVybiBpc1JhdyA/IGZuKF9yYXdBcmdzMiwgbWF0aCwgX2V4dGVuZHMoe30sIHNjb3BlLCBhcmdzKSkgLy8gXCJyYXdcIiBldmFsdWF0aW9uXG4gICAgICAgIDogZm4uYXBwbHkoZm4sICgwLCBfYXJyYXkubWFwKShldmFsQXJncywgZnVuY3Rpb24gKGV2YWxBcmcpIHtcbiAgICAgICAgICAvLyBcInJlZ3VsYXJcIiBldmFsdWF0aW9uXG4gICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLmZuLCAnZm4nLCB0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWxsYmFjayh0aGlzLmFyZ3NbaV0sICdhcmdzWycgKyBpICsgJ10nLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRnVuY3Rpb25Ob2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbk5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgZm4gPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5mbiwgJ2ZuJywgdGhpcykpO1xuXG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShmbiwgYXJncyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Z1bmN0aW9uTm9kZX1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKHRoaXMuZm4sIHRoaXMuYXJncy5zbGljZSgwKSk7XG4gIH07IC8vIGJhY2t1cCBOb2RlJ3MgdG9TdHJpbmcgZnVuY3Rpb25cbiAgLy8gQHByaXZhdGVcblxuXG4gIHZhciBub2RlVG9TdHJpbmcgPSBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvU3RyaW5nO1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqIFRoaXMgb3ZlcnJpZGVzIHBhcnRzIG9mIE5vZGUncyB0b1N0cmluZyBmdW5jdGlvbi5cbiAgICogSWYgY2FsbGJhY2sgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgY2FsbGJhY2tzLCBpdFxuICAgKiBjYWxscyB0aGUgY29ycmVjdCBjYWxsYmFjayBmb3IgdGhlIGN1cnJlbnQgbm9kZSxcbiAgICogb3RoZXJ3aXNlIGl0IGZhbGxzIGJhY2sgdG8gY2FsbGluZyBOb2RlJ3MgdG9TdHJpbmdcbiAgICogZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tU3RyaW5nO1xuICAgIHZhciBuYW1lID0gdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSA9PT0gJ29iamVjdCcgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wdGlvbnMuaGFuZGxlciwgbmFtZSkpIHtcbiAgICAgIC8vIGNhbGxiYWNrIGlzIGEgbWFwIG9mIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgICAgY3VzdG9tU3RyaW5nID0gb3B0aW9ucy5oYW5kbGVyW25hbWVdKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVN0cmluZztcbiAgICB9IC8vIGZhbGwgYmFjayB0byBOb2RlJ3MgdG9TdHJpbmdcblxuXG4gICAgcmV0dXJuIG5vZGVUb1N0cmluZy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy50b1N0cmluZyhvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgZm4gPSAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkodGhpcy5mbikgPyAnKCcgKyB0aGlzLmZuLnRvU3RyaW5nKG9wdGlvbnMpICsgJyknIDogdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTsgLy8gZm9ybWF0IHRoZSBhcmd1bWVudHMgbGlrZSBcImFkZCgyLCA0LjIpXCJcblxuICAgIHJldHVybiBmbiArICcoJyArIGFyZ3Muam9pbignLCAnKSArICcpJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRnVuY3Rpb25Ob2RlJyxcbiAgICAgIGZuOiB0aGlzLmZuLFxuICAgICAgYXJnczogdGhpcy5hcmdzXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEFzc2lnbm1lbnROb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJGdW5jdGlvbk5vZGVcIiwgZm46IC4uLiwgYXJnczogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Z1bmN0aW9uTm9kZX1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKGpzb24uZm4sIGpzb24uYXJncyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy50b0hUTUwob3B0aW9ucyk7XG4gICAgfSk7IC8vIGZvcm1hdCB0aGUgYXJndW1lbnRzIGxpa2UgXCJhZGQoMiwgNC4yKVwiXG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZm4pICsgJzwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIGFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLXNlcGFyYXRvclwiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gIH07XG4gIC8qXG4gICAqIEV4cGFuZCBhIExhVGVYIHRlbXBsYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHByaXZhdGVcbiAgICoqL1xuXG5cbiAgZnVuY3Rpb24gZXhwYW5kVGVtcGxhdGUodGVtcGxhdGUsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGF0ZXggPSAnJzsgLy8gTWF0Y2ggZXZlcnl0aGluZyBvZiB0aGUgZm9ybSAke2lkZW50aWZpZXJ9IG9yICR7aWRlbnRpZmllclsyXX0gb3IgJCRcbiAgICAvLyB3aGlsZSBzdWJtYXRjaGluZyBpZGVudGlmaWVyIGFuZCAyIChpbiB0aGUgc2Vjb25kIGNhc2UpXG5cbiAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdcXFxcJCg/OlxcXFx7KFthLXpfXVthLXpfMC05XSopKD86XFxcXFsoWzAtOV0rKVxcXFxdKT9cXFxcfXxcXFxcJCknLCAnaWcnKTtcbiAgICB2YXIgaW5wdXRQb3MgPSAwOyAvLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyaW5nXG5cbiAgICB2YXIgbWF0Y2g7XG5cbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0ZW1wbGF0ZSkpICE9PSBudWxsKSB7XG4gICAgICAvLyBnbyB0aHJvdWdoIGFsbCBtYXRjaGVzXG4gICAgICAvLyBhZGQgZXZlcnl0aGluZyBpbiBmcm9udCBvZiB0aGUgbWF0Y2ggdG8gdGhlIExhVGVYIHN0cmluZ1xuICAgICAgbGF0ZXggKz0gdGVtcGxhdGUuc3Vic3RyaW5nKGlucHV0UG9zLCBtYXRjaC5pbmRleCk7XG4gICAgICBpbnB1dFBvcyA9IG1hdGNoLmluZGV4O1xuXG4gICAgICBpZiAobWF0Y2hbMF0gPT09ICckJCcpIHtcbiAgICAgICAgLy8gZXNjYXBlZCBkb2xsYXIgc2lnblxuICAgICAgICBsYXRleCArPSAnJCc7XG4gICAgICAgIGlucHV0UG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0ZW1wbGF0ZSBwYXJhbWV0ZXJcbiAgICAgICAgaW5wdXRQb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBub2RlW21hdGNoWzFdXTtcblxuICAgICAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUZW1wbGF0ZTogUHJvcGVydHkgJyArIG1hdGNoWzFdICsgJyBkb2VzIG5vdCBleGlzdC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaFsyXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gbm8gc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgICAgc3dpdGNoIChfdHlwZW9mKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc05vZGUpKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGxhdGV4ICs9IHByb3BlcnR5LnRvVGV4KG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBhcnJheSBvZiBOb2RlcyBpbnRvIGNvbW1hIHNlcGFyYXRlZCBsaXN0XG4gICAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHkubWFwKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc05vZGUpKGFyZykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZy50b1RleChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICdbJyArIGluZGV4ICsgJ10gaXMgbm90IGEgTm9kZS4nKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICcgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICcgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdpdGggc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKShwcm9wZXJ0eVttYXRjaFsyXV0gJiYgcHJvcGVydHlbbWF0Y2hbMl1dKSkge1xuICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHlbbWF0Y2hbMl1dLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUZW1wbGF0ZTogJyArIG1hdGNoWzFdICsgJ1snICsgbWF0Y2hbMl0gKyAnXSBpcyBub3QgYSBOb2RlLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxhdGV4ICs9IHRlbXBsYXRlLnNsaWNlKGlucHV0UG9zKTsgLy8gYXBwZW5kIHJlc3Qgb2YgdGhlIHRlbXBsYXRlXG5cbiAgICByZXR1cm4gbGF0ZXg7XG4gIH0gLy8gYmFja3VwIE5vZGUncyB0b1RleCBmdW5jdGlvblxuICAvLyBAcHJpdmF0ZVxuXG5cbiAgdmFyIG5vZGVUb1RleCA9IEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXg7XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKiBUaGlzIG92ZXJyaWRlcyBwYXJ0cyBvZiBOb2RlJ3MgdG9UZXggZnVuY3Rpb24uXG4gICAqIElmIGNhbGxiYWNrIGlzIGFuIG9iamVjdCBjb250YWluaW5nIGNhbGxiYWNrcywgaXRcbiAgICogY2FsbHMgdGhlIGNvcnJlY3QgY2FsbGJhY2sgZm9yIHRoZSBjdXJyZW50IG5vZGUsXG4gICAqIG90aGVyd2lzZSBpdCBmYWxscyBiYWNrIHRvIGNhbGxpbmcgTm9kZSdzIHRvVGV4XG4gICAqIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBjdXN0b21UZXg7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBfdHlwZW9mKG9wdGlvbnMuaGFuZGxlcikgPT09ICdvYmplY3QnICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcHRpb25zLmhhbmRsZXIsIHRoaXMubmFtZSkpIHtcbiAgICAgIC8vIGNhbGxiYWNrIGlzIGEgbWFwIG9mIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgICAgY3VzdG9tVGV4ID0gb3B0aW9ucy5oYW5kbGVyW3RoaXMubmFtZV0odGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVGV4O1xuICAgIH0gLy8gZmFsbCBiYWNrIHRvIE5vZGUncyB0b1RleFxuXG5cbiAgICByZXR1cm4gbm9kZVRvVGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIC8vIGdldCBMYVRlWCBvZiB0aGUgYXJndW1lbnRzXG4gICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBsYXRleENvbnZlcnRlcjtcblxuICAgIGlmIChfbGF0ZXgubGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXSkge1xuICAgICAgbGF0ZXhDb252ZXJ0ZXIgPSBfbGF0ZXgubGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXTtcbiAgICB9IC8vIHRvVGV4IHByb3BlcnR5IG9uIHRoZSBmdW5jdGlvbiBpdHNlbGZcblxuXG4gICAgaWYgKG1hdGhbdGhpcy5uYW1lXSAmJiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXS50b1RleCA9PT0gJ2Z1bmN0aW9uJyB8fCBfdHlwZW9mKG1hdGhbdGhpcy5uYW1lXS50b1RleCkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBtYXRoW3RoaXMubmFtZV0udG9UZXggPT09ICdzdHJpbmcnKSkge1xuICAgICAgLy8gLnRvVGV4IGlzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgIGxhdGV4Q29udmVydGVyID0gbWF0aFt0aGlzLm5hbWVdLnRvVGV4O1xuICAgIH1cblxuICAgIHZhciBjdXN0b21Ub1RleDtcblxuICAgIHN3aXRjaCAoX3R5cGVvZihsYXRleENvbnZlcnRlcikpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgLy8gYSBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBjdXN0b21Ub1RleCA9IGxhdGV4Q29udmVydGVyKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgLy8gYSB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlciwgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAvLyBhbiBvYmplY3Qgd2l0aCBkaWZmZXJlbnQgXCJjb252ZXJ0ZXJzXCIgZm9yIGRpZmZlcmVudCBudW1iZXJzIG9mIGFyZ3VtZW50c1xuICAgICAgICBzd2l0Y2ggKF90eXBlb2YobGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKSkge1xuICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgIGN1c3RvbVRvVGV4ID0gbGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlclthcmdzLmxlbmd0aF0sIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tVG9UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVG9UZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGFuZFRlbXBsYXRlKF9sYXRleC5kZWZhdWx0VGVtcGxhdGUsIHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGlkZW50aWZpZXIuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSArICc6JyArIHRoaXMubmFtZTtcbiAgfTtcblxuICByZXR1cm4gRnVuY3Rpb25Ob2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbk5vZGUgPSBjcmVhdGVGdW5jdGlvbk5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxudmFyIG5hbWUgPSAnSW5kZXhOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ1JhbmdlJywgJ05vZGUnLCAnc2l6ZSddO1xudmFyIGNyZWF0ZUluZGV4Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBSYW5nZSA9IF9yZWYuUmFuZ2UsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEluZGV4Tm9kZVxuICAgKiBAZXh0ZW5kcyBOb2RlXG4gICAqXG4gICAqIERlc2NyaWJlcyBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBhbiBvYmplY3QgcHJvcGVydHkuXG4gICAqIENhbm5vdCBiZSB1c2VkIG9uIGl0cyBvd24sIG5lZWRzIHRvIGJlIHVzZWQgd2l0aGluIGFuIEFjY2Vzc29yTm9kZSBvclxuICAgKiBBc3NpZ25tZW50Tm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlW119IGRpbWVuc2lvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG90Tm90YXRpb249ZmFsc2VdICBPcHRpb25hbCBwcm9wZXJ0eSBkZXNjcmliaW5nIHdoZXRoZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGluZGV4IHdhcyB3cml0dGVuIHVzaW5nIGRvdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGF0aW9uIGxpa2UgYGEuYmAsIG9yIHVzaW5nIGJyYWNrZXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RhdGlvbiBsaWtlIGBhW1wiYlwiXWAgKGRlZmF1bHQpLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gc3RyaW5naWZ5IGFuIEluZGV4Tm9kZS5cbiAgICovXG4gIGZ1bmN0aW9uIEluZGV4Tm9kZShkaW1lbnNpb25zLCBkb3ROb3RhdGlvbikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmRleE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMuZGltZW5zaW9ucyA9IGRpbWVuc2lvbnM7XG4gICAgdGhpcy5kb3ROb3RhdGlvbiA9IGRvdE5vdGF0aW9uIHx8IGZhbHNlOyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRpbWVuc2lvbnMpIHx8ICFkaW1lbnNpb25zLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJkaW1lbnNpb25zXCInKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kb3ROb3RhdGlvbiAmJiAhdGhpcy5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZG90Tm90YXRpb24gb25seSBhcHBsaWNhYmxlIGZvciBvYmplY3QgcHJvcGVydGllcycpO1xuICAgIH0gLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHNvbWUgZGF5XG5cblxuICAgIHZhciBkZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydHkgYEluZGV4Tm9kZS5vYmplY3RgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgSW5kZXhOb2RlLmZuYCBpbnN0ZWFkJyk7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnb2JqZWN0Jywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBJbmRleE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgSW5kZXhOb2RlLnByb3RvdHlwZS50eXBlID0gJ0luZGV4Tm9kZSc7XG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuaXNJbmRleE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBJbmRleE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIGJpZ251bWJlciAoY3VycmVudGx5IGJpZ251bWJlcnMgYXJlIHNpbGVudGx5XG4gICAgLy8gICAgICAgcmVkdWNlZCB0byBudW1iZXJzIHdoZW4gY2hhbmdpbmcgdGhlIHZhbHVlIHRvIHplcm8tYmFzZWQpXG4gICAgLy8gVE9ETzogT3B0aW1pemF0aW9uOiB3aGVuIHRoZSByYW5nZSB2YWx1ZXMgYXJlIENvbnN0YW50Tm9kZXMsXG4gICAgLy8gICAgICAgd2UgY2FuIGJlZm9yZWhhbmQgcmVzb2x2ZSB0aGUgemVyby1iYXNlZCB2YWx1ZVxuICAgIC8vIG9wdGltaXphdGlvbiBmb3IgYSBzaW1wbGUgb2JqZWN0IHByb3BlcnR5XG4gICAgdmFyIGV2YWxEaW1lbnNpb25zID0gKDAsIF9hcnJheS5tYXApKHRoaXMuZGltZW5zaW9ucywgZnVuY3Rpb24gKHJhbmdlLCBpKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1JhbmdlTm9kZSkocmFuZ2UpKSB7XG4gICAgICAgIGlmIChyYW5nZS5uZWVkc0VuZCgpKSB7XG4gICAgICAgICAgLy8gY3JlYXRlIGEgcmFuZ2UgY29udGFpbmluZyBlbmQgKGxpa2UgJzQ6ZW5kJylcbiAgICAgICAgICB2YXIgY2hpbGRBcmdOYW1lcyA9IE9iamVjdC5jcmVhdGUoYXJnTmFtZXMpO1xuICAgICAgICAgIGNoaWxkQXJnTmFtZXMuZW5kID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBldmFsU3RhcnQgPSByYW5nZS5zdGFydC5fY29tcGlsZShtYXRoLCBjaGlsZEFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBldmFsRW5kID0gcmFuZ2UuZW5kLl9jb21waWxlKG1hdGgsIGNoaWxkQXJnTmFtZXMpO1xuXG4gICAgICAgICAgdmFyIGV2YWxTdGVwID0gcmFuZ2Uuc3RlcCA/IHJhbmdlLnN0ZXAuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcykgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRGltZW5zaW9uKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICB2YXIgcyA9IHNpemUoY29udGV4dCkudmFsdWVPZigpO1xuICAgICAgICAgICAgdmFyIGNoaWxkQXJncyA9IE9iamVjdC5jcmVhdGUoYXJncyk7XG4gICAgICAgICAgICBjaGlsZEFyZ3MuZW5kID0gc1tpXTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShldmFsU3RhcnQoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCksIGV2YWxFbmQoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCksIGV2YWxTdGVwKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNyZWF0ZSByYW5nZVxuICAgICAgICAgIHZhciBfZXZhbFN0YXJ0ID0gcmFuZ2Uuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICAgICAgdmFyIF9ldmFsRW5kID0gcmFuZ2UuZW5kLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBfZXZhbFN0ZXAgPSByYW5nZS5zdGVwID8gcmFuZ2Uuc3RlcC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcykgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShfZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgX2V2YWxFbmQoc2NvcGUsIGFyZ3MsIGNvbnRleHQpLCBfZXZhbFN0ZXAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShyYW5nZSkgJiYgcmFuZ2UubmFtZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgLy8gU3ltYm9sTm9kZSAnZW5kJ1xuICAgICAgICB2YXIgX2NoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcblxuICAgICAgICBfY2hpbGRBcmdOYW1lcy5lbmQgPSB0cnVlO1xuXG4gICAgICAgIHZhciBldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBfY2hpbGRBcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICB2YXIgcyA9IHNpemUoY29udGV4dCkudmFsdWVPZigpO1xuICAgICAgICAgIHZhciBjaGlsZEFyZ3MgPSBPYmplY3QuY3JlYXRlKGFyZ3MpO1xuICAgICAgICAgIGNoaWxkQXJncy5lbmQgPSBzW2ldO1xuICAgICAgICAgIHJldHVybiBldmFsUmFuZ2Uoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb25zdGFudE5vZGVcbiAgICAgICAgdmFyIF9ldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gX2V2YWxSYW5nZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGluZGV4ID0gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkobWF0aCwgJ2luZGV4Jyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxJbmRleE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciBkaW1lbnNpb25zID0gKDAsIF9hcnJheS5tYXApKGV2YWxEaW1lbnNpb25zLCBmdW5jdGlvbiAoZXZhbERpbWVuc2lvbikge1xuICAgICAgICByZXR1cm4gZXZhbERpbWVuc2lvbihzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleC5hcHBseSh2b2lkIDAsIF90b0NvbnN1bWFibGVBcnJheShkaW1lbnNpb25zKSk7XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5kaW1lbnNpb25zW2ldLCAnZGltZW5zaW9uc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEluZGV4Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7SW5kZXhOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGRpbWVuc2lvbnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1lbnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkaW1lbnNpb25zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZGltZW5zaW9uc1tpXSwgJ2RpbWVuc2lvbnNbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEluZGV4Tm9kZShkaW1lbnNpb25zLCB0aGlzLmRvdE5vdGF0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7SW5kZXhOb2RlfVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBJbmRleE5vZGUodGhpcy5kaW1lbnNpb25zLnNsaWNlKDApLCB0aGlzLmRvdE5vdGF0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0aGlzIEluZGV4Tm9kZSBjb250YWlucyBhIHNpbmdsZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5pc09iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKHRoaXMuZGltZW5zaW9uc1swXSkgJiYgdHlwZW9mIHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA9PT0gJ3N0cmluZyc7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBuYW1lIGlmIEluZGV4Tm9kZSBjb250YWlucyBhIHByb3BlcnR5LlxuICAgKiBJZiBub3QsIHJldHVybnMgbnVsbC5cbiAgICogQHJldHVybiB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmdldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA6IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIC8vIGZvcm1hdCB0aGUgcGFyYW1ldGVycyBsaWtlIFwiWzEsIDA6NV1cIlxuICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJ1snICsgdGhpcy5kaW1lbnNpb25zLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0luZGV4Tm9kZScsXG4gICAgICBkaW1lbnNpb25zOiB0aGlzLmRpbWVuc2lvbnMsXG4gICAgICBkb3ROb3RhdGlvbjogdGhpcy5kb3ROb3RhdGlvblxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBJbmRleE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkluZGV4Tm9kZVwiLCBkaW1lbnNpb25zOiBbLi4uXSwgZG90Tm90YXRpb246IGZhbHNlfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0luZGV4Tm9kZX1cbiAgICovXG5cblxuICBJbmRleE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgSW5kZXhOb2RlKGpzb24uZGltZW5zaW9ucywganNvbi5kb3ROb3RhdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAvLyBmb3JtYXQgdGhlIHBhcmFtZXRlcnMgbGlrZSBcIlsxLCAwOjVdXCJcbiAgICB2YXIgZGltZW5zaW9ucyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRpbWVuc2lvbnNbaV0gPSB0aGlzLmRpbWVuc2lvbnNbaV0udG9IVE1MKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZG90Tm90YXRpb24pIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYWNjZXNzb3Itb3BlcmF0b3JcIj4uPC9zcGFuPicgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXByb3BlcnR5XCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpKSArICc8L3NwYW4+JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXNcIj5bPC9zcGFuPicgKyBkaW1lbnNpb25zLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPl08L3NwYW4+JztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGRpbWVuc2lvbnMgPSB0aGlzLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgcmV0dXJuIHJhbmdlLnRvVGV4KG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpICsgJycgOiAnX3snICsgZGltZW5zaW9ucy5qb2luKCcsJykgKyAnfSc7XG4gIH07IC8vIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBSYW5nZSBmcm9tIHN0YXJ0LCBzdGVwIGFuZCBlbmRcblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHN0YXJ0KSA/IHN0YXJ0LnRvTnVtYmVyKCkgOiBzdGFydCwgKDAsIF9pcy5pc0JpZ051bWJlcikoZW5kKSA/IGVuZC50b051bWJlcigpIDogZW5kLCAoMCwgX2lzLmlzQmlnTnVtYmVyKShzdGVwKSA/IHN0ZXAudG9OdW1iZXIoKSA6IHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIEluZGV4Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhOb2RlID0gY3JlYXRlSW5kZXhOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZShcIi4uL2tleXdvcmRzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoV2l0aFRyYW5zZm9ybSddO1xudmFyIGNyZWF0ZU5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtO1xuXG4gIC8qKlxuICAgKiBOb2RlXG4gICAqL1xuICBmdW5jdGlvbiBOb2RlKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEV2YWx1YXRlIHRoZSBub2RlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbc2NvcGVdICBTY29wZSB0byByZWFkL3dyaXRlIHZhcmlhYmxlc1xuICAgKiBAcmV0dXJuIHsqfSAgICAgICAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICB9O1xuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtzY29wZV0gIFNjb3BlIHRvIHJlYWQvd3JpdGUgdmFyaWFibGVzXG4gICAqIEByZXR1cm4geyp9ICAgICAgICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHRcbiAgICovXG4gIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXZhbCA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnTWV0aG9kIE5vZGUuZXZhbCBpcyByZW5hbWVkIHRvIE5vZGUuZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QgbmFtZS4nKTtcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZShzY29wZSk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUudHlwZSA9ICdOb2RlJztcbiAgTm9kZS5wcm90b3R5cGUuaXNOb2RlID0gdHJ1ZTtcbiAgTm9kZS5wcm90b3R5cGUuY29tbWVudCA9ICcnO1xuICAvKipcbiAgICogQ29tcGlsZSB0aGUgbm9kZSBpbnRvIGFuIG9wdGltaXplZCwgZXZhdWF0YWJsZSBKYXZhU2NyaXB0IGZ1bmN0aW9uXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogZnVuY3Rpb24oW09iamVjdF0pfX0gb2JqZWN0XG4gICAqICAgICAgICAgICAgICAgIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBmdW5jdGlvbiAnZXZhbHVhdGUnLFxuICAgKiAgICAgICAgICAgICAgICB3aGljaCBjYW4gYmUgaW52b2tlZCBhcyBleHByLmV2YWx1YXRlKFtzY29wZTogT2JqZWN0XSksXG4gICAqICAgICAgICAgICAgICAgIHdoZXJlIHNjb3BlIGlzIGFuIG9wdGlvbmFsIG9iamVjdCB3aXRoXG4gICAqICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5cbiAgICovXG5cbiAgTm9kZS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXhwciA9IHRoaXMuX2NvbXBpbGUobWF0aFdpdGhUcmFuc2Zvcm0sIHt9KTtcblxuICAgIHZhciBhcmdzID0ge307XG4gICAgdmFyIGNvbnRleHQgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUpIHtcbiAgICAgIHZhciBzID0gc2NvcGUgfHwge307XG5cbiAgICAgIF92YWxpZGF0ZVNjb3BlKHMpO1xuXG4gICAgICByZXR1cm4gZXhwcihzLCBhcmdzLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXZhbHVhdGU6IGV2YWx1YXRlLFxuICAgICAgLy8gVE9ETzogRGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuIENsZWFuIHVwIHNvbWUgZGF5XG4gICAgICBldmFsOiBmdW5jdGlvbiBkZXByZWNhdGVkRXZhbChzY29wZSkge1xuICAgICAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBldmFsIGlzIHJlbmFtZWQgdG8gZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QuJyk7XG4gICAgICAgIHJldHVybiBldmFsdWF0ZShzY29wZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIF9jb21waWxlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0eXBlICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcnVuIGZvckVhY2ggb24gYSBOb2RlIGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcnVuIG1hcCBvbiBhIE5vZGUgaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIE5vZGUsIGZvciB1c2Ugd2l0aCBtYXBcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEByZXR1cm5zIHtOb2RlfSBSZXR1cm5zIHRoZSBpbnB1dCBpZiBpdCdzIGEgbm9kZSwgZWxzZSB0aHJvd3MgYW4gRXJyb3JcbiAgICogQHByb3RlY3RlZFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl9pZk5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKG5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYWxsYmFjayBmdW5jdGlvbiBtdXN0IHJldHVybiBhIE5vZGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFsbCBub2RlcyBpbiBhIG5vZGUgdHJlZS4gRXhlY3V0ZXMgZ2l2ZW4gY2FsbGJhY2sgZm9yXG4gICAqIHRoaXMgbm9kZSBhbmQgZWFjaCBvZiBpdHMgY2hpbGQgbm9kZXMuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKiAgICAgICAgICBBIGNhbGxiYWNrIGNhbGxlZCBmb3IgZXZlcnkgbm9kZSBpbiB0aGUgbm9kZSB0cmVlLlxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gZXhlY3V0ZSBjYWxsYmFjayBmb3IgaXRzZWxmXG4gICAgY2FsbGJhY2sodGhpcywgbnVsbCwgbnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc3RhbmRhcmQvbm8tY2FsbGJhY2stbGl0ZXJhbFxuICAgIC8vIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIG92ZXIgYWxsIGNoaWxkcyBvZiBhIG5vZGVcblxuICAgIGZ1bmN0aW9uIF90cmF2ZXJzZShub2RlLCBjYWxsYmFjaykge1xuICAgICAgbm9kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCwgcGF0aCwgcGFyZW50KSB7XG4gICAgICAgIGNhbGxiYWNrKGNoaWxkLCBwYXRoLCBwYXJlbnQpO1xuXG4gICAgICAgIF90cmF2ZXJzZShjaGlsZCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3RyYXZlcnNlKHRoaXMsIGNhbGxiYWNrKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybSBhIG5vZGUgdHJlZSB2aWEgYSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0byByZXBsYWNlIGFsbCBub2RlcyBvZiB0eXBlIFN5bWJvbE5vZGUgaGF2aW5nIG5hbWUgJ3gnIHdpdGggYVxuICAgKiBDb25zdGFudE5vZGUgd2l0aCB2YWx1ZSAyOlxuICAgKlxuICAgKiAgICAgY29uc3QgcmVzID0gTm9kZS50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgKiAgICAgICBpZiAobm9kZSAmJiBub2RlLmlzU3ltYm9sTm9kZSkgJiYgKG5vZGUubmFtZSA9PT0gJ3gnKSkge1xuICAgKiAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKDIpXG4gICAqICAgICAgIH1cbiAgICogICAgICAgZWxzZSB7XG4gICAqICAgICAgICAgcmV0dXJuIG5vZGVcbiAgICogICAgICAgfVxuICAgKiAgICAgfSlcbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihub2RlOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiAgICAgICAgICBBIG1hcHBpbmcgZnVuY3Rpb24gYWNjZXB0aW5nIGEgbm9kZSwgYW5kIHJldHVybmluZ1xuICAgKiAgICAgICAgICBhIHJlcGxhY2VtZW50IGZvciB0aGUgbm9kZSBvciB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogICAgICAgICAgU2lnbmF0dXJlOiBjYWxsYmFjayhub2RlOiBOb2RlLCBpbmRleDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZVxuICAgKiBAcmV0dXJuIHtOb2RlfSBSZXR1cm5zIHRoZSBvcmlnaW5hbCBub2RlIG9yIGl0cyByZXBsYWNlbWVudFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGZ1bmN0aW9uIF90cmFuc2Zvcm0oY2hpbGQsIHBhdGgsIHBhcmVudCkge1xuICAgICAgdmFyIHJlcGxhY2VtZW50ID0gY2FsbGJhY2soY2hpbGQsIHBhdGgsIHBhcmVudCk7XG5cbiAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gY2hpbGQpIHtcbiAgICAgICAgLy8gc3RvcCBpdGVyYXRpbmcgd2hlbiB0aGUgbm9kZSBpcyByZXBsYWNlZFxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGlsZC5tYXAoX3RyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90cmFuc2Zvcm0odGhpcywgbnVsbCwgbnVsbCk7XG4gIH07XG4gIC8qKlxuICAgKiBGaW5kIGFueSBub2RlIGluIHRoZSBub2RlIHRyZWUgbWF0Y2hpbmcgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSwgdG9cbiAgICogZmluZCBhbGwgbm9kZXMgb2YgdHlwZSBTeW1ib2xOb2RlIGhhdmluZyBuYW1lICd4JzpcbiAgICpcbiAgICogICAgIGNvbnN0IHJlc3VsdHMgPSBOb2RlLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgKiAgICAgICByZXR1cm4gKG5vZGUgJiYgbm9kZS5pc1N5bWJvbE5vZGUpICYmIChub2RlLm5hbWUgPT09ICd4JylcbiAgICogICAgIH0pXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2tcbiAgICogICAgICAgICAgICBBIHRlc3QgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgd2hlbiBhIG5vZGUgbWF0Y2hlcywgYW5kIGZhbHNlXG4gICAqICAgICAgICAgICAgb3RoZXJ3aXNlLiBGdW5jdGlvbiBzaWduYXR1cmU6XG4gICAqICAgICAgICAgICAgY2FsbGJhY2sobm9kZTogTm9kZSwgaW5kZXg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IGJvb2xlYW5cbiAgICogQHJldHVybiB7Tm9kZVtdfSBub2RlcyAgICAgICBBbiBhcnJheSB3aXRoIG5vZGVzIG1hdGNoaW5nIGdpdmVuIGZpbHRlciBjcml0ZXJpYVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBub2RlcyA9IFtdO1xuICAgIHRoaXMudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgICAgaWYgKGNhbGxiYWNrKG5vZGUsIHBhdGgsIHBhcmVudCkpIHtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZXM7XG4gIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBOb2RlLmZpbmQgaXMgZGVwcmVjYXRlZC4gVXNlIE5vZGUuZmlsdGVyIGluc3RlYWQuJyk7XG4gIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gTm9kZS5tYXRjaCBpcyBkZXByZWNhdGVkLiBTZWUgZnVuY3Rpb25zIE5vZGUuZmlsdGVyLCBOb2RlLnRyYW5zZm9ybSwgTm9kZS50cmF2ZXJzZS4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhpcyBub2RlXG4gICAqIEByZXR1cm4ge05vZGV9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNsb25lIGEgTm9kZSBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRlZXAgY2xvbmUgb2YgdGhpcyBub2RlXG4gICAqIEByZXR1cm4ge05vZGV9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuY2xvbmVEZWVwID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuY2xvbmVEZWVwKCk7XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBEZWVwIGNvbXBhcmUgdGhpcyBub2RlIHdpdGggYW5vdGhlciBub2RlLlxuICAgKiBAcGFyYW0ge05vZGV9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIGJvdGggbm9kZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzIChhcyBkbyB0aGVpciBjaGlsZHMpXG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgcmV0dXJuIG90aGVyID8gKDAsIF9vYmplY3QuZGVlcFN0cmljdEVxdWFsKSh0aGlzLCBvdGhlcikgOiBmYWxzZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBnZXQgYW4gb2JqZWN0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybTpcbiAgICoge1xuICAgKiAgICBoYW5kbGVyOiAvL1RoaXMgY2FuIGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIGZvcm1cbiAgICogICAgICAgICAgICAgLy8gXCJmdW5jdGlvbiBjYWxsYmFjayhub2RlLCBvcHRpb25zKVwib3JcbiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpXG4gICAqICAgICAgICAgICAgIC8vIHRvIGNhbGxiYWNrc1xuICAgKiAgICBwYXJlbnRoZXNpczogXCJrZWVwXCIgLy90aGUgcGFyZW50aGVzaXMgb3B0aW9uIChUaGlzIGlzIG9wdGlvbmFsKVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tU3RyaW5nO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgX3R5cGVvZihvcHRpb25zKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHN3aXRjaCAoX3R5cGVvZihvcHRpb25zLmhhbmRsZXIpKSB7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIGN1c3RvbVN0cmluZyA9IG9wdGlvbnMuaGFuZGxlcih0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBvciBmdW5jdGlvbiBleHBlY3RlZCBhcyBjYWxsYmFjaycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVN0cmluZztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdG9TdHJpbmcob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEJvdGggLnRvSlNPTigpIGFuZCB0aGUgc3RhdGljIC5mcm9tSlNPTihqc29uKSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYWxsXG4gICAqIGltcGxlbWVudGF0aW9ucyBvZiBOb2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNlcmlhbGl6ZSBvYmplY3Q6IHRvSlNPTiBub3QgaW1wbGVtZW50ZWQgYnkgJyArIHRoaXMudHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIGdldCBhbiBvYmplY3Qgb2YgdGhlIGZvbGxvd2luZyBmb3JtOlxuICAgKiB7XG4gICAqICAgIGhhbmRsZXI6IC8vVGhpcyBjYW4gYmUgYSBjYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgZm9ybVxuICAgKiAgICAgICAgICAgICAvLyBcImZ1bmN0aW9uIGNhbGxiYWNrKG5vZGUsIG9wdGlvbnMpXCIgb3JcbiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpXG4gICAqICAgICAgICAgICAgIC8vIHRvIGNhbGxiYWNrc1xuICAgKiAgICBwYXJlbnRoZXNpczogXCJrZWVwXCIgLy90aGUgcGFyZW50aGVzaXMgb3B0aW9uIChUaGlzIGlzIG9wdGlvbmFsKVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVN0cmluZztcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21TdHJpbmcgPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVN0cmluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21TdHJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIHN0cmluZyBvdXRwdXQuXG4gICAqIFRoaXMgaGFzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IE5vZGVcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTm9kZSBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ190b1N0cmluZyBub3QgaW1wbGVtZW50ZWQgZm9yICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uLiAod3JhcHBlciBmdW5jdGlvbilcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gZ2V0IGFuIG9iamVjdCBvZiB0aGUgZm9sbG93aW5nIGZvcm06XG4gICAqIHtcbiAgICogICAgaGFuZGxlcjogLy9UaGlzIGNhbiBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBmb3JtXG4gICAqICAgICAgICAgICAgIC8vIFwiZnVuY3Rpb24gY2FsbGJhY2sobm9kZSwgb3B0aW9ucylcIm9yXG4gICAqICAgICAgICAgICAgIC8vIGEgbWFwIHRoYXQgbWFwcyBmdW5jdGlvbiBuYW1lcyAodXNlZCBpbiBGdW5jdGlvbk5vZGVzKVxuICAgKiAgICAgICAgICAgICAvLyB0byBjYWxsYmFja3NcbiAgICogICAgcGFyZW50aGVzaXM6IFwia2VlcFwiIC8vdGhlIHBhcmVudGhlc2lzIG9wdGlvbiAoVGhpcyBpcyBvcHRpb25hbClcbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS50b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVRleDtcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21UZXggPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21UZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RvVGV4KG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIExhVGVYIG91dHB1dC5cbiAgICogVGhpcyBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgZXZlcnkgTm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignX3RvVGV4IG5vdCBpbXBsZW1lbnRlZCBmb3IgJyArIHRoaXMudHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgaWRlbnRpZmllci5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCBOb2RlLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmdldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc3ltYm9sIG5hbWVzIG9mIGEgc2NvcGUuXG4gICAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoZSBzY29wZSBjb250YWlucyBhbiBpbGxlZ2FsIHN5bWJvbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlU2NvcGUoc2NvcGUpIHtcbiAgICBmb3IgKHZhciBzeW1ib2wgaW4gc2NvcGUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoc2NvcGUsIHN5bWJvbCkpIHtcbiAgICAgICAgaWYgKHN5bWJvbCBpbiBfa2V5d29yZHMua2V5d29yZHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Njb3BlIGNvbnRhaW5zIGFuIGlsbGVnYWwgc3ltYm9sLCBcIicgKyBzeW1ib2wgKyAnXCIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm9kZSA9IGNyZWF0ZU5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9iamVjdE5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnT2JqZWN0Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlT2JqZWN0Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgT2JqZWN0Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogSG9sZHMgYW4gb2JqZWN0IHdpdGgga2V5cy92YWx1ZXNcbiAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgTm9kZT59IFtwcm9wZXJ0aWVzXSAgIG9iamVjdCB3aXRoIGtleS92YWx1ZSBwYWlyc1xuICAgKi9cbiAgZnVuY3Rpb24gT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9iamVjdE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307IC8vIHZhbGlkYXRlIGlucHV0XG5cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgaWYgKCEoX3R5cGVvZihwcm9wZXJ0aWVzKSA9PT0gJ29iamVjdCcpIHx8ICFPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiAoMCwgX2lzLmlzTm9kZSkocHJvcGVydGllc1trZXldKTtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBPYmplY3ROb2RlLnByb3RvdHlwZS50eXBlID0gJ09iamVjdE5vZGUnO1xuICBPYmplY3ROb2RlLnByb3RvdHlwZS5pc09iamVjdE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsRW50cmllcyA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgLy8gd2Ugc3RyaW5naWZ5L3BhcnNlIHRoZSBrZXkgaGVyZSB0byByZXNvbHZlIHVuaWNvZGUgY2hhcmFjdGVycyxcbiAgICAgICAgLy8gc28geW91IGNhbm5vdCBjcmVhdGUgYSBrZXkgbGlrZSB7XCJjb1xcXFx1MDA2RXN0cnVjdG9yXCI6IG51bGx9XG4gICAgICAgIHZhciBzdHJpbmdpZmllZEtleSA9ICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KTtcbiAgICAgICAgdmFyIHBhcnNlZEtleSA9IEpTT04ucGFyc2Uoc3RyaW5naWZpZWRLZXkpO1xuXG4gICAgICAgIGlmICghKDAsIF9jdXN0b21zLmlzU2FmZVByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIHBhcnNlZEtleSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSBcIicgKyBwYXJzZWRLZXkgKyAnXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2YWxFbnRyaWVzW3BhcnNlZEtleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPYmplY3ROb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgb2JqID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gZXZhbEVudHJpZXMpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShldmFsRW50cmllcywgX2tleSkpIHtcbiAgICAgICAgICBvYmpbX2tleV0gPSBldmFsRW50cmllc1tfa2V5XShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLnByb3BlcnRpZXNba2V5XSwgJ3Byb3BlcnRpZXNbJyArICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICddJywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9iamVjdE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09iamVjdE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnByb3BlcnRpZXNba2V5XSwgJ3Byb3BlcnRpZXNbJyArICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICddJywgdGhpcykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7T2JqZWN0Tm9kZX1cbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgcHJvcGVydGllc1trZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPYmplY3ROb2RlKHByb3BlcnRpZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBlbnRyaWVzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goKDAsIF9zdHJpbmcuc3RyaW5naWZ5KShrZXkpICsgJzogJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvU3RyaW5nKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJ3snICsgZW50cmllcy5qb2luKCcsICcpICsgJ30nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnT2JqZWN0Tm9kZScsXG4gICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXNcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gT3BlcmF0b3JOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJPYmplY3ROb2RlXCIsIFwicHJvcGVydGllc1wiOiB7Li4ufX1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtPYmplY3ROb2RlfVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShqc29uLnByb3BlcnRpZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKCc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtcHJvcGVydHlcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKShrZXkpICsgJzwvc3Bhbj4nICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1wcm9wZXJ0eS1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yXCI+Ojwvc3Bhbj4nICsgdGhpcy5wcm9wZXJ0aWVzW2tleV0udG9IVE1MKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLWN1cmx5LXBhcmVudGhlc2lzXCI+ezwvc3Bhbj4nICsgZW50cmllcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1jdXJseS1wYXJlbnRoZXNpc1wiPn08L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCgnXFxcXG1hdGhiZnsnICsga2V5ICsgJzp9ICYgJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvVGV4KG9wdGlvbnMpICsgJ1xcXFxcXFxcJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXFxcXGxlZnRcXFxce1xcXFxiZWdpbnthcnJheX17bGx9XCIuY29uY2F0KGVudHJpZXMuam9pbignXFxuJyksIFwiXFxcXGVuZHthcnJheX1cXFxccmlnaHRcXFxcfVwiKTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlT2JqZWN0Tm9kZSA9IGNyZWF0ZU9iamVjdE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9wZXJhdG9yTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnT3BlcmF0b3JOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVPcGVyYXRvck5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIE9wZXJhdG9yTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQW4gb3BlcmF0b3Igd2l0aCB0d28gYXJndW1lbnRzLCBsaWtlIDIrM1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3AgICAgICAgICAgIE9wZXJhdG9yIG5hbWUsIGZvciBleGFtcGxlICcrJ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZm4gICAgICAgICAgIEZ1bmN0aW9uIG5hbWUsIGZvciBleGFtcGxlICdhZGQnXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzICAgICAgICAgT3BlcmF0b3IgYXJndW1lbnRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ltcGxpY2l0XSAgSXMgdGhpcyBhbiBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbj9cbiAgICovXG4gIGZ1bmN0aW9uIE9wZXJhdG9yTm9kZShvcCwgZm4sIGFyZ3MsIGltcGxpY2l0KSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAodHlwZW9mIG9wICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJvcFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiZm5cIicpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShhcmdzKSB8fCAhYXJncy5ldmVyeShfaXMuaXNOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiYXJnc1wiJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbXBsaWNpdCA9IGltcGxpY2l0ID09PSB0cnVlO1xuICAgIHRoaXMub3AgPSBvcDtcbiAgICB0aGlzLmZuID0gZm47XG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTtcbiAgfVxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnT3BlcmF0b3JOb2RlJztcbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc09wZXJhdG9yTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICAvLyB2YWxpZGF0ZSBmblxuICAgIGlmICh0eXBlb2YgdGhpcy5mbiAhPT0gJ3N0cmluZycgfHwgISgwLCBfY3VzdG9tcy5pc1NhZmVNZXRob2QpKG1hdGgsIHRoaXMuZm4pKSB7XG4gICAgICBpZiAoIW1hdGhbdGhpcy5mbl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiAnICsgdGhpcy5mbiArICcgbWlzc2luZyBpbiBwcm92aWRlZCBuYW1lc3BhY2UgXCJtYXRoXCInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYWNjZXNzIHRvIGZ1bmN0aW9uIFwiJyArIHRoaXMuZm4gKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZm4gPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCB0aGlzLmZuKTtcbiAgICB2YXIgZXZhbEFyZ3MgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcblxuICAgIGlmIChldmFsQXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPcGVyYXRvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZuKGV2YWxBcmcwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgX2V2YWxBcmcgPSBldmFsQXJnc1swXTtcbiAgICAgIHZhciBldmFsQXJnMSA9IGV2YWxBcmdzWzFdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPcGVyYXRvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZuKF9ldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEFyZzEoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsT3BlcmF0b3JOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5hcmdzW2ldLCAnYXJnc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9wZXJhdG9yTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7T3BlcmF0b3JOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSh0aGlzLm9wLCB0aGlzLmZuLCBhcmdzLCB0aGlzLmltcGxpY2l0KTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7T3BlcmF0b3JOb2RlfVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUodGhpcy5vcCwgdGhpcy5mbiwgdGhpcy5hcmdzLnNsaWNlKDApLCB0aGlzLmltcGxpY2l0KTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiB1bmFyeSBPcGVyYXRvck5vZGU6XG4gICAqIGhhcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgbGlrZSBgLWFgLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhbiB1bmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc1VuYXJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmFyZ3MubGVuZ3RoID09PSAxO1xuICB9O1xuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgYmluYXJ5IE9wZXJhdG9yTm9kZTpcbiAgICogaGFzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgbGlrZSBgYSArIGJgLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhIGJpbmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc0JpbmFyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5hcmdzLmxlbmd0aCA9PT0gMjtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB3aGljaCBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5LiBHZXRzIGFuIE9wZXJhdG9yTm9kZVxuICAgKiAod2hpY2ggaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUpIGFuZCBhbiBBcnJheSBvZiBOb2Rlc1xuICAgKiAodGhpcy5hcmdzKSBhbmQgcmV0dXJucyBhbiBhcnJheSB3aGVyZSAndHJ1ZScgbWVhbnMgdGhhdCBhbiBhcmd1bWVudFxuICAgKiBoYXMgdG8gYmUgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgd2hlcmVhcyAnZmFsc2UnIG1lYW5zIHRoZSBvcHBvc2l0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtPcGVyYXRvck5vZGV9IHJvb3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbGF0ZXhcbiAgICogQHJldHVybiB7Ym9vbGVhbltdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHJvb3QsIHBhcmVudGhlc2lzLCBpbXBsaWNpdCwgYXJncywgbGF0ZXgpIHtcbiAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByb290IE9wZXJhdG9yTm9kZVxuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocm9vdCwgcGFyZW50aGVzaXMpO1xuICAgIHZhciBhc3NvY2lhdGl2aXR5ID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkocm9vdCwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBhcmdzLmxlbmd0aCA+IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgIT09ICdPcGVyYXRvck5vZGU6YWRkJyAmJiByb290LmdldElkZW50aWZpZXIoKSAhPT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpIHtcbiAgICAgIHJldHVybiBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLmdldENvbnRlbnQoKS50eXBlKSB7XG4gICAgICAgICAgLy8gTm9kZXMgdGhhdCBkb24ndCBuZWVkIGV4dHJhIHBhcmVudGhlc2VzXG4gICAgICAgICAgY2FzZSAnQXJyYXlOb2RlJzpcbiAgICAgICAgICBjYXNlICdDb25zdGFudE5vZGUnOlxuICAgICAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOlxuICAgICAgICAgIGNhc2UgJ1BhcmVudGhlc2lzTm9kZSc6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQ7XG5cbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyB1bmFyeSBvcGVyYXRvcnNcbiAgICAgICAge1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb2YgdGhlIG9wZXJhbmRcbiAgICAgICAgICB2YXIgb3BlcmFuZFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShhcmdzWzBdLCBwYXJlbnRoZXNpcyk7IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzIGZvciBMYVRlWCwgd2hlcmUgc29tZSBvZiB0aGUgcGFyZW50aGVzZXMgYXJlbid0IG5lZWRlZFxuXG4gICAgICAgICAgaWYgKGxhdGV4ICYmIG9wZXJhbmRQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgb3BlcmFuZElkZW50aWZpZXI7XG4gICAgICAgICAgICB2YXIgcm9vdElkZW50aWZpZXI7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICAgICAgICAgIG9wZXJhbmRJZGVudGlmaWVyID0gYXJnc1swXS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXMgTm9kZXMgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICAgICAgICAgICAgb3BlcmFuZElkZW50aWZpZXIgPSBhcmdzWzBdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW3ByZWNlZGVuY2VdW3Jvb3RJZGVudGlmaWVyXS5sYXRleExlZnRQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW29wZXJhbmRQcmVjZWRlbmNlXVtvcGVyYW5kSWRlbnRpZmllcl0ubGF0ZXhQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcGVyYW5kUHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmQgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWRcbiAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3BlcmFuZFByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmRzIHByZWNlZGVuY2UgaXMgbG93ZXIsIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICByZXN1bHQgPSBbdHJ1ZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IC8vIG90aGVyd2lzZSwgbm8gcGFyZW5zIG5lZWRlZFxuXG5cbiAgICAgICAgICByZXN1bHQgPSBbZmFsc2VdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIGJpbmFyeSBvcGVyYXRvcnNcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsaHNQYXJlbnM7IC8vIGxlZnQgaGFuZCBzaWRlIG5lZWRzIHBhcmVudGhlc2lzP1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb2YgdGhlIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgICAgICB2YXIgbGhzUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKGFyZ3NbMF0sIHBhcmVudGhlc2lzKTsgLy8gaXMgdGhlIHJvb3Qgbm9kZSBhc3NvY2lhdGl2ZSB3aXRoIHRoZSBsZWZ0IGhhbmQgc2lkZVxuXG4gICAgICAgICAgdmFyIGFzc29jV2l0aExocyA9ICgwLCBfb3BlcmF0b3JzLmlzQXNzb2NpYXRpdmVXaXRoKShyb290LCBhcmdzWzBdLCBwYXJlbnRoZXNpcyk7XG5cbiAgICAgICAgICBpZiAobGhzUHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGxlZnQgaGFuZCBzaWRlIGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAvLyBGdW5jdGlvbk5vZGUgZm9yIGV4YW1wbGVcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGhzUHJlY2VkZW5jZSA9PT0gcHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSAncmlnaHQnICYmICFhc3NvY1dpdGhMaHMpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZXF1YWwgcHJlY2VkZW5jZSwgaWYgdGhlIHJvb3Qgbm9kZSBpcyBsZWZ0IGFzc29jaWF0aXZlXG4gICAgICAgICAgICAvLyBwYXJlbnMgYXJlICoqbmV2ZXIqKiBuZWNlc3NhcnkgZm9yIHRoZSBsZWZ0IGhhbmQgc2lkZS5cbiAgICAgICAgICAgIC8vIElmIGl0IGlzIHJpZ2h0IGFzc29jaWF0aXZlIGhvd2V2ZXIsIHBhcmVucyBhcmUgbmVjZXNzYXJ5XG4gICAgICAgICAgICAvLyBpZiB0aGUgcm9vdCBub2RlIGlzbid0IGFzc29jaWF0aXZlIHdpdGggdGhlIGxlZnQgaGFuZCBzaWRlXG4gICAgICAgICAgICBsaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByaHNQYXJlbnM7IC8vIHJpZ2h0IGhhbmQgc2lkZSBuZWVkcyBwYXJlbnRoZXNpcz9cbiAgICAgICAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByaWdodCBoYW5kIHNpZGVcblxuICAgICAgICAgIHZhciByaHNQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnc1sxXSwgcGFyZW50aGVzaXMpOyAvLyBpcyB0aGUgcm9vdCBub2RlIGFzc29jaWF0aXZlIHdpdGggdGhlIHJpZ2h0IGhhbmQgc2lkZT9cblxuICAgICAgICAgIHZhciBhc3NvY1dpdGhSaHMgPSAoMCwgX29wZXJhdG9ycy5pc0Fzc29jaWF0aXZlV2l0aCkocm9vdCwgYXJnc1sxXSwgcGFyZW50aGVzaXMpO1xuXG4gICAgICAgICAgaWYgKHJoc1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSByaWdodCBoYW5kIHNpZGUgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWRcbiAgICAgICAgICAgIC8vIEZ1bmN0aW9uTm9kZSBmb3IgZXhhbXBsZVxuICAgICAgICAgICAgcmhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChyaHNQcmVjZWRlbmNlID09PSBwcmVjZWRlbmNlICYmIGFzc29jaWF0aXZpdHkgPT09ICdsZWZ0JyAmJiAhYXNzb2NXaXRoUmhzKSB7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGVxdWFsIHByZWNlZGVuY2UsIGlmIHRoZSByb290IG5vZGUgaXMgcmlnaHQgYXNzb2NpYXRpdmVcbiAgICAgICAgICAgIC8vIHBhcmVucyBhcmUgKipuZXZlcioqIG5lY2Vzc2FyeSBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZS5cbiAgICAgICAgICAgIC8vIElmIGl0IGlzIGxlZnQgYXNzb2NpYXRpdmUgaG93ZXZlciwgcGFyZW5zIGFyZSBuZWNlc3NhcnlcbiAgICAgICAgICAgIC8vIGlmIHRoZSByb290IG5vZGUgaXNuJ3QgYXNzb2NpYXRpdmUgd2l0aCB0aGUgcmlnaHQgaGFuZCBzaWRlXG4gICAgICAgICAgICByaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gLy8gaGFuZGxlIHNwZWNpYWwgY2FzZXMgZm9yIExhVGVYLCB3aGVyZSBzb21lIG9mIHRoZSBwYXJlbnRoZXNlcyBhcmVuJ3QgbmVlZGVkXG5cblxuICAgICAgICAgIGlmIChsYXRleCkge1xuICAgICAgICAgICAgdmFyIF9yb290SWRlbnRpZmllcjtcblxuICAgICAgICAgICAgdmFyIGxoc0lkZW50aWZpZXI7XG4gICAgICAgICAgICB2YXIgcmhzSWRlbnRpZmllcjtcblxuICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgICAgICAgICAgX3Jvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIGxoc0lkZW50aWZpZXIgPSByb290LmFyZ3NbMF0uZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBQYXJlbnRoZXNpc05vZGVzIHdoZW4gbm90IGluICdrZWVwJyBtb2RlXG4gICAgICAgICAgICAgIF9yb290SWRlbnRpZmllciA9IHJvb3QuZ2V0Q29udGVudCgpLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgICAgbGhzSWRlbnRpZmllciA9IHJvb3QuYXJnc1swXS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcHJlY2VkZW5jZV1bX3Jvb3RJZGVudGlmaWVyXS5sYXRleExlZnRQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgbGhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW2xoc1ByZWNlZGVuY2VdW2xoc0lkZW50aWZpZXJdLmxhdGV4UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcHJlY2VkZW5jZV1bX3Jvb3RJZGVudGlmaWVyXS5sYXRleFJpZ2h0UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKF9vcGVyYXRvcnMucHJvcGVydGllc1tyaHNQcmVjZWRlbmNlXVtyaHNJZGVudGlmaWVyXS5sYXRleFBhcmVucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByaHNQYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3VsdCA9IFtsaHNQYXJlbnMsIHJoc1BhcmVuc107XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyb290LmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTphZGQnIHx8IHJvb3QuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5Jykge1xuICAgICAgICAgIHJlc3VsdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHZhciBhcmdQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnLCBwYXJlbnRoZXNpcyk7XG4gICAgICAgICAgICB2YXIgYXNzb2NXaXRoQXJnID0gKDAsIF9vcGVyYXRvcnMuaXNBc3NvY2lhdGl2ZVdpdGgpKHJvb3QsIGFyZywgcGFyZW50aGVzaXMpO1xuICAgICAgICAgICAgdmFyIGFyZ0Fzc29jaWF0aXZpdHkgPSAoMCwgX29wZXJhdG9ycy5nZXRBc3NvY2lhdGl2aXR5KShhcmcsIHBhcmVudGhlc2lzKTtcblxuICAgICAgICAgICAgaWYgKGFyZ1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGFyZ3VtZW50IGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJlY2VkZW5jZSA9PT0gYXJnUHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSBhcmdBc3NvY2lhdGl2aXR5ICYmICFhc3NvY1dpdGhBcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1ByZWNlZGVuY2UgPCBwcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9IC8vIGhhbmRsZXMgYW4gZWRnZSBjYXNlIG9mICdhdXRvJyBwYXJlbnRoZXNlcyB3aXRoIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uIG9mIENvbnN0YW50Tm9kZVxuICAgIC8vIEluIHRoYXQgY2FzZSBwcmludCBwYXJlbnRoZXNlcyBmb3IgUGFyZW50aGVzaXNOb2RlcyBldmVuIHRob3VnaCB0aGV5IG5vcm1hbGx5IHdvdWxkbid0IGJlXG4gICAgLy8gcHJpbnRlZC5cblxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID49IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIHJvb3QuaW1wbGljaXQgJiYgcGFyZW50aGVzaXMgPT09ICdhdXRvJyAmJiBpbXBsaWNpdCA9PT0gJ2hpZGUnKSB7XG4gICAgICByZXN1bHQgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICB2YXIgaXNQYXJlbnRoZXNpc05vZGUgPSBhcmcuZ2V0SWRlbnRpZmllcigpID09PSAnUGFyZW50aGVzaXNOb2RlJztcblxuICAgICAgICBpZiAocmVzdWx0W2luZGV4XSB8fCBpc1BhcmVudGhlc2lzTm9kZSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGltcGxpY2l0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmltcGxpY2l0ID8gb3B0aW9ucy5pbXBsaWNpdCA6ICdoaWRlJztcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMsIGltcGxpY2l0LCBhcmdzLCBmYWxzZSk7XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSAnKCcgKyBvcGVyYW5kICsgJyknO1xuICAgICAgfSAvLyBmb3IgZXhhbXBsZSBmb3IgXCJub3RcIiwgd2Ugd2FudCBhIHNwYWNlIGJldHdlZW4gb3BlcmFuZCBhbmQgYXJndW1lbnRcblxuXG4gICAgICB2YXIgb3BJc05hbWVkID0gL1thLXpBLVpdKy8udGVzdCh0aGlzLm9wKTtcblxuICAgICAgaWYgKGFzc29jID09PSAncmlnaHQnKSB7XG4gICAgICAgIC8vIHByZWZpeCBvcGVyYXRvclxuICAgICAgICByZXR1cm4gdGhpcy5vcCArIChvcElzTmFtZWQgPyAnICcgOiAnJykgKyBvcGVyYW5kO1xuICAgICAgfSBlbHNlIGlmIChhc3NvYyA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIC8vIHBvc3RmaXhcbiAgICAgICAgcmV0dXJuIG9wZXJhbmQgKyAob3BJc05hbWVkID8gJyAnIDogJycpICsgdGhpcy5vcDtcbiAgICAgIH0gLy8gZmFsbCBiYWNrIHRvIHBvc3RmaXhcblxuXG4gICAgICByZXR1cm4gb3BlcmFuZCArIHRoaXMub3A7XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdmFyIGxocyA9IGFyZ3NbMF0udG9TdHJpbmcob3B0aW9ucyk7IC8vIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgIHZhciByaHMgPSBhcmdzWzFdLnRvU3RyaW5nKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgbGhzID0gJygnICsgbGhzICsgJyknO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIC8vIHJpZ2h0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgcmhzID0gJygnICsgcmhzICsgJyknO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICByZXR1cm4gbGhzICsgJyAnICsgcmhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzICsgJyAnICsgdGhpcy5vcCArICcgJyArIHJocztcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7XG4gICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7XG4gICAgICAgICAgLy8gcHV0IGluIHBhcmVudGhlc2lzP1xuICAgICAgICAgIGFyZyA9ICcoJyArIGFyZyArICcpJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuaW1wbGljaXQgJiYgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignICcgKyB0aGlzLm9wICsgJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gZm9ybWF0dGluZyBhcyBhIGZ1bmN0aW9uIGNhbGxcbiAgICAgIHJldHVybiB0aGlzLmZuICsgJygnICsgdGhpcy5hcmdzLmpvaW4oJywgJykgKyAnKSc7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdPcGVyYXRvck5vZGUnLFxuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICBmbjogdGhpcy5mbixcbiAgICAgIGFyZ3M6IHRoaXMuYXJncyxcbiAgICAgIGltcGxpY2l0OiB0aGlzLmltcGxpY2l0XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIE9wZXJhdG9yTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiT3BlcmF0b3JOb2RlXCIsIFwib3BcIjogXCIrXCIsIFwiZm5cIjogXCJhZGRcIiwgXCJhcmdzXCI6IFsuLi5dLCBcImltcGxpY2l0XCI6IGZhbHNlfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX1cbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKGpzb24ub3AsIGpzb24uZm4sIGpzb24uYXJncywganNvbi5pbXBsaWNpdCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnO1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIGZhbHNlKTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gdW5hcnkgb3BlcmF0b3JzXG4gICAgICB2YXIgYXNzb2MgPSAoMCwgX29wZXJhdG9ycy5nZXRBc3NvY2lhdGl2aXR5KSh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgICB2YXIgb3BlcmFuZCA9IGFyZ3NbMF0udG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBvcGVyYW5kICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNzb2MgPT09ICdyaWdodCcpIHtcbiAgICAgICAgLy8gcHJlZml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtdW5hcnktb3BlcmF0b3IgbWF0aC1sZWZ0aGFuZC11bmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBvc3RmaXggd2hlbiBhc3NvYyA9PT0gJ2xlZnQnIG9yIHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4gb3BlcmFuZCArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC11bmFyeS1vcGVyYXRvciBtYXRoLXJpZ2h0aGFuZC11bmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIGJpbmFyeSBvcGVyYXRvZXNcbiAgICAgIHZhciBsaHMgPSBhcmdzWzBdLnRvSFRNTChvcHRpb25zKTsgLy8gbGVmdCBoYW5kIHNpZGVcblxuICAgICAgdmFyIHJocyA9IGFyZ3NbMV0udG9IVE1MKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgbGhzID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIC8vIHJpZ2h0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgcmhzID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgcmhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICByZXR1cm4gbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWltcGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPjwvc3Bhbj4nICsgcmhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nICsgcmhzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvSFRNTChvcHRpb25zKTtcblxuICAgICAgICBpZiAocGFyZW5zW2luZGV4XSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICBhcmcgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBhcmcgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIgJiYgKHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOmFkZCcgfHwgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknKSkge1xuICAgICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIG1hdGgtaW1wbGljaXQtYmluYXJ5LW9wZXJhdG9yXCI+PC9zcGFuPicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1leHBsaWNpdC1iaW5hcnktb3BlcmF0b3JcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLm9wKSArICc8L3NwYW4+Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBmb3JtYXR0aW5nIGFzIGEgZnVuY3Rpb24gY2FsbFxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZm4pICsgJzwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnO1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIHRydWUpO1xuICAgIHZhciBvcCA9IF9sYXRleC5sYXRleE9wZXJhdG9yc1t0aGlzLmZuXTtcbiAgICBvcCA9IHR5cGVvZiBvcCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLm9wIDogb3A7IC8vIGZhbGwgYmFjayB0byB1c2luZyB0aGlzLm9wXG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChvcGVyYW5kLCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhc3NvYyA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAvLyBwcmVmaXggb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIG9wICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSBpZiAoYXNzb2MgPT09ICdsZWZ0Jykge1xuICAgICAgICAvLyBwb3N0Zml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiBvcGVyYW5kICsgb3A7XG4gICAgICB9IC8vIGZhbGwgYmFjayB0byBwb3N0Zml4XG5cblxuICAgICAgcmV0dXJuIG9wZXJhbmQgKyBvcDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBiaW5hcnkgb3BlcmF0b3JzXG4gICAgICB2YXIgbGhzID0gYXJnc1swXTsgLy8gbGVmdCBoYW5kIHNpZGVcblxuICAgICAgdmFyIGxoc1RleCA9IGxocy50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICBsaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChsaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJocyA9IGFyZ3NbMV07IC8vIHJpZ2h0IGhhbmQgc2lkZVxuXG4gICAgICB2YXIgcmhzVGV4ID0gcmhzLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIHJoc1RleCA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KHJoc1RleCwgXCJcXFxccmlnaHQpXCIpO1xuICAgICAgfSAvLyBoYW5kbGUgc29tZSBleGNlcHRpb25zIChkdWUgdG8gdGhlIHdheSBMYVRlWCB3b3JrcylcblxuXG4gICAgICB2YXIgbGhzSWRlbnRpZmllcjtcblxuICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgICAgbGhzSWRlbnRpZmllciA9IGxocy5nZXRJZGVudGlmaWVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXNOb2RlcyBpZiBpbiAna2VlcCcgbW9kZVxuICAgICAgICBsaHNJZGVudGlmaWVyID0gbGhzLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodGhpcy5nZXRJZGVudGlmaWVyKCkpIHtcbiAgICAgICAgY2FzZSAnT3BlcmF0b3JOb2RlOmRpdmlkZSc6XG4gICAgICAgICAgLy8gb3AgY29udGFpbnMgJ1xcXFxmcmFjJyBhdCB0aGlzIHBvaW50XG4gICAgICAgICAgcmV0dXJuIG9wICsgJ3snICsgbGhzVGV4ICsgJ30nICsgJ3snICsgcmhzVGV4ICsgJ30nO1xuXG4gICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpwb3cnOlxuICAgICAgICAgIGxoc1RleCA9ICd7JyArIGxoc1RleCArICd9JztcbiAgICAgICAgICByaHNUZXggPSAneycgKyByaHNUZXggKyAnfSc7XG5cbiAgICAgICAgICBzd2l0Y2ggKGxoc0lkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6IC8vXG5cbiAgICAgICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOlxuICAgICAgICAgICAgICBsaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChsaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdPcGVyYXRvck5vZGU6bXVsdGlwbHknOlxuICAgICAgICAgIGlmICh0aGlzLmltcGxpY2l0ICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgICAgIHJldHVybiBsaHNUZXggKyAnficgKyByaHNUZXg7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaHNUZXggKyBvcCArIHJoc1RleDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7XG4gICAgICB2YXIgdGV4aWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7XG4gICAgICAgICAgYXJnID0gXCJcXFxcbGVmdChcIi5jb25jYXQoYXJnLCBcIlxcXFxyaWdodClcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgdGhpcy5pbXBsaWNpdCkge1xuICAgICAgICByZXR1cm4gdGV4aWZpZWRBcmdzLmpvaW4oJ34nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleGlmaWVkQXJncy5qb2luKG9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbCBiYWNrIHRvIGZvcm1hdHRpbmcgYXMgYSBmdW5jdGlvbiBjYWxsXG4gICAgICAvLyBhcyB0aGlzIGlzIGEgZmFsbGJhY2ssIGl0IGRvZXNuJ3QgdXNlXG4gICAgICAvLyBmYW5jeSBmdW5jdGlvbiBuYW1lc1xuICAgICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyB0aGlzLmZuICsgJ31cXFxcbGVmdCgnICsgYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgfSkuam9pbignLCcpICsgJ1xcXFxyaWdodCknO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEdldCBpZGVudGlmaWVyLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgKyAnOicgKyB0aGlzLmZuO1xuICB9O1xuXG4gIHJldHVybiBPcGVyYXRvck5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9wZXJhdG9yTm9kZSA9IGNyZWF0ZU9wZXJhdG9yTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyZW50aGVzaXNOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUGFyZW50aGVzaXNOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVQYXJlbnRoZXNpc05vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFBhcmVudGhlc2lzTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQSBwYXJlbnRoZXNpcyBub2RlIGRlc2NyaWJlcyBtYW51YWwgcGFyZW50aGVzaXMgZnJvbSB0aGUgdXNlciBpbnB1dFxuICAgKiBAcGFyYW0ge05vZGV9IGNvbnRlbnRcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqL1xuICBmdW5jdGlvbiBQYXJlbnRoZXNpc05vZGUoY29udGVudCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXJlbnRoZXNpc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoY29udGVudCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImNvbnRlbnRcIicpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS50eXBlID0gJ1BhcmVudGhlc2lzTm9kZSc7XG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuaXNQYXJlbnRoZXNpc05vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgTm9kZS5cbiAgICogQHJldHVybiB7Tm9kZX0gY29udGVudFxuICAgKiBAb3ZlcnJpZGVcbiAgICoqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5nZXRDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0Q29udGVudCgpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuY29udGVudCwgJ2NvbnRlbnQnLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBQYXJlbnRoZXNpc05vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtQYXJlbnRoZXNpc05vZGV9IFJldHVybnMgYSBjbG9uZSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGNvbnRlbnQgPSBjYWxsYmFjayh0aGlzLmNvbnRlbnQsICdjb250ZW50JywgdGhpcyk7XG4gICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1BhcmVudGhlc2lzTm9kZX1cbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHRoaXMuY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuICcoJyArIHRoaXMuY29udGVudC50b1N0cmluZyhvcHRpb25zKSArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250ZW50LnRvU3RyaW5nKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdQYXJlbnRoZXNpc05vZGUnLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIFBhcmVudGhlc2lzTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUGFyZW50aGVzaXNOb2RlXCIsIFwiY29udGVudFwiOiAuLi59YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7UGFyZW50aGVzaXNOb2RlfVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoanNvbi5jb250ZW50KTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHRoaXMuY29udGVudC50b0hUTUwob3B0aW9ucykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b0hUTUwob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zICYmICFvcHRpb25zLnBhcmVudGhlc2lzIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICByZXR1cm4gXCJcXFxcbGVmdChcIi5jb25jYXQodGhpcy5jb250ZW50LnRvVGV4KG9wdGlvbnMpLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b1RleChvcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gUGFyZW50aGVzaXNOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJlbnRoZXNpc05vZGUgPSBjcmVhdGVQYXJlbnRoZXNpc05vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIG5hbWUgPSAnUmFuZ2VOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVSYW5nZU5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFJhbmdlTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogY3JlYXRlIGEgcmFuZ2VcbiAgICogQHBhcmFtIHtOb2RlfSBzdGFydCAgaW5jbHVkZWQgbG93ZXItYm91bmRcbiAgICogQHBhcmFtIHtOb2RlfSBlbmQgICAgaW5jbHVkZWQgdXBwZXItYm91bmRcbiAgICogQHBhcmFtIHtOb2RlfSBbc3RlcF0gb3B0aW9uYWwgc3RlcFxuICAgKi9cbiAgZnVuY3Rpb24gUmFuZ2VOb2RlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2VOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0c1xuXG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShzdGFydCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQnKTtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShlbmQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkJyk7XG4gICAgaWYgKHN0ZXAgJiYgISgwLCBfaXMuaXNOb2RlKShzdGVwKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9kZSBleHBlY3RlZCcpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykgdGhyb3cgbmV3IEVycm9yKCdUb28gbWFueSBhcmd1bWVudHMnKTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7IC8vIGluY2x1ZGVkIGxvd2VyLWJvdW5kXG5cbiAgICB0aGlzLmVuZCA9IGVuZDsgLy8gaW5jbHVkZWQgdXBwZXItYm91bmRcblxuICAgIHRoaXMuc3RlcCA9IHN0ZXAgfHwgbnVsbDsgLy8gb3B0aW9uYWwgc3RlcFxuICB9XG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIFJhbmdlTm9kZS5wcm90b3R5cGUudHlwZSA9ICdSYW5nZU5vZGUnO1xuICBSYW5nZU5vZGUucHJvdG90eXBlLmlzUmFuZ2VOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIFJhbmdlTm9kZSBuZWVkcyB0aGUgYGVuZGAgc3ltYm9sIHRvIGJlIGRlZmluZWQuXG4gICAqIFRoaXMgZW5kIGlzIHRoZSBzaXplIG9mIHRoZSBNYXRyaXggaW4gY3VycmVudCBkaW1lbnNpb24uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUubmVlZHNFbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZmluZCBhbGwgYGVuZGAgc3ltYm9scyBpbiB0aGlzIFJhbmdlTm9kZVxuICAgIHZhciBlbmRTeW1ib2xzID0gdGhpcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2lzLmlzU3ltYm9sTm9kZSkobm9kZSkgJiYgbm9kZS5uYW1lID09PSAnZW5kJztcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kU3ltYm9scy5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgcmFuZ2UgPSBtYXRoLnJhbmdlO1xuXG4gICAgdmFyIGV2YWxTdGFydCA9IHRoaXMuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxFbmQgPSB0aGlzLmVuZC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgZXZhbFN0ZXAgPSB0aGlzLnN0ZXAuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJhbmdlTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxTdGVwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJhbmdlTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKTtcblxuICAgIGlmICh0aGlzLnN0ZXApIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuc3RlcCwgJ3N0ZXAnLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmFuZ2VOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtSYW5nZU5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKSksIHRoaXMuc3RlcCAmJiB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGVwLCAnc3RlcCcsIHRoaXMpKSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1JhbmdlTm9kZX1cbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKHRoaXMuc3RhcnQsIHRoaXMuZW5kLCB0aGlzLnN0ZXAgJiYgdGhpcy5zdGVwKTtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbmVjZXNzYXJ5IHBhcmVudGhlc2VzXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAgICogQHJldHVybiB7T2JqZWN0fSBwYXJlbnRoZXNlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKG5vZGUsIHBhcmVudGhlc2lzKSB7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHBhcmVucyA9IHt9O1xuICAgIHZhciBzdGFydFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnN0YXJ0LCBwYXJlbnRoZXNpcyk7XG4gICAgcGFyZW5zLnN0YXJ0ID0gc3RhcnRQcmVjZWRlbmNlICE9PSBudWxsICYmIHN0YXJ0UHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcblxuICAgIGlmIChub2RlLnN0ZXApIHtcbiAgICAgIHZhciBzdGVwUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUuc3RlcCwgcGFyZW50aGVzaXMpO1xuICAgICAgcGFyZW5zLnN0ZXAgPSBzdGVwUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBzdGVwUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcbiAgICB9XG5cbiAgICB2YXIgZW5kUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUuZW5kLCBwYXJlbnRoZXNpcyk7XG4gICAgcGFyZW5zLmVuZCA9IGVuZFByZWNlZGVuY2UgIT09IG51bGwgJiYgZW5kUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcbiAgICByZXR1cm4gcGFyZW5zO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHBhcmVucyA9IGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHRoaXMsIHBhcmVudGhlc2lzKTsgLy8gZm9ybWF0IHN0cmluZyBhcyBzdGFydDpzdGVwOnN0b3BcblxuICAgIHZhciBzdHI7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gJygnICsgc3RhcnQgKyAnKSc7XG4gICAgfVxuXG4gICAgc3RyID0gc3RhcnQ7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVucy5zdGVwKSB7XG4gICAgICAgIHN0ZXAgPSAnKCcgKyBzdGVwICsgJyknO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gJzonICsgc3RlcDtcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gdGhpcy5lbmQudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLmVuZCkge1xuICAgICAgZW5kID0gJygnICsgZW5kICsgJyknO1xuICAgIH1cblxuICAgIHN0ciArPSAnOicgKyBlbmQ7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnUmFuZ2VOb2RlJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICAgIHN0ZXA6IHRoaXMuc3RlcFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBSYW5nZU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJhbmdlTm9kZVwiLCBcInN0YXJ0XCI6IC4uLiwgXCJlbmRcIjogLi4uLCBcInN0ZXBcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1JhbmdlTm9kZX1cbiAgICovXG5cblxuICBSYW5nZU5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKGpzb24uc3RhcnQsIGpzb24uZW5kLCBqc29uLnN0ZXApO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMpOyAvLyBmb3JtYXQgc3RyaW5nIGFzIHN0YXJ0OnN0ZXA6c3RvcFxuXG4gICAgdmFyIHN0cjtcbiAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0LnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgc3RhcnQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgc3RyID0gc3RhcnQ7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b0hUTUwob3B0aW9ucyk7XG5cbiAgICAgIGlmIChwYXJlbnMuc3RlcCkge1xuICAgICAgICBzdGVwID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgc3RlcCArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cblxuICAgICAgc3RyICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIHN0ZXA7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kLnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuZW5kKSB7XG4gICAgICBlbmQgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBlbmQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgc3RyICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIGVuZDtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbXMge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHN0ciA9IHRoaXMuc3RhcnQudG9UZXgob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLnN0YXJ0KSB7XG4gICAgICBzdHIgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChzdHIsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVucy5zdGVwKSB7XG4gICAgICAgIHN0ZXAgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChzdGVwLCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSAnOicgKyBzdGVwO1xuICAgIH1cblxuICAgIHZhciBlbmQgPSB0aGlzLmVuZC50b1RleChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuZW5kKSB7XG4gICAgICBlbmQgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChlbmQsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzonICsgZW5kO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgcmV0dXJuIFJhbmdlTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VOb2RlID0gY3JlYXRlUmFuZ2VOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZWxhdGlvbmFsTm9kZSA9IHZvaWQgMDtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUmVsYXRpb25hbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZVJlbGF0aW9uYWxOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEEgbm9kZSByZXByZXNlbnRpbmcgYSBjaGFpbmVkIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24sIHN1Y2ggYXMgJ3ggPiB5ID4geidcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gY29uZGl0aW9uYWxzICAgQW4gYXJyYXkgb2YgY29uZGl0aW9uYWwgb3BlcmF0b3JzIHVzZWQgdG8gY29tcGFyZSB0aGUgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gcGFyYW1zICAgVGhlIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGNvbXBhcmVkXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvciBSZWxhdGlvbmFsTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIFJlbGF0aW9uYWxOb2RlKGNvbmRpdGlvbmFscywgcGFyYW1zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlbGF0aW9uYWxOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZGl0aW9uYWxzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGNvbmRpdGlvbmFscyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBwYXJhbXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIGlmIChjb25kaXRpb25hbHMubGVuZ3RoICE9PSBwYXJhbXMubGVuZ3RoIC0gMSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIHBhcmFtcyBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUgbW9yZSBlbGVtZW50IHRoYW4gcGFyYW1ldGVyIGNvbmRpdGlvbmFscycpO1xuICAgIHRoaXMuY29uZGl0aW9uYWxzID0gY29uZGl0aW9uYWxzO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLnR5cGUgPSAnUmVsYXRpb25hbE5vZGUnO1xuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuaXNSZWxhdGlvbmFsTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY29tcGlsZWQgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBwLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJlbGF0aW9uYWxOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgZXZhbExocztcbiAgICAgIHZhciBldmFsUmhzID0gY29tcGlsZWRbMF0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV2YWxMaHMgPSBldmFsUmhzO1xuICAgICAgICBldmFsUmhzID0gY29tcGlsZWRbaSArIDFdKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGNvbmRGbiA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsIHNlbGYuY29uZGl0aW9uYWxzW2ldKTtcblxuICAgICAgICBpZiAoIWNvbmRGbihldmFsTGhzLCBldmFsUmhzKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhuLCAncGFyYW1zWycgKyBpICsgJ10nLCBfdGhpcyk7XG4gICAgfSwgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmVsYXRpb25hbE5vZGUgaGF2aW5nIGl0cyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UmVsYXRpb25hbE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbmFscy5zbGljZSgpLCB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIHJldHVybiBfdGhpczIuX2lmTm9kZShjYWxsYmFjayhuLCAncGFyYW1zWycgKyBpICsgJ10nLCBfdGhpczIpKTtcbiAgICB9LCB0aGlzKSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1JlbGF0aW9uYWxOb2RlfVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFJlbGF0aW9uYWxOb2RlKHRoaXMuY29uZGl0aW9uYWxzLCB0aGlzLnBhcmFtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKSh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHBhcmFtU3RyaW5ncyA9IHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAocCwgaW5kZXgpIHtcbiAgICAgIHZhciBwYXJhbVByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShwLCBwYXJlbnRoZXNpcyk7XG4gICAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHBhcmFtUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBwYXJhbVByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSA/ICcoJyArIHAudG9TdHJpbmcob3B0aW9ucykgKyAnKScgOiBwLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBvcGVyYXRvck1hcCA9IHtcbiAgICAgIGVxdWFsOiAnPT0nLFxuICAgICAgdW5lcXVhbDogJyE9JyxcbiAgICAgIHNtYWxsZXI6ICc8JyxcbiAgICAgIGxhcmdlcjogJz4nLFxuICAgICAgc21hbGxlckVxOiAnPD0nLFxuICAgICAgbGFyZ2VyRXE6ICc+PSdcbiAgICB9O1xuICAgIHZhciByZXQgPSBwYXJhbVN0cmluZ3NbMF07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQgKz0gJyAnICsgb3BlcmF0b3JNYXBbdGhpcy5jb25kaXRpb25hbHNbaV1dICsgJyAnICsgcGFyYW1TdHJpbmdzW2kgKyAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1JlbGF0aW9uYWxOb2RlJyxcbiAgICAgIGNvbmRpdGlvbmFsczogdGhpcy5jb25kaXRpb25hbHMsXG4gICAgICBwYXJhbXM6IHRoaXMucGFyYW1zXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgUmVsYXRpb25hbE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJlbGF0aW9uYWxOb2RlXCIsIFwiY29uZGl0aW9uXCI6IC4uLiwgXCJ0cnVlRXhwclwiOiAuLi4sIFwiZmFsc2VFeHByXCI6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtSZWxhdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZShqc29uLmNvbmRpdGlvbmFscywganNvbi5wYXJhbXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBwLnRvSFRNTChvcHRpb25zKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JyA6IHAudG9IVE1MKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBvcGVyYXRvck1hcCA9IHtcbiAgICAgIGVxdWFsOiAnPT0nLFxuICAgICAgdW5lcXVhbDogJyE9JyxcbiAgICAgIHNtYWxsZXI6ICc8JyxcbiAgICAgIGxhcmdlcjogJz4nLFxuICAgICAgc21hbGxlckVxOiAnPD0nLFxuICAgICAgbGFyZ2VyRXE6ICc+PSdcbiAgICB9O1xuICAgIHZhciByZXQgPSBwYXJhbVN0cmluZ3NbMF07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQgKz0gJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKG9wZXJhdG9yTWFwW3RoaXMuY29uZGl0aW9uYWxzW2ldXSkgKyAnPC9zcGFuPicgKyBwYXJhbVN0cmluZ3NbaSArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnXFxcXGxlZnQoJyArIHAudG9UZXgob3B0aW9ucykgKyAnXFxyaWdodCknIDogcC50b1RleChvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgcmV0ID0gcGFyYW1TdHJpbmdzWzBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmRpdGlvbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0ICs9IF9sYXRleC5sYXRleE9wZXJhdG9yc1t0aGlzLmNvbmRpdGlvbmFsc1tpXV0gKyBwYXJhbVN0cmluZ3NbaSArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgcmV0dXJuIFJlbGF0aW9uYWxOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZWxhdGlvbmFsTm9kZSA9IGNyZWF0ZVJlbGF0aW9uYWxOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTeW1ib2xOb2RlID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sYXRleCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sYXRleFwiKTtcblxudmFyIG5hbWUgPSAnU3ltYm9sTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoJywgJz9Vbml0JywgJ05vZGUnXTtcbnZhciBjcmVhdGVTeW1ib2xOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsXG4gICAgICBVbml0ID0gX3JlZi5Vbml0LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzb21lIG5hbWUgaXMgYSB2YWx1ZWxlc3MgdW5pdCBsaWtlIFwiaW5jaFwiLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNWYWx1ZWxlc3NVbml0KG5hbWUpIHtcbiAgICByZXR1cm4gVW5pdCA/IFVuaXQuaXNWYWx1ZWxlc3NVbml0KG5hbWUpIDogZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBTeW1ib2xOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBBIHN5bWJvbCBub2RlIGNhbiBob2xkIGFuZCByZXNvbHZlIGEgc3ltYm9sXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIFN5bWJvbE5vZGUobmFtZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0XG5cblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwibmFtZVwiJyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudHlwZSA9ICdTeW1ib2xOb2RlJztcbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuaXNTeW1ib2xOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcblxuICAgIGlmIChhcmdOYW1lc1tuYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gdGhpcyBpcyBhIEZ1bmN0aW9uQXNzaWdubWVudCBhcmd1bWVudFxuICAgICAgLy8gKGxpa2UgYW4geCB3aGVuIGluc2lkZSB0aGUgZXhwcmVzc2lvbiBvZiBhIGZ1bmN0aW9uIGFzc2lnbm1lbnQgYGYoeCkgPSAuLi5gKVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYXJnc1tuYW1lXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChuYW1lIGluIG1hdGgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSkgOiAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCBuYW1lKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1VuaXQgPSBpc1ZhbHVlbGVzc1VuaXQobmFtZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUpIDogaXNVbml0ID8gbmV3IFVuaXQobnVsbCwgbmFtZSkgOiB1bmRlZihuYW1lKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHt9IC8vIG5vdGhpbmcgdG8gZG8sIHdlIGRvbid0IGhhdmUgY2hpbGRzXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBTeW1ib2xOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7U3ltYm9sTm9kZX0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSBub2RlXG4gICAqL1xuICA7XG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRocm93cyBhbiBlcnJvciAnVW5kZWZpbmVkIHN5bWJvbCB7bmFtZX0nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5kZWYobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5kZWZpbmVkIHN5bWJvbCAnICsgbmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7U3ltYm9sTm9kZX1cbiAgICovXG5cblxuICBTeW1ib2xOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbE5vZGUodGhpcy5uYW1lKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgbmFtZSA9ICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5uYW1lKTtcblxuICAgIGlmIChuYW1lID09PSAndHJ1ZScgfHwgbmFtZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtYm9vbGVhblwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2knKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1pbWFnaW5hcnktc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnSW5maW5pdHknKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1pbmZpbml0eS1zeW1ib2xcIj4nICsgbmFtZSArICc8L3NwYW4+JztcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdOYU4nKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1uYW4tc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLW51bGwtc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtdW5kZWZpbmVkLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnU3ltYm9sTm9kZScsXG4gICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBTeW1ib2xOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJTeW1ib2xOb2RlXCIsIG5hbWU6IFwieFwifWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1N5bWJvbE5vZGV9XG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBTeW1ib2xOb2RlKGpzb24ubmFtZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaXNVbml0ID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXSA9PT0gJ3VuZGVmaW5lZCcgJiYgaXNWYWx1ZWxlc3NVbml0KHRoaXMubmFtZSkpIHtcbiAgICAgIGlzVW5pdCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN5bWJvbCA9ICgwLCBfbGF0ZXgudG9TeW1ib2wpKHRoaXMubmFtZSwgaXNVbml0KTtcblxuICAgIGlmIChzeW1ib2xbMF0gPT09ICdcXFxcJykge1xuICAgICAgLy8gbm8gc3BhY2UgbmVlZGVkIGlmIHRoZSBzeW1ib2wgc3RhcnRzIHdpdGggJ1xcJ1xuICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICB9IC8vIHRoZSBzcGFjZSBwcmV2ZW50cyBzeW1ib2xzIGZyb20gYnJlYWtpbmcgc3R1ZmYgbGlrZSAnXFxjZG90JyBpZiBpdCdzIHdyaXR0ZW4gcmlnaHQgYmVmb3JlIHRoZSBzeW1ib2xcblxuXG4gICAgcmV0dXJuICcgJyArIHN5bWJvbDtcbiAgfTtcblxuICByZXR1cm4gU3ltYm9sTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3ltYm9sTm9kZSA9IGNyZWF0ZVN5bWJvbE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjY2Vzc0ZhY3RvcnkgPSBhY2Nlc3NGYWN0b3J5O1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4uLy4uL3RyYW5zZm9ybS91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gYWNjZXNzRmFjdG9yeShfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldDtcblxuICAvKipcbiAgICogUmV0cmlldmUgcGFydCBvZiBhbiBvYmplY3Q6XG4gICAqXG4gICAqIC0gUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICAgKiAtIFJldHJpZXZlIGEgcGFydCBvZiBhIHN0cmluZ1xuICAgKiAtIFJldHJpZXZlIGEgbWF0cml4IHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3RcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHJldHVybiB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXggfCBzdHJpbmd9IFJldHVybnMgdGhlIHN1YnNldFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjY2VzcyhvYmplY3QsIGluZGV4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIHN1YnNldChvYmplY3QsIGluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE1hdHJpeFxuICAgICAgICByZXR1cm4gb2JqZWN0LnN1YnNldChpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFRPRE86IG1vdmUgZ2V0U3RyaW5nU3Vic2V0IGludG8gYSBzZXBhcmF0ZSB1dGlsIGZpbGUsIHVzZSB0aGF0XG4gICAgICAgIHJldHVybiBzdWJzZXQob2JqZWN0LCBpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKCFpbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgYSBudW1lcmljIGluZGV4IGFzIG9iamVjdCBwcm9wZXJ0eScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgaW5kZXg6IHVuc3VwcG9ydGVkIHR5cGUgb2Ygb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNzaWduRmFjdG9yeSA9IGFzc2lnbkZhY3Rvcnk7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi4vLi4vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBhc3NpZ25GYWN0b3J5KF9yZWYpIHtcbiAgdmFyIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgcGFydCBvZiBhbiBvYmplY3Q6XG4gICAqXG4gICAqIC0gQXNzaWduIGEgcHJvcGVydHkgdG8gYW4gb2JqZWN0XG4gICAqIC0gUmVwbGFjZSBhIHBhcnQgb2YgYSBzdHJpbmdcbiAgICogLSBSZXBsYWNlIGEgbWF0cml4IHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3RcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtPYmplY3QgfCBBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gUmV0dXJucyB0aGUgb3JpZ2luYWwgb2JqZWN0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgaW4gY2FzZSBvZiBhIHN0cmluZ1xuICAgKi9cbiAgLy8gVE9ETzogY2hhbmdlIGFzc2lnbiB0byByZXR1cm4gdGhlIHZhbHVlIGluc3RlYWQgb2YgdGhlIG9iamVjdFxuICByZXR1cm4gZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgLy8gd2UgdXNlIG1hdHJpeC5zdWJzZXQgaGVyZSBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBzdWJzZXQgYmVjYXVzZSB3ZSBtdXN0IG5vdCBjbG9uZSB0aGUgY29udGVudHNcbiAgICAgICAgcmV0dXJuIG1hdHJpeChvYmplY3QpLnN1YnNldChpbmRleCwgdmFsdWUpLnZhbHVlT2YoKTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE1hdHJpeFxuICAgICAgICByZXR1cm4gb2JqZWN0LnN1YnNldChpbmRleCwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBUT0RPOiBtb3ZlIHNldFN0cmluZ1N1YnNldCBpbnRvIGEgc2VwYXJhdGUgdXRpbCBmaWxlLCB1c2UgdGhhdFxuICAgICAgICByZXR1cm4gc3Vic2V0KG9iamVjdCwgaW5kZXgsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZihvYmplY3QpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoIWluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGEgbnVtZXJpYyBpbmRleCBhcyBvYmplY3QgcHJvcGVydHknKTtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGluZGV4OiB1bnN1cHBvcnRlZCB0eXBlIG9mIG9iamVjdCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldFByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlO1xuZXhwb3J0cy5nZXRBc3NvY2lhdGl2aXR5ID0gZ2V0QXNzb2NpYXRpdml0eTtcbmV4cG9ydHMuaXNBc3NvY2lhdGl2ZVdpdGggPSBpc0Fzc29jaWF0aXZlV2l0aDtcbmV4cG9ydHMucHJvcGVydGllcyA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG4vLyBsaXN0IG9mIGlkZW50aWZpZXJzIG9mIG5vZGVzIGluIG9yZGVyIG9mIHRoZWlyIHByZWNlZGVuY2Vcbi8vIGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgbGVmdC9yaWdodCBhc3NvY2lhdGl2aXR5XG4vLyBhbmQgd2hpY2ggb3RoZXIgb3BlcmF0b3IgdGhlIG9wZXJhdG9yIGlzIGFzc29jaWF0aXZlIHdpdGhcbi8vIEV4YW1wbGU6XG4vLyBhZGRpdGlvbiBpcyBhc3NvY2lhdGl2ZSB3aXRoIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiwgYmVjYXVzZTpcbi8vIChhK2IpK2M9YSsoYitjKVxuLy8gKGErYiktYz1hKyhiLWMpXG4vL1xuLy8gcG9zdGZpeCBvcGVyYXRvcnMgYXJlIGxlZnQgYXNzb2NpYXRpdmUsIHByZWZpeCBvcGVyYXRvcnNcbi8vIGFyZSByaWdodCBhc3NvY2lhdGl2ZVxuLy9cbi8vIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuLy8gbGF0ZXhQYXJlbnM6IGlmIHNldCB0byBmYWxzZSwgdGhpcyBub2RlIGRvZXNuJ3QgbmVlZCB0byBiZSBlbmNsb3NlZFxuLy8gICAgICAgICAgICAgIGluIHBhcmVudGhlc2VzIHdoZW4gdXNpbmcgTGFUZVhcbi8vIGxhdGV4TGVmdFBhcmVuczogaWYgc2V0IHRvIGZhbHNlLCB0aGlzICFPcGVyYXRvck5vZGUncyFcbi8vICAgICAgICAgICAgICAgICAgbGVmdCBhcmd1bWVudCBkb2Vzbid0IG5lZWQgdG8gYmUgZW5jbG9zZWRcbi8vICAgICAgICAgICAgICAgICAgaW4gcGFyZW50aGVzZXNcbi8vIGxhdGV4UmlnaHRQYXJlbnM6IHRoZSBzYW1lIGZvciB0aGUgcmlnaHQgYXJndW1lbnRcbnZhciBwcm9wZXJ0aWVzID0gW3tcbiAgLy8gYXNzaWdubWVudFxuICBBc3NpZ25tZW50Tm9kZToge30sXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IHt9XG59LCB7XG4gIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cbiAgQ29uZGl0aW9uYWxOb2RlOiB7XG4gICAgbGF0ZXhMZWZ0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gY29uZGl0aW9uYWxzIGRvbid0IG5lZWQgcGFyZW50aGVzZXMgaW4gTGFUZVggYmVjYXVzZVxuICAgIC8vIHRoZXkgYXJlIDIgZGltZW5zaW9uYWxcblxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgb3JcbiAgJ09wZXJhdG9yTm9kZTpvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgeG9yXG4gICdPcGVyYXRvck5vZGU6eG9yJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gbG9naWNhbCBhbmRcbiAgJ09wZXJhdG9yTm9kZTphbmQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIG9yXG4gICdPcGVyYXRvck5vZGU6Yml0T3InOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIHhvclxuICAnT3BlcmF0b3JOb2RlOmJpdFhvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGJpdHdpc2UgYW5kXG4gICdPcGVyYXRvck5vZGU6Yml0QW5kJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gcmVsYXRpb25hbCBvcGVyYXRvcnNcbiAgJ09wZXJhdG9yTm9kZTplcXVhbCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnVuZXF1YWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpzbWFsbGVyJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bGFyZ2VyJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6c21hbGxlckVxJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bGFyZ2VyRXEnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgUmVsYXRpb25hbE5vZGU6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGJpdHNoaWZ0IG9wZXJhdG9yc1xuICAnT3BlcmF0b3JOb2RlOmxlZnRTaGlmdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnJpZ2h0QXJpdGhTaGlmdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnJpZ2h0TG9nU2hpZnQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyB1bml0IGNvbnZlcnNpb25cbiAgJ09wZXJhdG9yTm9kZTp0byc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIHJhbmdlXG4gIFJhbmdlTm9kZToge31cbn0sIHtcbiAgLy8gYWRkaXRpb24sIHN1YnRyYWN0aW9uXG4gICdPcGVyYXRvck5vZGU6YWRkJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOmFkZCcsICdPcGVyYXRvck5vZGU6c3VidHJhY3QnXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnN1YnRyYWN0Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gbXVsdGlwbHksIGRpdmlkZSwgbW9kdWx1c1xuICAnT3BlcmF0b3JOb2RlOm11bHRpcGx5Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOm11bHRpcGx5JywgJ09wZXJhdG9yTm9kZTpkaXZpZGUnLCAnT3BlcmF0b3I6ZG90TXVsdGlwbHknLCAnT3BlcmF0b3I6ZG90RGl2aWRlJ11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW10sXG4gICAgbGF0ZXhMZWZ0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gZnJhY3Rpb25zIGRvbid0IHJlcXVpcmUgcGFyZW50aGVzZXMgYmVjYXVzZVxuICAgIC8vIHRoZXkncmUgMiBkaW1lbnNpb25hbCwgc28gcGFyZW5zIGFyZW4ndCBuZWVkZWRcbiAgICAvLyBpbiBMYVRlWFxuXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHknOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogWydPcGVyYXRvck5vZGU6bXVsdGlwbHknLCAnT3BlcmF0b3JOb2RlOmRpdmlkZScsICdPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHknLCAnT3BlcmF0b3JOb2RlOmRvRGl2aWRlJ11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkb3REaXZpZGUnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTptb2QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyB1bmFyeSBwcmVmaXggb3BlcmF0b3JzXG4gICdPcGVyYXRvck5vZGU6dW5hcnlQbHVzJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTp1bmFyeU1pbnVzJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpiaXROb3QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0J1xuICB9LFxuICAnT3BlcmF0b3JOb2RlOm5vdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnXG4gIH1cbn0sIHtcbiAgLy8gZXhwb25lbnRpYXRpb25cbiAgJ09wZXJhdG9yTm9kZTpwb3cnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdLFxuICAgIGxhdGV4UmlnaHRQYXJlbnM6IGZhbHNlIC8vIHRoZSBleHBvbmVudCBkb2Vzbid0IG5lZWQgcGFyZW50aGVzZXMgaW5cbiAgICAvLyBMYVRlWCBiZWNhdXNlIGl0J3MgMiBkaW1lbnNpb25hbFxuICAgIC8vIChpdCdzIG9uIHRvcClcblxuICB9LFxuICAnT3BlcmF0b3JOb2RlOmRvdFBvdyc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBmYWN0b3JpYWxcbiAgJ09wZXJhdG9yTm9kZTpmYWN0b3JpYWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnXG4gIH1cbn0sIHtcbiAgLy8gbWF0cml4IHRyYW5zcG9zZVxuICAnT3BlcmF0b3JOb2RlOnRyYW5zcG9zZSc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCdcbiAgfVxufV07XG4vKipcbiAqIEdldCB0aGUgcHJlY2VkZW5jZSBvZiBhIE5vZGUuXG4gKiBIaWdoZXIgbnVtYmVyIGZvciBoaWdoZXIgcHJlY2VkZW5jZSwgc3RhcnRpbmcgd2l0aCAwLlxuICogUmV0dXJucyBudWxsIGlmIHRoZSBwcmVjZWRlbmNlIGlzIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IF9ub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAqIEByZXR1cm4ge251bWJlciB8IG51bGx9XG4gKi9cblxuZXhwb3J0cy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcblxuZnVuY3Rpb24gZ2V0UHJlY2VkZW5jZShfbm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgdmFyIG5vZGUgPSBfbm9kZTtcblxuICBpZiAocGFyZW50aGVzaXMgIT09ICdrZWVwJykge1xuICAgIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICAgIG5vZGUgPSBfbm9kZS5nZXRDb250ZW50KCk7XG4gIH1cblxuICB2YXIgaWRlbnRpZmllciA9IG5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpZGVudGlmaWVyIGluIHByb3BlcnRpZXNbaV0pIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHZXQgdGhlIGFzc29jaWF0aXZpdHkgb2YgYW4gb3BlcmF0b3IgKGxlZnQgb3IgcmlnaHQpLlxuICogUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nICdsZWZ0JyBvciAncmlnaHQnIG9yIG51bGwgaWZcbiAqIHRoZSBhc3NvY2lhdGl2aXR5IGlzIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX1cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICogQHJldHVybiB7c3RyaW5nfG51bGx9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEFzc29jaWF0aXZpdHkoX25vZGUsIHBhcmVudGhlc2lzKSB7XG4gIHZhciBub2RlID0gX25vZGU7XG5cbiAgaWYgKHBhcmVudGhlc2lzICE9PSAna2VlcCcpIHtcbiAgICAvLyBQYXJlbnRoZXNpc05vZGVzIGFyZSBvbmx5IGlnbm9yZWQgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICBub2RlID0gX25vZGUuZ2V0Q29udGVudCgpO1xuICB9XG5cbiAgdmFyIGlkZW50aWZpZXIgPSBub2RlLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGluZGV4ID0gZ2V0UHJlY2VkZW5jZShub2RlLCBwYXJlbnRoZXNpcyk7XG5cbiAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgLy8gbm9kZSBpc24ndCBpbiB0aGUgbGlzdFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpbmRleF1baWRlbnRpZmllcl07XG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShwcm9wZXJ0eSwgJ2Fzc29jaWF0aXZpdHknKSkge1xuICAgIGlmIChwcm9wZXJ0eS5hc3NvY2lhdGl2aXR5ID09PSAnbGVmdCcpIHtcbiAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5LmFzc29jaWF0aXZpdHkgPT09ICdyaWdodCcpIHtcbiAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH0gLy8gYXNzb2NpYXRpdml0eSBpcyBpbnZhbGlkXG5cblxuICAgIHRocm93IEVycm9yKCdcXCcnICsgaWRlbnRpZmllciArICdcXCcgaGFzIHRoZSBpbnZhbGlkIGFzc29jaWF0aXZpdHkgXFwnJyArIHByb3BlcnR5LmFzc29jaWF0aXZpdHkgKyAnXFwnLicpO1xuICB9IC8vIGFzc29jaWF0aXZpdHkgaXMgdW5kZWZpbmVkXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYW4gb3BlcmF0b3IgaXMgYXNzb2NpYXRpdmUgd2l0aCBhbm90aGVyIG9wZXJhdG9yLlxuICogUmV0dXJucyBlaXRoZXIgdHJ1ZSBvciBmYWxzZSBvciBudWxsIGlmIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUFcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICogQHJldHVybiB7Ym9vbGVhbiB8IG51bGx9XG4gKi9cblxuXG5mdW5jdGlvbiBpc0Fzc29jaWF0aXZlV2l0aChub2RlQSwgbm9kZUIsIHBhcmVudGhlc2lzKSB7XG4gIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICB2YXIgYSA9IHBhcmVudGhlc2lzICE9PSAna2VlcCcgPyBub2RlQS5nZXRDb250ZW50KCkgOiBub2RlQTtcbiAgdmFyIGIgPSBwYXJlbnRoZXNpcyAhPT0gJ2tlZXAnID8gbm9kZUEuZ2V0Q29udGVudCgpIDogbm9kZUI7XG4gIHZhciBpZGVudGlmaWVyQSA9IGEuZ2V0SWRlbnRpZmllcigpO1xuICB2YXIgaWRlbnRpZmllckIgPSBiLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGluZGV4ID0gZ2V0UHJlY2VkZW5jZShhLCBwYXJlbnRoZXNpcyk7XG5cbiAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgLy8gbm9kZSBpc24ndCBpbiB0aGUgbGlzdFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpbmRleF1baWRlbnRpZmllckFdO1xuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkocHJvcGVydHksICdhc3NvY2lhdGl2ZVdpdGgnKSAmJiBwcm9wZXJ0eS5hc3NvY2lhdGl2ZVdpdGggaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoW2ldID09PSBpZGVudGlmaWVyQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gYXNzb2NpYXRpdmVXaXRoIGlzIG5vdCBkZWZpbmVkXG5cblxuICByZXR1cm4gbnVsbDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG52YXIgbmFtZSA9ICdwYXJzZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdudW1lcmljJywgJ2NvbmZpZycsICdBY2Nlc3Nvck5vZGUnLCAnQXJyYXlOb2RlJywgJ0Fzc2lnbm1lbnROb2RlJywgJ0Jsb2NrTm9kZScsICdDb25kaXRpb25hbE5vZGUnLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ0luZGV4Tm9kZScsICdPYmplY3ROb2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnUmFuZ2VOb2RlJywgJ1JlbGF0aW9uYWxOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVQYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBBY2Nlc3Nvck5vZGUgPSBfcmVmLkFjY2Vzc29yTm9kZSxcbiAgICAgIEFycmF5Tm9kZSA9IF9yZWYuQXJyYXlOb2RlLFxuICAgICAgQXNzaWdubWVudE5vZGUgPSBfcmVmLkFzc2lnbm1lbnROb2RlLFxuICAgICAgQmxvY2tOb2RlID0gX3JlZi5CbG9ja05vZGUsXG4gICAgICBDb25kaXRpb25hbE5vZGUgPSBfcmVmLkNvbmRpdGlvbmFsTm9kZSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IF9yZWYuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLFxuICAgICAgSW5kZXhOb2RlID0gX3JlZi5JbmRleE5vZGUsXG4gICAgICBPYmplY3ROb2RlID0gX3JlZi5PYmplY3ROb2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZSxcbiAgICAgIFJhbmdlTm9kZSA9IF9yZWYuUmFuZ2VOb2RlLFxuICAgICAgUmVsYXRpb25hbE5vZGUgPSBfcmVmLlJlbGF0aW9uYWxOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbi4gUmV0dXJucyBhIG5vZGUgdHJlZSwgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCBieVxuICAgKiBpbnZva2luZyBub2RlLmV2YWx1YXRlKCkuXG4gICAqXG4gICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLFxuICAgKiBzZWUgW2h0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWxdKGh0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnBhcnNlKGV4cHIpXG4gICAqICAgICBtYXRoLnBhcnNlKGV4cHIsIG9wdGlvbnMpXG4gICAqICAgICBtYXRoLnBhcnNlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKVxuICAgKiAgICAgbWF0aC5wYXJzZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSwgb3B0aW9ucylcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogICAgIGNvbnN0IG5vZGUxID0gbWF0aC5wYXJzZSgnc3FydCgzXjIgKyA0XjIpJylcbiAgICogICAgIG5vZGUxLmNvbXBpbGUoKS5ldmFsdWF0ZSgpIC8vIDVcbiAgICpcbiAgICogICAgIGxldCBzY29wZSA9IHthOjMsIGI6NH1cbiAgICogICAgIGNvbnN0IG5vZGUyID0gbWF0aC5wYXJzZSgnYSAqIGInKSAvLyAxMlxuICAgKiAgICAgY29uc3QgY29kZTIgPSBub2RlMi5jb21waWxlKClcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAxMlxuICAgKiAgICAgc2NvcGUuYSA9IDVcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAyMFxuICAgKlxuICAgKiAgICAgY29uc3Qgbm9kZXMgPSBtYXRoLnBhcnNlKFsnYSA9IDMnLCAnYiA9IDQnLCAnYSAqIGInXSlcbiAgICogICAgIG5vZGVzWzJdLmNvbXBpbGUoKS5ldmFsdWF0ZSgpIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZXZhbHVhdGUsIGNvbXBpbGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IE1hdHJpeH0gZXhwciAgICAgICAgICBFeHByZXNzaW9uIHRvIGJlIHBhcnNlZFxuICAgKiBAcGFyYW0ge3tub2RlczogT2JqZWN0PHN0cmluZywgTm9kZT59fSBbb3B0aW9uc10gIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYG5vZGVzYCBhIHNldCBvZiBjdXN0b20gbm9kZXNcbiAgICogQHJldHVybiB7Tm9kZSB8IE5vZGVbXX0gbm9kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIHZhciBwYXJzZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChleHByZXNzaW9uLCB7fSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByZXNzaW9ucykge1xuICAgICAgcmV0dXJuIHBhcnNlTXVsdGlwbGUoZXhwcmVzc2lvbnMsIHt9KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ09iamVjdChleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZXh0cmFOb2RlcyA9IG9wdGlvbnMubm9kZXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubm9kZXMgOiB7fTtcbiAgICAgIHJldHVybiBwYXJzZVN0YXJ0KGV4cHJlc3Npb24sIGV4dHJhTm9kZXMpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBPYmplY3QnOiBwYXJzZU11bHRpcGxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHBhcnNlTXVsdGlwbGUoZXhwcmVzc2lvbnMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIGV4dHJhTm9kZXMgPSBvcHRpb25zLm5vZGVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5vZGVzIDoge307IC8vIHBhcnNlIGFuIGFycmF5IG9yIG1hdHJpeCB3aXRoIGV4cHJlc3Npb25zXG5cbiAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHJlc3Npb25zLCBmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgaWYgKHR5cGVvZiBlbGVtICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChlbGVtLCBleHRyYU5vZGVzKTtcbiAgICB9KTtcbiAgfSAvLyB0b2tlbiB0eXBlcyBlbnVtZXJhdGlvblxuXG5cbiAgdmFyIFRPS0VOVFlQRSA9IHtcbiAgICBOVUxMOiAwLFxuICAgIERFTElNSVRFUjogMSxcbiAgICBOVU1CRVI6IDIsXG4gICAgU1lNQk9MOiAzLFxuICAgIFVOS05PV046IDRcbiAgfTsgLy8gbWFwIHdpdGggYWxsIGRlbGltaXRlcnNcblxuICB2YXIgREVMSU1JVEVSUyA9IHtcbiAgICAnLCc6IHRydWUsXG4gICAgJygnOiB0cnVlLFxuICAgICcpJzogdHJ1ZSxcbiAgICAnWyc6IHRydWUsXG4gICAgJ10nOiB0cnVlLFxuICAgICd7JzogdHJ1ZSxcbiAgICAnfSc6IHRydWUsXG4gICAgJ1wiJzogdHJ1ZSxcbiAgICAnXFwnJzogdHJ1ZSxcbiAgICAnOyc6IHRydWUsXG4gICAgJysnOiB0cnVlLFxuICAgICctJzogdHJ1ZSxcbiAgICAnKic6IHRydWUsXG4gICAgJy4qJzogdHJ1ZSxcbiAgICAnLyc6IHRydWUsXG4gICAgJy4vJzogdHJ1ZSxcbiAgICAnJSc6IHRydWUsXG4gICAgJ14nOiB0cnVlLFxuICAgICcuXic6IHRydWUsXG4gICAgJ34nOiB0cnVlLFxuICAgICchJzogdHJ1ZSxcbiAgICAnJic6IHRydWUsXG4gICAgJ3wnOiB0cnVlLFxuICAgICdefCc6IHRydWUsXG4gICAgJz0nOiB0cnVlLFxuICAgICc6JzogdHJ1ZSxcbiAgICAnPyc6IHRydWUsXG4gICAgJz09JzogdHJ1ZSxcbiAgICAnIT0nOiB0cnVlLFxuICAgICc8JzogdHJ1ZSxcbiAgICAnPic6IHRydWUsXG4gICAgJzw9JzogdHJ1ZSxcbiAgICAnPj0nOiB0cnVlLFxuICAgICc8PCc6IHRydWUsXG4gICAgJz4+JzogdHJ1ZSxcbiAgICAnPj4+JzogdHJ1ZVxuICB9OyAvLyBtYXAgd2l0aCBhbGwgbmFtZWQgZGVsaW1pdGVyc1xuXG4gIHZhciBOQU1FRF9ERUxJTUlURVJTID0ge1xuICAgIG1vZDogdHJ1ZSxcbiAgICB0bzogdHJ1ZSxcbiAgICBcImluXCI6IHRydWUsXG4gICAgYW5kOiB0cnVlLFxuICAgIHhvcjogdHJ1ZSxcbiAgICBvcjogdHJ1ZSxcbiAgICBub3Q6IHRydWVcbiAgfTtcbiAgdmFyIENPTlNUQU5UUyA9IHtcbiAgICBcInRydWVcIjogdHJ1ZSxcbiAgICBcImZhbHNlXCI6IGZhbHNlLFxuICAgIFwibnVsbFwiOiBudWxsLFxuICAgIHVuZGVmaW5lZDogdW5kZWZpbmVkXG4gIH07XG4gIHZhciBOVU1FUklDX0NPTlNUQU5UUyA9IFsnTmFOJywgJ0luZmluaXR5J107XG5cbiAgZnVuY3Rpb24gaW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBleHRyYU5vZGVzOiB7fSxcbiAgICAgIC8vIGN1cnJlbnQgZXh0cmEgbm9kZXMsIG11c3QgYmUgY2FyZWZ1bCBub3QgdG8gbXV0YXRlXG4gICAgICBleHByZXNzaW9uOiAnJyxcbiAgICAgIC8vIGN1cnJlbnQgZXhwcmVzc2lvblxuICAgICAgY29tbWVudDogJycsXG4gICAgICAvLyBsYXN0IHBhcnNlZCBjb21tZW50XG4gICAgICBpbmRleDogMCxcbiAgICAgIC8vIGN1cnJlbnQgaW5kZXggaW4gZXhwclxuICAgICAgdG9rZW46ICcnLFxuICAgICAgLy8gY3VycmVudCB0b2tlblxuICAgICAgdG9rZW5UeXBlOiBUT0tFTlRZUEUuTlVMTCxcbiAgICAgIC8vIHR5cGUgb2YgdGhlIHRva2VuXG4gICAgICBuZXN0aW5nTGV2ZWw6IDAsXG4gICAgICAvLyBsZXZlbCBvZiBuZXN0aW5nIGluc2lkZSBwYXJhbWV0ZXJzLCB1c2VkIHRvIGlnbm9yZSBuZXdsaW5lIGNoYXJhY3RlcnNcbiAgICAgIGNvbmRpdGlvbmFsTGV2ZWw6IG51bGwgLy8gd2hlbiBhIGNvbmRpdGlvbmFsIGlzIGJlaW5nIHBhcnNlZCwgdGhlIGxldmVsIG9mIHRoZSBjb25kaXRpb25hbCBpcyBzdG9yZWQgaGVyZVxuXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogVmlldyB1cHRvIGBsZW5ndGhgIGNoYXJhY3RlcnMgb2YgdGhlIGV4cHJlc3Npb24gc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MV0gTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gdmlld1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGN1cnJlbnRTdHJpbmcoc3RhdGUsIGxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLnN1YnN0cihzdGF0ZS5pbmRleCwgbGVuZ3RoKTtcbiAgfVxuICAvKipcbiAgICogVmlldyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuIFJldHVybnMgJycgaWYgZW5kIG9mIGV4cHJlc3Npb24gaXMgcmVhY2hlZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3VycmVudENoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBjdXJyZW50U3RyaW5nKHN0YXRlLCAxKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24gaXNcbiAgICogcmVhY2hlZCwgdGhlIGZ1bmN0aW9uIHB1dHMgYW4gZW1wdHkgc3RyaW5nIGluIGMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmV4dChzdGF0ZSkge1xuICAgIHN0YXRlLmluZGV4Kys7XG4gIH1cbiAgLyoqXG4gICAqIFByZXZpZXcgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcHJldkNoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCAtIDEpO1xuICB9XG4gIC8qKlxuICAgKiBQcmV2aWV3IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmV4dENoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCArIDEpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgbmV4dCB0b2tlbiBpbiB0aGUgY3VycmVudCBzdHJpbmcgZXhwci5cbiAgICogVGhlIHRva2VuIGFuZCB0b2tlbiB0eXBlIGFyZSBhdmFpbGFibGUgYXMgdG9rZW4gYW5kIHRva2VuVHlwZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFRva2VuKHN0YXRlKSB7XG4gICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7XG4gICAgc3RhdGUudG9rZW4gPSAnJztcbiAgICBzdGF0ZS5jb21tZW50ID0gJyc7IC8vIHNraXAgb3ZlciB3aGl0ZXNwYWNlc1xuICAgIC8vIHNwYWNlLCB0YWIsIGFuZCBuZXdsaW5lIHdoZW4gaW5zaWRlIHBhcmFtZXRlcnNcblxuICAgIHdoaWxlIChwYXJzZS5pc1doaXRlc3BhY2UoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIHN0YXRlLm5lc3RpbmdMZXZlbCkpIHtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH0gLy8gc2tpcCBjb21tZW50XG5cblxuICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJyMnKSB7XG4gICAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcXG4nICYmIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJykge1xuICAgICAgICBzdGF0ZS5jb21tZW50ICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIH1cbiAgICB9IC8vIGNoZWNrIGZvciBlbmQgb2YgZXhwcmVzc2lvblxuXG5cbiAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcnKSB7XG4gICAgICAvLyB0b2tlbiBpcyBzdGlsbCBlbXB0eVxuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciBuZXcgbGluZSBjaGFyYWN0ZXJcblxuXG4gICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxuJyAmJiAhc3RhdGUubmVzdGluZ0xldmVsKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgc3RhdGUudG9rZW4gPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjMSA9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgIHZhciBjMiA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDIpO1xuICAgIHZhciBjMyA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDMpO1xuXG4gICAgaWYgKGMzLmxlbmd0aCA9PT0gMyAmJiBERUxJTUlURVJTW2MzXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzM7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDIgY2hhcmFjdGVyc1xuXG5cbiAgICBpZiAoYzIubGVuZ3RoID09PSAyICYmIERFTElNSVRFUlNbYzJdKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgc3RhdGUudG9rZW4gPSBjMjtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDEgY2hhcmFjdGVyXG5cblxuICAgIGlmIChERUxJTUlURVJTW2MxXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzE7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciBhIG51bWJlclxuXG5cbiAgICBpZiAocGFyc2UuaXNEaWdpdERvdChjMSkpIHtcbiAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5OVU1CRVI7IC8vIGdldCBudW1iZXIsIGNhbiBoYXZlIGEgc2luZ2xlIGRvdFxuXG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG5cbiAgICAgICAgaWYgKCFwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm8gbnVtYmVyLCBpdCBpcyBqdXN0IGEgZG90IChjYW4gYmUgZG90IG5vdGF0aW9uKVxuICAgICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlLmlzRGVjaW1hbE1hcmsoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9IC8vIGNoZWNrIGZvciBleHBvbmVudGlhbCBub3RhdGlvbiBsaWtlIFwiMi4zZS00XCIsIFwiMS4yM2U1MFwiIG9yIFwiMmUrNFwiXG5cblxuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnRScgfHwgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICdlJykge1xuICAgICAgICBpZiAocGFyc2UuaXNEaWdpdChuZXh0Q2hhcmFjdGVyKHN0YXRlKSkgfHwgbmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICctJyB8fCBuZXh0Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJysnKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgbmV4dChzdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcrJyB8fCBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICAgIH0gLy8gU2NpZW50aWZpYyBub3RhdGlvbiBNVVNUIGJlIGZvbGxvd2VkIGJ5IGFuIGV4cG9uZW50XG5cblxuICAgICAgICAgIGlmICghcGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCBcIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyc2UuaXNEZWNpbWFsTWFyayhjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0RpZ2l0IGV4cGVjdGVkLCBnb3QgXCInICsgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgKyAnXCInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykge1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCBcIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICdcIicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgbmFtZWQgb3BlcmF0b3JzXG5cblxuICAgIGlmIChwYXJzZS5pc0FscGhhKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpLCBwcmV2Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICB3aGlsZSAocGFyc2UuaXNBbHBoYShjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgcHJldkNoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSB8fCBwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoTkFNRURfREVMSU1JVEVSUywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuU1lNQk9MO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBzb21ldGhpbmcgdW5rbm93biBpcyBmb3VuZCwgd3JvbmcgY2hhcmFjdGVycyAtPiBhIHN5bnRheCBlcnJvclxuXG5cbiAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuVU5LTk9XTjtcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycpIHtcbiAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdTeW50YXggZXJyb3IgaW4gcGFydCBcIicgKyBzdGF0ZS50b2tlbiArICdcIicpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgbmV4dCB0b2tlbiBhbmQgc2tpcCBuZXdsaW5lIHRva2Vuc1xuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpIHtcbiAgICBkbyB7XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcXG4nKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG5cbiAgfVxuICAvKipcbiAgICogT3BlbiBwYXJhbWV0ZXJzLlxuICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCBjbG9zZVBhcmFtcyhzdGF0ZSkgaXMgY2FsbGVkXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gb3BlblBhcmFtcyhzdGF0ZSkge1xuICAgIHN0YXRlLm5lc3RpbmdMZXZlbCsrO1xuICB9XG4gIC8qKlxuICAgKiBDbG9zZSBwYXJhbWV0ZXJzLlxuICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgbm8gbG9uZ2VyIGJlIGlnbm9yZWRcbiAgICovXG5cblxuICBmdW5jdGlvbiBjbG9zZVBhcmFtcyhzdGF0ZSkge1xuICAgIHN0YXRlLm5lc3RpbmdMZXZlbC0tO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYGNgIGlzIGEgdmFsaWQgYWxwaGEgY2hhcmFjdGVyOlxuICAgKlxuICAgKiAtIEEgbGF0aW4gbGV0dGVyICh1cHBlciBvciBsb3dlciBjYXNlKSBBc2NpaTogYS16LCBBLVpcbiAgICogLSBBbiB1bmRlcnNjb3JlICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6IF9cbiAgICogLSBBIGRvbGxhciBzaWduICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6ICRcbiAgICogLSBBIGxhdGluIGxldHRlciB3aXRoIGFjY2VudHMgICAgICAgICAgVW5pY29kZTogXFx1MDBDMCAtIFxcdTAyQUZcbiAgICogLSBBIGdyZWVrIGxldHRlciAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZTogXFx1MDM3MCAtIFxcdTAzRkZcbiAgICogLSBBIG1hdGhlbWF0aWNhbCBhbHBoYW51bWVyaWMgc3ltYm9sICAgVW5pY29kZTogXFx1ezFENDAwfSAtIFxcdXsxRDdGRn0gZXhjbHVkaW5nIGludmFsaWQgY29kZSBwb2ludHNcbiAgICpcbiAgICogVGhlIHByZXZpb3VzIGFuZCBuZXh0IGNoYXJhY3RlcnMgYXJlIG5lZWRlZCB0byBkZXRlcm1pbmUgd2hldGhlclxuICAgKiB0aGlzIGNoYXJhY3RlciBpcyBwYXJ0IG9mIGEgdW5pY29kZSBzdXJyb2dhdGUgcGFpci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGMgICAgICBDdXJyZW50IGNoYXJhY3RlciBpbiB0aGUgZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY1ByZXYgIFByZXZpb3VzIGNoYXJhY3RlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY05leHQgIE5leHQgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNBbHBoYSA9IGZ1bmN0aW9uIGlzQWxwaGEoYywgY1ByZXYsIGNOZXh0KSB7XG4gICAgcmV0dXJuIHBhcnNlLmlzVmFsaWRMYXRpbk9yR3JlZWsoYykgfHwgcGFyc2UuaXNWYWxpZE1hdGhTeW1ib2woYywgY05leHQpIHx8IHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sKGNQcmV2LCBjKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGNoYXJhY3RlciBpcyBhIHZhbGlkIGxhdGluLCBncmVlaywgb3IgbGV0dGVyLWxpa2UgY2hhcmFjdGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNWYWxpZExhdGluT3JHcmVlayA9IGZ1bmN0aW9uIGlzVmFsaWRMYXRpbk9yR3JlZWsoYykge1xuICAgIHJldHVybiAvXlthLXpBLVpfJFxcdTAwQzAtXFx1MDJBRlxcdTAzNzAtXFx1MDNGRlxcdTIxMDAtXFx1MjE0Rl0kLy50ZXN0KGMpO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byBnaXZlbiAxNiBiaXQgY2hhcmFjdGVycyBmb3JtIGEgc3Vycm9nYXRlIHBhaXIgb2YgYVxuICAgKiB1bmljb2RlIG1hdGggc3ltYm9sLlxuICAgKlxuICAgKiBodHRwczovL3VuaWNvZGUtdGFibGUuY29tL2VuL1xuICAgKiBodHRwczovL3d3dy53aWtpd2FuZC5jb20vZW4vTWF0aGVtYXRpY2FsX29wZXJhdG9yc19hbmRfc3ltYm9sc19pbl9Vbmljb2RlXG4gICAqXG4gICAqIE5vdGU6IEluIEVTNiB3aWxsIGJlIHVuaWNvZGUgYXdhcmU6XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI4MDcxMi9qYXZhc2NyaXB0LXVuaWNvZGUtcmVnZXhlc1xuICAgKiBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvZXM2LXVuaWNvZGUtcmVnZXhcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhpZ2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvd1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sID0gZnVuY3Rpb24gaXNWYWxpZE1hdGhTeW1ib2woaGlnaCwgbG93KSB7XG4gICAgcmV0dXJuIC9eW1xcdUQ4MzVdJC8udGVzdChoaWdoKSAmJiAvXltcXHVEQzAwLVxcdURGRkZdJC8udGVzdChsb3cpICYmIC9eW15cXHVEQzU1XFx1REM5RFxcdURDQTBcXHVEQ0ExXFx1RENBM1xcdURDQTRcXHVEQ0E3XFx1RENBOFxcdURDQURcXHVEQ0JBXFx1RENCQ1xcdURDQzRcXHVERDA2XFx1REQwQlxcdUREMENcXHVERDE1XFx1REQxRFxcdUREM0FcXHVERDNGXFx1REQ0NVxcdURENDctXFx1REQ0OVxcdURENTFcXHVERUE2XFx1REVBN1xcdURGQ0NcXHVERkNEXSQvLnRlc3QobG93KTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgZ2l2ZW4gY2hhcmFjdGVyIGMgaXMgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXI6IHNwYWNlLCB0YWIsIG9yIGVudGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXN0aW5nTGV2ZWxcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBwYXJzZS5pc1doaXRlc3BhY2UgPSBmdW5jdGlvbiBpc1doaXRlc3BhY2UoYywgbmVzdGluZ0xldmVsKSB7XG4gICAgLy8gVE9ETzogYWxzbyB0YWtlICdcXHInIGNhcnJpYWdlIHJldHVybiBhcyBuZXdsaW5lPyBPciBkb2VzIHRoYXQgZ2l2ZSBwcm9ibGVtcyBvbiBtYWM/XG4gICAgcmV0dXJuIGMgPT09ICcgJyB8fCBjID09PSAnXFx0JyB8fCBjID09PSAnXFxuJyAmJiBuZXN0aW5nTGV2ZWwgPiAwO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgYyBpcyBhIGRlY2ltYWwgbWFyayAoZG90KS5cbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGl0J3Mgbm90IHRoZSBzdGFydCBvZiBhIGRlbGltaXRlciAnLionLCAnLi8nLCBvciAnLl4nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjTmV4dFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzRGVjaW1hbE1hcmsgPSBmdW5jdGlvbiBpc0RlY2ltYWxNYXJrKGMsIGNOZXh0KSB7XG4gICAgcmV0dXJuIGMgPT09ICcuJyAmJiBjTmV4dCAhPT0gJy8nICYmIGNOZXh0ICE9PSAnKicgJiYgY05leHQgIT09ICdeJztcbiAgfTtcbiAgLyoqXG4gICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gY2hhciBjIGlzIGEgZGlnaXQgb3IgZG90XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNEaWdpdERvdCA9IGZ1bmN0aW9uIGlzRGlnaXREb3QoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCBjID09PSAnLic7XG4gIH07XG4gIC8qKlxuICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIGNoYXIgYyBpcyBhIGRpZ2l0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNEaWdpdCA9IGZ1bmN0aW9uIGlzRGlnaXQoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JztcbiAgfTtcbiAgLyoqXG4gICAqIFN0YXJ0IG9mIHRoZSBwYXJzZSBsZXZlbHMgYmVsb3csIGluIG9yZGVyIG9mIHByZWNlZGVuY2VcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlU3RhcnQoZXhwcmVzc2lvbiwgZXh0cmFOb2Rlcykge1xuICAgIHZhciBzdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuXG4gICAgX2V4dGVuZHMoc3RhdGUsIHtcbiAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sXG4gICAgICBleHRyYU5vZGVzOiBleHRyYU5vZGVzXG4gICAgfSk7XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJsb2NrKHN0YXRlKTsgLy8gY2hlY2sgZm9yIGdhcmJhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgZXhwcmVzc2lvblxuICAgIC8vIGFuIGV4cHJlc3Npb24gZW5kcyB3aXRoIGEgZW1wdHkgY2hhcmFjdGVyICcnIGFuZCB0b2tlblR5cGUgREVMSU1JVEVSXG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcnKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSKSB7XG4gICAgICAgIC8vIHVzZXIgZW50ZXJlZCBhIG5vdCBleGlzdGluZyBvcGVyYXRvciBsaWtlIFwiLy9cIlxuICAgICAgICAvLyBUT0RPOiBnaXZlIGhpbnRzIGZvciBhbGlhc2VzLCBmb3IgZXhhbXBsZSB3aXRoIFwiPD5cIiBnaXZlIGFzIGhpbnQgXCIgZGlkIHlvdSBtZWFuICE9PSA/XCJcbiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3Ioc3RhdGUsICdVbmV4cGVjdGVkIG9wZXJhdG9yICcgKyBzdGF0ZS50b2tlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1VuZXhwZWN0ZWQgcGFydCBcIicgKyBzdGF0ZS50b2tlbiArICdcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGJsb2NrIHdpdGggZXhwcmVzc2lvbnMuIEV4cHJlc3Npb25zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lXG4gICAqIGNoYXJhY3RlciAnXFxuJywgb3IgYnkgYSBzZW1pY29sb24gJzsnLiBJbiBjYXNlIG9mIGEgc2VtaWNvbG9uLCBubyBvdXRwdXRcbiAgICogb2YgdGhlIHByZWNlZGluZyBsaW5lIGlzIHJldHVybmVkLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCbG9jayhzdGF0ZSkge1xuICAgIHZhciBub2RlO1xuICAgIHZhciBibG9ja3MgPSBbXTtcbiAgICB2YXIgdmlzaWJsZTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJycgJiYgc3RhdGUudG9rZW4gIT09ICdcXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycpIHtcbiAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgbm9kZS5jb21tZW50ID0gc3RhdGUuY29tbWVudDtcbiAgICB9IC8vIFRPRE86IHNpbXBsaWZ5IHRoaXMgbG9vcFxuXG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcXG4nIHx8IHN0YXRlLnRva2VuID09PSAnOycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPT09IDAgJiYgbm9kZSkge1xuICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JztcbiAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycgJiYgc3RhdGUudG9rZW4gIT09ICcnKSB7XG4gICAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgICBub2RlLmNvbW1lbnQgPSBzdGF0ZS5jb21tZW50O1xuICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JztcbiAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmxvY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGJsb2Nrcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZSh1bmRlZmluZWQpO1xuICAgICAgICBub2RlLmNvbW1lbnQgPSBzdGF0ZS5jb21tZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFzc2lnbm1lbnQgb2YgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSxcbiAgICogLSBjYW4gYmUgYSB2YXJpYWJsZSBsaWtlICdhPTIuMydcbiAgICogLSBvciBhIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHZhcmlhYmxlIGxpa2UgJ21hdHJpeCgyLDM6NSk9WzYsNyw4XSdcbiAgICogLSBkZWZpbmluZyBhIGZ1bmN0aW9uIGxpa2UgJ2YoeCkgPSB4XjInXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpIHtcbiAgICB2YXIgbmFtZSwgYXJncywgdmFsdWUsIHZhbGlkO1xuICAgIHZhciBub2RlID0gcGFyc2VDb25kaXRpb25hbChzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc9Jykge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSkge1xuICAgICAgICAvLyBwYXJzZSBhIHZhcmlhYmxlIGFzc2lnbm1lbnQgbGlrZSAnYSA9IDIvMydcbiAgICAgICAgbmFtZSA9IG5vZGUubmFtZTtcbiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50Tm9kZShuZXcgU3ltYm9sTm9kZShuYW1lKSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShub2RlKSkge1xuICAgICAgICAvLyBwYXJzZSBhIG1hdHJpeCBzdWJzZXQgYXNzaWdubWVudCBsaWtlICdBWzEsMl0gPSA0J1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG5vZGUub2JqZWN0LCBub2RlLmluZGV4LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpICYmICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlLmZuKSkge1xuICAgICAgICAvLyBwYXJzZSBmdW5jdGlvbiBhc3NpZ25tZW50IGxpa2UgJ2YoeCkgPSB4XjInXG4gICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgICBub2RlLmFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnKSkge1xuICAgICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmcubmFtZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUobmFtZSwgYXJncywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnSW52YWxpZCBsZWZ0IGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IG9wZXJhdG9yID0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogY29uZGl0aW9uYWwgb3BlcmF0aW9uXG4gICAqXG4gICAqICAgICBjb25kaXRpb24gPyB0cnVlUGFydCA6IGZhbHNlUGFydFxuICAgKlxuICAgKiBOb3RlOiBjb25kaXRpb25hbCBvcGVyYXRvciBpcyByaWdodC1hc3NvY2lhdGl2ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbChzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VMb2dpY2FsT3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnPycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgLy8gc2V0IGEgY29uZGl0aW9uYWwgbGV2ZWwsIHRoZSByYW5nZSBvcGVyYXRvciB3aWxsIGJlIGlnbm9yZWQgYXMgbG9uZ1xuICAgICAgLy8gYXMgY29uZGl0aW9uYWxMZXZlbCA9PT0gc3RhdGUubmVzdGluZ0xldmVsLlxuICAgICAgdmFyIHByZXYgPSBzdGF0ZS5jb25kaXRpb25hbExldmVsO1xuICAgICAgc3RhdGUuY29uZGl0aW9uYWxMZXZlbCA9IHN0YXRlLm5lc3RpbmdMZXZlbDtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgdmFyIGNvbmRpdGlvbiA9IG5vZGU7XG4gICAgICB2YXIgdHJ1ZUV4cHIgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnOicpIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRmFsc2UgcGFydCBvZiBjb25kaXRpb25hbCBleHByZXNzaW9uIGV4cGVjdGVkJyk7XG4gICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gbnVsbDtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgdmFyIGZhbHNlRXhwciA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7IC8vIE5vdGU6IGNoZWNrIGZvciBjb25kaXRpb25hbCBvcGVyYXRvciBhZ2FpbiwgcmlnaHQgYXNzb2NpYXRpdml0eVxuXG4gICAgICBub2RlID0gbmV3IENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpOyAvLyByZXN0b3JlIHRoZSBwcmV2aW91cyBjb25kaXRpb25hbCBsZXZlbFxuXG4gICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gcHJldjtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBvciwgJ3ggb3IgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9naWNhbE9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUxvZ2ljYWxYb3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnb3InKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ29yJywgJ29yJywgW25vZGUsIHBhcnNlTG9naWNhbFhvcihzdGF0ZSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBleGNsdXNpdmUgb3IsICd4IHhvciB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsWG9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUxvZ2ljYWxBbmQoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAneG9yJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCd4b3InLCAneG9yJywgW25vZGUsIHBhcnNlTG9naWNhbEFuZChzdGF0ZSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBhbmQsICd4IGFuZCB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsQW5kKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VPcihzdGF0ZSk7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdhbmQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ2FuZCcsICdhbmQnLCBbbm9kZSwgcGFyc2VCaXR3aXNlT3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2Ugb3IsICd4IHwgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQml0d2lzZU9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnfCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnfCcsICdiaXRPcicsIFtub2RlLCBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2UgZXhjbHVzaXZlIG9yICh4b3IpLCAneCBefCB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCaXR3aXNlWG9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnXnwnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ158JywgJ2JpdFhvcicsIFtub2RlLCBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2UgYW5kLCAneCAmIHknXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSA9IHBhcnNlUmVsYXRpb25hbChzdGF0ZSk7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcmJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcmJywgJ2JpdEFuZCcsIFtub2RlLCBwYXJzZVJlbGF0aW9uYWwoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgY2hhaW5lZCBjb25kaXRpb25hbCwgbGlrZSAnYSA+IGIgPj0gYydcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUmVsYXRpb25hbChzdGF0ZSkge1xuICAgIHZhciBwYXJhbXMgPSBbcGFyc2VTaGlmdChzdGF0ZSldO1xuICAgIHZhciBjb25kaXRpb25hbHMgPSBbXTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJz09JzogJ2VxdWFsJyxcbiAgICAgICchPSc6ICd1bmVxdWFsJyxcbiAgICAgICc8JzogJ3NtYWxsZXInLFxuICAgICAgJz4nOiAnbGFyZ2VyJyxcbiAgICAgICc8PSc6ICdzbWFsbGVyRXEnLFxuICAgICAgJz49JzogJ2xhcmdlckVxJ1xuICAgIH07XG5cbiAgICB3aGlsZSAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIHZhciBjb25kID0ge1xuICAgICAgICBuYW1lOiBzdGF0ZS50b2tlbixcbiAgICAgICAgZm46IG9wZXJhdG9yc1tzdGF0ZS50b2tlbl1cbiAgICAgIH07XG4gICAgICBjb25kaXRpb25hbHMucHVzaChjb25kKTtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zLnB1c2gocGFyc2VTaGlmdChzdGF0ZSkpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gcGFyYW1zWzBdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoY29uZGl0aW9uYWxzWzBdLm5hbWUsIGNvbmRpdGlvbmFsc1swXS5mbiwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZShjb25kaXRpb25hbHMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjLmZuO1xuICAgICAgfSksIHBhcmFtcyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBCaXR3aXNlIGxlZnQgc2hpZnQsIGJpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCwgYml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0XG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVNoaWZ0KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlQ29udmVyc2lvbihzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICc8PCc6ICdsZWZ0U2hpZnQnLFxuICAgICAgJz4+JzogJ3JpZ2h0QXJpdGhTaGlmdCcsXG4gICAgICAnPj4+JzogJ3JpZ2h0TG9nU2hpZnQnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbbm9kZSwgcGFyc2VDb252ZXJzaW9uKHN0YXRlKV07XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogY29udmVyc2lvbiBvcGVyYXRvcnMgJ3RvJyBhbmQgJ2luJ1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VDb252ZXJzaW9uKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlUmFuZ2Uoc3RhdGUpO1xuICAgIHZhciBvcGVyYXRvcnMgPSB7XG4gICAgICB0bzogJ3RvJyxcbiAgICAgIFwiaW5cIjogJ3RvJyAvLyBhbGlhcyBvZiAndG8nXG5cbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcblxuICAgICAgaWYgKG5hbWUgPT09ICdpbicgJiYgc3RhdGUudG9rZW4gPT09ICcnKSB7XG4gICAgICAgIC8vIGVuZCBvZiBleHByZXNzaW9uIC0+IHRoaXMgaXMgdGhlIHVuaXQgJ2luJyAoJ2luY2gnKVxuICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgU3ltYm9sTm9kZSgnaW4nKV0sIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3BlcmF0b3IgJ2EgdG8gYicgb3IgJ2EgaW4gYidcbiAgICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlUmFuZ2Uoc3RhdGUpXTtcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIHJhbmdlLCBcInN0YXJ0OmVuZFwiLCBcInN0YXJ0OnN0ZXA6ZW5kXCIsIFwiOlwiLCBcInN0YXJ0OlwiLCBcIjplbmRcIiwgZXRjXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJhbmdlKHN0YXRlKSB7XG4gICAgdmFyIG5vZGU7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnOicpIHtcbiAgICAgIC8vIGltcGxpY2l0IHN0YXJ0PTEgKG9uZS1iYXNlZClcbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleHBsaWNpdCBzdGFydFxuICAgICAgbm9kZSA9IHBhcnNlQWRkU3VidHJhY3Qoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHN0YXRlLmNvbmRpdGlvbmFsTGV2ZWwgIT09IHN0YXRlLm5lc3RpbmdMZXZlbCkge1xuICAgICAgLy8gd2UgaWdub3JlIHRoZSByYW5nZSBvcGVyYXRvciB3aGVuIGEgY29uZGl0aW9uYWwgb3BlcmF0b3IgaXMgYmVpbmcgcHJvY2Vzc2VkIG9uIHRoZSBzYW1lIGxldmVsXG4gICAgICBwYXJhbXMucHVzaChub2RlKTsgLy8gcGFyc2Ugc3RlcCBhbmQgZW5kXG5cbiAgICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHBhcmFtcy5sZW5ndGggPCAzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcpJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ10nIHx8IHN0YXRlLnRva2VuID09PSAnLCcgfHwgc3RhdGUudG9rZW4gPT09ICcnKSB7XG4gICAgICAgICAgLy8gaW1wbGljaXQgZW5kXG4gICAgICAgICAgcGFyYW1zLnB1c2gobmV3IFN5bWJvbE5vZGUoJ2VuZCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBleHBsaWNpdCBlbmRcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFkZFN1YnRyYWN0KHN0YXRlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBzdGVwLCBlbmRdXG4gICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzJdLCBwYXJhbXNbMV0pOyAvLyBzdGFydCwgZW5kLCBzdGVwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBsZW5ndGggPT09IDJcbiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBlbmRdXG4gICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzFdKTsgLy8gc3RhcnQsIGVuZFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBhZGQgb3Igc3VidHJhY3RcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQWRkU3VidHJhY3Qoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtcztcbiAgICBub2RlID0gcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICcrJzogJ2FkZCcsXG4gICAgICAnLSc6ICdzdWJ0cmFjdCdcbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIHBhcmFtcyA9IFtub2RlLCBwYXJzZU11bHRpcGx5RGl2aWRlKHN0YXRlKV07XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbXVsdGlwbHksIGRpdmlkZSwgbW9kdWx1c1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSkge1xuICAgIHZhciBub2RlLCBsYXN0LCBuYW1lLCBmbjtcbiAgICBub2RlID0gcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uKHN0YXRlKTtcbiAgICBsYXN0ID0gbm9kZTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJyonOiAnbXVsdGlwbHknLFxuICAgICAgJy4qJzogJ2RvdE11bHRpcGx5JyxcbiAgICAgICcvJzogJ2RpdmlkZScsXG4gICAgICAnLi8nOiAnZG90RGl2aWRlJyxcbiAgICAgICclJzogJ21vZCcsXG4gICAgICBtb2Q6ICdtb2QnXG4gICAgfTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yc1xuICAgICAgICBuYW1lID0gc3RhdGUudG9rZW47XG4gICAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgbGFzdCA9IHBhcnNlSW1wbGljaXRNdWx0aXBsaWNhdGlvbihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBbbm9kZSwgbGFzdF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUltcGxpY2l0TXVsdGlwbGljYXRpb24oc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbGFzdDtcbiAgICBub2RlID0gcGFyc2VSdWxlMihzdGF0ZSk7XG4gICAgbGFzdCA9IG5vZGU7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLlNZTUJPTCB8fCBzdGF0ZS50b2tlbiA9PT0gJ2luJyAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShub2RlKSB8fCBzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5OVU1CRVIgJiYgISgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGxhc3QpICYmICghKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobGFzdCkgfHwgbGFzdC5vcCA9PT0gJyEnKSB8fCBzdGF0ZS50b2tlbiA9PT0gJygnKSB7XG4gICAgICAgIC8vIHBhcnNlIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIHN5bWJvbDogICAgICBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICcyYScsICcoMiszKWEnLCAnYSBiJ1xuICAgICAgICAvLyBudW1iZXI6ICAgICAgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnKDIrMykyJ1xuICAgICAgICAvLyBwYXJlbnRoZXNpczogaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnMigzKzQpJywgJygzKzQpKDErMiknXG4gICAgICAgIGxhc3QgPSBwYXJzZVJ1bGUyKHN0YXRlKTtcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbGFzdF0sIHRydWVcbiAgICAgICAgLyogaW1wbGljaXQgKi9cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBJbmZhbW91cyBcInJ1bGUgMlwiIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9pc3N1ZXMvNzkyI2lzc3VlY29tbWVudC0zNjEwNjUzNzBcbiAgICogRXhwbGljaXQgZGl2aXNpb24gZ2V0cyBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAqIHdoZW4gdGhlIGRpdmlzaW9uIG1hdGNoZXMgdGhpcyBwYXR0ZXJuOiBbbnVtYmVyXSAvIFtudW1iZXJdIFtzeW1ib2xdXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJ1bGUyKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZVVuYXJ5KHN0YXRlKTtcbiAgICB2YXIgbGFzdCA9IG5vZGU7XG4gICAgdmFyIHRva2VuU3RhdGVzID0gW107XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gTWF0Y2ggdGhlIFwibnVtYmVyIC9cIiBwYXJ0IG9mIHRoZSBwYXR0ZXJuIFwibnVtYmVyIC8gbnVtYmVyIHN5bWJvbFwiXG4gICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcvJyAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShsYXN0KSkge1xuICAgICAgICAvLyBMb29rIGFoZWFkIHRvIHNlZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhIG51bWJlclxuICAgICAgICB0b2tlblN0YXRlcy5wdXNoKF9leHRlbmRzKHt9LCBzdGF0ZSkpO1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlIFwibnVtYmVyIC8gbnVtYmVyXCIgcGFydCBvZiB0aGUgcGF0dGVyblxuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5OVU1CRVIpIHtcbiAgICAgICAgICAvLyBMb29rIGFoZWFkIGFnYWluXG4gICAgICAgICAgdG9rZW5TdGF0ZXMucHVzaChfZXh0ZW5kcyh7fSwgc3RhdGUpKTtcbiAgICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlIFwic3ltYm9sXCIgcGFydCBvZiB0aGUgcGF0dGVybiwgb3IgYSBsZWZ0IHBhcmVudGhlc2lzXG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MIHx8IHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIG1hdGNoZWQgdGhlIHBhdHRlcm4gXCJudW1iZXIgLyBudW1iZXIgc3ltYm9sXCIuXG4gICAgICAgICAgICAvLyBSZXdpbmQgb25jZSBhbmQgYnVpbGQgdGhlIFwibnVtYmVyIC8gbnVtYmVyXCIgbm9kZTsgdGhlIHN5bWJvbCB3aWxsIGJlIGNvbnN1bWVkIGxhdGVyXG4gICAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgICB0b2tlblN0YXRlcy5wb3AoKTtcbiAgICAgICAgICAgIGxhc3QgPSBwYXJzZVVuYXJ5KHN0YXRlKTtcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtub2RlLCBsYXN0XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIG1hdGNoLCBzbyByZXdpbmRcbiAgICAgICAgICAgIHRva2VuU3RhdGVzLnBvcCgpO1xuXG4gICAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm90IGEgbWF0Y2gsIHNvIHJld2luZFxuICAgICAgICAgIF9leHRlbmRzKHN0YXRlLCB0b2tlblN0YXRlcy5wb3AoKSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFVuYXJ5IHBsdXMgYW5kIG1pbnVzLCBhbmQgbG9naWNhbCBhbmQgYml0d2lzZSBub3RcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlVW5hcnkoc3RhdGUpIHtcbiAgICB2YXIgbmFtZSwgcGFyYW1zLCBmbjtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJy0nOiAndW5hcnlNaW51cycsXG4gICAgICAnKyc6ICd1bmFyeVBsdXMnLFxuICAgICAgJ34nOiAnYml0Tm90JyxcbiAgICAgIG5vdDogJ25vdCdcbiAgICB9O1xuXG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgZm4gPSBvcGVyYXRvcnNbc3RhdGUudG9rZW5dO1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbcGFyc2VVbmFyeShzdGF0ZSldO1xuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUG93KHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogcG93ZXJcbiAgICogTm90ZTogcG93ZXIgb3BlcmF0b3IgaXMgcmlnaHQgYXNzb2NpYXRpdmVcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUG93KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlTGVmdEhhbmRPcGVyYXRvcnMoc3RhdGUpO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXicgfHwgc3RhdGUudG9rZW4gPT09ICcuXicpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gbmFtZSA9PT0gJ14nID8gJ3BvdycgOiAnZG90UG93JztcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlVW5hcnkoc3RhdGUpXTsgLy8gR28gYmFjayB0byB1bmFyeSwgd2UgY2FuIGhhdmUgJzJeLTMnXG5cbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBMZWZ0IGhhbmQgb3BlcmF0b3JzOiBmYWN0b3JpYWwgeCEsIGN0cmFuc3Bvc2UgeCdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRPcGVyYXRvcnMoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtcztcbiAgICBub2RlID0gcGFyc2VDdXN0b21Ob2RlcyhzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICchJzogJ2ZhY3RvcmlhbCcsXG4gICAgICAnXFwnJzogJ2N0cmFuc3Bvc2UnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGVdO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGN1c3RvbSBub2RlIGhhbmRsZXIuIEEgbm9kZSBoYW5kbGVyIGNhbiBiZSB1c2VkIHRvIHByb2Nlc3NcbiAgICogbm9kZXMgaW4gYSBjdXN0b20gd2F5LCBmb3IgZXhhbXBsZSBmb3IgaGFuZGxpbmcgYSBwbG90LlxuICAgKlxuICAgKiBBIGhhbmRsZXIgbXVzdCBiZSBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBwYXJzZSBmdW5jdGlvbi5cbiAgICogLSBtdXN0IGV4dGVuZCBtYXRoLmV4cHJlc3Npb24ubm9kZS5Ob2RlXG4gICAqIC0gbXVzdCBjb250YWluIGEgZnVuY3Rpb24gX2NvbXBpbGUoZGVmczogT2JqZWN0KSA6IHN0cmluZ1xuICAgKiAtIG11c3QgY29udGFpbiBhIGZ1bmN0aW9uIGZpbmQoZmlsdGVyOiBPYmplY3QpIDogTm9kZVtdXG4gICAqIC0gbXVzdCBjb250YWluIGEgZnVuY3Rpb24gdG9TdHJpbmcoKSA6IHN0cmluZ1xuICAgKiAtIHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCBjb250YWluaW5nIGFsbCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgICAgbm9kZXMgPSB7XG4gICAqICAgICAgICdwbG90JzogUGxvdEhhbmRsZXJcbiAgICogICAgIH1cbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBoYW5kbGVyIGlzIGNhbGxlZCBhczpcbiAgICpcbiAgICogICAgIG5vZGUgPSBuZXcgUGxvdEhhbmRsZXIocGFyYW1zKVxuICAgKlxuICAgKiBUaGUgaGFuZGxlciB3aWxsIGJlIGludm9rZWQgd2hlbiBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gbGlrZTpcbiAgICpcbiAgICogICAgIG5vZGUgPSBtYXRoLnBhcnNlKCdwbG90KHNpbih4KSwgeCknLCBub2RlcylcbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQ3VzdG9tTm9kZXMoc3RhdGUpIHtcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzdGF0ZS5leHRyYU5vZGVzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIHZhciBDdXN0b21Ob2RlID0gc3RhdGUuZXh0cmFOb2Rlc1tzdGF0ZS50b2tlbl07XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIHBhcmFtZXRlcnNcblxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgcGFyYW1zID0gW107XG4gICAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTsgLy8gcGFyc2UgYSBsaXN0IHdpdGggcGFyYW1ldGVyc1xuXG4gICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgfSAvLyBjcmVhdGUgYSBuZXcgY3VzdG9tIG5vZGVcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU1ZhbGlkYXRlVHlwZXNcblxuXG4gICAgICByZXR1cm4gbmV3IEN1c3RvbU5vZGUocGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VTeW1ib2woc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBzeW1ib2xzOiBmdW5jdGlvbnMsIHZhcmlhYmxlcywgY29uc3RhbnRzLCB1bml0c1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTeW1ib2woc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZTtcblxuICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShDT05TVEFOVFMsIG5hbWUpKSB7XG4gICAgICAgIC8vIHRydWUsIGZhbHNlLCBudWxsLCAuLi5cbiAgICAgICAgbm9kZSA9IG5ldyBDb25zdGFudE5vZGUoQ09OU1RBTlRTW25hbWVdKTtcbiAgICAgIH0gZWxzZSBpZiAoTlVNRVJJQ19DT05TVEFOVFMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gTmFOLCBJbmZpbml0eVxuICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKG5hbWUsICdudW1iZXInKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbmV3IFN5bWJvbE5vZGUobmFtZSk7XG4gICAgICB9IC8vIHBhcnNlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIG1hdHJpeCBpbmRleFxuXG5cbiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhY2Nlc3NvcnM6XG4gICAqIC0gZnVuY3Rpb24gaW52b2NhdGlvbiBpbiByb3VuZCBicmFja2V0cyAoLi4uKSwgZm9yIGV4YW1wbGUgc3FydCgyKVxuICAgKiAtIGluZGV4IGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cyBbLi4uXSwgZm9yIGV4YW1wbGUgQVsyLDNdXG4gICAqIC0gZG90IG5vdGF0aW9uIGZvciBwcm9wZXJ0aWVzLCBsaWtlIGZvby5iYXJcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAgICBOb2RlIG9uIHdoaWNoIHRvIGFwcGx5IHRoZSBwYXJhbWV0ZXJzLiBJZiB0aGVyZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5vIHBhcmFtZXRlcnMgaW4gdGhlIGV4cHJlc3Npb24sIHRoZSBub2RlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBpdHNlbGYgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW3R5cGVzXSAgRmlsdGVyIHRoZSB0eXBlcyBvZiBub3RhdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIFsnKCcsICdbJywgJy4nXVxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUsIHR5cGVzKSB7XG4gICAgdmFyIHBhcmFtcztcblxuICAgIHdoaWxlICgoc3RhdGUudG9rZW4gPT09ICcoJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ1snIHx8IHN0YXRlLnRva2VuID09PSAnLicpICYmICghdHlwZXMgfHwgdHlwZXMuaW5kZXhPZihzdGF0ZS50b2tlbikgIT09IC0xKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBwYXJhbXMgPSBbXTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSB8fCAoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShub2RlKSkge1xuICAgICAgICAgIC8vIGZ1bmN0aW9uIGludm9jYXRpb24gbGlrZSBmbigyLCAzKSBvciBvYmouZm4oMiwgMylcbiAgICAgICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7IC8vIHBhcnNlIGEgbGlzdCB3aXRoIHBhcmFtZXRlcnNcblxuICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUGFyZW50aGVzaXMgKSBleHBlY3RlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgbm9kZSA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZSwgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICgyKzMpKDQrNSkgb3Igc3FydCgyKSgxKzIpXG4gICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaXQgaGVyZSBidXQgbGV0IGl0IGJlIGhhbmRsZWQgYnkgcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uXG4gICAgICAgICAgLy8gd2l0aCBjb3JyZWN0IHByZWNlZGVuY2VcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbiA9PT0gJ1snKSB7XG4gICAgICAgIC8vIGluZGV4IG5vdGF0aW9uIGxpa2UgdmFyaWFibGVbMiwgM11cbiAgICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7XG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcnNlQXNzaWdubWVudChzdGF0ZSkpOyAvLyBwYXJzZSBhIGxpc3Qgd2l0aCBwYXJhbWV0ZXJzXG5cbiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUGFyZW50aGVzaXMgXSBleHBlY3RlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgQWNjZXNzb3JOb2RlKG5vZGUsIG5ldyBJbmRleE5vZGUocGFyYW1zKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkb3Qgbm90YXRpb24gbGlrZSB2YXJpYWJsZS5wcm9wXG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlICE9PSBUT0tFTlRZUEUuU1lNQk9MKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdQcm9wZXJ0eSBuYW1lIGV4cGVjdGVkIGFmdGVyIGRvdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zLnB1c2gobmV3IENvbnN0YW50Tm9kZShzdGF0ZS50b2tlbikpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgIHZhciBkb3ROb3RhdGlvbiA9IHRydWU7XG4gICAgICAgIG5vZGUgPSBuZXcgQWNjZXNzb3JOb2RlKG5vZGUsIG5ldyBJbmRleE5vZGUocGFyYW1zLCBkb3ROb3RhdGlvbikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGRvdWJsZSBxdW90ZXMgc3RyaW5nLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgc3RyO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCInKSB7XG4gICAgICBzdHIgPSBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsgLy8gY3JlYXRlIGNvbnN0YW50XG5cbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlcyBcIi4uLlwiXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJyAmJiBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJ1wiJykge1xuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxcXCcpIHtcbiAgICAgICAgLy8gZXNjYXBlIGNoYXJhY3RlciwgaW1tZWRpYXRlbHkgcHJvY2VzcyB0aGUgbmV4dFxuICAgICAgICAvLyBjaGFyYWN0ZXIgdG8gcHJldmVudCBzdG9wcGluZyBhdCBhIG5leHQgJ1xcXCInXG4gICAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH1cblxuICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ1wiJykge1xuICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2Ygc3RyaW5nIFwiIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKCdcIicgKyBzdHIgKyAnXCInKTsgLy8gdW5lc2NhcGUgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc2luZ2xlIHF1b3RlcyBzdHJpbmcuXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSkge1xuICAgIHZhciBub2RlLCBzdHI7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdcXCcnKSB7XG4gICAgICBzdHIgPSBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsgLy8gY3JlYXRlIGNvbnN0YW50XG5cbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU1hdHJpeChzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgc2luZ2xlIHF1b3RlcyAnLi4uJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSkge1xuICAgIHZhciBzdHIgPSAnJztcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycgJiYgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcXCcnKSB7XG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICdcXFxcJykge1xuICAgICAgICAvLyBlc2NhcGUgY2hhcmFjdGVyLCBpbW1lZGlhdGVseSBwcm9jZXNzIHRoZSBuZXh0XG4gICAgICAgIC8vIGNoYXJhY3RlciB0byBwcmV2ZW50IHN0b3BwaW5nIGF0IGEgbmV4dCAnXFwnJ1xuICAgICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcXCcnKSB7XG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0VuZCBvZiBzdHJpbmcgXFwnIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKCdcIicgKyBzdHIgKyAnXCInKTsgLy8gdW5lc2NhcGUgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIHRoZSBtYXRyaXhcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTWF0cml4KHN0YXRlKSB7XG4gICAgdmFyIGFycmF5LCBwYXJhbXMsIHJvd3MsIGNvbHM7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdbJykge1xuICAgICAgLy8gbWF0cml4IFsuLi5dXG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIG5vbi1lbXB0eSBtYXRyaXhcbiAgICAgICAgdmFyIHJvdyA9IHBhcnNlUm93KHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgIC8vIDIgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICByb3dzID0gMTtcbiAgICAgICAgICBwYXJhbXMgPSBbcm93XTsgLy8gdGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBhcmUgc2VwYXJhdGVkIGJ5IGRvdC1jb21tYSdzXG5cbiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICBwYXJhbXNbcm93c10gPSBwYXJzZVJvdyhzdGF0ZSk7XG4gICAgICAgICAgICByb3dzKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRW5kIG9mIG1hdHJpeCBdIGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gY2hlY2sgaWYgdGhlIG51bWJlciBvZiBjb2x1bW5zIG1hdGNoZXMgaW4gYWxsIHJvd3NcblxuICAgICAgICAgIGNvbHMgPSBwYXJhbXNbMF0uaXRlbXMubGVuZ3RoO1xuXG4gICAgICAgICAgZm9yICh2YXIgciA9IDE7IHIgPCByb3dzOyByKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXNbcl0uaXRlbXMubGVuZ3RoICE9PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHN0YXRlLCAnQ29sdW1uIGRpbWVuc2lvbnMgbWlzbWF0Y2ggJyArICcoJyArIHBhcmFtc1tyXS5pdGVtcy5sZW5ndGggKyAnICE9PSAnICsgY29scyArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJyYXkgPSBuZXcgQXJyYXlOb2RlKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gMSBkaW1lbnNpb25hbCB2ZWN0b3JcbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2YgbWF0cml4IF0gZXhwZWN0ZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7XG4gICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIGFycmF5ID0gcm93O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIGlzIGFuIGVtcHR5IG1hdHJpeCBcIlsgXVwiXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICBhcnJheSA9IG5ldyBBcnJheU5vZGUoW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIGFycmF5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHNpbmdsZSBjb21tYS1zZXBhcmF0ZWQgcm93IGZyb20gYSBtYXRyaXgsIGxpa2UgJ2EsIGIsIGMnXG4gICAqIEByZXR1cm4ge0FycmF5Tm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUm93KHN0YXRlKSB7XG4gICAgdmFyIHBhcmFtcyA9IFtwYXJzZUFzc2lnbm1lbnQoc3RhdGUpXTtcbiAgICB2YXIgbGVuID0gMTtcblxuICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJywnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gcGFyc2UgZXhwcmVzc2lvblxuXG4gICAgICBwYXJhbXNbbGVuXSA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7XG4gICAgICBsZW4rKztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFycmF5Tm9kZShwYXJhbXMpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhbiBvYmplY3QsIGVuY2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzey4uLn0sIGZvciBleGFtcGxlIHt2YWx1ZTogMn1cbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlT2JqZWN0KHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAneycpIHtcbiAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgdmFyIGtleTtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgIGRvIHtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7XG4gICAgICAgICAgLy8gcGFyc2Uga2V5XG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCInKSB7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2VuID09PSAnXFwnJykge1xuICAgICAgICAgICAga2V5ID0gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHtcbiAgICAgICAgICAgIGtleSA9IHN0YXRlLnRva2VuO1xuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1N5bWJvbCBvciBzdHJpbmcgZXhwZWN0ZWQgYXMgb2JqZWN0IGtleScpO1xuICAgICAgICAgIH0gLy8gcGFyc2Uga2V5L3ZhbHVlIHNlcGFyYXRvclxuXG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICc6Jykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdDb2xvbiA6IGV4cGVjdGVkIGFmdGVyIG9iamVjdCBrZXknKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIGtleVxuXG4gICAgICAgICAgcHJvcGVydGllc1trZXldID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuXG5cbiAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnQ29tbWEgLCBvciBicmFja2V0IH0gZXhwZWN0ZWQgYWZ0ZXIgb2JqZWN0IHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHZhciBub2RlID0gbmV3IE9iamVjdE5vZGUocHJvcGVydGllcyk7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU51bWJlcihzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIGEgbnVtYmVyXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZU51bWJlcihzdGF0ZSkge1xuICAgIHZhciBudW1iZXJTdHI7XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuTlVNQkVSKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgbnVtYmVyXG4gICAgICBudW1iZXJTdHIgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKG51bWVyaWMobnVtYmVyU3RyLCBjb25maWcubnVtYmVyKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUGFyZW50aGVzZXMoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJlbnRoZXNlc1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VQYXJlbnRoZXNlcyhzdGF0ZSkge1xuICAgIHZhciBub2RlOyAvLyBjaGVjayBpZiBpdCBpcyBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvblxuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgIC8vIHBhcmVudGhlc2VzICguLi4pXG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOyAvLyBzdGFydCBhZ2FpblxuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBQYXJlbnRoZXNpc05vZGUobm9kZSk7XG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlRW5kKHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogRXZhbHVhdGVkIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgbm90IHlldCBlbmRlZCBidXQgZXhwZWN0ZWQgdG8gZW5kXG4gICAqIEByZXR1cm4ge05vZGV9IHJlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlRW5kKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnJykge1xuICAgICAgLy8gc3ludGF4IGVycm9yIG9yIHVuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb25cbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1ZhbHVlIGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTaG9ydGN1dCBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCByb3cgdmFsdWUgKG9uZSBiYXNlZClcbiAgICogUmV0dXJucyB0aGUgbGluZSBvZiB0aGUgY3VycmVudGx5IGhhbmRsZWQgZXhwcmVzc2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICAvKiBUT0RPOiBpbXBsZW1lbnQga2VlcGluZyB0cmFjayBvbiB0aGUgcm93IG51bWJlclxuICBmdW5jdGlvbiByb3cgKCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgKi9cblxuICAvKipcbiAgICogU2hvcnRjdXQgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgY29sIHZhbHVlIChvbmUgYmFzZWQpXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiAocG9zaXRpb24pIHdoZXJlIHRoZSBsYXN0IHN0YXRlLnRva2VuIHN0YXJ0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbChzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5pbmRleCAtIHN0YXRlLnRva2VuLmxlbmd0aCArIDE7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlcnJvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7U3ludGF4RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgdmFyIGMgPSBjb2woc3RhdGUpO1xuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlICsgJyAoY2hhciAnICsgYyArICcpJyk7XG4gICAgZXJyb3JbXCJjaGFyXCJdID0gYztcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlcnJvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgdmFyIGMgPSBjb2woc3RhdGUpO1xuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlICsgJyAoY2hhciAnICsgYyArICcpJyk7XG4gICAgZXJyb3JbXCJjaGFyXCJdID0gYztcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cblxuICByZXR1cm4gcGFyc2U7XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2UgPSBjcmVhdGVQYXJzZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXBwbHlUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXBwbHkgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L2FwcGx5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdhcHBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc0ludGVnZXInXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguYXBwbHlcbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIGFwcGx5XG4gKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyO1xuICB2YXIgYXBwbHkgPSAoMCwgX2FwcGx5LmNyZWF0ZUFwcGx5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGlzSW50ZWdlcjogaXNJbnRlZ2VyXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIGNvbmNhdCBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ2FwcGx5Jywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGFwcGx5LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gY3JlYXRlQXBwbHlUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtblRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2x1bW4gPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L2NvbHVtblwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnY29sdW1uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0luZGV4JywgJ21hdHJpeCcsICdyYW5nZSddO1xuLyoqXG4gKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0cml4LmNvbHVtblxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgaW5kZXhgIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBjb2x1bW5cbiAqIGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAqL1xuXG52YXIgY3JlYXRlQ29sdW1uVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuICB2YXIgY29sdW1uID0gKDAsIF9jb2x1bW4uY3JlYXRlQ29sdW1uKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIEluZGV4OiBJbmRleCxcbiAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICByYW5nZTogcmFuZ2VcbiAgfSk7IC8vIEBzZWU6IGNvbW1lbnQgb2YgY29sdW1uIGl0c2VsZlxuXG4gIHJldHVybiB0eXBlZCgnY29sdW1uJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZnJvbSB6ZXJvLWJhc2VkIHRvIG9uZS1iYXNlZFxuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdCAtIDE7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29sdW1uVHJhbnNmb3JtID0gY3JlYXRlQ29sdW1uVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25jYXRUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29uY2F0ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9jb25jYXRcIik7XG5cbnZhciBuYW1lID0gJ2NvbmNhdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ29uY2F0VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG4gIHZhciBjb25jYXQgPSAoMCwgX2NvbmNhdC5jcmVhdGVDb25jYXQpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgaXNJbnRlZ2VyOiBpc0ludGVnZXJcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5yYW5nZVxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29uY2F0XG4gICAqIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWRcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKCdjb25jYXQnLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICB2YXIgbGFzdEluZGV4ID0gYXJncy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGxhc3QgPSBhcmdzW2xhc3RJbmRleF07XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShsYXN0KSkge1xuICAgICAgICBhcmdzW2xhc3RJbmRleF0gPSBsYXN0IC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdC5taW51cygxKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25jYXRUcmFuc2Zvcm0gPSBjcmVhdGVDb25jYXRUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpbHRlclRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZmlsdGVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRmlsdGVyVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguZmlsdGVyXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBhZGRzIHN1cHBvcnQgZm9yIGVxdWF0aW9ucyBhcyB0ZXN0IGZ1bmN0aW9uIGZvciBtYXRoLmZpbHRlcixcbiAgICogc28geW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSAnZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKScuXG4gICAqL1xuICBmdW5jdGlvbiBmaWx0ZXJUcmFuc2Zvcm0oYXJncywgbWF0aCwgc2NvcGUpIHtcbiAgICB2YXIgeCwgY2FsbGJhY2s7XG5cbiAgICBpZiAoYXJnc1swXSkge1xuICAgICAgeCA9IGFyZ3NbMF0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1sxXSkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShhcmdzWzFdKSB8fCAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkoYXJnc1sxXSkpIHtcbiAgICAgICAgLy8gYSBmdW5jdGlvbiBwb2ludGVyLCBsaWtlIGZpbHRlcihbMywgLTIsIDVdLCBteVRlc3RGdW5jdGlvbilcbiAgICAgICAgY2FsbGJhY2sgPSBhcmdzWzFdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhbiBleHByZXNzaW9uIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKVxuICAgICAgICBjYWxsYmFjayA9ICgwLCBfY29tcGlsZUlubGluZUV4cHJlc3Npb24uY29tcGlsZUlubGluZUV4cHJlc3Npb24pKGFyZ3NbMV0sIG1hdGgsIHNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZpbHRlclRyYW5zZm9ybS5yYXdBcmdzID0gdHJ1ZTsgLy8gb25lIGJhc2VkIHZlcnNpb24gb2YgZnVuY3Rpb24gZmlsdGVyXG5cbiAgdmFyIGZpbHRlciA9IHR5cGVkKCdmaWx0ZXInLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9maWx0ZXIsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoX2ZpbHRlcih4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBSZWdFeHAnOiBfYXJyYXkuZmlsdGVyUmVnRXhwLFxuICAgICdNYXRyaXgsIFJlZ0V4cCc6IGZ1bmN0aW9uIE1hdHJpeFJlZ0V4cCh4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoKDAsIF9hcnJheS5maWx0ZXJSZWdFeHApKHgudG9BcnJheSgpLCB0ZXN0KSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpbHRlclRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG4vKipcbiAqIEZpbHRlciB2YWx1ZXMgaW4gYSBjYWxsYmFjayBnaXZlbiBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogISEhIFBhc3NlcyBhIG9uZS1iYXNlZCBpbmRleCAhISFcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB4XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgdGhlIGZpbHRlcmVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlRmlsdGVyVHJhbnNmb3JtID0gY3JlYXRlRmlsdGVyVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBfZmlsdGVyKHgsIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG4gIHJldHVybiAoMCwgX2FycmF5LmZpbHRlcikoeCwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICBpZiAoYXJncyA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3MgPT09IDIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgW2luZGV4ICsgMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzIG9yIC0xXG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleCArIDFdLCBhcnJheSk7XG4gICAgfVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSByZXF1aXJlKFwiLi91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvblwiKTtcblxudmFyIG5hbWUgPSAnZm9yRWFjaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5mb3JFYWNoXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgb25lLWJhc2VkIGluZGV4IGluc3RlYWQgb2YgYSB6ZXJvLWJhc2VkIGluZGV4XG4gICAqL1xuICBmdW5jdGlvbiBmb3JFYWNoVHJhbnNmb3JtKGFyZ3MsIG1hdGgsIHNjb3BlKSB7XG4gICAgdmFyIHgsIGNhbGxiYWNrO1xuXG4gICAgaWYgKGFyZ3NbMF0pIHtcbiAgICAgIHggPSBhcmdzWzBdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnc1sxXSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUpKGFyZ3NbMV0pKSB7XG4gICAgICAgIC8vIGEgZnVuY3Rpb24gcG9pbnRlciwgbGlrZSBmb3JFYWNoKFszLCAtMiwgNV0sIG15VGVzdEZ1bmN0aW9uKVxuICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuIGV4cHJlc3Npb24gbGlrZSBmb3JFYWNoKFszLCAtMiwgNV0sIHggPiAwID8gY2FsbGJhY2sxKHgpIDogY2FsbGJhY2syKHgpIClcbiAgICAgICAgY2FsbGJhY2sgPSAoMCwgX2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uLmNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKShhcmdzWzFdLCBtYXRoLCBzY29wZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9mb3JFYWNoKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZvckVhY2hUcmFuc2Zvcm0ucmF3QXJncyA9IHRydWU7IC8vIG9uZS1iYXNlZCB2ZXJzaW9uIG9mIGZvckVhY2hcblxuICB2YXIgX2ZvckVhY2ggPSB0eXBlZCgnZm9yRWFjaCcsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhGdW5jdGlvbihhcnJheSwgY2FsbGJhY2spIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gICAgICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuXG4gICAgICB2YXIgcmVjdXJzZSA9IGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICgwLCBfYXJyYXkuZm9yRWFjaCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSArIDEpKTsgLy8gb25lIGJhc2VkIGluZGV4LCBoZW5jZSBpKzFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgICAgICBpZiAoYXJncyA9PT0gMSkge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4LCBhcnJheSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWN1cnNlKGFycmF5LnZhbHVlT2YoKSwgW10pOyAvLyBwYXNzIEFycmF5XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZm9yRWFjaFRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSBjcmVhdGVGb3JFYWNoVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2luZGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0luZGV4J107XG52YXIgY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5pbmRleFxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIG9uZS1iYXNlZCBpbmRleCBpbnN0ZWFkIG9mIGEgemVyby1iYXNlZCBpbmRleFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGluZGV4VHJhbnNmb3JtKCkge1xuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsgLy8gY2hhbmdlIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWQsIGFuZCBjb252ZXJ0IEJpZ051bWJlciB0byBudW1iZXJcblxuICAgICAgaWYgKCgwLCBfaXMuaXNSYW5nZSkoYXJnKSkge1xuICAgICAgICBhcmcuc3RhcnQtLTtcbiAgICAgICAgYXJnLmVuZCAtPSBhcmcuc3RlcCA+IDAgPyAwIDogMjtcbiAgICAgIH0gZWxzZSBpZiAoYXJnICYmIGFyZy5pc1NldCA9PT0gdHJ1ZSkge1xuICAgICAgICBhcmcgPSBhcmcubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgcmV0dXJuIHYgLSAxO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0FycmF5KShhcmcpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHJldHVybiB2IC0gMTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgYXJnLS07XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvTnVtYmVyKCkgLSAxO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykgey8vIGxlYXZlIGFzIGlzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UnKTtcbiAgICAgIH1cblxuICAgICAgYXJnc1tpXSA9IGFyZztcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gbmV3IEluZGV4KCk7XG4gICAgSW5kZXguYXBwbHkocmVzLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSBjcmVhdGVJbmRleFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFwVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uXCIpO1xuXG52YXIgbmFtZSA9ICdtYXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVNYXBUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5tYXBcbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBvbmUtYmFzZWQgaW5kZXggaW5zdGVhZCBvZiBhIHplcm8tYmFzZWQgaW5kZXhcbiAgICovXG4gIGZ1bmN0aW9uIG1hcFRyYW5zZm9ybShhcmdzLCBtYXRoLCBzY29wZSkge1xuICAgIHZhciB4LCBjYWxsYmFjaztcblxuICAgIGlmIChhcmdzWzBdKSB7XG4gICAgICB4ID0gYXJnc1swXS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChhcmdzWzFdKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGFyZ3NbMV0pIHx8ICgwLCBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlKShhcmdzWzFdKSkge1xuICAgICAgICAvLyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIG15VGVzdEZ1bmN0aW9uKVxuICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuIGV4cHJlc3Npb24gbGlrZSBmaWx0ZXIoWzMsIC0yLCA1XSwgeCA+IDApXG4gICAgICAgIGNhbGxiYWNrID0gKDAsIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5jb21waWxlSW5saW5lRXhwcmVzc2lvbikoYXJnc1sxXSwgbWF0aCwgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXAoeCwgY2FsbGJhY2spO1xuICB9XG5cbiAgbWFwVHJhbnNmb3JtLnJhd0FyZ3MgPSB0cnVlOyAvLyBvbmUtYmFzZWQgdmVyc2lvbiBvZiBtYXAgZnVuY3Rpb25cblxuICB2YXIgbWFwID0gdHlwZWQoJ21hcCcsIHtcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIF9tYXAoeCwgY2FsbGJhY2ssIHgpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKF9tYXAoeC52YWx1ZU9mKCksIGNhbGxiYWNrLCB4KSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1hcFRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG4vKipcbiAqIE1hcCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheS4gT25lLWJhc2VkIGluZGV4ZXNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtBcnJheX0gb3JpZ1xuICogQHJldHVybiB7QXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlTWFwVHJhbnNmb3JtID0gY3JlYXRlTWFwVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBfbWFwKGFycmF5LCBjYWxsYmFjaywgb3JpZykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJnc0NvdW50ID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoMCwgX2FycmF5Lm1hcCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAvLyB3ZSBjcmVhdGUgYSBjb3B5IG9mIHRoZSBpbmRleCBhcnJheSBhbmQgYXBwZW5kIHRoZSBuZXcgaW5kZXggdmFsdWVcbiAgICAgICAgcmV0dXJuIHJlY3Vyc2UoY2hpbGQsIGluZGV4LmNvbmNhdChpICsgMSkpOyAvLyBvbmUgYmFzZWQgaW5kZXgsIGhlbmNlIGkgKyAxXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW52b2tlIHRoZSAodHlwZWQpIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgIGlmIChhcmdzQ291bnQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnc0NvdW50ID09PSAyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4LCBvcmlnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXhUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWF4ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgbmFtZSA9ICdtYXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbGFyZ2VyJ107XG52YXIgY3JlYXRlTWF4VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuICB2YXIgbWF4ID0gKDAsIF9tYXguY3JlYXRlTWF4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGxhcmdlcjogbGFyZ2VyXG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGgubWF4XG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBtYXhcbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21heCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDIgJiYgKDAsIF9pcy5pc0NvbGxlY3Rpb24pKGFyZ3NbMF0pKSB7XG4gICAgICAgIHZhciBkaW0gPSBhcmdzWzFdO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1heC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXhUcmFuc2Zvcm0gPSBjcmVhdGVNYXhUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lYW5cIik7XG5cbnZhciBuYW1lID0gJ21lYW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkJywgJ2RpdmlkZSddO1xudmFyIGNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZTtcbiAgdmFyIG1lYW4gPSAoMCwgX21lYW4uY3JlYXRlTWVhbikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBhZGQ6IGFkZCxcbiAgICBkaXZpZGU6IGRpdmlkZVxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLm1lYW5cbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1lYW5cbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21lYW4nLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZFxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyICYmICgwLCBfaXMuaXNDb2xsZWN0aW9uKShhcmdzWzBdKSkge1xuICAgICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0gLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltLm1pbnVzKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtZWFuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSBjcmVhdGVNZWFuVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNaW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWluXCIpO1xuXG52YXIgbmFtZSA9ICdtaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddO1xudmFyIGNyZWF0ZU1pblRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyO1xuICB2YXIgbWluID0gKDAsIF9taW4uY3JlYXRlTWluKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIHNtYWxsZXI6IHNtYWxsZXJcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5taW5cbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1pblxuICAgKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnbWluJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbWluLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1pblRyYW5zZm9ybSA9IGNyZWF0ZU1pblRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3JhbmdlID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIG5hbWUgPSAncmFuZ2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9tYXRyaXgnLCAnP2JpZ251bWJlcicsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXInLCAnbGFyZ2VyRXEnXTtcbnZhciBjcmVhdGVSYW5nZVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgc21hbGxlckVxID0gX3JlZi5zbWFsbGVyRXEsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcixcbiAgICAgIGxhcmdlckVxID0gX3JlZi5sYXJnZXJFcTtcbiAgdmFyIHJhbmdlID0gKDAsIF9yYW5nZS5jcmVhdGVSYW5nZSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgICBzbWFsbGVyOiBzbWFsbGVyLFxuICAgIHNtYWxsZXJFcTogc21hbGxlckVxLFxuICAgIGxhcmdlcjogbGFyZ2VyLFxuICAgIGxhcmdlckVxOiBsYXJnZXJFcVxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnJhbmdlXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ3JhbmdlJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3QgIT09ICdib29sZWFuJykge1xuICAgICAgICAvLyBhcHBlbmQgYSBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlXG4gICAgICAgIGFyZ3MucHVzaCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJhbmdlLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZVRyYW5zZm9ybSA9IGNyZWF0ZVJhbmdlVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3dUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3JvdyA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvcm93XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBuYW1lID0gJ3Jvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdJbmRleCcsICdtYXRyaXgnLCAncmFuZ2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdHJpeC5jb2x1bW5cbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGluZGV4YCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29sdW1uXG4gKiBmcm9tIHplcm8tYmFzZWQgdG8gb25lLWJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZVJvd1RyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHJhbmdlID0gX3JlZi5yYW5nZTtcbiAgdmFyIHJvdyA9ICgwLCBfcm93LmNyZWF0ZVJvdykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBJbmRleDogSW5kZXgsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgcmFuZ2U6IHJhbmdlXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIHJvdyBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ3JvdycsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAgICAgIHZhciBsYXN0SW5kZXggPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdCA9IGFyZ3NbbGFzdEluZGV4XTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGxhc3QpKSB7XG4gICAgICAgIGFyZ3NbbGFzdEluZGV4XSA9IGxhc3QgLSAxO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcm93LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJvd1RyYW5zZm9ybSA9IGNyZWF0ZVJvd1RyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RkVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zdGQgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdGRcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIG5hbWUgPSAnc3RkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3RkXG4gKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gc3RkXG4gKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZVN0ZFRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzcXJ0ID0gX3JlZi5zcXJ0LFxuICAgICAgdmFyaWFuY2UgPSBfcmVmLnZhcmlhbmNlO1xuICB2YXIgc3RkID0gKDAsIF9zdGQuY3JlYXRlU3RkKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIHNxcnQ6IHNxcnQsXG4gICAgdmFyaWFuY2U6IHZhcmlhbmNlXG4gIH0pO1xuICByZXR1cm4gdHlwZWQoJ3N0ZCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3RkLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN0ZFRyYW5zZm9ybSA9IGNyZWF0ZVN0ZFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX3N1YnNldCA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0XCIpO1xuXG52YXIgbmFtZSA9ICdzdWJzZXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4J107XG52YXIgY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuICB2YXIgc3Vic2V0ID0gKDAsIF9zdWJzZXQuY3JlYXRlU3Vic2V0KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIG1hdHJpeDogbWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3Vic2V0XG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ3N1YnNldCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzdWJzZXQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gY3JlYXRlU3Vic2V0VHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdW1UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtXCIpO1xuXG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnN1bVxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gbWVhblxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG52YXIgbmFtZSA9ICdzdW0nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2FkZCcsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddO1xudmFyIGNyZWF0ZVN1bVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb247XG4gIHZhciBzdW0gPSAoMCwgX3N1bS5jcmVhdGVTdW0pKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgY29uZmlnOiBjb25maWcsXG4gICAgYWRkOiBhZGQsXG4gICAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uXG4gIH0pO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3VtLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bVRyYW5zZm9ybSA9IGNyZWF0ZVN1bVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSBjb21waWxlSW5saW5lRXhwcmVzc2lvbjtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxuLyoqXG4gKiBDb21waWxlIGFuIGlubGluZSBleHByZXNzaW9uIGxpa2UgXCJ4ID4gMFwiXG4gKiBAcGFyYW0ge05vZGV9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gc2NvcGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCBvbmUgYXJndW1lbnQgd2hpY2ggZmlsbHMgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIHZhcmlhYmxlIChsaWtlIFwieFwiKSBhbmQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKGV4cHJlc3Npb24sIG1hdGgsIHNjb3BlKSB7XG4gIC8vIGZpbmQgYW4gdW5kZWZpbmVkIHN5bWJvbFxuICB2YXIgc3ltYm9sID0gZXhwcmVzc2lvbi5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gKDAsIF9pcy5pc1N5bWJvbE5vZGUpKG5vZGUpICYmICEobm9kZS5uYW1lIGluIG1hdGgpICYmICEobm9kZS5uYW1lIGluIHNjb3BlKTtcbiAgfSlbMF07XG5cbiAgaWYgKCFzeW1ib2wpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVuZGVmaW5lZCB2YXJpYWJsZSBmb3VuZCBpbiBpbmxpbmUgZXhwcmVzc2lvbiBcIicgKyBleHByZXNzaW9uICsgJ1wiJyk7XG4gIH0gLy8gY3JlYXRlIGEgdGVzdCBmdW5jdGlvbiBmb3IgdGhpcyBlcXVhdGlvblxuXG5cbiAgdmFyIG5hbWUgPSBzeW1ib2wubmFtZTsgLy8gdmFyaWFibGUgbmFtZVxuXG4gIHZhciBzdWJTY29wZSA9IE9iamVjdC5jcmVhdGUoc2NvcGUpO1xuICB2YXIgZXEgPSBleHByZXNzaW9uLmNvbXBpbGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlubGluZUV4cHJlc3Npb24oeCkge1xuICAgIHN1YlNjb3BlW25hbWVdID0geDtcbiAgICByZXR1cm4gZXEuZXZhbHVhdGUoc3ViU2NvcGUpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcnJvclRyYW5zZm9ybSA9IGVycm9yVHJhbnNmb3JtO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gemVyby1iYXNlZCBpbmRpY2VzIHRvIG9uZS1iYXNlZCBpbmRpY2VzIGluIGVycm9yc1xuICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gKiBAcmV0dXJucyB7RXJyb3IgfCBJbmRleEVycm9yfSBSZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCBlcnJvclxuICovXG5mdW5jdGlvbiBlcnJvclRyYW5zZm9ybShlcnIpIHtcbiAgaWYgKGVyciAmJiBlcnIuaXNJbmRleEVycm9yKSB7XG4gICAgcmV0dXJuIG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGVyci5pbmRleCArIDEsIGVyci5taW4gKyAxLCBlcnIubWF4ICE9PSB1bmRlZmluZWQgPyBlcnIubWF4ICsgMSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICByZXR1cm4gZXJyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgbmFtZSA9ICd2YXJpYW5jZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ2FwcGx5JywgJ2lzTmFOJ107XG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnZhclxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIHZhclxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG5cbnZhciBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgYXBwbHkgPSBfcmVmLmFwcGx5LFxuICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOO1xuICB2YXIgdmFyaWFuY2UgPSAoMCwgX3ZhcmlhbmNlLmNyZWF0ZVZhcmlhbmNlKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGFkZDogYWRkLFxuICAgIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgZGl2aWRlOiBkaXZpZGUsXG4gICAgYXBwbHk6IGFwcGx5LFxuICAgIGlzTmFOOiBpc05hTlxuICB9KTtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdmFyaWFuY2UuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm0gPSBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVR5cGVkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90eXBlZC5jcmVhdGVUeXBlZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXN1bHRTZXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1Jlc3VsdFNldC5jcmVhdGVSZXN1bHRTZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmlnTnVtYmVyQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0JpZ051bWJlci5jcmVhdGVCaWdOdW1iZXJDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wbGV4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbXBsZXguY3JlYXRlQ29tcGxleENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZyYWN0aW9uQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ZyYWN0aW9uLmNyZWF0ZUZyYWN0aW9uQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZ2VDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfUmFuZ2UuY3JlYXRlUmFuZ2VDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXRyaXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTWF0cml4LmNyZWF0ZU1hdHJpeENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlbnNlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0RlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2xvbmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Nsb25lLmNyZWF0ZUNsb25lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzSW50ZWdlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNJbnRlZ2VyLmNyZWF0ZUlzSW50ZWdlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc05lZ2F0aXZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc05lZ2F0aXZlLmNyZWF0ZUlzTmVnYXRpdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNOdW1lcmljXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc051bWVyaWMuY3JlYXRlSXNOdW1lcmljO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhhc051bWVyaWNWYWx1ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaGFzTnVtZXJpY1ZhbHVlLmNyZWF0ZUhhc051bWVyaWNWYWx1ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc1Bvc2l0aXZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1Bvc2l0aXZlLmNyZWF0ZUlzUG9zaXRpdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNaZXJvXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1plcm8uY3JlYXRlSXNaZXJvO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzTmFOXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc05hTi5jcmVhdGVJc05hTjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUeXBlT2ZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3R5cGVPZi5jcmVhdGVUeXBlT2Y7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZFR5cGVvZlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdHlwZU9mLmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Y7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRXF1YWxTY2FsYXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VxdWFsU2NhbGFyLmNyZWF0ZUVxdWFsU2NhbGFyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TcGFyc2VNYXRyaXguY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9udW1iZXIuY3JlYXRlTnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0cmluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RyaW5nLmNyZWF0ZVN0cmluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCb29sZWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ib29sZWFuLmNyZWF0ZUJvb2xlYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmlnbnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9iaWdudW1iZXIuY3JlYXRlQmlnbnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBsZXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBsZXguY3JlYXRlQ29tcGxleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGcmFjdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZnJhY3Rpb24uY3JlYXRlRnJhY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXRyaXguY3JlYXRlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwbGl0VW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3BsaXRVbml0LmNyZWF0ZVNwbGl0VW5pdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbmFyeU1pbnVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmFyeU1pbnVzLmNyZWF0ZVVuYXJ5TWludXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5hcnlQbHVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmFyeVBsdXMuY3JlYXRlVW5hcnlQbHVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFic1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWJzLmNyZWF0ZUFicztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcHBseVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXBwbHkuY3JlYXRlQXBwbHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWRkU2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hZGRTY2FsYXIuY3JlYXRlQWRkU2NhbGFyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNicnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NicnQuY3JlYXRlQ2JydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDZWlsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jZWlsLmNyZWF0ZUNlaWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3ViZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3ViZS5jcmVhdGVDdWJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV4cFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXhwLmNyZWF0ZUV4cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFeHBtMVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXhwbS5jcmVhdGVFeHBtMTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpeC5jcmVhdGVGaXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmxvb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Zsb29yLmNyZWF0ZUZsb29yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdjZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2NkLmNyZWF0ZUdjZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMY21cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xjbS5jcmVhdGVMY207XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMTBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZy5jcmVhdGVMb2cxMDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb2cyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sb2cyLmNyZWF0ZUxvZzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tb2QuY3JlYXRlTW9kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU11bHRpcGx5U2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tdWx0aXBseVNjYWxhci5jcmVhdGVNdWx0aXBseVNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNdWx0aXBseVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbXVsdGlwbHkuY3JlYXRlTXVsdGlwbHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnRoUm9vdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnRoUm9vdC5jcmVhdGVOdGhSb290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpZ25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpZ24uY3JlYXRlU2lnbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcXJ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXJ0LmNyZWF0ZVNxcnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3F1YXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXVhcmUuY3JlYXRlU3F1YXJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnRyYWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdWJ0cmFjdC5jcmVhdGVTdWJ0cmFjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVYZ2NkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF94Z2NkLmNyZWF0ZVhnY2Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90TXVsdGlwbHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdE11bHRpcGx5LmNyZWF0ZURvdE11bHRpcGx5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdEFuZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYml0QW5kLmNyZWF0ZUJpdEFuZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCaXROb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdE5vdC5jcmVhdGVCaXROb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQml0T3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdE9yLmNyZWF0ZUJpdE9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdFhvclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYml0WG9yLmNyZWF0ZUJpdFhvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FyZy5jcmVhdGVBcmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29ualwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uai5jcmVhdGVDb25qO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUltXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbS5jcmVhdGVJbTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmUuY3JlYXRlUmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTm90XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ub3QuY3JlYXRlTm90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vci5jcmVhdGVPcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVYb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3hvci5jcmVhdGVYb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uY2F0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25jYXQuY3JlYXRlQ29uY2F0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbHVtblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29sdW1uLmNyZWF0ZUNvbHVtbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDcm9zc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3Jvc3MuY3JlYXRlQ3Jvc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGlhZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGlhZy5jcmVhdGVEaWFnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV5ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXllLmNyZWF0ZUV5ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWx0ZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpbHRlci5jcmVhdGVGaWx0ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmxhdHRlblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmxhdHRlbi5jcmVhdGVGbGF0dGVuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZvckVhY2hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZvckVhY2guY3JlYXRlRm9yRWFjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2V0TWF0cml4RGF0YVR5cGUuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSWRlbnRpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lkZW50aXR5LmNyZWF0ZUlkZW50aXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUtyb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2tyb24uY3JlYXRlS3JvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21hcC5jcmVhdGVNYXA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT25lc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfb25lcy5jcmVhdGVPbmVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmdlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYW5nZS5jcmVhdGVSYW5nZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXNoYXBlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXNoYXBlLmNyZWF0ZVJlc2hhcGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVzaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXNpemUuY3JlYXRlUmVzaXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvd1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcm93LmNyZWF0ZVJvdztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaXplLmNyZWF0ZVNpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3F1ZWV6ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3F1ZWV6ZS5jcmVhdGVTcXVlZXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3Vic2V0LmNyZWF0ZVN1YnNldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUcmFuc3Bvc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RyYW5zcG9zZS5jcmVhdGVUcmFuc3Bvc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3RyYW5zcG9zZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3RyYW5zcG9zZS5jcmVhdGVDdHJhbnNwb3NlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVplcm9zXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF96ZXJvcy5jcmVhdGVaZXJvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcmZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VyZi5jcmVhdGVFcmY7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbW9kZS5jcmVhdGVNb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb2RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Byb2QuY3JlYXRlUHJvZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGb3JtYXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Zvcm1hdC5jcmVhdGVGb3JtYXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUHJpbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ByaW50LmNyZWF0ZVByaW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRvXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90by5jcmVhdGVUbztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc1ByaW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1ByaW1lLmNyZWF0ZUlzUHJpbWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnVtZXJpY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnVtZXJpYy5jcmVhdGVOdW1lcmljO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpdmlkZVNjYWxhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGl2aWRlU2NhbGFyLmNyZWF0ZURpdmlkZVNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Bvdy5jcmVhdGVQb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUm91bmRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JvdW5kLmNyZWF0ZVJvdW5kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxvZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbG9nMy5jcmVhdGVMb2c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMXBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZzFwLmNyZWF0ZUxvZzFwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU50aFJvb3RzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9udGhSb290cy5jcmVhdGVOdGhSb290cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEb3RQb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdFBvdy5jcmVhdGVEb3RQb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90RGl2aWRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kb3REaXZpZGUuY3JlYXRlRG90RGl2aWRlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxzb2x2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHNvbHZlLmNyZWF0ZUxzb2x2ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVc29sdmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Vzb2x2ZS5jcmVhdGVVc29sdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGVmdFNoaWZ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sZWZ0U2hpZnQuY3JlYXRlTGVmdFNoaWZ0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJpZ2h0QXJpdGhTaGlmdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmlnaHRBcml0aFNoaWZ0LmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSaWdodExvZ1NoaWZ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yaWdodExvZ1NoaWZ0LmNyZWF0ZVJpZ2h0TG9nU2hpZnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQW5kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hbmQuY3JlYXRlQW5kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBhcmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmUuY3JlYXRlQ29tcGFyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wYXJlTmF0dXJhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tcGFyZU5hdHVyYWwuY3JlYXRlQ29tcGFyZU5hdHVyYWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29tcGFyZVRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmVUZXh0LmNyZWF0ZUNvbXBhcmVUZXh0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVxdWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9lcXVhbC5jcmVhdGVFcXVhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcXVhbFRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VxdWFsVGV4dC5jcmVhdGVFcXVhbFRleHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU21hbGxlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc21hbGxlci5jcmVhdGVTbWFsbGVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNtYWxsZXJFcVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc21hbGxlckVxLmNyZWF0ZVNtYWxsZXJFcTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMYXJnZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xhcmdlci5jcmVhdGVMYXJnZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGFyZ2VyRXFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xhcmdlckVxLmNyZWF0ZUxhcmdlckVxO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlZXBFcXVhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVlcEVxdWFsLmNyZWF0ZURlZXBFcXVhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbmVxdWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmVxdWFsLmNyZWF0ZVVuZXF1YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFydGl0aW9uU2VsZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QuY3JlYXRlUGFydGl0aW9uU2VsZWN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNvcnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NvcnQuY3JlYXRlU29ydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21heC5jcmVhdGVNYXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWluXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9taW4uY3JlYXRlTWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ltbXV0YWJsZURlbnNlTWF0cml4LmNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5kZXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTWF0cml4SW5kZXguY3JlYXRlSW5kZXhDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWJvbmFjY2lIZWFwQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ZpYm9uYWNjaUhlYXAuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYUNsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TcGEuY3JlYXRlU3BhQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5pdENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Vbml0LmNyZWF0ZVVuaXRDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbml0RnVuY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3VuaXQuY3JlYXRlVW5pdEZ1bmN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3BhcnNlLmNyZWF0ZVNwYXJzZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDcmVhdGVVbml0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVVbml0LmNyZWF0ZUNyZWF0ZVVuaXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNvcy5jcmVhdGVBY29zO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjb3NoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY29zaC5jcmVhdGVBY29zaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY290XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY290LmNyZWF0ZUFjb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvdGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjb3RoLmNyZWF0ZUFjb3RoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjc2NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjc2MuY3JlYXRlQWNzYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY3NjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNzY2guY3JlYXRlQWNzY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNlY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXNlYy5jcmVhdGVBc2VjO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFzZWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2VjaC5jcmVhdGVBc2VjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc2luXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2luLmNyZWF0ZUFzaW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNpbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FzaW5oLmNyZWF0ZUFzaW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUF0YW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW4uY3JlYXRlQXRhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdGFuMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXRhbjIuY3JlYXRlQXRhbjI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRhbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW5oLmNyZWF0ZUF0YW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29zLmNyZWF0ZUNvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb3NoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3NoLmNyZWF0ZUNvc2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ290XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3QuY3JlYXRlQ290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvdGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvdGguY3JlYXRlQ290aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDc2NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NzYy5jcmVhdGVDc2M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3NjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3NjaC5jcmVhdGVDc2NoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNlY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2VjLmNyZWF0ZVNlYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZWNoLmNyZWF0ZVNlY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2luXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaW4uY3JlYXRlU2luO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpbmguY3JlYXRlU2luaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUYW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Rhbi5jcmVhdGVUYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVGFuaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdGFuaC5jcmVhdGVUYW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldENhcnRlc2lhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0Q2FydGVzaWFuLmNyZWF0ZVNldENhcnRlc2lhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXREaWZmZXJlbmNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXREaWZmZXJlbmNlLmNyZWF0ZVNldERpZmZlcmVuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0RGlzdGluY3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NldERpc3RpbmN0LmNyZWF0ZVNldERpc3RpbmN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldEludGVyc2VjdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0SW50ZXJzZWN0LmNyZWF0ZVNldEludGVyc2VjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRJc1N1YnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0SXNTdWJzZXQuY3JlYXRlU2V0SXNTdWJzZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0TXVsdGlwbGljaXR5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRNdWx0aXBsaWNpdHkuY3JlYXRlU2V0TXVsdGlwbGljaXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFBvd2Vyc2V0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRQb3dlcnNldC5jcmVhdGVTZXRQb3dlcnNldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRTaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRTaXplLmNyZWF0ZVNldFNpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0U3ltRGlmZmVyZW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0U3ltRGlmZmVyZW5jZS5jcmVhdGVTZXRTeW1EaWZmZXJlbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFVuaW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRVbmlvbi5jcmVhdGVTZXRVbmlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBZGRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FkZC5jcmVhdGVBZGQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSHlwb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2h5cG90LmNyZWF0ZUh5cG90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU5vcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX25vcm0uY3JlYXRlTm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdC5jcmVhdGVEb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJhY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RyYWNlLmNyZWF0ZVRyYWNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mdW5jdGlvbi5jcmVhdGVJbmRleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Ob2RlLmNyZWF0ZU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNjZXNzb3JOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9BY2Nlc3Nvck5vZGUuY3JlYXRlQWNjZXNzb3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFycmF5Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQXJyYXlOb2RlLmNyZWF0ZUFycmF5Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQXNzaWdubWVudE5vZGUuY3JlYXRlQXNzaWdubWVudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmxvY2tOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9CbG9ja05vZGUuY3JlYXRlQmxvY2tOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbmRpdGlvbmFsTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQ29uZGl0aW9uYWxOb2RlLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25zdGFudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbnN0YW50Tm9kZS5jcmVhdGVDb25zdGFudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfSW5kZXhOb2RlLmNyZWF0ZUluZGV4Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVPYmplY3ROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9PYmplY3ROb2RlLmNyZWF0ZU9iamVjdE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT3BlcmF0b3JOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9PcGVyYXRvck5vZGUuY3JlYXRlT3BlcmF0b3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBhcmVudGhlc2lzTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfUGFyZW50aGVzaXNOb2RlLmNyZWF0ZVBhcmVudGhlc2lzTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JhbmdlTm9kZS5jcmVhdGVSYW5nZU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVsYXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JlbGF0aW9uYWxOb2RlLmNyZWF0ZVJlbGF0aW9uYWxOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN5bWJvbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1N5bWJvbE5vZGUuY3JlYXRlU3ltYm9sTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGdW5jdGlvbk5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0Z1bmN0aW9uTm9kZS5jcmVhdGVGdW5jdGlvbk5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmNyZWF0ZVBhcnNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBpbGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBpbGUuY3JlYXRlQ29tcGlsZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFdmFsdWF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXZhbHVhdGUuY3JlYXRlRXZhbHVhdGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZEV2YWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V2YWwuY3JlYXRlRGVwcmVjYXRlZEV2YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VyQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1BhcnNlci5jcmVhdGVQYXJzZXJDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQYXJzZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlci5jcmVhdGVQYXJzZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTHVwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sdXAuY3JlYXRlTHVwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9xci5jcmVhdGVRcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTbHVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NsdS5jcmVhdGVTbHU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTHVzb2x2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHVzb2x2ZS5jcmVhdGVMdXNvbHZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhlbHBDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfSGVscC5jcmVhdGVIZWxwQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2hhaW5DbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQ2hhaW4uY3JlYXRlQ2hhaW5DbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIZWxwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9oZWxwLmNyZWF0ZUhlbHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2hhaW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NoYWluLmNyZWF0ZUNoYWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGV0LmNyZWF0ZURldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbnZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludi5jcmVhdGVJbnY7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRWlnc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZWlncy5jcmVhdGVFaWdzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV4cG1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V4cG0yLmNyZWF0ZUV4cG07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3FydG1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NxcnRtLmNyZWF0ZVNxcnRtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpdmlkZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGl2aWRlLmNyZWF0ZURpdmlkZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEaXN0YW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGlzdGFuY2UuY3JlYXRlRGlzdGFuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW50ZXJzZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcnNlY3QuY3JlYXRlSW50ZXJzZWN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1bVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3VtLmNyZWF0ZVN1bTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNZWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWFuLmNyZWF0ZU1lYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWVkaWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWRpYW4uY3JlYXRlTWVkaWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWFkLmNyZWF0ZU1hZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYXJpYW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UuY3JlYXRlVmFyaWFuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZFZhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UuY3JlYXRlRGVwcmVjYXRlZFZhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVRdWFudGlsZVNlcVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcXVhbnRpbGVTZXEuY3JlYXRlUXVhbnRpbGVTZXE7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3RkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdGQuY3JlYXRlU3RkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbWJpbmF0aW9uc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tYmluYXRpb25zLmNyZWF0ZUNvbWJpbmF0aW9ucztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21iaW5hdGlvbnNXaXRoUmVwLmNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlR2FtbWFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2dhbW1hLmNyZWF0ZUdhbW1hO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhY3RvcmlhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmFjdG9yaWFsLmNyZWF0ZUZhY3RvcmlhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVLbGRpdmVyZ2VuY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2tsZGl2ZXJnZW5jZS5jcmVhdGVLbGRpdmVyZ2VuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTXVsdGlub21pYWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX211bHRpbm9taWFsLmNyZWF0ZU11bHRpbm9taWFsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBlcm11dGF0aW9uc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGVybXV0YXRpb25zLmNyZWF0ZVBlcm11dGF0aW9ucztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaWNrUmFuZG9tXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waWNrUmFuZG9tLmNyZWF0ZVBpY2tSYW5kb207XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZG9tXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYW5kb20uY3JlYXRlUmFuZG9tO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmRvbUludFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZG9tSW50LmNyZWF0ZVJhbmRvbUludDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGlybGluZ1MyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdGlybGluZ1MuY3JlYXRlU3RpcmxpbmdTMjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCZWxsTnVtYmVyc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYmVsbE51bWJlcnMuY3JlYXRlQmVsbE51bWJlcnM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2F0YWxhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY2F0YWxhbi5jcmVhdGVDYXRhbGFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBvc2l0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21wb3NpdGlvbi5jcmVhdGVDb21wb3NpdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaW1wbGlmeVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2ltcGxpZnkuY3JlYXRlU2ltcGxpZnk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVyaXZhdGl2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVyaXZhdGl2ZS5jcmVhdGVEZXJpdmF0aXZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhdGlvbmFsaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYXRpb25hbGl6ZS5jcmVhdGVSYXRpb25hbGl6ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXZpdmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXZpdmVyLmNyZWF0ZVJldml2ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVwbGFjZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JlcGxhY2VyLmNyZWF0ZVJlcGxhY2VyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVwcGVyY2FzZUVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVVcHBlcmNhc2VFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhbHNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlRmFsc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZUk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5maW5pdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVJbmZpbml0eTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMTjEwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE4xMDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMTjJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVMTjI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTE9HMTBFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE9HMTBFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxPRzJFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE9HMkU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTmFOXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTmFOO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51bGxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVOdWxsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBoaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVBoaTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVBpO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVwcGVyY2FzZVBpXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlVXBwZXJjYXNlUGk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU1FSVDFfMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVNRUlQxXzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU1FSVDJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVTUVJUMjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUYXVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVUYXU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJ1ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVRydWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVZlcnNpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRvbWljTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQXRvbWljTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdm9nYWRyb1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQXZvZ2Fkcm87XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9ock1hZ25ldG9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVCb2hyTWFnbmV0b247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9oclJhZGl1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQm9oclJhZGl1cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCb2x0em1hbm5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUJvbHR6bWFubjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ291bG9tYlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ291bG9tYjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZXV0ZXJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZURldXRlcm9uTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFZmltb3ZGYWN0b3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVmaW1vdkZhY3RvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFbGVjdHJpY0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVFbGVjdHJpY0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVsZWN0cm9uTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRWxlY3Ryb25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmFyYWRheVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRmFyYWRheTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGZXJtaUNvdXBsaW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVGZXJtaUNvdXBsaW5nO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbmVTdHJ1Y3R1cmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZpbmVTdHJ1Y3R1cmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlyc3RSYWRpYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZpcnN0UmFkaWF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdhc0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHYXNDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdyYXZpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUdyYXZpdHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSGFydHJlZUVuZXJneVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlSGFydHJlZUVuZXJneTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUtsaXR6aW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVLbGl0emluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb3NjaG1pZHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUxvc2NobWlkdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYWduZXRpY0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJNYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNb2xhck1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJNYXNzQzEyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNb2xhck1hc3NDMTI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNb2xhclZvbHVtZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJWb2x1bWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTmV1dHJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU5ldXRyb25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51Y2xlYXJNYWduZXRvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTnVjbGVhck1hZ25ldG9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja0NoYXJnZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUGxhbmNrQ2hhcmdlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tMZW5ndGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVBsYW5ja0xlbmd0aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tNYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tNYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tUZW1wZXJhdHVyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tUaW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tUaW1lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb3Rvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVByb3Rvbk1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJ5ZGJlcmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVJ5ZGJlcmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2Fja3VyVGV0cm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlU2Fja3VyVGV0cm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNvbmRSYWRpYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNlY29uZFJhZGlhdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcGVlZE9mTGlnaHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNwZWVkT2ZMaWdodDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGVmYW5Cb2x0em1hbm5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVZhY3V1bUltcGVkYW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlVmFjdXVtSW1wZWRhbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVdlYWtNaXhpbmdBbmdsZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlV2Vha01peGluZ0FuZ2xlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVdpZW5EaXNwbGFjZW1lbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXBwbHlUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FwcGx5Mi5jcmVhdGVBcHBseVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb2x1bW5UcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbHVtbjIuY3JlYXRlQ29sdW1uVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbHRlclRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmlsdGVyMi5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRm9yRWFjaFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZm9yRWFjaDIuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbmRleFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW5kZXguY3JlYXRlSW5kZXhUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWFwVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXAyLmNyZWF0ZU1hcFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXhUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21heDIuY3JlYXRlTWF4VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1lYW5UcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21lYW4yLmNyZWF0ZU1lYW5UcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWluVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9taW4yLmNyZWF0ZU1pblRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZ2UyLmNyZWF0ZVJhbmdlVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvd1RyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcm93Mi5jcmVhdGVSb3dUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3Vic2V0VHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdWJzZXQyLmNyZWF0ZVN1YnNldFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25jYXRUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbmNhdDIuY3JlYXRlQ29uY2F0VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0ZFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RkMi5jcmVhdGVTdGRUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3VtVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdW0yLmNyZWF0ZVN1bVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UyLmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtO1xuICB9XG59KTtcblxudmFyIF90eXBlZCA9IHJlcXVpcmUoXCIuL2NvcmUvZnVuY3Rpb24vdHlwZWRcIik7XG5cbnZhciBfUmVzdWx0U2V0ID0gcmVxdWlyZShcIi4vdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0XCIpO1xuXG52YXIgX0JpZ051bWJlciA9IHJlcXVpcmUoXCIuL3R5cGUvYmlnbnVtYmVyL0JpZ051bWJlclwiKTtcblxudmFyIF9Db21wbGV4ID0gcmVxdWlyZShcIi4vdHlwZS9jb21wbGV4L0NvbXBsZXhcIik7XG5cbnZhciBfRnJhY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uXCIpO1xuXG52YXIgX1JhbmdlID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvUmFuZ2VcIik7XG5cbnZhciBfTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvTWF0cml4XCIpO1xuXG52YXIgX0RlbnNlTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvRGVuc2VNYXRyaXhcIik7XG5cbnZhciBfY2xvbmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9jbG9uZVwiKTtcblxudmFyIF9pc0ludGVnZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXJcIik7XG5cbnZhciBfaXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmVcIik7XG5cbnZhciBfaXNOdW1lcmljID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljXCIpO1xuXG52YXIgX2hhc051bWVyaWNWYWx1ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2hhc051bWVyaWNWYWx1ZVwiKTtcblxudmFyIF9pc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZVwiKTtcblxudmFyIF9pc1plcm8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1plcm9cIik7XG5cbnZhciBfaXNOYU4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc05hTlwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfZXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsU2NhbGFyXCIpO1xuXG52YXIgX1NwYXJzZU1hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi90eXBlL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi90eXBlL3N0cmluZ1wiKTtcblxudmFyIF9ib29sZWFuID0gcmVxdWlyZShcIi4vdHlwZS9ib29sZWFuXCIpO1xuXG52YXIgX2JpZ251bWJlciA9IHJlcXVpcmUoXCIuL3R5cGUvYmlnbnVtYmVyL2Z1bmN0aW9uL2JpZ251bWJlclwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4vdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXhcIik7XG5cbnZhciBfZnJhY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL2ZyYWN0aW9uL2Z1bmN0aW9uL2ZyYWN0aW9uXCIpO1xuXG52YXIgX21hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uL21hdHJpeFwiKTtcblxudmFyIF9zcGxpdFVuaXQgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvZnVuY3Rpb24vc3BsaXRVbml0XCIpO1xuXG52YXIgX3VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXNcIik7XG5cbnZhciBfdW5hcnlQbHVzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy91bmFyeVBsdXNcIik7XG5cbnZhciBfYWJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnNcIik7XG5cbnZhciBfYXBwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvYXBwbHlcIik7XG5cbnZhciBfYWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGRTY2FsYXJcIik7XG5cbnZhciBfY2JydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydFwiKTtcblxudmFyIF9jZWlsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsXCIpO1xuXG52YXIgX2N1YmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmVcIik7XG5cbnZhciBfZXhwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBcIik7XG5cbnZhciBfZXhwbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTFcIik7XG5cbnZhciBfZml4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9maXhcIik7XG5cbnZhciBfZmxvb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yXCIpO1xuXG52YXIgX2djZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZ2NkXCIpO1xuXG52YXIgX2xjbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbGNtXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTBcIik7XG5cbnZhciBfbG9nMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMlwiKTtcblxudmFyIF9tb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL21vZFwiKTtcblxudmFyIF9tdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHlTY2FsYXJcIik7XG5cbnZhciBfbXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5XCIpO1xuXG52YXIgX250aFJvb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RcIik7XG5cbnZhciBfc2lnbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc2lnblwiKTtcblxudmFyIF9zcXJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0XCIpO1xuXG52YXIgX3NxdWFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlXCIpO1xuXG52YXIgX3N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdFwiKTtcblxudmFyIF94Z2NkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkXCIpO1xuXG52YXIgX2RvdE11bHRpcGx5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseVwiKTtcblxudmFyIF9iaXRBbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdEFuZFwiKTtcblxudmFyIF9iaXROb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdFwiKTtcblxudmFyIF9iaXRPciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3JcIik7XG5cbnZhciBfYml0WG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRYb3JcIik7XG5cbnZhciBfYXJnID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9hcmdcIik7XG5cbnZhciBfY29uaiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvY29ualwiKTtcblxudmFyIF9pbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvaW1cIik7XG5cbnZhciBfcmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L3JlXCIpO1xuXG52YXIgX25vdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvbm90XCIpO1xuXG52YXIgX29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC9vclwiKTtcblxudmFyIF94b3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL3hvclwiKTtcblxudmFyIF9jb25jYXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY29uY2F0XCIpO1xuXG52YXIgX2NvbHVtbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfY3Jvc3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3NcIik7XG5cbnZhciBfZGlhZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kaWFnXCIpO1xuXG52YXIgX2V5ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9leWVcIik7XG5cbnZhciBfZmlsdGVyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZpbHRlclwiKTtcblxudmFyIF9mbGF0dGVuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZsYXR0ZW5cIik7XG5cbnZhciBfZm9yRWFjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoXCIpO1xuXG52YXIgX2dldE1hdHJpeERhdGFUeXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlXCIpO1xuXG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5XCIpO1xuXG52YXIgX2tyb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgva3JvblwiKTtcblxudmFyIF9tYXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvbWFwXCIpO1xuXG52YXIgX29uZXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvb25lc1wiKTtcblxudmFyIF9yYW5nZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIF9yZXNoYXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2hhcGVcIik7XG5cbnZhciBfcmVzaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZVwiKTtcblxudmFyIF9yb3cgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcm93XCIpO1xuXG52YXIgX3NpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc2l6ZVwiKTtcblxudmFyIF9zcXVlZXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NxdWVlemVcIik7XG5cbnZhciBfc3Vic2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3N1YnNldFwiKTtcblxudmFyIF90cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvdHJhbnNwb3NlXCIpO1xuXG52YXIgX2N0cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZVwiKTtcblxudmFyIF96ZXJvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC96ZXJvc1wiKTtcblxudmFyIF9lcmYgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zcGVjaWFsL2VyZlwiKTtcblxudmFyIF9tb2RlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tb2RlXCIpO1xuXG52YXIgX3Byb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2RcIik7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RyaW5nL2Zvcm1hdFwiKTtcblxudmFyIF9wcmludCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0cmluZy9wcmludFwiKTtcblxudmFyIF90byA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3VuaXQvdG9cIik7XG5cbnZhciBfaXNQcmltZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWVcIik7XG5cbnZhciBfbnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL251bWVyaWNcIik7XG5cbnZhciBfZGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGVTY2FsYXJcIik7XG5cbnZhciBfcG93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3dcIik7XG5cbnZhciBfcm91bmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kXCIpO1xuXG52YXIgX2xvZzMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZ1wiKTtcblxudmFyIF9sb2cxcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXBcIik7XG5cbnZhciBfbnRoUm9vdHMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzXCIpO1xuXG52YXIgX2RvdFBvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93XCIpO1xuXG52YXIgX2RvdERpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlXCIpO1xuXG52YXIgX2xzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL2xzb2x2ZVwiKTtcblxudmFyIF91c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NvbHZlci91c29sdmVcIik7XG5cbnZhciBfbGVmdFNoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9sZWZ0U2hpZnRcIik7XG5cbnZhciBfcmlnaHRBcml0aFNoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnRcIik7XG5cbnZhciBfcmlnaHRMb2dTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRMb2dTaGlmdFwiKTtcblxudmFyIF9hbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL2FuZFwiKTtcblxudmFyIF9jb21wYXJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlXCIpO1xuXG52YXIgX2NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlTmF0dXJhbFwiKTtcblxudmFyIF9jb21wYXJlVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVRleHRcIik7XG5cbnZhciBfZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsXCIpO1xuXG52YXIgX2VxdWFsVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxUZXh0XCIpO1xuXG52YXIgX3NtYWxsZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJcIik7XG5cbnZhciBfc21hbGxlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyRXFcIik7XG5cbnZhciBfbGFyZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJcIik7XG5cbnZhciBfbGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlckVxXCIpO1xuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsXCIpO1xuXG52YXIgX3VuZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWxcIik7XG5cbnZhciBfcGFydGl0aW9uU2VsZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdFwiKTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NvcnRcIik7XG5cbnZhciBfbWF4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tYXhcIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9taW5cIik7XG5cbnZhciBfSW1tdXRhYmxlRGVuc2VNYXRyaXggPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9JbW11dGFibGVEZW5zZU1hdHJpeFwiKTtcblxudmFyIF9NYXRyaXhJbmRleCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L01hdHJpeEluZGV4XCIpO1xuXG52YXIgX0ZpYm9uYWNjaUhlYXAgPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9GaWJvbmFjY2lIZWFwXCIpO1xuXG52YXIgX1NwYSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1NwYVwiKTtcblxudmFyIF9Vbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L1VuaXRcIik7XG5cbnZhciBfdW5pdCA9IHJlcXVpcmUoXCIuL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0XCIpO1xuXG52YXIgX3NwYXJzZSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uL3NwYXJzZVwiKTtcblxudmFyIF9jcmVhdGVVbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L2Z1bmN0aW9uL2NyZWF0ZVVuaXRcIik7XG5cbnZhciBfYWNvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zXCIpO1xuXG52YXIgX2Fjb3NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NoXCIpO1xuXG52YXIgX2Fjb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdFwiKTtcblxudmFyIF9hY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290aFwiKTtcblxudmFyIF9hY3NjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2NcIik7XG5cbnZhciBfYWNzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2hcIik7XG5cbnZhciBfYXNlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjXCIpO1xuXG52YXIgX2FzZWNoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNoXCIpO1xuXG52YXIgX2FzaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpblwiKTtcblxudmFyIF9hc2luaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luaFwiKTtcblxudmFyIF9hdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW5cIik7XG5cbnZhciBfYXRhbjIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjJcIik7XG5cbnZhciBfYXRhbmggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmhcIik7XG5cbnZhciBfY29zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc1wiKTtcblxudmFyIF9jb3NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2hcIik7XG5cbnZhciBfY290ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdFwiKTtcblxudmFyIF9jb3RoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGhcIik7XG5cbnZhciBfY3NjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY1wiKTtcblxudmFyIF9jc2NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2hcIik7XG5cbnZhciBfc2VjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY1wiKTtcblxudmFyIF9zZWNoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2hcIik7XG5cbnZhciBfc2luID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpblwiKTtcblxudmFyIF9zaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmhcIik7XG5cbnZhciBfdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhblwiKTtcblxudmFyIF90YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmhcIik7XG5cbnZhciBfc2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhblwiKTtcblxudmFyIF9zZXREaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0RGlzdGluY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0RGlzdGluY3RcIik7XG5cbnZhciBfc2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdFwiKTtcblxudmFyIF9zZXRJc1N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldFwiKTtcblxudmFyIF9zZXRNdWx0aXBsaWNpdHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5XCIpO1xuXG52YXIgX3NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0XCIpO1xuXG52YXIgX3NldFNpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0U2l6ZVwiKTtcblxudmFyIF9zZXRTeW1EaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFN5bURpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0VW5pb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0VW5pb25cIik7XG5cbnZhciBfYWRkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGRcIik7XG5cbnZhciBfaHlwb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90XCIpO1xuXG52YXIgX25vcm0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL25vcm1cIik7XG5cbnZhciBfZG90ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2RvdFwiKTtcblxudmFyIF90cmFjZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFjZVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uXCIpO1xuXG52YXIgX05vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvTm9kZVwiKTtcblxudmFyIF9BY2Nlc3Nvck5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQWNjZXNzb3JOb2RlXCIpO1xuXG52YXIgX0FycmF5Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9BcnJheU5vZGVcIik7XG5cbnZhciBfQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQXNzaWdubWVudE5vZGVcIik7XG5cbnZhciBfQmxvY2tOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZVwiKTtcblxudmFyIF9Db25kaXRpb25hbE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQ29uZGl0aW9uYWxOb2RlXCIpO1xuXG52YXIgX0NvbnN0YW50Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9Db25zdGFudE5vZGVcIik7XG5cbnZhciBfRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9GdW5jdGlvbkFzc2lnbm1lbnROb2RlXCIpO1xuXG52YXIgX0luZGV4Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9JbmRleE5vZGVcIik7XG5cbnZhciBfT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9PYmplY3ROb2RlXCIpO1xuXG52YXIgX09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9PcGVyYXRvck5vZGVcIik7XG5cbnZhciBfUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZVwiKTtcblxudmFyIF9SYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvUmFuZ2VOb2RlXCIpO1xuXG52YXIgX1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1JlbGF0aW9uYWxOb2RlXCIpO1xuXG52YXIgX1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZVwiKTtcblxudmFyIF9GdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlXCIpO1xuXG52YXIgX3BhcnNlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9wYXJzZVwiKTtcblxudmFyIF9jb21waWxlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlXCIpO1xuXG52YXIgX2V2YWx1YXRlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZVwiKTtcblxudmFyIF9ldmFsID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsXCIpO1xuXG52YXIgX1BhcnNlciA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vUGFyc2VyXCIpO1xuXG52YXIgX3BhcnNlciA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyXCIpO1xuXG52YXIgX2x1cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9sdXBcIik7XG5cbnZhciBfcXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2RlY29tcG9zaXRpb24vcXJcIik7XG5cbnZhciBfc2x1ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL3NsdVwiKTtcblxudmFyIF9sdXNvbHZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZVwiKTtcblxudmFyIF9IZWxwID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9IZWxwXCIpO1xuXG52YXIgX0NoYWluID0gcmVxdWlyZShcIi4vdHlwZS9jaGFpbi9DaGFpblwiKTtcblxudmFyIF9oZWxwID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9oZWxwXCIpO1xuXG52YXIgX2NoYWluID0gcmVxdWlyZShcIi4vdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpblwiKTtcblxudmFyIF9kZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZGV0XCIpO1xuXG52YXIgX2ludiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pbnZcIik7XG5cbnZhciBfZWlncyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9laWdzXCIpO1xuXG52YXIgX2V4cG0yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2V4cG1cIik7XG5cbnZhciBfc3FydG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3FydG1cIik7XG5cbnZhciBfZGl2aWRlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGVcIik7XG5cbnZhciBfZGlzdGFuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9kaXN0YW5jZVwiKTtcblxudmFyIF9pbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3RcIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdW1cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhblwiKTtcblxudmFyIF9tZWRpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhblwiKTtcblxudmFyIF9tYWQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2VcIik7XG5cbnZhciBfcXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxXCIpO1xuXG52YXIgX3N0ZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3RkXCIpO1xuXG52YXIgX2NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1wiKTtcblxudmFyIF9jb21iaW5hdGlvbnNXaXRoUmVwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvY29tYmluYXRpb25zV2l0aFJlcFwiKTtcblxudmFyIF9nYW1tYSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hXCIpO1xuXG52YXIgX2ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2ZhY3RvcmlhbFwiKTtcblxudmFyIF9rbGRpdmVyZ2VuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9rbGRpdmVyZ2VuY2VcIik7XG5cbnZhciBfbXVsdGlub21pYWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9tdWx0aW5vbWlhbFwiKTtcblxudmFyIF9wZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9wZXJtdXRhdGlvbnNcIik7XG5cbnZhciBfcGlja1JhbmRvbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3BpY2tSYW5kb21cIik7XG5cbnZhciBfcmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tXCIpO1xuXG52YXIgX3JhbmRvbUludCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludFwiKTtcblxudmFyIF9zdGlybGluZ1MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzJcIik7XG5cbnZhciBfYmVsbE51bWJlcnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzXCIpO1xuXG52YXIgX2NhdGFsYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NhdGFsYW5cIik7XG5cbnZhciBfY29tcG9zaXRpb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NvbXBvc2l0aW9uXCIpO1xuXG52YXIgX3NpbXBsaWZ5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeVwiKTtcblxudmFyIF9kZXJpdmF0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZXJpdmF0aXZlXCIpO1xuXG52YXIgX3JhdGlvbmFsaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZVwiKTtcblxudmFyIF9yZXZpdmVyID0gcmVxdWlyZShcIi4vanNvbi9yZXZpdmVyXCIpO1xuXG52YXIgX3JlcGxhY2VyID0gcmVxdWlyZShcIi4vanNvbi9yZXBsYWNlclwiKTtcblxudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5cbnZhciBfcGh5c2ljYWxDb25zdGFudHMgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvcGh5c2ljYWxDb25zdGFudHNcIik7XG5cbnZhciBfYXBwbHkyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtXCIpO1xuXG52YXIgX2NvbHVtbjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9jb2x1bW4udHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZpbHRlcjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZvckVhY2gyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm1cIik7XG5cbnZhciBfaW5kZXggPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWFwMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21hcC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWF4MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21heC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWVhbjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9tZWFuLnRyYW5zZm9ybVwiKTtcblxudmFyIF9taW4yID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybVwiKTtcblxudmFyIF9yYW5nZTIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9yYW5nZS50cmFuc2Zvcm1cIik7XG5cbnZhciBfcm93MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3Vic2V0MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1YnNldC50cmFuc2Zvcm1cIik7XG5cbnZhciBfY29uY2F0MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3RkMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N0ZC50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3VtMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm1cIik7XG5cbnZhciBfdmFyaWFuY2UyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtXCIpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXAgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2x1cCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnYWJzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnbGFyZ2VyJywgJ2VxdWFsU2NhbGFyJywgJ3VuYXJ5TWludXMnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4JywgJ1NwYSddO1xudmFyIGNyZWF0ZUx1cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIFNwYXJzZU1hdHJpeCA9IF9yZWYuU3BhcnNlTWF0cml4LFxuICAgICAgU3BhID0gX3JlZi5TcGE7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgTGAsIGBVYCkgYW5kIGFcbiAgICogcm93IHBlcm11dGF0aW9uIHZlY3RvciBgcGAgd2hlcmUgYEFbcCw6XSA9IEwgKiBVYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubHVwKEEpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbWzIsIDFdLCBbMSwgNF1dXG4gICAqICAgIGNvbnN0IHIgPSBtYXRoLmx1cChtKVxuICAgKiAgICAvLyByID0ge1xuICAgKiAgICAvLyAgIEw6IFtbMSwgMF0sIFswLjUsIDFdXSxcbiAgICogICAgLy8gICBVOiBbWzIsIDFdLCBbMCwgMy41XV0sXG4gICAqICAgIC8vICAgUDogWzAsIDFdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNsdSwgbHNvbHZlLCBsdXNvbHZlLCB1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gQSAgICBBIHR3byBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgZm9yIHdoaWNoIHRvIGdldCB0aGUgTFVQIGRlY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3tMOiBBcnJheSB8IE1hdHJpeCwgVTogQXJyYXkgfCBNYXRyaXgsIFA6IEFycmF5LjxudW1iZXI+fX0gVGhlIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LCB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXggYW5kIHRoZSBwZXJtdXRhdGlvbiBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIERlbnNlTWF0cml4OiBmdW5jdGlvbiBEZW5zZU1hdHJpeChtKSB7XG4gICAgICByZXR1cm4gX2RlbnNlTFVQKG0pO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9zcGFyc2VMVVAobSk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYSkge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gbHVwLCB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlTFVQKG0pOyAvLyByZXN1bHRcblxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBMOiByLkwudmFsdWVPZigpLFxuICAgICAgICBVOiByLlUudmFsdWVPZigpLFxuICAgICAgICBwOiByLnBcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VMVVAobSkge1xuICAgIC8vIHJvd3MgJiBjb2x1bW5zXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gbS5fc2l6ZVsxXTsgLy8gbWluaW11bSByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbiA9IE1hdGgubWluKHJvd3MsIGNvbHVtbnMpOyAvLyBtYXRyaXggYXJyYXksIGNsb25lIG9yaWdpbmFsIGRhdGFcblxuICAgIHZhciBkYXRhID0gKDAsIF9vYmplY3QuY2xvbmUpKG0uX2RhdGEpOyAvLyBsIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBsZGF0YSA9IFtdO1xuICAgIHZhciBsc2l6ZSA9IFtyb3dzLCBuXTsgLy8gdSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdWRhdGEgPSBbXTtcbiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBwID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBwW2ldID0gaTtcbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBza2lwIGZpcnN0IGNvbHVtbiBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gbWluIGksalxuICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihpLCBqKTsgLy8gdltpLCBqXVxuXG4gICAgICAgICAgdmFyIHMgPSAwOyAvLyBsb29wIHVwIHRvIG1pblxuXG4gICAgICAgICAgZm9yIChrID0gMDsgayA8IG1pbjsgaysrKSB7XG4gICAgICAgICAgICAvLyBzID0gbFtpLCBrXSAtIGRhdGFbaywgal1cbiAgICAgICAgICAgIHMgPSBhZGRTY2FsYXIocywgbXVsdGlwbHlTY2FsYXIoZGF0YVtpXVtrXSwgZGF0YVtrXVtqXSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbaV1bal0gPSBzdWJ0cmFjdChkYXRhW2ldW2pdLCBzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyByb3cgd2l0aCBsYXJnZXIgdmFsdWUgaW4gY3ZlY3Rvciwgcm93ID49IGpcblxuXG4gICAgICB2YXIgcGkgPSBqO1xuICAgICAgdmFyIHBhYnN2ID0gMDtcbiAgICAgIHZhciB2amogPSAwOyAvLyBsb29wIHJvd3NcblxuICAgICAgZm9yIChpID0gajsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBkYXRhIEAgaSwgalxuICAgICAgICB2YXIgdiA9IGRhdGFbaV1bal07IC8vIGFic29sdXRlIHZhbHVlXG5cbiAgICAgICAgdmFyIGFic3YgPSBhYnModik7IC8vIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdGUgdmFsdWVcblxuICAgICAgICBpZiAobGFyZ2VyKGFic3YsIHBhYnN2KSkge1xuICAgICAgICAgIC8vIHN0b3JlIHJvd1xuICAgICAgICAgIHBpID0gaTsgLy8gdXBkYXRlIG1heCB2YWx1ZVxuXG4gICAgICAgICAgcGFic3YgPSBhYnN2OyAvLyB2YWx1ZSBAIFtqLCBqXVxuXG4gICAgICAgICAgdmpqID0gdjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKVxuXG5cbiAgICAgIGlmIChqICE9PSBwaSkge1xuICAgICAgICAvLyBzd2FwIHZhbHVlcyBqIDwtPiBwaSBpbiBwXG4gICAgICAgIHBbal0gPSBbcFtwaV0sIHBbcGldID0gcFtqXV1bMF07IC8vIHN3YXAgaiA8LT4gcGkgaW4gZGF0YVxuXG4gICAgICAgIERlbnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgZGF0YSk7XG4gICAgICB9IC8vIGNoZWNrIGNvbHVtbiBpcyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAvLyBsb29wIHJvd3MgKGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4KVxuICAgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHZhbHVlIEAgaSwgalxuICAgICAgICAgIHZhciB2aWogPSBkYXRhW2ldW2pdO1xuXG4gICAgICAgICAgaWYgKCFlcXVhbFNjYWxhcih2aWosIDApKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZGF0YVxuICAgICAgICAgICAgZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihkYXRhW2ldW2pdLCB2amopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBpbml0aWFsaXplIHJvdyBpbiBhcnJheXNcbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgaWYgKGkgPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAvLyBVXG4gICAgICAgICAgICB1ZGF0YVtpXSA9IFtdO1xuICAgICAgICAgIH0gLy8gTFxuXG5cbiAgICAgICAgICBsZGF0YVtpXSA9IFtdO1xuICAgICAgICB9IC8vIGNoZWNrIHdlIGFyZSBpbiB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgIGlmIChpIDwgaikge1xuICAgICAgICAgIC8vIGNoZWNrIHJvdyBleGlzdHMgaW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIC8vIFVcbiAgICAgICAgICAgIHVkYXRhW2ldW2pdID0gZGF0YVtpXVtqXTtcbiAgICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgICAgaWYgKGogPCByb3dzKSB7XG4gICAgICAgICAgICAvLyBMXG4gICAgICAgICAgICBsZGF0YVtpXVtqXSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gZGlhZ29uYWwgdmFsdWVcblxuXG4gICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgIGlmIChpIDwgY29sdW1ucykge1xuICAgICAgICAgICAgLy8gVVxuICAgICAgICAgICAgdWRhdGFbaV1bal0gPSBkYXRhW2ldW2pdO1xuICAgICAgICAgIH0gLy8gY2hlY2sgY29sdW1uIGV4aXN0cyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgICAgICBpZiAoaiA8IHJvd3MpIHtcbiAgICAgICAgICAgIC8vIExcbiAgICAgICAgICAgIGxkYXRhW2ldW2pdID0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAvLyBVXG4gICAgICAgICAgdWRhdGFbaV1bal0gPSAwO1xuICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAgIC8vIExcbiAgICAgICAgICBsZGF0YVtpXVtqXSA9IGRhdGFbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGwgbWF0cml4XG5cblxuICAgIHZhciBsID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGxkYXRhLFxuICAgICAgc2l6ZTogbHNpemVcbiAgICB9KTsgLy8gdSBtYXRyaXhcblxuICAgIHZhciB1ID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IHVkYXRhLFxuICAgICAgc2l6ZTogdXNpemVcbiAgICB9KTsgLy8gcCB2ZWN0b3JcblxuICAgIHZhciBwdiA9IFtdO1xuXG4gICAgZm9yIChpID0gMCwgbiA9IHAubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBwdltwW2ldXSA9IGk7XG4gICAgfSAvLyByZXR1cm4gbWF0cmljZXNcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEw6IGwsXG4gICAgICBVOiB1LFxuICAgICAgcDogcHYsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5QOiAnICsgdGhpcy5wO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlTFVQKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1uc1xuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIG1pbmltdW0gcm93cyBhbmQgY29sdW1uc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzLCBjb2x1bW5zKTsgLy8gbWF0cml4IGFycmF5cyAod2lsbCBub3QgYmUgbW9kaWZpZWQsIHRoYW5rcyB0byBwZXJtdXRhdGlvbiB2ZWN0b3IpXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIGwgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGx2YWx1ZXMgPSBbXTtcbiAgICB2YXIgbGluZGV4ID0gW107XG4gICAgdmFyIGxwdHIgPSBbXTtcbiAgICB2YXIgbHNpemUgPSBbcm93cywgbl07IC8vIHUgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHV2YWx1ZXMgPSBbXTtcbiAgICB2YXIgdWluZGV4ID0gW107XG4gICAgdmFyIHVwdHIgPSBbXTtcbiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JzLCAoY3VycmVudCBpbmRleCAtPiBvcmlnaW5hbCBpbmRleCkgYW5kIChvcmlnaW5hbCBpbmRleCAtPiBjdXJyZW50IGluZGV4KVxuXG4gICAgdmFyIHB2Q28gPSBbXTtcbiAgICB2YXIgcHZPYyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgcHZDb1tpXSA9IGk7XG4gICAgICBwdk9jW2ldID0gaTtcbiAgICB9IC8vIHN3YXAgaW5kaWNlcyBpbiBwZXJtdXRhdGlvbiB2ZWN0b3JzIChjb25kaXRpb24geCA8IHkpIVxuXG5cbiAgICB2YXIgc3dhcEluZGVjZXMgPSBmdW5jdGlvbiBzd2FwSW5kZWNlcyh4LCB5KSB7XG4gICAgICAvLyBmaW5kIHB2IGluZGVjZXMgZ2V0dGluZyBkYXRhIGZyb20geCBhbmQgeVxuICAgICAgdmFyIGt4ID0gcHZPY1t4XTtcbiAgICAgIHZhciBreSA9IHB2T2NbeV07IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3IgY3VycmVudCAtPiBvcmlnaW5hbFxuXG4gICAgICBwdkNvW2t4XSA9IHk7XG4gICAgICBwdkNvW2t5XSA9IHg7IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3Igb3JpZ2luYWwgLT4gY3VycmVudFxuXG4gICAgICBwdk9jW3hdID0ga3k7XG4gICAgICBwdk9jW3ldID0ga3g7XG4gICAgfTsgLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgLy8gc3BhcnNlIGFjY3VtdWxhdG9yXG4gICAgICB2YXIgc3BhID0gbmV3IFNwYSgpOyAvLyBjaGVjayBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBoYXMgYSB2YWx1ZSBAIGNvbHVtbiBqXG5cbiAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICAgIGxwdHIucHVzaChsdmFsdWVzLmxlbmd0aCk7IC8vIGZpcnN0IHZhbHVlIGluIGogY29sdW1uIGZvciBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG4gICAgICAgIGx2YWx1ZXMucHVzaCgxKTtcbiAgICAgICAgbGluZGV4LnB1c2goaik7XG4gICAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgICB1cHRyLnB1c2godXZhbHVlcy5sZW5ndGgpOyAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG5cbiAgICAgIHZhciBrMCA9IHB0cltqXTtcbiAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGNvcHkgY29sdW1uIGogaW50byBzcGFyc2UgYWNjdW11bGF0b3JcblxuICAgICAgZm9yIChrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gaW5kZXhba107IC8vIGNvcHkgY29sdW1uIHZhbHVlcyBpbnRvIHNwYXJzZSBhY2N1bXVsYXRvciAodXNlIHBlcm11dGF0aW9uIHZlY3RvcilcblxuICAgICAgICBzcGEuc2V0KHB2Q29baV0sIHZhbHVlc1trXSk7XG4gICAgICB9IC8vIHNraXAgZmlyc3QgY29sdW1uIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIC8vIGxvb3Agcm93cyBpbiBjb2x1bW4gaiAoYWJvdmUgZGlhZ29uYWwpXG4gICAgICAgIHNwYS5mb3JFYWNoKDAsIGogLSAxLCBmdW5jdGlvbiAoaywgdmtqKSB7XG4gICAgICAgICAgLy8gbG9vcCByb3dzIGluIGNvbHVtbiBrIChMKVxuICAgICAgICAgIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyhrLCBsdmFsdWVzLCBsaW5kZXgsIGxwdHIsIGZ1bmN0aW9uIChpLCB2aWspIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHJvdyBpcyBiZWxvdyBrXG4gICAgICAgICAgICBpZiAoaSA+IGspIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHNwYSB2YWx1ZVxuICAgICAgICAgICAgICBzcGEuYWNjdW11bGF0ZShpLCB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKHZpaywgdmtqKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gLy8gcm93IHdpdGggbGFyZ2VyIHZhbHVlIGluIHNwYSwgcm93ID49IGpcblxuXG4gICAgICB2YXIgcGkgPSBqO1xuICAgICAgdmFyIHZqaiA9IHNwYS5nZXQoaik7XG4gICAgICB2YXIgcGFic3YgPSBhYnModmpqKTsgLy8gbG9vcCB2YWx1ZXMgaW4gc3BhIChvcmRlciBieSByb3csIGJlbG93IGRpYWdvbmFsKVxuXG4gICAgICBzcGEuZm9yRWFjaChqICsgMSwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICAgIC8vIGFic29sdXRlIHZhbHVlXG4gICAgICAgIHZhciBhYnN2ID0gYWJzKHYpOyAvLyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gcGl2b3RlIHZhbHVlXG5cbiAgICAgICAgaWYgKGxhcmdlcihhYnN2LCBwYWJzdikpIHtcbiAgICAgICAgICAvLyBzdG9yZSByb3dcbiAgICAgICAgICBwaSA9IHg7IC8vIHVwZGF0ZSBtYXggdmFsdWVcblxuICAgICAgICAgIHBhYnN2ID0gYWJzdjsgLy8gdmFsdWUgQCBbaiwgal1cblxuICAgICAgICAgIHZqaiA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pOyAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKVxuXG4gICAgICBpZiAoaiAhPT0gcGkpIHtcbiAgICAgICAgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gTFxuICAgICAgICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzKGosIHBpLCBsc2l6ZVsxXSwgbHZhbHVlcywgbGluZGV4LCBscHRyKTsgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gVVxuXG5cbiAgICAgICAgU3BhcnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgdXNpemVbMV0sIHV2YWx1ZXMsIHVpbmRleCwgdXB0cik7IC8vIHN3YXAgdmFsdWVzIGluIHNwYVxuXG5cbiAgICAgICAgc3BhLnN3YXAoaiwgcGkpOyAvLyB1cGRhdGUgcGVybXV0YXRpb24gdmVjdG9yIChzd2FwIHZhbHVlcyBAIGosIHBpKVxuXG4gICAgICAgIHN3YXBJbmRlY2VzKGosIHBpKTtcbiAgICAgIH0gLy8gbG9vcCB2YWx1ZXMgaW4gc3BhIChvcmRlciBieSByb3cpXG5cblxuICAgICAgc3BhLmZvckVhY2goMCwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICAgIC8vIGNoZWNrIHdlIGFyZSBhYm92ZSBkaWFnb25hbFxuICAgICAgICBpZiAoeCA8PSBqKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgdXZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgIHVpbmRleC5wdXNoKHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSB2YWx1ZVxuICAgICAgICAgIHYgPSBkaXZpZGVTY2FsYXIodiwgdmpqKTsgLy8gY2hlY2sgdmFsdWUgaXMgbm9uIHplcm9cblxuICAgICAgICAgIGlmICghZXF1YWxTY2FsYXIodiwgMCkpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgICAgbHZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgICAgbGluZGV4LnB1c2goeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgX2xvb3AoKTtcbiAgICB9IC8vIHVwZGF0ZSBwdHJzXG5cblxuICAgIHVwdHIucHVzaCh1dmFsdWVzLmxlbmd0aCk7XG4gICAgbHB0ci5wdXNoKGx2YWx1ZXMubGVuZ3RoKTsgLy8gcmV0dXJuIG1hdHJpY2VzXG5cbiAgICByZXR1cm4ge1xuICAgICAgTDogbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICAgIHZhbHVlczogbHZhbHVlcyxcbiAgICAgICAgaW5kZXg6IGxpbmRleCxcbiAgICAgICAgcHRyOiBscHRyLFxuICAgICAgICBzaXplOiBsc2l6ZVxuICAgICAgfSksXG4gICAgICBVOiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgICAgdmFsdWVzOiB1dmFsdWVzLFxuICAgICAgICBpbmRleDogdWluZGV4LFxuICAgICAgICBwdHI6IHVwdHIsXG4gICAgICAgIHNpemU6IHVzaXplXG4gICAgICB9KSxcbiAgICAgIHA6IHB2Q28sXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5QOiAnICsgdGhpcy5wO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXAgPSBjcmVhdGVMdXA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVFyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAncXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ3plcm9zJywgJ2lkZW50aXR5JywgJ2lzWmVybycsICdlcXVhbCcsICdzaWduJywgJ3NxcnQnLCAnY29uaicsICd1bmFyeU1pbnVzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnY29tcGxleCddO1xudmFyIGNyZWF0ZVFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBzaWduID0gX3JlZi5zaWduLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIGNvbmogPSBfcmVmLmNvbmosXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGNvbXBsZXggPSBfcmVmLmNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgTWF0cml4IFFSIGRlY29tcG9zaXRpb24uIE1hdHJpeCBgQWAgaXMgZGVjb21wb3NlZCBpblxuICAgKiB0d28gbWF0cmljZXMgKGBRYCwgYFJgKSB3aGVyZSBgUWAgaXMgYW5cbiAgICogb3J0aG9nb25hbCBtYXRyaXggYW5kIGBSYCBpcyBhbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnFyKEEpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbXG4gICAqICAgICAgWzEsIC0xLCAgNF0sXG4gICAqICAgICAgWzEsICA0LCAtMl0sXG4gICAqICAgICAgWzEsICA0LCAgMl0sXG4gICAqICAgICAgWzEsICAtMSwgMF1cbiAgICogICAgXVxuICAgKiAgICBjb25zdCByZXN1bHQgPSBtYXRoLnFyKG0pXG4gICAqICAgIC8vIHIgPSB7XG4gICAqICAgIC8vICAgUTogW1xuICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgICAwLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgIDAuNSwgIC0wLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgIDAuNSwgICAwLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgIC0wLjVdLFxuICAgKiAgICAvLyAgIF0sXG4gICAqICAgIC8vICAgUjogW1xuICAgKiAgICAvLyAgICAgWzIsIDMsICAyXSxcbiAgICogICAgLy8gICAgIFswLCA1LCAtMl0sXG4gICAqICAgIC8vICAgICBbMCwgMCwgIDRdLFxuICAgKiAgICAvLyAgICAgWzAsIDAsICAwXVxuICAgKiAgICAvLyAgIF1cbiAgICogICAgLy8gfVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBsdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IEEgICAgQSB0d28gZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5XG4gICAqIGZvciB3aGljaCB0byBnZXQgdGhlIFFSIGRlY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3tROiBBcnJheSB8IE1hdHJpeCwgUjogQXJyYXkgfCBNYXRyaXh9fSBROiB0aGUgb3J0aG9nb25hbFxuICAgKiBtYXRyaXggYW5kIFI6IHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIF9leHRlbmRzKHR5cGVkKG5hbWUsIHtcbiAgICBEZW5zZU1hdHJpeDogZnVuY3Rpb24gRGVuc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9kZW5zZVFSKG0pO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9zcGFyc2VRUihtKTtcbiAgICB9LFxuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheShhKSB7XG4gICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXlcbiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyBsdXAsIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cblxuICAgICAgdmFyIHIgPSBfZGVuc2VRUihtKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUTogci5RLnZhbHVlT2YoKSxcbiAgICAgICAgUjogci5SLnZhbHVlT2YoKVxuICAgICAgfTtcbiAgICB9XG4gIH0pLCB7XG4gICAgX2RlbnNlUVJpbXBsOiBfZGVuc2VRUmltcGxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlUVJpbXBsKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1ucyAobSB4IG4pXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdOyAvLyBtXG5cbiAgICB2YXIgY29scyA9IG0uX3NpemVbMV07IC8vIG5cblxuICAgIHZhciBRID0gaWRlbnRpdHkoW3Jvd3NdLCAnZGVuc2UnKTtcbiAgICB2YXIgUWRhdGEgPSBRLl9kYXRhO1xuICAgIHZhciBSID0gbS5jbG9uZSgpO1xuICAgIHZhciBSZGF0YSA9IFIuX2RhdGE7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrO1xuICAgIHZhciB3ID0gemVyb3MoW3Jvd3NdLCAnJyk7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgTWF0aC5taW4oY29scywgcm93cyk7ICsraykge1xuICAgICAgLypcbiAgICAgICAqICoqay10aCBIb3VzZWhvbGQgbWF0cml4KipcbiAgICAgICAqXG4gICAgICAgKiBUaGUgbWF0cml4IEkgLSAyKnYqdHJhbnNwb3NlKHYpXG4gICAgICAgKiB4ICAgICA9IGZpcnN0IGNvbHVtbiBvZiBBXG4gICAgICAgKiB4MSAgICA9IGZpcnN0IGVsZW1lbnQgb2YgeFxuICAgICAgICogYWxwaGEgPSB4MSAvIHx4MXwgKiB8eHxcbiAgICAgICAqIGUxICAgID0gdHJhbnBvc2UoWzEsIDAsIDAsIC4uLl0pXG4gICAgICAgKiB1ICAgICA9IHggLSBhbHBoYSAqIGUxXG4gICAgICAgKiB2ICAgICA9IHUgLyB8dXxcbiAgICAgICAqXG4gICAgICAgKiBIb3VzZWhvbGQgbWF0cml4ID0gSSAtIDIgKiB2ICogdHJhbnBvc2UodilcbiAgICAgICAqXG4gICAgICAgKiAgKiBJbml0aWFsbHkgUSA9IEkgYW5kIFIgPSBBLlxuICAgICAgICogICogSG91c2Vob2xkIG1hdHJpeCBpcyBhIHJlZmxlY3Rpb24gaW4gYSBwbGFuZSBub3JtYWwgdG8gdiB3aGljaFxuICAgICAgICogICAgd2lsbCB6ZXJvIG91dCBhbGwgYnV0IHRoZSB0b3AgcmlnaHQgZWxlbWVudCBpbiBSLlxuICAgICAgICogICogQXBwcGx5aW5nIHJlZmxlY3Rpb24gdG8gYm90aCBRIGFuZCBSIHdpbGwgbm90IGNoYW5nZSBwcm9kdWN0LlxuICAgICAgICogICogUmVwZWF0IHRoaXMgcHJvY2VzcyBvbiB0aGUgKDEsMSkgbWlub3IgdG8gZ2V0IFIgYXMgYW4gdXBwZXJcbiAgICAgICAqICAgIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgICAgICogICogUmVmbGVjdGlvbnMgbGVhdmUgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29sdW1ucyBvZiBRIHVuY2hhbmdlZFxuICAgICAgICogICAgc28gUSByZW1haW5zIG90aG9nYW5hbC5cbiAgICAgICAqXG4gICAgICAgKi9cbiAgICAgIHZhciBwaXZvdCA9IFJkYXRhW2tdW2tdO1xuICAgICAgdmFyIHNnbiA9IHVuYXJ5TWludXMoZXF1YWwocGl2b3QsIDApID8gMSA6IHNpZ24ocGl2b3QpKTtcbiAgICAgIHZhciBjb25qU2duID0gY29uaihzZ24pO1xuICAgICAgdmFyIGFscGhhU3F1YXJlZCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgYWxwaGFTcXVhcmVkID0gYWRkU2NhbGFyKGFscGhhU3F1YXJlZCwgbXVsdGlwbHlTY2FsYXIoUmRhdGFbaV1ba10sIGNvbmooUmRhdGFbaV1ba10pKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhbHBoYSA9IG11bHRpcGx5U2NhbGFyKHNnbiwgc3FydChhbHBoYVNxdWFyZWQpKTtcblxuICAgICAgaWYgKCFpc1plcm8oYWxwaGEpKSB7XG4gICAgICAgIC8vIGZpcnN0IGVsZW1lbnQgaW4gdmVjdG9yIHVcbiAgICAgICAgdmFyIHUxID0gc3VidHJhY3QocGl2b3QsIGFscGhhKTsgLy8gdyA9IHYgKiB1MSAvIHx1fCAgICAob25seSBlbGVtZW50cyBrIHRvIChyb3dzLTEpIGFyZSB1c2VkKVxuXG4gICAgICAgIHdba10gPSAxO1xuXG4gICAgICAgIGZvciAoaSA9IGsgKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgd1tpXSA9IGRpdmlkZVNjYWxhcihSZGF0YVtpXVtrXSwgdTEpO1xuICAgICAgICB9IC8vIHRhdSA9IC0gY29uaih1MSAvIGFscGhhKVxuXG5cbiAgICAgICAgdmFyIHRhdSA9IHVuYXJ5TWludXMoY29uaihkaXZpZGVTY2FsYXIodTEsIGFscGhhKSkpO1xuICAgICAgICB2YXIgcyA9IHZvaWQgMDtcbiAgICAgICAgLypcbiAgICAgICAgICogdGF1IGFuZCB3IGhhdmUgYmVlbiBjaG9vc2VuIHNvIHRoYXRcbiAgICAgICAgICpcbiAgICAgICAgICogMiAqIHYgKiB0cmFucG9zZSh2KSA9IHRhdSAqIHcgKiB0cmFucG9zZSh3KVxuICAgICAgICAgKi9cblxuICAgICAgICAvKlxuICAgICAgICAgKiAtLSBjYWxjdWxhdGUgUiA9IFIgLSB0YXUgKiB3ICogdHJhbnBvc2UodykgKiBSIC0tXG4gICAgICAgICAqIE9ubHkgZG8gY2FsY3VsYXRpb24gd2l0aCByb3dzIGsgdG8gKHJvd3MtMSlcbiAgICAgICAgICogQWRkaXRpb25hbGx5IGNvbHVtbnMgMCB0byAoay0xKSB3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoaXNcbiAgICAgICAgICogICBtdWx0aXBsaWNhdGlvbiBzbyBkbyBub3QgYm90aGVyIHJlY2FsY3VsYXRpbmcgdGhlbVxuICAgICAgICAgKi9cblxuICAgICAgICBmb3IgKGogPSBrOyBqIDwgY29sczsgaisrKSB7XG4gICAgICAgICAgcyA9IDAuMDsgLy8gY2FsY3VsYXRlIGp0aCBlbGVtZW50IG9mIFt0cmFucG9zZSh3KSAqIFJdXG5cbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKGNvbmood1tpXSksIFJkYXRhW2ldW2pdKSk7XG4gICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGp0aCBlbGVtZW50IG9mIFt0YXUgKiB0cmFuc3Bvc2UodykgKiBSXVxuXG5cbiAgICAgICAgICBzID0gbXVsdGlwbHlTY2FsYXIocywgdGF1KTtcblxuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIFJkYXRhW2ldW2pdID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoUmRhdGFbaV1bal0sIG11bHRpcGx5U2NhbGFyKHdbaV0sIHMpKSwgY29ualNnbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICAqIC0tIGNhbGN1bGF0ZSBRID0gUSAtIHRhdSAqIFEgKiB3ICogdHJhbnNwb3NlKHcpIC0tXG4gICAgICAgICAqIFEgaXMgYSBzcXVhcmUgbWF0cml4IChyb3dzIHggcm93cylcbiAgICAgICAgICogT25seSBkbyBjYWxjdWxhdGlvbiB3aXRoIGNvbHVtbnMgayB0byAocm93cy0xKVxuICAgICAgICAgKiBBZGRpdGlvbmFsbHkgcm93cyAwIHRvIChrLTEpIHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhpc1xuICAgICAgICAgKiAgIG11bHRpcGxpY2F0aW9uIHNvIGRvIG5vdCBib3RoZXIgcmVjYWxjdWxhdGluZyB0aGVtXG4gICAgICAgICAqL1xuXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIHMgPSAwLjA7IC8vIGNhbGN1bGF0ZSBpdGggZWxlbWVudCBvZiBbUSAqIHddXG5cbiAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgcm93czsgaisrKSB7XG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKFFkYXRhW2ldW2pdLCB3W2pdKSk7XG4gICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGl0aCBlbGVtZW50IG9mIFt0YXUgKiBRICogd11cblxuXG4gICAgICAgICAgcyA9IG11bHRpcGx5U2NhbGFyKHMsIHRhdSk7XG5cbiAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgcm93czsgKytqKSB7XG4gICAgICAgICAgICBRZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdChRZGF0YVtpXVtqXSwgbXVsdGlwbHlTY2FsYXIocywgY29uaih3W2pdKSkpLCBjb25qU2duKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBtYXRyaWNlc1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgUTogUSxcbiAgICAgIFI6IFIsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnUTogJyArIHRoaXMuUS50b1N0cmluZygpICsgJ1xcblI6ICcgKyB0aGlzLlIudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlbnNlUVIobSkge1xuICAgIHZhciByZXQgPSBfZGVuc2VRUmltcGwobSk7XG5cbiAgICB2YXIgUmRhdGEgPSByZXQuUi5fZGF0YTtcblxuICAgIGlmIChtLl9kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB6ZXJvID0gUmRhdGFbMF1bMF0udHlwZSA9PT0gJ0NvbXBsZXgnID8gY29tcGxleCgwKSA6IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICYmIGogPCAoUmRhdGFbMF0gfHwgW10pLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgUmRhdGFbaV1bal0gPSB6ZXJvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zcGFyc2VRUihtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdxciBub3QgaW1wbGVtZW50ZWQgZm9yIHNwYXJzZSBtYXRyaWNlcyB5ZXQnKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVFyID0gY3JlYXRlUXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNsdSA9IHZvaWQgMDtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc1NxciA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NTcXJcIik7XG5cbnZhciBfY3NMdSA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NMdVwiKTtcblxudmFyIG5hbWUgPSAnc2x1JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlU2x1ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZSxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGNzU3FyID0gKDAsIF9jc1Nxci5jcmVhdGVDc1Nxcikoe1xuICAgIGFkZDogYWRkLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgdmFyIGNzTHUgPSAoMCwgX2NzTHUuY3JlYXRlQ3NMdSkoe1xuICAgIGFiczogYWJzLFxuICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gICAgbGFyZ2VyOiBsYXJnZXIsXG4gICAgbGFyZ2VyRXE6IGxhcmdlckVxLFxuICAgIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBTcGFyc2UgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBmdWxsIHBpdm90aW5nLiBTcGFyc2UgTWF0cml4IGBBYCBpcyBkZWNvbXBvc2VkIGluIHR3byBtYXRyaWNlcyAoYExgLCBgVWApIGFuZCB0d28gcGVybXV0YXRpb24gdmVjdG9ycyAoYHBpbnZgLCBgcWApIHdoZXJlXG4gICAqXG4gICAqIGBQICogQSAqIFEgPSBMICogVWBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNsdShBLCBvcmRlciwgdGhyZXNob2xkKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IG1hdGguc3BhcnNlKFtbNCwzXSwgWzYsIDNdXSlcbiAgICogICAgbWF0aC5zbHUoQSwgMSwgMC4wMDEpXG4gICAqICAgIC8vIHJldHVybnM6XG4gICAqICAgIC8vIHtcbiAgICogICAgLy8gICBMOiBbWzEsIDBdLCBbMS41LCAxXV1cbiAgICogICAgLy8gICBVOiBbWzQsIDNdLCBbMCwgLTEuNV1dXG4gICAqICAgIC8vICAgcDogWzAsIDFdXG4gICAqICAgIC8vICAgcTogWzAsIDFdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgbHNvbHZlLCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtTcGFyc2VNYXRyaXh9IEEgICAgICAgICAgICAgIEEgdHdvIGRpbWVuc2lvbmFsIHNwYXJzZSBtYXRyaXggZm9yIHdoaWNoIHRvIGdldCB0aGUgTFUgZGVjb21wb3NpdGlvbi5cbiAgICogQHBhcmFtIHtOdW1iZXJ9ICAgICAgIG9yZGVyICAgICAgICAgIFRoZSBTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXI6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAtIE5hdHVyYWwgb3JkZXJpbmcsIG5vIHBlcm11dGF0aW9uIHZlY3RvciBxIGlzIHJldHVybmVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIE1hdHJpeCBtdXN0IGJlIHNxdWFyZSwgc3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWxpc2lzIGlzIHBlcmZvcm1lZCBvbiBNID0gQSArIEEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEnICogQS4gRGVuc2UgY29sdW1ucyBmcm9tIEEnIGFyZSBkcm9wcGVkLCBBIHJlY3JlYXRlZCBmcm9tIEEnLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFwcHJvcHJpYXRlZm9yIExVIGZhY3Rvcml6YXRpb24gb2YgdW5zeW1tZXRyaWMgbWF0cmljZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEnICogQS4gVGhpcyBpcyBiZXN0IHVzZWQgZm9yIExVIGZhY3Rvcml6YXRpb24gaXMgbWF0cml4IE0gaGFzIG5vIGRlbnNlIHJvd3MuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgZGVuc2Ugcm93IGlzIGEgcm93IHdpdGggbW9yZSB0aGFuIDEwKnNxcihjb2x1bW5zKSBlbnRyaWVzLlxuICAgKiBAcGFyYW0ge051bWJlcn0gICAgICAgdGhyZXNob2xkICAgICAgIFBhcnRpYWwgcGl2b3RpbmcgdGhyZXNob2xkICgxIGZvciBwYXJ0aWFsIHBpdm90aW5nKVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCwgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IGFuZCB0aGUgcGVybXV0YXRpb24gdmVjdG9ycy5cbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlck51bWJlcihhLCBvcmRlciwgdGhyZXNob2xkKSB7XG4gICAgICAvLyB2ZXJpZnkgb3JkZXJcbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShvcmRlcikgfHwgb3JkZXIgPCAwIHx8IG9yZGVyID4gMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bWJvbGljIE9yZGVyaW5nIGFuZCBBbmFseXNpcyBvcmRlciBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyIGluIHRoZSBpbnRlcnZhbCBbMCwgM10nKTtcbiAgICAgIH0gLy8gdmVyaWZ5IHRocmVzaG9sZFxuXG5cbiAgICAgIGlmICh0aHJlc2hvbGQgPCAwIHx8IHRocmVzaG9sZCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCBtdXN0IGJlIGEgbnVtYmVyIGZyb20gMCB0byAxJyk7XG4gICAgICB9IC8vIHBlcmZvcm0gc3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzXG5cblxuICAgICAgdmFyIHMgPSBjc1NxcihvcmRlciwgYSwgZmFsc2UpOyAvLyBwZXJmb3JtIGx1IGRlY29tcG9zaXRpb25cblxuICAgICAgdmFyIGYgPSBjc0x1KGEsIHMsIHRocmVzaG9sZCk7IC8vIHJldHVybiBkZWNvbXBvc2l0aW9uXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIEw6IGYuTCxcbiAgICAgICAgVTogZi5VLFxuICAgICAgICBwOiBmLnBpbnYsXG4gICAgICAgIHE6IHMucSxcbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5wOiAnICsgdGhpcy5wLnRvU3RyaW5nKCkgKyAodGhpcy5xID8gJ1xcbnE6ICcgKyB0aGlzLnEudG9TdHJpbmcoKSA6ICcnKSArICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2x1ID0gY3JlYXRlU2x1OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXJpdmF0aXZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGVyaXZhdGl2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAncGFyc2UnLCAnc2ltcGxpZnknLCAnZXF1YWwnLCAnaXNaZXJvJywgJ251bWVyaWMnLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnUGFyZW50aGVzaXNOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVEZXJpdmF0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgc2ltcGxpZnkgPSBfcmVmLnNpbXBsaWZ5LFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLFxuICAgICAgQ29uc3RhbnROb2RlID0gX3JlZi5Db25zdGFudE5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgUGFyZW50aGVzaXNOb2RlID0gX3JlZi5QYXJlbnRoZXNpc05vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuXG4gIC8qKlxuICAgKiBUYWtlcyB0aGUgZGVyaXZhdGl2ZSBvZiBhbiBleHByZXNzaW9uIGV4cHJlc3NlZCBpbiBwYXJzZXIgTm9kZXMuXG4gICAqIFRoZSBkZXJpdmF0aXZlIHdpbGwgYmUgdGFrZW4gb3ZlciB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaW4gdGhlXG4gICAqIHNlY29uZCBwYXJhbWV0ZXIuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYWJsZXMgaW4gdGhlIGV4cHJlc3Npb24sXG4gICAqIGl0IHdpbGwgcmV0dXJuIGEgcGFydGlhbCBkZXJpdmF0aXZlLlxuICAgKlxuICAgKiBUaGlzIHVzZXMgcnVsZXMgb2YgZGlmZmVyZW50aWF0aW9uIHdoaWNoIGNhbiBiZSBmb3VuZCBoZXJlOlxuICAgKlxuICAgKiAtIFtEaWZmZXJlbnRpYXRpb24gcnVsZXMgKFdpa2lwZWRpYSldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RpZmZlcmVudGlhdGlvbl9ydWxlcylcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSlcbiAgICogICAgIGRlcml2YXRpdmUoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKCd4XjInLCAneCcpICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSB7MiAqIHh9XG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3heMicsICd4Jywge3NpbXBsaWZ5OiBmYWxzZX0pICAvLyBOb2RlIHsyICogMSAqIHggXiAoMiAtIDEpXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3NpbigyeCknLCAneCcpKSAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogY29zKDIgKiB4KX1cbiAgICogICAgIG1hdGguZGVyaXZhdGl2ZSgnMip4JywgJ3gnKS5ldmFsdWF0ZSgpICAgICAgICAgIC8vIG51bWJlciAyXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3heMicsICd4JykuZXZhbHVhdGUoe3g6IDR9KSAgICAvLyBudW1iZXIgOFxuICAgKiAgICAgY29uc3QgZiA9IG1hdGgucGFyc2UoJ3heMicpXG4gICAqICAgICBjb25zdCB4ID0gbWF0aC5wYXJzZSgneCcpXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoZiwgeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogeH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzaW1wbGlmeSwgcGFyc2UsIGV2YWx1YXRlXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgICAgICAgIFRoZSBleHByZXNzaW9uIHRvIGRpZmZlcmVudGlhdGVcbiAgICogQHBhcmFtICB7U3ltYm9sTm9kZSB8IHN0cmluZ30gdmFyaWFibGUgVGhlIHZhcmlhYmxlIG92ZXIgd2hpY2ggdG8gZGlmZmVyZW50aWF0ZVxuICAgKiBAcGFyYW0gIHt7c2ltcGxpZnk6IGJvb2xlYW59fSBbb3B0aW9uc11cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgaXMgb25lIG9wdGlvbiBhdmFpbGFibGUsIGBzaW1wbGlmeWAsIHdoaWNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRydWUgYnkgZGVmYXVsdC4gV2hlbiBmYWxzZSwgb3V0cHV0IHdpbGwgbm90XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNpbXBsaWZpZWQuXG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9ICAgIFRoZSBkZXJpdmF0aXZlIG9mIGBleHByYFxuICAgKi9cbiAgdmFyIGRlcml2YXRpdmUgPSB0eXBlZCgnZGVyaXZhdGl2ZScsIHtcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZVN5bWJvbE5vZGVPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjb25zdE5vZGVzID0ge307XG4gICAgICBjb25zdFRhZyhjb25zdE5vZGVzLCBleHByLCB2YXJpYWJsZS5uYW1lKTtcblxuICAgICAgdmFyIHJlcyA9IF9kZXJpdmF0aXZlKGV4cHIsIGNvbnN0Tm9kZXMpO1xuXG4gICAgICByZXR1cm4gb3B0aW9ucy5zaW1wbGlmeSA/IHNpbXBsaWZ5KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSc6IGZ1bmN0aW9uIE5vZGVTeW1ib2xOb2RlKGV4cHIsIHZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSwge1xuICAgICAgICBzaW1wbGlmeTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBTeW1ib2xOb2RlJzogZnVuY3Rpb24gc3RyaW5nU3ltYm9sTm9kZShleHByLCB2YXJpYWJsZSkge1xuICAgICAgcmV0dXJuIGRlcml2YXRpdmUocGFyc2UoZXhwciksIHZhcmlhYmxlKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIFN5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ1N5bWJvbE5vZGVPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCB2YXJpYWJsZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBzdHJpbmcnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmcoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSkpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmdPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE5vZGVTdHJpbmcoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKGV4cHIsIHBhcnNlKHZhcmlhYmxlKSk7XG4gICAgfSxcbiAgICAnTm9kZSwgc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlU3RyaW5nT2JqZWN0KGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpO1xuICAgIH0gLy8gVE9ETzogcmVwbGFjZSB0aGUgOCBzaWduYXR1cmVzIGFib3ZlIHdpdGggNCBhcyBzb29uIGFzIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIG9wdGlvbmFsIGFyZ3VtZW50c1xuXG4gICAgLyogVE9ETzogaW1wbGVtZW50IGFuZCB0ZXN0IHN5bnRheCB3aXRoIG9yZGVyIG9mIGRlcml2YXRpdmVzIC0+IGltcGxlbWVudCBhcyBhbiBvcHRpb24ge29yZGVyOiBudW1iZXJ9XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUsIENvbnN0YW50Tm9kZSc6IGZ1bmN0aW9uIChleHByLCB2YXJpYWJsZSwge29yZGVyfSkge1xuICAgICAgbGV0IHJlcyA9IGV4cHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXI7IGkrKykge1xuICAgICAgICBsZXQgY29uc3ROb2RlcyA9IHt9XG4gICAgICAgIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIGV4cHIsIHZhcmlhYmxlLm5hbWUpXG4gICAgICAgIHJlcyA9IF9kZXJpdmF0aXZlKHJlcywgY29uc3ROb2RlcylcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gICAgKi9cblxuICB9KTtcbiAgZGVyaXZhdGl2ZS5fc2ltcGxpZnkgPSB0cnVlO1xuXG4gIGRlcml2YXRpdmUudG9UZXggPSBmdW5jdGlvbiAoZGVyaXYpIHtcbiAgICByZXR1cm4gX2Rlcml2VGV4LmFwcGx5KG51bGwsIGRlcml2LmFyZ3MpO1xuICB9OyAvLyBGSVhNRTogbW92ZSB0aGUgdG9UZXggbWV0aG9kIG9mIGRlcml2YXRpdmUgdG8gbGF0ZXguanMuIERpZmZpY3VsdHkgaXMgdGhhdCBpdCByZWxpZXMgb24gcGFyc2UuXG4gIC8vIE5PVEU6IHRoZSBvcHRpb25hbCBcIm9yZGVyXCIgcGFyYW1ldGVyIGhlcmUgaXMgY3VycmVudGx5IHVudXNlZFxuXG5cbiAgdmFyIF9kZXJpdlRleCA9IHR5cGVkKCdfZGVyaXZUZXgnLCB7XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZShleHByLCB4KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoZXhwcikgJiYgKDAsIF9pcy50eXBlT2YpKGV4cHIudmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KHBhcnNlKGV4cHIudmFsdWUpLnRvU3RyaW5nKCksIHgudG9TdHJpbmcoKSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KGV4cHIudG9TdHJpbmcoKSwgeC50b1N0cmluZygpLCAxKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiBOb2RlQ29uc3RhbnROb2RlKGV4cHIsIHgpIHtcbiAgICAgIGlmICgoMCwgX2lzLnR5cGVPZikoeC52YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBfZGVyaXZUZXgoZXhwciwgcGFyc2UoeC52YWx1ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gJ2Rlcml2YXRpdmUnIGlzIGEgbm9uLXN0cmluZyBjb25zdGFudFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdOb2RlLCBTeW1ib2xOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZUNvbnN0YW50Tm9kZShleHByLCB4LCBvcmRlcikge1xuICAgICAgcmV0dXJuIF9kZXJpdlRleChleHByLnRvU3RyaW5nKCksIHgubmFtZSwgb3JkZXIudmFsdWUpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nLCBudW1iZXInOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmdOdW1iZXIoZXhwciwgeCwgb3JkZXIpIHtcbiAgICAgIHZhciBkO1xuXG4gICAgICBpZiAob3JkZXIgPT09IDEpIHtcbiAgICAgICAgZCA9ICd7ZFxcXFxvdmVyIGQnICsgeCArICd9JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQgPSAne2ReeycgKyBvcmRlciArICd9XFxcXG92ZXIgZCcgKyB4ICsgJ157JyArIG9yZGVyICsgJ319JztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGQgKyBcIlxcXFxsZWZ0W1wiLmNvbmNhdChleHByLCBcIlxcXFxyaWdodF1cIik7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIERvZXMgYSBkZXB0aC1maXJzdCBzZWFyY2ggb24gdGhlIGV4cHJlc3Npb24gdHJlZSB0byBpZGVudGlmeSB3aGF0IE5vZGVzXG4gICAqIGFyZSBjb25zdGFudHMgKGUuZy4gMiArIDIpLCBhbmQgc3RvcmVzIHRoZSBvbmVzIHRoYXQgYXJlIGNvbnN0YW50cyBpblxuICAgKiBjb25zdE5vZGVzLiBDbGFzc2lmaWNhdGlvbiBpcyBkb25lIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqICAgMS4gQ29uc3RhbnROb2RlcyBhcmUgY29uc3RhbnRzLlxuICAgKiAgIDIuIElmIHRoZXJlIGV4aXN0cyBhIFN5bWJvbE5vZGUsIG9mIHdoaWNoIHdlIGFyZSBkaWZmZXJlbnRpYXRpbmcgb3ZlcixcbiAgICogICAgICBpbiB0aGUgc3VidHJlZSBpdCBpcyBub3QgY29uc3RhbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29uc3ROb2RlcyAgSG9sZHMgdGhlIG5vZGVzIHRoYXQgYXJlIGNvbnN0YW50XG4gICAqIEBwYXJhbSAge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHBhcmFtICB7c3RyaW5nfSB2YXJOYW1lICAgICBWYXJpYWJsZSB0aGF0IHdlIGFyZSBkaWZmZXJlbnRpYXRpbmdcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIGlmIG5vZGUgaXMgY29uc3RhbnRcbiAgICovXG4gIC8vIFRPRE86IGNhbiB3ZSByZXdyaXRlIGNvbnN0VGFnIGludG8gYSBwdXJlIGZ1bmN0aW9uP1xuXG5cbiAgdmFyIGNvbnN0VGFnID0gdHlwZWQoJ2NvbnN0VGFnJywge1xuICAgICdPYmplY3QsIENvbnN0YW50Tm9kZSwgc3RyaW5nJzogZnVuY3Rpb24gT2JqZWN0Q29uc3RhbnROb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUpIHtcbiAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBTeW1ib2xOb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBPYmplY3RTeW1ib2xOb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUsIHZhck5hbWUpIHtcbiAgICAgIC8vIFRyZWF0IG90aGVyIHZhcmlhYmxlcyBsaWtlIGNvbnN0YW50cy4gRm9yIHJlYXNvbmluZywgc2VlOlxuICAgICAgLy8gICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXJ0aWFsX2Rlcml2YXRpdmVcbiAgICAgIGlmIChub2RlLm5hbWUgIT09IHZhck5hbWUpIHtcbiAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBQYXJlbnRoZXNpc05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdFBhcmVudGhlc2lzTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICByZXR1cm4gY29uc3RUYWcoY29uc3ROb2Rlcywgbm9kZS5jb250ZW50LCB2YXJOYW1lKTtcbiAgICB9LFxuICAgICdPYmplY3QsIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uQXNzaWdubWVudE5vZGVTdHJpbmcoY29uc3ROb2Rlcywgbm9kZSwgdmFyTmFtZSkge1xuICAgICAgaWYgKG5vZGUucGFyYW1zLmluZGV4T2YodmFyTmFtZSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuZXhwciwgdmFyTmFtZSk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uTm9kZU9wZXJhdG9yTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGlzQ29uc3QgPSBjb25zdFRhZyhjb25zdE5vZGVzLCBub2RlLmFyZ3NbMF0sIHZhck5hbWUpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaXNDb25zdCA9IGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuYXJnc1tpXSwgdmFyTmFtZSkgJiYgaXNDb25zdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NvbnN0KSB7XG4gICAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBBcHBsaWVzIGRpZmZlcmVudGlhdGlvbiBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtICB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gbm9kZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGNvbnN0Tm9kZXMgIEhvbGRzIHRoZSBub2RlcyB0aGF0IGFyZSBjb25zdGFudFxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSAgICBUaGUgZGVyaXZhdGl2ZSBvZiBgZXhwcmBcbiAgICovXG5cbiAgdmFyIF9kZXJpdmF0aXZlID0gdHlwZWQoJ19kZXJpdmF0aXZlJywge1xuICAgICdDb25zdGFudE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIENvbnN0YW50Tm9kZU9iamVjdChub2RlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgIH0sXG4gICAgJ1N5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIFN5bWJvbE5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDEpO1xuICAgIH0sXG4gICAgJ1BhcmVudGhlc2lzTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gUGFyZW50aGVzaXNOb2RlT2JqZWN0KG5vZGUsIGNvbnN0Tm9kZXMpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKF9kZXJpdmF0aXZlKG5vZGUuY29udGVudCwgY29uc3ROb2RlcykpO1xuICAgIH0sXG4gICAgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2Rlcml2YXRpdmUobm9kZS5leHByLCBjb25zdE5vZGVzKTtcbiAgICB9LFxuICAgICdGdW5jdGlvbk5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICBmdW5jQXJnc0NoZWNrKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uc3ROb2Rlc1tub2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcmcwID0gbm9kZS5hcmdzWzBdO1xuICAgICAgdmFyIGFyZzE7XG4gICAgICB2YXIgZGl2ID0gZmFsc2U7IC8vIGlzIG91dHB1dCBhIGZyYWN0aW9uP1xuXG4gICAgICB2YXIgbmVnYXRpdmUgPSBmYWxzZTsgLy8gaXMgb3V0cHV0IG5lZ2F0aXZlP1xuXG4gICAgICB2YXIgZnVuY0Rlcml2YXRpdmU7XG5cbiAgICAgIHN3aXRjaCAobm9kZS5uYW1lKSB7XG4gICAgICAgIGNhc2UgJ2NicnQnOlxuICAgICAgICAgIC8vIGQvZHgoY2JydCh4KSkgPSAxIC8gKDN4XigyLzMpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2NyZWF0ZUNvbnN0YW50Tm9kZSgzKSwgbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMCwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDIpLCBjcmVhdGVDb25zdGFudE5vZGUoMyldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc3FydCc6XG4gICAgICAgIGNhc2UgJ250aFJvb3QnOlxuICAgICAgICAgIC8vIGQvZHgoc3FydCh4KSkgPSAxIC8gKDIqc3FydCh4KSlcbiAgICAgICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtjcmVhdGVDb25zdGFudE5vZGUoMiksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbYXJnMF0pXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAvLyBSZWFycmFuZ2UgZnJvbSBudGhSb290KHgsIGEpIC0+IHheKDEvYSlcbiAgICAgICAgICAgIGFyZzEgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5vZGUuYXJnc1sxXV0pOyAvLyBJcyBhIHZhcmlhYmxlP1xuXG4gICAgICAgICAgICBjb25zdE5vZGVzW2FyZzFdID0gY29uc3ROb2Rlc1tub2RlLmFyZ3NbMV1dO1xuICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAsIGFyZzFdKSwgY29uc3ROb2Rlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbG9nMTAnOlxuICAgICAgICAgIGFyZzEgPSBjcmVhdGVDb25zdGFudE5vZGUoMTApO1xuXG4gICAgICAgIC8qIGZhbGwgdGhyb3VnaCEgKi9cblxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICAgIGlmICghYXJnMSAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBkL2R4KGxvZyh4KSkgPSAxIC8geFxuICAgICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBhcmcwLmNsb25lKCk7XG4gICAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSAmJiBhcmcxIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDIgJiYgY29uc3ROb2Rlc1tub2RlLmFyZ3NbMV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGQvZHgobG9nKHgsIGMpKSA9IDEgLyAoeCpsbihjKSlcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIG5ldyBGdW5jdGlvbk5vZGUoJ2xvZycsIFthcmcxIHx8IG5vZGUuYXJnc1sxXV0pXSk7XG4gICAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgLy8gZC9keChsb2coZih4KSwgZyh4KSkpID0gZC9keChsb2coZih4KSkgLyBsb2coZyh4KSkpXG4gICAgICAgICAgICByZXR1cm4gX2Rlcml2YXRpdmUobmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW2FyZzBdKSwgbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW25vZGUuYXJnc1sxXV0pXSksIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Bvdyc6XG4gICAgICAgICAgY29uc3ROb2Rlc1thcmcxXSA9IGNvbnN0Tm9kZXNbbm9kZS5hcmdzWzFdXTsgLy8gUGFzcyB0byBwb3cgb3BlcmF0b3Igbm9kZSBwYXJzZXJcblxuICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLCBub2RlLmFyZ3NbMV1dKSwgY29uc3ROb2Rlcyk7XG5cbiAgICAgICAgY2FzZSAnZXhwJzpcbiAgICAgICAgICAvLyBkL2R4KGVeeCkgPSBlXnhcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ2V4cCcsIFthcmcwLmNsb25lKCldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzaW4nOlxuICAgICAgICAgIC8vIGQvZHgoc2luKHgpKSA9IGNvcyh4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnY29zJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nvcyc6XG4gICAgICAgICAgLy8gZC9keChjb3MoeCkpID0gLXNpbih4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25ldyBGdW5jdGlvbk5vZGUoJ3NpbicsIFthcmcwLmNsb25lKCldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Rhbic6XG4gICAgICAgICAgLy8gZC9keCh0YW4oeCkpID0gc2VjKHgpXjJcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ3NlYycsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgICAvLyBkL2R4KHNlYyh4KSkgPSBzZWMoeCl0YW4oeClcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IEZ1bmN0aW9uTm9kZSgndGFuJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY3NjJzpcbiAgICAgICAgICAvLyBkL2R4KGNzYyh4KSkgPSAtY3NjKHgpY290KHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCdjb3QnLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjb3QnOlxuICAgICAgICAgIC8vIGQvZHgoY290KHgpKSA9IC1jc2MoeCleMlxuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ2NzYycsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNpbic6XG4gICAgICAgICAgLy8gZC9keChhc2luKHgpKSA9IDEgLyBzcXJ0KDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fjb3MnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvcyh4KSkgPSAtMSAvIHNxcnQoMSAtIHheMilcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2F0YW4nOlxuICAgICAgICAgIC8vIGQvZHgoYXRhbih4KSkgPSAxIC8gKHheMiArIDEpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2FzZWMnOlxuICAgICAgICAgIC8vIGQvZHgoYXNlYyh4KSkgPSAxIC8gKHx4fCpzcXJ0KHheMiAtIDEpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY3NjJzpcbiAgICAgICAgICAvLyBkL2R4KGFjc2MoeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yIC0gMSkpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY290JzpcbiAgICAgICAgICAvLyBkL2R4KGFjb3QoeCkpID0gLTEgLyAoeF4yICsgMSlcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NpbmgnOlxuICAgICAgICAgIC8vIGQvZHgoc2luaCh4KSkgPSBjb3NoKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdjb3NoJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nvc2gnOlxuICAgICAgICAgIC8vIGQvZHgoY29zaCh4KSkgPSBzaW5oKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzaW5oJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3RhbmgnOlxuICAgICAgICAgIC8vIGQvZHgodGFuaCh4KSkgPSBzZWNoKHgpXjJcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ3NlY2gnLCBbYXJnMC5jbG9uZSgpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlY2gnOlxuICAgICAgICAgIC8vIGQvZHgoc2VjaCh4KSkgPSAtc2VjaCh4KXRhbmgoeClcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIG5ldyBGdW5jdGlvbk5vZGUoJ3RhbmgnLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjc2NoJzpcbiAgICAgICAgICAvLyBkL2R4KGNzY2goeCkpID0gLWNzY2goeCljb3RoKHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCdjb3RoJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY290aCc6XG4gICAgICAgICAgLy8gZC9keChjb3RoKHgpKSA9IC1jc2NoKHgpXjJcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuZXcgRnVuY3Rpb25Ob2RlKCdjc2NoJywgW2FyZzAuY2xvbmUoKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMildKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhc2luaCc6XG4gICAgICAgICAgLy8gZC9keChhc2luaCh4KSkgPSAxIC8gc3FydCh4XjIgKyAxKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvc2gnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvc2goeCkpID0gMSAvIHNxcnQoeF4yIC0gMSk7IFhYWCBwb3RlbnRpYWxseSBvbmx5IGZvciB4ID49IDEgKHRoZSByZWFsIHNwZWN0cnVtKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKSwgY3JlYXRlQ29uc3RhbnROb2RlKDEpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhdGFuaCc6XG4gICAgICAgICAgLy8gZC9keChhdGFuaCh4KSkgPSAxIC8gKDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNlY2gnOlxuICAgICAgICAgIC8vIGQvZHgoYXNlY2goeCkpID0gLTEgLyAoeCpzcXJ0KDEgLSB4XjIpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNzY2gnOlxuICAgICAgICAgIC8vIGQvZHgoYWNzY2goeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yICsgMSkpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvdGgnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvdGgoeCkpID0gLTEgLyAoMSAtIHheMilcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWJzJzpcbiAgICAgICAgICAvLyBkL2R4KGFicyh4KSkgPSBhYnMoeCkveFxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZSgnYWJzJyksIFthcmcwLmNsb25lKCldKSwgYXJnMC5jbG9uZSgpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZ2FtbWEnOiAvLyBOZWVkcyBkaWdhbW1hIGZ1bmN0aW9uLCBkL2R4KGdhbW1hKHgpKSA9IGdhbW1hKHgpZGlnYW1tYSh4KVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBcIicgKyBub2RlLm5hbWUgKyAnXCIgaXMgbm90IHN1cHBvcnRlZCBieSBkZXJpdmF0aXZlLCBvciBhIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaXMgcGFzc2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcCwgZnVuYztcblxuICAgICAgaWYgKGRpdikge1xuICAgICAgICBvcCA9ICcvJztcbiAgICAgICAgZnVuYyA9ICdkaXZpZGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3AgPSAnKic7XG4gICAgICAgIGZ1bmMgPSAnbXVsdGlwbHknO1xuICAgICAgfVxuICAgICAgLyogQXBwbHkgY2hhaW4gcnVsZSB0byBhbGwgZnVuY3Rpb25zOlxuICAgICAgICAgRih4KSAgPSBmKGcoeCkpXG4gICAgICAgICBGJyh4KSA9IGcnKHgpKmYnKGcoeCkpICovXG5cblxuICAgICAgdmFyIGNoYWluRGVyaXZhdGl2ZSA9IF9kZXJpdmF0aXZlKGFyZzAsIGNvbnN0Tm9kZXMpO1xuXG4gICAgICBpZiAobmVnYXRpdmUpIHtcbiAgICAgICAgY2hhaW5EZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2NoYWluRGVyaXZhdGl2ZV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShvcCwgZnVuYywgW2NoYWluRGVyaXZhdGl2ZSwgZnVuY0Rlcml2YXRpdmVdKTtcbiAgICB9LFxuICAgICdPcGVyYXRvck5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE9wZXJhdG9yTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICBpZiAoY29uc3ROb2Rlc1tub2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKycpIHtcbiAgICAgICAgLy8gZC9keChzdW0oZih4KSkgPSBzdW0oZicoeCkpXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShhcmcsIGNvbnN0Tm9kZXMpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnLScpIHtcbiAgICAgICAgLy8gZC9keCgrLy1mKHgpKSA9ICsvLWYnKHgpXG4gICAgICAgIGlmIChub2RlLmlzVW5hcnkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpXSk7XG4gICAgICAgIH0gLy8gTGluZWFyaXR5IG9mIGRpZmZlcmVudGlhdGlvbiwgZC9keChmKHgpICsvLSBnKHgpKSA9IGYnKHgpICsvLSBnJyh4KVxuXG5cbiAgICAgICAgaWYgKG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpLCBfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMV0sIGNvbnN0Tm9kZXMpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICAvLyBkL2R4KGMqZih4KSkgPSBjKmYnKHgpXG4gICAgICAgIHZhciBjb25zdGFudFRlcm1zID0gbm9kZS5hcmdzLmZpbHRlcihmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnN0Tm9kZXNbYXJnXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29uc3RhbnRUZXJtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIG5vbkNvbnN0YW50VGVybXMgPSBub2RlLmFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zdE5vZGVzW2FyZ10gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgbm9uQ29uc3RhbnROb2RlID0gbm9uQ29uc3RhbnRUZXJtcy5sZW5ndGggPT09IDEgPyBub25Db25zdGFudFRlcm1zWzBdIDogbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIG5vbkNvbnN0YW50VGVybXMpO1xuICAgICAgICAgIHZhciBuZXdBcmdzID0gY29uc3RhbnRUZXJtcy5jb25jYXQoX2Rlcml2YXRpdmUobm9uQ29uc3RhbnROb2RlLCBjb25zdE5vZGVzKSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBuZXdBcmdzKTtcbiAgICAgICAgfSAvLyBQcm9kdWN0IFJ1bGUsIGQvZHgoZih4KSpnKHgpKSA9IGYnKHgpKmcoeCkgKyBmKHgpKmcnKHgpXG5cblxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmdPdXRlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5Jywgbm9kZS5hcmdzLm1hcChmdW5jdGlvbiAoYXJnSW5uZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdJbm5lciA9PT0gYXJnT3V0ZXIgPyBfZGVyaXZhdGl2ZShhcmdJbm5lciwgY29uc3ROb2RlcykgOiBhcmdJbm5lci5jbG9uZSgpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy8nICYmIG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICB2YXIgYXJnMCA9IG5vZGUuYXJnc1swXTtcbiAgICAgICAgdmFyIGFyZzEgPSBub2RlLmFyZ3NbMV07IC8vIGQvZHgoZih4KSAvIGMpID0gZicoeCkgLyBjXG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbYXJnMV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtfZGVyaXZhdGl2ZShhcmcwLCBjb25zdE5vZGVzKSwgYXJnMV0pO1xuICAgICAgICB9IC8vIFJlY2lwcm9jYWwgUnVsZSwgZC9keChjIC8gZih4KSkgPSAtYyhmJyh4KS9mKHgpXjIpXG5cblxuICAgICAgICBpZiAoY29uc3ROb2Rlc1thcmcwXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2FyZzBdKSwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzEuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICB9IC8vIFF1b3RpZW50IHJ1bGUsIGQvZHgoZih4KSAvIGcoeCkpID0gKGYnKHgpZyh4KSAtIGYoeClnJyh4KSkgLyBnKHgpXjJcblxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoYXJnMCwgY29uc3ROb2RlcyksIGFyZzEuY2xvbmUoKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2FyZzAuY2xvbmUoKSwgX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyldKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcxLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnXicgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICAgIHZhciBfYXJnID0gbm9kZS5hcmdzWzBdO1xuICAgICAgICB2YXIgX2FyZzIgPSBub2RlLmFyZ3NbMV07XG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbX2FyZ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIElmIGlzIHNlY3JldGx5IGNvbnN0YW50OyAwXmYoeCkgPSAxIChpbiBKUyksIDFeZih4KSA9IDFcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2FyZykgJiYgKGlzWmVybyhfYXJnLnZhbHVlKSB8fCBlcXVhbChfYXJnLnZhbHVlLCAxKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICAgICAgfSAvLyBkL2R4KGNeZih4KSkgPSBjXmYoeCkqbG4oYykqZicoeClcblxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbX2FyZy5jbG9uZSgpXSksIF9kZXJpdmF0aXZlKF9hcmcyLmNsb25lKCksIGNvbnN0Tm9kZXMpXSldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25zdE5vZGVzW19hcmcyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hcmcyKSkge1xuICAgICAgICAgICAgLy8gSWYgaXMgc2VjcmV0bHkgY29uc3RhbnQ7IGYoeCleMCA9IDEgLT4gZC9keCgxKSA9IDBcbiAgICAgICAgICAgIGlmIChpc1plcm8oX2FyZzIudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICAgICAgICB9IC8vIElnbm9yZSBleHBvbmVudDsgZih4KV4xID0gZih4KVxuXG5cbiAgICAgICAgICAgIGlmIChlcXVhbChfYXJnMi52YWx1ZSwgMSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKF9hcmcsIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gRWxlbWVudGFyeSBQb3dlciBSdWxlLCBkL2R4KGYoeCleYykgPSBjKmYnKHgpKmYoeCleKGMtMSlcblxuXG4gICAgICAgICAgdmFyIHBvd01pbnVzT25lID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW19hcmcyLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pO1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19hcmcyLmNsb25lKCksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2RlcyksIHBvd01pbnVzT25lXSldKTtcbiAgICAgICAgfSAvLyBGdW5jdGlvbmFsIFBvd2VyIFJ1bGUsIGQvZHgoZl5nKSA9IGZeZypbZicqKGcvZikgKyBnJ2xuKGYpXVxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBfYXJnMi5jbG9uZSgpXSksIG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW19hcmcyLmNsb25lKCksIF9hcmcuY2xvbmUoKV0pXSksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZzIsIGNvbnN0Tm9kZXMpLCBuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbX2FyZy5jbG9uZSgpXSldKV0pXSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgXCInICsgbm9kZS5vcCArICdcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlcml2YXRpdmUsIG9yIGEgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcyBwYXNzZWQnKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogRW5zdXJlcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgYSBmdW5jdGlvbiBhcmUgY29ycmVjdCxcbiAgICogYW5kIHdpbGwgdGhyb3cgYW4gZXJyb3Igb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uTm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGZ1bmNBcmdzQ2hlY2sobm9kZSkge1xuICAgIC8vIFRPRE8gYWRkIG1pbiwgbWF4IGV0Y1xuICAgIGlmICgobm9kZS5uYW1lID09PSAnbG9nJyB8fCBub2RlLm5hbWUgPT09ICdudGhSb290JyB8fCBub2RlLm5hbWUgPT09ICdwb3cnKSAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGVyZSBzaG91bGQgYmUgYW4gaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgaWYgd2UgcmVhY2ggaGVyZVxuICAgIC8vIENoYW5nZSBhbGwgYXJncyB0byBjb25zdGFudHMgdG8gYXZvaWQgdW5pZGVudGlmaWVkXG4gICAgLy8gc3ltYm9sIGVycm9yIHdoZW4gY29tcGlsaW5nIGZ1bmN0aW9uXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICBub2RlLmFyZ3NbaV0gPSBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgfVxuXG4gICAgbm9kZS5jb21waWxlKCkuZXZhbHVhdGUoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFR5cGVFcnJvciwgYnV0IG5vbmUgZm91bmQnKTtcbiAgfVxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGNvbnN0YW50IG5vZGUgd2l0aCBhIHNwZWNpZmljIHR5cGVcbiAgICogKG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbilcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVUeXBlXVxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29uc3RhbnROb2RlKHZhbHVlLCB2YWx1ZVR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKHZhbHVlLCB2YWx1ZVR5cGUgfHwgY29uZmlnLm51bWJlcikpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2YXRpdmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVyaXZhdGl2ZSA9IGNyZWF0ZURlcml2YXRpdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhdGlvbmFsaXplID0gdm9pZCAwO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29uc3RhbnQgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvbnN0YW50XCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29yZSA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3NpbXBsaWZ5Q29yZVwiKTtcblxudmFyIG5hbWUgPSAncmF0aW9uYWxpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2VxdWFsJywgJ2lzWmVybycsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdwYXJzZScsICdzaW1wbGlmeScsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdTeW1ib2xOb2RlJywgJ1BhcmVudGhlc2lzTm9kZSddO1xudmFyIGNyZWF0ZVJhdGlvbmFsaXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2UsXG4gICAgICBzaW1wbGlmeSA9IF9yZWYuc2ltcGxpZnksXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcbiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSAoMCwgX3NpbXBsaWZ5Q29uc3RhbnQuY3JlYXRlU2ltcGxpZnlDb25zdGFudCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSk7XG4gIHZhciBzaW1wbGlmeUNvcmUgPSAoMCwgX3NpbXBsaWZ5Q29yZS5jcmVhdGVTaW1wbGlmeUNvcmUpKHtcbiAgICBlcXVhbDogZXF1YWwsXG4gICAgaXNaZXJvOiBpc1plcm8sXG4gICAgYWRkOiBhZGQsXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBkaXZpZGU6IGRpdmlkZSxcbiAgICBwb3c6IHBvdyxcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi5cbiAgICogSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0c1xuICAgKiB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nXG4gICAqIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICByYXRpb25hbGl6ZShleHByKVxuICAgKiAgICAgcmF0aW9uYWxpemUoZXhwciwgZGV0YWlsZWQpXG4gICAqICAgICByYXRpb25hbGl6ZShleHByLCBzY29wZSlcbiAgICogICAgIHJhdGlvbmFsaXplKGV4cHIsIHNjb3BlLCBkZXRhaWxlZClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCdzaW4oeCkreScpXG4gICAqICAgICAgICAgICAgICAgICAgIC8vICBFcnJvcjogVGhlcmUgaXMgYW4gdW5zb2x2ZWQgZnVuY3Rpb24gY2FsbFxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnMngveSAtIHkvKHgrMSknKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyAoMip4XjIteV4yKzIqeCkvKHgqeSt5KVxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnKDJ4KzEpXjYnKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyA2NCp4XjYrMTkyKnheNSsyNDAqeF40KzE2MCp4XjMrNjAqeF4yKzEyKngrMVxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnMngvKCAoMngtMSkgLyAoM3grMikgKSAtIDV4LyAoICgzeCs0KSAvICgyeF4yLTUpICkgKyAzJylcbiAgICogICAgICAgICAgICAgICAgICAgLy8gLTIwKnheNCsyOCp4XjMrMTA0KnheMis2KngtMTIpLyg2KnheMis1KngtNClcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3gvKDEteCkvKHgtMikvKHgtMykvKHgtNCkgKyAyeC8gKCAoMS0yeCkvKDItM3gpICkvICgoMy00eCkvKDQtNXgpICknKSA9XG4gICAqICAgICAgICAgICAgICAgICAgIC8vICgtMzAqeF43KzM0NCp4XjYtMTUwNip4XjUrMzIwMCp4XjQtMzQ3Mip4XjMrMTg0Nip4XjItMzgxKngpL1xuICAgKiAgICAgICAgICAgICAgICAgICAvLyAgICAgKC04KnheNis5MCp4XjUtMzgzKnheNCs3ODAqeF4zLTc5Nyp4XjIrMzkwKngtNzIpXG4gICAqXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCd4K3greCt5Jyx7eToxfSkgLy8gMyp4KzFcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3greCt4K3knLHt9KSAgICAvLyAzKngreVxuICAgKlxuICAgKiAgICAgY29uc3QgcmV0ID0gbWF0aC5yYXRpb25hbGl6ZSgneCt4K3greScse30sdHJ1ZSlcbiAgICogICAgICAgICAgICAgICAgICAgLy8gcmV0LmV4cHJlc3Npb249Myp4K3ksIHJldC52YXJpYWJsZXMgPSBbXCJ4XCIsXCJ5XCJdXG4gICAqICAgICBjb25zdCByZXQgPSBtYXRoLnJhdGlvbmFsaXplKCctMis1eF4yJyx7fSx0cnVlKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyByZXQuZXhwcmVzc2lvbj01KnheMi0yLCByZXQudmFyaWFibGVzID0gW1wieFwiXSwgcmV0LmNvZWZmaWNpZW50cz1bLTIsMCw1XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5XG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV8c3RyaW5nfSBleHByICAgIFRoZSBleHByZXNzaW9uIHRvIGNoZWNrIGlmIGlzIGEgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqIEBwYXJhbSAge09iamVjdHxib29sZWFufSAgICAgIG9wdGlvbmFsIHNjb3BlIG9mIGV4cHJlc3Npb24gb3IgdHJ1ZSBmb3IgYWxyZWFkeSBldmFsdWF0ZWQgcmF0aW9uYWwgZXhwcmVzc2lvbiBhdCBpbnB1dFxuICAgKiBAcGFyYW0gIHtCb29sZWFufSAgZGV0YWlsZWQgICBvcHRpb25hbCBUcnVlIGlmIHJldHVybiBhbiBvYmplY3QsIGZhbHNlIGlmIHJldHVybiBleHByZXNzaW9uIG5vZGUgKGRlZmF1bHQpXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdCB8IE5vZGV9ICAgIFRoZSByYXRpb25hbCBwb2x5bm9taWFsIG9mIGBleHByYCBvciBuYSBvYmplY3RcbiAgICogICAgICAgICAgICB7T2JqZWN0fVxuICAgKiAgICAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZX0gZXhwcmVzc2lvbjogbm9kZSBzaW1wbGlmaWVkIGV4cHJlc3Npb25cbiAgICogICAgICAgICAgICAgIHtFeHByZXNzaW9uIE5vZGV9IG51bWVyYXRvcjogc2ltcGxpZmllZCBudW1lcmF0b3Igb2YgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZSB8IGJvb2xlYW59IGRlbm9taW5hdG9yOiBzaW1wbGlmaWVkIGRlbm9taW5hdG9yIG9yIGZhbHNlIChpZiB0aGVyZSBpcyBubyBkZW5vbWluYXRvcilcbiAgICogICAgICAgICAgICAgIHtBcnJheX0gICAgICAgICAgIHZhcmlhYmxlczogIHZhcmlhYmxlIG5hbWVzXG4gICAqICAgICAgICAgICAgICB7QXJyYXl9ICAgICAgICAgICBjb2VmZmljaWVudHM6IGNvZWZmaWNpZW50cyBvZiBudW1lcmF0b3Igc29ydGVkIGJ5IGluY3JlYXNlZCBleHBvbmVudFxuICAgKiAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZX0gIG5vZGUgc2ltcGxpZmllZCBleHByZXNzaW9uXG4gICAqXG4gICAqL1xuXG4gIHZhciByYXRpb25hbGl6ZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHt9LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBib29sZWFuJzogZnVuY3Rpb24gc3RyaW5nQm9vbGVhbihleHByLCBkZXRhaWxlZCkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCB7fSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHNjb3BlLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QsIGJvb2xlYW4nOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCBzY29wZSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgTm9kZTogZnVuY3Rpb24gTm9kZShleHByKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUoZXhwciwge30sIGZhbHNlKTtcbiAgICB9LFxuICAgICdOb2RlLCBib29sZWFuJzogZnVuY3Rpb24gTm9kZUJvb2xlYW4oZXhwciwgZGV0YWlsZWQpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCB7fSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCBzY29wZSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCwgYm9vbGVhbic6IGZ1bmN0aW9uIE5vZGVPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkge1xuICAgICAgdmFyIHNldFJ1bGVzID0gcnVsZXNSYXRpb25hbGl6ZSgpOyAvLyBSdWxlcyBmb3IgY2hhbmdlIHBvbHlub21pYWwgaW4gbmVhciBjYW5vbmljYWwgZm9ybVxuXG4gICAgICB2YXIgcG9seVJldCA9IHBvbHlub21pYWwoZXhwciwgc2NvcGUsIHRydWUsIHNldFJ1bGVzLmZpcnN0UnVsZXMpOyAvLyBDaGVjayBpZiBleHByZXNzaW9uIGlzIGEgcmF0aW9uYWxpemFibGUgcG9seW5vbWlhbFxuXG4gICAgICB2YXIgblZhcnMgPSBwb2x5UmV0LnZhcmlhYmxlcy5sZW5ndGg7XG4gICAgICBleHByID0gcG9seVJldC5leHByZXNzaW9uO1xuXG4gICAgICBpZiAoblZhcnMgPj0gMSkge1xuICAgICAgICAvLyBJZiBleHByZXNzaW9uIGluIG5vdCBhIGNvbnN0YW50XG4gICAgICAgIGV4cHIgPSBleHBhbmRQb3dlcihleHByKTsgLy8gRmlyc3QgZXhwYW5kIHBvd2VyIG9mIHBvbHlub21pYWxzIChjYW5ub3QgYmUgbWFkZSBmcm9tIHJ1bGVzISlcblxuICAgICAgICB2YXIgc0JlZm9yZTsgLy8gUHJldmlvdXMgZXhwcmVzc2lvblxuXG4gICAgICAgIHZhciBydWxlcztcbiAgICAgICAgdmFyIGVEaXN0ckRpdiA9IHRydWU7XG4gICAgICAgIHZhciByZWRvSW5pYyA9IGZhbHNlO1xuICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlcywge30sIHtcbiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFwcGx5IHRoZSBpbml0aWFsIHJ1bGVzLCBpbmNsdWRpbmcgc3VjYyBkaXYgcnVsZXNcblxuICAgICAgICB2YXIgcztcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIC8vIEFwcGx5IGFsdGVybmF0ZWx5ICBzdWNjZXNzaXZlIGRpdmlzaW9uIHJ1bGVzIGFuZCBkaXN0ci5kaXYucnVsZXNcbiAgICAgICAgICBydWxlcyA9IGVEaXN0ckRpdiA/IHNldFJ1bGVzLmRpc3RyRGl2UnVsZXMgOiBzZXRSdWxlcy5zdWNEaXZSdWxlcztcbiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgcnVsZXMpOyAvLyB1bnRpbCBubyBtb3JlIGNoYW5nZXNcblxuICAgICAgICAgIGVEaXN0ckRpdiA9ICFlRGlzdHJEaXY7IC8vIFN3YXAgYmV0d2VlbiBEaXN0ci5EaXYgYW5kIFN1Y2MuIERpdi4gUnVsZXNcblxuICAgICAgICAgIHMgPSBleHByLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBpZiAocyA9PT0gc0JlZm9yZSkge1xuICAgICAgICAgICAgYnJlYWs7IC8vIE5vIGNoYW5nZXMgOiBlbmQgb2YgdGhlIGxvb3BcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWRvSW5pYyA9IHRydWU7XG4gICAgICAgICAgc0JlZm9yZSA9IHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVkb0luaWMpIHtcbiAgICAgICAgICAvLyBBcHBseSBmaXJzdCBydWxlcyBhZ2FpbiB3aXRob3V0IHN1Y2MgZGl2IHJ1bGVzIChpZiB0aGVyZSBhcmUgY2hhbmdlcylcbiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluLCB7fSwge1xuICAgICAgICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmluYWxSdWxlcywge30sIHtcbiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFwcGx5IGZpbmFsIHJ1bGVzXG4gICAgICB9IC8vIE5WYXJzID49IDFcblxuXG4gICAgICB2YXIgY29lZmZpY2llbnRzID0gW107XG4gICAgICB2YXIgcmV0UmF0aW9uYWxpemUgPSB7fTtcblxuICAgICAgaWYgKGV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgJiYgZXhwci5pc0JpbmFyeSgpICYmIGV4cHIub3AgPT09ICcvJykge1xuICAgICAgICAvLyBTZXBhcmF0ZSBudW1lcmF0b3IgZnJvbSBkZW5vbWluYXRvclxuICAgICAgICBpZiAoblZhcnMgPT09IDEpIHtcbiAgICAgICAgICBleHByLmFyZ3NbMF0gPSBwb2x5VG9DYW5vbmljYWwoZXhwci5hcmdzWzBdLCBjb2VmZmljaWVudHMpO1xuICAgICAgICAgIGV4cHIuYXJnc1sxXSA9IHBvbHlUb0Nhbm9uaWNhbChleHByLmFyZ3NbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRldGFpbGVkKSB7XG4gICAgICAgICAgcmV0UmF0aW9uYWxpemUubnVtZXJhdG9yID0gZXhwci5hcmdzWzBdO1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLmRlbm9taW5hdG9yID0gZXhwci5hcmdzWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoblZhcnMgPT09IDEpIHtcbiAgICAgICAgICBleHByID0gcG9seVRvQ2Fub25pY2FsKGV4cHIsIGNvZWZmaWNpZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGV0YWlsZWQpIHtcbiAgICAgICAgICByZXRSYXRpb25hbGl6ZS5udW1lcmF0b3IgPSBleHByO1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLmRlbm9taW5hdG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBuVmFyc1xuXG5cbiAgICAgIGlmICghZGV0YWlsZWQpIHJldHVybiBleHByO1xuICAgICAgcmV0UmF0aW9uYWxpemUuY29lZmZpY2llbnRzID0gY29lZmZpY2llbnRzO1xuICAgICAgcmV0UmF0aW9uYWxpemUudmFyaWFibGVzID0gcG9seVJldC52YXJpYWJsZXM7XG4gICAgICByZXRSYXRpb25hbGl6ZS5leHByZXNzaW9uID0gZXhwcjtcbiAgICAgIHJldHVybiByZXRSYXRpb25hbGl6ZTtcbiAgICB9IC8vIF5eXl5eXl4gZW5kIG9mIHJhdGlvbmFsaXplIF5eXl5eXl5eXG5cbiAgfSk7IC8vIGVuZCBvZiB0eXBlZCByYXRpb25hbGl6ZVxuXG4gIC8qKlxuICAgKiAgRnVuY3Rpb24gdG8gc2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB1c2luZyBhbiBvcHRpb25hbCBzY29wZSBhbmRcbiAgICogIHJldHVybiBpdCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIHBvbHlub21pYWwgZXhwcmVzc2lvbiwgaS5lLlxuICAgKiAgYW4gZXhwcmVzc2lvbiB3aXRoIG9uZSBvciBtb3JlIHZhcmlhYmxlcyBhbmQgdGhlIG9wZXJhdG9yc1xuICAgKiAgKywgLSwgKiwgYW5kIF4sIHdoZXJlIHRoZSBleHBvbmVudCBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHBvbHlub21pYWwoZXhwcixzY29wZSxleHRlbmRlZCwgcnVsZXMpXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgIFRoZSBleHByZXNzaW9uIHRvIHNpbXBsaWZ5IGFuZCBjaGVjayBpZiBpcyBwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICogQHBhcmFtICB7b2JqZWN0fSBzY29wZSAgICAgICAgICAgT3B0aW9uYWwgc2NvcGUgZm9yIGV4cHJlc3Npb24gc2ltcGxpZmljYXRpb25cbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gZXh0ZW5kZWQgICAgICAgT3B0aW9uYWwuIERlZmF1bHQgaXMgZmFsc2UuIFdoZW4gdHJ1ZSBhbGxvd3MgZGl2aWRlIG9wZXJhdG9yLlxuICAgKiBAcGFyYW0gIHthcnJheX0gIHJ1bGVzICAgICAgICAgICBPcHRpb25hbC4gRGVmYXVsdCBpcyBubyBydWxlLlxuICAgKlxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqICAgICAgICAgICAge09iamVjdH0gbm9kZTogICBub2RlIHNpbXBsaWZpZWQgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgIHtBcnJheX0gIHZhcmlhYmxlczogIHZhcmlhYmxlIG5hbWVzXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHBvbHlub21pYWwoZXhwciwgc2NvcGUsIGV4dGVuZGVkLCBydWxlcykge1xuICAgIHZhciB2YXJpYWJsZXMgPSBbXTtcbiAgICB2YXIgbm9kZSA9IHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCBzY29wZSwge1xuICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgfSk7IC8vIFJlc29sdmVzIGFueSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyB3aXRoIGFsbCBkZWZpbmVkIHBhcmFtZXRlcnNcblxuICAgIGV4dGVuZGVkID0gISFleHRlbmRlZDtcbiAgICB2YXIgb3BlciA9ICcrLSonICsgKGV4dGVuZGVkID8gJy8nIDogJycpO1xuICAgIHJlY1BvbHkobm9kZSk7XG4gICAgdmFyIHJldEZ1bmMgPSB7fTtcbiAgICByZXRGdW5jLmV4cHJlc3Npb24gPSBub2RlO1xuICAgIHJldEZ1bmMudmFyaWFibGVzID0gdmFyaWFibGVzO1xuICAgIHJldHVybiByZXRGdW5jOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiAgRnVuY3Rpb24gdG8gc2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB1c2luZyBhbiBvcHRpb25hbCBzY29wZSBhbmRcbiAgICAgKiAgcmV0dXJuIGl0IGlmIHRoZSBleHByZXNzaW9uIGlzIGEgcG9seW5vbWlhbCBleHByZXNzaW9uLCBpLmUuXG4gICAgICogIGFuIGV4cHJlc3Npb24gd2l0aCBvbmUgb3IgbW9yZSB2YXJpYWJsZXMgYW5kIHRoZSBvcGVyYXRvcnNcbiAgICAgKiAgKywgLSwgKiwgYW5kIF4sIHdoZXJlIHRoZSBleHBvbmVudCBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBTeW50YXg6XG4gICAgICpcbiAgICAgKiAgICAgcmVjUG9seShub2RlKVxuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICAgICAgICAgVGhlIGN1cnJlbnQgc3ViIHRyZWUgZXhwcmVzc2lvbiBpbiByZWN1cnNpb25cbiAgICAgKlxuICAgICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgICBub3RoaW5nLCB0aHJvdyBhbiBleGNlcHRpb24gaWYgZXJyb3JcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHJlY1BvbHkobm9kZSkge1xuICAgICAgdmFyIHRwID0gbm9kZS50eXBlOyAvLyBub2RlIHR5cGVcblxuICAgICAgaWYgKHRwID09PSAnRnVuY3Rpb25Ob2RlJykge1xuICAgICAgICAvLyBObyBmdW5jdGlvbiBjYWxsIGluIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTtcbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdPcGVyYXRvck5vZGUnKSB7XG4gICAgICAgIGlmIChub2RlLm9wID09PSAnXicpIHtcbiAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgbmVnYXRpdmUgZXhwb25lbnRzIGxpa2UgaW4gJzEveF4oLTIpJ1xuICAgICAgICAgIGlmIChub2RlLmFyZ3NbMV0udHlwZSAhPT0gJ0NvbnN0YW50Tm9kZScgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikocGFyc2VGbG9hdChub2RlLmFyZ3NbMV0udmFsdWUpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhIG5vbi1pbnRlZ2VyIGV4cG9uZW50Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG9wZXIuaW5kZXhPZihub2RlLm9wKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgJyArIG5vZGUub3AgKyAnIGludmFsaWQgaW4gcG9seW5vbWlhbCBleHByZXNzaW9uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gdHlwZSBvZiBvcGVyYXRvclxuXG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnU3ltYm9sTm9kZScpIHtcbiAgICAgICAgdmFyIF9uYW1lID0gbm9kZS5uYW1lOyAvLyB2YXJpYWJsZSBuYW1lXG5cbiAgICAgICAgdmFyIHBvcyA9IHZhcmlhYmxlcy5pbmRleE9mKF9uYW1lKTtcblxuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgIC8vIG5ldyB2YXJpYWJsZSBpbiBleHByZXNzaW9uXG4gICAgICAgICAgdmFyaWFibGVzLnB1c2goX25hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnUGFyZW50aGVzaXNOb2RlJykge1xuICAgICAgICByZWNQb2x5KG5vZGUuY29udGVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRwICE9PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgJyArIHRwICsgJyBpcyBub3QgYWxsb3dlZCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb24nKTtcbiAgICAgIH1cbiAgICB9IC8vIGVuZCBvZiByZWNQb2x5XG5cbiAgfSAvLyBlbmQgb2YgcG9seW5vbWlhbFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcnVsZSBzZXQgdG8gcmF0aW9uYWxpemUgYW4gcG9seW5vbWlhbCBleHByZXNzaW9uIGluIHJhdGlvbmFsaXplXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHJ1bGVzUmF0aW9uYWxpemUoKVxuICAgKlxuICAgKiBAcmV0dXJuIHthcnJheX0gICAgICAgIHJ1bGUgc2V0IHRvIHJhdGlvbmFsaXplIGFuIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHJ1bGVzUmF0aW9uYWxpemUoKSB7XG4gICAgdmFyIG9sZFJ1bGVzID0gW3NpbXBsaWZ5Q29yZSwgLy8gc0NvcmVcbiAgICB7XG4gICAgICBsOiAnbituJyxcbiAgICAgIHI6ICcyKm4nXG4gICAgfSwge1xuICAgICAgbDogJ24rLW4nLFxuICAgICAgcjogJzAnXG4gICAgfSwgc2ltcGxpZnlDb25zdGFudCwgLy8gc0NvbnN0YW50XG4gICAge1xuICAgICAgbDogJ24qKG4xXi0xKScsXG4gICAgICByOiAnbi9uMSdcbiAgICB9LCB7XG4gICAgICBsOiAnbipuMV4tbjInLFxuICAgICAgcjogJ24vbjFebjInXG4gICAgfSwge1xuICAgICAgbDogJ24xXi0xJyxcbiAgICAgIHI6ICcxL24xJ1xuICAgIH0sIHtcbiAgICAgIGw6ICduKihuMS9uMiknLFxuICAgICAgcjogJyhuKm4xKS9uMidcbiAgICB9LCB7XG4gICAgICBsOiAnMSpuJyxcbiAgICAgIHI6ICduJ1xuICAgIH1dO1xuICAgIHZhciBydWxlc0ZpcnN0ID0gW3tcbiAgICAgIGw6ICcoLW4xKS8oLW4yKScsXG4gICAgICByOiAnbjEvbjInXG4gICAgfSwgLy8gVW5hcnkgZGl2aXNpb25cbiAgICB7XG4gICAgICBsOiAnKC1uMSkqKC1uMiknLFxuICAgICAgcjogJ24xKm4yJ1xuICAgIH0sIC8vIFVuYXJ5IG11bHRpcGxpY2F0aW9uXG4gICAge1xuICAgICAgbDogJ24xLS1uMicsXG4gICAgICByOiAnbjErbjInXG4gICAgfSwgLy8gJy0tJyBlbGltaW5hdGlvblxuICAgIHtcbiAgICAgIGw6ICduMS1uMicsXG4gICAgICByOiAnbjErKC1uMiknXG4gICAgfSwgLy8gU3VidHJhY3Rpb24gdHVybiBpbnRvIGFkZCB3aXRoIHVu77+9cnkgbWludXNcbiAgICB7XG4gICAgICBsOiAnKG4xK24yKSpuMycsXG4gICAgICByOiAnKG4xKm4zICsgbjIqbjMpJ1xuICAgIH0sIC8vIERpc3RyaWJ1dGl2ZSAxXG4gICAge1xuICAgICAgbDogJ24xKihuMituMyknLFxuICAgICAgcjogJyhuMSpuMituMSpuMyknXG4gICAgfSwgLy8gRGlzdHJpYnV0aXZlIDJcbiAgICB7XG4gICAgICBsOiAnYzEqbiArIGMyKm4nLFxuICAgICAgcjogJyhjMStjMikqbidcbiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50c1xuICAgIHtcbiAgICAgIGw6ICdjMSpuICsgbicsXG4gICAgICByOiAnKGMxKzEpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAnYzEqbiAtIGMyKm4nLFxuICAgICAgcjogJyhjMS1jMikqbidcbiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50c1xuICAgIHtcbiAgICAgIGw6ICdjMSpuIC0gbicsXG4gICAgICByOiAnKGMxLTEpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAndi9jJyxcbiAgICAgIHI6ICcoMS9jKSp2J1xuICAgIH0sIC8vIHZhcmlhYmxlL2NvbnN0YW50IChuZXchKVxuICAgIHtcbiAgICAgIGw6ICd2Ly1jJyxcbiAgICAgIHI6ICctKDEvYykqdidcbiAgICB9LCAvLyB2YXJpYWJsZS9jb25zdGFudCAobmV3ISlcbiAgICB7XG4gICAgICBsOiAnLXYqLWMnLFxuICAgICAgcjogJ2MqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDFcbiAgICB7XG4gICAgICBsOiAnLXYqYycsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDJcbiAgICB7XG4gICAgICBsOiAndiotYycsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDNcbiAgICB7XG4gICAgICBsOiAndipjJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gSW52ZXJzaW9uIGNvbnN0YW50IGFuZCB2YXJpYWJsZSA0XG4gICAge1xuICAgICAgbDogJy0oLW4xKm4yKScsXG4gICAgICByOiAnKG4xKm4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICctKG4xKm4yKScsXG4gICAgICByOiAnKC1uMSpuMiknXG4gICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb25cbiAgICB7XG4gICAgICBsOiAnLSgtbjErbjIpJyxcbiAgICAgIHI6ICcobjEtbjIpJ1xuICAgIH0sIC8vIFVuYXJ5IHByb3BhZ2F0aW9uXG4gICAge1xuICAgICAgbDogJy0objErbjIpJyxcbiAgICAgIHI6ICcoLW4xLW4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICcobjFebjIpXm4zJyxcbiAgICAgIHI6ICcobjFeKG4yKm4zKSknXG4gICAgfSwgLy8gUG93ZXIgdG8gUG93ZXJcbiAgICB7XG4gICAgICBsOiAnLSgtbjEvbjIpJyxcbiAgICAgIHI6ICcobjEvbjIpJ1xuICAgIH0sIC8vIERpdmlzaW9uIGFuZCBVbmFyeVxuICAgIHtcbiAgICAgIGw6ICctKG4xL24yKScsXG4gICAgICByOiAnKC1uMS9uMiknXG4gICAgfV07IC8vIERpdmlzYW8gYW5kIFVuYXJ5XG5cbiAgICB2YXIgcnVsZXNEaXN0ckRpdiA9IFt7XG4gICAgICBsOiAnKG4xL24yICsgbjMvbjQpJyxcbiAgICAgIHI6ICcoKG4xKm40ICsgbjMqbjIpLyhuMipuNCkpJ1xuICAgIH0sIC8vIFN1bSBvZiBmcmFjdGlvbnNcbiAgICB7XG4gICAgICBsOiAnKG4xL24yICsgbjMpJyxcbiAgICAgIHI6ICcoKG4xICsgbjMqbjIpL24yKSdcbiAgICB9LCAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMVxuICAgIHtcbiAgICAgIGw6ICcobjEgKyBuMi9uMyknLFxuICAgICAgcjogJygobjEqbjMgKyBuMikvbjMpJ1xuICAgIH1dOyAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMVxuXG4gICAgdmFyIHJ1bGVzU3VjRGl2ID0gW3tcbiAgICAgIGw6ICcobjEvKG4yL24zKSknLFxuICAgICAgcjogJygobjEqbjMpL24yKSdcbiAgICB9LCAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvblxuICAgIHtcbiAgICAgIGw6ICcobjEvbjIvbjMpJyxcbiAgICAgIHI6ICcobjEvKG4yKm4zKSknXG4gICAgfV07XG4gICAgdmFyIHNldFJ1bGVzID0ge307IC8vIHJ1bGVzIHNldCBpbiA0IHN0ZXBzLlxuICAgIC8vIEFsbCBydWxlcyA9PiBpbmZpbml0ZSBsb29wXG4gICAgLy8gc2V0UnVsZXMuYWxsUnVsZXMgPW9sZFJ1bGVzLmNvbmNhdChydWxlc0ZpcnN0LHJ1bGVzRGlzdHJEaXYscnVsZXNTdWNEaXYpXG5cbiAgICBzZXRSdWxlcy5maXJzdFJ1bGVzID0gb2xkUnVsZXMuY29uY2F0KHJ1bGVzRmlyc3QsIHJ1bGVzU3VjRGl2KTsgLy8gRmlyc3QgcnVsZSBzZXRcblxuICAgIHNldFJ1bGVzLmRpc3RyRGl2UnVsZXMgPSBydWxlc0Rpc3RyRGl2OyAvLyBKdXN0IGRpc3RyLiBkaXYuIHJ1bGVzXG5cbiAgICBzZXRSdWxlcy5zdWNEaXZSdWxlcyA9IHJ1bGVzU3VjRGl2OyAvLyBKdXMgc3VjYy4gZGl2LiBydWxlc1xuXG4gICAgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluID0gb2xkUnVsZXMuY29uY2F0KHJ1bGVzRmlyc3QpOyAvLyBMYXN0IHJ1bGVzIHNldCB3aXRob3V0IHN1Y2MuIGRpdi5cbiAgICAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvblxuICAgIC8vIFNlY29uZCBydWxlIHNldC5cbiAgICAvLyBUaGVyZSBpcyBubyBhZ2dyZWdhdGUgZXhwcmVzc2lvbiB3aXRoIHBhcmVudGVzaXMsIGJ1dCB0aGUgb25seSB2YXJpYWJsZSBjYW4gYmUgc2NhdHRlcmVkLlxuXG4gICAgc2V0UnVsZXMuZmluYWxSdWxlcyA9IFtzaW1wbGlmeUNvcmUsIC8vIHNpbXBsaWZ5LnJ1bGVzWzBdXG4gICAge1xuICAgICAgbDogJ24qLW4nLFxuICAgICAgcjogJy1uXjInXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDFcbiAgICB7XG4gICAgICBsOiAnbipuJyxcbiAgICAgIHI6ICduXjInXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDJcbiAgICBzaW1wbGlmeUNvbnN0YW50LCAvLyBzaW1wbGlmeS5ydWxlc1sxNF0gb2xkIDNyZCBpbmRleCBpbiBvbGRSdWxlc1xuICAgIHtcbiAgICAgIGw6ICduKi1uXm4xJyxcbiAgICAgIHI6ICctbl4objErMSknXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDNcbiAgICB7XG4gICAgICBsOiAnbipuXm4xJyxcbiAgICAgIHI6ICduXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgNFxuICAgIHtcbiAgICAgIGw6ICduXm4xKi1uXm4yJyxcbiAgICAgIHI6ICctbl4objErbjIpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA1XG4gICAge1xuICAgICAgbDogJ25ebjEqbl5uMicsXG4gICAgICByOiAnbl4objErbjIpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA2XG4gICAge1xuICAgICAgbDogJ25ebjEqLW4nLFxuICAgICAgcjogJy1uXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgN1xuICAgIHtcbiAgICAgIGw6ICduXm4xKm4nLFxuICAgICAgcjogJ25eKG4xKzEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA4XG4gICAge1xuICAgICAgbDogJ25ebjEvLW4nLFxuICAgICAgcjogJy1uXihuMS0xKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgOFxuICAgIHtcbiAgICAgIGw6ICduXm4xL24nLFxuICAgICAgcjogJ25eKG4xLTEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAxXG4gICAge1xuICAgICAgbDogJ24vLW5ebjEnLFxuICAgICAgcjogJy1uXigxLW4xKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgMlxuICAgIHtcbiAgICAgIGw6ICduL25ebjEnLFxuICAgICAgcjogJ25eKDEtbjEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAzXG4gICAge1xuICAgICAgbDogJ25ebjEvLW5ebjInLFxuICAgICAgcjogJ25eKG4xLW4yKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNFxuICAgIHtcbiAgICAgIGw6ICduXm4xL25ebjInLFxuICAgICAgcjogJ25eKG4xLW4yKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNVxuICAgIHtcbiAgICAgIGw6ICduMSsoLW4yKm4zKScsXG4gICAgICByOiAnbjEtbjIqbjMnXG4gICAgfSwgLy8gU29sdmluZyB1c2VsZXNzIHBhcmVudGhlc2lzIDFcbiAgICB7XG4gICAgICBsOiAndiooLWMpJyxcbiAgICAgIHI6ICctYyp2J1xuICAgIH0sIC8vIFNvbHZpbmcgdXNlbGVzcyB1bmFyeSAyXG4gICAge1xuICAgICAgbDogJ24xKy1uMicsXG4gICAgICByOiAnbjEtbjInXG4gICAgfSwgLy8gU29sdmluZyArLSB0b2dldGhlciAobmV3ISlcbiAgICB7XG4gICAgICBsOiAndipjJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gaW52ZXJzaW9uIGNvbnN0YW50IHdpdGggdmFyaWFibGVcbiAgICB7XG4gICAgICBsOiAnKG4xXm4yKV5uMycsXG4gICAgICByOiAnKG4xXihuMipuMykpJ1xuICAgIH0gLy8gUG93ZXIgdG8gUG93ZXJcbiAgICBdO1xuICAgIHJldHVybiBzZXRSdWxlcztcbiAgfSAvLyBFbmQgcnVsZXNSYXRpb25hbGl6ZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogIEV4cGFuZCByZWN1cnNpdmVseSBhIHRyZWUgbm9kZSBmb3IgaGFuZGxpbmcgd2l0aCBleHByZXNzaW9ucyB3aXRoIGV4cG9uZW50c1xuICAgKiAgKGl0J3Mgbm90IGZvciBjb25zdGFudHMsIHN5bWJvbHMgb3IgZnVuY3Rpb25zIHdpdGggZXhwb25lbnRzKVxuICAgKiAgUFM6IFRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBpbnRlcm5hbCBmb3IgcmVjdXJzaW9uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIGV4cGFuZFBvd2VyKG5vZGUpXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV9IG5vZGUgICAgICAgICBDdXJyZW50IGV4cHJlc3Npb24gbm9kZVxuICAgKiBAcGFyYW0gIHtub2RlfSBwYXJlbnQgICAgICAgUGFyZW50IGN1cnJlbnQgbm9kZSBpbnNpZGUgdGhlIHJlY3Vyc2lvblxuICAgKiBAcGFyYW0gIChpbnR9ICAgICAgICAgICAgICAgUGFyZW50IG51bWJlciBvZiBjaGlkIGluc2lkZSB0aGUgcmVyY3Vyc2lvblxuICAgKlxuICAgKiBAcmV0dXJuIHtub2RlfSAgICAgICAgbm9kZSBleHByZXNzaW9uIHdpdGggYWxsIHBvd2VycyBleHBhbmRlZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBleHBhbmRQb3dlcihub2RlLCBwYXJlbnQsIGluZFBhcmVudCkge1xuICAgIHZhciB0cCA9IG5vZGUudHlwZTtcbiAgICB2YXIgaW50ZXJuYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMTsgLy8gVFJVRSBpbiBpbnRlcm5hbCBjYWxsc1xuXG4gICAgaWYgKHRwID09PSAnT3BlcmF0b3JOb2RlJyAmJiBub2RlLmlzQmluYXJ5KCkpIHtcbiAgICAgIHZhciBkb2VzID0gZmFsc2U7XG4gICAgICB2YXIgdmFsO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgIC8vIEZpcnN0IG9wZXJhdG9yOiBQYXJlbnRoZXNpcyBvciBVbmFyeU1pbnVzXG4gICAgICAgIGlmICgobm9kZS5hcmdzWzBdLnR5cGUgPT09ICdQYXJlbnRoZXNpc05vZGUnIHx8IG5vZGUuYXJnc1swXS50eXBlID09PSAnT3BlcmF0b3JOb2RlJykgJiYgbm9kZS5hcmdzWzFdLnR5cGUgPT09ICdDb25zdGFudE5vZGUnKSB7XG4gICAgICAgICAgLy8gU2Vjb25kIG9wZXJhdG9yOiBDb25zdGFudFxuICAgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQobm9kZS5hcmdzWzFdLnZhbHVlKTtcbiAgICAgICAgICBkb2VzID0gdmFsID49IDIgJiYgKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkb2VzKSB7XG4gICAgICAgIC8vIEV4cG9uZW50ID49IDJcbiAgICAgICAgLy8gQmVmb3JlOlxuICAgICAgICAvLyAgICAgICAgICAgIG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgLy8gcGFyZW50IHBvd1xuICAgICAgICAvLyAgICAgICAgICAgIGNvbnN0YW50XG4gICAgICAgIC8vXG4gICAgICAgIGlmICh2YWwgPiAyKSB7XG4gICAgICAgICAgLy8gRXhwb25lbnQgPiAyLFxuICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID4gMilcbiAgICAgICAgICAvLyAgICAgICAgICAgICBvcGVyYXRvciBBIC0tPiBTdWJ0cmVlXG4gICAgICAgICAgLy8gcGFyZW50ICAqXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgICAvLyAgICAgICAgICAgICBwb3dcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgY29uc3RhbnQgLSAxXG4gICAgICAgICAgLy9cbiAgICAgICAgICB2YXIgbkVzcVRvcG8gPSBub2RlLmFyZ3NbMF07XG4gICAgICAgICAgdmFyIG5EaXJUb3BvID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbbm9kZS5hcmdzWzBdLmNsb25lRGVlcCgpLCBuZXcgQ29uc3RhbnROb2RlKHZhbCAtIDEpXSk7XG4gICAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbkVzcVRvcG8sIG5EaXJUb3BvXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXhwbyA9IDIgLSBubyBwb3dlclxuICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID0gIDIpXG4gICAgICAgICAgLy8gICAgICAgICAgICAgb3BlcmF0b3IgQSAtLT4gU3VidHJlZVxuICAgICAgICAgIC8vIHBhcmVudCAgIG9wZXJcbiAgICAgICAgICAvLyAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWUpXG4gICAgICAgICAgLy9cbiAgICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLmFyZ3NbMF0sIG5vZGUuYXJnc1swXS5jbG9uZURlZXAoKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVybmFsKSB7XG4gICAgICAgICAgLy8gQ2hhbmdlIHBhcmVudCByZWZlcmVuY2VzIGluIGludGVybmFsIHJlY3Vyc2l2ZSBjYWxsc1xuICAgICAgICAgIGlmIChpbmRQYXJlbnQgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgcGFyZW50LmNvbnRlbnQgPSBub2RlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnQuYXJnc1tpbmRQYXJlbnRdID0gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZG9lc1xuXG4gICAgfSAvLyBiaW5hcnkgT3BlcmF0b3JOb2RlXG5cblxuICAgIGlmICh0cCA9PT0gJ1BhcmVudGhlc2lzTm9kZScpIHtcbiAgICAgIC8vIFJlY3Vyc2lvblxuICAgICAgZXhwYW5kUG93ZXIobm9kZS5jb250ZW50LCBub2RlLCAnY29udGVudCcpO1xuICAgIH0gZWxzZSBpZiAodHAgIT09ICdDb25zdGFudE5vZGUnICYmIHRwICE9PSAnU3ltYm9sTm9kZScpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4cGFuZFBvd2VyKG5vZGUuYXJnc1tpXSwgbm9kZSwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgLy8gcmV0dXJuIHRoZSByb290IG5vZGVcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfSAvLyBFbmQgZXhwYW5kUG93ZXJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEF1eGlsYXJ5IGZ1bmN0aW9uIGZvciByYXRpb25hbGl6ZVxuICAgKiBDb252ZXJ0IG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgaW4gb25lIHZhcmlhYmxlIGluIGEgY2Fub25pY2FsIHBvbHlub21pYWxcbiAgICogd2l0aCBvbmUgdGVybSBmb3IgZWFjaCBleHBvbmVudCBpbiBkZWNyZWFzaW5nIG9yZGVyXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHBvbHlUb0Nhbm9uaWNhbChub2RlIFssIGNvZWZmaWNpZW50c10pXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgICAgVGhlIG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgZXhwcmVzc2lvbiB0byBjb252ZXJ0IGluIGEgYSBjYW5vbmljYWwgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqXG4gICAqICAgICAgICBUaGUgc3RyaW5nIG9yIHRyZWUgZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBhdCBiZWxvdyBzeW50YXgsIHdpdGggZnJlZSBzcGFjZXM6XG4gICAqICAgICAgICAgKCAgKF4oLSk/IHwgWystXT8gKWN0ZSAoKik/IHZhciAoXmV4cG8pPyAgfCBjdGUgKStcbiAgICogICAgICAgV2hlcmUgJ3ZhcicgaXMgb25lIHZhcmlhYmxlIHdpdGggYW55IHZhbGlkIG5hbWVcbiAgICogICAgICAgICAgICAgJ2N0ZScgYXJlIHJlYWwgbnVtZXJpYyBjb25zdGFudHMgd2l0aCBhbnkgdmFsdWUuIEl0IGNhbiBiZSBvbWl0dGVkIGlmIGVxdWFsIHRoYW4gMVxuICAgKiAgICAgICAgICAgICAnZXhwbycgYXJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiAwLiBJdCBjYW4gYmUgb21pdHRlZCBpZiBlcXVhbCB0aGFuIDEuXG4gICAqXG4gICAqIEBwYXJhbSAge2FycmF5fSAgIGNvZWZmaWNpZW50cyAgICAgICAgICAgICBPcHRpb25hbCByZXR1cm5zIGNvZWZmaWNpZW50cyBzb3J0ZWQgYnkgaW5jcmVhc2VkIGV4cG9uZW50XG4gICAqXG4gICAqXG4gICAqIEByZXR1cm4ge25vZGV9ICAgICAgICBuZXcgbm9kZSB0cmVlIHdpdGggb25lIHZhcmlhYmxlIHBvbHlub21pYWwgb3Igc3RyaW5nIGVycm9yLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBvbHlUb0Nhbm9uaWNhbChub2RlLCBjb2VmZmljaWVudHMpIHtcbiAgICBpZiAoY29lZmZpY2llbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvZWZmaWNpZW50cyA9IFtdO1xuICAgIH0gLy8gY29lZmZpY2llbnRzLlxuXG5cbiAgICBjb2VmZmljaWVudHNbMF0gPSAwOyAvLyBpbmRleCBpcyB0aGUgZXhwb25lbnRcblxuICAgIHZhciBvID0ge307XG4gICAgby5jdGUgPSAxO1xuICAgIG8ub3BlciA9ICcrJzsgLy8gZmlyZTogbWFyayB3aXRoICogb3IgXiB3aGVuIGZpbmRzICogb3IgXiBkb3duIHRyZWUsIHJlc2V0IHRvIFwiXCIgd2l0aCArIGFuZCAtLlxuICAgIC8vICAgICAgIEl0IGlzIHVzZWQgdG8gZGVkdWNlIHRoZSBleHBvbmVudDogMSBmb3IgKiwgMCBmb3IgXCJcIi5cblxuICAgIG8uZmlyZSA9ICcnO1xuICAgIHZhciBtYXhFeHBvID0gMDsgLy8gbWF4aW11bSBleHBvbmVudFxuXG4gICAgdmFyIHZhcm5hbWUgPSAnJzsgLy8gdmFyaWFibGUgbmFtZVxuXG4gICAgcmVjdXJQb2wobm9kZSwgbnVsbCwgbyk7XG4gICAgbWF4RXhwbyA9IGNvZWZmaWNpZW50cy5sZW5ndGggLSAxO1xuICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgdmFyIG5vO1xuXG4gICAgZm9yICh2YXIgaSA9IG1heEV4cG87IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoY29lZmZpY2llbnRzW2ldID09PSAwKSBjb250aW51ZTtcbiAgICAgIHZhciBuMSA9IG5ldyBDb25zdGFudE5vZGUoZmlyc3QgPyBjb2VmZmljaWVudHNbaV0gOiBNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pKTtcbiAgICAgIHZhciBvcCA9IGNvZWZmaWNpZW50c1tpXSA8IDAgPyAnLScgOiAnKyc7XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBJcyBub3QgYSBjb25zdGFudCB3aXRob3V0IHZhcmlhYmxlXG4gICAgICAgIHZhciBuMiA9IG5ldyBTeW1ib2xOb2RlKHZhcm5hbWUpO1xuXG4gICAgICAgIGlmIChpID4gMSkge1xuICAgICAgICAgIHZhciBuMyA9IG5ldyBDb25zdGFudE5vZGUoaSk7XG4gICAgICAgICAgbjIgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuMiwgbjNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2VmZmljaWVudHNbaV0gPT09IC0xICYmIGZpcnN0KSB7XG4gICAgICAgICAgbjEgPSBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbbjJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pID09PSAxKSB7XG4gICAgICAgICAgbjEgPSBuMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuMSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbjEsIG4yXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgIG5vID0gbjE7XG4gICAgICB9IGVsc2UgaWYgKG9wID09PSAnKycpIHtcbiAgICAgICAgbm8gPSBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtubywgbjFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtubywgbjFdKTtcbiAgICAgIH1cblxuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IC8vIGZvclxuXG5cbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm87XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZSBhdXhpbGFyeSBmdW5jdGlvbiBpbnNpZGUgcG9seVRvQ2Fub25pY2FsIGZvclxuICAgICAqIGNvbnZlcnRpbmcgZXhwcmVzc2lvbiBpbiBjYW5vbmljYWwgZm9ybVxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgIHJlY3VyUG9sKG5vZGUsIG5vUGFpLCBvYmopXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICBUaGUgY3VycmVudCBzdWJwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0gIHtOb2RlIHwgTnVsbH0gIG5vUGFpICAgVGhlIGN1cnJlbnQgcGFyZW50IG5vZGVcbiAgICAgKiBAcGFyYW0gIHtvYmplY3R9ICAgIG9iaiAgICAgICAgT2JqZWN0IHdpdGggbWFueSBpbnRlcm5hbCBmbGFnc1xuICAgICAqXG4gICAgICogQHJldHVybiB7fSAgICAgICAgICAgICAgICAgICAgTm8gcmV0dXJuLiBJZiBlcnJvciwgdGhyb3dzIGFuIGV4Y2VwdGlvblxuICAgICAqL1xuXG5cbiAgICBmdW5jdGlvbiByZWN1clBvbChub2RlLCBub1BhaSwgbykge1xuICAgICAgdmFyIHRwID0gbm9kZS50eXBlO1xuXG4gICAgICBpZiAodHAgPT09ICdGdW5jdGlvbk5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIEZ1bmN0aW9uTmFtZSAqKioqKlxuICAgICAgICAvLyBObyBmdW5jdGlvbiBjYWxsIGluIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTtcbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdPcGVyYXRvck5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIE9wZXJhdG9yTmFtZSAqKioqKlxuICAgICAgICBpZiAoJystKl4nLmluZGV4T2Yobm9kZS5vcCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ09wZXJhdG9yICcgKyBub2RlLm9wICsgJyBpbnZhbGlkJyk7XG5cbiAgICAgICAgaWYgKG5vUGFpICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gLSh1bmFyeSksXiAgOiBjaGlsZHJlbiBvZiAqLCssLVxuICAgICAgICAgIGlmICgobm9kZS5mbiA9PT0gJ3VuYXJ5TWludXMnIHx8IG5vZGUuZm4gPT09ICdwb3cnKSAmJiBub1BhaS5mbiAhPT0gJ2FkZCcgJiYgbm9QYWkuZm4gIT09ICdzdWJ0cmFjdCcgJiYgbm9QYWkuZm4gIT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCAnICsgbm9kZS5vcCArICcgcGxhY2luZycpO1xuICAgICAgICAgIH0gLy8gLSwrLCogOiBjaGlsZHJlbiBvZiArLC1cblxuXG4gICAgICAgICAgaWYgKChub2RlLmZuID09PSAnc3VidHJhY3QnIHx8IG5vZGUuZm4gPT09ICdhZGQnIHx8IG5vZGUuZm4gPT09ICdtdWx0aXBseScpICYmIG5vUGFpLmZuICE9PSAnYWRkJyAmJiBub1BhaS5mbiAhPT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICcgKyBub2RlLm9wICsgJyBwbGFjaW5nJyk7XG4gICAgICAgICAgfSAvLyAtLCsgOiBmaXJzdCBjaGlsZFxuXG5cbiAgICAgICAgICBpZiAoKG5vZGUuZm4gPT09ICdzdWJ0cmFjdCcgfHwgbm9kZS5mbiA9PT0gJ2FkZCcgfHwgbm9kZS5mbiA9PT0gJ3VuYXJ5TWludXMnKSAmJiBvLm5vRmlsICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIG5vZGUub3AgKyAnIHBsYWNpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSGFzIHBhcmVudFxuICAgICAgICAvLyBGaXJlcnM6IF4sKiAgICAgICBPbGQ6ICAgXiwmLC0odW5hcnkpOiBmaXJlcnNcblxuXG4gICAgICAgIGlmIChub2RlLm9wID09PSAnXicgfHwgbm9kZS5vcCA9PT0gJyonKSB7XG4gICAgICAgICAgby5maXJlID0gbm9kZS5vcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBub2RlLmFyZ3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgLy8gKywtOiByZXNldCBmaXJlXG4gICAgICAgICAgaWYgKG5vZGUuZm4gPT09ICd1bmFyeU1pbnVzJykgby5vcGVyID0gJy0nO1xuXG4gICAgICAgICAgaWYgKG5vZGUub3AgPT09ICcrJyB8fCBub2RlLmZuID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICBvLmZpcmUgPSAnJztcbiAgICAgICAgICAgIG8uY3RlID0gMTsgLy8gZGVmYXVsdCBpZiB0aGVyZSBpcyBubyBjb25zdGFudFxuXG4gICAgICAgICAgICBvLm9wZXIgPSBfaSA9PT0gMCA/ICcrJyA6IG5vZGUub3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgby5ub0ZpbCA9IF9pOyAvLyBudW1iZXIgb2Ygc29uXG5cbiAgICAgICAgICByZWN1clBvbChub2RlLmFyZ3NbX2ldLCBub2RlLCBvKTtcbiAgICAgICAgfSAvLyBmb3IgaW4gY2hpbGRyZW5cblxuICAgICAgfSBlbHNlIGlmICh0cCA9PT0gJ1N5bWJvbE5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIFN5bWJvbE5hbWUgKioqKipcbiAgICAgICAgaWYgKG5vZGUubmFtZSAhPT0gdmFybmFtZSAmJiB2YXJuYW1lICE9PSAnJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFybmFtZSA9IG5vZGUubmFtZTtcblxuICAgICAgICBpZiAobm9QYWkgPT09IG51bGwpIHtcbiAgICAgICAgICBjb2VmZmljaWVudHNbMV0gPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBeOiBTeW1ib2wgaXMgRmlyc3QgY2hpbGRcblxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nICYmIG8ubm9GaWwgIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luIHBvd2VyIHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIGZpcnN0IHBhcmFtZXRlcicpO1xuICAgICAgICB9IC8vICo6IFN5bWJvbCBpcyBTZWNvbmQgY2hpbGRcblxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJyonICYmIG8ubm9GaWwgIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luIG11bHRpcGx5IHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIHNlY29uZCBwYXJhbWV0ZXInKTtcbiAgICAgICAgfSAvLyBTeW1ib2w6IGZpcmVycyAnJywqID0+IGl0IG1lYW5zIHRoZXJlIGlzIG5vIGV4cG9uZW50IGFib3ZlLCBzbyBpdCdzIDEgKGN0ZSAqIHZhcilcblxuXG4gICAgICAgIGlmIChvLmZpcmUgPT09ICcnIHx8IG8uZmlyZSA9PT0gJyonKSB7XG4gICAgICAgICAgaWYgKG1heEV4cG8gPCAxKSBjb2VmZmljaWVudHNbMV0gPSAwO1xuICAgICAgICAgIGNvZWZmaWNpZW50c1sxXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgICAgbWF4RXhwbyA9IE1hdGgubWF4KDEsIG1heEV4cG8pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICB2YXIgdmFsb3IgPSBwYXJzZUZsb2F0KG5vZGUudmFsdWUpO1xuXG4gICAgICAgIGlmIChub1BhaSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvZWZmaWNpZW50c1swXSA9IHZhbG9yO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nKSB7XG4gICAgICAgICAgLy8gY3RlOiBzZWNvbmQgIGNoaWxkIG9mIHBvd2VyXG4gICAgICAgICAgaWYgKG8ubm9GaWwgIT09IDEpIHRocm93IG5ldyBFcnJvcignQ29uc3RhbnQgY2Fubm90IGJlIHBvd2VyZWQnKTtcblxuICAgICAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWxvcikgfHwgdmFsb3IgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24taW50ZWdlciBleHBvbmVudCBpcyBub3QgYWxsb3dlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAodmFyIF9pMiA9IG1heEV4cG8gKyAxOyBfaTIgPCB2YWxvcjsgX2kyKyspIHtcbiAgICAgICAgICAgIGNvZWZmaWNpZW50c1tfaTJdID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsb3IgPiBtYXhFeHBvKSBjb2VmZmljaWVudHNbdmFsb3JdID0gMDtcbiAgICAgICAgICBjb2VmZmljaWVudHNbdmFsb3JdICs9IG8uY3RlICogKG8ub3BlciA9PT0gJysnID8gMSA6IC0xKTtcbiAgICAgICAgICBtYXhFeHBvID0gTWF0aC5tYXgodmFsb3IsIG1heEV4cG8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG8uY3RlID0gdmFsb3I7IC8vIEN0ZTogZmlyZXIgJycgPT4gVGhlcmUgaXMgbm8gZXhwb25lbnQgYW5kIG5vIG11bHRpcGxpY2F0aW9uLCBzbyB0aGUgZXhwb25lbnQgaXMgMC5cblxuICAgICAgICBpZiAoby5maXJlID09PSAnJykge1xuICAgICAgICAgIGNvZWZmaWNpZW50c1swXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwZSAnICsgdHAgKyAnIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICB9XG4gICAgfSAvLyBFbmQgb2YgcmVjdXJQb2xcblxuICB9IC8vIEVuZCBvZiBwb2x5VG9DYW5vbmljYWxcblxuXG4gIHJldHVybiByYXRpb25hbGl6ZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYXRpb25hbGl6ZSA9IGNyZWF0ZVJhdGlvbmFsaXplOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3V0aWxcIik7XG5cbnZhciBfc2ltcGxpZnlDb3JlID0gcmVxdWlyZShcIi4vc2ltcGxpZnkvc2ltcGxpZnlDb3JlXCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29uc3RhbnQgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvbnN0YW50XCIpO1xuXG52YXIgX3Jlc29sdmUgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9yZXNvbHZlXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnc2ltcGxpZnknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ3BhcnNlJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAncG93JywgJ2lzWmVybycsICdlcXVhbCcsICc/ZnJhY3Rpb24nLCAnP2JpZ251bWJlcicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZVNpbXBsaWZ5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcbiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSAoMCwgX3NpbXBsaWZ5Q29uc3RhbnQuY3JlYXRlU2ltcGxpZnlDb25zdGFudCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSk7XG4gIHZhciBzaW1wbGlmeUNvcmUgPSAoMCwgX3NpbXBsaWZ5Q29yZS5jcmVhdGVTaW1wbGlmeUNvcmUpKHtcbiAgICBlcXVhbDogZXF1YWwsXG4gICAgaXNaZXJvOiBpc1plcm8sXG4gICAgYWRkOiBhZGQsXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBkaXZpZGU6IGRpdmlkZSxcbiAgICBwb3c6IHBvdyxcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcbiAgdmFyIHJlc29sdmUgPSAoMCwgX3Jlc29sdmUuY3JlYXRlUmVzb2x2ZSkoe1xuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcblxuICB2YXIgX2NyZWF0ZVV0aWwgPSAoMCwgX3V0aWwuY3JlYXRlVXRpbCkoe1xuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSksXG4gICAgICBpc0NvbW11dGF0aXZlID0gX2NyZWF0ZVV0aWwuaXNDb21tdXRhdGl2ZSxcbiAgICAgIGlzQXNzb2NpYXRpdmUgPSBfY3JlYXRlVXRpbC5pc0Fzc29jaWF0aXZlLFxuICAgICAgZmxhdHRlbiA9IF9jcmVhdGVVdGlsLmZsYXR0ZW4sXG4gICAgICB1bmZsYXR0ZW5yID0gX2NyZWF0ZVV0aWwudW5mbGF0dGVucixcbiAgICAgIHVuZmxhdHRlbmwgPSBfY3JlYXRlVXRpbC51bmZsYXR0ZW5sLFxuICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTaW1wbGlmeSBhbiBleHByZXNzaW9uIHRyZWUuXG4gICAqXG4gICAqIEEgbGlzdCBvZiBydWxlcyBhcmUgYXBwbGllZCB0byBhbiBleHByZXNzaW9uLCByZXBlYXRpbmcgb3ZlciB0aGUgbGlzdCB1bnRpbFxuICAgKiBubyBmdXJ0aGVyIGNoYW5nZXMgYXJlIG1hZGUuXG4gICAqIEl0J3MgcG9zc2libGUgdG8gcGFzcyBhIGN1c3RvbSBzZXQgb2YgcnVsZXMgdG8gdGhlIGZ1bmN0aW9uIGFzIHNlY29uZFxuICAgKiBhcmd1bWVudC4gQSBydWxlIGNhbiBiZSBzcGVjaWZpZWQgYXMgYW4gb2JqZWN0LCBzdHJpbmcsIG9yIGZ1bmN0aW9uOlxuICAgKlxuICAgKiAgICAgY29uc3QgcnVsZXMgPSBbXG4gICAqICAgICAgIHsgbDogJ24xKm4zICsgbjIqbjMnLCByOiAnKG4xK24yKSpuMycgfSxcbiAgICogICAgICAgJ24xKm4zICsgbjIqbjMgLT4gKG4xK24yKSpuMycsXG4gICAqICAgICAgIGZ1bmN0aW9uIChub2RlKSB7XG4gICAqICAgICAgICAgLy8gLi4uIHJldHVybiBhIG5ldyBub2RlIG9yIHJldHVybiB0aGUgbm9kZSB1bmNoYW5nZWRcbiAgICogICAgICAgICByZXR1cm4gbm9kZVxuICAgKiAgICAgICB9XG4gICAqICAgICBdXG4gICAqXG4gICAqIFN0cmluZyBhbmQgb2JqZWN0IHJ1bGVzIGNvbnNpc3Qgb2YgYSBsZWZ0IGFuZCByaWdodCBwYXR0ZXJuLiBUaGUgbGVmdCBpc1xuICAgKiB1c2VkIHRvIG1hdGNoIGFnYWluc3QgdGhlIGV4cHJlc3Npb24gYW5kIHRoZSByaWdodCBkZXRlcm1pbmVzIHdoYXQgbWF0Y2hlc1xuICAgKiBhcmUgcmVwbGFjZWQgd2l0aC4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGEgcGF0dGVybiBhbmQgYSBub3JtYWxcbiAgICogZXhwcmVzc2lvbiBpcyB0aGF0IHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmVcbiAgICogaW50ZXJwcmV0ZWQgYXMgd2lsZGNhcmRzOlxuICAgKlxuICAgKiAtICduJyAtIG1hdGNoZXMgYW55IE5vZGVcbiAgICogLSAnYycgLSBtYXRjaGVzIGFueSBDb25zdGFudE5vZGVcbiAgICogLSAndicgLSBtYXRjaGVzIGFueSBOb2RlIHRoYXQgaXMgbm90IGEgQ29uc3RhbnROb2RlXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGxpc3Qgb2YgcnVsZXMgaXMgZXhwb3NlZCBvbiB0aGUgZnVuY3Rpb24gYXMgYHNpbXBsaWZ5LnJ1bGVzYFxuICAgKiBhbmQgY2FuIGJlIHVzZWQgYXMgYSBiYXNpcyB0byBidWlsdCBhIHNldCBvZiBjdXN0b20gcnVsZXMuXG4gICAqXG4gICAqIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHRoZW9yeSwgc2VlOlxuICAgKlxuICAgKiAtIFtTdHJhdGVnaWVzIGZvciBzaW1wbGlmeWluZyBtYXRoIGV4cHJlc3Npb25zIChTdGFja292ZXJmbG93KV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU0MDIyNy9zdHJhdGVnaWVzLWZvci1zaW1wbGlmeWluZy1tYXRoLWV4cHJlc3Npb25zKVxuICAgKiAtIFtTeW1ib2xpYyBjb21wdXRhdGlvbiAtIFNpbXBsaWZpY2F0aW9uIChXaWtpcGVkaWEpXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW1ib2xpY19jb21wdXRhdGlvbiNTaW1wbGlmaWNhdGlvbilcbiAgICpcbiAgICogIEFuIG9wdGlvbmFsIGBvcHRpb25zYCBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIGFzIGxhc3QgYXJndW1lbnQgb2YgYHNpbXBsaWZ5YC5cbiAgICogIFRoZXJlIGlzIGN1cnJlbnRseSBvbmUgb3B0aW9uIGF2YWlsYWJsZTogYGV4YWN0RnJhY3Rpb25zYCwgYSBib29sZWFuIHdoaWNoXG4gICAqICBpcyBgdHJ1ZWAgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnkoZXhwcilcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzKVxuICAgKiAgICAgc2ltcGxpZnkoZXhwciwgcnVsZXMpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUsIG9wdGlvbnMpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBzY29wZSlcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHNjb3BlLCBvcHRpb25zKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzIgKiAxICogeCBeICgyIC0gMSknKSAgICAgIC8vIE5vZGUgXCIyICogeFwiXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5KCcyICogMyAqIHgnLCB7eDogNH0pICAgICAgICAvLyBOb2RlIFwiMjRcIlxuICAgKiAgICAgY29uc3QgZiA9IG1hdGgucGFyc2UoJzIgKiAxICogeCBeICgyIC0gMSknKVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeShmKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSBcIjIgKiB4XCJcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzAuNCAqIHgnLCB7fSwge2V4YWN0RnJhY3Rpb25zOiB0cnVlfSkgIC8vIE5vZGUgXCJ4ICogMiAvIDVcIlxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMC40ICogeCcsIHt9LCB7ZXhhY3RGcmFjdGlvbnM6IGZhbHNlfSkgLy8gTm9kZSBcIjAuNCAqIHhcIlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGRlcml2YXRpdmUsIHBhcnNlLCBldmFsdWF0ZSwgcmF0aW9uYWxpemVcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlIHwgc3RyaW5nfSBleHByXG4gICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgc2ltcGxpZmllZFxuICAgKiBAcGFyYW0ge0FycmF5PHtsOnN0cmluZywgcjogc3RyaW5nfSB8IHN0cmluZyB8IGZ1bmN0aW9uPn0gW3J1bGVzXVxuICAgKiAgICAgICAgICAgIE9wdGlvbmFsIGxpc3Qgd2l0aCBjdXN0b20gcnVsZXNcbiAgICogQHJldHVybiB7Tm9kZX0gUmV0dXJucyB0aGUgc2ltcGxpZmllZCBmb3JtIG9mIGBleHByYFxuICAgKi9cblxuXG4gIHZhciBzaW1wbGlmeSA9IHR5cGVkKCdzaW1wbGlmeScsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RPYmplY3QoZXhwciwgc2NvcGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShwYXJzZShleHByKSwgc2ltcGxpZnkucnVsZXMsIHNjb3BlLCBvcHRpb25zKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIEFycmF5JzogZnVuY3Rpb24gc3RyaW5nQXJyYXkoZXhwciwgcnVsZXMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShwYXJzZShleHByKSwgcnVsZXMsIHt9LCB7fSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBBcnJheSwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nQXJyYXlPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgQXJyYXksIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nQXJyYXlPYmplY3RPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdChleHByLCBzY29wZSkge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdE9iamVjdChleHByLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBOb2RlOiBmdW5jdGlvbiBOb2RlKGV4cHIpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBzaW1wbGlmeS5ydWxlcywge30sIHt9KTtcbiAgICB9LFxuICAgICdOb2RlLCBBcnJheSc6IGZ1bmN0aW9uIE5vZGVBcnJheShleHByLCBydWxlcykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIEFycmF5LCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlQXJyYXlPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkoZXhwciwgcnVsZXMsIHNjb3BlLCB7fSk7XG4gICAgfSxcbiAgICAnTm9kZSwgQXJyYXksIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZUFycmF5T2JqZWN0T2JqZWN0KGV4cHIsIHJ1bGVzLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcnVsZXMgPSBfYnVpbGRSdWxlcyhydWxlcyk7XG4gICAgICB2YXIgcmVzID0gcmVzb2x2ZShleHByLCBzY29wZSk7XG4gICAgICByZXMgPSByZW1vdmVQYXJlbnMocmVzKTtcbiAgICAgIHZhciB2aXNpdGVkID0ge307XG4gICAgICB2YXIgc3RyID0gcmVzLnRvU3RyaW5nKHtcbiAgICAgICAgcGFyZW50aGVzaXM6ICdhbGwnXG4gICAgICB9KTtcblxuICAgICAgd2hpbGUgKCF2aXNpdGVkW3N0cl0pIHtcbiAgICAgICAgdmlzaXRlZFtzdHJdID0gdHJ1ZTtcbiAgICAgICAgX2xhc3RzeW0gPSAwOyAvLyBjb3VudGVyIGZvciBwbGFjZWhvbGRlciBzeW1ib2xzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNbaV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcyA9IHJ1bGVzW2ldKHJlcywgb3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYXR0ZW4ocmVzKTtcbiAgICAgICAgICAgIHJlcyA9IGFwcGx5UnVsZShyZXMsIHJ1bGVzW2ldKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1bmZsYXR0ZW5sKHJlcyk7IC8vIHVzaW5nIGxlZnQtaGVhdnkgYmluYXJ5IHRyZWUgaGVyZSBzaW5jZSBjdXN0b20gcnVsZSBmdW5jdGlvbnMgbWF5IGV4cGVjdCBpdFxuICAgICAgICB9XG5cbiAgICAgICAgc3RyID0gcmVzLnRvU3RyaW5nKHtcbiAgICAgICAgICBwYXJlbnRoZXNpczogJ2FsbCdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgc2ltcGxpZnkuc2ltcGxpZnlDb3JlID0gc2ltcGxpZnlDb3JlO1xuICBzaW1wbGlmeS5yZXNvbHZlID0gcmVzb2x2ZTtcblxuICBmdW5jdGlvbiByZW1vdmVQYXJlbnMobm9kZSkge1xuICAgIHJldHVybiBub2RlLnRyYW5zZm9ybShmdW5jdGlvbiAobm9kZSwgcGF0aCwgcGFyZW50KSB7XG4gICAgICByZXR1cm4gKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkobm9kZSkgPyByZW1vdmVQYXJlbnMobm9kZS5jb250ZW50KSA6IG5vZGU7XG4gICAgfSk7XG4gIH0gLy8gQWxsIGNvbnN0YW50cyB0aGF0IGFyZSBhbGxvd2VkIGluIHJ1bGVzXG5cblxuICB2YXIgU1VQUE9SVEVEX0NPTlNUQU5UUyA9IHtcbiAgICBcInRydWVcIjogdHJ1ZSxcbiAgICBcImZhbHNlXCI6IHRydWUsXG4gICAgZTogdHJ1ZSxcbiAgICBpOiB0cnVlLFxuICAgIEluZmluaXR5OiB0cnVlLFxuICAgIExOMjogdHJ1ZSxcbiAgICBMTjEwOiB0cnVlLFxuICAgIExPRzJFOiB0cnVlLFxuICAgIExPRzEwRTogdHJ1ZSxcbiAgICBOYU46IHRydWUsXG4gICAgcGhpOiB0cnVlLFxuICAgIHBpOiB0cnVlLFxuICAgIFNRUlQxXzI6IHRydWUsXG4gICAgU1FSVDI6IHRydWUsXG4gICAgdGF1OiB0cnVlIC8vIG51bGw6IGZhbHNlLFxuICAgIC8vIHVuZGVmaW5lZDogZmFsc2UsXG4gICAgLy8gdmVyc2lvbjogZmFsc2UsXG5cbiAgfTsgLy8gQXJyYXkgb2Ygc3RyaW5ncywgdXNlZCB0byBidWlsZCB0aGUgcnVsZVNldC5cbiAgLy8gRWFjaCBsIChsZWZ0IHNpZGUpIGFuZCByIChyaWdodCBzaWRlKSBhcmUgcGFyc2VkIGJ5XG4gIC8vIHRoZSBleHByZXNzaW9uIHBhcnNlciBpbnRvIGEgbm9kZSB0cmVlLlxuICAvLyBMZWZ0IGhhbmQgc2lkZXMgYXJlIG1hdGNoZWQgdG8gc3VidHJlZXMgd2l0aGluIHRoZVxuICAvLyBleHByZXNzaW9uIHRvIGJlIHBhcnNlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgcmlnaHRcbiAgLy8gaGFuZCBzaWRlLlxuICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY29uc3RyYWludHMgb24gY29uc3RhbnRzIChlaXRoZXIgaW4gdGhlIGZvcm0gb2YgYSAnPScgZXhwcmVzc2lvbiBvciBhIGNhbGxiYWNrIFtjYWxsYmFjayBhbGxvd3MgdGhpbmdzIGxpa2UgY29tcGFyaW5nIHN5bWJvbHMgYWxwaGFiZXRpY2FsbHldKVxuICAvLyBUbyBldmFsdWF0ZSBsaHMgY29uc3RhbnRzIGZvciByaHMgY29uc3RhbnRzLCB1c2U6IHsgbDogJ2MxK2MyJywgcjogJ2MzJywgZXZhbHVhdGU6ICdjMyA9IGMxICsgYzInIH0uIE11bHRpcGxlIGFzc2lnbm1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgJzsnIGluIGJsb2NrIGZvcm1hdC5cbiAgLy8gSXQgaXMgcG9zc2libGUgdG8gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCB3aXRoIGNvbmZsaWN0aW5nIHJ1bGVzXG5cbiAgc2ltcGxpZnkucnVsZXMgPSBbc2ltcGxpZnlDb3JlLCAvLyB7IGw6ICduKzAnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduXjAnLCByOiAnMScgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICcwKm4nLCByOiAnMCcgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduL24nLCByOiAnMSd9LCAgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduXjEnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICcrbjEnLCByOiduMScgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduLS1uMScsIHI6J24rbjEnIH0sIC8vIHNpbXBsaWZ5Q29yZVxuICB7XG4gICAgbDogJ2xvZyhlKScsXG4gICAgcjogJzEnXG4gIH0sIC8vIHRlbXBvcmFyeSBydWxlc1xuICB7XG4gICAgbDogJ24tbjEnLFxuICAgIHI6ICduKy1uMSdcbiAgfSwgLy8gdGVtcG9yYXJpbHkgcmVwbGFjZSAnc3VidHJhY3QnIHNvIHdlIGNhbiBmdXJ0aGVyIGZsYXR0ZW4gdGhlICdhZGQnIG9wZXJhdG9yXG4gIHtcbiAgICBsOiAnLShjKnYpJyxcbiAgICByOiAnKC1jKSAqIHYnXG4gIH0sIC8vIG1ha2Ugbm9uLWNvbnN0YW50IHRlcm1zIHBvc2l0aXZlXG4gIHtcbiAgICBsOiAnLXYnLFxuICAgIHI6ICcoLTEpICogdidcbiAgfSwge1xuICAgIGw6ICduL24xXm4yJyxcbiAgICByOiAnbipuMV4tbjInXG4gIH0sIC8vIHRlbXBvcmFyaWx5IHJlcGxhY2UgJ2RpdmlkZScgc28gd2UgY2FuIGZ1cnRoZXIgZmxhdHRlbiB0aGUgJ211bHRpcGx5JyBvcGVyYXRvclxuICB7XG4gICAgbDogJ24vbjEnLFxuICAgIHI6ICduKm4xXi0xJ1xuICB9LCAvLyBleHBhbmQgbmVzdGVkIGV4cG9uZW50aWF0aW9uXG4gIHtcbiAgICBsOiAnKG4gXiBuMSkgXiBuMicsXG4gICAgcjogJ24gXiAobjEgKiBuMiknXG4gIH0sIC8vIGNvbGxlY3QgbGlrZSBmYWN0b3JzXG4gIHtcbiAgICBsOiAnbipuJyxcbiAgICByOiAnbl4yJ1xuICB9LCB7XG4gICAgbDogJ24gKiBuXm4xJyxcbiAgICByOiAnbl4objErMSknXG4gIH0sIHtcbiAgICBsOiAnbl5uMSAqIG5ebjInLFxuICAgIHI6ICduXihuMStuMiknXG4gIH0sIC8vIGNvbGxlY3QgbGlrZSB0ZXJtc1xuICB7XG4gICAgbDogJ24rbicsXG4gICAgcjogJzIqbidcbiAgfSwge1xuICAgIGw6ICduKy1uJyxcbiAgICByOiAnMCdcbiAgfSwge1xuICAgIGw6ICduMSpuMiArIG4yJyxcbiAgICByOiAnKG4xKzEpKm4yJ1xuICB9LCB7XG4gICAgbDogJ24xKm4zICsgbjIqbjMnLFxuICAgIHI6ICcobjErbjIpKm4zJ1xuICB9LCAvLyByZW1vdmUgcGFyZW50aGVzaXMgaW4gdGhlIGNhc2Ugb2YgbmVnYXRpbmcgYSBxdWFudGl0aXlcbiAge1xuICAgIGw6ICduMSArIC0xICogKG4yICsgbjMpJyxcbiAgICByOiAnbjEgKyAtMSAqIG4yICsgLTEgKiBuMydcbiAgfSwgc2ltcGxpZnlDb25zdGFudCwge1xuICAgIGw6ICcoLW4pKm4xJyxcbiAgICByOiAnLShuKm4xKSdcbiAgfSwgLy8gbWFrZSBmYWN0b3JzIHBvc2l0aXZlIChhbmQgdW5kbyAnbWFrZSBub24tY29uc3RhbnQgdGVybXMgcG9zaXRpdmUnKVxuICAvLyBvcmRlcmluZyBvZiBjb25zdGFudHNcbiAge1xuICAgIGw6ICdjK3YnLFxuICAgIHI6ICd2K2MnLFxuICAgIGNvbnRleHQ6IHtcbiAgICAgIGFkZDoge1xuICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBsOiAndipjJyxcbiAgICByOiAnYyp2JyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBtdWx0aXBseToge1xuICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH0sIC8vIHVuZG8gdGVtcG9yYXJ5IHJ1bGVzXG4gIC8vIHsgbDogJygtMSkgKiBuJywgcjogJy1uJyB9LCAvLyAjODExIGFkZGVkIHRlc3Qgd2hpY2ggcHJvdmVkIHRoaXMgaXMgcmVkdW5kYW50XG4gIHtcbiAgICBsOiAnbistbjEnLFxuICAgIHI6ICduLW4xJ1xuICB9LCAvLyB1bmRvIHJlcGxhY2UgJ3N1YnRyYWN0J1xuICB7XG4gICAgbDogJ24qKG4xXi0xKScsXG4gICAgcjogJ24vbjEnXG4gIH0sIC8vIHVuZG8gcmVwbGFjZSAnZGl2aWRlJ1xuICB7XG4gICAgbDogJ24qbjFeLW4yJyxcbiAgICByOiAnbi9uMV5uMidcbiAgfSwge1xuICAgIGw6ICduMV4tMScsXG4gICAgcjogJzEvbjEnXG4gIH0sIHtcbiAgICBsOiAnbioobjEvbjIpJyxcbiAgICByOiAnKG4qbjEpL24yJ1xuICB9LCAvLyAnKicgYmVmb3JlICcvJ1xuICB7XG4gICAgbDogJ24tKG4xK24yKScsXG4gICAgcjogJ24tbjEtbjInXG4gIH0sIC8vICctJyBiZWZvcmUgJysnXG4gIC8vIHsgbDogJyhuMS9uMikvbjMnLCByOiAnbjEvKG4yKm4zKScgfSxcbiAgLy8geyBsOiAnKG4qbjEpLyhuKm4yKScsIHI6ICduMS9uMicgfSxcbiAge1xuICAgIGw6ICcxKm4nLFxuICAgIHI6ICduJ1xuICB9LCAvLyB0aGlzIHBhdHRlcm4gY2FuIGJlIHByb2R1Y2VkIGJ5IHNpbXBsaWZ5Q29uc3RhbnRcbiAge1xuICAgIGw6ICduMS8objIvbjMpJyxcbiAgICByOiAnKG4xKm4zKS9uMidcbiAgfV07XG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgc3RyaW5nIGFycmF5IG9mIHJ1bGVzIGludG8gbm9kZXNcbiAgICpcbiAgICogRXhhbXBsZSBzeW50YXggZm9yIHJ1bGVzOlxuICAgKlxuICAgKiBQb3NpdGlvbiBjb25zdGFudHMgdG8gdGhlIGxlZnQgaW4gYSBwcm9kdWN0OlxuICAgKiB7IGw6ICduMSAqIGMxJywgcjogJ2MxICogbjEnIH1cbiAgICogbjEgaXMgYW55IE5vZGUsIGFuZCBjMSBpcyBhIENvbnN0YW50Tm9kZS5cbiAgICpcbiAgICogQXBwbHkgZGlmZmVyZW5jZSBvZiBzcXVhcmVzIGZvcm11bGE6XG4gICAqIHsgbDogJyhuMSAtIG4yKSAqIChuMSArIG4yKScsIHI6ICduMV4yIC0gbjJeMicgfVxuICAgKiBuMSwgbjIgbWVhbiBhbnkgTm9kZS5cbiAgICpcbiAgICogU2hvcnQgaGFuZCBub3RhdGlvbjpcbiAgICogJ24xICogYzEgLT4gYzEgKiBuMSdcbiAgICovXG5cbiAgZnVuY3Rpb24gX2J1aWxkUnVsZXMocnVsZXMpIHtcbiAgICAvLyBBcnJheSBvZiBydWxlcyB0byBiZSB1c2VkIHRvIHNpbXBsaWZ5IGV4cHJlc3Npb25zXG4gICAgdmFyIHJ1bGVTZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBydWxlID0gcnVsZXNbaV07XG4gICAgICB2YXIgbmV3UnVsZSA9IHZvaWQgMDtcblxuICAgICAgdmFyIHJ1bGVUeXBlID0gX3R5cGVvZihydWxlKTtcblxuICAgICAgc3dpdGNoIChydWxlVHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBsciA9IHJ1bGUuc3BsaXQoJy0+Jyk7XG5cbiAgICAgICAgICAgIGlmIChsci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgcnVsZSA9IHtcbiAgICAgICAgICAgICAgICBsOiBsclswXSxcbiAgICAgICAgICAgICAgICByOiBsclsxXVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgU3ludGF4RXJyb3IoJ0NvdWxkIG5vdCBwYXJzZSBydWxlOiAnICsgcnVsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIG5ld1J1bGUgPSB7XG4gICAgICAgICAgICBsOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5sKSksXG4gICAgICAgICAgICByOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5yKSlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJ1bGUuY29udGV4dCkge1xuICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHJ1bGUuY29udGV4dDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocnVsZS5ldmFsdWF0ZSkge1xuICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHBhcnNlKHJ1bGUuZXZhbHVhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc0Fzc29jaWF0aXZlKG5ld1J1bGUubCkpIHtcbiAgICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obmV3UnVsZS5sKTtcblxuICAgICAgICAgICAgdmFyIGV4cGFuZHN5bSA9IF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpO1xuXG4gICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkID0ge307XG4gICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkLmwgPSBtYWtlTm9kZShbbmV3UnVsZS5sLmNsb25lKCksIGV4cGFuZHN5bV0pOyAvLyBQdXNoIHRoZSBleHBhbmRzeW0gaW50byB0aGUgZGVlcGVzdCBwb3NzaWJsZSBicmFuY2guXG4gICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIG1hdGNoIHRoZSBuZXdSdWxlIGFnYWluc3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSBnZXRTcGxpdHMoKSBsYXRlciBvbi5cblxuICAgICAgICAgICAgZmxhdHRlbihuZXdSdWxlLmV4cGFuZGVkLmwpO1xuICAgICAgICAgICAgdW5mbGF0dGVucihuZXdSdWxlLmV4cGFuZGVkLmwpO1xuICAgICAgICAgICAgbmV3UnVsZS5leHBhbmRlZC5yID0gbWFrZU5vZGUoW25ld1J1bGUuciwgZXhwYW5kc3ltXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIG5ld1J1bGUgPSBydWxlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHJ1bGU6ICcgKyBydWxlVHlwZSk7XG4gICAgICB9IC8vIGNvbnNvbGUubG9nKCdBZGRpbmcgcnVsZTogJyArIHJ1bGVzW2ldKVxuICAgICAgLy8gY29uc29sZS5sb2cobmV3UnVsZSlcblxuXG4gICAgICBydWxlU2V0LnB1c2gobmV3UnVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVTZXQ7XG4gIH1cblxuICB2YXIgX2xhc3RzeW0gPSAwO1xuXG4gIGZ1bmN0aW9uIF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbE5vZGUoJ19wJyArIF9sYXN0c3ltKyspO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2ltcGxmaWVkIGZvcm0gb2Ygbm9kZSwgb3IgdGhlIG9yaWdpbmFsIG5vZGUgaWYgbm8gc2ltcGxpZmljYXRpb24gd2FzIHBvc3NpYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBub2RlXG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IFRoZSBzaW1wbGlmaWVkIGZvcm0gb2YgYGV4cHJgLCBvciB0aGUgb3JpZ2luYWwgbm9kZSBpZiBubyBzaW1wbGlmaWNhdGlvbiB3YXMgcG9zc2libGUuXG4gICAqL1xuXG5cbiAgdmFyIGFwcGx5UnVsZSA9IHR5cGVkKCdhcHBseVJ1bGUnLCB7XG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3Qobm9kZSwgcnVsZSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ0VudGVyaW5nIGFwcGx5UnVsZSgnICsgbm9kZS50b1N0cmluZygpICsgJyknKVxuICAgICAgLy8gRG8gbm90IGNsb25lIG5vZGUgdW5sZXNzIHdlIGZpbmQgYSBtYXRjaFxuICAgICAgdmFyIHJlcyA9IG5vZGU7IC8vIEZpcnN0IHJlcGxhY2Ugb3VyIGNoaWxkIG5vZGVzIHdpdGggdGhlaXIgc2ltcGxpZmllZCB2ZXJzaW9uc1xuICAgICAgLy8gSWYgYSBjaGlsZCBjb3VsZCBub3QgYmUgc2ltcGxpZmllZCwgdGhlIGFzc2lnbm1lbnRzIHdpbGwgaGF2ZVxuICAgICAgLy8gbm8gZWZmZWN0IHNpbmNlIHRoZSBub2RlIGlzIHJldHVybmVkIHVuY2hhbmdlZFxuXG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlIHx8IHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgICBpZiAocmVzLmFyZ3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXMuYXJnc1tpXSA9IGFwcGx5UnVsZShyZXMuYXJnc1tpXSwgcnVsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlcyBpbnN0YW5jZW9mIFBhcmVudGhlc2lzTm9kZSkge1xuICAgICAgICBpZiAocmVzLmNvbnRlbnQpIHtcbiAgICAgICAgICByZXMuY29udGVudCA9IGFwcGx5UnVsZShyZXMuY29udGVudCwgcnVsZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVHJ5IHRvIG1hdGNoIGEgcnVsZSBhZ2FpbnN0IHRoaXMgbm9kZVxuXG5cbiAgICAgIHZhciByZXBsID0gcnVsZS5yO1xuXG4gICAgICB2YXIgbWF0Y2hlcyA9IF9ydWxlTWF0Y2gocnVsZS5sLCByZXMpWzBdOyAvLyBJZiB0aGUgcnVsZSBpcyBhc3NvY2lhdGl2ZSBvcGVyYXRvciwgd2UgY2FuIHRyeSBtYXRjaGluZyBpdCB3aGlsZSBhbGxvd2luZyBhZGRpdGlvbmFsIHRlcm1zLlxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbWF0Y2ggcnVsZXMgbGlrZSAnbituJyB0byB0aGUgZXhwcmVzc2lvbiAnKDEreCkreCcgb3IgZXZlbiAneCsxK3gnIGlmIHRoZSBvcGVyYXRvciBpcyBjb21tdXRhdGl2ZS5cblxuXG4gICAgICBpZiAoIW1hdGNoZXMgJiYgcnVsZS5leHBhbmRlZCkge1xuICAgICAgICByZXBsID0gcnVsZS5leHBhbmRlZC5yO1xuICAgICAgICBtYXRjaGVzID0gX3J1bGVNYXRjaChydWxlLmV4cGFuZGVkLmwsIHJlcylbMF07XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIC8vIGNvbnN0IGJlZm9yZSA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSlcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG5vZGUgYnkgY2xvbmluZyB0aGUgcmhzIG9mIHRoZSBtYXRjaGVkIHJ1bGVcbiAgICAgICAgLy8gd2Uga2VlcCBhbnkgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gc3RhdGUgaWYgcmVsZXZhbnRcbiAgICAgICAgdmFyIGltcGxpY2l0ID0gcmVzLmltcGxpY2l0O1xuICAgICAgICByZXMgPSByZXBsLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKGltcGxpY2l0ICYmICdpbXBsaWNpdCcgaW4gcmVwbCkge1xuICAgICAgICAgIHJlcy5pbXBsaWNpdCA9IHRydWU7XG4gICAgICAgIH0gLy8gUmVwbGFjZSBwbGFjZWhvbGRlcnMgd2l0aCB0aGVpciByZXNwZWN0aXZlIG5vZGVzIHdpdGhvdXQgdHJhdmVyc2luZyBkZWVwZXIgaW50byB0aGUgcmVwbGFjZWQgbm9kZXNcblxuXG4gICAgICAgIHJlcyA9IHJlcy50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBpZiAobm9kZS5pc1N5bWJvbE5vZGUgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG1hdGNoZXMucGxhY2Vob2xkZXJzLCBub2RlLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5wbGFjZWhvbGRlcnNbbm9kZS5uYW1lXS5jbG9uZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyAvLyBjb25zdCBhZnRlciA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSlcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1NpbXBsaWZpZWQgJyArIGJlZm9yZSArICcgdG8gJyArIGFmdGVyKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBHZXQgKGJpbmFyeSkgY29tYmluYXRpb25zIG9mIGEgZmxhdHRlbmVkIGJpbmFyeSBub2RlXG4gICAqIGUuZy4gKyhub2RlMSwgbm9kZTIsIG5vZGUzKSAtPiBbXG4gICAqICAgICAgICArKG5vZGUxLCAgKyhub2RlMiwgbm9kZTMpKSxcbiAgICogICAgICAgICsobm9kZTIsICArKG5vZGUxLCBub2RlMykpLFxuICAgKiAgICAgICAgKyhub2RlMywgICsobm9kZTEsIG5vZGUyKSldXG4gICAqXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGdldFNwbGl0cyhub2RlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciByaWdodCwgcmlnaHRBcmdzO1xuICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG5cbiAgICBpZiAoaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDApO1xuICAgICAgICByaWdodEFyZ3Muc3BsaWNlKGksIDEpO1xuICAgICAgICByaWdodCA9IHJpZ2h0QXJncy5sZW5ndGggPT09IDEgPyByaWdodEFyZ3NbMF0gOiBtYWtlTm9kZShyaWdodEFyZ3MpO1xuICAgICAgICByZXMucHVzaChtYWtlTm9kZShbbm9kZS5hcmdzW2ldLCByaWdodF0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDEpO1xuICAgICAgcmlnaHQgPSByaWdodEFyZ3MubGVuZ3RoID09PSAxID8gcmlnaHRBcmdzWzBdIDogbWFrZU5vZGUocmlnaHRBcmdzKTtcbiAgICAgIHJlcy5wdXNoKG1ha2VOb2RlKFtub2RlLmFyZ3NbMF0sIHJpZ2h0XSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNldCB1bmlvbiBvZiB0d28gbWF0Y2gtcGxhY2Vob2xkZXJzIG9yIG51bGwgaWYgdGhlcmUgaXMgYSBjb25mbGljdC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBtZXJnZU1hdGNoKG1hdGNoMSwgbWF0Y2gyKSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyczoge31cbiAgICB9OyAvLyBTb21lIG1hdGNoZXMgbWF5IG5vdCBoYXZlIHBsYWNlaG9sZGVyczsgdGhpcyBpcyBPS1xuXG4gICAgaWYgKCFtYXRjaDEucGxhY2Vob2xkZXJzICYmICFtYXRjaDIucGxhY2Vob2xkZXJzKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSBpZiAoIW1hdGNoMS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJldHVybiBtYXRjaDI7XG4gICAgfSBlbHNlIGlmICghbWF0Y2gyLnBsYWNlaG9sZGVycykge1xuICAgICAgcmV0dXJuIG1hdGNoMTtcbiAgICB9IC8vIFBsYWNlaG9sZGVycyB3aXRoIHRoZSBzYW1lIGtleSBtdXN0IG1hdGNoIGV4YWN0bHlcblxuXG4gICAgZm9yICh2YXIga2V5IGluIG1hdGNoMS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJlcy5wbGFjZWhvbGRlcnNba2V5XSA9IG1hdGNoMS5wbGFjZWhvbGRlcnNba2V5XTtcblxuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShtYXRjaDIucGxhY2Vob2xkZXJzLCBrZXkpKSB7XG4gICAgICAgIGlmICghX2V4YWN0TWF0Y2gobWF0Y2gxLnBsYWNlaG9sZGVyc1trZXldLCBtYXRjaDIucGxhY2Vob2xkZXJzW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfa2V5IGluIG1hdGNoMi5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJlcy5wbGFjZWhvbGRlcnNbX2tleV0gPSBtYXRjaDIucGxhY2Vob2xkZXJzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIENvbWJpbmUgdHdvIGxpc3RzIG9mIG1hdGNoZXMgYnkgYXBwbHlpbmcgbWVyZ2VNYXRjaCB0byB0aGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIGxpc3RzIG9mIG1hdGNoZXMuXG4gICAqIEVhY2ggbGlzdCByZXByZXNlbnRzIG1hdGNoZXMgZm91bmQgaW4gb25lIGNoaWxkIG9mIGEgbm9kZS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBjb21iaW5lQ2hpbGRNYXRjaGVzKGxpc3QxLCBsaXN0Mikge1xuICAgIHZhciByZXMgPSBbXTtcblxuICAgIGlmIChsaXN0MS5sZW5ndGggPT09IDAgfHwgbGlzdDIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHZhciBtZXJnZWQ7XG5cbiAgICBmb3IgKHZhciBpMSA9IDA7IGkxIDwgbGlzdDEubGVuZ3RoOyBpMSsrKSB7XG4gICAgICBmb3IgKHZhciBpMiA9IDA7IGkyIDwgbGlzdDIubGVuZ3RoOyBpMisrKSB7XG4gICAgICAgIG1lcmdlZCA9IG1lcmdlTWF0Y2gobGlzdDFbaTFdLCBsaXN0MltpMl0pO1xuXG4gICAgICAgIGlmIChtZXJnZWQpIHtcbiAgICAgICAgICByZXMucHVzaChtZXJnZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogQ29tYmluZSBtdWx0aXBsZSBsaXN0cyBvZiBtYXRjaGVzIGJ5IGFwcGx5aW5nIG1lcmdlTWF0Y2ggdG8gdGhlIGNhcnRlc2lhbiBwcm9kdWN0IG9mIHR3byBsaXN0cyBvZiBtYXRjaGVzLlxuICAgKiBFYWNoIGxpc3QgcmVwcmVzZW50cyBtYXRjaGVzIGZvdW5kIGluIG9uZSBjaGlsZCBvZiBhIG5vZGUuXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHVuaXF1ZSBtYXRjaGVzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXRjaGVzKGNoaWxkTWF0Y2hlcykge1xuICAgIGlmIChjaGlsZE1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY2hpbGRNYXRjaGVzO1xuICAgIH1cblxuICAgIHZhciBzZXRzID0gY2hpbGRNYXRjaGVzLnJlZHVjZShjb21iaW5lQ2hpbGRNYXRjaGVzKTtcbiAgICB2YXIgdW5pcXVlU2V0cyA9IFtdO1xuICAgIHZhciB1bmlxdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHMgPSBKU09OLnN0cmluZ2lmeShzZXRzW2ldKTtcblxuICAgICAgaWYgKCF1bmlxdWVbc10pIHtcbiAgICAgICAgdW5pcXVlW3NdID0gdHJ1ZTtcbiAgICAgICAgdW5pcXVlU2V0cy5wdXNoKHNldHNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWVTZXRzO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgbm9kZSBtYXRjaGVzIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcnVsZVxuICAgKiBAcGFyYW0ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHJldHVybiB7T2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF0Y2gsIGlmIGl0IGV4aXN0cy5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfcnVsZU1hdGNoKHJ1bGUsIG5vZGUsIGlzU3BsaXQpIHtcbiAgICAvLyAgICBjb25zb2xlLmxvZygnRW50ZXJpbmcgX3J1bGVNYXRjaCgnICsgSlNPTi5zdHJpbmdpZnkocnVsZSkgKyAnLCAnICsgSlNPTi5zdHJpbmdpZnkobm9kZSkgKyAnKScpXG4gICAgLy8gICAgY29uc29sZS5sb2coJ3J1bGUgPSAnICsgcnVsZSlcbiAgICAvLyAgICBjb25zb2xlLmxvZygnbm9kZSA9ICcgKyBub2RlKVxuICAgIC8vICAgIGNvbnNvbGUubG9nKCdFbnRlcmluZyBfcnVsZU1hdGNoKCcgKyBydWxlLnRvU3RyaW5nKCkgKyAnLCAnICsgbm9kZS50b1N0cmluZygpICsgJyknKVxuICAgIHZhciByZXMgPSBbe1xuICAgICAgcGxhY2Vob2xkZXJzOiB7fVxuICAgIH1dO1xuXG4gICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUgJiYgbm9kZSBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSB8fCBydWxlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlICYmIG5vZGUgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUpIHtcbiAgICAgIC8vIElmIHRoZSBydWxlIGlzIGFuIE9wZXJhdG9yTm9kZSBvciBhIEZ1bmN0aW9uTm9kZSwgdGhlbiBub2RlIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHtcbiAgICAgICAgaWYgKHJ1bGUub3AgIT09IG5vZGUub3AgfHwgcnVsZS5mbiAhPT0gbm9kZS5mbikge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBydWxlIGFuZCBub2RlIG1hdGNoLiBTZWFyY2ggdGhlIGNoaWxkcmVuIG9mIHJ1bGUgYW5kIG5vZGUuXG5cblxuICAgICAgaWYgKG5vZGUuYXJncy5sZW5ndGggPT09IDEgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMSB8fCAhaXNBc3NvY2lhdGl2ZShub2RlKSB8fCBpc1NwbGl0KSB7XG4gICAgICAgIC8vIEV4cGVjdCBub24tYXNzb2NpYXRpdmUgb3BlcmF0b3JzIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgdmFyIGNoaWxkTWF0Y2hlcyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNoaWxkTWF0Y2ggPSBfcnVsZU1hdGNoKHJ1bGUuYXJnc1tpXSwgbm9kZS5hcmdzW2ldKTtcblxuICAgICAgICAgIGlmIChjaGlsZE1hdGNoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2hpbGQgZGlkIG5vdCBtYXRjaCwgc28gc3RvcCBzZWFyY2hpbmcgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9IC8vIFRoZSBjaGlsZCBtYXRjaGVkLCBzbyBhZGQgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gdGhlIGNoaWxkIHRvIG91ciByZXN1bHRcblxuXG4gICAgICAgICAgY2hpbGRNYXRjaGVzLnB1c2goY2hpbGRNYXRjaCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXMgPSBtZXJnZUNoaWxkTWF0Y2hlcyhjaGlsZE1hdGNoZXMpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID49IDIgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBub2RlIGlzIGZsYXR0ZW5lZCwgcnVsZSBpcyBub3RcbiAgICAgICAgLy8gQXNzb2NpYXRpdmUgb3BlcmF0b3JzL2Z1bmN0aW9ucyBjYW4gYmUgc3BsaXQgaW4gZGlmZmVyZW50IHdheXMgc28gd2UgY2hlY2sgaWYgdGhlIHJ1bGUgbWF0Y2hlcyBlYWNoXG4gICAgICAgIC8vIHRoZW0gYW5kIHJldHVybiB0aGVpciB1bmlvbi5cbiAgICAgICAgdmFyIHNwbGl0cyA9IGdldFNwbGl0cyhub2RlLCBydWxlLmNvbnRleHQpO1xuICAgICAgICB2YXIgc3BsaXRNYXRjaGVzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHNwbGl0cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICB2YXIgbWF0Y2hTZXQgPSBfcnVsZU1hdGNoKHJ1bGUsIHNwbGl0c1tfaV0sIHRydWUpOyAvLyByZWN1cnNpbmcgYXQgdGhlIHNhbWUgdHJlZSBkZXB0aCBoZXJlXG5cblxuICAgICAgICAgIHNwbGl0TWF0Y2hlcyA9IHNwbGl0TWF0Y2hlcy5jb25jYXQobWF0Y2hTZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNwbGl0TWF0Y2hlcztcbiAgICAgIH0gZWxzZSBpZiAocnVsZS5hcmdzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1VuZXhwZWN0ZWQgbm9uLWJpbmFyeSBhc3NvY2lhdGl2ZSBmdW5jdGlvbjogJyArIHJ1bGUudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBydWxlIGFuZCBub2RlLCBzbyBubyBtYXRjaFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgLy8gSWYgdGhlIHJ1bGUgaXMgYSBTeW1ib2xOb2RlLCB0aGVuIGl0IGNhcnJpZXMgYSBzcGVjaWFsIG1lYW5pbmdcbiAgICAgIC8vIGFjY29yZGluZyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzeW1ib2wgbm9kZSBuYW1lLlxuICAgICAgLy8gYy4qIG1hdGNoZXMgYSBDb25zdGFudE5vZGVcbiAgICAgIC8vIG4uKiBtYXRjaGVzIGFueSBub2RlXG4gICAgICBpZiAocnVsZS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bWJvbCBpbiBydWxlIGhhcyAwIGxlbmd0aC4uLiE/Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTVVBQT1JURURfQ09OU1RBTlRTW3J1bGUubmFtZV0pIHtcbiAgICAgICAgLy8gYnVpbHQtaW4gY29uc3RhbnQgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlLm5hbWVbMF0gPT09ICduJyB8fCBydWxlLm5hbWUuc3Vic3RyaW5nKDAsIDIpID09PSAnX3AnKSB7XG4gICAgICAgIC8vIHJ1bGUgbWF0Y2hlcyBfYW55dGhpbmdfLCBzbyBhc3NpZ24gdGhpcyBub2RlIHRvIHRoZSBydWxlLm5hbWUgcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gQXNzaWduIG5vZGUgdG8gdGhlIHJ1bGUubmFtZSBwbGFjZWhvbGRlci5cbiAgICAgICAgLy8gT3VyIHBhcmVudCB3aWxsIGNoZWNrIGZvciBtYXRjaGVzIGFtb25nIHBsYWNlaG9sZGVycy5cbiAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTtcbiAgICAgIH0gZWxzZSBpZiAocnVsZS5uYW1lWzBdID09PSAndicpIHtcbiAgICAgICAgLy8gcnVsZSBtYXRjaGVzIGFueSB2YXJpYWJsZSB0aGluZyAobm90IGEgQ29uc3RhbnROb2RlKVxuICAgICAgICBpZiAoISgwLCBfaXMuaXNDb25zdGFudE5vZGUpKG5vZGUpKSB7XG4gICAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNaXMtbWF0Y2g6IHJ1bGUgd2FzIGV4cGVjdGluZyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIENvbnN0YW50Tm9kZVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlLm5hbWVbMF0gPT09ICdjJykge1xuICAgICAgICAvLyBydWxlIG1hdGNoZXMgYW55IENvbnN0YW50Tm9kZVxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkge1xuICAgICAgICAgIHJlc1swXS5wbGFjZWhvbGRlcnNbcnVsZS5uYW1lXSA9IG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTWlzLW1hdGNoOiBydWxlIHdhcyBleHBlY3RpbmcgYSBDb25zdGFudE5vZGVcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzeW1ib2wgaW4gcnVsZTogJyArIHJ1bGUubmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7XG4gICAgICAvLyBMaXRlcmFsIGNvbnN0YW50IG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgaWYgKCFlcXVhbChydWxlLnZhbHVlLCBub2RlLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNvbWUgb3RoZXIgbm9kZSB3YXMgZW5jb3VudGVyZWQgd2hpY2ggd2UgYXJlbid0IHByZXBhcmVkIGZvciwgc28gbm8gbWF0Y2hcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IC8vIEl0J3MgYSBtYXRjaCFcbiAgICAvLyBjb25zb2xlLmxvZygnX3J1bGVNYXRjaCgnICsgcnVsZS50b1N0cmluZygpICsgJywgJyArIG5vZGUudG9TdHJpbmcoKSArICcpIGZvdW5kIGEgbWF0Y2gnKVxuXG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcCBhbmQgcSAoYW5kIGFsbCB0aGVpciBjaGlsZHJlbiBub2RlcykgYXJlIGlkZW50aWNhbC5cbiAgICpcbiAgICogQHBhcmFtIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBwXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXRjaCwgaWYgaXQgZXhpc3RzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9leGFjdE1hdGNoKHAsIHEpIHtcbiAgICBpZiAocCBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSAmJiBxIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7XG4gICAgICBpZiAoIWVxdWFsKHAudmFsdWUsIHEudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBTeW1ib2xOb2RlICYmIHEgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSB7XG4gICAgICBpZiAocC5uYW1lICE9PSBxLm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocCBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSAmJiBxIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlIHx8IHAgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUgJiYgcSBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgaWYgKHAgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHtcbiAgICAgICAgaWYgKHAub3AgIT09IHEub3AgfHwgcC5mbiAhPT0gcS5mbikge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAgIGlmIChwLm5hbWUgIT09IHEubmFtZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocC5hcmdzLmxlbmd0aCAhPT0gcS5hcmdzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghX2V4YWN0TWF0Y2gocC5hcmdzW2ldLCBxLmFyZ3NbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzaW1wbGlmeTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeSA9IGNyZWF0ZVNpbXBsaWZ5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAncmVzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZScsICdGdW5jdGlvbk5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ1BhcmVudGhlc2lzTm9kZSddO1xudmFyIGNyZWF0ZVJlc29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlO1xuXG4gIC8qKlxuICAgKiByZXNvbHZlKGV4cHIsIHNjb3BlKSByZXBsYWNlcyB2YXJpYWJsZSBub2RlcyB3aXRoIHRoZWlyIHNjb3BlZCB2YWx1ZXNcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnkucmVzb2x2ZShleHByLCBzY29wZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5LnJlc29sdmUoJ3ggKyB5Jywge3g6MSwgeToyfSkgICAgICAgICAgIC8vIE5vZGUgezEgKyAyfVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeS5yZXNvbHZlKG1hdGgucGFyc2UoJ3greScpLCB7eDoxLCB5OjJ9KSAvLyBOb2RlIHsxICsgMn1cbiAgICogICAgIG1hdGguc2ltcGxpZnkoJ3greScsIHt4OjIsIHk6J3greCd9KS50b1N0cmluZygpICAgICAgLy8gXCI2XCJcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqICAgICBUaGUgZXhwcmVzc2lvbiB0cmVlIHRvIGJlIHNpbXBsaWZpZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIHdpdGggdmFyaWFibGVzIHRvIGJlIHJlc29sdmVkXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlKG5vZGUsIHNjb3BlKSB7XG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSkge1xuICAgICAgdmFyIHZhbHVlID0gc2NvcGVbbm9kZS5uYW1lXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUsIHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gcGFyc2UoU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoYXJnLCBzY29wZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGFyZ3MsIG5vZGUuaW1wbGljaXQpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkobm9kZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHJlc29sdmUobm9kZS5jb250ZW50LCBzY29wZSkpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0Z1bmN0aW9uTm9kZSkobm9kZSkpIHtcbiAgICAgIHZhciBfYXJncyA9IG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShhcmcsIHNjb3BlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShub2RlLm5hbWUsIF9hcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlc29sdmUgPSBjcmVhdGVSZXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF91dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxudmFyIF9ub29wID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL25vb3BcIik7XG5cbi8vIFRPRE8gdGhpcyBjb3VsZCBiZSBpbXByb3ZlZCBieSBzaW1wbGlmeWluZyBzZXBlcmF0ZWQgY29uc3RhbnRzIHVuZGVyIGFzc29jaWF0aXZlIGFuZCBjb21tdXRhdGl2ZSBvcGVyYXRvcnNcbnZhciBuYW1lID0gJ3NpbXBsaWZ5Q29uc3RhbnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdGhXaXRoVHJhbnNmb3JtJywgJz9mcmFjdGlvbicsICc/YmlnbnVtYmVyJywgJ0NvbnN0YW50Tm9kZScsICdPcGVyYXRvck5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuXG4gIHZhciBfY3JlYXRlVXRpbCA9ICgwLCBfdXRpbC5jcmVhdGVVdGlsKSh7XG4gICAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gICAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZVxuICB9KSxcbiAgICAgIGlzQ29tbXV0YXRpdmUgPSBfY3JlYXRlVXRpbC5pc0NvbW11dGF0aXZlLFxuICAgICAgaXNBc3NvY2lhdGl2ZSA9IF9jcmVhdGVVdGlsLmlzQXNzb2NpYXRpdmUsXG4gICAgICBhbGxDaGlsZHJlbiA9IF9jcmVhdGVVdGlsLmFsbENoaWxkcmVuLFxuICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247XG5cbiAgZnVuY3Rpb24gc2ltcGxpZnlDb25zdGFudChleHByLCBvcHRpb25zKSB7XG4gICAgdmFyIHJlcyA9IGZvbGRGcmFjdGlvbihleHByLCBvcHRpb25zKTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKHJlcykgPyByZXMgOiBfdG9Ob2RlKHJlcyk7XG4gIH1cblxuICBmdW5jdGlvbiBfZXZhbChmbm5hbWUsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF90b051bWJlcihtYXRoV2l0aFRyYW5zZm9ybVtmbm5hbWVdLmFwcGx5KG51bGwsIGFyZ3MpLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChpZ25vcmUpIHtcbiAgICAgIC8vIHNvbWV0aW1lcyB0aGUgaW1wbGljaXQgdHlwZSBjb252ZXJzaW9uIGNhdXNlcyB0aGUgZXZhbHVhdGlvbiB0byBmYWlsLCBzbyB3ZSdsbCB0cnkgYWdhaW4gYWZ0ZXIgcmVtb3ZpbmcgRnJhY3Rpb25zXG4gICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNGcmFjdGlvbikoeCkpIHtcbiAgICAgICAgICByZXR1cm4geC52YWx1ZU9mKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF90b051bWJlcihtYXRoV2l0aFRyYW5zZm9ybVtmbm5hbWVdLmFwcGx5KG51bGwsIGFyZ3MpLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICB2YXIgX3RvTm9kZSA9IHR5cGVkKHtcbiAgICBGcmFjdGlvbjogX2ZyYWN0aW9uVG9Ob2RlLFxuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gdW5hcnlNaW51c05vZGUobmV3IENvbnN0YW50Tm9kZSgtbikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShuKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gdW5hcnlNaW51c05vZGUobmV3IENvbnN0YW50Tm9kZSgtbikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShuKTsgLy8gb2xkIHBhcmFtZXRlcnM6IChuLnRvU3RyaW5nKCksICdudW1iZXInKVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleChzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IENvbXBsZXggbnVtYmVyIHRvIE5vZGUnKTtcbiAgICB9XG4gIH0pOyAvLyBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgZnJhY3Rpb24gb25seSBpZiBpdCBjYW4gYmUgZXhwcmVzc2VkIGV4YWN0bHlcblxuXG4gIGZ1bmN0aW9uIF9leGFjdEZyYWN0aW9uKG4sIG9wdGlvbnMpIHtcbiAgICB2YXIgZXhhY3RGcmFjdGlvbnMgPSBvcHRpb25zICYmIG9wdGlvbnMuZXhhY3RGcmFjdGlvbnMgIT09IGZhbHNlO1xuXG4gICAgaWYgKGV4YWN0RnJhY3Rpb25zICYmIGlzRmluaXRlKG4pICYmIGZyYWN0aW9uKSB7XG4gICAgICB2YXIgZiA9IGZyYWN0aW9uKG4pO1xuXG4gICAgICBpZiAoZi52YWx1ZU9mKCkgPT09IG4pIHtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG47XG4gIH0gLy8gQ29udmVydCBudW1iZXJzIHRvIGEgcHJlZmVycmVkIG51bWJlciB0eXBlIGluIHByZWZlcmVuY2Ugb3JkZXI6IEZyYWN0aW9uLCBudW1iZXIsIENvbXBsZXhcbiAgLy8gQmlnTnVtYmVycyBhcmUgbGVmdCBhbG9uZVxuXG5cbiAgdmFyIF90b051bWJlciA9IHR5cGVkKHtcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICAgIGlmIChiaWdudW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICgwLCBfbm9vcC5ub0JpZ251bWJlcikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiaWdudW1iZXIocyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdGcmFjdGlvbicpIHtcbiAgICAgICAgaWYgKGZyYWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoMCwgX25vb3Aubm9GcmFjdGlvbikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcmFjdGlvbihzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuID0gcGFyc2VGbG9hdChzKTtcbiAgICAgICAgcmV0dXJuIF9leGFjdEZyYWN0aW9uKG4sIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBPYmplY3QnOiBmdW5jdGlvbiBGcmFjdGlvbk9iamVjdChzLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9LFxuICAgIC8vIHdlIGRvbid0IG5lZWQgb3B0aW9ucyBoZXJlXG4gICAgJ0JpZ051bWJlciwgT2JqZWN0JzogZnVuY3Rpb24gQmlnTnVtYmVyT2JqZWN0KHMsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH0sXG4gICAgLy8gd2UgZG9uJ3QgbmVlZCBvcHRpb25zIGhlcmVcbiAgICAnbnVtYmVyLCBPYmplY3QnOiBmdW5jdGlvbiBudW1iZXJPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIF9leGFjdEZyYWN0aW9uKHMsIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIE9iamVjdCc6IGZ1bmN0aW9uIENvbXBsZXhPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgaWYgKHMuaW0gIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZXhhY3RGcmFjdGlvbihzLnJlLCBvcHRpb25zKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHVuYXJ5TWludXNOb2RlKG4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25dKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9mcmFjdGlvblRvTm9kZShmKSB7XG4gICAgdmFyIG47XG4gICAgdmFyIHZuID0gZi5zICogZi5uO1xuXG4gICAgaWYgKHZuIDwgMCkge1xuICAgICAgbiA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFtuZXcgQ29uc3RhbnROb2RlKC12bildKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IG5ldyBDb25zdGFudE5vZGUodm4pO1xuICAgIH1cblxuICAgIGlmIChmLmQgPT09IDEpIHtcbiAgICAgIHJldHVybiBuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuLCBuZXcgQ29uc3RhbnROb2RlKGYuZCldKTtcbiAgfVxuICAvKlxuICAgKiBDcmVhdGUgYSBiaW5hcnkgdHJlZSBmcm9tIGEgbGlzdCBvZiBGcmFjdGlvbnMgYW5kIE5vZGVzLlxuICAgKiBUcmllcyB0byBmb2xkIEZyYWN0aW9ucyBieSBldmFsdWF0aW5nIHRoZW0gdW50aWwgdGhlIGZpcnN0IE5vZGUgaW4gdGhlIGxpc3QgaXMgaGl0LCBzb1xuICAgKiBgYXJnc2Agc2hvdWxkIGJlIHNvcnRlZCB0byBoYXZlIHRoZSBGcmFjdGlvbnMgYXQgdGhlIHN0YXJ0IChpZiB0aGUgb3BlcmF0b3IgaXMgY29tbXV0YXRpdmUpLlxuICAgKiBAcGFyYW0gYXJncyAtIGxpc3Qgb2YgRnJhY3Rpb25zIGFuZCBOb2Rlc1xuICAgKiBAcGFyYW0gZm4gLSBldmFsdWF0b3IgZm9yIHRoZSBiaW5hcnkgb3BlcmF0aW9uIGV2YWx1YXRvciB0aGF0IGFjY2VwdHMgdHdvIEZyYWN0aW9uc1xuICAgKiBAcGFyYW0gbWFrZU5vZGUgLSBjcmVhdGVzIGEgYmluYXJ5IE9wZXJhdG9yTm9kZS9GdW5jdGlvbk5vZGUgZnJvbSBhIGxpc3Qgb2YgY2hpbGQgTm9kZXNcbiAgICogaWYgYXJncy5sZW5ndGggaXMgMSwgcmV0dXJucyBhcmdzWzBdXG4gICAqIEByZXR1cm4gLSBFaXRoZXIgYSBOb2RlIHJlcHJlc2VudGluZyBhIGJpbmFyeSBleHByZXNzaW9uIG9yIEZyYWN0aW9uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZm9sZE9wKGZuLCBhcmdzLCBtYWtlTm9kZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoYSkgJiYgISgwLCBfaXMuaXNOb2RlKShiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBfZXZhbChmbiwgW2EsIGJdLCBvcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoaWdub3JlYW5kY29udGludWUpIHt9XG5cbiAgICAgICAgYSA9IF90b05vZGUoYSk7XG4gICAgICAgIGIgPSBfdG9Ob2RlKGIpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF9pcy5pc05vZGUpKGEpKSB7XG4gICAgICAgIGEgPSBfdG9Ob2RlKGEpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF9pcy5pc05vZGUpKGIpKSB7XG4gICAgICAgIGIgPSBfdG9Ob2RlKGIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFrZU5vZGUoW2EsIGJdKTtcbiAgICB9KTtcbiAgfSAvLyBkZXN0cm95cyB0aGUgb3JpZ2luYWwgbm9kZSBhbmQgcmV0dXJucyBhIGZvbGRlZCBvbmVcblxuXG4gIGZ1bmN0aW9uIGZvbGRGcmFjdGlvbihub2RlLCBvcHRpb25zKSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOlxuICAgICAgICByZXR1cm4gbm9kZTtcblxuICAgICAgY2FzZSAnQ29uc3RhbnROb2RlJzpcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAnbnVtYmVyJyB8fCAhaXNOYU4obm9kZS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gX3RvTnVtYmVyKG5vZGUudmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG5cbiAgICAgIGNhc2UgJ0Z1bmN0aW9uTm9kZSc6XG4gICAgICAgIGlmIChtYXRoV2l0aFRyYW5zZm9ybVtub2RlLm5hbWVdICYmIG1hdGhXaXRoVHJhbnNmb3JtW25vZGUubmFtZV0ucmF3QXJncykge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIFByb2Nlc3Mgb3BlcmF0b3JzIGFzIE9wZXJhdG9yTm9kZVxuICAgICAgICAgIHZhciBvcGVyYXRvckZ1bmN0aW9ucyA9IFsnYWRkJywgJ211bHRpcGx5J107XG5cbiAgICAgICAgICBpZiAob3BlcmF0b3JGdW5jdGlvbnMuaW5kZXhPZihub2RlLm5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7IC8vIElmIGFsbCBhcmdzIGFyZSBudW1iZXJzXG5cbiAgICAgICAgICAgIGlmICghYXJncy5zb21lKF9pcy5pc05vZGUpKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9ldmFsKG5vZGUubmFtZSwgYXJncywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZWFuZGNvbnRpbmUpIHt9XG4gICAgICAgICAgICB9IC8vIENvbnZlcnQgYWxsIGFyZ3MgdG8gbm9kZXMgYW5kIGNvbnN0cnVjdCBhIHN5bWJvbGljIGZ1bmN0aW9uIGNhbGxcblxuXG4gICAgICAgICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKGFyZykgPyBhcmcgOiBfdG9Ob2RlKGFyZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUubmFtZSwgYXJncyk7XG4gICAgICAgICAgfSBlbHNlIHsvLyB0cmVhdCBhcyBvcGVyYXRvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZSc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZm4gPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICB2YXIgX2FyZ3M7XG5cbiAgICAgICAgICB2YXIgcmVzO1xuICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgICAgICAgIF9hcmdzID0gW2ZvbGRGcmFjdGlvbihub2RlLmFyZ3NbMF0sIG9wdGlvbnMpXTtcblxuICAgICAgICAgICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoX2FyZ3NbMF0pKSB7XG4gICAgICAgICAgICAgIHJlcyA9IF9ldmFsKGZuLCBfYXJncywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMgPSBtYWtlTm9kZShfYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0Fzc29jaWF0aXZlKG5vZGUpKSB7XG4gICAgICAgICAgICBfYXJncyA9IGFsbENoaWxkcmVuKG5vZGUpO1xuICAgICAgICAgICAgX2FyZ3MgPSBfYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gZm9sZEZyYWN0aW9uKGFyZywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlzQ29tbXV0YXRpdmUoZm4pKSB7XG4gICAgICAgICAgICAgIC8vIGNvbW11dGF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgICB2YXIgY29uc3RzID0gW107XG4gICAgICAgICAgICAgIHZhciB2YXJzID0gW107XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKF9hcmdzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3RzLnB1c2goX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXJzLnB1c2goX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjb25zdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgY29uc3RzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdmFycy51bnNoaWZ0KHJlcyk7XG4gICAgICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCB2YXJzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gd2Ugd29uJ3QgY2hhbmdlIHRoZSBjaGlsZHJlbiBvcmRlciBzaW5jZSBpdCdzIG5vdCBuZWNjZXNzYXJ5XG4gICAgICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCBfYXJncywgbWFrZU5vZGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBub24tY29tbXV0YXRpdmUgYmluYXJ5IG9wZXJhdG9yXG4gICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgX2FyZ3MsIG1ha2VOb2RlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbm9uLWFzc29jaWF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgX2FyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXMgPSBmb2xkT3AoZm4sIF9hcmdzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdQYXJlbnRoZXNpc05vZGUnOlxuICAgICAgICAvLyByZW1vdmUgdGhlIHVuZWNjZXNzYXJ5IHBhcmVudGhlc2lzXG4gICAgICAgIHJldHVybiBmb2xkRnJhY3Rpb24obm9kZS5jb250ZW50LCBvcHRpb25zKTtcblxuICAgICAgY2FzZSAnQWNjZXNzb3JOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQXJyYXlOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQXNzaWdubWVudE5vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdCbG9ja05vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnSW5kZXhOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnT2JqZWN0Tm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ1JhbmdlTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaW1wbGVtZW50ZWQgbm9kZSB0eXBlIGluIHNpbXBsaWZ5Q29uc3RhbnQ6IFwiLmNvbmNhdChub2RlLnR5cGUpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnlDb25zdGFudDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gY3JlYXRlU2ltcGxpZnlDb25zdGFudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2ltcGxpZnlDb3JlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2ltcGxpZnlDb3JlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2VxdWFsJywgJ2lzWmVybycsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdQYXJlbnRoZXNpc05vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeUNvcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcbiAgdmFyIG5vZGUwID0gbmV3IENvbnN0YW50Tm9kZSgwKTtcbiAgdmFyIG5vZGUxID0gbmV3IENvbnN0YW50Tm9kZSgxKTtcbiAgLyoqXG4gICAqIHNpbXBsaWZ5Q29yZSgpIHBlcmZvcm1zIHNpbmdsZSBwYXNzIHNpbXBsaWZpY2F0aW9uIHN1aXRhYmxlIGZvclxuICAgKiBhcHBsaWNhdGlvbnMgcmVxdWlyaW5nIHVsdGltYXRlIHBlcmZvcm1hbmNlLiBJbiBjb250cmFzdCwgc2ltcGxpZnkoKVxuICAgKiBleHRlbmRzIHNpbXBsaWZ5Q29yZSgpIHdpdGggYWRkaXRpb25hbCBwYXNzZXMgdG8gcHJvdmlkZSBkZWVwZXJcbiAgICogc2ltcGxpZmljYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5LnNpbXBsaWZ5Q29yZShleHByKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IGYgPSBtYXRoLnBhcnNlKCcyICogMSAqIHggXiAoMiAtIDEpJylcbiAgICogICAgIG1hdGguc2ltcGxpZnkuc2ltcGlmeUNvcmUoZikgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgezIgKiB4fVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMiAqIDEgKiB4IF4gKDIgLSAxKScsIFttYXRoLnNpbXBsaWZ5LnNpbXBpZnlDb3JlXSkgLy8gTm9kZSB7MiAqIHh9XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGVyaXZhdGl2ZVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogICAgIFRoZSBleHByZXNzaW9uIHRvIGJlIHNpbXBsaWZpZWRcbiAgICovXG5cbiAgZnVuY3Rpb24gc2ltcGxpZnlDb3JlKG5vZGUpIHtcbiAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgIHZhciBhMCA9IHNpbXBsaWZ5Q29yZShub2RlLmFyZ3NbMF0pO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJysnKSB7XG4gICAgICAgIC8vIHVuYXJ5IHBsdXNcbiAgICAgICAgcmV0dXJuIGEwO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIC8vIHVuYXJ5IG1pbnVzXG4gICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShhMCkpIHtcbiAgICAgICAgICBpZiAoYTAuaXNVbmFyeSgpICYmIGEwLm9wID09PSAnLScpIHtcbiAgICAgICAgICAgIHJldHVybiBhMC5hcmdzWzBdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYTAuaXNCaW5hcnkoKSAmJiBhMC5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbYTAuYXJnc1sxXSwgYTAuYXJnc1swXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFthMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICB2YXIgX2EgPSBzaW1wbGlmeUNvcmUobm9kZS5hcmdzWzBdKTtcblxuICAgICAgdmFyIGExID0gc2ltcGxpZnlDb3JlKG5vZGUuYXJnc1sxXSk7XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKycpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYTE7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKGFkZChfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpICYmIGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gX2E7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoYTEpICYmIGExLmlzVW5hcnkoKSAmJiBhMS5vcCA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbX2EsIGExLmFyZ3NbMF1dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGExID8gW19hLCBhMV0gOiBbX2FdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkgJiYgYTEpIHtcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShzdWJ0cmFjdChfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbYTFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaWYgKG5vZGUuZm4gPT09IFwic3VidHJhY3RcIiAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG5cblxuICAgICAgICBpZiAobm9kZS5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkgJiYgaXNaZXJvKGExLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShhMSkgJiYgYTEuaXNVbmFyeSgpICYmIGExLm9wID09PSAnLScpIHtcbiAgICAgICAgICAgIHJldHVybiBzaW1wbGlmeUNvcmUobmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBbX2EsIGExLmFyZ3NbMF1dKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2EpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKF9hLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGExO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGExLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoX2EpICYmIF9hLmlzQmluYXJ5KCkgJiYgX2Eub3AgPT09IG5vZGUub3ApIHtcbiAgICAgICAgICAgIHZhciBhMDAgPSBfYS5hcmdzWzBdO1xuXG4gICAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTAwKSkge1xuICAgICAgICAgICAgICB2YXIgYTAwYTEgPSBuZXcgQ29uc3RhbnROb2RlKG11bHRpcGx5KGEwMC52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2EwMGExLCBfYS5hcmdzWzFdXSwgbm9kZS5pbXBsaWNpdCk7IC8vIGNvbnN0YW50cyBvbiBsZWZ0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2ExLCBfYV0sIG5vZGUuaW1wbGljaXQpOyAvLyBjb25zdGFudHMgb24gbGVmdFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0sIG5vZGUuaW1wbGljaXQpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09PSAnLycpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTA7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkgJiYgKGVxdWFsKGExLnZhbHVlLCAxKSB8fCBlcXVhbChhMS52YWx1ZSwgMikgfHwgZXF1YWwoYTEudmFsdWUsIDQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUoZGl2aWRlKF9hLnZhbHVlLCBhMS52YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkpIHtcbiAgICAgICAgICBpZiAoaXNaZXJvKGExLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUxO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoYTEudmFsdWUsIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4gX2E7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkpIHtcbiAgICAgICAgICAgICAgLy8gZm9sZCBjb25zdGFudFxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShwb3coX2EudmFsdWUsIGExLnZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKF9hKSAmJiBfYS5pc0JpbmFyeSgpICYmIF9hLm9wID09PSAnXicpIHtcbiAgICAgICAgICAgICAgdmFyIGEwMSA9IF9hLmFyZ3NbMV07XG5cbiAgICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGEwMSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2EuYXJnc1swXSwgbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShhMDEudmFsdWUsIGExLnZhbHVlKSldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgYyA9IHNpbXBsaWZ5Q29yZShub2RlLmNvbnRlbnQpO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkoYykgfHwgKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGMpIHx8ICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGMpKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFBhcmVudGhlc2lzTm9kZShjKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgYXJncyA9IG5vZGUuYXJncy5tYXAoc2ltcGxpZnlDb3JlKS5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkoYXJnKSA/IGFyZy5jb250ZW50IDogYXJnO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShzaW1wbGlmeUNvcmUobm9kZS5mbiksIGFyZ3MpO1xuICAgIH0gZWxzZSB7Ly8gY2Fubm90IHNpbXBsaWZ5XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnlDb3JlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbXBsaWZ5Q29yZSA9IGNyZWF0ZVNpbXBsaWZ5Q29yZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVXRpbCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIG5hbWUgPSAnc2ltcGxpZnlVdGlsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZVV0aWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGU7XG4gIC8vIFRPRE8gY29tbXV0YXRpdmUvYXNzb2NpYXRpdmUgcHJvcGVydGllcyByZWx5IG9uIHRoZSBhcmd1bWVudHNcbiAgLy8gZS5nLiBtdWx0aXBseSBpcyBub3QgY29tbXV0YXRpdmUgZm9yIG1hdHJpY2VzXG4gIC8vIFRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBjYWxjdWxhdGVkIGZyb20gYW4gYXJndW1lbnQgdG8gc2ltcGxpZnksIG9yIHBvc3NpYmx5IHNvbWV0aGluZyBpbiBtYXRoLmNvbmZpZ1xuICAvLyB0aGUgb3RoZXIgb3B0aW9uIGlzIGZvciB0eXBlZCgpIHRvIHNwZWNpZnkgYSByZXR1cm4gdHlwZSBzbyB0aGF0IHdlIGNhbiBldmFsdWF0ZSB0aGUgdHlwZSBvZiBhcmd1bWVudHNcbiAgdmFyIGNvbW11dGF0aXZlID0ge1xuICAgIGFkZDogdHJ1ZSxcbiAgICBtdWx0aXBseTogdHJ1ZVxuICB9O1xuICB2YXIgYXNzb2NpYXRpdmUgPSB7XG4gICAgYWRkOiB0cnVlLFxuICAgIG11bHRpcGx5OiB0cnVlXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29udGV4dCwgbmFtZSkgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHRbbmFtZV0sICdjb21tdXRhdGl2ZScpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFtuYW1lXS5jb21tdXRhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbXV0YXRpdmVbbmFtZV0gfHwgZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBpc0Fzc29jaWF0aXZlKG5vZGUsIGNvbnRleHQpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKG5vZGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29udGV4dCwgbmFtZSkgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHRbbmFtZV0sICdhc3NvY2lhdGl2ZScpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFtuYW1lXS5hc3NvY2lhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzb2NpYXRpdmVbbmFtZV0gfHwgZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEZsYXR0ZW4gYWxsIGFzc29jaWF0aXZlIG9wZXJhdG9ycyBpbiBhbiBleHByZXNzaW9uIHRyZWUuXG4gICAqIEFzc3VtZXMgcGFyZW50aGVzZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBmbGF0dGVuKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuYXJncyB8fCBub2RlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBub2RlLmFyZ3MgPSBhbGxDaGlsZHJlbihub2RlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmbGF0dGVuKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoaWxkcmVuIG9mIGEgbm9kZSBhcyBpZiBpdCBoYXMgYmVlbiBmbGF0dGVuZWQuXG4gICAqIFRPRE8gaW1wbGVtZW50IGZvciBGdW5jdGlvbk5vZGVzXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gYWxsQ2hpbGRyZW4obm9kZSkge1xuICAgIHZhciBvcDtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTtcblxuICAgIHZhciBmaW5kQ2hpbGRyZW4gPSBmdW5jdGlvbiBmaW5kQ2hpbGRyZW4obm9kZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5hcmdzW2ldO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShjaGlsZCkgJiYgb3AgPT09IGNoaWxkLm9wKSB7XG4gICAgICAgICAgZmluZENoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgb3AgPSBub2RlLm9wO1xuICAgICAgZmluZENoaWxkcmVuKG5vZGUpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogIFVuZmxhdHRlbiBhbGwgZmxhdHRlbmVkIG9wZXJhdG9ycyB0byBhIHJpZ2h0LWhlYXZ5IGJpbmFyeSB0cmVlLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHVuZmxhdHRlbnIobm9kZSkge1xuICAgIGlmICghbm9kZS5hcmdzIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpO1xuICAgIHZhciBsID0gbm9kZS5hcmdzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB1bmZsYXR0ZW5yKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKGwgPiAyICYmIGlzQXNzb2NpYXRpdmUobm9kZSkpIHtcbiAgICAgIHZhciBjdXJub2RlID0gbm9kZS5hcmdzLnBvcCgpO1xuXG4gICAgICB3aGlsZSAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY3Vybm9kZSA9IG1ha2VOb2RlKFtub2RlLmFyZ3MucG9wKCksIGN1cm5vZGVdKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5hcmdzID0gY3Vybm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogIFVuZmxhdHRlbiBhbGwgZmxhdHRlbmVkIG9wZXJhdG9ycyB0byBhIGxlZnQtaGVhdnkgYmluYXJ5IHRyZWUuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5mbGF0dGVubChub2RlKSB7XG4gICAgaWYgKCFub2RlLmFyZ3MgfHwgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG4gICAgdmFyIGwgPSBub2RlLmFyZ3MubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHVuZmxhdHRlbmwobm9kZS5hcmdzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAobCA+IDIgJiYgaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgdmFyIGN1cm5vZGUgPSBub2RlLmFyZ3Muc2hpZnQoKTtcblxuICAgICAgd2hpbGUgKG5vZGUuYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGN1cm5vZGUgPSBtYWtlTm9kZShbY3Vybm9kZSwgbm9kZS5hcmdzLnNoaWZ0KCldKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5hcmdzID0gY3Vybm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSkge1xuICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgYXJncywgbm9kZS5pbXBsaWNpdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZShub2RlLm5hbWUpLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uOiBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uLFxuICAgIGlzQ29tbXV0YXRpdmU6IGlzQ29tbXV0YXRpdmUsXG4gICAgaXNBc3NvY2lhdGl2ZTogaXNBc3NvY2lhdGl2ZSxcbiAgICBmbGF0dGVuOiBmbGF0dGVuLFxuICAgIGFsbENoaWxkcmVuOiBhbGxDaGlsZHJlbixcbiAgICB1bmZsYXR0ZW5yOiB1bmZsYXR0ZW5yLFxuICAgIHVuZmxhdHRlbmw6IHVuZmxhdHRlbmxcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVdGlsID0gY3JlYXRlVXRpbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTHNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zb2x2ZVZhbGlkYXRpb24gPSByZXF1aXJlKFwiLi91dGlscy9zb2x2ZVZhbGlkYXRpb25cIik7XG5cbnZhciBuYW1lID0gJ2xzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3N1YnRyYWN0JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBlcXVhdGlvbiBzeXN0ZW0gYnkgZm9yd2FyZHMgc3Vic3RpdHV0aW9uLiBNYXRyaXggbXVzdCBiZSBhIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgKlxuICAgKiBgTCAqIHggPSBiYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubHNvbHZlKEwsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IGxzb2x2ZShhLCBiKSAgLy8gW1stNS41XSwgWzIwXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgc2x1LCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXgsIEFycmF5fSBMICAgICAgIEEgTiB4IE4gbWF0cml4IG9yIGFycmF5IChMKVxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IGIgICAgICAgQSBjb2x1bW4gdmVjdG9yIHdpdGggdGhlIGIgdmFsdWVzXG4gICAqXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4IHwgQXJyYXl9ICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgbGluZWFyIHN5c3RlbSBzb2x1dGlvbiAoeClcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFycmF5TWF0cml4KG0sIGIpIHtcbiAgICAgIC8vIHByb2Nlc3MgbWF0cml4XG4gICAgICByZXR1cm4gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9kZW5zZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXlcbiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHIudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7XG4gICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYlxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIHggPSBbXTsgLy8gZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBtLl9kYXRhOyAvLyBmb3J3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gYltqXVxuICAgICAgdmFyIGJqID0gYmRhdGFbal1bMF0gfHwgMDsgLy8geFtqXVxuXG4gICAgICB2YXIgeGogPSB2b2lkIDA7IC8vIGZvcndhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2ampcblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGogKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIGNvcHkgb2YgYlxuICAgICAgICAgIGJkYXRhW2ldID0gW3N1YnRyYWN0KGJkYXRhW2ldWzBdIHx8IDAsIG11bHRpcGx5U2NhbGFyKHhqLCBkYXRhW2ldW2pdKSldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB6ZXJvIEAgalxuICAgICAgICB4aiA9IDA7XG4gICAgICB9IC8vIHVwZGF0ZSB4XG5cblxuICAgICAgeFtqXSA9IFt4al07XG4gICAgfSAvLyByZXR1cm4gdmVjdG9yXG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogeCxcbiAgICAgIHNpemU6IFtyb3dzLCAxXVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBpLCBrOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGZvcndhcmQgc29sdmUgbSAqIHggPSBiLCBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyBmb3J3YXJkIHN1YnN0aXR1dGlvbiAob3V0ZXIgcHJvZHVjdCkgYXZvaWRzIGlubmVyIGxvb3Bpbmcgd2hlbiBiaiA9PT0gMFxuXG4gICAgICBpZiAoIWVxdWFsU2NhbGFyKGJqLCAwKSkge1xuICAgICAgICAvLyB2YWx1ZSBAIFtqLCBqXVxuICAgICAgICB2YXIgdmpqID0gMDsgLy8gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXggdmFsdWVzICYgaW5kZXggKGNvbHVtbiBqKVxuXG4gICAgICAgIHZhciBqdmFsdWVzID0gW107XG4gICAgICAgIHZhciBqaW5kZXggPSBbXTsgLy8gbGFzdCBpbmRleCBpbiBjb2x1bW5cblxuICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal1cblxuICAgICAgICBmb3IgKGsgPSBwdHJbal07IGsgPCBsOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gaW5kZXhba107IC8vIGNoZWNrIHJvdyAocm93cyBhcmUgbm90IHNvcnRlZCEpXG5cbiAgICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHZqalxuICAgICAgICAgICAgdmpqID0gdmFsdWVzW2tdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IGopIHtcbiAgICAgICAgICAgIC8vIHN0b3JlIGxvd2VyIHRyaWFuZ3VsYXJcbiAgICAgICAgICAgIGp2YWx1ZXMucHVzaCh2YWx1ZXNba10pO1xuICAgICAgICAgICAgamluZGV4LnB1c2goaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGF0IHRoaXMgcG9pbnQgd2UgbXVzdCBoYXZlIGEgdmFsdWUgQCBbaiwgal1cblxuXG4gICAgICAgIGlmIChlcXVhbFNjYWxhcih2amosIDApKSB7XG4gICAgICAgICAgLy8gc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQsIHRoZXJlIGlzIG5vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB2YXIgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3AgbG93ZXIgdHJpYW5ndWxhclxuXG4gICAgICAgIGZvciAoayA9IDAsIGwgPSBqaW5kZXgubGVuZ3RoOyBrIDwgbDsgaysrKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGppbmRleFtrXTsgLy8gdXBkYXRlIGNvcHkgb2YgYlxuXG4gICAgICAgICAgYmRhdGFbaV0gPSBbc3VidHJhY3QoYmRhdGFbaV1bMF0gfHwgMCwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07XG4gICAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICAgIHhbal0gPSBbeGpdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHhcbiAgICAgICAgeFtqXSA9IFswXTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMc29sdmUgPSBjcmVhdGVMc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUx1c29sdmUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NvbHZlVmFsaWRhdGlvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL3NvbHZlVmFsaWRhdGlvblwiKTtcblxudmFyIF9jc0lwdmVjID0gcmVxdWlyZShcIi4uL3NwYXJzZS9jc0lwdmVjXCIpO1xuXG52YXIgbmFtZSA9ICdsdXNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdsdXAnLCAnc2x1JywgJ3Vzb2x2ZScsICdsc29sdmUnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbHVwID0gX3JlZi5sdXAsXG4gICAgICBzbHUgPSBfcmVmLnNsdSxcbiAgICAgIHVzb2x2ZSA9IF9yZWYudXNvbHZlLFxuICAgICAgbHNvbHZlID0gX3JlZi5sc29sdmUsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gYEEgKiB4ID0gYmAgd2hlcmUgYEFgIGlzIGFuIFtuIHggbl0gbWF0cml4IGFuZCBgYmAgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmx1c29sdmUoQSwgYikgICAgIC8vIHJldHVybnMgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBzb2x1dGlvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGJcbiAgICogICAgbWF0aC5sdXNvbHZlKGx1cCwgYikgICAvLyByZXR1cm5zIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgc29sdXRpb24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiLCBsdXAgPSBtYXRoLmx1cChBKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgbSA9IFtbMSwgMCwgMCwgMF0sIFswLCAyLCAwLCAwXSwgWzAsIDAsIDMsIDBdLCBbMCwgMCwgMCwgNF1dXG4gICAqXG4gICAqICAgIGNvbnN0IHggPSBtYXRoLmx1c29sdmUobSwgWy0xLCAtMSwgLTEsIC0xXSkgICAgICAgIC8vIHggPSBbWy0xXSwgWy0wLjVdLCBbLTEvM10sIFstMC4yNV1dXG4gICAqXG4gICAqICAgIGNvbnN0IGYgPSBtYXRoLmx1cChtKVxuICAgKiAgICBjb25zdCB4MSA9IG1hdGgubHVzb2x2ZShmLCBbLTEsIC0xLCAtMSwgLTFdKSAgICAgICAvLyB4MSA9IFtbLTFdLCBbLTAuNV0sIFstMS8zXSwgWy0wLjI1XV1cbiAgICogICAgY29uc3QgeDIgPSBtYXRoLmx1c29sdmUoZiwgWzEsIDIsIDEsIC0xXSkgICAgICAgICAgLy8geDIgPSBbWzFdLCBbMV0sIFsxLzNdLCBbLTAuMjVdXVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IG1hdGgubHVzb2x2ZShhLCBiKSAgLy8gW1syXSwgWzVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBzbHUsIGxzb2x2ZSwgdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXkgfCBPYmplY3R9IEEgICAgICBJbnZlcnRpYmxlIE1hdHJpeCBvciB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb25cbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gYiAgICAgICAgICAgICAgIENvbHVtbiBWZWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcmRlcl0gICAgICAgICAgICAgICAgIFRoZSBTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXIsIHNlZSBzbHUgZm9yIGRldGFpbHMuIE1hdHJpeCBtdXN0IGJlIGEgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbdGhyZXNob2xkXSAgICAgICAgICAgICBQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCAoMSBmb3IgcGFydGlhbCBwaXZvdGluZyksIHNlZSBzbHUgZm9yIGRldGFpbHMuIE1hdHJpeCBtdXN0IGJlIGEgU3BhcnNlTWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeCB8IEFycmF5fSAgICAgICAgICAgQ29sdW1uIHZlY3RvciB3aXRoIHRoZSBzb2x1dGlvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGJcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBjb252ZXJ0IGEgdG8gbWF0cml4XG4gICAgICBhID0gbWF0cml4KGEpOyAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb25cblxuICAgICAgdmFyIGQgPSBsdXAoYSk7IC8vIHNvbHZlXG5cbiAgICAgIHZhciB4ID0gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7IC8vIGNvbnZlcnQgcmVzdWx0IHRvIGFycmF5XG5cblxuICAgICAgcmV0dXJuIHgudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gbWF0cml4IGx1cCBkZWNvbXBvc2l0aW9uXG4gICAgICB2YXIgZCA9IGx1cChhKTsgLy8gc29sdmVcblxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIG51bGwsIGIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb25cbiAgICAgIHZhciBkID0gbHVwKGEpOyAvLyBzb2x2ZVxuXG4gICAgICByZXR1cm4gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeE51bWJlck51bWJlcihhLCBiLCBvcmRlciwgdGhyZXNob2xkKSB7XG4gICAgICAvLyBtYXRyaXggbHUgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGQgPSBzbHUoYSwgb3JkZXIsIHRocmVzaG9sZCk7IC8vIHNvbHZlXG5cbiAgICAgIHJldHVybiBfbHVzb2x2ZShkLkwsIGQuVSwgZC5wLCBkLnEsIGIpO1xuICAgIH0sXG4gICAgJ09iamVjdCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBPYmplY3RBcnJheU1hdHJpeChkLCBiKSB7XG4gICAgICAvLyBzb2x2ZVxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIGQucSwgYik7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfdG9NYXRyaXgoYSkge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgbWF0cml4XG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGEpKSB7XG4gICAgICByZXR1cm4gYTtcbiAgICB9IC8vIGNoZWNrIGFycmF5XG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKGEpKSB7XG4gICAgICByZXR1cm4gbWF0cml4KGEpO1xuICAgIH0gLy8gdGhyb3dcblxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBNYXRyaXggTFUgZGVjb21wb3NpdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2x1c29sdmUobCwgdSwgcCwgcSwgYikge1xuICAgIC8vIHZlcmlmeSBMLCBVLCBQXG4gICAgbCA9IF90b01hdHJpeChsKTtcbiAgICB1ID0gX3RvTWF0cml4KHUpOyAvLyB2YWxpZGF0ZSBtYXRyaXggYW5kIHZlY3RvclxuXG4gICAgYiA9IHNvbHZlVmFsaWRhdGlvbihsLCBiLCBmYWxzZSk7IC8vIGFwcGx5IHJvdyBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkIChiIGlzIGEgRGVuc2VNYXRyaXgpXG5cbiAgICBpZiAocCkge1xuICAgICAgYi5fZGF0YSA9ICgwLCBfY3NJcHZlYy5jc0lwdmVjKShwLCBiLl9kYXRhKTtcbiAgICB9IC8vIHVzZSBmb3J3YXJkIHN1YnN0aXR1dGlvbiB0byByZXNvbHZlIEwgKiB5ID0gYlxuXG5cbiAgICB2YXIgeSA9IGxzb2x2ZShsLCBiKTsgLy8gdXNlIGJhY2t3YXJkIHN1YnN0aXR1dGlvbiB0byByZXNvbHZlIFUgKiB4ID0geVxuXG4gICAgdmFyIHggPSB1c29sdmUodSwgeSk7IC8vIGFwcGx5IGNvbHVtbiBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkICh4IGlzIGEgRGVuc2VNYXRyaXgpXG5cbiAgICBpZiAocSkge1xuICAgICAgeC5fZGF0YSA9ICgwLCBfY3NJcHZlYy5jc0lwdmVjKShxLCB4Ll9kYXRhKTtcbiAgICB9IC8vIHJldHVybiBzb2x1dGlvblxuXG5cbiAgICByZXR1cm4geDtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUx1c29sdmUgPSBjcmVhdGVMdXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVc29sdmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NvbHZlVmFsaWRhdGlvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL3NvbHZlVmFsaWRhdGlvblwiKTtcblxudmFyIG5hbWUgPSAndXNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVVc29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIHNvbHZlVmFsaWRhdGlvbiA9ICgwLCBfc29sdmVWYWxpZGF0aW9uLmNyZWF0ZVNvbHZlVmFsaWRhdGlvbikoe1xuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIFNvbHZlcyB0aGUgbGluZWFyIGVxdWF0aW9uIHN5c3RlbSBieSBiYWNrd2FyZCBzdWJzdGl0dXRpb24uIE1hdHJpeCBtdXN0IGJlIGFuIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgKlxuICAgKiBgVSAqIHggPSBiYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudXNvbHZlKFUsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IHVzb2x2ZShhLCBiKSAgLy8gW1s4XSwgWzldXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBzbHUsIHVzb2x2ZSwgbHVzb2x2ZVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IFUgICAgICAgQSBOIHggTiBtYXRyaXggb3IgYXJyYXkgKFUpXG4gICAqIEBwYXJhbSB7TWF0cml4LCBBcnJheX0gYiAgICAgICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgYiB2YWx1ZXNcbiAgICpcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXggfCBBcnJheX0gIEEgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBsaW5lYXIgc3lzdGVtIHNvbHV0aW9uICh4KVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdTcGFyc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QXJyYXlNYXRyaXgobSwgYikge1xuICAgICAgLy8gcHJvY2VzcyBtYXRyaXhcbiAgICAgIHJldHVybiBfc3BhcnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG4gICAgICB2YXIgciA9IF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpOyAvLyByZXN1bHRcblxuXG4gICAgICByZXR1cm4gci52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VCYWNrd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7XG4gICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYlxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIHggPSBbXTsgLy8gYXJyYXlzXG5cbiAgICB2YXIgZGF0YSA9IG0uX2RhdGE7IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpXG5cbiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyB4W2pdXG5cbiAgICAgIHZhciB4aiA9IHZvaWQgMDsgLy8gYmFja3dhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2ampcblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGogLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIC8vIHVwZGF0ZSBjb3B5IG9mIGJcbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSB8fCAwLCBtdWx0aXBseVNjYWxhcih4aiwgZGF0YVtpXVtqXSkpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gemVybyB2YWx1ZSBAIGpcbiAgICAgICAgeGogPSAwO1xuICAgICAgfSAvLyB1cGRhdGUgeFxuXG5cbiAgICAgIHhbal0gPSBbeGpdO1xuICAgIH0gLy8gcmV0dXJuIGNvbHVtbiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBpLCBrOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpXG5cbiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyBiYWNrd2FyZCBzdWJzdGl0dXRpb24gKG91dGVyIHByb2R1Y3QpIGF2b2lkcyBpbm5lciBsb29waW5nIHdoZW4gYmogPT09IDBcblxuICAgICAgaWYgKCFlcXVhbFNjYWxhcihiaiwgMCkpIHtcbiAgICAgICAgLy8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgdmFyIHZqaiA9IDA7IC8vIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IHZhbHVlcyAmIGluZGV4IChjb2x1bW4gailcblxuICAgICAgICB2YXIganZhbHVlcyA9IFtdO1xuICAgICAgICB2YXIgamluZGV4ID0gW107IC8vIGZpcnN0ICYgbGFzdCBpbmRlY2VzIGluIGNvbHVtblxuXG4gICAgICAgIHZhciBmID0gcHRyW2pdO1xuICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal0sIGxvb3AgYmFja3dhcmRzXG5cbiAgICAgICAgZm9yIChrID0gbCAtIDE7IGsgPj0gZjsgay0tKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3dcblxuICAgICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdmpqXG4gICAgICAgICAgICB2amogPSB2YWx1ZXNba107XG4gICAgICAgICAgfSBlbHNlIGlmIChpIDwgaikge1xuICAgICAgICAgICAgLy8gc3RvcmUgdXBwZXIgdHJpYW5ndWxhclxuICAgICAgICAgICAganZhbHVlcy5wdXNoKHZhbHVlc1trXSk7XG4gICAgICAgICAgICBqaW5kZXgucHVzaChpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gYXQgdGhpcyBwb2ludCB3ZSBtdXN0IGhhdmUgYSB2YWx1ZSBAIFtqLCBqXVxuXG5cbiAgICAgICAgaWYgKGVxdWFsU2NhbGFyKHZqaiwgMCkpIHtcbiAgICAgICAgICAvLyBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCwgdGhlcmUgaXMgbm8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xpbmVhciBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCBzaW5jZSBtYXRyaXggaXMgc2luZ3VsYXInKTtcbiAgICAgICAgfSAvLyBjYWxjdWxhdGUgeGpcblxuXG4gICAgICAgIHZhciB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCB1cHBlciB0cmlhbmd1bGFyXG5cbiAgICAgICAgZm9yIChrID0gMCwgbCA9IGppbmRleC5sZW5ndGg7IGsgPCBsOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gamluZGV4W2tdOyAvLyB1cGRhdGUgY29weSBvZiBiXG5cbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07XG4gICAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICAgIHhbal0gPSBbeGpdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHhcbiAgICAgICAgeFtqXSA9IFswXTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVVc29sdmUgPSBjcmVhdGVVc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvbHZlVmFsaWRhdGlvbiA9IGNyZWF0ZVNvbHZlVmFsaWRhdGlvbjtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG5mdW5jdGlvbiBjcmVhdGVTb2x2ZVZhbGlkYXRpb24oX3JlZikge1xuICB2YXIgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgbWF0cml4IGFuZCBjb2x1bW4gdmVjdG9yIGIgZm9yIGJhY2t3YXJkL2ZvcndhcmQgc3Vic3RpdHV0aW9uIGFsZ29yaXRobXMuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBtICAgICAgICAgICAgQW4gTiB4IE4gbWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGIgICAgQSBjb2x1bW4gdmVjdG9yXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gY29weSAgICAgICAgUmV0dXJuIGEgY29weSBvZiB2ZWN0b3IgYlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeH0gICAgICAgIERlbnNlIGNvbHVtbiB2ZWN0b3IgYlxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIHNvbHZlVmFsaWRhdGlvbihtLCBiLCBjb3B5KSB7XG4gICAgLy8gbWF0cml4IHNpemVcbiAgICB2YXIgc2l6ZSA9IG0uc2l6ZSgpOyAvLyB2YWxpZGF0ZSBtYXRyaXggZGltZW5zaW9uc1xuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyB2YWxpZGF0ZSByb3dzICYgY29sdW1uc1xuXG4gICAgaWYgKHJvd3MgIT09IGNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9IC8vIHZhcnNcblxuXG4gICAgdmFyIGRhdGEsIGksIGJkYXRhOyAvLyBjaGVjayBiIGlzIG1hdHJpeFxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGIpKSB7XG4gICAgICAvLyBtYXRyaXggc2l6ZVxuICAgICAgdmFyIG1zaXplID0gYi5zaXplKCk7IC8vIHZlY3RvclxuXG4gICAgICBpZiAobXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGNoZWNrIHZlY3RvciBsZW5ndGhcbiAgICAgICAgaWYgKG1zaXplWzBdICE9PSByb3dzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeClcblxuICAgICAgICBiZGF0YSA9IGIuX2RhdGE7IC8vIGxvb3AgYiBkYXRhXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHJvdyBhcnJheVxuICAgICAgICAgIGRhdGFbaV0gPSBbYmRhdGFbaV1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdLFxuICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gdHdvIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAobXNpemUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yXG4gICAgICAgIGlmIChtc2l6ZVswXSAhPT0gcm93cyB8fCBtc2l6ZVsxXSAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjaGVjayBtYXRyaXggdHlwZVxuXG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoYikpIHtcbiAgICAgICAgICAvLyBjaGVjayBhIGNvcHkgaXMgbmVlZGVkXG4gICAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBkYXRhIGFycmF5XG4gICAgICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeClcblxuICAgICAgICAgICAgYmRhdGEgPSBiLl9kYXRhOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgIC8vIHJvdyBhcnJheVxuICAgICAgICAgICAgICBkYXRhW2ldID0gW2JkYXRhW2ldWzBdXTtcbiAgICAgICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeFxuXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICBzaXplOiBbcm93cywgMV0sXG4gICAgICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSAvLyBiIGlzIGFscmVhZHkgYSBjb2x1bW4gdmVjdG9yXG5cblxuICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIGRhdGFbaV0gPSBbMF07XG4gICAgICAgIH0gLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuXG4gICAgICAgIHZhciB2YWx1ZXMgPSBiLl92YWx1ZXM7XG4gICAgICAgIHZhciBpbmRleCA9IGIuX2luZGV4O1xuICAgICAgICB2YXIgcHRyID0gYi5fcHRyOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4gMFxuXG4gICAgICAgIGZvciAodmFyIGsxID0gcHRyWzFdLCBrID0gcHRyWzBdOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIGkgPSBpbmRleFtrXTsgLy8gYWRkIHRvIGRhdGFcblxuICAgICAgICAgIGRhdGFbaV1bMF0gPSB2YWx1ZXNba107XG4gICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeFxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBzaXplOiBbcm93cywgMV0sXG4gICAgICAgICAgZGF0YXR5cGU6IGIuX2RhdGF0eXBlXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aHJvdyBlcnJvclxuXG5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICB9IC8vIGNoZWNrIGIgaXMgYXJyYXlcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNBcnJheSkoYikpIHtcbiAgICAgIC8vIHNpemVcbiAgICAgIHZhciBhc2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKShiKTsgLy8gY2hlY2sgbWF0cml4IGRpbWVuc2lvbnMsIHZlY3RvclxuXG4gICAgICBpZiAoYXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGNoZWNrIHZlY3RvciBsZW5ndGhcbiAgICAgICAgaWYgKGFzaXplWzBdICE9PSByb3dzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107IC8vIGxvb3AgYlxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNpemUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yXG4gICAgICAgIGlmIChhc2l6ZVswXSAhPT0gcm93cyB8fCBhc2l6ZVsxXSAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjcmVhdGUgZGF0YSBhcnJheVxuXG5cbiAgICAgICAgZGF0YSA9IFtdOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1bMF1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aHJvdyBlcnJvclxuXG5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQW1kID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc0ZrZWVwID0gcmVxdWlyZShcIi4vY3NGa2VlcFwiKTtcblxudmFyIF9jc0ZsaXAgPSByZXF1aXJlKFwiLi9jc0ZsaXBcIik7XG5cbnZhciBfY3NUZGZzID0gcmVxdWlyZShcIi4vY3NUZGZzXCIpO1xuXG52YXIgbmFtZSA9ICdjc0FtZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJ107XG52YXIgY3JlYXRlQ3NBbWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcblxuICAvKipcbiAgICogQXBwcm94aW1hdGUgbWluaW11bSBkZWdyZWUgb3JkZXJpbmcuIFRoZSBtaW5pbXVtIGRlZ3JlZSBhbGdvcml0aG0gaXMgYSB3aWRlbHkgdXNlZFxuICAgKiBoZXVyaXN0aWMgZm9yIGZpbmRpbmcgYSBwZXJtdXRhdGlvbiBQIHNvIHRoYXQgUCpBKlAnIGhhcyBmZXdlciBub256ZXJvcyBpbiBpdHMgZmFjdG9yaXphdGlvblxuICAgKiB0aGFuIEEuIEl0IGlzIGEgZ3JlYWR5IG1ldGhvZCB0aGF0IHNlbGVjdHMgdGhlIHNwYXJzZXN0IHBpdm90IHJvdyBhbmQgY29sdW1uIGR1cmluZyB0aGUgY291cnNlXG4gICAqIG9mIGEgcmlnaHQgbG9va2luZyBzcGFyc2UgQ2hvbGVza3kgZmFjdG9yaXphdGlvbi5cbiAgICpcbiAgICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9yZGVyICAgIDA6IE5hdHVyYWwsIDE6IENob2xlc2t5LCAyOiBMVSwgMzogUVJcbiAgICogQHBhcmFtIHtNYXRyaXh9IG0gICAgICAgIFNwYXJzZSBNYXRyaXhcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBjc0FtZChvcmRlciwgYSkge1xuICAgIC8vIGNoZWNrIGlucHV0IHBhcmFtZXRlcnNcbiAgICBpZiAoIWEgfHwgb3JkZXIgPD0gMCB8fCBvcmRlciA+IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gYSBtYXRyaXggYXJyYXlzXG5cblxuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciBtID0gYXNpemVbMF07XG4gICAgdmFyIG4gPSBhc2l6ZVsxXTsgLy8gaW5pdGlhbGl6ZSB2YXJzXG5cbiAgICB2YXIgbGVtYXggPSAwOyAvLyBkZW5zZSB0aHJlc2hvbGRcblxuICAgIHZhciBkZW5zZSA9IE1hdGgubWF4KDE2LCAxMCAqIE1hdGguc3FydChuKSk7XG4gICAgZGVuc2UgPSBNYXRoLm1pbihuIC0gMiwgZGVuc2UpOyAvLyBjcmVhdGUgdGFyZ2V0IG1hdHJpeCBDXG5cbiAgICB2YXIgY20gPSBfY3JlYXRlVGFyZ2V0TWF0cml4KG9yZGVyLCBhLCBtLCBuLCBkZW5zZSk7IC8vIGRyb3AgZGlhZ29uYWwgZW50cmllc1xuXG5cbiAgICAoMCwgX2NzRmtlZXAuY3NGa2VlcCkoY20sIF9kaWFnLCBudWxsKTsgLy8gQyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgY2luZGV4ID0gY20uX2luZGV4O1xuICAgIHZhciBjcHRyID0gY20uX3B0cjsgLy8gbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gQ1xuXG4gICAgdmFyIGNueiA9IGNwdHJbbl07IC8vIGFsbG9jYXRlIHJlc3VsdCAobisxKVxuXG4gICAgdmFyIFAgPSBbXTsgLy8gY3JlYXRlIHdvcmtzcGFjZSAoOCAqIChuICsgMSkpXG5cbiAgICB2YXIgVyA9IFtdO1xuICAgIHZhciBsZW4gPSAwOyAvLyBmaXJzdCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgbnYgPSBuICsgMTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgbmV4dCA9IDIgKiAobiArIDEpOyAvLyBuZXh0IG4gKyAxIGVudHJpZXNcblxuICAgIHZhciBoZWFkID0gMyAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIGVsZW4gPSA0ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgZGVncmVlID0gNSAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIHcgPSA2ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgaGhlYWQgPSA3ICogKG4gKyAxKTsgLy8gbGFzdCBuICsgMSBlbnRyaWVzXG4gICAgLy8gdXNlIFAgYXMgd29ya3NwYWNlIGZvciBsYXN0XG5cbiAgICB2YXIgbGFzdCA9IFA7IC8vIGluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGhcblxuICAgIHZhciBtYXJrID0gX2luaXRpYWxpemVRdW90aWVudEdyYXBoKG4sIGNwdHIsIFcsIGxlbiwgaGVhZCwgbGFzdCwgbmV4dCwgaGhlYWQsIG52LCB3LCBlbGVuLCBkZWdyZWUpOyAvLyBpbml0aWFsaXplIGRlZ3JlZSBsaXN0c1xuXG5cbiAgICB2YXIgbmVsID0gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCk7IC8vIG1pbmltdW0gZGVncmVlIG5vZGVcblxuXG4gICAgdmFyIG1pbmRlZyA9IDA7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMSwgazIsIGUsIHBqLCBsbiwgbnZpLCBwaywgZWxuLCBwMSwgcDIsIHBuLCBoLCBkOyAvLyB3aGlsZSAoc2VsZWN0aW5nIHBpdm90cykgZG9cblxuICAgIHdoaWxlIChuZWwgPCBuKSB7XG4gICAgICAvLyBzZWxlY3Qgbm9kZSBvZiBtaW5pbXVtIGFwcHJveGltYXRlIGRlZ3JlZS4gYW1kKCkgaXMgbm93IHJlYWR5IHRvIHN0YXJ0IGVsaW1pbmF0aW5nIHRoZSBncmFwaC4gSXQgZmlyc3RcbiAgICAgIC8vIGZpbmRzIGEgbm9kZSBrIG9mIG1pbmltdW0gZGVncmVlIGFuZCByZW1vdmVzIGl0IGZyb20gaXRzIGRlZ3JlZSBsaXN0LiBUaGUgdmFyaWFibGUgbmVsIGtlZXBzIHRyYWNrIG9mIHRob3dcbiAgICAgIC8vIG1hbnkgbm9kZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQuXG4gICAgICBmb3IgKGsgPSAtMTsgbWluZGVnIDwgbiAmJiAoayA9IFdbaGVhZCArIG1pbmRlZ10pID09PSAtMTsgbWluZGVnKyspIHtcbiAgICAgICAgO1xuICAgICAgfVxuXG4gICAgICBpZiAoV1tuZXh0ICsga10gIT09IC0xKSB7XG4gICAgICAgIGxhc3RbV1tuZXh0ICsga11dID0gLTE7XG4gICAgICB9IC8vIHJlbW92ZSBrIGZyb20gZGVncmVlIGxpc3RcblxuXG4gICAgICBXW2hlYWQgKyBtaW5kZWddID0gV1tuZXh0ICsga107IC8vIGVsZW5rID0gfEVrfFxuXG4gICAgICB2YXIgZWxlbmsgPSBXW2VsZW4gKyBrXTsgLy8gIyBvZiBub2RlcyBrIHJlcHJlc2VudHNcblxuICAgICAgdmFyIG52ayA9IFdbbnYgKyBrXTsgLy8gV1tudiArIGtdIG5vZGVzIG9mIEEgZWxpbWluYXRlZFxuXG4gICAgICBuZWwgKz0gbnZrOyAvLyBDb25zdHJ1Y3QgYSBuZXcgZWxlbWVudC4gVGhlIG5ldyBlbGVtZW50IExrIGlzIGNvbnN0cnVjdGVkIGluIHBsYWNlIGlmIHxFa3wgPSAwLiBudltpXSBpc1xuICAgICAgLy8gbmVnYXRlZCBmb3IgYWxsIG5vZGVzIGkgaW4gTGsgdG8gZmxhZyB0aGVtIGFzIG1lbWJlcnMgb2YgdGhpcyBzZXQuIEVhY2ggbm9kZSBpIGlzIHJlbW92ZWQgZnJvbSB0aGVcbiAgICAgIC8vIGRlZ3JlZSBsaXN0cy4gQWxsIGVsZW1lbnRzIGUgaW4gRWsgYXJlIGFic29ydmVkIGludG8gZWxlbWVudCBrLlxuXG4gICAgICB2YXIgZGsgPSAwOyAvLyBmbGFnIGsgYXMgaW4gTGtcblxuICAgICAgV1tudiArIGtdID0gLW52aztcbiAgICAgIHZhciBwID0gY3B0cltrXTsgLy8gZG8gaW4gcGxhY2UgaWYgV1tlbGVuICsga10gPT09IDBcblxuICAgICAgdmFyIHBrMSA9IGVsZW5rID09PSAwID8gcCA6IGNuejtcbiAgICAgIHZhciBwazIgPSBwazE7XG5cbiAgICAgIGZvciAoazEgPSAxOyBrMSA8PSBlbGVuayArIDE7IGsxKyspIHtcbiAgICAgICAgaWYgKGsxID4gZWxlbmspIHtcbiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGtcbiAgICAgICAgICBlID0gazsgLy8gbGlzdCBvZiBub2RlcyBzdGFydHMgYXQgY2luZGV4W3BqXVxuXG4gICAgICAgICAgcGogPSBwOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBrXG5cbiAgICAgICAgICBsbiA9IFdbbGVuICsga10gLSBlbGVuaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGVcbiAgICAgICAgICBlID0gY2luZGV4W3ArK107XG4gICAgICAgICAgcGogPSBjcHRyW2VdOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBlXG5cbiAgICAgICAgICBsbiA9IFdbbGVuICsgZV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGsyID0gMTsgazIgPD0gbG47IGsyKyspIHtcbiAgICAgICAgICBpID0gY2luZGV4W3BqKytdOyAvLyBjaGVjayAgbm9kZSBpIGRlYWQsIG9yIHNlZW5cblxuICAgICAgICAgIGlmICgobnZpID0gV1tudiArIGldKSA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIFdbZGVncmVlICsgTGtdICs9IHNpemUgb2Ygbm9kZSBpXG5cblxuICAgICAgICAgIGRrICs9IG52aTsgLy8gbmVnYXRlIFdbbnYgKyBpXSB0byBkZW5vdGUgaSBpbiBMa1xuXG4gICAgICAgICAgV1tudiArIGldID0gLW52aTsgLy8gcGxhY2UgaSBpbiBMa1xuXG4gICAgICAgICAgY2luZGV4W3BrMisrXSA9IGk7XG5cbiAgICAgICAgICBpZiAoV1tuZXh0ICsgaV0gIT09IC0xKSB7XG4gICAgICAgICAgICBsYXN0W1dbbmV4dCArIGldXSA9IGxhc3RbaV07XG4gICAgICAgICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlbW92ZSBpIGZyb20gZGVncmVlIGxpc3RcblxuXG4gICAgICAgICAgaWYgKGxhc3RbaV0gIT09IC0xKSB7XG4gICAgICAgICAgICBXW25leHQgKyBsYXN0W2ldXSA9IFdbbmV4dCArIGldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBXW2hlYWQgKyBXW2RlZ3JlZSArIGldXSA9IFdbbmV4dCArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlICE9PSBrKSB7XG4gICAgICAgICAgLy8gYWJzb3JiIGUgaW50byBrXG4gICAgICAgICAgY3B0cltlXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkoayk7IC8vIGUgaXMgbm93IGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgICBXW3cgKyBlXSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY2luZGV4W2Nuei4uLm56bWF4XSBpcyBmcmVlXG5cblxuICAgICAgaWYgKGVsZW5rICE9PSAwKSB7XG4gICAgICAgIGNueiA9IHBrMjtcbiAgICAgIH0gLy8gZXh0ZXJuYWwgZGVncmVlIG9mIGsgLSB8TGtcXGl8XG5cblxuICAgICAgV1tkZWdyZWUgKyBrXSA9IGRrOyAvLyBlbGVtZW50IGsgaXMgaW4gY2luZGV4W3BrMS4ucGsyLTFdXG5cbiAgICAgIGNwdHJba10gPSBwazE7XG4gICAgICBXW2xlbiArIGtdID0gcGsyIC0gcGsxOyAvLyBrIGlzIG5vdyBhbiBlbGVtZW50XG5cbiAgICAgIFdbZWxlbiArIGtdID0gLTI7IC8vIEZpbmQgc2V0IGRpZmZlcmVuY2VzLiBUaGUgc2NhbjEgZnVuY3Rpb24gbm93IGNvbXB1dGVzIHRoZSBzZXQgZGlmZmVyZW5jZXMgfExlIFxcIExrfCBmb3IgYWxsIGVsZW1lbnRzIGUuIEF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICAgIC8vIHNjYW4sIG5vIGVudHJ5IGluIHRoZSB3IGFycmF5IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtYXJrLlxuICAgICAgLy8gY2xlYXIgdyBpZiBuZWNlc3NhcnlcblxuICAgICAgbWFyayA9IF93Y2xlYXIobWFyaywgbGVtYXgsIFcsIHcsIG4pOyAvLyBzY2FuIDE6IGZpbmQgfExlXFxMa3xcblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGlmIFdbZWxlbiArIGldIGVtcHR5LCBza2lwIGl0XG5cbiAgICAgICAgaWYgKChlbG4gPSBXW2VsZW4gKyBpXSkgPD0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIFdbbnYgKyBpXSB3YXMgbmVnYXRlZFxuXG5cbiAgICAgICAgbnZpID0gLVdbbnYgKyBpXTtcbiAgICAgICAgdmFyIHdudmkgPSBtYXJrIC0gbnZpOyAvLyBzY2FuIEVpXG5cbiAgICAgICAgZm9yIChwID0gY3B0cltpXSwgcDEgPSBjcHRyW2ldICsgZWxuIC0gMTsgcCA8PSBwMTsgcCsrKSB7XG4gICAgICAgICAgZSA9IGNpbmRleFtwXTtcblxuICAgICAgICAgIGlmIChXW3cgKyBlXSA+PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBkZWNyZW1lbnQgfExlXFxMa3xcbiAgICAgICAgICAgIFdbdyArIGVdIC09IG52aTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFdbdyArIGVdICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBlbnN1cmUgZSBpcyBhIGxpdmUgZWxlbWVudCwgMXN0IHRpbWUgZSBzZWVuIGluIHNjYW4gMVxuICAgICAgICAgICAgV1t3ICsgZV0gPSBXW2RlZ3JlZSArIGVdICsgd252aTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZGVncmVlIHVwZGF0ZVxuICAgICAgLy8gVGhlIHNlY29uZCBwYXNzIGNvbXB1dGVzIHRoZSBhcHByb3hpbWF0ZSBkZWdyZWUgZGksIHBydW5lcyB0aGUgc2V0cyBFaSBhbmQgQWksIGFuZCBjb21wdXRlcyBhIGhhc2hcbiAgICAgIC8vIGZ1bmN0aW9uIGgoaSkgZm9yIGFsbCBub2RlcyBpbiBMay5cbiAgICAgIC8vIHNjYW4yOiBkZWdyZWUgdXBkYXRlXG5cblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgLy8gY29uc2lkZXIgbm9kZSBpIGluIExrXG4gICAgICAgIGkgPSBjaW5kZXhbcGtdO1xuICAgICAgICBwMSA9IGNwdHJbaV07XG4gICAgICAgIHAyID0gcDEgKyBXW2VsZW4gKyBpXSAtIDE7XG4gICAgICAgIHBuID0gcDE7IC8vIHNjYW4gRWlcblxuICAgICAgICBmb3IgKGggPSAwLCBkID0gMCwgcCA9IHAxOyBwIDw9IHAyOyBwKyspIHtcbiAgICAgICAgICBlID0gY2luZGV4W3BdOyAvLyBjaGVjayBlIGlzIGFuIHVuYWJzb3JiZWQgZWxlbWVudFxuXG4gICAgICAgICAgaWYgKFdbdyArIGVdICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBkZXh0ID0gfExlXFxMa3xcbiAgICAgICAgICAgIHZhciBkZXh0ID0gV1t3ICsgZV0gLSBtYXJrO1xuXG4gICAgICAgICAgICBpZiAoZGV4dCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gc3VtIHVwIHRoZSBzZXQgZGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgZCArPSBkZXh0OyAvLyBrZWVwIGUgaW4gRWlcblxuICAgICAgICAgICAgICBjaW5kZXhbcG4rK10gPSBlOyAvLyBjb21wdXRlIHRoZSBoYXNoIG9mIG5vZGUgaVxuXG4gICAgICAgICAgICAgIGggKz0gZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFnZ3Jlc3NpdmUgYWJzb3JiLiBlLT5rXG4gICAgICAgICAgICAgIGNwdHJbZV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGspOyAvLyBlIGlzIGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgICAgICAgV1t3ICsgZV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBXW2VsZW4gKyBpXSA9IHxFaXxcblxuXG4gICAgICAgIFdbZWxlbiArIGldID0gcG4gLSBwMSArIDE7XG4gICAgICAgIHZhciBwMyA9IHBuO1xuICAgICAgICB2YXIgcDQgPSBwMSArIFdbbGVuICsgaV07IC8vIHBydW5lIGVkZ2VzIGluIEFpXG5cbiAgICAgICAgZm9yIChwID0gcDIgKyAxOyBwIDwgcDQ7IHArKykge1xuICAgICAgICAgIGogPSBjaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaiBkZWFkIG9yIGluIExrXG5cbiAgICAgICAgICB2YXIgbnZqID0gV1tudiArIGpdO1xuXG4gICAgICAgICAgaWYgKG52aiA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIGRlZ3JlZShpKSArPSB8anxcblxuXG4gICAgICAgICAgZCArPSBudmo7IC8vIHBsYWNlIGogaW4gbm9kZSBsaXN0IG9mIGlcblxuICAgICAgICAgIGNpbmRleFtwbisrXSA9IGo7IC8vIGNvbXB1dGUgaGFzaCBmb3Igbm9kZSBpXG5cbiAgICAgICAgICBoICs9IGo7XG4gICAgICAgIH0gLy8gY2hlY2sgZm9yIG1hc3MgZWxpbWluYXRpb25cblxuXG4gICAgICAgIGlmIChkID09PSAwKSB7XG4gICAgICAgICAgLy8gYWJzb3JiIGkgaW50byBrXG4gICAgICAgICAgY3B0cltpXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkoayk7XG4gICAgICAgICAgbnZpID0gLVdbbnYgKyBpXTsgLy8gfExrfCAtPSB8aXxcblxuICAgICAgICAgIGRrIC09IG52aTsgLy8gfGt8ICs9IFdbbnYgKyBpXVxuXG4gICAgICAgICAgbnZrICs9IG52aTtcbiAgICAgICAgICBuZWwgKz0gbnZpO1xuICAgICAgICAgIFdbbnYgKyBpXSA9IDA7IC8vIG5vZGUgaSBpcyBkZWFkXG5cbiAgICAgICAgICBXW2VsZW4gKyBpXSA9IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSBkZWdyZWUoaSlcbiAgICAgICAgICBXW2RlZ3JlZSArIGldID0gTWF0aC5taW4oV1tkZWdyZWUgKyBpXSwgZCk7IC8vIG1vdmUgZmlyc3Qgbm9kZSB0byBlbmRcblxuICAgICAgICAgIGNpbmRleFtwbl0gPSBjaW5kZXhbcDNdOyAvLyBtb3ZlIDFzdCBlbC4gdG8gZW5kIG9mIEVpXG5cbiAgICAgICAgICBjaW5kZXhbcDNdID0gY2luZGV4W3AxXTsgLy8gYWRkIGsgYXMgMXN0IGVsZW1lbnQgaW4gb2YgRWlcblxuICAgICAgICAgIGNpbmRleFtwMV0gPSBrOyAvLyBuZXcgbGVuIG9mIGFkai4gbGlzdCBvZiBub2RlIGlcblxuICAgICAgICAgIFdbbGVuICsgaV0gPSBwbiAtIHAxICsgMTsgLy8gZmluYWxpemUgaGFzaCBvZiBpXG5cbiAgICAgICAgICBoID0gKGggPCAwID8gLWggOiBoKSAlIG47IC8vIHBsYWNlIGkgaW4gaGFzaCBidWNrZXRcblxuICAgICAgICAgIFdbbmV4dCArIGldID0gV1toaGVhZCArIGhdO1xuICAgICAgICAgIFdbaGhlYWQgKyBoXSA9IGk7IC8vIHNhdmUgaGFzaCBvZiBpIGluIGxhc3RbaV1cblxuICAgICAgICAgIGxhc3RbaV0gPSBoO1xuICAgICAgICB9XG4gICAgICB9IC8vIGZpbmFsaXplIHxMa3xcblxuXG4gICAgICBXW2RlZ3JlZSArIGtdID0gZGs7XG4gICAgICBsZW1heCA9IE1hdGgubWF4KGxlbWF4LCBkayk7IC8vIGNsZWFyIHdcblxuICAgICAgbWFyayA9IF93Y2xlYXIobWFyayArIGxlbWF4LCBsZW1heCwgVywgdywgbik7IC8vIFN1cGVybm9kZSBkZXRlY3Rpb24uIFN1cGVybm9kZSBkZXRlY3Rpb24gcmVsaWVzIG9uIHRoZSBoYXNoIGZ1bmN0aW9uIGgoaSkgY29tcHV0ZWQgZm9yIGVhY2ggbm9kZSBpLlxuICAgICAgLy8gSWYgdHdvIG5vZGVzIGhhdmUgaWRlbnRpY2FsIGFkamFjZW5jeSBsaXN0cywgdGhlaXIgaGFzaCBmdW5jdGlvbnMgd2lsIGJlIGlkZW50aWNhbC5cblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGkgaXMgZGVhZCwgc2tpcCBpdFxuXG4gICAgICAgIGlmIChXW252ICsgaV0gPj0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIHNjYW4gaGFzaCBidWNrZXQgb2Ygbm9kZSBpXG5cblxuICAgICAgICBoID0gbGFzdFtpXTtcbiAgICAgICAgaSA9IFdbaGhlYWQgKyBoXTsgLy8gaGFzaCBidWNrZXQgd2lsbCBiZSBlbXB0eVxuXG4gICAgICAgIFdbaGhlYWQgKyBoXSA9IC0xO1xuXG4gICAgICAgIGZvciAoOyBpICE9PSAtMSAmJiBXW25leHQgKyBpXSAhPT0gLTE7IGkgPSBXW25leHQgKyBpXSwgbWFyaysrKSB7XG4gICAgICAgICAgbG4gPSBXW2xlbiArIGldO1xuICAgICAgICAgIGVsbiA9IFdbZWxlbiArIGldO1xuXG4gICAgICAgICAgZm9yIChwID0gY3B0cltpXSArIDE7IHAgPD0gY3B0cltpXSArIGxuIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICBXW3cgKyBjaW5kZXhbcF1dID0gbWFyaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgamxhc3QgPSBpOyAvLyBjb21wYXJlIGkgd2l0aCBhbGwgalxuXG4gICAgICAgICAgZm9yIChqID0gV1tuZXh0ICsgaV07IGogIT09IC0xOykge1xuICAgICAgICAgICAgdmFyIG9rID0gV1tsZW4gKyBqXSA9PT0gbG4gJiYgV1tlbGVuICsgal0gPT09IGVsbjtcblxuICAgICAgICAgICAgZm9yIChwID0gY3B0cltqXSArIDE7IG9rICYmIHAgPD0gY3B0cltqXSArIGxuIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICAgIC8vIGNvbXBhcmUgaSBhbmQgalxuICAgICAgICAgICAgICBpZiAoV1t3ICsgY2luZGV4W3BdXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAgIG9rID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBjaGVjayBpIGFuZCBqIGFyZSBpZGVudGljYWxcblxuXG4gICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgLy8gYWJzb3JiIGogaW50byBpXG4gICAgICAgICAgICAgIGNwdHJbal0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGkpO1xuICAgICAgICAgICAgICBXW252ICsgaV0gKz0gV1tudiArIGpdO1xuICAgICAgICAgICAgICBXW252ICsgal0gPSAwOyAvLyBub2RlIGogaXMgZGVhZFxuXG4gICAgICAgICAgICAgIFdbZWxlbiArIGpdID0gLTE7IC8vIGRlbGV0ZSBqIGZyb20gaGFzaCBidWNrZXRcblxuICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07XG4gICAgICAgICAgICAgIFdbbmV4dCArIGpsYXN0XSA9IGo7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBqIGFuZCBpIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgamxhc3QgPSBqO1xuICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIEZpbmFsaXplIG5ldyBlbGVtZW50LiBUaGUgZWxpbWluYXRpb24gb2Ygbm9kZSBrIGlzIG5lYXJseSBjb21wbGV0ZS4gQWxsIG5vZGVzIGkgaW4gTGsgYXJlIHNjYW5uZWQgb25lIGxhc3QgdGltZS5cbiAgICAgIC8vIE5vZGUgaSBpcyByZW1vdmVkIGZyb20gTGsgaWYgaXQgaXMgZGVhZC4gVGhlIGZsYWdnZWQgc3RhdHVzIG9mIG52W2ldIGlzIGNsZWFyZWQuXG5cblxuICAgICAgZm9yIChwID0gcGsxLCBwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrICBpIGlzIGRlYWQsIHNraXAgaXRcblxuICAgICAgICBpZiAoKG52aSA9IC1XW252ICsgaV0pIDw9IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyByZXN0b3JlIFdbbnYgKyBpXVxuXG5cbiAgICAgICAgV1tudiArIGldID0gbnZpOyAvLyBjb21wdXRlIGV4dGVybmFsIGRlZ3JlZShpKVxuXG4gICAgICAgIGQgPSBXW2RlZ3JlZSArIGldICsgZGsgLSBudmk7XG4gICAgICAgIGQgPSBNYXRoLm1pbihkLCBuIC0gbmVsIC0gbnZpKTtcblxuICAgICAgICBpZiAoV1toZWFkICsgZF0gIT09IC0xKSB7XG4gICAgICAgICAgbGFzdFtXW2hlYWQgKyBkXV0gPSBpO1xuICAgICAgICB9IC8vIHB1dCBpIGJhY2sgaW4gZGVncmVlIGxpc3RcblxuXG4gICAgICAgIFdbbmV4dCArIGldID0gV1toZWFkICsgZF07XG4gICAgICAgIGxhc3RbaV0gPSAtMTtcbiAgICAgICAgV1toZWFkICsgZF0gPSBpOyAvLyBmaW5kIG5ldyBtaW5pbXVtIGRlZ3JlZVxuXG4gICAgICAgIG1pbmRlZyA9IE1hdGgubWluKG1pbmRlZywgZCk7XG4gICAgICAgIFdbZGVncmVlICsgaV0gPSBkOyAvLyBwbGFjZSBpIGluIExrXG5cbiAgICAgICAgY2luZGV4W3ArK10gPSBpO1xuICAgICAgfSAvLyAjIG5vZGVzIGFic29yYmVkIGludG8ga1xuXG5cbiAgICAgIFdbbnYgKyBrXSA9IG52azsgLy8gbGVuZ3RoIG9mIGFkaiBsaXN0IG9mIGVsZW1lbnQga1xuXG4gICAgICBpZiAoKFdbbGVuICsga10gPSBwIC0gcGsxKSA9PT0gMCkge1xuICAgICAgICAvLyBrIGlzIGEgcm9vdCBvZiB0aGUgdHJlZVxuICAgICAgICBjcHRyW2tdID0gLTE7IC8vIGsgaXMgbm93IGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgV1t3ICsga10gPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbmsgIT09IDApIHtcbiAgICAgICAgLy8gZnJlZSB1bnVzZWQgc3BhY2UgaW4gTGtcbiAgICAgICAgY256ID0gcDtcbiAgICAgIH1cbiAgICB9IC8vIFBvc3RvcmRlcmluZy4gVGhlIGVsaW1pbmF0aW9uIGlzIGNvbXBsZXRlLCBidXQgbm8gcGVybXV0YXRpb24gaGFzIGJlZW4gY29tcHV0ZWQuIEFsbCB0aGF0IGlzIGxlZnRcbiAgICAvLyBvZiB0aGUgZ3JhcGggaXMgdGhlIGFzc2VtYmx5IHRyZWUgKHB0cikgYW5kIGEgc2V0IG9mIGRlYWQgbm9kZXMgYW5kIGVsZW1lbnRzIChpIGlzIGEgZGVhZCBub2RlIGlmXG4gICAgLy8gbnZbaV0gaXMgemVybyBhbmQgYSBkZWFkIGVsZW1lbnQgaWYgbnZbaV0gPiAwKS4gSXQgaXMgZnJvbSB0aGlzIGluZm9ybWF0aW9uIG9ubHkgdGhhdCB0aGUgZmluYWwgcGVybXV0YXRpb25cbiAgICAvLyBpcyBjb21wdXRlZC4gVGhlIHRyZWUgaXMgcmVzdG9yZWQgYnkgdW5mbGlwcGluZyBhbGwgb2YgcHRyLlxuICAgIC8vIGZpeCBhc3NlbWJseSB0cmVlXG5cblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNwdHJbaV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGNwdHJbaV0pO1xuICAgIH1cblxuICAgIGZvciAoaiA9IDA7IGogPD0gbjsgaisrKSB7XG4gICAgICBXW2hlYWQgKyBqXSA9IC0xO1xuICAgIH0gLy8gcGxhY2UgdW5vcmRlcmVkIG5vZGVzIGluIGxpc3RzXG5cblxuICAgIGZvciAoaiA9IG47IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBza2lwIGlmIGogaXMgYW4gZWxlbWVudFxuICAgICAgaWYgKFdbbnYgKyBqXSA+IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHBsYWNlIGogaW4gbGlzdCBvZiBpdHMgcGFyZW50XG5cblxuICAgICAgV1tuZXh0ICsgal0gPSBXW2hlYWQgKyBjcHRyW2pdXTtcbiAgICAgIFdbaGVhZCArIGNwdHJbal1dID0gajtcbiAgICB9IC8vIHBsYWNlIGVsZW1lbnRzIGluIGxpc3RzXG5cblxuICAgIGZvciAoZSA9IG47IGUgPj0gMDsgZS0tKSB7XG4gICAgICAvLyBza2lwIHVubGVzcyBlIGlzIGFuIGVsZW1lbnRcbiAgICAgIGlmIChXW252ICsgZV0gPD0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNwdHJbZV0gIT09IC0xKSB7XG4gICAgICAgIC8vIHBsYWNlIGUgaW4gbGlzdCBvZiBpdHMgcGFyZW50XG4gICAgICAgIFdbbmV4dCArIGVdID0gV1toZWFkICsgY3B0cltlXV07XG4gICAgICAgIFdbaGVhZCArIGNwdHJbZV1dID0gZTtcbiAgICAgIH1cbiAgICB9IC8vIHBvc3RvcmRlciB0aGUgYXNzZW1ibHkgdHJlZVxuXG5cbiAgICBmb3IgKGsgPSAwLCBpID0gMDsgaSA8PSBuOyBpKyspIHtcbiAgICAgIGlmIChjcHRyW2ldID09PSAtMSkge1xuICAgICAgICBrID0gKDAsIF9jc1RkZnMuY3NUZGZzKShpLCBrLCBXLCBoZWFkLCBuZXh0LCBQLCB3KTtcbiAgICAgIH1cbiAgICB9IC8vIHJlbW92ZSBsYXN0IGl0ZW0gaW4gYXJyYXlcblxuXG4gICAgUC5zcGxpY2UoUC5sZW5ndGggLSAxLCAxKTsgLy8gcmV0dXJuIFBcblxuICAgIHJldHVybiBQO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgbWF0cml4IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBhcHByb3hpbWF0ZSBtaW5pbXVtIGRlZ3JlZSBvcmRlcmluZyBhbGdvcml0aG0uIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZSBtYXRyaXggTSBhcyBpbnB1dCBhbmQgcmV0dXJucyBhIHBlcm11dGF0aW9uXG4gICAqIHZlY3RvciBQLiBUaGUgYW1kIGFsZ29yaXRobSBvcGVyYXRlcyBvbiBhIHN5bW1ldHJpeCBtYXRyaXgsIHNvIG9uZSBvZiB0aHJlZSBzeW1tZXRyaWMgbWF0cmljZXMgaXMgZm9ybWVkLlxuICAgKlxuICAgKiBPcmRlcjogMFxuICAgKiAgIEEgbmF0dXJhbCBvcmRlcmluZyBQPW51bGwgbWF0cml4IGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBPcmRlcjogMVxuICAgKiAgIE1hdHJpeCBtdXN0IGJlIHNxdWFyZS4gVGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgYSBDaG9sZXNreSBvciBMVSBmYWN0b3JpemF0aW9uLlxuICAgKiAgIFAgPSBNICsgTSdcbiAgICpcbiAgICogT3JkZXI6IDJcbiAgICogICBEZW5zZSBjb2x1bW5zIGZyb20gTScgYXJlIGRyb3BwZWQsIE0gcmVjcmVhdGVkIGZyb20gTScuIFRoaXMgaXMgYXBwcm9wcmlhdGVmb3IgTFUgZmFjdG9yaXphdGlvbiBvZiB1bnN5bW1ldHJpYyBtYXRyaWNlcy5cbiAgICogICBQID0gTScgKiBNXG4gICAqXG4gICAqIE9yZGVyOiAzXG4gICAqICAgVGhpcyBpcyBiZXN0IHVzZWQgZm9yIFFSIGZhY3Rvcml6YXRpb24gb3IgTFUgZmFjdG9yaXphdGlvbiBpcyBtYXRyaXggTSBoYXMgbm8gZGVuc2Ugcm93cy4gQSBkZW5zZSByb3cgaXMgYSByb3cgd2l0aCBtb3JlIHRoYW4gMTAqc3FyKGNvbHVtbnMpIGVudHJpZXMuXG4gICAqICAgUCA9IE0nICogTVxuICAgKi9cblxuICBmdW5jdGlvbiBfY3JlYXRlVGFyZ2V0TWF0cml4KG9yZGVyLCBhLCBtLCBuLCBkZW5zZSkge1xuICAgIC8vIGNvbXB1dGUgQSdcbiAgICB2YXIgYXQgPSB0cmFuc3Bvc2UoYSk7IC8vIGNoZWNrIG9yZGVyID0gMSwgbWF0cml4IG11c3QgYmUgc3F1YXJlXG5cbiAgICBpZiAob3JkZXIgPT09IDEgJiYgbiA9PT0gbSkge1xuICAgICAgLy8gQyA9IEEgKyBBJ1xuICAgICAgcmV0dXJuIGFkZChhLCBhdCk7XG4gICAgfSAvLyBjaGVjayBvcmRlciA9IDIsIGRyb3AgZGVuc2UgY29sdW1ucyBmcm9tIE0nXG5cblxuICAgIGlmIChvcmRlciA9PT0gMikge1xuICAgICAgLy8gdHJhbnNwb3NlIGFycmF5c1xuICAgICAgdmFyIHRpbmRleCA9IGF0Ll9pbmRleDtcbiAgICAgIHZhciB0cHRyID0gYXQuX3B0cjsgLy8gbmV3IGNvbHVtbiBpbmRleFxuXG4gICAgICB2YXIgcDIgPSAwOyAvLyBsb29wIEEnIGNvbHVtbnMgKHJvd3MpXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbTsgaisrKSB7XG4gICAgICAgIC8vIGNvbHVtbiBqIG9mIEFUIHN0YXJ0cyBoZXJlXG4gICAgICAgIHZhciBwID0gdHB0cltqXTsgLy8gbmV3IGNvbHVtbiBqIHN0YXJ0cyBoZXJlXG5cbiAgICAgICAgdHB0cltqXSA9IHAyOyAvLyBza2lwIGRlbnNlIGNvbCBqXG5cbiAgICAgICAgaWYgKHRwdHJbaiArIDFdIC0gcCA+IGRlbnNlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gbWFwIHJvd3MgaW4gY29sdW1uIGogb2YgQVxuXG5cbiAgICAgICAgZm9yICh2YXIgcDEgPSB0cHRyW2ogKyAxXTsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICB0aW5kZXhbcDIrK10gPSB0aW5kZXhbcF07XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZmluYWxpemUgQVRcblxuXG4gICAgICB0cHRyW21dID0gcDI7IC8vIHJlY3JlYXRlIEEgZnJvbSBuZXcgdHJhbnNwb3NlIG1hdHJpeFxuXG4gICAgICBhID0gdHJhbnNwb3NlKGF0KTsgLy8gdXNlIEEnICogQVxuXG4gICAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpO1xuICAgIH0gLy8gdXNlIEEnICogQSwgc3F1YXJlIG9yIHJlY3Rhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpO1xuICB9XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHF1b3RpZW50IGdyYXBoLiBUaGVyZSBhcmUgZm91ciBraW5kIG9mIG5vZGVzIGFuZCBlbGVtZW50cyB0aGF0IG11c3QgYmUgcmVwcmVzZW50ZWQ6XG4gICAqXG4gICAqICAtIEEgbGl2ZSBub2RlIGlzIGEgbm9kZSBpIChvciBhIHN1cGVybm9kZSkgdGhhdCBoYXMgbm90IGJlZW4gc2VsZWN0ZWQgYXMgYSBwaXZvdCBuYWQgaGFzIG5vdCBiZWVuIG1lcmdlZCBpbnRvIGFub3RoZXIgc3VwZXJub2RlLlxuICAgKiAgLSBBIGRlYWQgbm9kZSBpIGlzIG9uZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZ3JhcGgsIGhhdmluZyBiZWVuIGFic29ydmVkIGludG8gciA9IGZsaXAocHRyW2ldKS5cbiAgICogIC0gQSBsaXZlIGVsZW1lbnQgZSBpcyBvbmUgdGhhdCBpcyBpbiB0aGUgZ3JhcGgsIGhhdmluZyBiZWVuIGZvcm1lZCB3aGVuIG5vZGUgZSB3YXMgc2VsZWN0ZWQgYXMgdGhlIHBpdm90LlxuICAgKiAgLSBBIGRlYWQgZWxlbWVudCBlIGlzIG9uZSB0aGF0IGhhcyBiZW5uIGFic29ydmVkIGludG8gYSBzdWJzZXF1ZW50IGVsZW1lbnQgcyA9IGZsaXAocHRyW2VdKS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfaW5pdGlhbGl6ZVF1b3RpZW50R3JhcGgobiwgY3B0ciwgVywgbGVuLCBoZWFkLCBsYXN0LCBuZXh0LCBoaGVhZCwgbnYsIHcsIGVsZW4sIGRlZ3JlZSkge1xuICAgIC8vIEluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGhcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgV1tsZW4gKyBrXSA9IGNwdHJbayArIDFdIC0gY3B0cltrXTtcbiAgICB9XG5cbiAgICBXW2xlbiArIG5dID0gMDsgLy8gaW5pdGlhbGl6ZSB3b3Jrc3BhY2VcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykge1xuICAgICAgLy8gZGVncmVlIGxpc3QgaSBpcyBlbXB0eVxuICAgICAgV1toZWFkICsgaV0gPSAtMTtcbiAgICAgIGxhc3RbaV0gPSAtMTtcbiAgICAgIFdbbmV4dCArIGldID0gLTE7IC8vIGhhc2ggbGlzdCBpIGlzIGVtcHR5XG5cbiAgICAgIFdbaGhlYWQgKyBpXSA9IC0xOyAvLyBub2RlIGkgaXMganVzdCBvbmUgbm9kZVxuXG4gICAgICBXW252ICsgaV0gPSAxOyAvLyBub2RlIGkgaXMgYWxpdmVcblxuICAgICAgV1t3ICsgaV0gPSAxOyAvLyBFayBvZiBub2RlIGkgaXMgZW1wdHlcblxuICAgICAgV1tlbGVuICsgaV0gPSAwOyAvLyBkZWdyZWUgb2Ygbm9kZSBpXG5cbiAgICAgIFdbZGVncmVlICsgaV0gPSBXW2xlbiArIGldO1xuICAgIH0gLy8gY2xlYXIgd1xuXG5cbiAgICB2YXIgbWFyayA9IF93Y2xlYXIoMCwgMCwgVywgdywgbik7IC8vIG4gaXMgYSBkZWFkIGVsZW1lbnRcblxuXG4gICAgV1tlbGVuICsgbl0gPSAtMjsgLy8gbiBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZVxuXG4gICAgY3B0cltuXSA9IC0xOyAvLyBuIGlzIGEgZGVhZCBlbGVtZW50XG5cbiAgICBXW3cgKyBuXSA9IDA7IC8vIHJldHVybiBtYXJrXG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBkZWdyZWUgbGlzdHMuIEVhY2ggbm9kZSBpcyBwbGFjZWQgaW4gaXRzIGRlZ3JlZSBsaXN0cy4gTm9kZXMgb2YgemVybyBkZWdyZWUgYXJlIGVsaW1pbmF0ZWQgaW1tZWRpYXRlbHkuIE5vZGVzIHdpdGhcbiAgICogZGVncmVlID49IGRlbnNlIGFyZSBhbHNvbCBlbGltaW5hdGVkIGFuZCBtZXJnZWQgaW50byBhIHBsYWNlaG9sZGVyIG5vZGUgbiwgYSBkZWFkIGVsZW1lbnQuIFRoZXMgbm9kZXMgd2lsbCBhcHBlcmEgbGFzdCBpbiB0aGVcbiAgICogb3V0cHV0IHBlcm11dGF0aW9uIHAuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCkge1xuICAgIC8vIHJlc3VsdFxuICAgIHZhciBuZWwgPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBkZWdyZWUgQCBpXG4gICAgICB2YXIgZCA9IFdbZGVncmVlICsgaV07IC8vIGNoZWNrIG5vZGUgaSBpcyBlbXB0eVxuXG4gICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAvLyBlbGVtZW50IGkgaXMgZGVhZFxuICAgICAgICBXW2VsZW4gKyBpXSA9IC0yO1xuICAgICAgICBuZWwrKzsgLy8gaSBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZVxuXG4gICAgICAgIGNwdHJbaV0gPSAtMTtcbiAgICAgICAgV1t3ICsgaV0gPSAwO1xuICAgICAgfSBlbHNlIGlmIChkID4gZGVuc2UpIHtcbiAgICAgICAgLy8gYWJzb3JiIGkgaW50byBlbGVtZW50IG5cbiAgICAgICAgV1tudiArIGldID0gMDsgLy8gbm9kZSBpIGlzIGRlYWRcblxuICAgICAgICBXW2VsZW4gKyBpXSA9IC0xO1xuICAgICAgICBuZWwrKztcbiAgICAgICAgY3B0cltpXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkobik7XG4gICAgICAgIFdbbnYgKyBuXSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGggPSBXW2hlYWQgKyBkXTtcblxuICAgICAgICBpZiAoaCAhPT0gLTEpIHtcbiAgICAgICAgICBsYXN0W2hdID0gaTtcbiAgICAgICAgfSAvLyBwdXQgbm9kZSBpIGluIGRlZ3JlZSBsaXN0IGRcblxuXG4gICAgICAgIFdbbmV4dCArIGldID0gV1toZWFkICsgZF07XG4gICAgICAgIFdbaGVhZCArIGRdID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmVsO1xuICB9XG5cbiAgZnVuY3Rpb24gX3djbGVhcihtYXJrLCBsZW1heCwgVywgdywgbikge1xuICAgIGlmIChtYXJrIDwgMiB8fCBtYXJrICsgbGVtYXggPCAwKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgICBpZiAoV1t3ICsga10gIT09IDApIHtcbiAgICAgICAgICBXW3cgKyBrXSA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWFyayA9IDI7XG4gICAgfSAvLyBhdCB0aGlzIHBvaW50LCBXIFswLi5uLTFdIDwgbWFyayBob2xkc1xuXG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaWFnKGksIGopIHtcbiAgICByZXR1cm4gaSAhPT0gajtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQW1kID0gY3JlYXRlQ3NBbWQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQ291bnRzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc0xlYWYgPSByZXF1aXJlKFwiLi9jc0xlYWZcIik7XG5cbnZhciBuYW1lID0gJ2NzQ291bnRzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3RyYW5zcG9zZSddO1xudmFyIGNyZWF0ZUNzQ291bnRzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgY29sdW1uIGNvdW50cyB1c2luZyB0aGUgdXBwZXIgdHJpYW5ndWxhciBwYXJ0IG9mIEEuXG4gICAqIEl0IHRyYW5zcG9zZXMgQSBpbnRlcm5hbGx5LCBub25lIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBtb2RpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgIFRoZSBzcGFyc2UgbWF0cml4IEFcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGF0YSAgICAgICAgIENvdW50IHRoZSBjb2x1bW5zIG9mIEEnQSBpbnN0ZWFkXG4gICAqXG4gICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICBBbiBhcnJheSBvZiBzaXplIG4gb2YgdGhlIGNvbHVtbiBjb3VudHMgb3IgbnVsbCBvbiBlcnJvclxuICAgKlxuICAgKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBwYXJlbnQsIHBvc3QsIGF0YSkge1xuICAgIC8vIGNoZWNrIGlucHV0c1xuICAgIGlmICghYSB8fCAhcGFyZW50IHx8ICFwb3N0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGEgbWF0cml4IGFycmF5c1xuXG5cbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbSA9IGFzaXplWzBdO1xuICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcmlhYmxlc1xuXG4gICAgdmFyIGksIGosIGssIEosIHAsIHAwLCBwMTsgLy8gd29ya3NwYWNlIHNpemVcblxuICAgIHZhciBzID0gNCAqIG4gKyAoYXRhID8gbiArIG0gKyAxIDogMCk7IC8vIGFsbG9jYXRlIHdvcmtzcGFjZVxuXG4gICAgdmFyIHcgPSBbXTsgLy8gKHMpXG5cbiAgICB2YXIgYW5jZXN0b3IgPSAwOyAvLyBmaXJzdCBuIGVudHJpZXNcblxuICAgIHZhciBtYXhmaXJzdCA9IG47IC8vIG5leHQgbiBlbnRyaWVzXG5cbiAgICB2YXIgcHJldmxlYWYgPSAyICogbjsgLy8gbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciBmaXJzdCA9IDMgKiBuOyAvLyBuZXh0IG4gZW50cmllc1xuXG4gICAgdmFyIGhlYWQgPSA0ICogbjsgLy8gbmV4dCBuICsgMSBlbnRyaWVzICh1c2VkIHdoZW4gYXRhIGlzIHRydWUpXG5cbiAgICB2YXIgbmV4dCA9IDUgKiBuICsgMTsgLy8gbGFzdCBlbnRyaWVzIGluIHdvcmtzcGFjZVxuICAgIC8vIGNsZWFyIHdvcmtzcGFjZSB3WzAuLnMtMV1cblxuICAgIGZvciAoayA9IDA7IGsgPCBzOyBrKyspIHtcbiAgICAgIHdba10gPSAtMTtcbiAgICB9IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG5cbiAgICB2YXIgY29sY291bnQgPSBbXTsgLy8gKG4pXG4gICAgLy8gQVQgPSBBJ1xuXG4gICAgdmFyIGF0ID0gdHJhbnNwb3NlKGEpOyAvLyBhdCBhcnJheXNcblxuICAgIHZhciB0aW5kZXggPSBhdC5faW5kZXg7XG4gICAgdmFyIHRwdHIgPSBhdC5fcHRyOyAvLyBmaW5kIHdbZmlyc3QgKyBqXVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgaiA9IHBvc3Rba107IC8vIGNvbGNvdW50W2pdPTEgaWYgaiBpcyBhIGxlYWZcblxuICAgICAgY29sY291bnRbal0gPSB3W2ZpcnN0ICsgal0gPT09IC0xID8gMSA6IDA7XG5cbiAgICAgIGZvciAoOyBqICE9PSAtMSAmJiB3W2ZpcnN0ICsgal0gPT09IC0xOyBqID0gcGFyZW50W2pdKSB7XG4gICAgICAgIHdbZmlyc3QgKyBqXSA9IGs7XG4gICAgICB9XG4gICAgfSAvLyBpbml0aWFsaXplIGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKGF0YSkge1xuICAgICAgLy8gaW52ZXJ0IHBvc3RcbiAgICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgd1twb3N0W2tdXSA9IGs7XG4gICAgICB9IC8vIGxvb3Agcm93cyAoY29sdW1ucyBpbiBBVClcblxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIC8vIHZhbHVlcyBpbiBjb2x1bW4gaSBvZiBBVFxuICAgICAgICBmb3IgKGsgPSBuLCBwMCA9IHRwdHJbaV0sIHAxID0gdHB0cltpICsgMV0sIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICBrID0gTWF0aC5taW4oaywgd1t0aW5kZXhbcF1dKTtcbiAgICAgICAgfSAvLyBwbGFjZSByb3cgaSBpbiBsaW5rZWQgbGlzdCBrXG5cblxuICAgICAgICB3W25leHQgKyBpXSA9IHdbaGVhZCArIGtdO1xuICAgICAgICB3W2hlYWQgKyBrXSA9IGk7XG4gICAgICB9XG4gICAgfSAvLyBlYWNoIG5vZGUgaW4gaXRzIG93biBzZXRcblxuXG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgd1thbmNlc3RvciArIGldID0gaTtcbiAgICB9XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyBqIGlzIHRoZSBrdGggbm9kZSBpbiBwb3N0b3JkZXJlZCBldHJlZVxuICAgICAgaiA9IHBvc3Rba107IC8vIGNoZWNrIGogaXMgbm90IGEgcm9vdFxuXG4gICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dLS07XG4gICAgICB9IC8vIEo9aiBmb3IgTEwnPUEgY2FzZVxuXG5cbiAgICAgIGZvciAoSiA9IGF0YSA/IHdbaGVhZCArIGtdIDogajsgSiAhPT0gLTE7IEogPSBhdGEgPyB3W25leHQgKyBKXSA6IC0xKSB7XG4gICAgICAgIGZvciAocCA9IHRwdHJbSl07IHAgPCB0cHRyW0ogKyAxXTsgcCsrKSB7XG4gICAgICAgICAgaSA9IHRpbmRleFtwXTtcbiAgICAgICAgICB2YXIgciA9ICgwLCBfY3NMZWFmLmNzTGVhZikoaSwgaiwgdywgZmlyc3QsIG1heGZpcnN0LCBwcmV2bGVhZiwgYW5jZXN0b3IpOyAvLyBjaGVjayBBKGksaikgaXMgaW4gc2tlbGV0b25cblxuICAgICAgICAgIGlmIChyLmpsZWFmID49IDEpIHtcbiAgICAgICAgICAgIGNvbGNvdW50W2pdKys7XG4gICAgICAgICAgfSAvLyBjaGVjayBhY2NvdW50IGZvciBvdmVybGFwIGluIHFcblxuXG4gICAgICAgICAgaWYgKHIuamxlYWYgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbGNvdW50W3IucV0tLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudFtqXSAhPT0gLTEpIHtcbiAgICAgICAgd1thbmNlc3RvciArIGpdID0gcGFyZW50W2pdO1xuICAgICAgfVxuICAgIH0gLy8gc3VtIHVwIGNvbGNvdW50J3Mgb2YgZWFjaCBjaGlsZFxuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dICs9IGNvbGNvdW50W2pdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb2xjb3VudDtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0NvdW50cyA9IGNyZWF0ZUNzQ291bnRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0RmcyA9IGNzRGZzO1xuXG52YXIgX2NzTWFya2VkID0gcmVxdWlyZShcIi4vY3NNYXJrZWRcIik7XG5cbnZhciBfY3NNYXJrID0gcmVxdWlyZShcIi4vY3NNYXJrXCIpO1xuXG52YXIgX2NzVW5mbGlwID0gcmVxdWlyZShcIi4vY3NVbmZsaXBcIik7XG5cbi8qKlxuICogRGVwdGgtZmlyc3Qgc2VhcmNoIGNvbXB1dGVzIHRoZSBub256ZXJvIHBhdHRlcm4geGkgb2YgdGhlIGRpcmVjdGVkIGdyYXBoIEcgKE1hdHJpeCkgc3RhcnRpbmdcbiAqIGF0IG5vZGVzIGluIEIgKHNlZSBjc1JlYWNoKCkpLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaiAgICAgICAgICAgICAgIFRoZSBzdGFydGluZyBub2RlIGZvciB0aGUgREZTIGFsZ29yaXRobVxuICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4IHRvIHNlYXJjaCwgcHRyIGFycmF5IG1vZGlmaWVkLCB0aGVuIHJlc3RvcmVkXG4gKiBAcGFyYW0ge051bWJlcn0gIHRvcCAgICAgICAgICAgICBTdGFydCBpbmRleCBpbiBzdGFjayB4aVt0b3AuLm4tMV1cbiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEJcbiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yLCBtdXN0IGJlIG51bGwgZm9yIEwgKiB4ID0gYlxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIE5ldyB2YWx1ZSBvZiB0b3BcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc0RmcyhqLCBnLCB0b3AsIHhpLCBwaW52KSB7XG4gIC8vIGcgYXJyYXlzXG4gIHZhciBpbmRleCA9IGcuX2luZGV4O1xuICB2YXIgcHRyID0gZy5fcHRyO1xuICB2YXIgc2l6ZSA9IGcuX3NpemU7IC8vIGNvbHVtbnNcblxuICB2YXIgbiA9IHNpemVbMV07IC8vIHZhcnNcblxuICB2YXIgaSwgcCwgcDI7IC8vIGluaXRpYWxpemUgaGVhZFxuXG4gIHZhciBoZWFkID0gMDsgLy8gaW5pdGlhbGl6ZSB0aGUgcmVjdXJzaW9uIHN0YWNrXG5cbiAgeGlbMF0gPSBqOyAvLyBsb29wXG5cbiAgd2hpbGUgKGhlYWQgPj0gMCkge1xuICAgIC8vIGdldCBqIGZyb20gdGhlIHRvcCBvZiB0aGUgcmVjdXJzaW9uIHN0YWNrXG4gICAgaiA9IHhpW2hlYWRdOyAvLyBhcHBseSBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBqbmV3ID0gcGludiA/IHBpbnZbal0gOiBqOyAvLyBjaGVjayBub2RlIGogaXMgbWFya2VkXG5cbiAgICBpZiAoISgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKHB0ciwgaikpIHtcbiAgICAgIC8vIG1hcmsgbm9kZSBqIGFzIHZpc2l0ZWRcbiAgICAgICgwLCBfY3NNYXJrLmNzTWFyaykocHRyLCBqKTsgLy8gdXBkYXRlIHN0YWNrIChsYXN0IG4gZW50cmllcyBpbiB4aSlcblxuICAgICAgeGlbbiArIGhlYWRdID0gam5ldyA8IDAgPyAwIDogKDAsIF9jc1VuZmxpcC5jc1VuZmxpcCkocHRyW2puZXddKTtcbiAgICB9IC8vIG5vZGUgaiBkb25lIGlmIG5vIHVudmlzaXRlZCBuZWlnaGJvcnNcblxuXG4gICAgdmFyIGRvbmUgPSAxOyAvLyBleGFtaW5lIGFsbCBuZWlnaGJvcnMgb2Ygaiwgc3RhY2sgKGxhc3QgbiBlbnRyaWVzIGluIHhpKVxuXG4gICAgZm9yIChwID0geGlbbiArIGhlYWRdLCBwMiA9IGpuZXcgPCAwID8gMCA6ICgwLCBfY3NVbmZsaXAuY3NVbmZsaXApKHB0cltqbmV3ICsgMV0pOyBwIDwgcDI7IHArKykge1xuICAgICAgLy8gY29uc2lkZXIgbmVpZ2hib3Igbm9kZSBpXG4gICAgICBpID0gaW5kZXhbcF07IC8vIGNoZWNrIHdlIGhhdmUgdmlzaXRlZCBub2RlIGksIHNraXAgaXRcblxuICAgICAgaWYgKCgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKHB0ciwgaSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHBhdXNlIGRlcHRoLWZpcnN0IHNlYXJjaCBvZiBub2RlIGosIHVwZGF0ZSBzdGFjayAobGFzdCBuIGVudHJpZXMgaW4geGkpXG5cblxuICAgICAgeGlbbiArIGhlYWRdID0gcDsgLy8gc3RhcnQgZGZzIGF0IG5vZGUgaVxuXG4gICAgICB4aVsrK2hlYWRdID0gaTsgLy8gbm9kZSBqIGlzIG5vdCBkb25lXG5cbiAgICAgIGRvbmUgPSAwOyAvLyBicmVhaywgdG8gc3RhcnQgZGZzKGkpXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gLy8gY2hlY2sgZGVwdGgtZmlyc3Qgc2VhcmNoIGF0IG5vZGUgaiBpcyBkb25lXG5cblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyByZW1vdmUgaiBmcm9tIHRoZSByZWN1cnNpb24gc3RhY2tcbiAgICAgIGhlYWQtLTsgLy8gYW5kIHBsYWNlIGluIHRoZSBvdXRwdXQgc3RhY2tcblxuICAgICAgeGlbLS10b3BdID0gajtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9wO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0V0cmVlID0gY3NFdHJlZTtcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgZWxpbWluYXRpb24gdHJlZSBvZiBNYXRyaXggQSAodXNpbmcgdHJpdShBKSkgb3IgdGhlXG4gKiBlbGltaW5hdGlvbiB0cmVlIG9mIEEnQSB3aXRob3V0IGZvcm1pbmcgQSdBLlxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgYSAgICAgICAgICAgICAgIFRoZSBBIE1hdHJpeFxuICogQHBhcmFtIHtib29sZWFufSBhdGEgICAgICAgICAgICAgQSB2YWx1ZSBvZiB0cnVlIHRoZSBmdW5jdGlvbiBjb21wdXRlcyB0aGUgZXRyZWUgb2YgQSdBXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NFdHJlZShhLCBhdGEpIHtcbiAgLy8gY2hlY2sgaW5wdXRzXG4gIGlmICghYSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGEgYXJyYXlzXG5cblxuICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gIHZhciBhcHRyID0gYS5fcHRyO1xuICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1uc1xuXG4gIHZhciBtID0gYXNpemVbMF07XG4gIHZhciBuID0gYXNpemVbMV07IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG4gIHZhciBwYXJlbnQgPSBbXTsgLy8gKG4pXG4gIC8vIGFsbG9jYXRlIHdvcmtzcGFjZVxuXG4gIHZhciB3ID0gW107IC8vIChuICsgKGF0YSA/IG0gOiAwKSlcblxuICB2YXIgYW5jZXN0b3IgPSAwOyAvLyBmaXJzdCBuIGVudHJpZXMgaW4gd1xuXG4gIHZhciBwcmV2ID0gbjsgLy8gbGFzdCBtIGVudHJpZXMgKGF0YSA9IHRydWUpXG5cbiAgdmFyIGksIGluZXh0OyAvLyBjaGVjayB3ZSBhcmUgY2FsY3VsYXRpbmcgQSdBXG5cbiAgaWYgKGF0YSkge1xuICAgIC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgd1twcmV2ICsgaV0gPSAtMTtcbiAgICB9XG4gIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgIC8vIG5vZGUgayBoYXMgbm8gcGFyZW50IHlldFxuICAgIHBhcmVudFtrXSA9IC0xOyAvLyBub3IgZG9lcyBrIGhhdmUgYW4gYW5jZXN0b3JcblxuICAgIHdbYW5jZXN0b3IgKyBrXSA9IC0xOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGtcblxuICAgIGZvciAodmFyIHAwID0gYXB0cltrXSwgcDEgPSBhcHRyW2sgKyAxXSwgcCA9IHAwOyBwIDwgcDE7IHArKykge1xuICAgICAgLy8gcm93XG4gICAgICB2YXIgciA9IGFpbmRleFtwXTsgLy8gbm9kZVxuXG4gICAgICBpID0gYXRhID8gd1twcmV2ICsgcl0gOiByOyAvLyB0cmF2ZXJzZSBmcm9tIGkgdG8ga1xuXG4gICAgICBmb3IgKDsgaSAhPT0gLTEgJiYgaSA8IGs7IGkgPSBpbmV4dCkge1xuICAgICAgICAvLyBpbmV4dCA9IGFuY2VzdG9yIG9mIGlcbiAgICAgICAgaW5leHQgPSB3W2FuY2VzdG9yICsgaV07IC8vIHBhdGggY29tcHJlc3Npb25cblxuICAgICAgICB3W2FuY2VzdG9yICsgaV0gPSBrOyAvLyBjaGVjayBubyBhbmMuLCBwYXJlbnQgaXMga1xuXG4gICAgICAgIGlmIChpbmV4dCA9PT0gLTEpIHtcbiAgICAgICAgICBwYXJlbnRbaV0gPSBrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhdGEpIHtcbiAgICAgICAgd1twcmV2ICsgcl0gPSBrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzRmtlZXAgPSBjc0ZrZWVwO1xuXG4vKipcbiAqIEtlZXBzIGVudHJpZXMgaW4gdGhlIG1hdHJpeCB3aGVuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHJlbW92ZXMgdGhlIGVudHJ5IG90aGVyd2lzZVxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgIFRoZSBzcGFyc2UgbWF0cml4XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24sIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJnczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgZW50cnkgcm93XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIGVudHJ5IGNvbHVtblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBlbnRyeSB2YWx1ZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7YW55fSAgICAgIG90aGVyICAgICAgICAgIFRoZSBzdGF0ZVxuICpcbiAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiB0aGUgbWF0cml4XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NGa2VlcChhLCBjYWxsYmFjaywgb3RoZXIpIHtcbiAgLy8gYSBhcnJheXNcbiAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIGNvbHVtbnNcblxuICB2YXIgbiA9IGFzaXplWzFdOyAvLyBub256ZXJvIGl0ZW1zXG5cbiAgdmFyIG56ID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBnZXQgY3VycmVudCBsb2NhdGlvbiBvZiBjb2wgalxuICAgIHZhciBwID0gYXB0cltqXTsgLy8gcmVjb3JkIG5ldyBsb2NhdGlvbiBvZiBjb2wgalxuXG4gICAgYXB0cltqXSA9IG56O1xuXG4gICAgZm9yICg7IHAgPCBhcHRyW2ogKyAxXTsgcCsrKSB7XG4gICAgICAvLyBjaGVjayB3ZSBuZWVkIHRvIGtlZXAgdGhpcyBpdGVtXG4gICAgICBpZiAoY2FsbGJhY2soYWluZGV4W3BdLCBqLCBhdmFsdWVzID8gYXZhbHVlc1twXSA6IDEsIG90aGVyKSkge1xuICAgICAgICAvLyBrZWVwIEEoaSxqKVxuICAgICAgICBhaW5kZXhbbnpdID0gYWluZGV4W3BdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG9ubHkpXG5cbiAgICAgICAgaWYgKGF2YWx1ZXMpIHtcbiAgICAgICAgICBhdmFsdWVzW256XSA9IGF2YWx1ZXNbcF07XG4gICAgICAgIH0gLy8gaW5jcmVtZW50IG5vbnplcm8gaXRlbXNcblxuXG4gICAgICAgIG56Kys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGZpbmFsaXplIEFcblxuXG4gIGFwdHJbbl0gPSBuejsgLy8gdHJpbSBhcnJheXNcblxuICBhaW5kZXguc3BsaWNlKG56LCBhaW5kZXgubGVuZ3RoIC0gbnopOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG9ubHkpXG5cbiAgaWYgKGF2YWx1ZXMpIHtcbiAgICBhdmFsdWVzLnNwbGljZShueiwgYXZhbHVlcy5sZW5ndGggLSBueik7XG4gIH0gLy8gcmV0dXJuIG51bWJlciBvZiBub256ZXJvIGl0ZW1zXG5cblxuICByZXR1cm4gbno7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzRmxpcCA9IGNzRmxpcDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIFwiZmxpcHNcIiBpdHMgaW5wdXQgYWJvdXQgdGhlIGludGVnZXIgLTEuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICBpICAgICAgICAgICAgICAgVGhlIHZhbHVlIHRvIGZsaXBcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc0ZsaXAoaSkge1xuICAvLyBmbGlwIHRoZSB2YWx1ZVxuICByZXR1cm4gLWkgLSAyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0lwdmVjID0gY3NJcHZlYztcblxuLyoqXG4gKiBQZXJtdXRlcyBhIHZlY3RvcjsgeCA9IFAnYi4gSW4gTUFUTEFCIG5vdGF0aW9uLCB4KHApPWIuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcCAgICAgICAgICAgVGhlIHBlcm11dGF0aW9uIHZlY3RvciBvZiBsZW5ndGggbi4gbnVsbCB2YWx1ZSBkZW5vdGVzIGlkZW50aXR5XG4gKiBAcGFyYW0ge0FycmF5fSBiICAgICAgICAgICBUaGUgaW5wdXQgdmVjdG9yXG4gKlxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgVGhlIG91dHB1dCB2ZWN0b3IgeCA9IFAnYlxuICovXG5mdW5jdGlvbiBjc0lwdmVjKHAsIGIpIHtcbiAgLy8gdmFyc1xuICB2YXIgaztcbiAgdmFyIG4gPSBiLmxlbmd0aDtcbiAgdmFyIHggPSBbXTsgLy8gY2hlY2sgcGVybXV0YXRpb24gdmVjdG9yIHdhcyBwcm92aWRlZCwgcCA9IG51bGwgZGVub3RlcyBpZGVudGl0eVxuXG4gIGlmIChwKSB7XG4gICAgLy8gbG9vcCB2ZWN0b3JcbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyBhcHBseSBwZXJtdXRhdGlvblxuICAgICAgeFtwW2tdXSA9IGJba107XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGxvb3AgdmVjdG9yXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8geFtpXSA9IGJbaV1cbiAgICAgIHhba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB4O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0xlYWYgPSBjc0xlYWY7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGogaXMgYSBsZWFmIG9mIHRoZSBpdGggcm93IHN1YnRyZWUuXG4gKiBDb25zaWRlciBBKGksaiksIG5vZGUgaiBpbiBpdGggcm93IHN1YnRyZWUgYW5kIHJldHVybiBsY2EoanByZXYsailcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgaXRoIHJvdyBzdWJ0cmVlXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgbm9kZSB0byB0ZXN0XG4gKiBAcGFyYW0ge0FycmF5fSAgIHcgICAgICAgICAgICAgICBUaGUgd29ya3NwYWNlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGZpcnN0ICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgZmlyc3QgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgbWF4Zmlyc3QgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBtYXhmaXJzdCBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9ICBwcmV2bGVhZiAgICAgICAgVGhlIGluZGV4IG9mZnNldCB3aXRoaW4gdGhlIHdvcmtzcGFjZSBmb3IgdGhlIHByZXZsZWFmIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGFuY2VzdG9yICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgYW5jZXN0b3IgYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NMZWFmKGksIGosIHcsIGZpcnN0LCBtYXhmaXJzdCwgcHJldmxlYWYsIGFuY2VzdG9yKSB7XG4gIHZhciBzLCBzcGFyZW50OyAvLyBvdXIgcmVzdWx0XG5cbiAgdmFyIGpsZWFmID0gMDtcbiAgdmFyIHE7IC8vIGNoZWNrIGogaXMgYSBsZWFmXG5cbiAgaWYgKGkgPD0gaiB8fCB3W2ZpcnN0ICsgal0gPD0gd1ttYXhmaXJzdCArIGldKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IC8vIHVwZGF0ZSBtYXggZmlyc3Rbal0gc2VlbiBzbyBmYXJcblxuXG4gIHdbbWF4Zmlyc3QgKyBpXSA9IHdbZmlyc3QgKyBqXTsgLy8ganByZXYgPSBwcmV2aW91cyBsZWFmIG9mIGl0aCBzdWJ0cmVlXG5cbiAgdmFyIGpwcmV2ID0gd1twcmV2bGVhZiArIGldO1xuICB3W3ByZXZsZWFmICsgaV0gPSBqOyAvLyBjaGVjayBqIGlzIGZpcnN0IG9yIHN1YnNlcXVlbnQgbGVhZlxuXG4gIGlmIChqcHJldiA9PT0gLTEpIHtcbiAgICAvLyAxc3QgbGVhZiwgcSA9IHJvb3Qgb2YgaXRoIHN1YnRyZWVcbiAgICBqbGVhZiA9IDE7XG4gICAgcSA9IGk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXBkYXRlIGpsZWFmXG4gICAgamxlYWYgPSAyOyAvLyBxID0gbGVhc3QgY29tbW9uIGFuY2VzdGVyIChqcHJldixqKVxuXG4gICAgZm9yIChxID0ganByZXY7IHEgIT09IHdbYW5jZXN0b3IgKyBxXTsgcSA9IHdbYW5jZXN0b3IgKyBxXSkge1xuICAgICAgO1xuICAgIH1cblxuICAgIGZvciAocyA9IGpwcmV2OyBzICE9PSBxOyBzID0gc3BhcmVudCkge1xuICAgICAgLy8gcGF0aCBjb21wcmVzc2lvblxuICAgICAgc3BhcmVudCA9IHdbYW5jZXN0b3IgKyBzXTtcbiAgICAgIHdbYW5jZXN0b3IgKyBzXSA9IHE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBqbGVhZjogamxlYWYsXG4gICAgcTogcVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0x1ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc1Nwc29sdmUgPSByZXF1aXJlKFwiLi9jc1Nwc29sdmVcIik7XG5cbnZhciBuYW1lID0gJ2NzTHUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnYWJzJywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseScsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlQ3NMdSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGNzU3Bzb2x2ZSA9ICgwLCBfY3NTcHNvbHZlLmNyZWF0ZUNzU3Bzb2x2ZSkoe1xuICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3RcbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgbnVtZXJpYyBMVSBmYWN0b3JpemF0aW9uIG9mIHRoZSBzcGFyc2UgbWF0cml4IEEuIEltcGxlbWVudHMgYSBMZWZ0LWxvb2tpbmcgTFUgZmFjdG9yaXphdGlvblxuICAgKiBhbGdvcml0aG0gdGhhdCBjb21wdXRlcyBMIGFuZCBVIG9uZSBjb2x1bW4gYXQgYSB0dW1lLiBBdCB0aGUga3RoIHN0ZXAsIGl0IGFjY2VzcyBjb2x1bW5zIDEgdG8gay0xIG9mIExcbiAgICogYW5kIGNvbHVtbiBrIG9mIEEuIEdpdmVuIHRoZSBmaWxsLXJlZHVjaW5nIGNvbHVtbiBvcmRlcmluZyBxIChzZWUgcGFyYW1ldGVyIHMpIGNvbXB1dGVzIEwsIFUgYW5kIHBpbnYgc29cbiAgICogTCAqIFUgPSBBKHAsIHEpLCB3aGVyZSBwIGlzIHRoZSBpbnZlcnNlIG9mIHBpbnYuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgbSAgICAgICAgICAgICAgIFRoZSBBIE1hdHJpeCB0byBmYWN0b3JpemVcbiAgICogQHBhcmFtIHtPYmplY3R9ICBzICAgICAgICAgICAgICAgVGhlIHN5bWJvbGljIGFuYWx5c2lzIGZyb20gY3NTcXIoKS4gUHJvdmlkZXMgdGhlIGZpbGwtcmVkdWNpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIG9yZGVyaW5nIHFcbiAgICogQHBhcmFtIHtOdW1iZXJ9ICB0b2wgICAgICAgICAgICAgUGFydGlhbCBwaXZvdGluZyB0aHJlc2hvbGQgKDEgZm9yIHBhcnRpYWwgcGl2b3RpbmcpXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIFRoZSBudW1lcmljIExVIGZhY3Rvcml6YXRpb24gb2YgQSBvciBudWxsXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBjc0x1KG0sIHMsIHRvbCkge1xuICAgIC8vIHZhbGlkYXRlIGlucHV0XG4gICAgaWYgKCFtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIG0gYXJyYXlzXG5cblxuICAgIHZhciBzaXplID0gbS5fc2l6ZTsgLy8gY29sdW1uc1xuXG4gICAgdmFyIG4gPSBzaXplWzFdOyAvLyBzeW1ib2xpYyBhbmFseXNpcyByZXN1bHRcblxuICAgIHZhciBxO1xuICAgIHZhciBsbnogPSAxMDA7XG4gICAgdmFyIHVueiA9IDEwMDsgLy8gdXBkYXRlIHN5bWJvbGljIGFuYWx5c2lzIHBhcmFtZXRlcnNcblxuICAgIGlmIChzKSB7XG4gICAgICBxID0gcy5xO1xuICAgICAgbG56ID0gcy5sbnogfHwgbG56O1xuICAgICAgdW56ID0gcy51bnogfHwgdW56O1xuICAgIH0gLy8gTCBhcnJheXNcblxuXG4gICAgdmFyIGx2YWx1ZXMgPSBbXTsgLy8gKGxueilcblxuICAgIHZhciBsaW5kZXggPSBbXTsgLy8gKGxueilcblxuICAgIHZhciBscHRyID0gW107IC8vIChuICsgMSlcbiAgICAvLyBMXG5cbiAgICB2YXIgTCA9IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBsdmFsdWVzLFxuICAgICAgaW5kZXg6IGxpbmRleCxcbiAgICAgIHB0cjogbHB0cixcbiAgICAgIHNpemU6IFtuLCBuXVxuICAgIH0pOyAvLyBVIGFycmF5c1xuXG4gICAgdmFyIHV2YWx1ZXMgPSBbXTsgLy8gKHVueilcblxuICAgIHZhciB1aW5kZXggPSBbXTsgLy8gKHVueilcblxuICAgIHZhciB1cHRyID0gW107IC8vIChuICsgMSlcbiAgICAvLyBVXG5cbiAgICB2YXIgVSA9IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB1dmFsdWVzLFxuICAgICAgaW5kZXg6IHVpbmRleCxcbiAgICAgIHB0cjogdXB0cixcbiAgICAgIHNpemU6IFtuLCBuXVxuICAgIH0pOyAvLyBpbnZlcnNlIG9mIHBlcm11dGF0aW9uIHZlY3RvclxuXG4gICAgdmFyIHBpbnYgPSBbXTsgLy8gKG4pXG4gICAgLy8gdmFyc1xuXG4gICAgdmFyIGksIHA7IC8vIGFsbG9jYXRlIGFycmF5c1xuXG4gICAgdmFyIHggPSBbXTsgLy8gKG4pXG5cbiAgICB2YXIgeGkgPSBbXTsgLy8gKDIgKiBuKVxuICAgIC8vIGluaXRpYWxpemUgdmFyaWFibGVzXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBjbGVhciB3b3Jrc3BhY2VcbiAgICAgIHhbaV0gPSAwOyAvLyBubyByb3dzIHBpdm90YWwgeWV0XG5cbiAgICAgIHBpbnZbaV0gPSAtMTsgLy8gbm8gY29scyBvZiBMIHlldFxuXG4gICAgICBscHRyW2kgKyAxXSA9IDA7XG4gICAgfSAvLyByZXNldCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiBMIGFuZCBVXG5cblxuICAgIGxueiA9IDA7XG4gICAgdW56ID0gMDsgLy8gY29tcHV0ZSBMKDosaykgYW5kIFUoOixrKVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGxwdHJba10gPSBsbno7XG4gICAgICB1cHRyW2tdID0gdW56OyAvLyBhcHBseSBjb2x1bW4gcGVybXV0YXRpb25zIGlmIG5lZWRlZFxuXG4gICAgICB2YXIgY29sID0gcSA/IHFba10gOiBrOyAvLyBzb2x2ZSB0cmlhbmd1bGFyIHN5c3RlbSwgeCA9IExcXEEoOixjb2wpXG5cbiAgICAgIHZhciB0b3AgPSBjc1Nwc29sdmUoTCwgbSwgY29sLCB4aSwgeCwgcGludiwgMSk7IC8vIGZpbmQgcGl2b3RcblxuICAgICAgdmFyIGlwaXYgPSAtMTtcbiAgICAgIHZhciBhID0gLTE7IC8vIGxvb3AgeGlbXSBmcm9tIHRvcCAtPiBuXG5cbiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgICAvLyB4W2ldIGlzIG5vbnplcm9cbiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayByb3cgaSBpcyBub3QgeWV0IHBpdm90YWxcblxuICAgICAgICBpZiAocGludltpXSA8IDApIHtcbiAgICAgICAgICAvLyBhYnNvbHV0ZSB2YWx1ZSBvZiB4W2ldXG4gICAgICAgICAgdmFyIHhhYnMgPSBhYnMoeFtpXSk7IC8vIGNoZWNrIGFic291bHRlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdCB2YWx1ZVxuXG4gICAgICAgICAgaWYgKGxhcmdlcih4YWJzLCBhKSkge1xuICAgICAgICAgICAgLy8gbGFyZ2VzdCBwaXZvdCBjYW5kaWRhdGUgc28gZmFyXG4gICAgICAgICAgICBhID0geGFicztcbiAgICAgICAgICAgIGlwaXYgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB4KGkpIGlzIHRoZSBlbnRyeSBVKHBpbnZbaV0saylcbiAgICAgICAgICB1aW5kZXhbdW56XSA9IHBpbnZbaV07XG4gICAgICAgICAgdXZhbHVlc1t1bnorK10gPSB4W2ldO1xuICAgICAgICB9XG4gICAgICB9IC8vIHZhbGlkYXRlIHdlIGZvdW5kIGEgdmFsaWQgcGl2b3RcblxuXG4gICAgICBpZiAoaXBpdiA9PT0gLTEgfHwgYSA8PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyB1cGRhdGUgYWN0dWFsIHBpdm90IGNvbHVtbiwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGRpYWdvbmFsIHZhbHVlXG5cblxuICAgICAgaWYgKHBpbnZbY29sXSA8IDAgJiYgbGFyZ2VyRXEoYWJzKHhbY29sXSksIG11bHRpcGx5KGEsIHRvbCkpKSB7XG4gICAgICAgIGlwaXYgPSBjb2w7XG4gICAgICB9IC8vIHRoZSBjaG9zZW4gcGl2b3RcblxuXG4gICAgICB2YXIgcGl2b3QgPSB4W2lwaXZdOyAvLyBsYXN0IGVudHJ5IGluIFUoOixrKSBpcyBVKGssaylcblxuICAgICAgdWluZGV4W3Vuel0gPSBrO1xuICAgICAgdXZhbHVlc1t1bnorK10gPSBwaXZvdDsgLy8gaXBpdiBpcyB0aGUga3RoIHBpdm90IHJvd1xuXG4gICAgICBwaW52W2lwaXZdID0gazsgLy8gZmlyc3QgZW50cnkgaW4gTCg6LGspIGlzIEwoayxrKSA9IDFcblxuICAgICAgbGluZGV4W2xuel0gPSBpcGl2O1xuICAgICAgbHZhbHVlc1tsbnorK10gPSAxOyAvLyBMKGsrMTpuLGspID0geCAvIHBpdm90XG5cbiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayB4KGkpIGlzIGFuIGVudHJ5IGluIEwoOixrKVxuXG4gICAgICAgIGlmIChwaW52W2ldIDwgMCkge1xuICAgICAgICAgIC8vIHNhdmUgdW5wZXJtdXRlZCByb3cgaW4gTFxuICAgICAgICAgIGxpbmRleFtsbnpdID0gaTsgLy8gc2NhbGUgcGl2b3QgY29sdW1uXG5cbiAgICAgICAgICBsdmFsdWVzW2xueisrXSA9IGRpdmlkZVNjYWxhcih4W2ldLCBwaXZvdCk7XG4gICAgICAgIH0gLy8geFswLi5uLTFdID0gMCBmb3IgbmV4dCBrXG5cblxuICAgICAgICB4W2ldID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgbHB0cltuXSA9IGxuejtcbiAgICB1cHRyW25dID0gdW56OyAvLyBmaXggcm93IGluZGljZXMgb2YgTCBmb3IgZmluYWwgcGludlxuXG4gICAgZm9yIChwID0gMDsgcCA8IGxuejsgcCsrKSB7XG4gICAgICBsaW5kZXhbcF0gPSBwaW52W2xpbmRleFtwXV07XG4gICAgfSAvLyB0cmltIGFycmF5c1xuXG5cbiAgICBsdmFsdWVzLnNwbGljZShsbnosIGx2YWx1ZXMubGVuZ3RoIC0gbG56KTtcbiAgICBsaW5kZXguc3BsaWNlKGxueiwgbGluZGV4Lmxlbmd0aCAtIGxueik7XG4gICAgdXZhbHVlcy5zcGxpY2UodW56LCB1dmFsdWVzLmxlbmd0aCAtIHVueik7XG4gICAgdWluZGV4LnNwbGljZSh1bnosIHVpbmRleC5sZW5ndGggLSB1bnopOyAvLyByZXR1cm4gTFUgZmFjdG9yXG5cbiAgICByZXR1cm4ge1xuICAgICAgTDogTCxcbiAgICAgIFU6IFUsXG4gICAgICBwaW52OiBwaW52XG4gICAgfTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0x1ID0gY3JlYXRlQ3NMdTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NNYXJrID0gY3NNYXJrO1xuXG52YXIgX2NzRmxpcCA9IHJlcXVpcmUoXCIuL2NzRmxpcFwiKTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgbm9kZSBhdCB3W2pdXG4gKlxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXhcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc01hcmsodywgaikge1xuICAvLyBtYXJrIHdbal1cbiAgd1tqXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkod1tqXSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzTWFya2VkID0gY3NNYXJrZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBub2RlIGF0IHdbal0gaXMgbWFya2VkXG4gKlxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXhcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc01hcmtlZCh3LCBqKSB7XG4gIC8vIGNoZWNrIG5vZGUgaXMgbWFya2VkXG4gIHJldHVybiB3W2pdIDwgMDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NQZXJtdXRlID0gY3NQZXJtdXRlO1xuXG4vKipcbiAqIFBlcm11dGVzIGEgc3BhcnNlIG1hdHJpeCBDID0gUCAqIEEgKiBRXG4gKlxuICogQHBhcmFtIHtTcGFyc2VNYXRyaXh9ICBhICAgICAgICAgVGhlIE1hdHJpeCBBXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgcm93IHBlcm11dGF0aW9uIHZlY3RvclxuICogQHBhcmFtIHtBcnJheX0gICBxICAgICAgICAgICAgICAgVGhlIGNvbHVtbiBwZXJtdXRhdGlvbiB2ZWN0b3JcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVzICAgICAgICAgIENyZWF0ZSBhIHBhdHRlcm4gbWF0cml4IChmYWxzZSksIHZhbHVlcyBhbmQgcGF0dGVybiBvdGhlcndpc2VcbiAqXG4gKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBDID0gUCAqIEEgKiBRLCBudWxsIG9uIGVycm9yXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NQZXJtdXRlKGEsIHBpbnYsIHEsIHZhbHVlcykge1xuICAvLyBhIGFycmF5c1xuICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gIHZhciBtID0gYXNpemVbMF07XG4gIHZhciBuID0gYXNpemVbMV07IC8vIGMgYXJyYXlzXG5cbiAgdmFyIGN2YWx1ZXMgPSB2YWx1ZXMgJiYgYS5fdmFsdWVzID8gW10gOiBudWxsO1xuICB2YXIgY2luZGV4ID0gW107IC8vIChhcHRyW25dKVxuXG4gIHZhciBjcHRyID0gW107IC8vIChuICsgMSlcbiAgLy8gaW5pdGlhbGl6ZSB2YXJzXG5cbiAgdmFyIG56ID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAvLyBjb2x1bW4gayBvZiBDIGlzIGNvbHVtbiBxW2tdIG9mIEFcbiAgICBjcHRyW2tdID0gbno7IC8vIGFwcGx5IGNvbHVtbiBwZXJtdXRhdGlvblxuXG4gICAgdmFyIGogPSBxID8gcVtrXSA6IGs7IC8vIGxvb3AgdmFsdWVzIGluIGNvbHVtbiBqIG9mIEFcblxuICAgIGZvciAodmFyIHQwID0gYXB0cltqXSwgdDEgPSBhcHRyW2ogKyAxXSwgdCA9IHQwOyB0IDwgdDE7IHQrKykge1xuICAgICAgLy8gcm93IGkgb2YgQSBpcyByb3cgcGludltpXSBvZiBDXG4gICAgICB2YXIgciA9IHBpbnYgPyBwaW52W2FpbmRleFt0XV0gOiBhaW5kZXhbdF07IC8vIGluZGV4XG5cbiAgICAgIGNpbmRleFtuel0gPSByOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHBvcHVsYXRlIHZhbHVlc1xuXG4gICAgICBpZiAoY3ZhbHVlcykge1xuICAgICAgICBjdmFsdWVzW256XSA9IGF2YWx1ZXNbdF07XG4gICAgICB9IC8vIGluY3JlbWVudCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50c1xuXG5cbiAgICAgIG56Kys7XG4gICAgfVxuICB9IC8vIGZpbmFsaXplIHRoZSBsYXN0IGNvbHVtbiBvZiBDXG5cblxuICBjcHRyW25dID0gbno7IC8vIHJldHVybiBDIG1hdHJpeFxuXG4gIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgIGluZGV4OiBjaW5kZXgsXG4gICAgcHRyOiBjcHRyLFxuICAgIHNpemU6IFttLCBuXSxcbiAgICBkYXRhdHlwZTogYWR0XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1Bvc3QgPSBjc1Bvc3Q7XG5cbnZhciBfY3NUZGZzID0gcmVxdWlyZShcIi4vY3NUZGZzXCIpO1xuXG4vKipcbiAqIFBvc3Qgb3JkZXIgYSB0cmVlIG9mIGZvcmVzdFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9ICAgcGFyZW50ICAgICAgICAgIFRoZSB0cmVlIG9yIGZvcmVzdFxuICogQHBhcmFtIHtOdW1iZXJ9ICBuICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNvbHVtbnNcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc1Bvc3QocGFyZW50LCBuKSB7XG4gIC8vIGNoZWNrIGlucHV0c1xuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIHZhcnNcblxuXG4gIHZhciBrID0gMDtcbiAgdmFyIGo7IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG4gIHZhciBwb3N0ID0gW107IC8vIChuKVxuICAvLyB3b3Jrc3BhY2UsIGhlYWQ6IGZpcnN0IG4gZW50cmllcywgbmV4dDogbmV4dCBuIGVudHJpZXMsIHN0YWNrOiBsYXN0IG4gZW50cmllc1xuXG4gIHZhciB3ID0gW107IC8vICgzICogbilcblxuICB2YXIgaGVhZCA9IDA7XG4gIHZhciBuZXh0ID0gbjtcbiAgdmFyIHN0YWNrID0gMiAqIG47IC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG5cbiAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgIC8vIGVtcHR5IGxpbmtlZCBsaXN0c1xuICAgIHdbaGVhZCArIGpdID0gLTE7XG4gIH0gLy8gdHJhdmVyc2Ugbm9kZXMgaW4gcmV2ZXJzZSBvcmRlclxuXG5cbiAgZm9yIChqID0gbiAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgLy8gY2hlY2sgaiBpcyBhIHJvb3RcbiAgICBpZiAocGFyZW50W2pdID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBhZGQgaiB0byBsaXN0IG9mIGl0cyBwYXJlbnRcblxuXG4gICAgd1tuZXh0ICsgal0gPSB3W2hlYWQgKyBwYXJlbnRbal1dO1xuICAgIHdbaGVhZCArIHBhcmVudFtqXV0gPSBqO1xuICB9IC8vIGxvb3Agbm9kZXNcblxuXG4gIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBza2lwIGogaWYgaXQgaXMgbm90IGEgcm9vdFxuICAgIGlmIChwYXJlbnRbal0gIT09IC0xKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIGRlcHRoLWZpcnN0IHNlYXJjaFxuXG5cbiAgICBrID0gKDAsIF9jc1RkZnMuY3NUZGZzKShqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjayk7XG4gIH1cblxuICByZXR1cm4gcG9zdDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NSZWFjaCA9IGNzUmVhY2g7XG5cbnZhciBfY3NNYXJrZWQgPSByZXF1aXJlKFwiLi9jc01hcmtlZFwiKTtcblxudmFyIF9jc01hcmsgPSByZXF1aXJlKFwiLi9jc01hcmtcIik7XG5cbnZhciBfY3NEZnMgPSByZXF1aXJlKFwiLi9jc0Rmc1wiKTtcblxuLyoqXG4gKiBUaGUgY3NSZWFjaCBmdW5jdGlvbiBjb21wdXRlcyBYID0gUmVhY2goQiksIHdoZXJlIEIgaXMgdGhlIG5vbnplcm8gcGF0dGVybiBvZiB0aGUgbi1ieS0xXG4gKiBzcGFyc2UgY29sdW1uIG9mIHZlY3RvciBiLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2V0IG9mIG5vZGVzIHJlYWNoYWJsZSBmcm9tIGFueSBub2RlIGluIEIuIFRoZVxuICogbm9uemVybyBwYXR0ZXJuIHhpIG9mIHRoZSBzb2x1dGlvbiB4IHRvIHRoZSBzcGFyc2UgbGluZWFyIHN5c3RlbSBMeD1iIGlzIGdpdmVuIGJ5IFg9UmVhY2goQikuXG4gKlxuICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4XG4gKiBAcGFyYW0ge01hdHJpeH0gIGIgICAgICAgICAgICAgICBUaGUgQiBtYXRyaXhcbiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEJcbiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGZvciB0aGUgbm9uemVybyBwYXR0ZXJuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NSZWFjaChnLCBiLCBrLCB4aSwgcGludikge1xuICAvLyBnIGFycmF5c1xuICB2YXIgZ3B0ciA9IGcuX3B0cjtcbiAgdmFyIGdzaXplID0gZy5fc2l6ZTsgLy8gYiBhcnJheXNcblxuICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gIHZhciBicHRyID0gYi5fcHRyOyAvLyBjb2x1bW5zXG5cbiAgdmFyIG4gPSBnc2l6ZVsxXTsgLy8gdmFyc1xuXG4gIHZhciBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgdG9wXG5cbiAgdmFyIHRvcCA9IG47IC8vIGxvb3AgY29sdW1uIGluZGVjZXMgaW4gQlxuXG4gIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgLy8gbm9kZSBpXG4gICAgdmFyIGkgPSBiaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaSBpcyBtYXJrZWRcblxuICAgIGlmICghKDAsIF9jc01hcmtlZC5jc01hcmtlZCkoZ3B0ciwgaSkpIHtcbiAgICAgIC8vIHN0YXJ0IGEgZGZzIGF0IHVubWFya2VkIG5vZGUgaVxuICAgICAgdG9wID0gKDAsIF9jc0Rmcy5jc0RmcykoaSwgZywgdG9wLCB4aSwgcGludik7XG4gICAgfVxuICB9IC8vIGxvb3AgY29sdW1ucyBmcm9tIHRvcCAtPiBuIC0gMVxuXG5cbiAgZm9yIChwID0gdG9wOyBwIDwgbjsgcCsrKSB7XG4gICAgLy8gcmVzdG9yZSBHXG4gICAgKDAsIF9jc01hcmsuY3NNYXJrKShncHRyLCB4aVtwXSk7XG4gIH1cblxuICByZXR1cm4gdG9wO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1Nwc29sdmUgPSB2b2lkIDA7XG5cbnZhciBfY3NSZWFjaCA9IHJlcXVpcmUoXCIuL2NzUmVhY2hcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjc1Nwc29sdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5JywgJ3N1YnRyYWN0J107XG52YXIgY3JlYXRlQ3NTcHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gY3NTcHNvbHZlKCkgY29tcHV0ZXMgdGhlIHNvbHV0aW9uIHRvIEcgKiB4ID0gYmssIHdoZXJlIGJrIGlzIHRoZVxuICAgKiBrdGggY29sdW1uIG9mIEIuIFdoZW4gbG8gaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgRyA9IEwgaXMgbG93ZXIgdHJpYW5ndWxhciB3aXRoIHRoZVxuICAgKiBkaWFnb25hbCBlbnRyeSBhcyB0aGUgZmlyc3QgZW50cnkgaW4gZWFjaCBjb2x1bW4uIFdoZW4gbG8gaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgRyA9IFVcbiAgICogaXMgdXBwZXIgdHJpYW5ndWxhciB3aXRoIHRoZSBkaWFnb25hbCBlbnRyeSBhcyB0aGUgbGFzdCBlbnRyeSBpbiBlYWNoIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4fSAgYiAgICAgICAgICAgICAgIFRoZSBCIG1hdHJpeFxuICAgKiBAcGFyYW0ge051bWJlcn0gIGsgICAgICAgICAgICAgICBUaGUga3RoIGNvbHVtbiBpbiBCXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbiBlbnRyaWVzIGlzIHRoZSBub256ZXJvIHBhdHRlcm4sIHRoZSBsYXN0IG4gZW50cmllcyBpcyB0aGUgc3RhY2tcbiAgICogQHBhcmFtIHtBcnJheX0gICB4ICAgICAgICAgICAgICAgVGhlIHNvbHV0b24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gRyAqIHggPSBiXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgcGludiAgICAgICAgICAgIFRoZSBpbnZlcnNlIHJvdyBwZXJtdXRhdGlvbiB2ZWN0b3IsIG11c3QgYmUgbnVsbCBmb3IgTCAqIHggPSBiXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG8gICAgICAgICAgICAgIFRoZSBsb3dlciAodHJ1ZSkgdXBwZXIgdHJpYW5ndWxhciAoZmFsc2UpIGZsYWdcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGZvciB0aGUgbm9uemVybyBwYXR0ZXJuXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gY3NTcHNvbHZlKGcsIGIsIGssIHhpLCB4LCBwaW52LCBsbykge1xuICAgIC8vIGcgYXJyYXlzXG4gICAgdmFyIGd2YWx1ZXMgPSBnLl92YWx1ZXM7XG4gICAgdmFyIGdpbmRleCA9IGcuX2luZGV4O1xuICAgIHZhciBncHRyID0gZy5fcHRyO1xuICAgIHZhciBnc2l6ZSA9IGcuX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gZ3NpemVbMV07IC8vIGIgYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBwLCBwMCwgcDEsIHE7IC8vIHhpW3RvcC4ubi0xXSA9IGNzUmVhY2goQig6LGspKVxuXG4gICAgdmFyIHRvcCA9ICgwLCBfY3NSZWFjaC5jc1JlYWNoKShnLCBiLCBrLCB4aSwgcGludik7IC8vIGNsZWFyIHhcblxuICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgeFt4aVtwXV0gPSAwO1xuICAgIH0gLy8gc2NhdHRlciBiXG5cblxuICAgIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICB4W2JpbmRleFtwXV0gPSBidmFsdWVzW3BdO1xuICAgIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAodmFyIHB4ID0gdG9wOyBweCA8IG47IHB4KyspIHtcbiAgICAgIC8vIHggYXJyYXkgaW5kZXggZm9yIHB4XG4gICAgICB2YXIgaiA9IHhpW3B4XTsgLy8gYXBwbHkgcGVybXV0YXRpb24gdmVjdG9yIChVIHggPSBiKSwgaiBtYXBzIHRvIGNvbHVtbiBKIG9mIEdcblxuICAgICAgdmFyIEogPSBwaW52ID8gcGludltqXSA6IGo7IC8vIGNoZWNrIGNvbHVtbiBKIGlzIGVtcHR5XG5cbiAgICAgIGlmIChKIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY29sdW1uIHZhbHVlIGluZGVjZXMgaW4gRywgcDAgPD0gcCA8IHAxXG5cblxuICAgICAgcDAgPSBncHRyW0pdO1xuICAgICAgcDEgPSBncHRyW0ogKyAxXTsgLy8geChqKSAvPSBHKGosailcblxuICAgICAgeFtqXSA9IGRpdmlkZVNjYWxhcih4W2pdLCBndmFsdWVzW2xvID8gcDAgOiBwMSAtIDFdKTsgLy8gZmlyc3QgZW50cnkgTChqLGopXG5cbiAgICAgIHAgPSBsbyA/IHAwICsgMSA6IHAwO1xuICAgICAgcSA9IGxvID8gcDEgOiBwMSAtIDE7IC8vIGxvb3BcblxuICAgICAgZm9yICg7IHAgPCBxOyBwKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciBpID0gZ2luZGV4W3BdOyAvLyB4KGkpIC09IEcoaSxqKSAqIHgoailcblxuICAgICAgICB4W2ldID0gc3VidHJhY3QoeFtpXSwgbXVsdGlwbHkoZ3ZhbHVlc1twXSwgeFtqXSkpO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIHRvcCBvZiBzdGFja1xuXG5cbiAgICByZXR1cm4gdG9wO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzU3Bzb2x2ZSA9IGNyZWF0ZUNzU3Bzb2x2ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NTcXIgPSB2b2lkIDA7XG5cbnZhciBfY3NQZXJtdXRlID0gcmVxdWlyZShcIi4vY3NQZXJtdXRlXCIpO1xuXG52YXIgX2NzUG9zdCA9IHJlcXVpcmUoXCIuL2NzUG9zdFwiKTtcblxudmFyIF9jc0V0cmVlID0gcmVxdWlyZShcIi4vY3NFdHJlZVwiKTtcblxudmFyIF9jc0FtZCA9IHJlcXVpcmUoXCIuL2NzQW1kXCIpO1xuXG52YXIgX2NzQ291bnRzID0gcmVxdWlyZShcIi4vY3NDb3VudHNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjc1Nxcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJ107XG52YXIgY3JlYXRlQ3NTcXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcbiAgdmFyIGNzQW1kID0gKDAsIF9jc0FtZC5jcmVhdGVDc0FtZCkoe1xuICAgIGFkZDogYWRkLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgdmFyIGNzQ291bnRzID0gKDAsIF9jc0NvdW50cy5jcmVhdGVDc0NvdW50cykoe1xuICAgIHRyYW5zcG9zZTogdHJhbnNwb3NlXG4gIH0pO1xuICAvKipcbiAgICogU3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzIGZvciBRUiBhbmQgTFUgZGVjb21wb3NpdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSAgb3JkZXIgICAgICAgICAgIFRoZSBvcmRlcmluZyBzdHJhdGVneSAoc2VlIGNzQW1kIGZvciBtb3JlIGRldGFpbHMpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgYSAgICAgICAgICAgICAgIFRoZSBBIG1hdHJpeFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHFyICAgICAgICAgICAgICBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIFFSIGRlY29tcG9zaXRpb24gKHRydWUpIG9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFseXNpcyBmb3IgTFUgZGVjb21wb3NpdGlvbiAoZmFsc2UpXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICAgICAgIFRoZSBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIG1hdHJpeCBBXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBjc1NxcihvcmRlciwgYSwgcXIpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcnNcblxuICAgIHZhciBrOyAvLyBzeW1ib2xpYyBhbmFseXNpcyByZXN1bHRcblxuICAgIHZhciBzID0ge307IC8vIGZpbGwtcmVkdWNpbmcgb3JkZXJpbmdcblxuICAgIHMucSA9IGNzQW1kKG9yZGVyLCBhKTsgLy8gdmFsaWRhdGUgcmVzdWx0c1xuXG4gICAgaWYgKG9yZGVyICYmICFzLnEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gUVIgc3ltYm9saWMgYW5hbHlzaXNcblxuXG4gICAgaWYgKHFyKSB7XG4gICAgICAvLyBhcHBseSBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkXG4gICAgICB2YXIgYyA9IG9yZGVyID8gKDAsIF9jc1Blcm11dGUuY3NQZXJtdXRlKShhLCBudWxsLCBzLnEsIDApIDogYTsgLy8gZXRyZWUgb2YgQycqQywgd2hlcmUgQz1BKDoscSlcblxuICAgICAgcy5wYXJlbnQgPSAoMCwgX2NzRXRyZWUuY3NFdHJlZSkoYywgMSk7IC8vIHBvc3Qgb3JkZXIgZWxpbWluYXRpb24gdHJlZVxuXG4gICAgICB2YXIgcG9zdCA9ICgwLCBfY3NQb3N0LmNzUG9zdCkocy5wYXJlbnQsIG4pOyAvLyBjb2wgY291bnRzIGNob2woQycqQylcblxuICAgICAgcy5jcCA9IGNzQ291bnRzKGMsIHMucGFyZW50LCBwb3N0LCAxKTsgLy8gY2hlY2sgd2UgaGF2ZSBldmVyeXRoaW5nIG5lZWRlZCB0byBjYWxjdWxhdGUgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHNcblxuICAgICAgaWYgKGMgJiYgcy5wYXJlbnQgJiYgcy5jcCAmJiBfdmNvdW50KGMsIHMpKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50c1xuICAgICAgICBmb3IgKHMudW56ID0gMCwgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgICBzLnVueiArPSBzLmNwW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvciBMVSBmYWN0b3JpemF0aW9uIG9ubHksIGd1ZXNzIG5ueihMKSBhbmQgbm56KFUpXG4gICAgICBzLnVueiA9IDQgKiBhcHRyW25dICsgbjtcbiAgICAgIHMubG56ID0gcy51bno7XG4gICAgfSAvLyByZXR1cm4gcmVzdWx0IFNcblxuXG4gICAgcmV0dXJuIHM7XG4gIH07XG4gIC8qKlxuICAgKiBDb21wdXRlIG5ueihWKSA9IHMubG56LCBzLnBpbnYsIHMubGVmdG1vc3QsIHMubTIgZnJvbSBBIGFuZCBzLnBhcmVudFxuICAgKi9cblxuICBmdW5jdGlvbiBfdmNvdW50KGEsIHMpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIG0gPSBhc2l6ZVswXTtcbiAgICB2YXIgbiA9IGFzaXplWzFdOyAvLyBpbml0aWFsaXplIHMgYXJyYXlzXG5cbiAgICBzLnBpbnYgPSBbXTsgLy8gKG0gKyBuKVxuXG4gICAgcy5sZWZ0bW9zdCA9IFtdOyAvLyAobSlcbiAgICAvLyB2YXJzXG5cbiAgICB2YXIgcGFyZW50ID0gcy5wYXJlbnQ7XG4gICAgdmFyIHBpbnYgPSBzLnBpbnY7XG4gICAgdmFyIGxlZnRtb3N0ID0gcy5sZWZ0bW9zdDsgLy8gd29ya3NwYWNlLCBuZXh0OiBmaXJzdCBtIGVudHJpZXMsIGhlYWQ6IG5leHQgbiBlbnRyaWVzLCB0YWlsOiBuZXh0IG4gZW50cmllcywgbnF1ZTogbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciB3ID0gW107IC8vIChtICsgMyAqIG4pXG5cbiAgICB2YXIgbmV4dCA9IDA7XG4gICAgdmFyIGhlYWQgPSBtO1xuICAgIHZhciB0YWlsID0gbSArIG47XG4gICAgdmFyIG5xdWUgPSBtICsgMiAqIG47IC8vIHZhcnNcblxuICAgIHZhciBpLCBrLCBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgd1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gcXVldWUgayBpcyBlbXB0eVxuICAgICAgd1toZWFkICsga10gPSAtMTtcbiAgICAgIHdbdGFpbCArIGtdID0gLTE7XG4gICAgICB3W25xdWUgKyBrXSA9IDA7XG4gICAgfSAvLyBpbml0aWFsaXplIHJvdyBhcnJheXNcblxuXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgbGVmdG1vc3RbaV0gPSAtMTtcbiAgICB9IC8vIGxvb3AgY29sdW1ucyBiYWNrd2FyZHNcblxuXG4gICAgZm9yIChrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAvLyB2YWx1ZXMgJiBpbmRleCBmb3IgY29sdW1uIGtcbiAgICAgIGZvciAocDAgPSBhcHRyW2tdLCBwMSA9IGFwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgIC8vIGxlZnRtb3N0W2ldID0gbWluKGZpbmQoQShpLDopKSlcbiAgICAgICAgbGVmdG1vc3RbYWluZGV4W3BdXSA9IGs7XG4gICAgICB9XG4gICAgfSAvLyBzY2FuIHJvd3MgaW4gcmV2ZXJzZSBvcmRlclxuXG5cbiAgICBmb3IgKGkgPSBtIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIHJvdyBpIGlzIG5vdCB5ZXQgb3JkZXJlZFxuICAgICAgcGludltpXSA9IC0xO1xuICAgICAgayA9IGxlZnRtb3N0W2ldOyAvLyBjaGVjayByb3cgaSBpcyBlbXB0eVxuXG4gICAgICBpZiAoayA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIGZpcnN0IHJvdyBpbiBxdWV1ZSBrXG5cblxuICAgICAgaWYgKHdbbnF1ZSArIGtdKysgPT09IDApIHtcbiAgICAgICAgd1t0YWlsICsga10gPSBpO1xuICAgICAgfSAvLyBwdXQgaSBhdCBoZWFkIG9mIHF1ZXVlIGtcblxuXG4gICAgICB3W25leHQgKyBpXSA9IHdbaGVhZCArIGtdO1xuICAgICAgd1toZWFkICsga10gPSBpO1xuICAgIH1cblxuICAgIHMubG56ID0gMDtcbiAgICBzLm0yID0gbTsgLy8gZmluZCByb3cgcGVybXV0YXRpb24gYW5kIG5ueihWKVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gcmVtb3ZlIHJvdyBpIGZyb20gcXVldWUga1xuICAgICAgaSA9IHdbaGVhZCArIGtdOyAvLyBjb3VudCBWKGssaykgYXMgbm9uemVyb1xuXG4gICAgICBzLmxueisrOyAvLyBhZGQgYSBmaWN0aXRpb3VzIHJvd1xuXG4gICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgaSA9IHMubTIrKztcbiAgICAgIH0gLy8gYXNzb2NpYXRlIHJvdyBpIHdpdGggVig6LGspXG5cblxuICAgICAgcGludltpXSA9IGs7IC8vIHNraXAgaWYgVihrKzE6bSxrKSBpcyBlbXB0eVxuXG4gICAgICBpZiAoLS1ucXVlW2tdIDw9IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIG5xdWVba10gaXMgbm56IChWKGsrMTptLGspKVxuXG5cbiAgICAgIHMubG56ICs9IHdbbnF1ZSArIGtdOyAvLyBtb3ZlIGFsbCByb3dzIHRvIHBhcmVudCBvZiBrXG5cbiAgICAgIHZhciBwYSA9IHBhcmVudFtrXTtcblxuICAgICAgaWYgKHBhICE9PSAtMSkge1xuICAgICAgICBpZiAod1tucXVlICsgcGFdID09PSAwKSB7XG4gICAgICAgICAgd1t0YWlsICsgcGFdID0gd1t0YWlsICsga107XG4gICAgICAgIH1cblxuICAgICAgICB3W25leHQgKyB3W3RhaWwgKyBrXV0gPSB3W2hlYWQgKyBwYV07XG4gICAgICAgIHdbaGVhZCArIHBhXSA9IHdbbmV4dCArIGldO1xuICAgICAgICB3W25xdWUgKyBwYV0gKz0gd1tucXVlICsga107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgaWYgKHBpbnZbaV0gPCAwKSB7XG4gICAgICAgIHBpbnZbaV0gPSBrKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1NxciA9IGNyZWF0ZUNzU3FyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1RkZnMgPSBjc1RkZnM7XG5cbi8qKlxuICogRGVwdGgtZmlyc3Qgc2VhcmNoIGFuZCBwb3N0b3JkZXIgb2YgYSB0cmVlIHJvb3RlZCBhdCBub2RlIGpcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgdHJlZSBub2RlXG4gKiBAcGFyYW0ge051bWJlcn0gIGtcbiAqIEBwYXJhbSB7QXJyYXl9ICAgdyAgICAgICAgICAgICAgIFRoZSB3b3Jrc3BhY2UgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaGVhZCAgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBoZWFkIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIG5leHQgICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgbmV4dCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gICBwb3N0ICAgICAgICAgICAgVGhlIHBvc3Qgb3JkZXJpbmcgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgc3RhY2sgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBzdGFjayBhcnJheVxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzVGRmcyhqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjaykge1xuICAvLyB2YXJpYWJsZXNcbiAgdmFyIHRvcCA9IDA7IC8vIHBsYWNlIGogb24gdGhlIHN0YWNrXG5cbiAgd1tzdGFja10gPSBqOyAvLyB3aGlsZSAoc3RhY2sgaXMgbm90IGVtcHR5KVxuXG4gIHdoaWxlICh0b3AgPj0gMCkge1xuICAgIC8vIHAgPSB0b3Agb2Ygc3RhY2tcbiAgICB2YXIgcCA9IHdbc3RhY2sgKyB0b3BdOyAvLyBpID0geW91bmdlc3QgY2hpbGQgb2YgcFxuXG4gICAgdmFyIGkgPSB3W2hlYWQgKyBwXTtcblxuICAgIGlmIChpID09PSAtMSkge1xuICAgICAgLy8gcCBoYXMgbm8gdW5vcmRlcmVkIGNoaWxkcmVuIGxlZnRcbiAgICAgIHRvcC0tOyAvLyBub2RlIHAgaXMgdGhlIGt0aCBwb3N0b3JkZXJlZCBub2RlXG5cbiAgICAgIHBvc3RbaysrXSA9IHA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlbW92ZSBpIGZyb20gY2hpbGRyZW4gb2YgcFxuICAgICAgd1toZWFkICsgcF0gPSB3W25leHQgKyBpXTsgLy8gaW5jcmVtZW50IHRvcFxuXG4gICAgICArK3RvcDsgLy8gc3RhcnQgZGZzIG9uIGNoaWxkIG5vZGUgaVxuXG4gICAgICB3W3N0YWNrICsgdG9wXSA9IGk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGs7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzVW5mbGlwID0gY3NVbmZsaXA7XG5cbnZhciBfY3NGbGlwID0gcmVxdWlyZShcIi4vY3NGbGlwXCIpO1xuXG4vKipcbiAqIEZsaXBzIHRoZSB2YWx1ZSBpZiBpdCBpcyBuZWdhdGl2ZSBvZiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gZmxpcFxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzVW5mbGlwKGkpIHtcbiAgLy8gZmxpcCB0aGUgdmFsdWUgaWYgaXQgaXMgbmVnYXRpdmVcbiAgcmV0dXJuIGkgPCAwID8gKDAsIF9jc0ZsaXAuY3NGbGlwKShpKSA6IGk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFicyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2Ficyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFicyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBudW1iZXIuIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzXG4gICAqIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hYnMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWJzKDMuNSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMy41XG4gICAqICAgIG1hdGguYWJzKC00LjIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNC4yXG4gICAqXG4gICAqICAgIG1hdGguYWJzKFszLCAtNSwgLTEsIDAsIDJdKSAgLy8gcmV0dXJucyBBcnJheSBbMywgNSwgMSwgMCwgMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpZ25cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgQSBudW1iZXIgb3IgbWF0cml4IGZvciB3aGljaCB0byBnZXQgdGhlIGFic29sdXRlIHZhbHVlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1cbiAgICogICAgICAgICAgICBBYnNvbHV0ZSB2YWx1ZSBvZiBgeGBcbiAgICovXG4gIHZhciBhYnMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFic051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWJzLCB0cnVlKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFicztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBYnMgPSBjcmVhdGVBYnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFkZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNFwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnYWRkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlQWRkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXgsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQWRkIHR3byBvciBtb3JlIHZhbHVlcywgYHggKyB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFkZCh4LCB5KVxuICAgKiAgICBtYXRoLmFkZCh4LCB5LCB6LCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFkZCgyLCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDVcbiAgICogICAgbWF0aC5hZGQoMiwgMywgNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA5XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCgtNCwgMSlcbiAgICogICAgbWF0aC5hZGQoYSwgYikgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggLTIgKyA0aVxuICAgKlxuICAgKiAgICBtYXRoLmFkZChbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLnVuaXQoJzUgY20nKVxuICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCcyLjEgbW0nKVxuICAgKiAgICBtYXRoLmFkZChjLCBkKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCA1Mi4xIG1tXG4gICAqXG4gICAqICAgIG1hdGguYWRkKFwiMi4zXCIsIFwiNFwiKSAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDYuM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3VidHJhY3QsIHN1bVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gYWRkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gYWRkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gU3VtIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBhZGQgPSB0eXBlZChuYW1lLCAoMCwgX29iamVjdC5leHRlbmQpKHtcbiAgICAvLyB3ZSBleHRlbmQgdGhlIHNpZ25hdHVyZXMgb2YgYWRkU2NhbGFyIHdpdGggc2lnbmF0dXJlcyBkZWFsaW5nIHdpdGggbWF0cmljZXNcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIGFkZFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYWRkU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhZGQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFkZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWRkKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhZGRTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeCwgeSwgYWRkU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBhZGRTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGFkZFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgYW55JzogYWRkU2NhbGFyLFxuICAgICdhbnksIGFueSwgLi4uYW55JzogZnVuY3Rpb24gYW55QW55QW55KHgsIHksIHJlc3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBhZGQoeCwgeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBhZGQocmVzdWx0LCByZXN0W2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0sIGFkZFNjYWxhci5zaWduYXR1cmVzKSk7XG4gIHJldHVybiBhZGQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWRkID0gY3JlYXRlQWRkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGRTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2FkZFNjYWxhcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFkZFNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEFkZCB0d28gc2NhbGFyIHZhbHVlcywgYHggKyB5YC5cbiAgICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlOiBpdCBpcyB1c2VkIGJ5IHRoZSBwdWJsaWMgZnVuY3Rpb25cbiAgICogYGFkZGBcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbGxlY3Rpb25zIChBcnJheSBvciBNYXRyaXgpLlxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0fSB4ICAgRmlyc3QgdmFsdWUgdG8gYWRkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gYWRkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9ICAgICBTdW0gb2YgYHhgIGFuZCBgeWBcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhciBhZGRTY2FsYXIgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5hZGROdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4geC5hZGQoeSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucGx1cyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmFkZCh5KTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKHgudmFsdWUgPT09IG51bGwgfHwgeC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB4IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpO1xuICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwgfHwgeS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB5IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpO1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkgdGhyb3cgbmV3IEVycm9yKCdVbml0cyBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIHZhciByZXMgPSB4LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSBhZGRTY2FsYXIocmVzLnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFkZFNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGRTY2FsYXIgPSBjcmVhdGVBZGRTY2FsYXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNicnQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjYnJ0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdpc05lZ2F0aXZlJywgJ3VuYXJ5TWludXMnLCAnbWF0cml4JywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJywgJ0ZyYWN0aW9uJ107XG52YXIgY3JlYXRlQ2JydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBGcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb247XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY2JydCh4KVxuICAgKiAgICBtYXRoLmNicnQoeCwgYWxsUm9vdHMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNicnQoMjcpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgIG1hdGguY3ViZSgzKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI3XG4gICAqICAgIG1hdGguY2JydCgtNjQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIC00XG4gICAqICAgIG1hdGguY2JydChtYXRoLnVuaXQoJzI3IG1eMycpKSAvLyByZXR1cm5zIFVuaXQgMyBtXG4gICAqICAgIG1hdGguY2JydChbMjcsIDY0LCAxMjVdKSAgICAgICAvLyByZXR1cm5zIFszLCA0LCA1XVxuICAgKlxuICAgKiAgICBjb25zdCB4ID0gbWF0aC5jb21wbGV4KCc4aScpXG4gICAqICAgIG1hdGguY2JydCh4KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS43MzIwNTA4MDc1Njg5ICsgaVxuICAgKiAgICBtYXRoLmNicnQoeCwgdHJ1ZSkgICAgICAgICAgICAgLy8gcmV0dXJucyBNYXRyaXggW1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIDEuNzMyMDUwODA3NTY4OSArIGlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIC0xLjczMjA1MDgwNzU2ODkgKyBpXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAtMmlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzcXVhcmUsIHNxcnQsIGN1YmVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsUm9vdHNdICBPcHRpb25hbCwgZmFsc2UgYnkgZGVmYXVsdC4gT25seSBhcHBsaWNhYmxlXG4gICAqICAgICAgICAgICAgd2hlbiBgeGAgaXMgYSBudW1iZXIgb3IgY29tcGxleCBudW1iZXIuIElmIHRydWUsIGFsbCBjb21wbGV4XG4gICAqICAgICAgICAgICAgcm9vdHMgYXJlIHJldHVybmVkLCBpZiBmYWxzZSAoZGVmYXVsdCkgdGhlIHByaW5jaXBhbCByb290IGlzXG4gICAqICAgICAgICAgICAgcmV0dXJuZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiBgeGBcbiAgICovXG4gIHZhciBjYnJ0ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jYnJ0TnVtYmVyLFxuICAgIC8vIG5vdGU6IHNpZ25hdHVyZSAnbnVtYmVyLCBib29sZWFuJyBpcyBhbHNvIHN1cHBvcnRlZCxcbiAgICAvLyAgICAgICBjcmVhdGVkIGJ5IHR5cGVkIGFzIGl0IGtub3dzIGhvdyB0byBjb252ZXJ0IG51bWJlciB0byBDb21wbGV4XG4gICAgQ29tcGxleDogX2NicnRDb21wbGV4LFxuICAgICdDb21wbGV4LCBib29sZWFuJzogX2NicnRDb21wbGV4LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmNicnQoKTtcbiAgICB9LFxuICAgIFVuaXQ6IF9jYnJ0VW5pdCxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGNicnQoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNicnQsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QgZm9yIGEgY29tcGxleCBudW1iZXJcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbFJvb3RzXSAgIElmIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFsbCB0aHJlZSByb290cy4gSWYgZmFsc2Ugb3IgdW5kZWZpbmVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIHtDb21wbGV4IHwgQXJyYXkuPENvbXBsZXg+IHwgTWF0cml4LjxDb21wbGV4Pn0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdChzKSBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jYnJ0Q29tcGxleCh4LCBhbGxSb290cykge1xuICAgIC8vIGh0dHBzOi8vd3d3Lndpa2l3YW5kLmNvbS9lbi9DdWJlX3Jvb3QjL0NvbXBsZXhfbnVtYmVyc1xuICAgIHZhciBhcmczID0geC5hcmcoKSAvIDM7XG4gICAgdmFyIGFicyA9IHguYWJzKCk7IC8vIHByaW5jaXBhbCByb290OlxuXG4gICAgdmFyIHByaW5jaXBhbCA9IG5ldyBDb21wbGV4KCgwLCBfbnVtYmVyLmNicnROdW1iZXIpKGFicyksIDApLm11bChuZXcgQ29tcGxleCgwLCBhcmczKS5leHAoKSk7XG5cbiAgICBpZiAoYWxsUm9vdHMpIHtcbiAgICAgIHZhciBhbGwgPSBbcHJpbmNpcGFsLCBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyArIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpLCBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyAtIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpXTtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gYWxsIDogbWF0cml4KGFsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmluY2lwYWw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QgZm9yIGEgVW5pdFxuICAgKiBAcGFyYW0ge1VuaXR9IHhcbiAgICogQHJldHVybiB7VW5pdH0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2NicnRVbml0KHgpIHtcbiAgICBpZiAoeC52YWx1ZSAmJiAoMCwgX2lzLmlzQ29tcGxleCkoeC52YWx1ZSkpIHtcbiAgICAgIHZhciByZXN1bHQgPSB4LmNsb25lKCk7XG4gICAgICByZXN1bHQudmFsdWUgPSAxLjA7XG4gICAgICByZXN1bHQgPSByZXN1bHQucG93KDEuMCAvIDMpOyAvLyBDb21wdXRlIHRoZSB1bml0c1xuXG4gICAgICByZXN1bHQudmFsdWUgPSBfY2JydENvbXBsZXgoeC52YWx1ZSk7IC8vIENvbXB1dGUgdGhlIHZhbHVlXG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBuZWdhdGUgPSBpc05lZ2F0aXZlKHgudmFsdWUpO1xuXG4gICAgICBpZiAobmVnYXRlKSB7XG4gICAgICAgIHgudmFsdWUgPSB1bmFyeU1pbnVzKHgudmFsdWUpO1xuICAgICAgfSAvLyBUT0RPOiBjcmVhdGUgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoaXNcblxuXG4gICAgICB2YXIgdGhpcmQ7XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh4LnZhbHVlKSkge1xuICAgICAgICB0aGlyZCA9IG5ldyBCaWdOdW1iZXIoMSkuZGl2KDMpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzRnJhY3Rpb24pKHgudmFsdWUpKSB7XG4gICAgICAgIHRoaXJkID0gbmV3IEZyYWN0aW9uKDEsIDMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcmQgPSAxIC8gMztcbiAgICAgIH1cblxuICAgICAgdmFyIF9yZXN1bHQgPSB4LnBvdyh0aGlyZCk7XG5cbiAgICAgIGlmIChuZWdhdGUpIHtcbiAgICAgICAgX3Jlc3VsdC52YWx1ZSA9IHVuYXJ5TWludXMoX3Jlc3VsdC52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYnJ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNicnQgPSBjcmVhdGVDYnJ0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDZWlsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyMiA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NlaWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ3JvdW5kJ107XG52YXIgY3JlYXRlQ2VpbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHJvdW5kID0gX3JlZi5yb3VuZDtcblxuICAvKipcbiAgICogUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHlcbiAgICogSWYgYHhgIGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBwbHVzIGluZmluaXR5LlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY2VpbCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jZWlsKDMuMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqICAgIG1hdGguY2VpbCgzLjgpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLmNlaWwoLTQuMikgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGguY2VpbCgtNC43KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTRcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguY2VpbChjKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDQgLSAyaVxuICAgKlxuICAgKiAgICBtYXRoLmNlaWwoWzMuMiwgMy44LCAtNC43XSkgIC8vIHJldHVybnMgQXJyYXkgWzQsIDQsIC00XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmxvb3IsIGZpeCwgcm91bmRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIE51bWJlciB0byBiZSByb3VuZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuICB2YXIgY2VpbCA9IHR5cGVkKCdjZWlsJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICgoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIyLmNlaWxOdW1iZXIpKHgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jZWlsKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5jZWlsKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguY2VpbCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBjZWlsKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjZWlsLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2VpbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDZWlsID0gY3JlYXRlQ2VpbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3ViZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2N1YmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVDdWJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLCBgeCAqIHggKiB4YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY3ViZSgyKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDhcbiAgICogICAgbWF0aC5wb3coMiwgMykgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOFxuICAgKiAgICBtYXRoLmN1YmUoNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NFxuICAgKiAgICA0ICogNCAqIDQgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NFxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoWzEsIDIsIDMsIDRdKSAvLyByZXR1cm5zIEFycmF5IFsxLCA4LCAyNywgNjRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtdWx0aXBseSwgc3F1YXJlLCBwb3csIGNicnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4ICBOdW1iZXIgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IEN1YmUgb2YgeFxuICAgKi9cbiAgdmFyIGN1YmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmN1YmVOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5tdWwoeCkubXVsKHgpOyAvLyBJcyBmYXN0ZXIgdGhhbiBwb3coeCwgMylcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnRpbWVzKHgpLnRpbWVzKHgpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnBvdygzKTsgLy8gSXMgZmFzdGVyIHRoYW4gbXVsKCltdWwoKW11bCgpXG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGN1YmUoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGN1YmUsIHRydWUpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5wb3coMyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGN1YmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3ViZSA9IGNyZWF0ZUN1YmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURpdmlkZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZGl2aWRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdtdWx0aXBseScsICdlcXVhbFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnaW52J107XG52YXIgY3JlYXRlRGl2aWRlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBpbnYgPSBfcmVmLmludjtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBEaXZpZGUgdHdvIHZhbHVlcywgYHggLyB5YC5cbiAgICogVG8gZGl2aWRlIG1hdHJpY2VzLCBgeGAgaXMgbXVsdGlwbGllZCB3aXRoIHRoZSBpbnZlcnNlIG9mIGB5YDogYHggKiBpbnYoeSlgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZGl2aWRlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmRpdmlkZSgyLCAzKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNjY2NjY2NjY2NjY2NjY2NlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC5jb21wbGV4KDUsIDE0KVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGguZGl2aWRlKGEsIGIpICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDIgKyAzaVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gW1s3LCAtNl0sIFsxMywgLTRdXVxuICAgKiAgICBjb25zdCBkID0gW1sxLCAyXSwgWzQsIDNdXVxuICAgKiAgICBtYXRoLmRpdmlkZShjLCBkKSAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1stOSwgNF0sIFstMTEsIDZdXVxuICAgKlxuICAgKiAgICBjb25zdCBlID0gbWF0aC51bml0KCcxOCBrbScpXG4gICAqICAgIG1hdGguZGl2aWRlKGUsIDQuNSkgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDQga21cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgIE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geSAgICAgICAgICBEZW5vbWluYXRvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgIFF1b3RpZW50LCBgeCAvIHlgXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnZGl2aWRlJywgKDAsIF9vYmplY3QuZXh0ZW5kKSh7XG4gICAgLy8gd2UgZXh0ZW5kIHRoZSBzaWduYXR1cmVzIG9mIGRpdmlkZVNjYWxhciB3aXRoIHNpZ25hdHVyZXMgZGVhbGluZyB3aXRoIG1hdHJpY2VzXG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1hdHJpeCByaWdodCBkaXZpc2lvbiB1c2luZyBwc2V1ZG8gaW52ZXJzZVxuICAgICAgLy8gaHR0cHM6Ly93d3cubWF0aHdvcmtzLm5sL2hlbHAvbWF0bGFiL3JlZi9tcmRpdmlkZS5odG1sXG4gICAgICAvLyBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL29jdGF2ZS9kb2MvaW50ZXJwcmV0ZXIvQXJpdGhtZXRpYy1PcHMuaHRtbFxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTIyNjM5MzIvaG93LWRvZXMtZ251LW9jdGF2ZS1tYXRyaXgtZGl2aXNpb24td29yay1nZXR0aW5nLXVuZXhwZWN0ZWQtYmVoYXZpb3VyXG4gICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBhbnlBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTtcbiAgICB9XG4gIH0sIGRpdmlkZVNjYWxhci5zaWduYXR1cmVzKSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlID0gY3JlYXRlRGl2aWRlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXZpZGVTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdkaXZpZGVTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbnVtZXJpYyddO1xudmFyIGNyZWF0ZURpdmlkZVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljO1xuXG4gIC8qKlxuICAgKiBEaXZpZGUgdHdvIHNjYWxhciB2YWx1ZXMsIGB4IC8geWAuXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzZTogaXQgaXMgdXNlZCBieSB0aGUgcHVibGljIGZ1bmN0aW9uc1xuICAgKiBgZGl2aWRlYCBhbmQgYGludmAuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IHkgICAgICAgICAgRGVub21pbmF0b3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0gICAgIFF1b3RpZW50LCBgeCAvIHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgZGl2aWRlU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCAvIHk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmRpdih5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnVW5pdCwgbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyRnJhY3Rpb25CaWdOdW1iZXIoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTsgLy8gVE9ETzogbW92ZSB0aGUgZGl2aWRlIGZ1bmN0aW9uIHRvIFVuaXQuanMsIGl0IHVzZXMgaW50ZXJuYWxzIG9mIFVuaXRcblxuICAgICAgdmFyIG9uZSA9IG51bWVyaWMoMSwgKDAsIF9pcy50eXBlT2YpKHkpKTtcbiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcihyZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZShvbmUpIDogcmVzLnZhbHVlLCB5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlclVuaXQoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHkuY2xvbmUoKTtcbiAgICAgIHJlcyA9IHJlcy5wb3coLTEpOyAvLyBUT0RPOiBtb3ZlIHRoZSBkaXZpZGUgZnVuY3Rpb24gdG8gVW5pdC5qcywgaXQgdXNlcyBpbnRlcm5hbHMgb2YgVW5pdFxuXG4gICAgICB2YXIgb25lID0gbnVtZXJpYygxLCAoMCwgX2lzLnR5cGVPZikoeCkpO1xuICAgICAgcmVzLnZhbHVlID0gZGl2aWRlU2NhbGFyKHgsIHkudmFsdWUgPT09IG51bGwgPyB5Ll9ub3JtYWxpemUob25lKSA6IHkudmFsdWUpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZGl2aWRlKHkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkaXZpZGVTY2FsYXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlU2NhbGFyID0gY3JlYXRlRGl2aWRlU2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3REaXZpZGUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90RGl2aWRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEb3REaXZpZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAyID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogRGl2aWRlIHR3byBtYXRyaWNlcyBlbGVtZW50IHdpc2UuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGJvdGggbWF0cmljZXMgYW5kXG4gICAqIHNjYWxhciB2YWx1ZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5kb3REaXZpZGUoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90RGl2aWRlKDIsIDQpICAgLy8gcmV0dXJucyAwLjVcbiAgICpcbiAgICogICAgYSA9IFtbOSwgNV0sIFs2LCAxXV1cbiAgICogICAgYiA9IFtbMywgMl0sIFs1LCAyXV1cbiAgICpcbiAgICogICAgbWF0aC5kb3REaXZpZGUoYSwgYikgICAvLyByZXR1cm5zIFtbMywgMi41XSwgWzEuMiwgMC41XV1cbiAgICogICAgbWF0aC5kaXZpZGUoYSwgYikgICAgICAvLyByZXR1cm5zIFtbMS43NSwgMC43NV0sIFstMS43NSwgMi4yNV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGUsIG11bHRpcGx5LCBkb3RNdWx0aXBseVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtZXJhdG9yXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBEZW5vbWluYXRvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBRdW90aWVudCwgYHggLi8geWBcbiAgICovXG5cbiAgdmFyIGRvdERpdmlkZSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBkaXZpZGVTY2FsYXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBkaXZpZGVTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdERpdmlkZShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90RGl2aWRlKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3REaXZpZGUoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdERpdmlkZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3REaXZpZGUgPSBjcmVhdGVEb3REaXZpZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdE11bHRpcGx5ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90TXVsdGlwbHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJ107XG52YXIgY3JlYXRlRG90TXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXI7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA5ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBNdWx0aXBseSB0d28gbWF0cmljZXMgZWxlbWVudCB3aXNlLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyBib3RoIG1hdHJpY2VzIGFuZFxuICAgKiBzY2FsYXIgdmFsdWVzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoMiwgNCkgLy8gcmV0dXJucyA4XG4gICAqXG4gICAqICAgIGEgPSBbWzksIDVdLCBbNiwgMV1dXG4gICAqICAgIGIgPSBbWzMsIDJdLCBbNSwgMl1dXG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoYSwgYikgLy8gcmV0dXJucyBbWzI3LCAxMF0sIFszMCwgMl1dXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgLy8gcmV0dXJucyBbWzUyLCAyOF0sIFsyMywgMTRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIGRpdmlkZSwgZG90RGl2aWRlXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBMZWZ0IGhhbmQgdmFsdWVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFJpZ2h0IGhhbmQgdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGljYXRpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGRvdE11bHRpcGx5ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IG11bHRpcGx5U2NhbGFyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDkoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbXVsdGlwbHlTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdE11bHRpcGx5KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RNdWx0aXBseShtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90TXVsdGlwbHkoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdE11bHRpcGx5O1xufSk7XG5leHBvcnRzLmNyZWF0ZURvdE11bHRpcGx5ID0gY3JlYXRlRG90TXVsdGlwbHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdFBvdyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90UG93JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJywgJ21hdHJpeCcsICdwb3cnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEb3RQb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5IGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdFBvdyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kb3RQb3coMiwgMykgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIG1hdGguZG90UG93KGEsIDIpICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzEsIDRdLCBbMTYsIDldXVxuICAgKiAgICBtYXRoLnBvdyhhLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1s5LCA4XSwgWzE2LCAxN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwb3csIHNxcnQsIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFRoZSBiYXNlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgIFRoZSBleHBvbmVudFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiBgeGAgdG8gdGhlIHBvd2VyIGB5YFxuICAgKi9cblxuICB2YXIgZG90UG93ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IHBvdyxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgcG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHBvdyk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90UG93KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RQb3cobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdFBvdyh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkb3RQb3csIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRvdFBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBkb3RQb3csIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgZG90UG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZG90UG93LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBkb3RQb3csIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZG90UG93O1xufSk7XG5leHBvcnRzLmNyZWF0ZURvdFBvdyA9IGNyZWF0ZURvdFBvdzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZXhwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRXhwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBleHBvbmVudCBvZiBhIHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXhwKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmV4cCgyKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLnBvdyhtYXRoLmUsIDIpICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLmxvZyhtYXRoLmV4cCgyKSkgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICpcbiAgICogICAgbWF0aC5leHAoWzEsIDIsIDNdKVxuICAgKiAgICAvLyByZXR1cm5zIEFycmF5IFtcbiAgICogICAgLy8gICAyLjcxODI4MTgyODQ1OTA0NSxcbiAgICogICAgLy8gICA3LjM4OTA1NjA5ODkzMDY0OTUsXG4gICAqICAgIC8vICAgMjAuMDg1NTM2OTIzMTg3NjY4XG4gICAqICAgIC8vIF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cG0xLCBsb2csIHBvd1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgQSBudW1iZXIgb3IgbWF0cml4IHRvIGV4cG9uZW50aWF0ZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEV4cG9uZW50IG9mIGB4YFxuICAgKi9cbiAgdmFyIGV4cCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZXhwTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5leHAoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIFRPRE86IGV4cChzcGFyc2UpIHNob3VsZCByZXR1cm4gYSBkZW5zZSBtYXRyaXggc2luY2UgZXhwKDApPT0xXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGV4cCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGV4cDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHAgPSBjcmVhdGVFeHA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUV4cG0xID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZXhwbTEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUV4cG0xID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9Db21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHN1YnRyYWN0aW5nIDEgZnJvbSB0aGUgZXhwb25lbnRpYWwgdmFsdWUuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5leHBtMSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5leHBtMSgyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2LjM4OTA1NjA5ODkzMDY1XG4gICAqICAgIG1hdGgucG93KG1hdGguZSwgMikgLSAxICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNi4zODkwNTYwOTg5MzA2NDk1XG4gICAqICAgIG1hdGgubG9nKG1hdGguZXhwbTEoMikgKyAxKSAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKlxuICAgKiAgICBtYXRoLmV4cG0xKFsxLCAyLCAzXSlcbiAgICogICAgLy8gcmV0dXJucyBBcnJheSBbXG4gICAqICAgIC8vICAgMS43MTgyODE4Mjg0NTkwNDUsXG4gICAqICAgIC8vICAgNi4zODkwNTYwOTg5MzA2NDk1LFxuICAgKiAgICAvLyAgIDE5LjA4NTUzNjkyMzE4NzY2OFxuICAgKiAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgcG93XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG51bWJlciBvciBtYXRyaXggdG8gYXBwbHkgZXhwbTFcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBFeHBvbmVudCBvZiBgeGBcbiAgICovXG4gIHZhciBleHBtMSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZXhwbTFOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICB2YXIgciA9IE1hdGguZXhwKHgucmUpO1xuICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleChyICogTWF0aC5jb3MoeC5pbSkgLSAxLCByICogTWF0aC5zaW4oeC5pbSkpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCkubWludXMoMSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGV4cG0xKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZXhwbTE7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwbTEgPSBjcmVhdGVFeHBtMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRml4ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ZpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdDb21wbGV4JywgJ2NlaWwnLCAnZmxvb3InXTtcbnZhciBjcmVhdGVGaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXgsXG4gICAgICBjZWlsID0gX3JlZi5jZWlsLFxuICAgICAgZmxvb3IgPSBfcmVmLmZsb29yO1xuXG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgemVyby5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZpeCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5maXgoMy4yKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGguZml4KDMuOCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZpeCgtNC4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGguZml4KC00LjcpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTRcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguZml4KGMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAyaVxuICAgKlxuICAgKiAgICBtYXRoLmZpeChbMy4yLCAzLjgsIC00LjddKSAgIC8vIHJldHVybnMgQXJyYXkgWzMsIDMsIC00XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZmxvb3IsIHJvdW5kXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIGZpeCA9IHR5cGVkKCdmaXgnLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHggPiAwID8gZmxvb3IoeCkgOiBjZWlsKHgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4gbmV3IF9Db21wbGV4KHgucmUgPiAwID8gTWF0aC5mbG9vcih4LnJlKSA6IE1hdGguY2VpbCh4LnJlKSwgeC5pbSA+IDAgPyBNYXRoLmZsb29yKHguaW0pIDogTWF0aC5jZWlsKHguaW0pKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzTmVnYXRpdmUoKSA/IGNlaWwoeCkgOiBmbG9vcih4KTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5zIDwgMCA/IHguY2VpbCgpIDogeC5mbG9vcigpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBmaXgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGZpeCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpeDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGaXggPSBjcmVhdGVGaXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZsb29yID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBuYW1lID0gJ2Zsb29yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdyb3VuZCddO1xudmFyIGNyZWF0ZUZsb29yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgcm91bmQgPSBfcmVmLnJvdW5kO1xuXG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgbWludXMgaW5maW5pdHkuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcigzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGguZmxvb3IoMy44KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZsb29yKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC01XG4gICAqICAgIG1hdGguZmxvb3IoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTVcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguZmxvb3IoYykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAzaVxuICAgKlxuICAgKiAgICBtYXRoLmZsb29yKFszLjIsIDMuOCwgLTQuN10pIC8vIHJldHVybnMgQXJyYXkgWzMsIDMsIC01XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZml4LCByb3VuZFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFJvdW5kZWQgdmFsdWVcbiAgICovXG4gIHZhciBmbG9vciA9IHR5cGVkKCdmbG9vcicsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHJvdW5kKHgpLCBjb25maWcuZXBzaWxvbikpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmZsb29yKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5mbG9vcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LmZsb29yKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGZsb29yKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBmbG9vciwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsb29yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZsb29yID0gY3JlYXRlRmxvb3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUdjZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDRcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZ2NkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVHY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIG9yIG1vcmUgdmFsdWVzIG9yIGFycmF5cy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmdjZChhLCBiKVxuICAgKiAgICBtYXRoLmdjZChhLCBiLCBjLCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmdjZCgtNCwgNikgICAgICAgICAgICAgIC8vIHJldHVybnMgMlxuICAgKiAgICBtYXRoLmdjZCgyNSwgMTUsIC0xMCkgICAgICAgIC8vIHJldHVybnMgNVxuICAgKlxuICAgKiAgICBtYXRoLmdjZChbOCwgLTRdLCBbMTIsIDZdKSAgIC8vIHJldHVybnMgWzQsIDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBsY20sIHhnY2RcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgVHdvIG9yIG1vcmUgaW50ZWdlciBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yXG4gICAqL1xuXG4gIHZhciBnY2QgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5nY2ROdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2djZEJpZ051bWJlcixcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5nY2QoeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA0KHgsIHksIGdjZCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgZ2NkLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgZ2NkKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBnY2QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGdjZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZ2NkKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHgsIHksIGdjZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgZ2NkLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGdjZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBnY2QsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGdjZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogbmVlZCBhIHNtYXJ0ZXIgbm90YXRpb24gaGVyZVxuICAgICdBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXIsIC4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXJBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGEsIGIsIGFyZ3MpIHtcbiAgICAgIHZhciByZXMgPSBnY2QoYSwgYik7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXMgPSBnY2QocmVzLCBhcmdzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZ2NkO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIGdjZCBmb3IgQmlnTnVtYmVyc1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIGdyZWF0ZXN0IGNvbW1vbiBkZW5vbWluYXRvciBvZiBhIGFuZCBiXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9nY2RCaWdOdW1iZXIoYSwgYikge1xuICAgIGlmICghYS5pc0ludCgpIHx8ICFiLmlzSW50KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBnY2QgbXVzdCBiZSBpbnRlZ2VyIG51bWJlcnMnKTtcbiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cblxuXG4gICAgdmFyIHplcm8gPSBuZXcgQmlnTnVtYmVyKDApO1xuXG4gICAgd2hpbGUgKCFiLmlzWmVybygpKSB7XG4gICAgICB2YXIgciA9IGEubW9kKGIpO1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcjtcbiAgICB9XG5cbiAgICByZXR1cm4gYS5sdCh6ZXJvKSA/IGEubmVnKCkgOiBhO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlR2NkID0gY3JlYXRlR2NkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVIeXBvdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBuYW1lID0gJ2h5cG90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGRTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3NxcnQnLCAnc21hbGxlcicsICdpc1Bvc2l0aXZlJ107XG52YXIgY3JlYXRlSHlwb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgaHlwb3RlbnVzYSBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICAgaHlwb3QoYSwgYiwgYywgLi4uKSA9IHNxcnQoYV4yICsgYl4yICsgY14yICsgLi4uKVxuICAgKlxuICAgKiBGb3IgbWF0cml4IGlucHV0LCB0aGUgaHlwb3RlbnVzYSBpcyBjYWxjdWxhdGVkIGZvciBhbGwgdmFsdWVzIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaHlwb3QoYSwgYiwgLi4uKVxuICAgKiAgICAgbWF0aC5oeXBvdChbYSwgYiwgYywgLi4uXSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmh5cG90KDMsIDQpICAgICAgLy8gNVxuICAgKiAgICAgbWF0aC5oeXBvdCgzLCA0LCA1KSAgIC8vIDcuMDcxMDY3ODExODY1NDc1NVxuICAgKiAgICAgbWF0aC5oeXBvdChbMywgNCwgNV0pIC8vIDcuMDcxMDY3ODExODY1NDc1NVxuICAgKiAgICAgbWF0aC5oeXBvdCgtMikgICAgICAgIC8vIDJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBhYnMsIG5vcm1cbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGFyZ3MgICAgQSBsaXN0IHdpdGggbnVtZXJpYyB2YWx1ZXMgb3IgYW4gQXJyYXkgb3IgTWF0cml4LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXggYW5kIEFycmF5IGlucHV0IGlzIGZsYXR0ZW5lZCBhbmQgcmV0dXJucyBhXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBudW1iZXIgZm9yIHRoZSB3aG9sZSBtYXRyaXguXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgaHlwb3RoZW51c2Egb2YgdGhlIGlucHV0IHZhbHVlcy5cbiAgICovXG4gIHZhciBoeXBvdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uIG51bWJlciB8IEJpZ051bWJlcic6IF9oeXBvdCxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIGh5cG90LmFwcGx5KGh5cG90LCAoMCwgX2FycmF5LmZsYXR0ZW4pKHgpKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBoeXBvdC5hcHBseShoeXBvdCwgKDAsIF9hcnJheS5mbGF0dGVuKSh4LnRvQXJyYXkoKSkpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2EgZm9yIGFuIEFycmF5IHdpdGggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlciB8IEJpZ051bWJlcj59IGFyZ3NcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyfSBSZXR1cm5zIHRoZSByZXN1bHRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2h5cG90KGFyZ3MpIHtcbiAgICAvLyBjb2RlIGJhc2VkIG9uIGBoeXBvdGAgZnJvbSBlczYtc2hpbTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGF1bG1pbGxyL2VzNi1zaGltL2Jsb2IvbWFzdGVyL2VzNi1zaGltLmpzI0wxNjE5LUwxNjMzXG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgdmFyIGxhcmdlc3QgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhYnMoYXJnc1tpXSk7XG5cbiAgICAgIGlmIChzbWFsbGVyKGxhcmdlc3QsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseVNjYWxhcihyZXN1bHQsIG11bHRpcGx5U2NhbGFyKGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSksIGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSkpKTtcbiAgICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKHJlc3VsdCwgMSk7XG4gICAgICAgIGxhcmdlc3QgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGFkZFNjYWxhcihyZXN1bHQsIGlzUG9zaXRpdmUodmFsdWUpID8gbXVsdGlwbHlTY2FsYXIoZGl2aWRlU2NhbGFyKHZhbHVlLCBsYXJnZXN0KSwgZGl2aWRlU2NhbGFyKHZhbHVlLCBsYXJnZXN0KSkgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG11bHRpcGx5U2NhbGFyKGxhcmdlc3QsIHNxcnQocmVzdWx0KSk7XG4gIH1cblxuICByZXR1cm4gaHlwb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlSHlwb3QgPSBjcmVhdGVIeXBvdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTGNtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsY20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlTGNtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgZm9yIHR3byBvciBtb3JlIHZhbHVlcyBvciBhcnJheXMuXG4gICAqXG4gICAqIGxjbSBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICAgbGNtKGEsIGIpID0gYWJzKGEgKiBiKSAvIGdjZChhLCBiKVxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGNtKGEsIGIpXG4gICAqICAgIG1hdGgubGNtKGEsIGIsIGMsIC4uLilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubGNtKDQsIDYpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMlxuICAgKiAgICBtYXRoLmxjbSg2LCAyMSkgICAgICAgICAgICAgIC8vIHJldHVybnMgNDJcbiAgICogICAgbWF0aC5sY20oNiwgMjEsIDUpICAgICAgICAgICAvLyByZXR1cm5zIDIxMFxuICAgKlxuICAgKiAgICBtYXRoLmxjbShbNCwgNl0sIFs2LCAyMV0pICAgIC8vIHJldHVybnMgWzEyLCA0Ml1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGdjZCwgeGdjZFxuICAgKlxuICAgKiBAcGFyYW0gey4uLiBudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgVHdvIG9yIG1vcmUgaW50ZWdlciBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGVcbiAgICovXG5cbiAgdmFyIGxjbSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmxjbU51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfbGNtQmlnTnVtYmVyLFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmxjbSh5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDYoeCwgeSwgbGNtKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBsY20sIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsY20pO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxjbShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGNtKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsY20oeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbGNtLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsY20sIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgbGNtLCB0cnVlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGxjbSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGNtLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiBuZWVkIGEgc21hcnRlciBub3RhdGlvbiBoZXJlXG4gICAgJ0FycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgLi4uQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYSwgYiwgYXJncykge1xuICAgICAgdmFyIHJlcyA9IGxjbShhLCBiKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlcyA9IGxjbShyZXMsIGFyZ3NbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsY207XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgbGNtIGZvciB0d28gQmlnTnVtYmVyc1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgb2YgYSBhbmQgYlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbGNtQmlnTnVtYmVyKGEsIGIpIHtcbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKGEuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGlmIChiLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYjtcbiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cbiAgICAvLyBldmFsdWF0ZSBsY20gaGVyZSBpbmxpbmUgdG8gcmVkdWNlIG92ZXJoZWFkXG5cblxuICAgIHZhciBwcm9kID0gYS50aW1lcyhiKTtcblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgdmFyIHQgPSBiO1xuICAgICAgYiA9IGEubW9kKHQpO1xuICAgICAgYSA9IHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2QuZGl2KGEpLmFicygpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTGNtID0gY3JlYXRlTGNtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsb2cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2RpdmlkZVNjYWxhcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlTG9nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nKHgpXG4gICAqICAgIG1hdGgubG9nKHgsIGJhc2UpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxvZygzLjUpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxLjI1Mjc2Mjk2ODQ5NTM2OFxuICAgKiAgICBtYXRoLmV4cChtYXRoLmxvZygyLjQpKSAgICAgICAgLy8gcmV0dXJucyAyLjRcbiAgICpcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTAwMDBcbiAgICogICAgbWF0aC5sb2coMTAwMDAsIDEwKSAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmxvZygxMDAwMCkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqICAgIG1hdGgubG9nKDEwMjQsIDIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgIG1hdGgucG93KDIsIDEwKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nMiwgbG9nMTAsIGxvZzFwXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IFtiYXNlPWVdXG4gICAqICAgICAgICAgICAgT3B0aW9uYWwgYmFzZSBmb3IgdGhlIGxvZ2FyaXRobS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgbmF0dXJhbFxuICAgKiAgICAgICAgICAgIGxvZ2FyaXRobSBvZiBgeGAgaXMgY2FsY3VsYXRlZC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGxvZ2FyaXRobSBvZiBgeGBcbiAgICovXG4gIHZhciBsb2cgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZ051bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5sb2coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubG9nKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG93bmdyYWRlIHRvIG51bWJlciwgcmV0dXJuIENvbXBsZXggdmFsdWVkIHJlc3VsdFxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKS5sb2coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgbG9nYXJpdGhtIGZvciBhIHNwZWNpZmllZCBiYXNlLCBsb2coeCwgYmFzZSlcbiAgICAgIHJldHVybiBkaXZpZGVTY2FsYXIobG9nKHgpLCBsb2coYmFzZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsb2c7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nID0gY3JlYXRlTG9nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxMCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2xvZzEwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107XG52YXIgY3JlYXRlTG9nMTAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBfQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSAxMC1iYXNlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGN1bGF0aW5nIGBsb2coeCwgMTApYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzEwKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzEwKDAuMDAwMDEpICAgICAgICAgICAgLy8gcmV0dXJucyAtNVxuICAgKiAgICBtYXRoLmxvZzEwKDEwMDAwKSAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nKDEwMDAwKSAvIG1hdGgubG9nKDEwKSAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTAwMDBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nLCBsb2cxcCwgbG9nMlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGB4YFxuICAgKi9cbiAgdmFyIGxvZzEwID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5sb2cxME51bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCwgMCkubG9nKCkuZGl2KE1hdGguTE4xMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCkubG9nKCkuZGl2KE1hdGguTE4xMCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sb2coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleCh4LnRvTnVtYmVyKCksIDApLmxvZygpLmRpdihNYXRoLkxOMTApO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBsb2cxMCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxvZzEwO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzEwID0gY3JlYXRlTG9nMTA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzFwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nMXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2RpdmlkZVNjYWxhcicsICdsb2cnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBsb2cgPSBfcmVmLmxvZyxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtIG9mIGEgYHZhbHVlKzFgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMXAoeClcbiAgICogICAgbWF0aC5sb2cxcCh4LCBiYXNlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cxcCgyLjUpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEuMjUyNzYyOTY4NDk1MzY4XG4gICAqICAgIG1hdGguZXhwKG1hdGgubG9nMXAoMS40KSkgICAgICAgLy8gcmV0dXJucyAyLjRcbiAgICpcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMDAwXG4gICAqICAgIG1hdGgubG9nMXAoOTk5OSwgMTApICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nMXAoOTk5OSkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgbG9nMiwgbG9nMTBcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYHgrMWAuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gW2Jhc2U9ZV1cbiAgICogICAgICAgICAgICBPcHRpb25hbCBiYXNlIGZvciB0aGUgbG9nYXJpdGhtLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBuYXR1cmFsXG4gICAqICAgICAgICAgICAgbG9nYXJpdGhtIG9mIGB4KzFgIGlzIGNhbGN1bGF0ZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYHgrMWBcbiAgICovXG4gIHZhciBsb2cxcCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAtMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZzFwKSh4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGNvbXBsZXggdmFsdWUgY29tcHV0YXRpb25cbiAgICAgICAgcmV0dXJuIF9sb2cxcENvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogX2xvZzFwQ29tcGxleCxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICB2YXIgeSA9IHgucGx1cygxKTtcblxuICAgICAgaWYgKCF5LmlzTmVnYXRpdmUoKSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHkubG4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIF9sb2cxcENvbXBsZXgobmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGxvZzFwKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgbG9nYXJpdGhtIGZvciBhIHNwZWNpZmllZCBiYXNlLCBsb2cxcCh4LCBiYXNlKVxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihsb2cxcCh4KSwgbG9nKGJhc2UpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIGNvbXBsZXggbnVtYmVyICsgMVxuICAgKiBAcGFyYW0ge0NvbXBsZXh9IHhcbiAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9sb2cxcENvbXBsZXgoeCkge1xuICAgIHZhciB4UmUxcCA9IHgucmUgKyAxO1xuICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZyhNYXRoLnNxcnQoeFJlMXAgKiB4UmUxcCArIHguaW0gKiB4LmltKSksIE1hdGguYXRhbjIoeC5pbSwgeFJlMXApKTtcbiAgfVxuXG4gIHJldHVybiBsb2cxcDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxcCA9IGNyZWF0ZUxvZzFwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIDItYmFzZSBvZiBhIHZhbHVlLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGN1bGF0aW5nIGBsb2coeCwgMilgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cyKDAuMDMxMjUpICAgICAgICAgICAvLyByZXR1cm5zIC01XG4gICAqICAgIG1hdGgubG9nMigxNikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nMigxNikgLyBtYXRoLmxvZzIoMikgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgucG93KDIsIDQpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXhwLCBsb2csIGxvZzFwLCBsb2cxMFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIDItYmFzZSBsb2dhcml0aG0gb2YgYHhgXG4gICAqL1xuICB2YXIgbG9nMiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIubG9nMk51bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBfbG9nMkNvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogX2xvZzJDb21wbGV4LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIGlmICgheC5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LmxvZygyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIF9sb2cyQ29tcGxleChuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nMik7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBsb2cyIGZvciBhIGNvbXBsZXggdmFsdWVcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbG9nMkNvbXBsZXgoeCkge1xuICAgIHZhciBuZXdYID0gTWF0aC5zcXJ0KHgucmUgKiB4LnJlICsgeC5pbSAqIHguaW0pO1xuICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZzIgPyBNYXRoLmxvZzIobmV3WCkgOiBNYXRoLmxvZyhuZXdYKSAvIE1hdGguTE4yLCBNYXRoLmF0YW4yKHguaW0sIHgucmUpIC8gTWF0aC5MTjIpO1xuICB9XG5cbiAgcmV0dXJuIGxvZzI7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nMiA9IGNyZWF0ZUxvZzI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1vZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ21vZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVNb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTYuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG1vZHVsdXMsIHRoZSByZW1haW5kZXIgb2YgYW4gaW50ZWdlciBkaXZpc2lvbi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogVGhlIG1vZHVsdXMgaXMgZGVmaW5lZCBhczpcbiAgICpcbiAgICogICAgIHggLSB5ICogZmxvb3IoeCAvIHkpXG4gICAqXG4gICAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubW9kKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm1vZCg4LCAzKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICogICAgbWF0aC5tb2QoMTEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIGlzT2RkKHgpIHtcbiAgICogICAgICByZXR1cm4gbWF0aC5tb2QoeCwgMikgIT0gMFxuICAgKiAgICB9XG4gICAqXG4gICAqICAgIGlzT2RkKDIpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgaXNPZGQoMykgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0geCBEaXZpZGVuZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB5IERpdmlzb3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIGB4YCBkaXZpZGVkIGJ5IGB5YC5cbiAgICovXG5cbiAgdmFyIG1vZCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm1vZE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHkuaXNaZXJvKCkgPyB4IDogeC5tb2QoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5tb2QoeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA1KHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIG1vZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbW9kKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtb2QobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG1vZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBtb2QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBtb2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbW9kLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBtb2QsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbW9kO1xufSk7XG5leHBvcnRzLmNyZWF0ZU1vZCA9IGNyZWF0ZU1vZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTXVsdGlwbHkgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ211bHRpcGx5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVNdWx0aXBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIE11bHRpcGx5IHR3byBvciBtb3JlIHZhbHVlcywgYHggKiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgbWF0cml4IHByb2R1Y3QgaXMgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm11bHRpcGx5KHgsIHkpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoeCwgeSwgeiwgLi4uKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aXBseSg0LCA1LjIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAyMC44XG4gICAqICAgIG1hdGgubXVsdGlwbHkoMiwgMywgNCkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMjRcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDUgKyAxNGlcbiAgICpcbiAgICogICAgY29uc3QgYyA9IFtbMSwgMl0sIFs0LCAzXV1cbiAgICogICAgY29uc3QgZCA9IFtbMSwgMiwgM10sIFszLCAtNCwgN11dXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYywgZCkgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzcsIC02LCAxN10sIFsxMywgLTQsIDMzXV1cbiAgICpcbiAgICogICAgY29uc3QgZSA9IG1hdGgudW5pdCgnMi4xIGttJylcbiAgICogICAgbWF0aC5tdWx0aXBseSgzLCBlKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgNi4zIGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGUsIHByb2QsIGNyb3NzLCBkb3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gbXVsdGlwbHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSBNdWx0aXBsaWNhdGlvbiBvZiBgeGAgYW5kIGB5YFxuICAgKi9cblxuICB2YXIgbXVsdGlwbHkgPSB0eXBlZChuYW1lLCAoMCwgX29iamVjdC5leHRlbmQpKHtcbiAgICAvLyB3ZSBleHRlbmQgdGhlIHNpZ25hdHVyZXMgb2YgbXVsdGlwbHlTY2FsYXIgd2l0aCBzaWduYXR1cmVzIGRlYWxpbmcgd2l0aCBtYXRyaWNlc1xuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICAgIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeSkpOyAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cblxuICAgICAgdmFyIG0gPSBtdWx0aXBseShtYXRyaXgoeCksIG1hdHJpeCh5KSk7IC8vIHJldHVybiBhcnJheSBvciBzY2FsYXJcblxuICAgICAgcmV0dXJuICgwLCBfaXMuaXNNYXRyaXgpKG0pID8gbS52YWx1ZU9mKCkgOiBtO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRpbWVuc2lvbnNcbiAgICAgIHZhciB4c2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgdmFyIHlzaXplID0geS5zaXplKCk7IC8vIGNoZWNrIGRpbWVuc2lvbnNcblxuICAgICAgX3ZhbGlkYXRlTWF0cml4RGltZW5zaW9ucyh4c2l6ZSwgeXNpemUpOyAvLyBwcm9jZXNzIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAoeHNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zXG4gICAgICAgIGlmICh5c2l6ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAvLyBWZWN0b3IgKiBWZWN0b3JcbiAgICAgICAgICByZXR1cm4gX211bHRpcGx5VmVjdG9yVmVjdG9yKHgsIHksIHhzaXplWzBdKTtcbiAgICAgICAgfSAvLyBWZWN0b3IgKiBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoeCwgeSk7XG4gICAgICB9IC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zXG5cblxuICAgICAgaWYgKHlzaXplLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBNYXRyaXggKiBWZWN0b3JcbiAgICAgICAgcmV0dXJuIF9tdWx0aXBseU1hdHJpeFZlY3Rvcih4LCB5KTtcbiAgICAgIH0gLy8gTWF0cml4ICogTWF0cml4XG5cblxuICAgICAgcmV0dXJuIF9tdWx0aXBseU1hdHJpeE1hdHJpeCh4LCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIE1hdHJpeCAqIE1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG11bHRpcGx5KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBNYXRyaXggKiBNYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgoeCwgeS5zdG9yYWdlKCkpLCB5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBhbnknOiBtdWx0aXBseVNjYWxhcixcbiAgICAnYW55LCBhbnksIC4uLmFueSc6IGZ1bmN0aW9uIGFueUFueUFueSh4LCB5LCByZXN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbXVsdGlwbHkoeCwgeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseShyZXN1bHQsIHJlc3RbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfSwgbXVsdGlwbHlTY2FsYXIuc2lnbmF0dXJlcykpO1xuXG4gIGZ1bmN0aW9uIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoc2l6ZTEsIHNpemUyKSB7XG4gICAgLy8gY2hlY2sgbGVmdCBvcGVyYW5kIGRpbWVuc2lvbnNcbiAgICBzd2l0Y2ggKHNpemUxLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyBjaGVjayBzaXplMlxuICAgICAgICBzd2l0Y2ggKHNpemUyLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIC8vIFZlY3RvciB4IFZlY3RvclxuICAgICAgICAgICAgaWYgKHNpemUxWzBdICE9PSBzaXplMlswXSkge1xuICAgICAgICAgICAgICAvLyB0aHJvdyBlcnJvclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoIGluIG11bHRpcGxpY2F0aW9uLiBWZWN0b3JzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBWZWN0b3IgeCBNYXRyaXhcbiAgICAgICAgICAgIGlmIChzaXplMVswXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gVmVjdG9yIGxlbmd0aCAoJyArIHNpemUxWzBdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggcm93cyAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBCIGhhcyAnICsgc2l6ZTIubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgLy8gY2hlY2sgc2l6ZTJcbiAgICAgICAgc3dpdGNoIChzaXplMi5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAvLyBNYXRyaXggeCBWZWN0b3JcbiAgICAgICAgICAgIGlmIChzaXplMVsxXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IGNvbHVtbnMgKCcgKyBzaXplMVsxXSArICcpIG11c3QgbWF0Y2ggVmVjdG9yIGxlbmd0aCAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBNYXRyaXggeCBNYXRyaXhcbiAgICAgICAgICAgIGlmIChzaXplMVsxXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IEEgY29sdW1ucyAoJyArIHNpemUxWzFdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiByb3dzICgnICsgc2l6ZTJbMF0gKyAnKScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IG11bHRpcGx5IGEgMSBvciAyIGRpbWVuc2lvbmFsIG1hdHJpeCAoTWF0cml4IEIgaGFzICcgKyBzaXplMi5sZW5ndGggKyAnIGRpbWVuc2lvbnMpJyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBBIGhhcyAnICsgc2l6ZTEubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICAgU2NhbGFyIHZhbHVlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX211bHRpcGx5VmVjdG9yVmVjdG9yKGEsIGIsIG4pIHtcbiAgICAvLyBjaGVjayBlbXB0eSB2ZWN0b3JcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgdHdvIGVtcHR5IHZlY3RvcnMnKTtcbiAgICB9IC8vIGEgZGVuc2VcblxuXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgZGVuc2VcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG5cblxuICAgIHZhciBjID0gbWYoYWRhdGFbMF0sIGJkYXRhWzBdKTsgLy8gbG9vcCBkYXRhXG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IG47IGkrKykge1xuICAgICAgLy8gbXVsdGlwbHkgYW5kIGFjY3VtdWxhdGVcbiAgICAgIGMgPSBhZihjLCBtZihhZGF0YVtpXSwgYmRhdGFbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE0pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoYSwgYikge1xuICAgIC8vIHByb2Nlc3Mgc3RvcmFnZVxuICAgIGlmIChiLnN0b3JhZ2UoKSAhPT0gJ2RlbnNlJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciBTcGFyc2VNYXRyaXggbm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTSlcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBNYXRyaXggICAoTXhOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIERlbnNlIFZlY3RvciAgIChOKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciBhbGVuZ3RoID0gYXNpemVbMF07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBzdW0gKGRvIG5vdCBpbml0aWFsaXplIGl0IHdpdGggemVybylcbiAgICAgIHZhciBzdW0gPSBtZihhZGF0YVswXSwgYmRhdGFbMF1bal0pOyAvLyBsb29wIHZlY3RvclxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFsZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihhZGF0YVtpXSwgYmRhdGFbaV1bal0pKTtcbiAgICAgIH1cblxuICAgICAgY1tqXSA9IHN1bTtcbiAgICB9IC8vIHJldHVybiBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGEuY3JlYXRlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogYyxcbiAgICAgIHNpemU6IFtiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTSlcbiAgICovXG5cblxuICB2YXIgX211bHRpcGx5TWF0cml4VmVjdG9yID0gdHlwZWQoJ19tdWx0aXBseU1hdHJpeFZlY3RvcicsIHtcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yLFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseVNwYXJzZU1hdHJpeFZlY3RvclxuICB9KTtcbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIE1hdHJpeCAgICAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBNYXRyaXggICAgICAgICAoTXhDKVxuICAgKi9cblxuXG4gIHZhciBfbXVsdGlwbHlNYXRyaXhNYXRyaXggPSB0eXBlZCgnX211bHRpcGx5TWF0cml4TWF0cml4Jywge1xuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBfbXVsdGlwbHlEZW5zZU1hdHJpeERlbnNlTWF0cml4LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogX211bHRpcGx5RGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgsXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChNKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yKGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgYWNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgYyA9IFtdOyAvLyBsb29wIG1hdHJpeCBhIHJvd3NcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJvd3M7IGkrKykge1xuICAgICAgLy8gY3VycmVudCByb3dcbiAgICAgIHZhciByb3cgPSBhZGF0YVtpXTsgLy8gc3VtIChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG5cbiAgICAgIHZhciBzdW0gPSBtZihyb3dbMF0sIGJkYXRhWzBdKTsgLy8gbG9vcCBtYXRyaXggYSBjb2x1bW5zXG5cbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYWNvbHVtbnM7IGorKykge1xuICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihyb3dbal0sIGJkYXRhW2pdKSk7XG4gICAgICB9XG5cbiAgICAgIGNbaV0gPSBzdW07XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYXJvd3NdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIERlbnNlTWF0cml4ICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhDKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseURlbnNlTWF0cml4RGVuc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgZGVuc2VcbiAgICB2YXIgYWRhdGEgPSBhLl9kYXRhO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBiIGRlbnNlXG5cbiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGFjb2x1bW5zID0gYXNpemVbMV07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggYSByb3dzXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgIC8vIGN1cnJlbnQgcm93XG4gICAgICB2YXIgcm93ID0gYWRhdGFbaV07IC8vIGluaXRpYWxpemUgcm93IGFycmF5XG5cbiAgICAgIGNbaV0gPSBbXTsgLy8gbG9vcCBtYXRyaXggYiBjb2x1bW5zXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmNvbHVtbnM7IGorKykge1xuICAgICAgICAvLyBzdW0gKGF2b2lkIGluaXRpYWxpemluZyBzdW0gdG8gemVybylcbiAgICAgICAgdmFyIHN1bSA9IG1mKHJvd1swXSwgYmRhdGFbMF1bal0pOyAvLyBsb29wIG1hdHJpeCBhIGNvbHVtbnNcblxuICAgICAgICBmb3IgKHZhciB4ID0gMTsgeCA8IGFjb2x1bW5zOyB4KyspIHtcbiAgICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgICBzdW0gPSBhZihzdW0sIG1mKHJvd1t4XSwgYmRhdGFbeF1bal0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNbaV1bal0gPSBzdW07XG4gICAgICB9XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeChhLCBiKSB7XG4gICAgLy8gYSBkZW5zZVxuICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgc3BhcnNlXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGIgbWF0cml4XG5cbiAgICBpZiAoIWJ2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IERlbnNlIE1hdHJpeCB0aW1lcyBQYXR0ZXJuIG9ubHkgTWF0cml4Jyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgYXJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgYmNvbHVtbnMgPSBic2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjdmFsdWVzID0gW107XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGMgbWF0cml4XG5cbiAgICB2YXIgYyA9IGIuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pOyAvLyBsb29wIGIgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgamIgPSAwOyBqYiA8IGJjb2x1bW5zOyBqYisrKSB7XG4gICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICBjcHRyW2piXSA9IGNpbmRleC5sZW5ndGg7IC8vIGluZGVjZXMgaW4gY29sdW1uIGpiXG5cbiAgICAgIHZhciBrYjAgPSBicHRyW2piXTtcbiAgICAgIHZhciBrYjEgPSBicHRyW2piICsgMV07IC8vIGRvIG5vdCBwcm9jZXNzIGNvbHVtbiBqYiBpZiBubyBkYXRhIGV4aXN0c1xuXG4gICAgICBpZiAoa2IxID4ga2IwKSB7XG4gICAgICAgIC8vIGxhc3Qgcm93IG1hcmsgcHJvY2Vzc2VkXG4gICAgICAgIHZhciBsYXN0ID0gMDsgLy8gbG9vcCBhIHJvd3NcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyBjb2x1bW4gbWFya1xuICAgICAgICAgIHZhciBtYXJrID0gaSArIDE7IC8vIENbaSwgamJdXG5cbiAgICAgICAgICB2YXIgY2lqID0gdm9pZCAwOyAvLyB2YWx1ZXMgaW4gYiBjb2x1bW4galxuXG4gICAgICAgICAgZm9yICh2YXIga2IgPSBrYjA7IGtiIDwga2IxOyBrYisrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIHZhciBpYiA9IGJpbmRleFtrYl07IC8vIGNoZWNrIHZhbHVlIGhhcyBiZWVuIGluaXRpYWxpemVkXG5cbiAgICAgICAgICAgIGlmIChsYXN0ICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAgIC8vIGZpcnN0IHZhbHVlIGluIGNvbHVtbiBqYlxuICAgICAgICAgICAgICBjaWogPSBtZihhZGF0YVtpXVtpYl0sIGJ2YWx1ZXNba2JdKTsgLy8gdXBkYXRlIG1hcmtcblxuICAgICAgICAgICAgICBsYXN0ID0gbWFyaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFjY3VtdWxhdGUgdmFsdWVcbiAgICAgICAgICAgICAgY2lqID0gYWYoY2lqLCBtZihhZGF0YVtpXVtpYl0sIGJ2YWx1ZXNba2JdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBjaGVjayBjb2x1bW4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB2YWx1ZSAhPSAwXG5cblxuICAgICAgICAgIGlmIChsYXN0ID09PSBtYXJrICYmICFlcShjaWosIHplcm8pKSB7XG4gICAgICAgICAgICAvLyBwdXNoIHJvdyAmIHZhbHVlXG4gICAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIGN2YWx1ZXMucHVzaChjaWopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAoTSwgMSlcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhWZWN0b3IoYSwgYikge1xuICAgIC8vIGEgc3BhcnNlXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgYSBtYXRyaXhcblxuICAgIGlmICghYXZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgUGF0dGVybiBvbmx5IE1hdHJpeCB0aW1lcyBEZW5zZSBNYXRyaXgnKTtcbiAgICB9IC8vIGIgZGVuc2VcblxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdO1xuICAgIHZhciBicm93cyA9IGIuX3NpemVbMF07IC8vIHJlc3VsdFxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdXBkYXRlIHB0clxuXG4gICAgY3B0clswXSA9IDA7IC8vIHJvd3MgaW4gYlxuXG4gICAgZm9yICh2YXIgaWIgPSAwOyBpYiA8IGJyb3dzOyBpYisrKSB7XG4gICAgICAvLyBiW2liXVxuICAgICAgdmFyIHZiaSA9IGJkYXRhW2liXTsgLy8gY2hlY2sgYltpYl0gIT0gMCwgYXZvaWQgbG9vcHNcblxuICAgICAgaWYgKCFlcSh2YmksIHplcm8pKSB7XG4gICAgICAgIC8vIEEgdmFsdWVzICYgaW5kZXggaW4gaWIgY29sdW1uXG4gICAgICAgIGZvciAodmFyIGthMCA9IGFwdHJbaWJdLCBrYTEgPSBhcHRyW2liICsgMV0sIGthID0ga2EwOyBrYSA8IGthMTsga2ErKykge1xuICAgICAgICAgIC8vIGEgcm93XG4gICAgICAgICAgdmFyIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgaWYgKCF3W2lhXSkge1xuICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgIHdbaWFdID0gdHJ1ZTsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDXG5cbiAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBXG5cbiAgICAgICAgICAgIHhbaWFdID0gbWYodmJpLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpLCBhdmFsdWVzW2thXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gY29weSB2YWx1ZXMgZnJvbSB4IHRvIGNvbHVtbiBqYiBvZiBjXG5cblxuICAgIGZvciAodmFyIHAxID0gY2luZGV4Lmxlbmd0aCwgcCA9IDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAvLyByb3dcbiAgICAgIHZhciBpYyA9IGNpbmRleFtwXTsgLy8gY29weSB2YWx1ZVxuXG4gICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbMV0gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIDFdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhDKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVNwYXJzZU1hdHJpeERlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIHNwYXJzZVxuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGEgbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IFBhdHRlcm4gb25seSBNYXRyaXggdGltZXMgRGVuc2UgTWF0cml4Jyk7XG4gICAgfSAvLyBiIGRlbnNlXG5cblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYS5fc2l6ZVswXTtcbiAgICB2YXIgYnJvd3MgPSBiLl9zaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGIuX3NpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBlcXVhbFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IFtdO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBjIG1hdHJpeFxuXG4gICAgdmFyIGMgPSBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW2Fyb3dzLCBiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeCA9IFtdOyAvLyB2ZWN0b3Igd2l0aCBtYXJrcyBpbmRpY2F0aW5nIGEgdmFsdWUgeFtpXSBleGlzdHMgaW4gYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIGxvb3AgYiBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqYiA9IDA7IGpiIDwgYmNvbHVtbnM7IGpiKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGNwdHJbamJdID0gY2luZGV4Lmxlbmd0aDsgLy8gbWFyayBpbiB3b3Jrc3BhY2UgZm9yIGN1cnJlbnQgY29sdW1uXG5cbiAgICAgIHZhciBtYXJrID0gamIgKyAxOyAvLyByb3dzIGluIGpiXG5cbiAgICAgIGZvciAodmFyIGliID0gMDsgaWIgPCBicm93czsgaWIrKykge1xuICAgICAgICAvLyBiW2liLCBqYl1cbiAgICAgICAgdmFyIHZiaWogPSBiZGF0YVtpYl1bamJdOyAvLyBjaGVjayBiW2liLCBqYl0gIT0gMCwgYXZvaWQgbG9vcHNcblxuICAgICAgICBpZiAoIWVxKHZiaWosIHplcm8pKSB7XG4gICAgICAgICAgLy8gQSB2YWx1ZXMgJiBpbmRleCBpbiBpYiBjb2x1bW5cbiAgICAgICAgICBmb3IgKHZhciBrYTAgPSBhcHRyW2liXSwga2ExID0gYXB0cltpYiArIDFdLCBrYSA9IGthMDsga2EgPCBrYTE7IGthKyspIHtcbiAgICAgICAgICAgIC8vIGEgcm93XG4gICAgICAgICAgICB2YXIgaWEgPSBhaW5kZXhba2FdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqXG5cbiAgICAgICAgICAgIGlmICh3W2lhXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAvLyBpYSBpcyBuZXcgZW50cnkgaW4galxuICAgICAgICAgICAgICB3W2lhXSA9IG1hcms7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQ1xuXG4gICAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBXG5cbiAgICAgICAgICAgICAgeFtpYV0gPSBtZih2YmlqLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBpIGV4aXN0cyBpbiBDIGFscmVhZHlcbiAgICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpaiwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY29weSB2YWx1ZXMgZnJvbSB4IHRvIGNvbHVtbiBqYiBvZiBjXG5cblxuICAgICAgZm9yICh2YXIgcDAgPSBjcHRyW2piXSwgcDEgPSBjaW5kZXgubGVuZ3RoLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbYmNvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBjO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgc3BhcnNlXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBzcGFyc2VcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGIuX3NpemVbMV07IC8vIGZsYWcgaW5kaWNhdGluZyBib3RoIG1hdHJpY2VzIChhICYgYikgY29udGFpbiBkYXRhXG5cbiAgICB2YXIgdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjdmFsdWVzID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGMgbWF0cml4XG5cbiAgICB2YXIgYyA9IGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pOyAvLyB3b3Jrc3BhY2VcblxuICAgIHZhciB4ID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyaWFibGVzXG5cbiAgICB2YXIga2EsIGthMCwga2ExLCBrYiwga2IwLCBrYjEsIGlhLCBpYjsgLy8gbG9vcCBiIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGpiID0gMDsgamIgPCBiY29sdW1uczsgamIrKykge1xuICAgICAgLy8gdXBkYXRlIHB0clxuICAgICAgY3B0cltqYl0gPSBjaW5kZXgubGVuZ3RoOyAvLyBtYXJrIGluIHdvcmtzcGFjZSBmb3IgY3VycmVudCBjb2x1bW5cblxuICAgICAgdmFyIG1hcmsgPSBqYiArIDE7IC8vIEIgdmFsdWVzICYgaW5kZXggaW4galxuXG4gICAgICBmb3IgKGtiMCA9IGJwdHJbamJdLCBrYjEgPSBicHRyW2piICsgMV0sIGtiID0ga2IwOyBrYiA8IGtiMTsga2IrKykge1xuICAgICAgICAvLyBiIHJvd1xuICAgICAgICBpYiA9IGJpbmRleFtrYl07IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgLy8gbG9vcCB2YWx1ZXMgaW4gYVs6LGliXVxuICAgICAgICAgIGZvciAoa2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7IC8vIHgoaWEpID0gQVxuXG4gICAgICAgICAgICAgIHhbaWFdID0gbWYoYnZhbHVlc1trYl0sIGF2YWx1ZXNba2FdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICAgICAgICB4W2lhXSA9IGFmKHhbaWFdLCBtZihidmFsdWVzW2tiXSwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbG9vcCB2YWx1ZXMgaW4gYVs6LGliXVxuICAgICAgICAgIGZvciAoa2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyBtYXRyaXggdmFsdWVzIChwYXR0ZXJuIG1hdHJpeClcblxuXG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIC8vIGNvcHkgdmFsdWVzIGZyb20geCB0byBjb2x1bW4gamIgb2YgY1xuICAgICAgICBmb3IgKHZhciBwMCA9IGNwdHJbamJdLCBwMSA9IGNpbmRleC5sZW5ndGgsIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgICAgIGN2YWx1ZXNbcF0gPSB4W2ljXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIHJldHVybiBtdWx0aXBseTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseSA9IGNyZWF0ZU11bHRpcGx5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseVNjYWxhciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbXVsdGlwbHlTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVNdWx0aXBseVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIE11bHRpcGx5IHR3byBzY2FsYXIgdmFsdWVzLCBgeCAqIHlgLlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCB1c2U6IGl0IGlzIHVzZWQgYnkgdGhlIHB1YmxpYyBmdW5jdGlvblxuICAgKiBgbXVsdGlwbHlgXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gbXVsdGlwbHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0gICAgIE11bHRpcGxpY2F0aW9uIG9mIGB4YCBhbmQgYHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgbXVsdGlwbHlTY2FsYXIgPSB0eXBlZCgnbXVsdGlwbHlTY2FsYXInLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5tdWx0aXBseU51bWJlcixcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bCh5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC50aW1lcyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bCh5KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlciB8IENvbXBsZXgsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXhVbml0KHgsIHkpIHtcbiAgICAgIHZhciByZXMgPSB5LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSByZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZSh4KSA6IG11bHRpcGx5U2NhbGFyKHJlcy52YWx1ZSwgeCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ1VuaXQsIG51bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyIHwgQ29tcGxleCc6IGZ1bmN0aW9uIFVuaXROdW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXgoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHJlcy52YWx1ZSA9PT0gbnVsbCA/IHJlcy5fbm9ybWFsaXplKHkpIDogbXVsdGlwbHlTY2FsYXIocmVzLnZhbHVlLCB5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bHRpcGx5KHkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtdWx0aXBseVNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseVNjYWxhciA9IGNyZWF0ZU11bHRpcGx5U2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbm9ybSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ3BvdycsICdjb25qJywgJ3NxcnQnLCAnbXVsdGlwbHknLCAnZXF1YWxTY2FsYXInLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbWF0cml4J107XG52YXIgY3JlYXRlTm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBjb25qID0gX3JlZi5jb25qLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG5vcm0gb2YgYSBudW1iZXIsIHZlY3RvciBvciBtYXRyaXguXG4gICAqXG4gICAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHAgaXMgb3B0aW9uYWwuIElmIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gMi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0oeClcbiAgICogICAgbWF0aC5ub3JtKHgsIHApXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFicygtMy41KSAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKiAgICBtYXRoLm5vcm0oLTMuNSkgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0obWF0aC5jb21wbGV4KDMsIC00KSkgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFsxLCAyLCAtM10sIEluZmluaXR5KSAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgIG1hdGgubm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpICAgICAgIC8vIHJldHVybnMgMVxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0oWzMsIDRdLCAyKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpICAgICAgICAgIC8vIHJldHVybnMgNlxuICAgKiAgICBtYXRoLm5vcm0oW1sxLCAyXSwgWzMsIDRdXSwgJ2luZicpICAgICAvLyByZXR1cm5zIDdcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sICdmcm8nKSAgICAgLy8gcmV0dXJucyA1LjQ3NzIyNTU3NTA1MTY2MVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWJzLCBoeXBvdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBub3JtXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IHN0cmluZ30gW3A9Ml1cbiAgICogICAgICAgICAgICBWZWN0b3Igc3BhY2UuXG4gICAqICAgICAgICAgICAgU3VwcG9ydGVkIG51bWJlcnMgaW5jbHVkZSBJbmZpbml0eSBhbmQgLUluZmluaXR5LlxuICAgKiAgICAgICAgICAgIFN1cHBvcnRlZCBzdHJpbmdzIGFyZTogJ2luZicsICctaW5mJywgYW5kICdmcm8nIChUaGUgRnJvYmVuaXVzIG5vcm0pXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gdGhlIHAtbm9ybVxuICAgKi9cbiAgdmFyIG5vcm0gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBNYXRoLmFicyxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgLy8gbm9ybSh4KSA9IGFicyh4KVxuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICBcImJvb2xlYW5cIjogZnVuY3Rpb24gYm9vbGVhbih4KSB7XG4gICAgICAvLyBub3JtKHgpID0gYWJzKHgpXG4gICAgICByZXR1cm4gTWF0aC5hYnMoeCk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIF9ub3JtKG1hdHJpeCh4KSwgMik7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gX25vcm0oeCwgMik7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciB8IGJvb2xlYW4sIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJCb29sZWFuTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgpIHtcbiAgICAgIC8vIGlnbm9yZSBzZWNvbmQgcGFyYW1ldGVyLCBUT0RPOiByZW1vdmUgdGhlIG9wdGlvbiBvZiBzZWNvbmQgcGFyYW1ldGVyIGZvciB0aGVzZSB0eXBlc1xuICAgICAgcmV0dXJuIG5vcm0oeCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgsIHApIHtcbiAgICAgIHJldHVybiBfbm9ybShtYXRyaXgoeCksIHApO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgsIHApIHtcbiAgICAgIHJldHVybiBfbm9ybSh4LCBwKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBub3JtIGZvciBhbiBhcnJheVxuICAgKiBAcGFyYW0ge01hdHJpeH0geFxuICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gcFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBub3JtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9ub3JtKHgsIHApIHtcbiAgICAvLyBzaXplXG4gICAgdmFyIHNpemVYID0geC5zaXplKCk7IC8vIGNoZWNrIGlmIGl0IGlzIGEgdmVjdG9yXG5cbiAgICBpZiAoc2l6ZVgubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBjaGVjayBwXG4gICAgICBpZiAocCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IHAgPT09ICdpbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCwgSW5maW5pdHkpID0gbWF4KGFicyh4KSlcbiAgICAgICAgdmFyIHBpbmYgPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgdiA9IGFicyh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKHYsIHBpbmYpKSB7XG4gICAgICAgICAgICBwaW5mID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gcGluZjtcbiAgICAgIH1cblxuICAgICAgaWYgKHAgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSB8fCBwID09PSAnLWluZicpIHtcbiAgICAgICAgLy8gbm9ybSh4LCAtSW5maW5pdHkpID0gbWluKGFicyh4KSlcbiAgICAgICAgdmFyIG5pbmY7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09PSAwXG5cbiAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciB2ID0gYWJzKHZhbHVlKTtcblxuICAgICAgICAgIGlmICghbmluZiB8fCBzbWFsbGVyKHYsIG5pbmYpKSB7XG4gICAgICAgICAgICBuaW5mID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gbmluZiB8fCAwO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gJ2ZybycpIHtcbiAgICAgICAgcmV0dXJuIF9ub3JtKHgsIDIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHAgPT09ICdudW1iZXInICYmICFpc05hTihwKSkge1xuICAgICAgICAvLyBjaGVjayBwICE9IDBcbiAgICAgICAgaWYgKCFlcXVhbFNjYWxhcihwLCAwKSkge1xuICAgICAgICAgIC8vIG5vcm0oeCwgcCkgPSBzdW0oYWJzKHhpKSBeIHApIF4gMS9wXG4gICAgICAgICAgdmFyIG4gPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgbiA9IGFkZChwb3coYWJzKHZhbHVlKSwgcCksIG4pO1xuICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgIHJldHVybiBwb3cobiwgMSAvIHApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIH0gLy8gaW52YWxpZCBwYXJhbWV0ZXIgdmFsdWVcblxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZScpO1xuICAgIH0gLy8gTXhOIG1hdHJpeFxuXG5cbiAgICBpZiAoc2l6ZVgubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBjaGVjayBwXG4gICAgICBpZiAocCA9PT0gMSkge1xuICAgICAgICAvLyBub3JtKHgpID0gdGhlIGxhcmdlc3QgY29sdW1uIHN1bVxuICAgICAgICB2YXIgYyA9IFtdOyAvLyByZXN1bHRcblxuICAgICAgICB2YXIgbWF4YyA9IDA7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09IDBcblxuICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgIHZhciBqID0gaW5kZXhbMV07XG4gICAgICAgICAgdmFyIGNqID0gYWRkKGNbal0gfHwgMCwgYWJzKHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKGNqLCBtYXhjKSkge1xuICAgICAgICAgICAgbWF4YyA9IGNqO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNbal0gPSBjajtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBtYXhjO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IHAgPT09ICdpbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCkgPSB0aGUgbGFyZ2VzdCByb3cgc3VtXG4gICAgICAgIHZhciByID0gW107IC8vIHJlc3VsdFxuXG4gICAgICAgIHZhciBtYXhyID0gMDsgLy8gc2tpcCB6ZXJvcyBzaW5jZSBhYnMoMCkgPT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgdmFyIGkgPSBpbmRleFswXTtcbiAgICAgICAgICB2YXIgcmkgPSBhZGQocltpXSB8fCAwLCBhYnModmFsdWUpKTtcblxuICAgICAgICAgIGlmIChsYXJnZXIocmksIG1heHIpKSB7XG4gICAgICAgICAgICBtYXhyID0gcmk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcltpXSA9IHJpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIG1heHI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSAnZnJvJykge1xuICAgICAgICAvLyBub3JtKHgpID0gc3FydChzdW0oZGlhZyh4J3gpKSlcbiAgICAgICAgdmFyIGZybyA9IDA7XG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgZnJvID0gYWRkKGZybywgbXVsdGlwbHkodmFsdWUsIGNvbmoodmFsdWUpKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYWJzKHNxcnQoZnJvKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSAyKSB7XG4gICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZSwgbWlzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiBtYXRyaXggc2luZ3VsYXIgdmFsdWUgZGVjb21wb3NpdGlvbicpO1xuICAgICAgfSAvLyBpbnZhbGlkIHBhcmFtZXRlciB2YWx1ZVxuXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIHZhbHVlJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm07XG59KTtcbmV4cG9ydHMuY3JlYXRlTm9ybSA9IGNyZWF0ZU5vcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU50aFJvb3ROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZU50aFJvb3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDZcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbnRoUm9vdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlTnRoUm9vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLlxuICAgKiBUaGUgcHJpbmNpcGFsIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwgaXMgdGhlIHBvc2l0aXZlIHJlYWxcbiAgICogc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uXG4gICAqXG4gICAqICAgICB4XnJvb3QgPSBBXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubnRoUm9vdChhKVxuICAgKiAgICAgbWF0aC5udGhSb290KGEsIHJvb3QpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5udGhSb290KDksIDIpICAgIC8vIHJldHVybnMgMywgYXMgM14yID09IDlcbiAgICogICAgIG1hdGguc3FydCg5KSAgICAgICAgICAvLyByZXR1cm5zIDMsIGFzIDNeMiA9PSA5XG4gICAqICAgICBtYXRoLm50aFJvb3QoNjQsIDMpICAgLy8gcmV0dXJucyA0LCBhcyA0XjMgPT0gNjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeCB8IENvbXBsZXh9IGFcbiAgICogICAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG50aCByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbcm9vdD0yXSAgICBUaGUgcm9vdC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRoZSBudGggcm9vdCBvZiBgYWBcbiAgICovXG5cbiAgdmFyIGNvbXBsZXhFcnIgPSAnJyArICdDb21wbGV4IG51bWJlciBub3Qgc3VwcG9ydGVkIGluIGZ1bmN0aW9uIG50aFJvb3QuICcgKyAnVXNlIG50aFJvb3RzIGluc3RlYWQuJztcbiAgdmFyIG50aFJvb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm50aFJvb3ROdW1iZXIpKHgsIDIpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5udGhSb290TnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBfYmlnTnRoUm9vdCh4LCBuZXcgX0JpZ051bWJlcigyKSk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21wbGV4RXJyKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBudW1iZXInOiBmdW5jdGlvbiBDb21wbGV4TnVtYmVyKHgsIHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21wbGV4RXJyKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaWdOdGhSb290LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBudGhSb290KHgsIDIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRlbnNpdHkgbXVzdCBiZSBvbmUgKG5vIHplcm9zIGluIG1hdHJpeClcbiAgICAgIGlmICh5LmRlbnNpdHkoKSA9PT0gMSkge1xuICAgICAgICAvLyBzcGFyc2UgKyBzcGFyc2VcbiAgICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIG50aFJvb3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhyb3cgZXhjZXB0aW9uXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBudGhSb290LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gZGVuc2l0eSBtdXN0IGJlIG9uZSAobm8gemVyb3MgaW4gbWF0cml4KVxuICAgICAgaWYgKHkuZGVuc2l0eSgpID09PSAxKSB7XG4gICAgICAgIC8vIGRlbnNlICsgc3BhcnNlXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBudGhSb290LCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBudGhSb290KTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIG50aFJvb3QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG50aFJvb3QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBkZW5zaXR5IG11c3QgYmUgb25lIChubyB6ZXJvcyBpbiBtYXRyaXgpXG4gICAgICBpZiAoeS5kZW5zaXR5KCkgPT09IDEpIHtcbiAgICAgICAgLy8gc3BhcnNlIC0gc2NhbGFyXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBudGhSb290LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRocm93IGV4Y2VwdGlvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbnRoUm9vdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbnRoUm9vdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbnRoUm9vdDtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBmb3IgQmlnTnVtYmVycywgc29sdmUgeF5yb290ID09IGFcbiAgICogaHR0cHM6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9OdGhfcm9vdCNKYXZhU2NyaXB0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSByb290XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9iaWdOdGhSb290KGEsIHJvb3QpIHtcbiAgICB2YXIgcHJlY2lzaW9uID0gX0JpZ051bWJlci5wcmVjaXNpb247XG5cbiAgICB2YXIgQmlnID0gX0JpZ051bWJlci5jbG9uZSh7XG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbiArIDJcbiAgICB9KTtcblxuICAgIHZhciB6ZXJvID0gbmV3IF9CaWdOdW1iZXIoMCk7XG4gICAgdmFyIG9uZSA9IG5ldyBCaWcoMSk7XG4gICAgdmFyIGludiA9IHJvb3QuaXNOZWdhdGl2ZSgpO1xuXG4gICAgaWYgKGludikge1xuICAgICAgcm9vdCA9IHJvb3QubmVnKCk7XG4gICAgfVxuXG4gICAgaWYgKHJvb3QuaXNaZXJvKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgfVxuXG4gICAgaWYgKGEuaXNOZWdhdGl2ZSgpICYmICFyb290LmFicygpLm1vZCgyKS5lcXVhbHMoMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG9kZCB3aGVuIGEgaXMgbmVnYXRpdmUuJyk7XG4gICAgfSAvLyBlZGdlIGNhc2VzIHplcm8gYW5kIGluZmluaXR5XG5cblxuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gaW52ID8gbmV3IEJpZyhJbmZpbml0eSkgOiAwO1xuICAgIH1cblxuICAgIGlmICghYS5pc0Zpbml0ZSgpKSB7XG4gICAgICByZXR1cm4gaW52ID8gemVybyA6IGE7XG4gICAgfVxuXG4gICAgdmFyIHggPSBhLmFicygpLnBvdyhvbmUuZGl2KHJvb3QpKTsgLy8gSWYgYSA8IDAsIHdlIHJlcXVpcmUgdGhhdCByb290IGlzIGFuIG9kZCBpbnRlZ2VyLFxuICAgIC8vIHNvICgtMSkgXiAoMS9yb290KSA9IC0xXG5cbiAgICB4ID0gYS5pc05lZygpID8geC5uZWcoKSA6IHg7XG4gICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKChpbnYgPyBvbmUuZGl2KHgpIDogeCkudG9QcmVjaXNpb24ocHJlY2lzaW9uKSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290ID0gY3JlYXRlTnRoUm9vdDtcbnZhciBjcmVhdGVOdGhSb290TnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5udGhSb290TnVtYmVyLFxuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIubnRoUm9vdE51bWJlclxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290TnVtYmVyID0gY3JlYXRlTnRoUm9vdE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTnRoUm9vdHMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdudGhSb290cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZGl2aWRlU2NhbGFyJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVOdGhSb290cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdHMgb2YgYSB2YWx1ZS5cbiAgICogQW4gbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLFxuICAgKiBpcyBhIHBvc2l0aXZlIHJlYWwgc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uIFwieF5yb290ID0gQVwiLlxuICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgY29tcGxleCB2YWx1ZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5udGhSb290cyh4KVxuICAgKiAgICBtYXRoLm50aFJvb3RzKHgsIHJvb3QpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm50aFJvb3RzKDEpXG4gICAqICAgIC8vIHJldHVybnMgW1xuICAgKiAgICAvLyAgIHtyZTogMSwgaW06IDB9LFxuICAgKiAgICAvLyAgIHtyZTogLTEsIGltOiAwfVxuICAgKiAgICAvLyBdXG4gICAqICAgIG50aFJvb3RzKDEsIDMpXG4gICAqICAgIC8vIHJldHVybnMgW1xuICAgKiAgICAvLyAgIHsgcmU6IDEsIGltOiAwIH0sXG4gICAqICAgIC8vICAgeyByZTogLTAuNDk5OTk5OTk5OTk5OTk5OCwgaW06IDAuODY2MDI1NDAzNzg0NDM4NyB9LFxuICAgKiAgICAvLyAgIHsgcmU6IC0wLjUwMDAwMDAwMDAwMDAwMDQsIGltOiAtMC44NjYwMjU0MDM3ODQ0Mzg1IH1cbiAgICogICAgXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbnRoUm9vdCwgcG93LCBzcXJ0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIG50aFJvb3RzID0gdHlwZWQobmFtZSwge1xuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIF9udGhDb21wbGV4Um9vdHMoeCwgMik7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogX250aENvbXBsZXhSb290c1xuICB9KTtcbiAgLyoqXG4gICAqIEVhY2ggZnVuY3Rpb24gaGVyZSByZXR1cm5zIGEgcmVhbCBtdWx0aXBsZSBvZiBpIGFzIGEgQ29tcGxleCB2YWx1ZS5cbiAgICogQHBhcmFtICB7bnVtYmVyfSB2YWxcbiAgICogQHJldHVybiB7Q29tcGxleH0gdmFsLCBpKnZhbCwgLXZhbCBvciAtaSp2YWwgZm9yIGluZGV4IDAsIDEsIDIsIDNcbiAgICovXG4gIC8vIFRoaXMgaXMgdXNlZCB0byBmaXggZmxvYXQgYXJ0aWZhY3RzIGZvciB6ZXJvLXZhbHVlZCBjb21wb25lbnRzLlxuXG4gIHZhciBfY2FsY3VsYXRlRXhhY3RSZXN1bHQgPSBbZnVuY3Rpb24gcmVhbFBvcyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgodmFsLCAwKTtcbiAgfSwgZnVuY3Rpb24gaW1hZ1Bvcyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgdmFsKTtcbiAgfSwgZnVuY3Rpb24gcmVhbE5lZyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoLXZhbCwgMCk7XG4gIH0sIGZ1bmN0aW9uIGltYWdOZWcodmFsKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC12YWwpO1xuICB9XTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBDb21wbGV4IE51bWJlciBhIHVzaW5nIERlIE1vdmlyZSdzIFRoZW9yZW0uXG4gICAqIEBwYXJhbSAge0NvbXBsZXh9IGFcbiAgICogQHBhcmFtICB7bnVtYmVyfSByb290XG4gICAqIEByZXR1cm4ge0FycmF5fSBhcnJheSBvZiBuIENvbXBsZXggUm9vdHNcbiAgICovXG5cbiAgZnVuY3Rpb24gX250aENvbXBsZXhSb290cyhhLCByb290KSB7XG4gICAgaWYgKHJvb3QgPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybycpO1xuICAgIGlmIChyb290ID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgIGlmIChyb290ICUgMSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIGlmIChhID09PSAwIHx8IGEuYWJzKCkgPT09IDApIHJldHVybiBbbmV3IENvbXBsZXgoMCwgMCldO1xuICAgIHZhciBhSXNOdW1lcmljID0gdHlwZW9mIGEgPT09ICdudW1iZXInO1xuICAgIHZhciBvZmZzZXQ7IC8vIGRldGVybWluZSB0aGUgb2Zmc2V0IChhcmd1bWVudCBvZiBhKS8ocGkvMilcblxuICAgIGlmIChhSXNOdW1lcmljIHx8IGEucmUgPT09IDAgfHwgYS5pbSA9PT0gMCkge1xuICAgICAgaWYgKGFJc051bWVyaWMpIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYSA8IDApOyAvLyBudW1lcmljIHZhbHVlIG9uIHRoZSByZWFsIGF4aXNcbiAgICAgIH0gZWxzZSBpZiAoYS5pbSA9PT0gMCkge1xuICAgICAgICBvZmZzZXQgPSAyICogKyhhLnJlIDwgMCk7IC8vIGNvbXBsZXggdmFsdWUgb24gdGhlIHJlYWwgYXhpc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYS5pbSA8IDApICsgMTsgLy8gY29tcGxleCB2YWx1ZSBvbiB0aGUgaW1hZ2luYXJ5IGF4aXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYXJnID0gYS5hcmcoKTtcbiAgICB2YXIgYWJzID0gYS5hYnMoKTtcbiAgICB2YXIgcm9vdHMgPSBbXTtcbiAgICB2YXIgciA9IE1hdGgucG93KGFicywgMSAvIHJvb3QpO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCByb290OyBrKyspIHtcbiAgICAgIHZhciBoYWxmUGlGYWN0b3IgPSAob2Zmc2V0ICsgNCAqIGspIC8gcm9vdDtcbiAgICAgIC8qKlxuICAgICAgICogSWYgKG9mZnNldCArIDQqaykvcm9vdCBpcyBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiBwaS8yXG4gICAgICAgKiB0aGVuIHdlIGNhbiBwcm9kdWNlIGEgbW9yZSBleGFjdCByZXN1bHQuXG4gICAgICAgKi9cblxuICAgICAgaWYgKGhhbGZQaUZhY3RvciA9PT0gTWF0aC5yb3VuZChoYWxmUGlGYWN0b3IpKSB7XG4gICAgICAgIHJvb3RzLnB1c2goX2NhbGN1bGF0ZUV4YWN0UmVzdWx0W2hhbGZQaUZhY3RvciAlIDRdKHIpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJvb3RzLnB1c2gobmV3IENvbXBsZXgoe1xuICAgICAgICByOiByLFxuICAgICAgICBwaGk6IChhcmcgKyAyICogTWF0aC5QSSAqIGspIC8gcm9vdFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiByb290cztcbiAgfVxuXG4gIHJldHVybiBudGhSb290cztcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290cyA9IGNyZWF0ZU50aFJvb3RzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQb3cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbnVtYmVyMiA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3Bvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnaWRlbnRpdHknLCAnbXVsdGlwbHknLCAnbWF0cml4JywgJ2ZyYWN0aW9uJywgJ251bWJlcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlUG93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBudW1iZXIgPSBfcmVmLm51bWJlcixcbiAgICAgIGZyYWN0aW9uID0gX3JlZi5mcmFjdGlvbixcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgYHggXiB5YC5cbiAgICogTWF0cml4IGV4cG9uZW50aWF0aW9uIGlzIHN1cHBvcnRlZCBmb3Igc3F1YXJlIG1hdHJpY2VzIGB4YCwgYW5kIHBvc2l0aXZlXG4gICAqIGludGVnZXIgZXhwb25lbnRzIGB5YC5cbiAgICpcbiAgICogRm9yIGN1YmljIHJvb3RzIG9mIG5lZ2F0aXZlIG51bWJlcnMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmluY2lwYWxcbiAgICogcm9vdCBieSBkZWZhdWx0LiBJbiBvcmRlciB0byBsZXQgdGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVhbCByb290LFxuICAgKiBtYXRoLmpzIGNhbiBiZSBjb25maWd1cmVkIHdpdGggYG1hdGguY29uZmlnKHtwcmVkaWN0YWJsZTogdHJ1ZX0pYC5cbiAgICogVG8gcmV0cmlldmUgYWxsIGN1YmljIHJvb3RzIG9mIGEgdmFsdWUsIHVzZSBgbWF0aC5jYnJ0KHgsIHRydWUpYC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnBvdyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5wb3coMiwgMykgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgbWF0aC5wb3coYSwgMikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC01ICsgMTJpXG4gICAqXG4gICAqICAgIGNvbnN0IGIgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIG1hdGgucG93KGIsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzksIDhdLCBbMTYsIDE3XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBzcXJ0LCBjYnJ0LCBudGhSb290XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFRoZSBiYXNlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IHkgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBleHBvbmVudFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSB2YWx1ZSBvZiBgeGAgdG8gdGhlIHBvd2VyIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfcG93LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucG93KHkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIGlmICh5LmlzSW50ZWdlcigpIHx8IHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHgucG93KHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCkucG93KHkudG9OdW1iZXIoKSwgMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICBpZiAoeS5kICE9PSAxKSB7XG4gICAgICAgIGlmIChjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIHBvdyBkb2VzIG5vdCBzdXBwb3J0IG5vbi1pbnRlZ2VyIGV4cG9uZW50cyBmb3IgZnJhY3Rpb25zLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBfcG93KHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyJzogX3Bvd0FycmF5LFxuICAgICdBcnJheSwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIF9wb3dBcnJheSh4LCB5LnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX3Bvd01hdHJpeCxcbiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIF9wb3dNYXRyaXgoeCwgeS50b051bWJlcigpKTtcbiAgICB9LFxuICAgICdVbml0LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnksIGZvciB0d28gbnVtYmVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleH0gcmVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9wb3coeCwgeSkge1xuICAgIC8vIEFsdGVybmF0aXZlbHkgY291bGQgZGVmaW5lIGEgJ3JlYWxtb2RlJyBjb25maWcgb3B0aW9uIG9yIHNvbWV0aGluZywgYnV0XG4gICAgLy8gJ3ByZWRpY3RhYmxlJyB3aWxsIHdvcmsgZm9yIG5vd1xuICAgIGlmIChjb25maWcucHJlZGljdGFibGUgJiYgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgJiYgeCA8IDApIHtcbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB5IGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIGZyYWN0aW9uXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgeUZyYWMgPSBmcmFjdGlvbih5KTtcbiAgICAgICAgdmFyIHlOdW0gPSBudW1iZXIoeUZyYWMpO1xuXG4gICAgICAgIGlmICh5ID09PSB5TnVtIHx8IE1hdGguYWJzKCh5IC0geU51bSkgLyB5KSA8IDFlLTE0KSB7XG4gICAgICAgICAgaWYgKHlGcmFjLmQgJSAyID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gKHlGcmFjLm4gJSAyID09PSAwID8gMSA6IC0xKSAqIE1hdGgucG93KC14LCB5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7fSAvLyBmcmFjdGlvbigpIHRocm93cyBhbiBlcnJvciBpZiB5IGlzIEluZmluaXR5LCBldGMuXG4gICAgICAvLyBVbmFibGUgdG8gZXhwcmVzcyB5IGFzIGEgZnJhY3Rpb24sIHNvIGNvbnRpbnVlIG9uXG5cbiAgICB9IC8vICoqZm9yIHByZWRpY3RhYmxlIG1vZGUqKiB4XkluZmluaXR5ID09PSBOYU4gaWYgeCA8IC0xXG4gICAgLy8gTi5CLiB0aGlzIGJlaGF2b3VyIGlzIGRpZmZlcmVudCBmcm9tIGBNYXRoLnBvd2Agd2hpY2ggZ2l2ZXNcbiAgICAvLyAoLTIpXkluZmluaXR5ID09PSBJbmZpbml0eVxuXG5cbiAgICBpZiAoY29uZmlnLnByZWRpY3RhYmxlICYmICh4IDwgLTEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCA+IC0xICYmIHggPCAwICYmIHkgPT09IC1JbmZpbml0eSkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgfHwgeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyMi5wb3dOdW1iZXIpKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiB0aGUgZm9sbG93aW5nIGluZmluaXR5IGNoZWNrcyBhcmUgZHVwbGljYXRlZCBmcm9tIHBvd051bWJlci4gRGVkdXBsaWNhdGUgdGhpcyBzb21laG93XG4gICAgICAvLyB4XkluZmluaXR5ID09PSAwIGlmIC0xIDwgeCA8IDFcbiAgICAgIC8vIEEgcmVhbCBudW1iZXIgMCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGNvbXBsZXgoMClcbiAgICAgIGlmICh4ICogeCA8IDEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCAqIHggPiAxICYmIHkgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLnBvdyh5LCAwKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgYSAyZCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcG93QXJyYXkoeCwgeSkge1xuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSB8fCB5IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRm9yIEFeYiwgYiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAodmFsdWUgaXMgJyArIHkgKyAnKScpO1xuICAgIH0gLy8gdmVyaWZ5IHRoYXQgQSBpcyBhIDIgZGltZW5zaW9uYWwgc3F1YXJlIG1hdHJpeFxuXG5cbiAgICB2YXIgcyA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KTtcblxuICAgIGlmIChzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3IgQV5iLCBBIG11c3QgYmUgMiBkaW1lbnNpb25hbCAoQSBoYXMgJyArIHMubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgIH1cblxuICAgIGlmIChzWzBdICE9PSBzWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvciBBXmIsIEEgbXVzdCBiZSBzcXVhcmUgKHNpemUgaXMgJyArIHNbMF0gKyAneCcgKyBzWzFdICsgJyknKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gaWRlbnRpdHkoc1swXSkudmFsdWVPZigpO1xuICAgIHZhciBweCA9IHg7XG5cbiAgICB3aGlsZSAoeSA+PSAxKSB7XG4gICAgICBpZiAoKHkgJiAxKSA9PT0gMSkge1xuICAgICAgICByZXMgPSBtdWx0aXBseShweCwgcmVzKTtcbiAgICAgIH1cblxuICAgICAgeSA+Pj0gMTtcbiAgICAgIHB4ID0gbXVsdGlwbHkocHgsIHB4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHBvd2VyIG9mIGEgMmQgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3Bvd01hdHJpeCh4LCB5KSB7XG4gICAgcmV0dXJuIG1hdHJpeChfcG93QXJyYXkoeC52YWx1ZU9mKCksIHkpKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVBvdyA9IGNyZWF0ZVBvdzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm91bmROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZVJvdW5kID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlcjIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIE5PX0lOVCA9ICdOdW1iZXIgb2YgZGVjaW1hbHMgaW4gZnVuY3Rpb24gcm91bmQgbXVzdCBiZSBhbiBpbnRlZ2VyJztcbnZhciBuYW1lID0gJ3JvdW5kJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICd6ZXJvcycsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVSb3VuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFJvdW5kIGEgdmFsdWUgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoeClcbiAgICogICAgbWF0aC5yb3VuZCh4LCBuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5yb3VuZCgzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGgucm91bmQoMy44KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLnJvdW5kKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGgucm91bmQoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTVcbiAgICogICAgbWF0aC5yb3VuZChtYXRoLnBpLCAzKSAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjE0MlxuICAgKiAgICBtYXRoLnJvdW5kKDEyMy40NTY3OCwgMikgICAgIC8vIHJldHVybnMgbnVtYmVyIDEyMy40NlxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC5jb21wbGV4KDMuMiwgLTIuNylcbiAgICogICAgbWF0aC5yb3VuZChjKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMyAtIDNpXG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoWzMuMiwgMy44LCAtNC43XSkgLy8gcmV0dXJucyBBcnJheSBbMywgNCwgLTVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjZWlsLCBmaXgsIGZsb29yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBOdW1iZXIgdG8gYmUgcm91bmRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheX0gW249MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGRlY2ltYWxzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuXG4gIHZhciByb3VuZCA9IHR5cGVkKG5hbWUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcm91bmROdW1iZXJTaWduYXR1cmVzKSwge30sIHtcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnJvdW5kKCk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogZnVuY3Rpb24gQ29tcGxleE51bWJlcih4LCBuKSB7XG4gICAgICBpZiAobiAlIDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geC5yb3VuZChuKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBDb21wbGV4QmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBfbiA9IG4udG9OdW1iZXIoKTtcblxuICAgICAgcmV0dXJuIHgucm91bmQoX24pO1xuICAgIH0sXG4gICAgJ251bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpLnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudG9EZWNpbWFsUGxhY2VzKDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4LnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnJvdW5kKCk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIG51bWJlcic6IGZ1bmN0aW9uIEZyYWN0aW9uTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmIChuICUgMSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4LnJvdW5kKG4pO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSByb3VuZCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCByb3VuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcm91bmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJDb21wbGV4QmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhciBpcyB6ZXJvXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgLy8gZG8gbm90IGV4ZWN1dGUgYWxnb3JpdGhtLCByZXN1bHQgd2lsbCBiZSBhIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IENvbXBsZXggfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhciBpcyB6ZXJvXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgLy8gZG8gbm90IGV4ZWN1dGUgYWxnb3JpdGhtLCByZXN1bHQgd2lsbCBiZSBhIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCByb3VuZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCByb3VuZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSkpO1xuICByZXR1cm4gcm91bmQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlUm91bmQgPSBjcmVhdGVSb3VuZDtcbnZhciByb3VuZE51bWJlclNpZ25hdHVyZXMgPSB7XG4gIG51bWJlcjogX251bWJlcjIucm91bmROdW1iZXIsXG4gICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCBuKSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgfVxuXG4gICAgaWYgKG4gPCAwIHx8IG4gPiAxNSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOdW1iZXIgb2YgZGVjaW1hbHMgaW4gZnVuY3Rpb24gcm91bmQgbXVzdCBiZSBpbiB0ZSByYW5nZSBvZiAwLTE1Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfbnVtYmVyMi5yb3VuZE51bWJlcikoeCwgbik7XG4gIH1cbn07XG52YXIgY3JlYXRlUm91bmROdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7XG4gIHJldHVybiB0eXBlZChuYW1lLCByb3VuZE51bWJlclNpZ25hdHVyZXMpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJvdW5kTnVtYmVyID0gY3JlYXRlUm91bmROdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzaWduJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdjb21wbGV4J107XG52YXIgY3JlYXRlU2lnbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBjb21wbGV4ID0gX3JlZi5jb21wbGV4LFxuICAgICAgX0ZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc2lnbiBvZiBhIHZhbHVlLiBUaGUgc2lnbiBvZiBhIHZhbHVlIHggaXM6XG4gICAqXG4gICAqIC0gIDEgd2hlbiB4ID4gMFxuICAgKiAtIC0xIHdoZW4geCA8IDBcbiAgICogLSAgMCB3aGVuIHggPT0gMFxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2lnbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zaWduKDMuNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5zaWduKC00LjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIC0xXG4gICAqICAgIG1hdGguc2lnbigwKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwXG4gICAqXG4gICAqICAgIG1hdGguc2lnbihbMywgNSwgLTIsIDAsIDJdKSAgLy8gcmV0dXJucyBbMSwgMSwgLTEsIDAsIDFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhYnNcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgVGhlIG51bWJlciBmb3Igd2hpY2ggdG8gZGV0ZXJtaW5lIHRoZSBzaWduXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1lXG4gICAqICAgICAgICAgICAgVGhlIHNpZ24gb2YgYHhgXG4gICAqL1xuICB2YXIgc2lnbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2lnbk51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmltID09PSAwID8gY29tcGxleCgoMCwgX251bWJlci5zaWduTnVtYmVyKSh4LnJlKSkgOiB4LnNpZ24oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcih4LmNtcCgwKSk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBfRnJhY3Rpb24oeC5zLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc2lnbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc2lnbiwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiBzaWduKHgudmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzaWduO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSBjcmVhdGVTaWduOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXJ0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3NxcnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVTcXJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3FydCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zcXJ0KDI1KSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICogICAgbWF0aC5zcXVhcmUoNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI1XG4gICAqICAgIG1hdGguc3FydCgtNCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDJpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzcXVhcmUsIG11bHRpcGx5LCBjdWJlLCBjYnJ0LCBzcXJ0bVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiBgeGBcbiAgICovXG4gIHZhciBzcXJ0ID0gdHlwZWQoJ3NxcnQnLCB7XG4gICAgbnVtYmVyOiBfc3FydE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNxcnQoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIGlmICgheC5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LnNxcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGRvd25ncmFkZSB0byBudW1iZXIgdG8gZG8gY29tcGxleCB2YWx1ZSBjb21wdXRhdGlvblxuICAgICAgICByZXR1cm4gX3NxcnROdW1iZXIoeC50b051bWJlcigpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc3FydCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc3FydCwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIC8vIFNvbWVkYXkgd2lsbCB3b3JrIGZvciBjb21wbGV4IHVuaXRzIHdoZW4gdGhleSBhcmUgaW1wbGVtZW50ZWRcbiAgICAgIHJldHVybiB4LnBvdygwLjUpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgc3FydCBmb3IgYSBudW1iZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlciB8IENvbXBsZXh9IFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHhcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3NxcnROdW1iZXIoeCkge1xuICAgIGlmIChpc05hTih4KSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9IGVsc2UgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgIHJldHVybiBNYXRoLnNxcnQoeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5zcXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNxcnQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydCA9IGNyZWF0ZVNxcnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWFyZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3NxdWFyZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVNxdWFyZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLCBgeCAqIHhgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3F1YXJlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZSgyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLnNxdWFyZSgzKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKiAgICBtYXRoLnBvdygzLCAyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKiAgICBtYXRoLm11bHRpcGx5KDMsIDMpICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZShbMSwgMiwgMywgNF0pICAvLyByZXR1cm5zIEFycmF5IFsxLCA0LCA5LCAxNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBjdWJlLCBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgTnVtYmVyIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIHNxdWFyZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9XG4gICAqICAgICAgICAgICAgU3F1YXJlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIHNxdWFyZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc3F1YXJlTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudGltZXMoeCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBzcXVhcmUoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNxdWFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiB4LnBvdygyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3F1YXJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWFyZSA9IGNyZWF0ZVNxdWFyZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3VidHJhY3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDVcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ3N1YnRyYWN0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdhZGRTY2FsYXInLCAndW5hcnlNaW51cycsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnRyYWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICAvLyBUT0RPOiBzcGxpdCBmdW5jdGlvbiBzdWJ0cmFjdCBpbiB0d286IHN1YnRyYWN0IGFuZCBzdWJ0cmFjdFNjYWxhclxuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMSkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTAgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTApKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFN1YnRyYWN0IHR3byB2YWx1ZXMsIGB4IC0geWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdCg1LjMsIDIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjNcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGguc3VidHJhY3QoYSwgYikgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC0yICsgMmlcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdChbNSwgNywgNF0sIDQpICAvLyByZXR1cm5zIEFycmF5IFsxLCAzLCAwXVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC51bml0KCcyLjEga20nKVxuICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCc1MDBtJylcbiAgICogICAgbWF0aC5zdWJ0cmFjdChjLCBkKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMS42IGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhZGRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgSW5pdGlhbCB2YWx1ZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHlcbiAgICogICAgICAgICAgICBWYWx1ZSB0byBzdWJ0cmFjdCBmcm9tIGB4YFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgU3VidHJhY3Rpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIHN1YnRyYWN0ID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCAtIHk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnN1Yih5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5taW51cyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnN1Yih5KTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKHgudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeCBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeSBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaXRzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0geC5jbG9uZSgpO1xuICAgICAgcmVzLnZhbHVlID0gc3VidHJhY3QocmVzLnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgY2hlY2tFcXVhbERpbWVuc2lvbnMoeCwgeSk7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIGNoZWNrRXF1YWxEaW1lbnNpb25zKHgsIHkpO1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIHN1YnRyYWN0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzdWJ0cmFjdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc3VidHJhY3QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzdWJ0cmFjdCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB1bmFyeU1pbnVzKHkpLCBhZGRTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHN1YnRyYWN0LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBzdWJ0cmFjdCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdWJ0cmFjdDtcbn0pO1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIG1hdHJpeCB4IGFuZCB5IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnMuXG4gKiBUaHJvd3MgYSBEaW1lbnNpb25FcnJvciB3aGVuIGRpbWVuc2lvbnMgYXJlIG5vdCBlcXVhbFxuICogQHBhcmFtIHtNYXRyaXh9IHhcbiAqIEBwYXJhbSB7TWF0cml4fSB5XG4gKi9cblxuZXhwb3J0cy5jcmVhdGVTdWJ0cmFjdCA9IGNyZWF0ZVN1YnRyYWN0O1xuXG5mdW5jdGlvbiBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KSB7XG4gIHZhciB4c2l6ZSA9IHguc2l6ZSgpO1xuICB2YXIgeXNpemUgPSB5LnNpemUoKTtcblxuICBpZiAoeHNpemUubGVuZ3RoICE9PSB5c2l6ZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHhzaXplLmxlbmd0aCwgeXNpemUubGVuZ3RoKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeU1pbnVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAndW5hcnlNaW51cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVVuYXJ5TWludXMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUsIGFwcGx5IGEgdW5hcnkgbWludXMgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLiBCb29sZWFuIHZhbHVlcyBhbmRcbiAgICogc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlci4gRm9yIGNvbXBsZXggbnVtYmVycywgYm90aCByZWFsIGFuZFxuICAgKiBjb21wbGV4IHZhbHVlIGFyZSBpbnZlcnRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5TWludXMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudW5hcnlNaW51cygzLjUpICAgICAgLy8gcmV0dXJucyAtMy41XG4gICAqICAgIG1hdGgudW5hcnlNaW51cygtNC4yKSAgICAgLy8gcmV0dXJucyA0LjJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFkZCwgc3VidHJhY3QsIHVuYXJ5UGx1c1xuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIGludmVydGVkLlxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHZhbHVlIHdpdGggaW52ZXJ0ZWQgc2lnbi5cbiAgICovXG4gIHZhciB1bmFyeU1pbnVzID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci51bmFyeU1pbnVzTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubmVnKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5uZWcoKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5uZWcoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHVuYXJ5TWludXMoeC52YWx1ZSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB1bmFyeU1pbnVzKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB1bmFyeU1pbnVzLCB0cnVlKTtcbiAgICB9IC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBzdHJpbmdcblxuICB9KTtcbiAgcmV0dXJuIHVuYXJ5TWludXM7XG59KTtcbmV4cG9ydHMuY3JlYXRlVW5hcnlNaW51cyA9IGNyZWF0ZVVuYXJ5TWludXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5UGx1cyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3VuYXJ5UGx1cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlVW5hcnlQbHVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIFVuYXJ5IHBsdXMgb3BlcmF0aW9uLlxuICAgKiBCb29sZWFuIHZhbHVlcyBhbmQgc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciwgbnVtZXJpYyB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZCBhcyBpcy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5UGx1cyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC51bmFyeVBsdXMoMy41KSAgICAgIC8vIHJldHVybnMgMy41XG4gICAqICAgIG1hdGgudW5hcnlQbHVzKDEpICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHVuYXJ5TWludXMsIGFkZCwgc3VidHJhY3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBzdHJpbmcgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgSW5wdXQgdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGlucHV0IHZhbHVlIHdoZW4gbnVtZXJpYywgY29udmVydHMgdG8gYSBudW1iZXIgd2hlbiBpbnB1dCBpcyBub24tbnVtZXJpYy5cbiAgICovXG4gIHZhciB1bmFyeVBsdXMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnVuYXJ5UGx1c051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBjb21wbGV4IG51bWJlcnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7IC8vIGJpZ251bWJlcnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBmcmFjdGlvbnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB1bmFyeVBsdXMoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHVuYXJ5UGx1cywgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYm9vbGVhbiB8IHN0cmluZyc6IGZ1bmN0aW9uIGJvb2xlYW5TdHJpbmcoeCkge1xuICAgICAgLy8gY29udmVydCB0byBhIG51bWJlciBvciBiaWdudW1iZXJcbiAgICAgIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoK3gpIDogK3g7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHVuYXJ5UGx1cztcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeVBsdXMgPSBjcmVhdGVVbmFyeVBsdXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVhnY2QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3hnY2QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVYZ2NkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy5cbiAgICogU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4dGVuZGVkX0V1Y2xpZGVhbl9hbGdvcml0aG0uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC54Z2NkKGEsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnhnY2QoOCwgMTIpICAgICAgICAgICAgIC8vIHJldHVybnMgWzQsIC0xLCAxXVxuICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLnhnY2QoMzYxNjMsIDIxMTk5KSAgICAgIC8vIHJldHVybnMgWzEyNDcsIC03LCAxMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGdjZCwgbGNtXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBhICBBbiBpbnRlZ2VyIG51bWJlclxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gYiAgQW4gaW50ZWdlciBudW1iZXJcbiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgMyBpbnRlZ2VycyBgW2RpdiwgbSwgbl1gXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYGRpdiA9IGdjZChhLCBiKWAgYW5kIGBhKm0gKyBiKm4gPSBkaXZgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihhLCBiKSB7XG4gICAgICB2YXIgcmVzID0gKDAsIF9udW1iZXIueGdjZE51bWJlcikoYSwgYik7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IHJlcyA6IG1hdHJpeChyZXMpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX3hnY2RCaWdOdW1iZXIgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIEZyYWN0aW9uXG5cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgeGdjZCBmb3IgdHdvIEJpZ051bWJlcnNcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGFcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGJcbiAgICogQHJldHVybiB7QmlnTnVtYmVyW119IHJlc3VsdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfeGdjZEJpZ051bWJlcihhLCBiKSB7XG4gICAgLy8gc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9FdWNsaWRlYW5fYWxnb3JpdGhtXG4gICAgdmFyIC8vIHVzZWQgdG8gc3dhcCB0d28gdmFyaWFibGVzXG4gICAgdDtcbiAgICB2YXIgLy8gcXVvdGllbnRcbiAgICBxO1xuICAgIHZhciAvLyByZW1haW5kZXJcbiAgICByO1xuICAgIHZhciB6ZXJvID0gbmV3IEJpZ051bWJlcigwKTtcbiAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcbiAgICB2YXIgeCA9IHplcm87XG4gICAgdmFyIGxhc3R4ID0gb25lO1xuICAgIHZhciB5ID0gb25lO1xuICAgIHZhciBsYXN0eSA9IHplcm87XG5cbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24geGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgcSA9IGEuZGl2KGIpLmZsb29yKCk7XG4gICAgICByID0gYS5tb2QoYik7XG4gICAgICB0ID0geDtcbiAgICAgIHggPSBsYXN0eC5taW51cyhxLnRpbWVzKHgpKTtcbiAgICAgIGxhc3R4ID0gdDtcbiAgICAgIHQgPSB5O1xuICAgICAgeSA9IGxhc3R5Lm1pbnVzKHEudGltZXMoeSkpO1xuICAgICAgbGFzdHkgPSB0O1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcjtcbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuXG4gICAgaWYgKGEubHQoemVybykpIHtcbiAgICAgIHJlcyA9IFthLm5lZygpLCBsYXN0eC5uZWcoKSwgbGFzdHkubmVnKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBbYSwgIWEuaXNaZXJvKCkgPyBsYXN0eCA6IDAsIGxhc3R5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IHJlcyA6IG1hdHJpeChyZXMpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlWGdjZCA9IGNyZWF0ZVhnY2Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdEFuZCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdiaXRBbmQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQml0QW5kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSBBTkQgdHdvIHZhbHVlcywgYHggJiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpdEFuZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXRBbmQoNTMsIDEzMSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqXG4gICAqICAgIG1hdGguYml0QW5kKFsxLCAxMiwgMzFdLCA0MikgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMCwgOCwgMTBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGFuZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gYW5kXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBBTkQgb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGJpdEFuZCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdEFuZE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRBbmRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNih4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRBbmQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdEFuZChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0QW5kKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRBbmQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgYml0QW5kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgYml0QW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGJpdEFuZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0QW5kLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdEFuZDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXRBbmQgPSBjcmVhdGVCaXRBbmQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE5vdCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYml0Tm90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQml0Tm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQml0d2lzZSBOT1QgdmFsdWUsIGB+eGAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpdE5vdCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXROb3QoMSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtMlxuICAgKlxuICAgKiAgICBtYXRoLmJpdE5vdChbMiwgLTMsIDRdKSAgICAgIC8vIHJldHVybnMgQXJyYXkgWy0zLCAyLCA1XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXRPciwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBub3RcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IE5PVCBvZiBgeGBcbiAgICovXG4gIHZhciBiaXROb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmJpdE5vdE51bWJlcixcbiAgICBCaWdOdW1iZXI6IF9iaXR3aXNlLmJpdE5vdEJpZ051bWJlcixcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGJpdE5vdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdE5vdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXROb3QgPSBjcmVhdGVCaXROb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE9yID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdE9yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUJpdE9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIE9SIHR3byB2YWx1ZXMsIGB4IHwgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgbG93ZXN0IHByaW50IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcih4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcigxLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDNcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcihbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gb3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IE9SIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBiaXRPciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdE9yTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaXR3aXNlLmJpdE9yQmlnTnVtYmVyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYml0T3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRPcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0T3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdE9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRPcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB5LCBiaXRPciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBiaXRPciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0T3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYml0T3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlQml0T3IgPSBjcmVhdGVCaXRPcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQml0WG9yID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdFhvcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVCaXRYb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIEJpdHdpc2UgWE9SIHR3byB2YWx1ZXMsIGB4IF4geWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRYb3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYml0WG9yKDEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLmJpdFhvcihbMiwgMywgNF0sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzYsIDcsIDBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0T3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIHhvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8geG9yXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBYT1Igb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGJpdFhvciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdFhvck51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRYb3IsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBiaXRYb3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGJpdFhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGJpdFhvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0WG9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRYb3IobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdFhvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBiaXRYb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGJpdFhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBiaXRYb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgYml0WG9yLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBiaXRYb3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYml0WG9yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJpdFhvciA9IGNyZWF0ZUJpdFhvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTGVmdFNoaWZ0ID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgbmFtZSA9ICdsZWZ0U2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTGVmdFNoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA4ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTA4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIGxlZnQgbG9naWNhbCBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPDwgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxlZnRTaGlmdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sZWZ0U2hpZnQoMSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqXG4gICAqICAgIG1hdGgubGVmdFNoaWZ0KFsxLCAyLCAzXSwgNCkgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMTYsIDMyLCA2NF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGxlZnRTaGlmdCwgYml0Tm90LCBiaXRPciwgYml0WG9yLCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggVmFsdWUgdG8gYmUgc2hpZnRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHkgQW1vdW50IG9mIHNoaWZ0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYHhgIHNoaWZ0ZWQgbGVmdCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIGxlZnRTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmxlZnRTaGlmdE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5sZWZ0U2hpZnRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsZWZ0U2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGVmdFNoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsZWZ0U2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbGVmdFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7XG4gICAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGVmdFNoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGVmdFNoaWZ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUxlZnRTaGlmdCA9IGNyZWF0ZUxlZnRTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRBcml0aFNoaWZ0ID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdyaWdodEFyaXRoU2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUmlnaHRBcml0aFNoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA4ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTA4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIHJpZ2h0IGFyaXRobWV0aWMgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMsIGB4ID4+IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodEFyaXRoU2hpZnQoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRBcml0aFNoaWZ0KDQsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0QXJpdGhTaGlmdChbMTYsIC0zMiwgNjRdLCA0KSAgIC8vIHJldHVybnMgQXJyYXkgWzEsIC0yLCAzXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBiZSBzaGlmdGVkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlcn0geSBBbW91bnQgb2Ygc2hpZnRzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBgeGAgc2lnbi1maWxsZWQgc2hpZnRlZCByaWdodCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIHJpZ2h0QXJpdGhTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLnJpZ2h0QXJpdGhTaGlmdE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5yaWdodEFyaXRoU2hpZnRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCByaWdodEFyaXRoU2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodEFyaXRoU2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRBcml0aFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7XG4gICAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRBcml0aFNoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCA9IGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRMb2dTaGlmdCA9IHZvaWQgMDtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3JpZ2h0TG9nU2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUmlnaHRMb2dTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wOCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0wOCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0IG9mIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPj4+IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodExvZ1NoaWZ0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0TG9nU2hpZnQoNCwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRMb2dTaGlmdChbMTYsIC0zMiwgNjRdLCA0KSAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDNdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0T3IsIGJpdFhvciwgbGVmdFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IFZhbHVlIHRvIGJlIHNoaWZ0ZWRcbiAgICogQHBhcmFtICB7bnVtYmVyfSB5IEFtb3VudCBvZiBzaGlmdHNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGB4YCB6ZXJvLWZpbGxlZCBzaGlmdGVkIHJpZ2h0IGB5YCB0aW1lc1xuICAgKi9cblxuICB2YXIgcmlnaHRMb2dTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLnJpZ2h0TG9nU2hpZnROdW1iZXIsXG4gICAgLy8gJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogLi4uLCAvLyBUT0RPOiBpbXBsZW1lbnQgQmlnTnVtYmVyIHN1cHBvcnQgZm9yIHJpZ2h0TG9nU2hpZnRcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA4KHgsIHksIHJpZ2h0TG9nU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIHJpZ2h0TG9nU2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHJpZ2h0TG9nU2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodExvZ1NoaWZ0KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRMb2dTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmlnaHRMb2dTaGlmdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSaWdodExvZ1NoaWZ0ID0gY3JlYXRlUmlnaHRMb2dTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmVsbE51bWJlcnMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdiZWxsTnVtYmVycyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnaXNOZWdhdGl2ZScsICdpc0ludGVnZXInLCAnc3RpcmxpbmdTMiddO1xudmFyIGNyZWF0ZUJlbGxOdW1iZXJzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgc3RpcmxpbmdTMiA9IF9yZWYuc3RpcmxpbmdTMjtcblxuICAvKipcbiAgICogVGhlIEJlbGwgTnVtYmVycyBjb3VudCB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgb2YgYSBzZXQuIEEgcGFydGl0aW9uIGlzIGEgcGFpcndpc2UgZGlzam9pbnQgc3Vic2V0IG9mIFMgd2hvc2UgdW5pb24gaXMgUy5cbiAgICogYmVsbE51bWJlcnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogbiA+PSAwXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICBtYXRoLmJlbGxOdW1iZXJzKG4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDMpIC8vIHJldHVybnMgNVxuICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDgpIC8vIHJldHVybnMgNDE0MFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3RpcmxpbmdTMlxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBUb3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIEIobilcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihuKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJlbGxOdW1iZXJzJyk7XG4gICAgICB9IC8vIFN1bSAoaz0wLCBuKSBTKG4saykuXG5cblxuICAgICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykge1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBzdGlybGluZ1MyKG4sIGkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJlbGxOdW1iZXJzID0gY3JlYXRlQmVsbE51bWJlcnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNhdGFsYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjYXRhbGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ2F0YWxhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc05lZ2F0aXZlID0gX3JlZi5pc05lZ2F0aXZlLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy5cbiAgICogY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguY2F0YWxhbihuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jYXRhbGFuKDMpIC8vIHJldHVybnMgNVxuICAgKiAgICBtYXRoLmNhdGFsYW4oOCkgLy8gcmV0dXJucyAxNDMwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiZWxsTnVtYmVyc1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBudGggQ2F0YWxhbiBudW1iZXJcbiAgICogQHJldHVybiB7TnVtYmVyIHwgQmlnTnVtYmVyfSAgICAgQ24obilcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihuKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNhdGFsYW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihjb21iaW5hdGlvbnMobXVsdGlwbHlTY2FsYXIobiwgMiksIG4pLCBhZGRTY2FsYXIobiwgMSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2F0YWxhbiA9IGNyZWF0ZUNhdGFsYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBvc2l0aW9uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29tcG9zaXRpb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkU2NhbGFyJywgJ2NvbWJpbmF0aW9ucycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZUNvbXBvc2l0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb3NpdGlvbiBjb3VudHMgb2YgbiBpbnRvIGsgcGFydHMuXG4gICAqXG4gICAqIGNvbXBvc2l0aW9uIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguY29tcG9zaXRpb24obiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY29tcG9zaXRpb24oNSwgMykgLy8gcmV0dXJucyA2XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFJldHVybnMgdGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIGlmICghaXNJbnRlZ2VyKG4pIHx8ICFpc1Bvc2l0aXZlKG4pIHx8ICFpc0ludGVnZXIoaykgfHwgIWlzUG9zaXRpdmUoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21wb3NpdGlvbicpO1xuICAgICAgfSBlbHNlIGlmIChsYXJnZXIoaywgbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIGNvbXBvc2l0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5hdGlvbnMoYWRkU2NhbGFyKG4sIC0xKSwgYWRkU2NhbGFyKGssIC0xKSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wb3NpdGlvbiA9IGNyZWF0ZUNvbXBvc2l0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdGlybGluZ1MyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3RpcmxpbmdTMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnc3VidHJhY3QnLCAnbXVsdGlwbHlTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ3BvdycsICdmYWN0b3JpYWwnLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZVN0aXJsaW5nUzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgZmFjdG9yaWFsID0gX3JlZi5mYWN0b3JpYWwsXG4gICAgICBjb21iaW5hdGlvbnMgPSBfcmVmLmNvbWJpbmF0aW9ucyxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgU3RpcmxpbmcgbnVtYmVycyBvZiB0aGUgc2Vjb25kIGtpbmQsIGNvdW50cyB0aGUgbnVtYmVyIG9mIHdheXMgdG8gcGFydGl0aW9uXG4gICAqIGEgc2V0IG9mIG4gbGFiZWxsZWQgb2JqZWN0cyBpbnRvIGsgbm9uZW1wdHkgdW5sYWJlbGxlZCBzdWJzZXRzLlxuICAgKiBzdGlybGluZ1MyIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDFcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguc3RpcmxpbmdTMihuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdGlybGluZ1MyKDUsIDMpIC8vcmV0dXJucyAyNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmVsbE51bWJlcnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFMobixrKVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCFpc0ludGVnZXIobikgfHwgaXNOZWdhdGl2ZShuKSB8fCAhaXNJbnRlZ2VyKGspIHx8IGlzTmVnYXRpdmUoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gc3RpcmxpbmdTMicpO1xuICAgICAgfSBlbHNlIGlmIChsYXJnZXIoaywgbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIHN0aXJsaW5nUzInKTtcbiAgICAgIH0gLy8gMS9rISBTdW0oaT0wIC0+IGspIFsoLTEpXihrLWkpKkMoayxqKSogaV5uXVxuXG5cbiAgICAgIHZhciBrRmFjdG9yaWFsID0gZmFjdG9yaWFsKGspO1xuICAgICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGs7IGkrKykge1xuICAgICAgICB2YXIgbmVnYXRpdmVPbmUgPSBwb3coLTEsIHN1YnRyYWN0KGssIGkpKTtcbiAgICAgICAgdmFyIGtDaG9vc2VJID0gY29tYmluYXRpb25zKGssIGkpO1xuICAgICAgICB2YXIgaVBvd2VyID0gcG93KGksIG4pO1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihrQ2hvb3NlSSwgaVBvd2VyKSwgbmVnYXRpdmVPbmUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihyZXN1bHQsIGtGYWN0b3JpYWwpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3RpcmxpbmdTMiA9IGNyZWF0ZVN0aXJsaW5nUzI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFyZyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdhcmcnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBcmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYGF0YW4yKGIsIGEpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFyZyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAyKVxuICAgKiAgICBtYXRoLmFyZyhhKSAvIG1hdGgucGkgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4yNVxuICAgKlxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KCcyICsgM2knKVxuICAgKiAgICBtYXRoLmFyZyhiKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC45ODI3OTM3MjMyNDczMjlcbiAgICogICAgbWF0aC5hdGFuMigzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuOTgyNzkzNzIzMjQ3MzI5XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICByZSwgaW0sIGNvbmosIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmd1bWVudCBvZiB4XG4gICAqL1xuICB2YXIgYXJnID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBNYXRoLmF0YW4yKDAsIHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguY29uc3RydWN0b3IuYXRhbjIoMCwgeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFyZygpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogaW1wbGVtZW50IEJpZ051bWJlciBzdXBwb3J0IGZvciBmdW5jdGlvbiBhcmdcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFyZyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFyZztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcmcgPSBjcmVhdGVBcmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmogPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnY29uaic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbmogPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhIGNvbXBsZXggdmFsdWUuXG4gICAqIElmIGB4ID0gYStiaWAsIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBgeGAgaXMgYGEgLSBiaWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb25qKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbmoobWF0aC5jb21wbGV4KCcyICsgM2knKSkgIC8vIHJldHVybnMgQ29tcGxleCAyIC0gM2lcbiAgICogICAgbWF0aC5jb25qKG1hdGguY29tcGxleCgnMiAtIDNpJykpICAvLyByZXR1cm5zIENvbXBsZXggMiArIDNpXG4gICAqICAgIG1hdGguY29uaihtYXRoLmNvbXBsZXgoJy01LjJpJykpICAvLyByZXR1cm5zIENvbXBsZXggNS4yaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGltLCBhcmcsIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiB4XG4gICAqL1xuICB2YXIgY29uaiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jb25qdWdhdGUoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY29uaik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbmo7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uaiA9IGNyZWF0ZUNvbmo7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUltID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ltJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYmAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pbSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKiAgICBtYXRoLmltKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgLTUuMlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgyLjQpKSAgICAgLy8gcmV0dXJucyBudW1iZXIgMFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGNvbmosIGFicywgYXJnXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgQSBjb21wbGV4IG51bWJlciBvciBhcnJheSB3aXRoIGNvbXBsZXggbnVtYmVyc1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gVGhlIGltYWdpbmFyeSBwYXJ0IG9mIHhcbiAgICovXG4gIHZhciBpbSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4Lm11bCgwKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguaW07XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGltKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaW07XG59KTtcbmV4cG9ydHMuY3JlYXRlSW0gPSBjcmVhdGVJbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAncmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVSZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVhbCBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKiAgICBtYXRoLmltKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgMFxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgyLjQpKSAgICAgLy8gcmV0dXJucyBudW1iZXIgMi40XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpbSwgY29uaiwgYWJzLCBhcmdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBBIGNvbXBsZXggbnVtYmVyIG9yIGFycmF5IHdpdGggY29tcGxleCBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgcmVhbCBwYXJ0IG9mIHhcbiAgICovXG4gIHZhciByZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yZTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgcmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZSA9IGNyZWF0ZVJlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXN0YW5jZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Rpc3RhbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdzdWJ0cmFjdCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAndW5hcnlNaW51cycsICdzcXJ0JywgJ2FicyddO1xudmFyIGNyZWF0ZURpc3RhbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIGFicyA9IF9yZWYuYWJzO1xuXG4gIC8qKlxuICAgICogQ2FsY3VsYXRlczpcbiAgICAqICAgIFRoZSBldWNsZWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzIGluIE4tZGltZW5zaW9uYWwgc3BhY2VzLlxuICAgICogICAgRGlzdGFuY2UgYmV0d2VlbiBwb2ludCBhbmQgYSBsaW5lIGluIDIgYW5kIDMgZGltZW5zaW9uYWwgc3BhY2VzLlxuICAgICogICAgUGFpcndpc2UgZGlzdGFuY2UgYmV0d2VlbiBhIHNldCBvZiAyRCBvciAzRCBwb2ludHNcbiAgICAqIE5PVEU6XG4gICAgKiAgICBXaGVuIHN1YnN0aXR1dGluZyBjb2VmZmljaWVudHMgb2YgYSBsaW5lKGEsIGIgYW5kIGMpLCB1c2UgYXggKyBieSArIGMgPSAwIGluc3RlYWQgb2YgYXggKyBieSA9IGNcbiAgICAqICAgIEZvciBwYXJhbWV0cmljIGVxdWF0aW9uIG9mIGEgM0QgbGluZSwgeDAsIHkwLCB6MCwgYSwgYiwgYyBhcmUgZnJvbTogKHjiiJJ4MCwgeeKIknkwLCB64oiSejApID0gdChhLCBiLCBjKVxuICAgICpcbiAgICAqIFN5bnRheDpcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gxLCB5MV0sIFt4MiwgeTJdKVxuICAgICotICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDV9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDd9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFt4MiwgeTIsIHoyXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50T25lWDogNCwgcG9pbnRPbmVZOiA1LCBwb2ludE9uZVo6IDh9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDcsIHBvaW50VHdvWjogOX0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTEsIC4uLiAsIE4xXSwgW3gyLCB5MiwgLi4uICwgTjJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbW0FdLCBbQl0sIFtDXS4uLl0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTFdLCBbTGluZVB0WDEsIExpbmVQdFkxXSwgW0xpbmVQdFgyLCBMaW5lUHRZMl0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKHtwb2ludFg6IDEsIHBvaW50WTogNH0sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzfSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFtMaW5lUHRYMSwgTGluZVB0WTEsIExpbmVQdFoxXSwgW0xpbmVQdFgyLCBMaW5lUHRZMiwgTGluZVB0WjJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRYOiAxLCBwb2ludFk6IDQsIHBvaW50WjogN30sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzLCBsaW5lT25lUHRaOiA0fSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDgsIGxpbmVUd29QdFo6IDV9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxXSwgW3hDb2VmZkxpbmUsIHlDb2VmZkxpbmUsIGNvbnN0YW50XSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMTAsIHBvaW50WTogMTB9LCB7eENvZWZmTGluZTogOCwgeUNvZWZmTGluZTogMSwgY29uc3RhbnQ6IDN9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFt4MCwgeTAsIHowLCBhLXRDb2VmZiwgYi10Q29lZmYsIGMtdENvZWZmXSkgcG9pbnQgYW5kIHBhcmFtZXRyaWMgZXF1YXRpb24gb2YgM0QgbGluZVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeCwgeSwgel0sIFt4MCwgeTAsIHowLCBhLCBiLCBjXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMiwgcG9pbnRZOiA1LCBwb2ludFo6IDl9LCB7eDA6IDQsIHkwOiA2LCB6MDogMywgYTogNCwgYjogMiwgYzogMH0pXG4gICAgKlxuICAgICogRXhhbXBsZXM6XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFswLDBdLCBbNCw0XSkgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDUuNjU2OVxuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRPbmVYOiAwLCBwb2ludE9uZVk6IDB9LFxuICAgICogICAgIHtwb2ludFR3b1g6IDEwLCBwb2ludFR3b1k6IDEwfSkgICAgICAgICAgICAgICAgLy8gUmV0dXJucyAxNC4xNDIxMzU2MjM3MzA5NTFcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDFdLCBbNCwgLTIsIDJdKSAgICAgICAgICAgIC8vIFJldHVybnMgMy43NDE2NlxuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDUsIHBvaW50T25lWjogOH0sXG4gICAgKiAgICAge3BvaW50VHdvWDogMiwgcG9pbnRUd29ZOiA3LCBwb2ludFR3b1o6IDl9KSAgICAvLyBSZXR1cm5zIDNcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDEsIDBdLCBbMCwgLTEsIDAsIC0xXSkgICAgIC8vIFJldHVybnMgMlxuICAgICogICAgbWF0aC5kaXN0YW5jZShbWzEsIDJdLCBbMSwgMl0sIFsxLCAzXV0pICAgICAgICAgLy8gUmV0dXJucyBbMCwgMSwgMV1cbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW1sxLDIsNF0sIFsxLDIsNl0sIFs4LDEsM11dKSAgICAgIC8vIFJldHVybnMgWzIsIDcuMTQxNDI4NDI4NTQyODUsIDcuNjgxMTQ1NzQ3ODY4NjA4XVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbMTAsIDEwXSwgWzgsIDEsIDNdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyAxMS41MzUyMzAzMTY3OTYzODdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEwLCAxMF0sIFsyLCAzXSwgWy04LCAwXSkgICAgICAgIC8vIFJldHVybnMgOC43NTk5NTMxMzAzNjI4NDdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoXG4gICAgKiAgICAge3BvaW50WDogMSwgcG9pbnRZOiA0fSxcbiAgICAqICAgICB7bGluZU9uZVB0WDogNiwgbGluZU9uZVB0WTogM30sXG4gICAgKiAgICAge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KSAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDIuNzIwNTQ5MzcyNjI0NzQ0XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFsyLCAzLCAxXSwgWzEsIDEsIDIsIDUsIDAsIDFdKSAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1N1xuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRYOiAyLCBwb2ludFk6IDMsIHBvaW50WjogMX0sXG4gICAgKiAgICAge3gwOiAxLCB5MDogMSwgejA6IDIsIGE6IDUsIGI6IDAsIGM6IDF9ICAgICAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1N1xuICAgICpcbiAgICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCBPYmplY3R9IHggICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IHBvaW50XG4gICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgT2JqZWN0fSB5ICAgIENvLW9yZGluYXRlcyBvZiBzZWNvbmQgcG9pbnRcbiAgICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgZGlzdGFuY2UgZnJvbSB0d28vdGhyZWUgcG9pbnRzXG4gICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5QXJyYXkoeCwgeSwgeikge1xuICAgICAgLy8gUG9pbnQgdG8gTGluZSAyRCAoeD1Qb2ludCwgeT1MaW5lUG9pbnQxLCB6PUxpbmVQb2ludDIpXG4gICAgICBpZiAoeC5sZW5ndGggPT09IDIgJiYgeS5sZW5ndGggPT09IDIgJiYgei5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzJkKHopKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgdGhpcmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KHpbMV0sIHpbMF0pLCBzdWJ0cmFjdCh5WzFdLCB5WzBdKSk7XG4gICAgICAgIHZhciB4Q29lZmYgPSBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihtLCBtKSwgeVswXSk7XG4gICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHlbMF0pKTtcbiAgICAgICAgdmFyIGNvbnN0YW50ID0geFsxXTtcbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHhDb2VmZiwgeUNvZWZmLCBjb25zdGFudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnT2JqZWN0LCBPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE9iamVjdE9iamVjdE9iamVjdCh4LCB5LCB6KSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh6KS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgbGluZU9uZVB0WCBhbmQgbGluZU9uZVB0WSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBsaW5lVHdvUHRYIGFuZCBsaW5lVHdvUHRZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncG9pbnRYJyBpbiB4ICYmICdwb2ludFknIGluIHggJiYgJ2xpbmVPbmVQdFgnIGluIHkgJiYgJ2xpbmVPbmVQdFknIGluIHkgJiYgJ2xpbmVUd29QdFgnIGluIHogJiYgJ2xpbmVUd29QdFknIGluIHopIHtcbiAgICAgICAgICB2YXIgbSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdCh6LmxpbmVUd29QdFksIHoubGluZVR3b1B0WCksIHN1YnRyYWN0KHkubGluZU9uZVB0WSwgeS5saW5lT25lUHRYKSk7XG4gICAgICAgICAgdmFyIHhDb2VmZiA9IG11bHRpcGx5U2NhbGFyKG11bHRpcGx5U2NhbGFyKG0sIG0pLCB5LmxpbmVPbmVQdFgpO1xuICAgICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHkubGluZU9uZVB0WCkpO1xuICAgICAgICAgIHZhciBjb25zdGFudCA9IHgucG9pbnRYO1xuICAgICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUyRCh4LnBvaW50WCwgeC5wb2ludFksIHhDb2VmZiwgeUNvZWZmLCBjb25zdGFudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyBQb2ludCB0byBMaW5lIDJEICh4PVtwb2ludFgsIHBvaW50WV0sIHk9W3gtY29lZmYsIHktY29lZmYsIGNvbnN0XSlcbiAgICAgIGlmICh4Lmxlbmd0aCA9PT0gMiAmJiB5Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHlbMF0sIHlbMV0sIHlbMl0pO1xuICAgICAgfSBlbHNlIGlmICh4Lmxlbmd0aCA9PT0gMyAmJiB5Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAvLyBQb2ludCB0byBMaW5lIDNEXG4gICAgICAgIGlmICghXzNkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCA2IG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lM0QoeFswXSwgeFsxXSwgeFsyXSwgeVswXSwgeVsxXSwgeVsyXSwgeVszXSwgeVs0XSwgeVs1XSk7XG4gICAgICB9IGVsc2UgaWYgKHgubGVuZ3RoID09PSB5Lmxlbmd0aCAmJiB4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gUG9pbnQgTi1kaW1lbnNpb25zXG4gICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoeCwgeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBPYmplY3RPYmplY3QoeCwgeSkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfM2QoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgeENvZWZmTGluZSwgeUNvZWZmTGluZSBhbmQgY29uc3RhbnQgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludFgnIGluIHggJiYgJ3BvaW50WScgaW4geCAmJiAneENvZWZmTGluZScgaW4geSAmJiAneUNvZWZmTGluZScgaW4geSAmJiAnY29uc3RhbnQnIGluIHkpIHtcbiAgICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lMkQoeC5wb2ludFgsIHgucG9pbnRZLCB5LnhDb2VmZkxpbmUsIHkueUNvZWZmTGluZSwgeS5jb25zdGFudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMyAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gTGluZSAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFgsIHBvaW50WSBhbmQgcG9pbnRaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHgwLCB5MCwgejAsIGEsIGIgYW5kIGMgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludFgnIGluIHggJiYgJ3BvaW50WScgaW4geCAmJiAneDAnIGluIHkgJiYgJ3kwJyBpbiB5ICYmICd6MCcgaW4geSAmJiAnYScgaW4geSAmJiAnYicgaW4geSAmJiAnYycgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUzRCh4LnBvaW50WCwgeC5wb2ludFksIHgucG9pbnRaLCB5LngwLCB5LnkwLCB5LnowLCB5LmEsIHkuYiwgeS5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBQb2ludCB0byBQb2ludCAyRFxuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVggYW5kIHBvaW50T25lWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFR3b1ggYW5kIHBvaW50VHdvWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3BvaW50T25lWCcgaW4geCAmJiAncG9pbnRPbmVZJyBpbiB4ICYmICdwb2ludFR3b1gnIGluIHkgJiYgJ3BvaW50VHdvWScgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoW3gucG9pbnRPbmVYLCB4LnBvaW50T25lWV0sIFt5LnBvaW50VHdvWCwgeS5wb2ludFR3b1ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAzICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAvLyBQb2ludCB0byBQb2ludCAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVgsIHBvaW50T25lWSBhbmQgcG9pbnRPbmVaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHBvaW50VHdvWCwgcG9pbnRUd29ZIGFuZCBwb2ludFR3b1ogc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludE9uZVgnIGluIHggJiYgJ3BvaW50T25lWScgaW4geCAmJiAncG9pbnRPbmVaJyBpbiB4ICYmICdwb2ludFR3b1gnIGluIHkgJiYgJ3BvaW50VHdvWScgaW4geSAmJiAncG9pbnRUd29aJyBpbiB5KSB7XG4gICAgICAgICAgcmV0dXJuIF9ldWNsaWRlYW5EaXN0YW5jZShbeC5wb2ludE9uZVgsIHgucG9pbnRPbmVZLCB4LnBvaW50T25lWl0sIFt5LnBvaW50VHdvWCwgeS5wb2ludFR3b1ksIHkucG9pbnRUd29aXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYXJyKSB7XG4gICAgICBpZiAoIV9wYWlyd2lzZShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29ycmVjdCBhcnJheSBmb3JtYXQgZW50ZXJlZCBmb3IgcGFpcndpc2UgZGlzdGFuY2UgY2FsY3VsYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9kaXN0YW5jZVBhaXJ3aXNlKGFycik7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaXNOdW1iZXIoYSkge1xuICAgIC8vIGRpc3RhbmNlIHN1cHBvcnRzIG51bWJlcnMgYW5kIGJpZ251bWJlcnNcbiAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInIHx8ICgwLCBfaXMuaXNCaWdOdW1iZXIpKGEpO1xuICB9XG5cbiAgZnVuY3Rpb24gXzJkKGEpIHtcbiAgICAvLyBjaGVja3MgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIGNvcnJlY3QgaW4gY291bnQgYW5kIGFyZSB2YWxpZCAoc2hvdWxkIGJlIG51bWJlcnMpXG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICBhID0gX29iamVjdFRvQXJyYXkoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9pc051bWJlcihhWzBdKSAmJiBfaXNOdW1iZXIoYVsxXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfM2QoYSkge1xuICAgIC8vIGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcmUgY29ycmVjdCBpbiBjb3VudCBhbmQgYXJlIHZhbGlkIChzaG91bGQgYmUgbnVtYmVycylcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgIGEgPSBfb2JqZWN0VG9BcnJheShhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2lzTnVtYmVyKGFbMF0pICYmIF9pc051bWJlcihhWzFdKSAmJiBfaXNOdW1iZXIoYVsyXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfY29udGFpbnNPbmx5TnVtYmVycyhhKSB7XG4gICAgLy8gY2hlY2tzIGlmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGFyZSBjb3JyZWN0IGluIGNvdW50IGFuZCBhcmUgdmFsaWQgKHNob3VsZCBiZSBudW1iZXJzKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBhLmV2ZXJ5KF9pc051bWJlcik7XG4gIH1cblxuICBmdW5jdGlvbiBfcGFyYW1ldHJpY0xpbmUoYSkge1xuICAgIGlmIChhLmNvbnN0cnVjdG9yICE9PSBBcnJheSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBfaXNOdW1iZXIoYVswXSkgJiYgX2lzTnVtYmVyKGFbMV0pICYmIF9pc051bWJlcihhWzJdKSAmJiBfaXNOdW1iZXIoYVszXSkgJiYgX2lzTnVtYmVyKGFbNF0pICYmIF9pc051bWJlcihhWzVdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9vYmplY3RUb0FycmF5KG8pIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgIHZhciBhID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGEucHVzaChvW2tleXNbaV1dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9wYWlyd2lzZShhKSB7XG4gICAgLy8gY2hlY2tzIGZvciB2YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIF9kaXN0YW5jZVBhaXJ3aXNlKEFycmF5KVxuICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMiAmJiBfaXNOdW1iZXIoYVswXVswXSkgJiYgX2lzTnVtYmVyKGFbMF1bMV0pKSB7XG4gICAgICBpZiAoYS5zb21lKGZ1bmN0aW9uIChhSSkge1xuICAgICAgICByZXR1cm4gYUkubGVuZ3RoICE9PSAyIHx8ICFfaXNOdW1iZXIoYUlbMF0pIHx8ICFfaXNOdW1iZXIoYUlbMV0pO1xuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMgJiYgX2lzTnVtYmVyKGFbMF1bMF0pICYmIF9pc051bWJlcihhWzBdWzFdKSAmJiBfaXNOdW1iZXIoYVswXVsyXSkpIHtcbiAgICAgIGlmIChhLnNvbWUoZnVuY3Rpb24gKGFJKSB7XG4gICAgICAgIHJldHVybiBhSS5sZW5ndGggIT09IDMgfHwgIV9pc051bWJlcihhSVswXSkgfHwgIV9pc051bWJlcihhSVsxXSkgfHwgIV9pc051bWJlcihhSVsyXSk7XG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTJEKHgsIHksIGEsIGIsIGMpIHtcbiAgICB2YXIgbnVtID0gYWJzKGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgeCksIG11bHRpcGx5U2NhbGFyKGIsIHkpKSwgYykpO1xuICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihhLCBhKSwgbXVsdGlwbHlTY2FsYXIoYiwgYikpKTtcbiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTNEKHgsIHksIHosIHgwLCB5MCwgejAsIGEsIGIsIGMpIHtcbiAgICB2YXIgbnVtID0gW3N1YnRyYWN0KG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHkwLCB5KSwgYyksIG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHowLCB6KSwgYikpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh6MCwgeiksIGEpLCBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh4MCwgeCksIGMpKSwgc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeDAsIHgpLCBiKSwgbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeTAsIHkpLCBhKSldO1xuICAgIG51bSA9IHNxcnQoYWRkU2NhbGFyKGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihudW1bMF0sIG51bVswXSksIG11bHRpcGx5U2NhbGFyKG51bVsxXSwgbnVtWzFdKSksIG11bHRpcGx5U2NhbGFyKG51bVsyXSwgbnVtWzJdKSkpO1xuICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgYSksIG11bHRpcGx5U2NhbGFyKGIsIGIpKSwgbXVsdGlwbHlTY2FsYXIoYywgYykpKTtcbiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9ldWNsaWRlYW5EaXN0YW5jZSh4LCB5KSB7XG4gICAgdmFyIHZlY3RvclNpemUgPSB4Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICB2YXIgZGlmZiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlY3RvclNpemU7IGkrKykge1xuICAgICAgZGlmZiA9IHN1YnRyYWN0KHhbaV0sIHlbaV0pO1xuICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKG11bHRpcGx5U2NhbGFyKGRpZmYsIGRpZmYpLCByZXN1bHQpO1xuICAgIH1cblxuICAgIHJldHVybiBzcXJ0KHJlc3VsdCk7XG4gIH1cblxuICBmdW5jdGlvbiBfZGlzdGFuY2VQYWlyd2lzZShhKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBwb2ludEEgPSBbXTtcbiAgICB2YXIgcG9pbnRCID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHBvaW50QSA9IFthW2ldWzBdLCBhW2ldWzFdXTtcbiAgICAgICAgICBwb2ludEIgPSBbYVtqXVswXSwgYVtqXVsxXV07XG4gICAgICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICBwb2ludEEgPSBbYVtpXVswXSwgYVtpXVsxXSwgYVtpXVsyXV07XG4gICAgICAgICAgcG9pbnRCID0gW2Fbal1bMF0sIGFbal1bMV0sIGFbal1bMl1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnB1c2goX2V1Y2xpZGVhbkRpc3RhbmNlKHBvaW50QSwgcG9pbnRCKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZURpc3RhbmNlID0gY3JlYXRlRGlzdGFuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUludGVyc2VjdCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ludGVyc2VjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnYWJzJywgJ2FkZCcsICdhZGRTY2FsYXInLCAnbWF0cml4JywgJ211bHRpcGx5JywgJ211bHRpcGx5U2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdzbWFsbGVyJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlSW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiB0d28gbGluZXMgaW4gdHdvIG9yIHRocmVlIGRpbWVuc2lvbnNcbiAgICogYW5kIG9mIGEgbGluZSBhbmQgYSBwbGFuZSBpbiB0aHJlZSBkaW1lbnNpb25zLiBUaGUgaW5wdXRzIGFyZSBpbiB0aGUgZm9ybSBvZlxuICAgKiBhcnJheXMgb3IgMSBkaW1lbnNpb25hbCBtYXRyaWNlcy4gVGhlIGxpbmUgaW50ZXJzZWN0aW9uIGZ1bmN0aW9ucyByZXR1cm4gbnVsbFxuICAgKiBpZiB0aGUgbGluZXMgZG8gbm90IG1lZXQuXG4gICAqXG4gICAqIE5vdGU6IEZpbGwgdGhlIHBsYW5lIGNvZWZmaWNpZW50cyBhcyBgeCArIHkgKyB6ID0gY2AgYW5kIG5vdCBhcyBgeCArIHkgKyB6ICsgYyA9IDBgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KGVuZFBvaW50MUxpbmUxLCBlbmRQb2ludDJMaW5lMSwgZW5kUG9pbnQxTGluZTIsIGVuZFBvaW50MkxpbmUyKVxuICAgKiAgICBtYXRoLmludGVyc2VjdChlbmRQb2ludDEsIGVuZFBvaW50MiwgcGxhbmVDb2VmZmljaWVudHMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyBbNSwgNV1cbiAgICogICAgbWF0aC5pbnRlcnNlY3QoWzAsIDAsIDBdLCBbMTAsIDEwLCAwXSwgWzEwLCAwLCAwXSwgWzAsIDEwLCAwXSkgIC8vIFJldHVybnMgWzUsIDUsIDBdXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KFsxLCAwLCAxXSwgIFs0LCAtMiwgMl0sIFsxLCAxLCAxLCA2XSkgICAgICAgICAgICAvLyBSZXR1cm5zIFs3LCAtNCwgM11cbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHcgICBDby1vcmRpbmF0ZXMgb2YgZmlyc3QgZW5kLXBvaW50IG9mIGZpcnN0IGxpbmVcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHggICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIGVuZC1wb2ludCBvZiBmaXJzdCBsaW5lXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB5ICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIENvLWVmZmljaWVudHMgb2YgdGhlIHBsYW5lJ3MgZXF1YXRpb25cbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHogICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIG51bGwgaWYgdGhlIGNhbGN1bGF0aW9uIGlzIGZvciBsaW5lIGFuZCBwbGFuZVxuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgICAgICAgIFJldHVybnMgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiBsaW5lcy9saW5lcy1wbGFuZXNcbiAgICovXG4gIHZhciBpbnRlcnNlY3QgPSB0eXBlZCgnaW50ZXJzZWN0Jywge1xuICAgICdBcnJheSwgQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheUFycmF5KHgsIHksIHBsYW5lKSB7XG4gICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfNGQocGxhbmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggNCBudW1iZXJzIGV4cGVjdGVkIGFzIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfaW50ZXJzZWN0TGluZVBsYW5lKHhbMF0sIHhbMV0sIHhbMl0sIHlbMF0sIHlbMV0sIHlbMl0sIHBsYW5lWzBdLCBwbGFuZVsxXSwgcGxhbmVbMl0sIHBsYW5lWzNdKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXksIEFycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXlBcnJheUFycmF5KHcsIHgsIHksIHopIHtcbiAgICAgIGlmICh3Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAoIV8yZCh3KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciB0aGlyZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmb3VydGggYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfaW50ZXJzZWN0MmQodywgeCwgeSwgeik7XG4gICAgICB9IGVsc2UgaWYgKHcubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICghXzNkKHcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZvdXJ0aCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9pbnRlcnNlY3QzZCh3WzBdLCB3WzFdLCB3WzJdLCB4WzBdLCB4WzFdLCB4WzJdLCB5WzBdLCB5WzFdLCB5WzJdLCB6WzBdLCB6WzFdLCB6WzJdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5cyB3aXRoIHR3byBvciB0aGVlIGRpbWVuc2lvbmFsIHBvaW50cyBleHBlY3RlZCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXhNYXRyaXgoeCwgeSwgcGxhbmUpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoaW50ZXJzZWN0KHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSwgcGxhbmUudmFsdWVPZigpKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgsIE1hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4TWF0cml4TWF0cml4KHcsIHgsIHksIHopIHtcbiAgICAgIC8vIFRPRE86IG91dHB1dCBtYXRyaXggdHlwZSBzaG91bGQgbWF0Y2ggaW5wdXQgbWF0cml4IHR5cGVcbiAgICAgIHJldHVybiBtYXRyaXgoaW50ZXJzZWN0KHcudmFsdWVPZigpLCB4LnZhbHVlT2YoKSwgeS52YWx1ZU9mKCksIHoudmFsdWVPZigpKSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaXNOdW1lcmljKGEpIHtcbiAgICAvLyBpbnRlcnNlY3Qgc3VwcG9ydHMgbnVtYmVycyBhbmQgYmlnbnVtYmVyc1xuICAgIHJldHVybiB0eXBlb2YgYSA9PT0gJ251bWJlcicgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoYSk7XG4gIH1cblxuICBmdW5jdGlvbiBfMmQoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMiAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfM2QoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMyAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSkgJiYgX2lzTnVtZXJpYyh4WzJdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF80ZCh4KSB7XG4gICAgcmV0dXJuIHgubGVuZ3RoID09PSA0ICYmIF9pc051bWVyaWMoeFswXSkgJiYgX2lzTnVtZXJpYyh4WzFdKSAmJiBfaXNOdW1lcmljKHhbMl0pICYmIF9pc051bWVyaWMoeFszXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0MmQocDFhLCBwMWIsIHAyYSwgcDJiKSB7XG4gICAgdmFyIG8xID0gcDFhO1xuICAgIHZhciBvMiA9IHAyYTtcbiAgICB2YXIgZDEgPSBzdWJ0cmFjdChvMSwgcDFiKTtcbiAgICB2YXIgZDIgPSBzdWJ0cmFjdChvMiwgcDJiKTtcbiAgICB2YXIgZGV0ID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoZDFbMF0sIGQyWzFdKSwgbXVsdGlwbHlTY2FsYXIoZDJbMF0sIGQxWzFdKSk7XG5cbiAgICBpZiAoc21hbGxlcihhYnMoZGV0KSwgY29uZmlnLmVwc2lsb24pKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgZDIwbzExID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8xWzFdKTtcbiAgICB2YXIgZDIxbzEwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8xWzBdKTtcbiAgICB2YXIgZDIwbzIxID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8yWzFdKTtcbiAgICB2YXIgZDIxbzIwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8yWzBdKTtcbiAgICB2YXIgdCA9IGRpdmlkZVNjYWxhcihhZGRTY2FsYXIoc3VidHJhY3Qoc3VidHJhY3QoZDIwbzExLCBkMjFvMTApLCBkMjBvMjEpLCBkMjFvMjApLCBkZXQpO1xuICAgIHJldHVybiBhZGQobXVsdGlwbHkoZDEsIHQpLCBvMSk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0M2RIZWxwZXIoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkge1xuICAgIC8vIChhIC0gYikqKGMgLSBkKSArIChlIC0gZikqKGcgLSBoKSArIChpIC0gaikqKGsgLSBsKVxuICAgIHZhciBhZGQxID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoYSwgYiksIHN1YnRyYWN0KGMsIGQpKTtcbiAgICB2YXIgYWRkMiA9IG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KGUsIGYpLCBzdWJ0cmFjdChnLCBoKSk7XG4gICAgdmFyIGFkZDMgPSBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdChpLCBqKSwgc3VidHJhY3QoaywgbCkpO1xuICAgIHJldHVybiBhZGRTY2FsYXIoYWRkU2NhbGFyKGFkZDEsIGFkZDIpLCBhZGQzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbnRlcnNlY3QzZCh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCB4MywgeTMsIHozLCB4NCwgeTQsIHo0KSB7XG4gICAgdmFyIGQxMzQzID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDQsIHgzLCB5MSwgeTMsIHk0LCB5MywgejEsIHozLCB6NCwgejMpO1xuXG4gICAgdmFyIGQ0MzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHg0LCB4MywgeDIsIHgxLCB5NCwgeTMsIHkyLCB5MSwgejQsIHozLCB6MiwgejEpO1xuXG4gICAgdmFyIGQxMzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDIsIHgxLCB5MSwgeTMsIHkyLCB5MSwgejEsIHozLCB6MiwgejEpO1xuXG4gICAgdmFyIGQ0MzQzID0gX2ludGVyc2VjdDNkSGVscGVyKHg0LCB4MywgeDQsIHgzLCB5NCwgeTMsIHk0LCB5MywgejQsIHozLCB6NCwgejMpO1xuXG4gICAgdmFyIGQyMTIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgyLCB4MSwgeDIsIHgxLCB5MiwgeTEsIHkyLCB5MSwgejIsIHoxLCB6MiwgejEpO1xuXG4gICAgdmFyIHRhID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGQxMzQzLCBkNDMyMSksIG11bHRpcGx5U2NhbGFyKGQxMzIxLCBkNDM0MykpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihkMjEyMSwgZDQzNDMpLCBtdWx0aXBseVNjYWxhcihkNDMyMSwgZDQzMjEpKSk7XG4gICAgdmFyIHRiID0gZGl2aWRlU2NhbGFyKGFkZFNjYWxhcihkMTM0MywgbXVsdGlwbHlTY2FsYXIodGEsIGQ0MzIxKSksIGQ0MzQzKTtcbiAgICB2YXIgcGF4ID0gYWRkU2NhbGFyKHgxLCBtdWx0aXBseVNjYWxhcih0YSwgc3VidHJhY3QoeDIsIHgxKSkpO1xuICAgIHZhciBwYXkgPSBhZGRTY2FsYXIoeTEsIG11bHRpcGx5U2NhbGFyKHRhLCBzdWJ0cmFjdCh5MiwgeTEpKSk7XG4gICAgdmFyIHBheiA9IGFkZFNjYWxhcih6MSwgbXVsdGlwbHlTY2FsYXIodGEsIHN1YnRyYWN0KHoyLCB6MSkpKTtcbiAgICB2YXIgcGJ4ID0gYWRkU2NhbGFyKHgzLCBtdWx0aXBseVNjYWxhcih0Yiwgc3VidHJhY3QoeDQsIHgzKSkpO1xuICAgIHZhciBwYnkgPSBhZGRTY2FsYXIoeTMsIG11bHRpcGx5U2NhbGFyKHRiLCBzdWJ0cmFjdCh5NCwgeTMpKSk7XG4gICAgdmFyIHBieiA9IGFkZFNjYWxhcih6MywgbXVsdGlwbHlTY2FsYXIodGIsIHN1YnRyYWN0KHo0LCB6MykpKTtcblxuICAgIGlmIChlcXVhbFNjYWxhcihwYXgsIHBieCkgJiYgZXF1YWxTY2FsYXIocGF5LCBwYnkpICYmIGVxdWFsU2NhbGFyKHBheiwgcGJ6KSkge1xuICAgICAgcmV0dXJuIFtwYXgsIHBheSwgcGF6XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2ludGVyc2VjdExpbmVQbGFuZSh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCB4LCB5LCB6LCBjKSB7XG4gICAgdmFyIHgxeCA9IG11bHRpcGx5U2NhbGFyKHgxLCB4KTtcbiAgICB2YXIgeDJ4ID0gbXVsdGlwbHlTY2FsYXIoeDIsIHgpO1xuICAgIHZhciB5MXkgPSBtdWx0aXBseVNjYWxhcih5MSwgeSk7XG4gICAgdmFyIHkyeSA9IG11bHRpcGx5U2NhbGFyKHkyLCB5KTtcbiAgICB2YXIgejF6ID0gbXVsdGlwbHlTY2FsYXIoejEsIHopO1xuICAgIHZhciB6MnogPSBtdWx0aXBseVNjYWxhcih6Miwgeik7XG4gICAgdmFyIHQgPSBkaXZpZGVTY2FsYXIoc3VidHJhY3Qoc3VidHJhY3Qoc3VidHJhY3QoYywgeDF4KSwgeTF5KSwgejF6KSwgc3VidHJhY3Qoc3VidHJhY3Qoc3VidHJhY3QoYWRkU2NhbGFyKGFkZFNjYWxhcih4MngsIHkyeSksIHoyeiksIHgxeCksIHkxeSksIHoxeikpO1xuICAgIHZhciBweCA9IGFkZFNjYWxhcih4MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeDIsIHgxKSkpO1xuICAgIHZhciBweSA9IGFkZFNjYWxhcih5MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeTIsIHkxKSkpO1xuICAgIHZhciBweiA9IGFkZFNjYWxhcih6MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoejIsIHoxKSkpO1xuICAgIHJldHVybiBbcHgsIHB5LCBwel07IC8vIFRPRE86IEFkZCBjYXNlcyB3aGVuIGxpbmUgaXMgcGFyYWxsZWwgdG8gdGhlIHBsYW5lOlxuICAgIC8vICAgICAgIChhKSBubyBpbnRlcnNlY3Rpb24sXG4gICAgLy8gICAgICAgKGIpIGxpbmUgY29udGFpbmVkIGluIHBsYW5lXG4gIH1cblxuICByZXR1cm4gaW50ZXJzZWN0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUludGVyc2VjdCA9IGNyZWF0ZUludGVyc2VjdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQW5kID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhbmQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ25vdCddO1xudmFyIGNyZWF0ZUFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIG5vdCA9IF9yZWYubm90O1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgYW5kYC4gVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGJvdGggZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFuZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hbmQoMiwgNCkgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgYSA9IFsyLCAwLCAwXVxuICAgKiAgICBiID0gWzMsIDcsIDBdXG4gICAqICAgIGMgPSAwXG4gICAqXG4gICAqICAgIG1hdGguYW5kKGEsIGIpICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIGZhbHNlXVxuICAgKiAgICBtYXRoLmFuZChhLCBjKSAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBub3QsIG9yLCB4b3JcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gYm90aCBpbnB1dHMgYXJlIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciBhbmQgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5hbmROdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCkgJiYgKHkucmUgIT09IDAgfHwgeS5pbSAhPT0gMCk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICF4LmlzWmVybygpICYmICF5LmlzWmVybygpICYmICF4LmlzTmFOKCkgJiYgIXkuaXNOYU4oKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIGFuZCh4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGFuZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYW5kKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbmQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh5KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBhbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAobm90KHkpKSB7XG4gICAgICAgIC8vIHJldHVybiB6ZXJvIG1hdHJpeFxuICAgICAgICByZXR1cm4gemVyb3MoeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh4KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBhbmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChub3QoeCkpIHtcbiAgICAgICAgLy8gcmV0dXJuIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh4LnNpemUoKSwgeC5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYW5kO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFuZCA9IGNyZWF0ZUFuZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm90ID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbm90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogTG9naWNhbCBgbm90YC4gRmxpcHMgYm9vbGVhbiB2YWx1ZSBvZiBhIGdpdmVuIHBhcmFtZXRlci5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm5vdCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5ub3QoMikgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGgubm90KDApICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGgubm90KHRydWUpICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBhID0gWzIsIC03LCAwXVxuICAgKiAgICBtYXRoLm5vdChhKSAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFuZCwgb3IsIHhvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBpbnB1dCBpcyBhIHplcm8gb3IgZW1wdHkgdmFsdWUuXG4gICAqL1xuICB2YXIgbm90ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5ub3ROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yZSA9PT0gMCAmJiB4LmltID09PSAwO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguaXNaZXJvKCkgfHwgeC5pc05hTigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC52YWx1ZSAhPT0gbnVsbCA/IG5vdCh4LnZhbHVlKSA6IHRydWU7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIG5vdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5vdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb3QgPSBjcmVhdGVOb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9yID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA1XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdvcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNSA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgb3JgLiBUZXN0IGlmIGF0IGxlYXN0IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgub3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgub3IoMiwgNCkgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgYSA9IFsyLCA1LCAwXVxuICAgKiAgICBiID0gWzAsIDIyLCAwXVxuICAgKiAgICBjID0gMFxuICAgKlxuICAgKiAgICBtYXRoLm9yKGEsIGIpICAgLy8gcmV0dXJucyBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdXG4gICAqICAgIG1hdGgub3IoYiwgYykgICAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhbmQsIG5vdCwgeG9yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY2hlY2tcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdHJ1ZSB3aGVuIG9uZSBvZiB0aGUgaW5wdXRzIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciBvciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm9yTnVtYmVyLFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCB8fCB5LnJlICE9PSAwIHx8IHkuaW0gIT09IDA7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICF4LmlzWmVybygpICYmICF4LmlzTmFOKCkgfHwgIXkuaXNaZXJvKCkgJiYgIXkuaXNOYU4oKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIG9yKHgudmFsdWUgfHwgMCwgeS52YWx1ZSB8fCAwKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgb3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gb3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBvciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgb3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlT3IgPSBjcmVhdGVPcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlWG9yID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd4b3InO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlWG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBMb2dpY2FsIGB4b3JgLiBUZXN0IHdoZXRoZXIgb25lIGFuZCBvbmx5IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgueG9yKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnhvcigyLCA0KSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgYSA9IFsyLCAwLCAwXVxuICAgKiAgICBiID0gWzIsIDcsIDBdXG4gICAqICAgIGMgPSAwXG4gICAqXG4gICAqICAgIG1hdGgueG9yKGEsIGIpICAgLy8gcmV0dXJucyBbZmFsc2UsIHRydWUsIGZhbHNlXVxuICAgKiAgICBtYXRoLnhvcihhLCBjKSAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFuZCwgbm90LCBvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBvbmUgYW5kIG9ubHkgb25lIGlucHV0IGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciB4b3IgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci54b3JOdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCkgIT09ICh5LnJlICE9PSAwIHx8IHkuaW0gIT09IDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiAoIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKSkgIT09ICgheS5pc1plcm8oKSAmJiAheS5pc05hTigpKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIHhvcih4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHhvcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgeG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgeG9yKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB4b3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHhvcihtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4geG9yKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgeG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIHhvciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCB4b3IsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHhvciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB4b3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlWG9yID0gY3JlYXRlWG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcHBseSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhcHBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc0ludGVnZXInXTtcbnZhciBjcmVhdGVBcHBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcblxuICAvKipcbiAgICogQXBwbHkgYSBmdW5jdGlvbiB0aGF0IG1hcHMgYW4gYXJyYXkgdG8gYSBzY2FsYXJcbiAgICogYWxvbmcgYSBnaXZlbiBheGlzIG9mIGEgbWF0cml4IG9yIGFycmF5LlxuICAgKiBSZXR1cm5zIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIG9uZSBsZXNzIGRpbWVuc2lvbiB0aGFuIHRoZSBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5hcHBseShBLCBkaW0sIGNhbGxiYWNrKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZGltOiBudW1iZXJgIGlzIGEgemVyby1iYXNlZCBkaW1lbnNpb24gb3ZlciB3aGljaCB0byBjb25jYXRlbmF0ZSB0aGUgbWF0cmljZXMuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICBjb25zdCBzdW0gPSBtYXRoLnN1bVxuICAgKlxuICAgKiAgICBtYXRoLmFwcGx5KEEsIDAsIHN1bSkgICAgICAgICAgICAgLy8gcmV0dXJucyBbNCwgNl1cbiAgICogICAgbWF0aC5hcHBseShBLCAxLCBzdW0pICAgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDddXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtYXAsIGZpbHRlciwgZm9yRWFjaFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheSAgIFRoZSBpbnB1dCBNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICAgICBUaGUgZGltZW5zaW9uIGFsb25nIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBhcHBsaWVkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgYXBwbGllZC4gVGhpcyBGdW5jdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCB0YWtlIGFuIGFycmF5IG9yIDEtZCBtYXRyaXggYXMgYW4gaW5wdXQgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgbnVtYmVyLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmVzICAgIFRoZSByZXNpZHVhbCBtYXRyaXggd2l0aCB0aGUgZnVuY3Rpb24gYXBwbGllZCBvdmVyIHNvbWUgZGltZW5zaW9uLlxuICAgKi9cbiAgdmFyIGFwcGx5ID0gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyLCBmdW5jdGlvbic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyRnVuY3Rpb24obWF0LCBkaW0sIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihkaW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludGVnZXIgbnVtYmVyIGV4cGVjdGVkIGZvciBkaW1lbnNpb24nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNpemUgPSBBcnJheS5pc0FycmF5KG1hdCkgPyAoMCwgX2FycmF5LmFycmF5U2l6ZSkobWF0KSA6IG1hdC5zaXplKCk7XG5cbiAgICAgIGlmIChkaW0gPCAwIHx8IGRpbSA+PSBzaXplLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihkaW0sIHNpemUubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKG1hdCkpIHtcbiAgICAgICAgcmV0dXJuIG1hdC5jcmVhdGUoX2FwcGx5KG1hdC52YWx1ZU9mKCksIGRpbSwgY2FsbGJhY2spKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfYXBwbHkobWF0LCBkaW0sIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXBwbHk7XG59KTtcbi8qKlxuICogUmVjdXJzaXZlbHkgcmVkdWNlIGEgbWF0cml4XG4gKiBAcGFyYW0ge0FycmF5fSBtYXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldFxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUFwcGx5ID0gY3JlYXRlQXBwbHk7XG5cbmZ1bmN0aW9uIF9hcHBseShtYXQsIGRpbSwgY2FsbGJhY2spIHtcbiAgdmFyIGksIHJldCwgdHJhbjtcblxuICBpZiAoZGltIDw9IDApIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWF0WzBdKSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG1hdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW4gPSBfc3dpdGNoKG1hdCk7XG4gICAgICByZXQgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRyYW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gX2FwcGx5KHRyYW5baV0sIGRpbSAtIDEsIGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0ID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSBfYXBwbHkobWF0W2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuLyoqXG4gKiBUcmFuc3Bvc2UgYSBtYXRyaXhcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdFxuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc3dpdGNoKG1hdCkge1xuICB2YXIgSSA9IG1hdC5sZW5ndGg7XG4gIHZhciBKID0gbWF0WzBdLmxlbmd0aDtcbiAgdmFyIGksIGo7XG4gIHZhciByZXQgPSBbXTtcblxuICBmb3IgKGogPSAwOyBqIDwgSjsgaisrKSB7XG4gICAgdmFyIHRtcCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IEk7IGkrKykge1xuICAgICAgdG1wLnB1c2gobWF0W2ldW2pdKTtcbiAgICB9XG5cbiAgICByZXQucHVzaCh0bXApO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29sdW1uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdjb2x1bW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG52YXIgY3JlYXRlQ29sdW1uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIE1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jb2x1bW4odmFsdWUsIGluZGV4KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgY29sdW1uXG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5jb2x1bW4oZCwgMSkgLy8gcmV0dXJucyBbWzJdLCBbNF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcm93XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfSB2YWx1ZSAgIEFuIGFycmF5IG9yIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGNvbHVtblxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICBUaGUgcmV0cmlldmVkIGNvbHVtblxuICAgKi9cbiAgdmFyIGNvbHVtbiA9IHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBudW1iZXInOiBfY29sdW1uLFxuICAgICdBcnJheSwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXIodmFsdWUsIGNvbHVtbikge1xuICAgICAgcmV0dXJuIF9jb2x1bW4obWF0cml4KCgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSkpLCBjb2x1bW4pLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29sdW1uO1xuICAvKipcbiAgICogUmV0cmlldmUgYSBjb2x1bW4gb2YgYSBtYXRyaXhcbiAgICogQHBhcmFtIHtNYXRyaXggfSB2YWx1ZSAgQSBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiAgVGhlIGluZGV4IG9mIHRoZSBjb2x1bW5cbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIHJldHJpZXZlZCBjb2x1bW5cbiAgICovXG5cbiAgZnVuY3Rpb24gX2NvbHVtbih2YWx1ZSwgY29sdW1uKSB7XG4gICAgLy8gY2hlY2sgZGltZW5zaW9uc1xuICAgIGlmICh2YWx1ZS5zaXplKCkubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGNvbHVtbiwgdmFsdWUuc2l6ZSgpWzFdKTtcbiAgICB2YXIgcm93UmFuZ2UgPSByYW5nZSgwLCB2YWx1ZS5zaXplKClbMF0pO1xuICAgIHZhciBpbmRleCA9IG5ldyBJbmRleChyb3dSYW5nZSwgY29sdW1uKTtcbiAgICByZXR1cm4gdmFsdWUuc3Vic2V0KGluZGV4KTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtbiA9IGNyZWF0ZUNvbHVtbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uY2F0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29uY2F0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdpc0ludGVnZXInXTtcbnZhciBjcmVhdGVDb25jYXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcblxuICAvKipcbiAgICogQ29uY2F0ZW5hdGUgdHdvIG9yIG1vcmUgbWF0cmljZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLilcbiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLiwgZGltKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZGltOiBudW1iZXJgIGlzIGEgemVyby1iYXNlZCBkaW1lbnNpb24gb3ZlciB3aGljaCB0byBjb25jYXRlbmF0ZSB0aGUgbWF0cmljZXMuXG4gICAqICAgQnkgZGVmYXVsdCB0aGUgbGFzdCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpY2VzLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMl0sIFs1LCA2XV1cbiAgICogICAgY29uc3QgQiA9IFtbMywgNF0sIFs3LCA4XV1cbiAgICpcbiAgICogICAgbWF0aC5jb25jYXQoQSwgQikgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMiwgMywgNF0sIFs1LCA2LCA3LCA4XV1cbiAgICogICAgbWF0aC5jb25jYXQoQSwgQiwgMCkgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMl0sIFs1LCA2XSwgWzMsIDRdLCBbNywgOF1dXG4gICAqICAgIG1hdGguY29uY2F0KCdoZWxsbycsICcgJywgJ3dvcmxkJykgLy8gcmV0dXJucyAnaGVsbG8gd29ybGQnXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaXplLCBzcXVlZXplLCBzdWJzZXQsIHRyYW5zcG9zZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiBBcnJheSB8IE1hdHJpeH0gYXJncyAgICAgVHdvIG9yIG1vcmUgbWF0cmljZXNcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IENvbmNhdGVuYXRlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gVE9ETzogY2hhbmdlIHNpZ25hdHVyZSB0byAnLi4uQXJyYXkgfCBNYXRyaXgsIGRpbT8nIHdoZW4gc3VwcG9ydGVkXG4gICAgJy4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJncykge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgZGltID0gLTE7IC8vIHplcm8tYmFzZWQgZGltZW5zaW9uXG5cbiAgICAgIHZhciBwcmV2RGltO1xuICAgICAgdmFyIGFzTWF0cml4ID0gZmFsc2U7XG4gICAgICB2YXIgbWF0cmljZXMgPSBbXTsgLy8gY29udGFpbnMgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlzXG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJnc1tpXTsgLy8gdGVzdCB3aGV0aGVyIHdlIG5lZWQgdG8gcmV0dXJuIGEgTWF0cml4IChpZiBub3Qgd2UgcmV0dXJuIGFuIEFycmF5KVxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShhcmcpKSB7XG4gICAgICAgICAgYXNNYXRyaXggPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGFyZykgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoYXJnKSkge1xuICAgICAgICAgIGlmIChpICE9PSBsZW4gLSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpbWVuc2lvbiBtdXN0IGJlIHNwZWNpZmllZCBhcyBsYXN0IGFyZ3VtZW50Jyk7XG4gICAgICAgICAgfSAvLyBsYXN0IGFyZ3VtZW50IGNvbnRhaW5zIHRoZSBkaW1lbnNpb24gb24gd2hpY2ggdG8gY29uY2F0ZW5hdGVcblxuXG4gICAgICAgICAgcHJldkRpbSA9IGRpbTtcbiAgICAgICAgICBkaW0gPSBhcmcudmFsdWVPZigpOyAvLyBjaGFuZ2UgQmlnTnVtYmVyIHRvIG51bWJlclxuXG4gICAgICAgICAgaWYgKCFpc0ludGVnZXIoZGltKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW50ZWdlciBudW1iZXIgZXhwZWN0ZWQgZm9yIGRpbWVuc2lvbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaW0gPCAwIHx8IGkgPiAwICYmIGRpbSA+IHByZXZEaW0pIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHdvdWxkIGJlIG1vcmUgY2xlYXIgd2hlbiB0aHJvd2luZyBhIERpbWVuc2lvbkVycm9yIGhlcmVcbiAgICAgICAgICAgIHRocm93IG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGRpbSwgcHJldkRpbSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIGEgbWF0cml4IG9yIGFycmF5XG4gICAgICAgICAgdmFyIG0gPSAoMCwgX29iamVjdC5jbG9uZSkoYXJnKS52YWx1ZU9mKCk7XG4gICAgICAgICAgdmFyIHNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkobSk7XG4gICAgICAgICAgbWF0cmljZXNbaV0gPSBtO1xuICAgICAgICAgIHByZXZEaW0gPSBkaW07XG4gICAgICAgICAgZGltID0gc2l6ZS5sZW5ndGggLSAxOyAvLyB2ZXJpZnkgd2hldGhlciBlYWNoIG9mIHRoZSBtYXRyaWNlcyBoYXMgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnNcblxuICAgICAgICAgIGlmIChpID4gMCAmJiBkaW0gIT09IHByZXZEaW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IocHJldkRpbSArIDEsIGRpbSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0cmljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQXQgbGVhc3Qgb25lIG1hdHJpeCBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0gbWF0cmljZXMuc2hpZnQoKTtcblxuICAgICAgd2hpbGUgKG1hdHJpY2VzLmxlbmd0aCkge1xuICAgICAgICByZXMgPSBfY29uY2F0KHJlcywgbWF0cmljZXMuc2hpZnQoKSwgZGltLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFzTWF0cml4ID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICAnLi4uc3RyaW5nJzogZnVuY3Rpb24gc3RyaW5nKGFyZ3MpIHtcbiAgICAgIHJldHVybiBhcmdzLmpvaW4oJycpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogUmVjdXJzaXZlbHkgY29uY2F0ZW5hdGUgdHdvIG1hdHJpY2VzLlxuICogVGhlIGNvbnRlbnRzIG9mIHRoZSBtYXRyaWNlcyBpcyBub3QgY2xvbmVkLlxuICogQHBhcmFtIHtBcnJheX0gYSAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYiAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtudW1iZXJ9IGNvbmNhdERpbSAgICBUaGUgZGltZW5zaW9uIG9uIHdoaWNoIHRvIGNvbmNhdGVuYXRlICh6ZXJvLWJhc2VkKVxuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICBUaGUgY3VycmVudCBkaW0gKHplcm8tYmFzZWQpXG4gKiBAcmV0dXJuIHtBcnJheX0gYyAgICAgICAgICAgIFRoZSBjb25jYXRlbmF0ZWQgbWF0cml4XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29uY2F0ID0gY3JlYXRlQ29uY2F0O1xuXG5mdW5jdGlvbiBfY29uY2F0KGEsIGIsIGNvbmNhdERpbSwgZGltKSB7XG4gIGlmIChkaW0gPCBjb25jYXREaW0pIHtcbiAgICAvLyByZWN1cnNlIGludG8gbmV4dCBkaW1lbnNpb25cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgdmFyIGMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY1tpXSA9IF9jb25jYXQoYVtpXSwgYltpXSwgY29uY2F0RGltLCBkaW0gKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfSBlbHNlIHtcbiAgICAvLyBjb25jYXRlbmF0ZSB0aGlzIGRpbWVuc2lvblxuICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDcm9zcyA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Nyb3NzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZUNyb3NzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byB2ZWN0b3JzIGluIHRocmVlIGRpbWVuc2lvbmFsIHNwYWNlLlxuICAgKiBUaGUgY3Jvc3MgcHJvZHVjdCBvZiBgQSA9IFthMSwgYTIsIGEzXWAgYW5kIGBCID0gW2IxLCBiMiwgYjNdYCBpcyBkZWZpbmVkXG4gICAqIGFzOlxuICAgKlxuICAgKiAgICBjcm9zcyhBLCBCKSA9IFtcbiAgICogICAgICBhMiAqIGIzIC0gYTMgKiBiMixcbiAgICogICAgICBhMyAqIGIxIC0gYTEgKiBiMyxcbiAgICogICAgICBhMSAqIGIyIC0gYTIgKiBiMVxuICAgKiAgICBdXG4gICAqXG4gICAqIElmIG9uZSBvZiB0aGUgaW5wdXQgdmVjdG9ycyBoYXMgYSBkaW1lbnNpb24gZ3JlYXRlciB0aGFuIDEsIHRoZSBvdXRwdXRcbiAgICogdmVjdG9yIHdpbGwgYmUgYSAxeDMgKDItZGltZW5zaW9uYWwpIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNyb3NzKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNyb3NzKFsxLCAxLCAwXSwgICBbMCwgMSwgMV0pICAgICAgIC8vIFJldHVybnMgWzEsIC0xLCAxXVxuICAgKiAgICBtYXRoLmNyb3NzKFszLCAtMywgMV0sICBbNCwgOSwgMl0pICAgICAgIC8vIFJldHVybnMgWy0xNSwgLTIsIDM5XVxuICAgKiAgICBtYXRoLmNyb3NzKFsyLCAzLCA0XSwgICBbNSwgNiwgN10pICAgICAgIC8vIFJldHVybnMgWy0zLCA2LCAtM11cbiAgICogICAgbWF0aC5jcm9zcyhbWzEsIDIsIDNdXSwgW1s0XSwgWzVdLCBbNl1dKSAvLyBSZXR1cm5zIFtbLTMsIDYsIC0zXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGRvdCwgbXVsdGlwbHlcbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHggICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIG1hdHJpeChfY3Jvc3MoeC50b0FycmF5KCksIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgudG9BcnJheSgpLCB5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgsIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogX2Nyb3NzXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjcm9zcyBwcm9kdWN0IGZvciB0d28gYXJyYXlzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHggIEZpcnN0IHZlY3RvclxuICAgKiBAcGFyYW0ge0FycmF5fSB5ICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB4IGFuZCB5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jcm9zcyh4LCB5KSB7XG4gICAgdmFyIGhpZ2hlc3REaW1lbnNpb24gPSBNYXRoLm1heCgoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCkubGVuZ3RoLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeSkubGVuZ3RoKTtcbiAgICB4ID0gKDAsIF9hcnJheS5zcXVlZXplKSh4KTtcbiAgICB5ID0gKDAsIF9hcnJheS5zcXVlZXplKSh5KTtcbiAgICB2YXIgeFNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG4gICAgdmFyIHlTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHkpO1xuXG4gICAgaWYgKHhTaXplLmxlbmd0aCAhPT0gMSB8fCB5U2l6ZS5sZW5ndGggIT09IDEgfHwgeFNpemVbMF0gIT09IDMgfHwgeVNpemVbMF0gIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZWN0b3JzIHdpdGggbGVuZ3RoIDMgZXhwZWN0ZWQgJyArICcoU2l6ZSBBID0gWycgKyB4U2l6ZS5qb2luKCcsICcpICsgJ10sIEIgPSBbJyArIHlTaXplLmpvaW4oJywgJykgKyAnXSknKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvZHVjdCA9IFtzdWJ0cmFjdChtdWx0aXBseSh4WzFdLCB5WzJdKSwgbXVsdGlwbHkoeFsyXSwgeVsxXSkpLCBzdWJ0cmFjdChtdWx0aXBseSh4WzJdLCB5WzBdKSwgbXVsdGlwbHkoeFswXSwgeVsyXSkpLCBzdWJ0cmFjdChtdWx0aXBseSh4WzBdLCB5WzFdKSwgbXVsdGlwbHkoeFsxXSwgeVswXSkpXTtcblxuICAgIGlmIChoaWdoZXN0RGltZW5zaW9uID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm9kdWN0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByb2R1Y3Q7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3Jvc3MgPSBjcmVhdGVDcm9zczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3RyYW5zcG9zZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2N0cmFuc3Bvc2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAndHJhbnNwb3NlJywgJ2NvbmonXTtcbnZhciBjcmVhdGVDdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlLFxuICAgICAgY29uaiA9IF9yZWYuY29uajtcblxuICAvKipcbiAgICogVHJhbnNwb3NlIGFuZCBjb21wbGV4IGNvbmp1Z2F0ZSBhIG1hdHJpeC4gQWxsIHZhbHVlcyBvZiB0aGUgbWF0cml4IGFyZVxuICAgKiByZWZsZWN0ZWQgb3ZlciBpdHMgbWFpbiBkaWFnb25hbCBhbmQgdGhlbiB0aGUgY29tcGxleCBjb25qdWdhdGUgaXNcbiAgICogdGFrZW4uIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjb21wbGV4IGNvbmp1Z2F0aW9uIGZvciBzY2FsYXJzIGFuZFxuICAgKiB2ZWN0b3JzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmN0cmFuc3Bvc2UoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIG1hdGguY29tcGxleCg2LDcpXV1cbiAgICogICAgIG1hdGguY3RyYW5zcG9zZShBKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCA0XSwgWzIsIDVdLCBbMywge3JlOjYsaW06N31dXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHRyYW5zcG9zZSwgZGlhZywgaW52LCBzdWJzZXQsIHNxdWVlemVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgTWF0cml4IHRvIGJlIGN0cmFuc3Bvc2VkXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgIFRoZSBjdHJhbnNwb3NlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgcmV0dXJuIGNvbmoodHJhbnNwb3NlKHgpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUN0cmFuc3Bvc2UgPSBjcmVhdGVDdHJhbnNwb3NlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXQgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGV0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICd1bmFyeU1pbnVzJywgJ2x1cCddO1xudmFyIGNyZWF0ZURldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHVuYXJ5TWludXMgPSBfcmVmLnVuYXJ5TWludXMsXG4gICAgICBsdXAgPSBfcmVmLmx1cDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRldCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kZXQoW1sxLCAyXSwgWzMsIDRdXSkgLy8gcmV0dXJucyAtMlxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1xuICAgKiAgICAgIFstMiwgMiwgM10sXG4gICAqICAgICAgWy0xLCAxLCAzXSxcbiAgICogICAgICBbMiwgMCwgLTFdXG4gICAqICAgIF1cbiAgICogICAgbWF0aC5kZXQoQSkgLy8gcmV0dXJucyA2XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpbnZcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgQSBtYXRyaXhcbiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGV0ZXJtaW5hbnQgb2YgYHhgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBkZXQoeCkge1xuICAgICAgdmFyIHNpemU7XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICBzaXplID0geC5zaXplKCk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgICAgeCA9IG1hdHJpeCh4KTtcbiAgICAgICAgc2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYSBzY2FsYXJcbiAgICAgICAgc2l6ZSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAvLyBzY2FsYXJcbiAgICAgICAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHgpO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4LnZhbHVlT2YoKVswXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsIGFycmF5XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGV0KHguY2xvbmUoKS52YWx1ZU9mKCksIHJvd3MsIGNvbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5W119IG1hdHJpeCAgQSBzcXVhcmUsIHR3byBkaW1lbnNpb25hbCBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgICAgIE51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXggKHplcm8tYmFzZWQpXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xzICAgICBOdW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4ICh6ZXJvLWJhc2VkKVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBkZXRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2RldChtYXRyaXgsIHJvd3MsIGNvbHMpIHtcbiAgICBpZiAocm93cyA9PT0gMSkge1xuICAgICAgLy8gdGhpcyBpcyBhIDEgeCAxIG1hdHJpeFxuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKShtYXRyaXhbMF1bMF0pO1xuICAgIH0gZWxzZSBpZiAocm93cyA9PT0gMikge1xuICAgICAgLy8gdGhpcyBpcyBhIDIgeCAyIG1hdHJpeFxuICAgICAgLy8gdGhlIGRldGVybWluYW50IG9mIFthMTEsYTEyO2EyMSxhMjJdIGlzIGRldCA9IGExMSphMjItYTIxKmExMlxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG11bHRpcGx5KG1hdHJpeFswXVswXSwgbWF0cml4WzFdWzFdKSwgbXVsdGlwbHkobWF0cml4WzFdWzBdLCBtYXRyaXhbMF1bMV0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgTFUgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGRlY29tcCA9IGx1cChtYXRyaXgpOyAvLyBUaGUgZGV0ZXJtaW5hbnQgaXMgdGhlIHByb2R1Y3Qgb2YgdGhlIGRpYWdvbmFsIGVudHJpZXMgb2YgVSAoYW5kIHRob3NlIG9mIEwsIGJ1dCB0aGV5IGFyZSBhbGwgMSlcblxuICAgICAgdmFyIGRldCA9IGRlY29tcC5VWzBdWzBdO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgcm93czsgX2krKykge1xuICAgICAgICBkZXQgPSBtdWx0aXBseShkZXQsIGRlY29tcC5VW19pXVtfaV0pO1xuICAgICAgfSAvLyBUaGUgZGV0ZXJtaW5hbnQgd2lsbCBiZSBtdWx0aXBsaWVkIGJ5IDEgb3IgLTEgZGVwZW5kaW5nIG9uIHRoZSBwYXJpdHkgb2YgdGhlIHBlcm11dGF0aW9uIG1hdHJpeC5cbiAgICAgIC8vIFRoaXMgY2FuIGJlIGRldGVybWluZWQgYnkgY291bnRpbmcgdGhlIGN5Y2xlcy4gVGhpcyBpcyByb3VnaGx5IGEgbGluZWFyIHRpbWUgYWxnb3JpdGhtLlxuXG5cbiAgICAgIHZhciBldmVuQ3ljbGVzID0gMDtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciB2aXNpdGVkID0gW107XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHdoaWxlICh2aXNpdGVkW2ldKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPj0gcm93cykgYnJlYWs7XG4gICAgICAgIHZhciBqID0gaTtcbiAgICAgICAgdmFyIGN5Y2xlTGVuID0gMDtcblxuICAgICAgICB3aGlsZSAoIXZpc2l0ZWRbZGVjb21wLnBbal1dKSB7XG4gICAgICAgICAgdmlzaXRlZFtkZWNvbXAucFtqXV0gPSB0cnVlO1xuICAgICAgICAgIGogPSBkZWNvbXAucFtqXTtcbiAgICAgICAgICBjeWNsZUxlbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN5Y2xlTGVuICUgMiA9PT0gMCkge1xuICAgICAgICAgIGV2ZW5DeWNsZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbkN5Y2xlcyAlIDIgPT09IDAgPyBkZXQgOiB1bmFyeU1pbnVzKGRldCk7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGV0ID0gY3JlYXRlRGV0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaWFnID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkaWFnJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCcsICdTcGFyc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEaWFnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXhcbiAgICpcbiAgICogV2hlbiBgeGAgaXMgYSB2ZWN0b3IsIGEgbWF0cml4IHdpdGggdmVjdG9yIGB4YCBvbiB0aGUgZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogV2hlbiBgeGAgaXMgYSB0d28gZGltZW5zaW9uYWwgbWF0cml4LCB0aGUgbWF0cml4ZXMgYGtgdGggZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZCBhcyB2ZWN0b3IuXG4gICAqIFdoZW4gayBpcyBwb3NpdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdXBlciBkaWFnb25hbC5cbiAgICogV2hlbiBrIGlzIG5lZ2F0aXZlLCB0aGUgdmFsdWVzIGFyZSBwbGFjZWQgb24gdGhlIHN1YiBkaWFnb25hbC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5kaWFnKFgpXG4gICAqICAgICBtYXRoLmRpYWcoWCwgZm9ybWF0KVxuICAgKiAgICAgbWF0aC5kaWFnKFgsIGspXG4gICAqICAgICBtYXRoLmRpYWcoWCwgaywgZm9ybWF0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIC8vIGNyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeFxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSkgICAgICAvLyByZXR1cm5zIFtbMSwgMCwgMF0sIFswLCAyLCAwXSwgWzAsIDAsIDNdXVxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgMSkgICAvLyByZXR1cm5zIFtbMCwgMSwgMCwgMF0sIFswLCAwLCAyLCAwXSwgWzAsIDAsIDAsIDNdXVxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgLTEpICAvLyByZXR1cm5zIFtbMCwgMCwgMF0sIFsxLCAwLCAwXSwgWzAsIDIsIDBdLCBbMCwgMCwgM11dXG4gICAqXG4gICAqICAgIC8vIHJldHJpZXZlIHRoZSBkaWFnb25hbCBmcm9tIGEgbWF0cml4XG4gICAqICAgIGNvbnN0IGEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl0sIFs3LCA4LCA5XV1cbiAgICogICAgbWF0aC5kaWFnKGEpICAgLy8gcmV0dXJucyBbMSwgNSwgOV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBvbmVzLCB6ZXJvcywgaWRlbnRpdHlcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgICAgICBBIHR3byBkaW1lbnNpb25hbCBtYXRyaXggb3IgYSB2ZWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICBUaGUgZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yIHJldHJpZXZlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXQ9J2RlbnNlJ10gICBUaGUgbWF0cml4IHN0b3JhZ2UgZm9ybWF0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWF0cml4IHwgQXJyYXl9IERpYWdvbmFsIG1hdHJpeCBmcm9tIGlucHV0IHZlY3Rvciwgb3IgZGlhZ29uYWwgZnJvbSBpbnB1dCBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIEZJWE1FOiBzaW1wbGlmeSB0aGlzIGh1Z2UgYW1vdW50IG9mIHNpZ25hdHVyZXMgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyBvcHRpb25hbCBhcmd1bWVudHNcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KSwgbnVsbCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHgsIGspIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCBrLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheUJpZ051bWJlcih4LCBrKSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheVN0cmluZyh4LCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIGZvcm1hdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgaywgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBCaWdOdW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5QmlnTnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBNYXRyaXhOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIE1hdHJpeFN0cmluZyh4LCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssIHguc2l6ZSgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQmlnTnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ3JlZWF0ZSBkaWFnb25hbCBtYXRyaXggZnJvbSBhIHZlY3RvciBvciB2aWNlIHZlcnNhXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBTdG9yYWdlIGZvcm1hdCBmb3IgbWF0cml4LiBJZiBudWxsLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gQXJyYXkgaXMgcmV0dXJuZWRcbiAgICogQHJldHVybnMge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfZGlhZyh4LCBrLCBzaXplLCBmb3JtYXQpIHtcbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NlY29uZCBwYXJhbWV0ZXIgaW4gZnVuY3Rpb24gZGlhZyBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICB9XG5cbiAgICB2YXIga1N1cGVyID0gayA+IDAgPyBrIDogMDtcbiAgICB2YXIga1N1YiA9IGsgPCAwID8gLWsgOiAwOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfY3JlYXRlRGlhZ29uYWxNYXRyaXgoeCwgaywgZm9ybWF0LCBzaXplWzBdLCBrU3ViLCBrU3VwZXIpO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBfZ2V0RGlhZ29uYWwoeCwgaywgZm9ybWF0LCBzaXplLCBrU3ViLCBrU3VwZXIpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggZm9yIGZ1bmN0aW9uIGRpYWcgbXVzdCBiZSAyIGRpbWVuc2lvbmFsJyk7XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRGlhZ29uYWxNYXRyaXgoeCwgaywgZm9ybWF0LCBsLCBrU3ViLCBrU3VwZXIpIHtcbiAgICAvLyBtYXRyaXggc2l6ZVxuICAgIHZhciBtcyA9IFtsICsga1N1YiwgbCArIGtTdXBlcl07XG5cbiAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdCAhPT0gJ3NwYXJzZScgJiYgZm9ybWF0ICE9PSAnZGVuc2UnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBtYXRyaXggdHlwZSBcIi5jb25jYXQoZm9ybWF0LCBcIlxcXCJcIikpO1xuICAgIH0gLy8gY3JlYXRlIGRpYWdvbmFsIG1hdHJpeFxuXG5cbiAgICB2YXIgbSA9IGZvcm1hdCA9PT0gJ3NwYXJzZScgPyBTcGFyc2VNYXRyaXguZGlhZ29uYWwobXMsIHgsIGspIDogRGVuc2VNYXRyaXguZGlhZ29uYWwobXMsIHgsIGspOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG4gICAgcmV0dXJuIGZvcm1hdCAhPT0gbnVsbCA/IG0gOiBtLnZhbHVlT2YoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9nZXREaWFnb25hbCh4LCBrLCBmb3JtYXQsIHMsIGtTdWIsIGtTdXBlcikge1xuICAgIC8vIGNoZWNrIHggaXMgYSBNYXRyaXhcbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgIC8vIGdldCBkaWFnb25hbCBtYXRyaXhcbiAgICAgIHZhciBkbSA9IHguZGlhZ29uYWwoayk7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcmV0dXJuIGEgbWF0cml4XG5cbiAgICAgIGlmIChmb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gY2hlY2sgd2UgbmVlZCB0byBjaGFuZ2UgbWF0cml4IGZvcm1hdFxuICAgICAgICBpZiAoZm9ybWF0ICE9PSBkbS5zdG9yYWdlKCkpIHtcbiAgICAgICAgICByZXR1cm4gbWF0cml4KGRtLCBmb3JtYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG0udmFsdWVPZigpO1xuICAgIH0gLy8gdmVjdG9yIHNpemVcblxuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihzWzBdIC0ga1N1Yiwgc1sxXSAtIGtTdXBlcik7IC8vIGRpYWdvbmFsIHZhbHVlc1xuXG4gICAgdmFyIHZlY3RvciA9IFtdOyAvLyBsb29wIGRpYWdvbmFsXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmVjdG9yW2ldID0geFtpICsga1N1Yl1baSArIGtTdXBlcl07XG4gICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gZm9ybWF0ICE9PSBudWxsID8gbWF0cml4KHZlY3RvcikgOiB2ZWN0b3I7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEaWFnID0gY3JlYXRlRGlhZzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRG90ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZG90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZURvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjdG9ycy4gVGhlIGRvdCBwcm9kdWN0IG9mXG4gICAqIGBBID0gW2ExLCBhMiwgYTMsIC4uLiwgYW5dYCBhbmQgYEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl1gIGlzIGRlZmluZWQgYXM6XG4gICAqXG4gICAqICAgIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kb3QoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDE1XG4gICAqICAgIG1hdGgubXVsdGlwbHkoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAvLyByZXR1cm5zIG51bWJlciAxNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIGNyb3NzXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICAgIFNlY29uZCB2ZWN0b3JcbiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LnRvQXJyYXkoKSwgeS50b0FycmF5KCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LnRvQXJyYXkoKSwgeSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBfZG90KHgsIHkudG9BcnJheSgpKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBfZG90XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBmb3IgdHdvIGFycmF5c1xuICAgKiBAcGFyYW0ge0FycmF5fSB4ICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtIHtBcnJheX0geSAgU2Vjb25kIHZlY3RvclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCBvZiB4IGFuZCB5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAvLyBUT0RPOiBkb3VibGUgY29kZSB3aXRoIG1hdGgubXVsdGlwbHlcblxuICBmdW5jdGlvbiBfZG90KHgsIHkpIHtcbiAgICB2YXIgeFNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG4gICAgdmFyIHlTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHkpO1xuICAgIHZhciBsZW4gPSB4U2l6ZVswXTtcbiAgICBpZiAoeFNpemUubGVuZ3RoICE9PSAxIHx8IHlTaXplLmxlbmd0aCAhPT0gMSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvciBleHBlY3RlZCcpOyAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZVxuXG4gICAgaWYgKHhTaXplWzBdICE9PSB5U2l6ZVswXSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgbXVzdCBoYXZlIGVxdWFsIGxlbmd0aCAoJyArIHhTaXplWzBdICsgJyAhPSAnICsgeVNpemVbMF0gKyAnKScpO1xuICAgIGlmIChsZW4gPT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiBlbXB0eSB2ZWN0b3JzJyk7XG4gICAgdmFyIHByb2QgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgcHJvZCA9IGFkZChwcm9kLCBtdWx0aXBseSh4W2ldLCB5W2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Q7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3QgPSBjcmVhdGVEb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUVpZ3MgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIG5hbWUgPSAnZWlncyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnbWF0cml4JywgJ2FkZFNjYWxhcicsICdlcXVhbCcsICdzdWJ0cmFjdCcsICdhYnMnLCAnYXRhbicsICdjb3MnLCAnc2luJywgJ211bHRpcGx5U2NhbGFyJywgJ2ludicsICdiaWdudW1iZXInLCAnbXVsdGlwbHknLCAnYWRkJ107XG52YXIgY3JlYXRlRWlncyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGF0YW4gPSBfcmVmLmF0YW4sXG4gICAgICBjb3MgPSBfcmVmLmNvcyxcbiAgICAgIHNpbiA9IF9yZWYuc2luLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGFkZCA9IF9yZWYuYWRkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIGVpZ2VudmFsdWUgYW5kIGVpZ2VudmVjdG9yIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4LlxuICAgKiBPbmx5IGFwcGxpY2FibGUgdG8gdHdvIGRpbWVuc2lvbmFsIHN5bW1ldHJpYyBtYXRyaWNlcy4gVXNlcyBKYWNvYmlcbiAgICogQWxnb3JpdGhtLiBNYXRyaXggY29udGFpbmluZyBtaXhlZCB0eXBlICgnbnVtYmVyJywgJ2JpZ251bWJlcicsICdmcmFjdGlvbicpXG4gICAqIG9mIGVsZW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLiBJbnB1dCBtYXRyaXggb3IgMkQgYXJyYXkgc2hvdWxkIGNvbnRhaW4gYWxsIGVsZW1lbnRzXG4gICAqIG9mIGVpdGhlciAnbnVtYmVyJywgJ2JpZ251bWJlcicgb3IgJ2ZyYWN0aW9uJyB0eXBlLiBGb3IgJ251bWJlcicgYW5kICdmcmFjdGlvbicsIHRoZVxuICAgKiBlaWdlbnZhbHVlcyBhcmUgb2YgJ251bWJlcicgdHlwZS4gRm9yICdiaWdudW1iZXInIHRoZSBlaWdlbnZhbHVlcyBhcmUgb2YgJydiaWdudW1iZXInIHR5cGUuXG4gICAqIEVpZ2VudmVjdG9ycyBhcmUgYWx3YXlzIG9mICdudW1iZXInIHR5cGUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguZWlncyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IEggPSBbWzUsIDIuM10sIFsyLjMsIDFdXVxuICAgKiAgICAgY29uc3QgYW5zID0gbWF0aC5laWdzKEgpIC8vIHJldHVybnMge3ZhbHVlczogW0UxLEUyLi4uc29ydGVkXSwgdmVjdG9yczogW3YxLHYyLi4uLiBjb3JyZXNwb25kaW5nIHZlY3RvcnNdfVxuICAgKiAgICAgY29uc3QgRSA9IGFucy52YWx1ZXNcbiAgICogICAgIGNvbnN0IFUgPSBhbnMudmVjdG9yc1xuICAgKiAgICAgY29uc3QgVVR4SHhVID0gbWF0aC5tdWx0aXBseShtYXRoLnRyYW5zcG9zZShVKSwgSCwgVSkgLy8gcm90YXRlcyBIIHRvIHRoZSBlaWdlbi1yZXByZXNlbnRhdGlvblxuICAgKiAgICAgRVswXSA9PSBVVHhIeFVbMF1bMF0gIC8vIHJldHVybnMgdHJ1ZVxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGludlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgZGlhZ29uYWxpemVkXG4gICAqIEByZXR1cm4ge3t2YWx1ZXM6IEFycmF5LCB2ZWN0b3JzOiBBcnJheX0gfCB7dmFsdWVzOiBNYXRyaXgsIHZlY3RvcnM6IE1hdHJpeH19IE9iamVjdCBjb250YWluaW5nIGVpZ2VudmFsdWVzIChBcnJheSBvciBNYXRyaXgpIGFuZCBlaWdlbnZlY3RvcnMgKDJEIEFycmF5L01hdHJpeCkuXG4gICAqL1xuICB2YXIgZWlncyA9IHR5cGVkKCdlaWdzJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICAvLyBjaGVjayBhcnJheSBzaXplXG4gICAgICB2YXIgbWF0ID0gbWF0cml4KHgpO1xuICAgICAgdmFyIHNpemUgPSBtYXQuc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH0gLy8gdXNlIGRlbnNlIDJEIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICAgIHZhciBhbnMgPSBjaGVja0FuZFN1Ym1pdChtYXQsIHNpemVbMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBhbnNbMF0sXG4gICAgICAgIHZlY3RvcnM6IGFuc1sxXVxuICAgICAgfTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIC8vIHVzZSBkZW5zZSAyRCBhcnJheSBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gZGVuc2UgbWF0cml4XG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFucyA9IGNoZWNrQW5kU3VibWl0KHgsIHNpemVbMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBtYXRyaXgoYW5zWzBdKSxcbiAgICAgICAgdmVjdG9yczogbWF0cml4KGFuc1sxXSlcbiAgICAgIH07XG4gICAgfVxuICB9KTsgLy8gSXMgdGhlIG1hdHJpeFxuICAvLyBzeW1tZXRyaWMgP1xuXG4gIGZ1bmN0aW9uIGlzU3ltbWV0cmljKHgsIG4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBuOyBqKyspIHtcbiAgICAgICAgLy8gbm90IHN5bW10cmljXG4gICAgICAgIGlmICghZXF1YWwoeFtpXVtqXSwgeFtqXVtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBtYXRyaXggaXMgbm90IHN5bW1ldHJpYycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGNoZWNrIGlucHV0IGZvciBwb3NzaWJsZSBwcm9ibGVtc1xuICAvLyBhbmQgcGVyZm9ybSBkaWFnb25hbGl6YXRpb24gZWZmaWNpZW50bHkgZm9yXG4gIC8vIHNwZWNpZmljIHR5cGUgb2YgbnVtYmVyXG5cblxuICBmdW5jdGlvbiBjaGVja0FuZFN1Ym1pdCh4LCBuKSB7XG4gICAgdmFyIHR5cGUgPSB4LmRhdGF0eXBlKCk7IC8vIHR5cGUgY2hlY2tcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSB4LmdldERhdGFUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgIT09ICdudW1iZXInICYmIHR5cGUgIT09ICdCaWdOdW1iZXInICYmIHR5cGUgIT09ICdGcmFjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlID09PSAnbWl4ZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01peGVkIG1hdHJpeCBlbGVtZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWF0cml4IGVsZW1lbnQgdHlwZSBub3Qgc3VwcG9ydGVkICgnICsgdHlwZSArICcpJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzU3ltbWV0cmljKHgudG9BcnJheSgpLCBuKTtcbiAgICB9IC8vIHBlcmZvcm0gZWZmaWNpZW50IGNhbGN1bGF0aW9uIGZvciAnbnVtYmVycydcblxuXG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGlhZyh4LnRvQXJyYXkoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnRnJhY3Rpb24nKSB7XG4gICAgICB2YXIgeEFyciA9IHgudG9BcnJheSgpOyAvLyBjb252ZXJ0IGZyYWN0aW9uIHRvIG51bWJlcnNcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICB4QXJyW2ldW2pdID0geEFycltpXVtqXS52YWx1ZU9mKCk7XG4gICAgICAgICAgeEFycltqXVtpXSA9IHhBcnJbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpYWcoeC50b0FycmF5KCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0JpZ051bWJlcicpIHtcbiAgICAgIHJldHVybiBkaWFnQmlnKHgudG9BcnJheSgpKTtcbiAgICB9XG4gIH0gLy8gZGlhZ29uYWxpemF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgKGVmZmljaWVudClcblxuXG4gIGZ1bmN0aW9uIGRpYWcoeCkge1xuICAgIHZhciBOID0geC5sZW5ndGg7XG4gICAgdmFyIGUwID0gTWF0aC5hYnMoY29uZmlnLmVwc2lsb24gLyBOKTtcbiAgICB2YXIgcHNpO1xuICAgIHZhciBTaWogPSBuZXcgQXJyYXkoTik7IC8vIFNpaiBpcyBJZGVudGl0eSBNYXRyaXhcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBTaWpbaV0gPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICAgIFNpaltpXVtpXSA9IDEuMDtcbiAgICB9IC8vIGluaXRpYWwgZXJyb3JcblxuXG4gICAgdmFyIFZhYiA9IGdldEFpaih4KTtcblxuICAgIHdoaWxlIChNYXRoLmFicyhWYWJbMV0pID49IE1hdGguYWJzKGUwKSkge1xuICAgICAgdmFyIF9pID0gVmFiWzBdWzBdO1xuICAgICAgdmFyIGogPSBWYWJbMF1bMV07XG4gICAgICBwc2kgPSBnZXRUaGV0YSh4W19pXVtfaV0sIHhbal1bal0sIHhbX2ldW2pdKTtcbiAgICAgIHggPSB4MSh4LCBwc2ksIF9pLCBqKTtcbiAgICAgIFNpaiA9IFNpajEoU2lqLCBwc2ksIF9pLCBqKTtcbiAgICAgIFZhYiA9IGdldEFpaih4KTtcbiAgICB9XG5cbiAgICB2YXIgRWkgPSBjcmVhdGVBcnJheShOLCAwKTsgLy8gZWlnZW52YWx1ZXNcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IE47IF9pMisrKSB7XG4gICAgICBFaVtfaTJdID0geFtfaTJdW19pMl07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRpbmcoKDAsIF9vYmplY3QuY2xvbmUpKEVpKSwgKDAsIF9vYmplY3QuY2xvbmUpKFNpaikpO1xuICB9IC8vIGRpYWdvbmFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgYmlnTnVtYmVyXG5cblxuICBmdW5jdGlvbiBkaWFnQmlnKHgpIHtcbiAgICB2YXIgTiA9IHgubGVuZ3RoO1xuICAgIHZhciBlMCA9IGFicyhjb25maWcuZXBzaWxvbiAvIE4pO1xuICAgIHZhciBwc2k7XG4gICAgdmFyIFNpaiA9IG5ldyBBcnJheShOKTsgLy8gU2lqIGlzIElkZW50aXR5IE1hdHJpeFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIFNpaltpXSA9IGNyZWF0ZUFycmF5KE4sIDApO1xuICAgICAgU2lqW2ldW2ldID0gMS4wO1xuICAgIH0gLy8gaW5pdGlhbCBlcnJvclxuXG5cbiAgICB2YXIgVmFiID0gZ2V0QWlqQmlnKHgpO1xuXG4gICAgd2hpbGUgKGFicyhWYWJbMV0pID49IGFicyhlMCkpIHtcbiAgICAgIHZhciBfaTMgPSBWYWJbMF1bMF07XG4gICAgICB2YXIgaiA9IFZhYlswXVsxXTtcbiAgICAgIHBzaSA9IGdldFRoZXRhQmlnKHhbX2kzXVtfaTNdLCB4W2pdW2pdLCB4W19pM11bal0pO1xuICAgICAgeCA9IHgxQmlnKHgsIHBzaSwgX2kzLCBqKTtcbiAgICAgIFNpaiA9IFNpajFCaWcoU2lqLCBwc2ksIF9pMywgaik7XG4gICAgICBWYWIgPSBnZXRBaWpCaWcoeCk7XG4gICAgfVxuXG4gICAgdmFyIEVpID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vIGVpZ2VudmFsdWVzXG5cbiAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBOOyBfaTQrKykge1xuICAgICAgRWlbX2k0XSA9IHhbX2k0XVtfaTRdO1xuICAgIH0gLy8gcmV0dXJuIFtjbG9uZShFaSksIGNsb25lKFNpaildXG5cblxuICAgIHJldHVybiBzb3J0aW5nKCgwLCBfb2JqZWN0LmNsb25lKShFaSksICgwLCBfb2JqZWN0LmNsb25lKShTaWopKTtcbiAgfSAvLyBnZXQgYW5nbGVcblxuXG4gIGZ1bmN0aW9uIGdldFRoZXRhKGFpaSwgYWpqLCBhaWopIHtcbiAgICB2YXIgZGVub20gPSBhamogLSBhaWk7XG5cbiAgICBpZiAoTWF0aC5hYnMoZGVub20pIDw9IGNvbmZpZy5lcHNpbG9uKSB7XG4gICAgICByZXR1cm4gTWF0aC5QSSAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwLjUgKiBNYXRoLmF0YW4oMiAqIGFpaiAvIChhamogLSBhaWkpKTtcbiAgICB9XG4gIH0gLy8gZ2V0IGFuZ2xlXG5cblxuICBmdW5jdGlvbiBnZXRUaGV0YUJpZyhhaWksIGFqaiwgYWlqKSB7XG4gICAgdmFyIGRlbm9tID0gc3VidHJhY3QoYWpqLCBhaWkpO1xuXG4gICAgaWYgKGFicyhkZW5vbSkgPD0gY29uZmlnLmVwc2lsb24pIHtcbiAgICAgIHJldHVybiBiaWdudW1iZXIoLTEpLmFjb3MoKS5kaXYoNCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcigwLjUsIGF0YW4obXVsdGlwbHkoMiwgYWlqLCBpbnYoZGVub20pKSkpO1xuICAgIH1cbiAgfSAvLyB1cGRhdGUgZWlndmVjXG5cblxuICBmdW5jdGlvbiBTaWoxKFNpaiwgdGhldGEsIGksIGopIHtcbiAgICB2YXIgTiA9IFNpai5sZW5ndGg7XG4gICAgdmFyIGMgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHMgPSBNYXRoLnNpbih0aGV0YSk7XG4gICAgdmFyIFNraSA9IGNyZWF0ZUFycmF5KE4sIDApO1xuICAgIHZhciBTa2ogPSBjcmVhdGVBcnJheShOLCAwKTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgTjsgaysrKSB7XG4gICAgICBTa2lba10gPSBjICogU2lqW2tdW2ldIC0gcyAqIFNpaltrXVtqXTtcbiAgICAgIFNraltrXSA9IHMgKiBTaWpba11baV0gKyBjICogU2lqW2tdW2pdO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBOOyBfaysrKSB7XG4gICAgICBTaWpbX2tdW2ldID0gU2tpW19rXTtcbiAgICAgIFNpaltfa11bal0gPSBTa2pbX2tdO1xuICAgIH1cblxuICAgIHJldHVybiBTaWo7XG4gIH0gLy8gdXBkYXRlIGVpZ3ZlYyBmb3Igb3ZlcmxhcFxuXG5cbiAgZnVuY3Rpb24gU2lqMUJpZyhTaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBTaWoubGVuZ3RoO1xuICAgIHZhciBjID0gY29zKHRoZXRhKTtcbiAgICB2YXIgcyA9IHNpbih0aGV0YSk7XG4gICAgdmFyIFNraSA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG4gICAgdmFyIFNraiA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2tpW2tdID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYywgU2lqW2tdW2ldKSwgbXVsdGlwbHlTY2FsYXIocywgU2lqW2tdW2pdKSk7XG4gICAgICBTa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgU2lqW2tdW2ldKSwgbXVsdGlwbHlTY2FsYXIoYywgU2lqW2tdW2pdKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2syID0gMDsgX2syIDwgTjsgX2syKyspIHtcbiAgICAgIFNpaltfazJdW2ldID0gU2tpW19rMl07XG4gICAgICBTaWpbX2syXVtqXSA9IFNraltfazJdO1xuICAgIH1cblxuICAgIHJldHVybiBTaWo7XG4gIH0gLy8gdXBkYXRlIG1hdHJpeFxuXG5cbiAgZnVuY3Rpb24geDFCaWcoSGlqLCB0aGV0YSwgaSwgaikge1xuICAgIHZhciBOID0gSGlqLmxlbmd0aDtcbiAgICB2YXIgYyA9IGJpZ251bWJlcihjb3ModGhldGEpKTtcbiAgICB2YXIgcyA9IGJpZ251bWJlcihzaW4odGhldGEpKTtcbiAgICB2YXIgYzIgPSBtdWx0aXBseVNjYWxhcihjLCBjKTtcbiAgICB2YXIgczIgPSBtdWx0aXBseVNjYWxhcihzLCBzKTtcbiAgICB2YXIgQWtpID0gY3JlYXRlQXJyYXkoTiwgYmlnbnVtYmVyKDApKTtcbiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgYmlnbnVtYmVyKDApKTsgLy8gMmNzIEhpalxuXG4gICAgdmFyIGNzSGlqID0gbXVsdGlwbHkoYmlnbnVtYmVyKDIpLCBjLCBzLCBIaWpbaV1bal0pOyAvLyAgQWlpXG5cbiAgICB2YXIgQWlpID0gYWRkU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGMyLCBIaWpbaV1baV0pLCBjc0hpaiksIG11bHRpcGx5U2NhbGFyKHMyLCBIaWpbal1bal0pKTtcbiAgICB2YXIgQWpqID0gYWRkKG11bHRpcGx5U2NhbGFyKHMyLCBIaWpbaV1baV0pLCBjc0hpaiwgbXVsdGlwbHlTY2FsYXIoYzIsIEhpaltqXVtqXSkpOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgQWtpW2tdID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIocywgSGlqW2pdW2tdKSk7XG4gICAgICBBa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIoYywgSGlqW2pdW2tdKSk7XG4gICAgfSAvLyBNb2RpZnkgSGlqXG5cblxuICAgIEhpaltpXVtpXSA9IEFpaTtcbiAgICBIaWpbal1bal0gPSBBamo7XG4gICAgSGlqW2ldW2pdID0gYmlnbnVtYmVyKDApO1xuICAgIEhpaltqXVtpXSA9IGJpZ251bWJlcigwKTsgLy8gMCAgdG8gaVxuXG4gICAgZm9yICh2YXIgX2szID0gMDsgX2szIDwgTjsgX2szKyspIHtcbiAgICAgIGlmIChfazMgIT09IGkgJiYgX2szICE9PSBqKSB7XG4gICAgICAgIEhpaltpXVtfazNdID0gQWtpW19rM107XG4gICAgICAgIEhpaltfazNdW2ldID0gQWtpW19rM107XG4gICAgICAgIEhpaltqXVtfazNdID0gQWtqW19rM107XG4gICAgICAgIEhpaltfazNdW2pdID0gQWtqW19rM107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEhpajtcbiAgfSAvLyB1cGRhdGUgbWF0cml4XG5cblxuICBmdW5jdGlvbiB4MShIaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBIaWoubGVuZ3RoO1xuICAgIHZhciBjID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzID0gTWF0aC5zaW4odGhldGEpO1xuICAgIHZhciBjMiA9IGMgKiBjO1xuICAgIHZhciBzMiA9IHMgKiBzO1xuICAgIHZhciBBa2kgPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vICBBaWlcblxuICAgIHZhciBBaWkgPSBjMiAqIEhpaltpXVtpXSAtIDIgKiBjICogcyAqIEhpaltpXVtqXSArIHMyICogSGlqW2pdW2pdO1xuICAgIHZhciBBamogPSBzMiAqIEhpaltpXVtpXSArIDIgKiBjICogcyAqIEhpaltpXVtqXSArIGMyICogSGlqW2pdW2pdOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgQWtpW2tdID0gYyAqIEhpaltpXVtrXSAtIHMgKiBIaWpbal1ba107XG4gICAgICBBa2pba10gPSBzICogSGlqW2ldW2tdICsgYyAqIEhpaltqXVtrXTtcbiAgICB9IC8vIE1vZGlmeSBIaWpcblxuXG4gICAgSGlqW2ldW2ldID0gQWlpO1xuICAgIEhpaltqXVtqXSA9IEFqajtcbiAgICBIaWpbaV1bal0gPSAwO1xuICAgIEhpaltqXVtpXSA9IDA7IC8vIDAgIHRvIGlcblxuICAgIGZvciAodmFyIF9rNCA9IDA7IF9rNCA8IE47IF9rNCsrKSB7XG4gICAgICBpZiAoX2s0ICE9PSBpICYmIF9rNCAhPT0gaikge1xuICAgICAgICBIaWpbaV1bX2s0XSA9IEFraVtfazRdO1xuICAgICAgICBIaWpbX2s0XVtpXSA9IEFraVtfazRdO1xuICAgICAgICBIaWpbal1bX2s0XSA9IEFraltfazRdO1xuICAgICAgICBIaWpbX2s0XVtqXSA9IEFraltfazRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBIaWo7XG4gIH0gLy8gZ2V0IG1heCBvZmYtZGlhZ29uYWwgdmFsdWUgZnJvbSBVcHBlciBEaWFnb25hbFxuXG5cbiAgZnVuY3Rpb24gZ2V0QWlqKE1paikge1xuICAgIHZhciBOID0gTWlqLmxlbmd0aDtcbiAgICB2YXIgbWF4TWlqID0gMDtcbiAgICB2YXIgbWF4SUogPSBbMCwgMV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgTjsgaisrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhtYXhNaWopIDwgTWF0aC5hYnMoTWlqW2ldW2pdKSkge1xuICAgICAgICAgIG1heE1paiA9IE1hdGguYWJzKE1paltpXVtqXSk7XG4gICAgICAgICAgbWF4SUogPSBbaSwgal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW21heElKLCBtYXhNaWpdO1xuICB9IC8vIGdldCBtYXggb2ZmLWRpYWdvbmFsIHZhbHVlIGZyb20gVXBwZXIgRGlhZ29uYWxcblxuXG4gIGZ1bmN0aW9uIGdldEFpakJpZyhNaWopIHtcbiAgICB2YXIgTiA9IE1pai5sZW5ndGg7XG4gICAgdmFyIG1heE1paiA9IDA7XG4gICAgdmFyIG1heElKID0gWzAsIDFdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICBpZiAoYWJzKG1heE1paikgPCBhYnMoTWlqW2ldW2pdKSkge1xuICAgICAgICAgIG1heE1paiA9IGFicyhNaWpbaV1bal0pO1xuICAgICAgICAgIG1heElKID0gW2ksIGpdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFttYXhJSiwgbWF4TWlqXTtcbiAgfSAvLyBzb3J0IHJlc3VsdHNcblxuXG4gIGZ1bmN0aW9uIHNvcnRpbmcoRSwgUykge1xuICAgIHZhciBOID0gRS5sZW5ndGg7XG4gICAgdmFyIEVmID0gQXJyYXkoTik7XG4gICAgdmFyIFNmID0gQXJyYXkoTik7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2Zba10gPSBBcnJheShOKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdmFyIG1pbklEID0gMDtcbiAgICAgIHZhciBtaW5FID0gRVswXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBFLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChFW2pdIDwgbWluRSkge1xuICAgICAgICAgIG1pbklEID0gajtcbiAgICAgICAgICBtaW5FID0gRVttaW5JRF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgRWZbaV0gPSBFLnNwbGljZShtaW5JRCwgMSlbMF07XG5cbiAgICAgIGZvciAodmFyIF9rNSA9IDA7IF9rNSA8IE47IF9rNSsrKSB7XG4gICAgICAgIFNmW19rNV1baV0gPSBTW19rNV1bbWluSURdO1xuXG4gICAgICAgIFNbX2s1XS5zcGxpY2UobWluSUQsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbKDAsIF9vYmplY3QuY2xvbmUpKEVmKSwgKDAsIF9vYmplY3QuY2xvbmUpKFNmKV07XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhcnJheSBvZiBhIGNlcnRhaW4gc2l6ZSBhbmQgZmlsbCBhbGwgaXRlbXMgd2l0aCBhbiBpbml0aWFsIHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtudW1iZXJbXX1cbiAgICovXG5cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheShzaXplLCB2YWx1ZSkge1xuICAgIC8vIFRPRE86IGFzIHNvb24gYXMgYWxsIGJyb3dzZXJzIHN1cHBvcnQgQXJyYXkuZmlsbCwgdXNlIHRoYXQgaW5zdGVhZCAoSUUgZG9lc24ndCBzdXBwb3J0IGl0KVxuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIHJldHVybiBlaWdzO1xufSk7XG5leHBvcnRzLmNyZWF0ZUVpZ3MgPSBjcmVhdGVFaWdzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdleHBtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnaWRlbnRpdHknLCAnaW52JywgJ211bHRpcGx5J107XG52YXIgY3JlYXRlRXhwbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHk7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1hdHJpeCBleHBvbmVudGlhbCwgZXhwbShBKSA9IGVeQS4gVGhlIG1hdHJpeCBtdXN0IGJlIHNxdWFyZS5cbiAgICogTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggZXhwKGEpLCB3aGljaCBwZXJmb3JtcyBlbGVtZW50LXdpc2VcbiAgICogZXhwb25lbnRpYXRpb24uXG4gICAqXG4gICAqIFRoZSBleHBvbmVudGlhbCBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBQYWTDqSBhcHByb3hpbWFudCB3aXRoIHNjYWxpbmcgYW5kXG4gICAqIHNxdWFyaW5nOyBzZWUgXCJOaW5ldGVlbiBEdWJpb3VzIFdheXMgdG8gQ29tcHV0ZSB0aGUgRXhwb25lbnRpYWwgb2YgYVxuICAgKiBNYXRyaXgsXCIgYnkgTW9sZXIgYW5kIFZhbiBMb2FuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmV4cG0oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBBID0gW1swLDJdLFswLDBdXVxuICAgKiAgICAgbWF0aC5leHBtKEEpICAgICAgICAvLyByZXR1cm5zIFtbMSwyXSxbMCwxXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBleHBcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IHggIEEgc3F1YXJlIE1hdHJpeFxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgVGhlIGV4cG9uZW50aWFsIG9mIHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoQSkge1xuICAgICAgLy8gQ2hlY2sgbWF0cml4IHNpemVcbiAgICAgIHZhciBzaXplID0gQS5zaXplKCk7XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMiB8fCBzaXplWzBdICE9PSBzaXplWzFdKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbiA9IHNpemVbMF07IC8vIERlc2lyZWQgYWNjdXJhY3kgb2YgdGhlIGFwcHJveGltYW50IChUaGUgYWN0dWFsIGFjY3VyYWN5XG4gICAgICAvLyB3aWxsIGJlIGFmZmVjdGVkIGJ5IHJvdW5kLW9mZiBlcnJvcilcblxuICAgICAgdmFyIGVwcyA9IDFlLTE1OyAvLyBUaGUgUGFkw6kgYXBwcm94aW1hbnQgaXMgbm90IHNvIGFjY3VyYXRlIHdoZW4gdGhlIHZhbHVlcyBvZiBBXG4gICAgICAvLyBhcmUgXCJsYXJnZVwiLCBzbyBzY2FsZSBBIGJ5IHBvd2VycyBvZiB0d28uIFRoZW4gY29tcHV0ZSB0aGVcbiAgICAgIC8vIGV4cG9uZW50aWFsLCBhbmQgc3F1YXJlIHRoZSByZXN1bHQgcmVwZWF0ZWRseSBhY2NvcmRpbmcgdG9cbiAgICAgIC8vIHRoZSBpZGVudGl0eSBlXkEgPSAoZV4oQS9tKSlebVxuICAgICAgLy8gQ29tcHV0ZSBpbmZpbml0eS1ub3JtIG9mIEEsIHx8QXx8LCB0byBzZWUgaG93IFwiYmlnXCIgaXQgaXNcblxuICAgICAgdmFyIGluZk5vcm0gPSBpbmZpbml0eU5vcm0oQSk7IC8vIEZpbmQgdGhlIG9wdGltYWwgc2NhbGluZyBmYWN0b3IgYW5kIG51bWJlciBvZiB0ZXJtcyBpbiB0aGVcbiAgICAgIC8vIFBhZMOpIGFwcHJveGltYW50IHRvIHJlYWNoIHRoZSBkZXNpcmVkIGFjY3VyYWN5XG5cbiAgICAgIHZhciBwYXJhbXMgPSBmaW5kUGFyYW1zKGluZk5vcm0sIGVwcyk7XG4gICAgICB2YXIgcSA9IHBhcmFtcy5xO1xuICAgICAgdmFyIGogPSBwYXJhbXMuajsgLy8gVGhlIFBhZGUgYXBwcm94aW1hdGlvbiB0byBlXkEgaXM6XG4gICAgICAvLyBScXEoQSkgPSBEcXEoQSkgXiAtMSAqIE5xcShBKVxuICAgICAgLy8gd2hlcmVcbiAgICAgIC8vIE5xcShBKSA9IHN1bShpPTAsIHEsICgycS1pKSFwISAvIFsgKDJxKSFpIShxLWkpISBdIEFeaVxuICAgICAgLy8gRHFxKEEpID0gc3VtKGk9MCwgcSwgKDJxLWkpIXEhIC8gWyAoMnEpIWkhKHEtaSkhIF0gKC1BKV5pXG4gICAgICAvLyBTY2FsZSBBIGJ5IDEgLyAyXmpcblxuICAgICAgdmFyIEFwb3MgPSBtdWx0aXBseShBLCBNYXRoLnBvdygyLCAtaikpOyAvLyBUaGUgaT0wIHRlcm0gaXMganVzdCB0aGUgaWRlbnRpdHkgbWF0cml4XG5cbiAgICAgIHZhciBOID0gaWRlbnRpdHkobik7XG4gICAgICB2YXIgRCA9IGlkZW50aXR5KG4pOyAvLyBJbml0aWFsaXphdGlvbiAoaT0wKVxuXG4gICAgICB2YXIgZmFjdG9yID0gMTsgLy8gSW5pdGlhbGl6YXRpb24gKGk9MSlcblxuICAgICAgdmFyIEFwb3NUb0kgPSBBcG9zOyAvLyBDbG9uaW5nIG5vdCBuZWNlc3NhcnlcblxuICAgICAgdmFyIGFsdGVybmF0ZSA9IC0xO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBxOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPiAxKSB7XG4gICAgICAgICAgQXBvc1RvSSA9IG11bHRpcGx5KEFwb3NUb0ksIEFwb3MpO1xuICAgICAgICAgIGFsdGVybmF0ZSA9IC1hbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBmYWN0b3IgPSBmYWN0b3IgKiAocSAtIGkgKyAxKSAvICgoMiAqIHEgLSBpICsgMSkgKiBpKTtcbiAgICAgICAgTiA9IGFkZChOLCBtdWx0aXBseShmYWN0b3IsIEFwb3NUb0kpKTtcbiAgICAgICAgRCA9IGFkZChELCBtdWx0aXBseShmYWN0b3IgKiBhbHRlcm5hdGUsIEFwb3NUb0kpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIFIgPSBtdWx0aXBseShpbnYoRCksIE4pOyAvLyBTcXVhcmUgaiB0aW1lc1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgajsgX2krKykge1xuICAgICAgICBSID0gbXVsdGlwbHkoUiwgUik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMCwgX2lzLmlzU3BhcnNlTWF0cml4KShBKSA/IEEuY3JlYXRlU3BhcnNlTWF0cml4KFIpIDogUjtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGluZmluaXR5Tm9ybShBKSB7XG4gICAgdmFyIG4gPSBBLnNpemUoKVswXTtcbiAgICB2YXIgaW5mTm9ybSA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFyIHJvd1N1bSA9IDA7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIHJvd1N1bSArPSBhYnMoQS5nZXQoW2ksIGpdKSk7XG4gICAgICB9XG5cbiAgICAgIGluZk5vcm0gPSBNYXRoLm1heChyb3dTdW0sIGluZk5vcm0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbmZOb3JtO1xuICB9XG4gIC8qKlxuICAgKiBGaW5kIHRoZSBiZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBQYWRlIGFwcHJveGltYW50IGdpdmVuXG4gICAqIHRoZSBtYXRyaXggbm9ybSBhbmQgZGVzaXJlZCBhY2N1cmFjeS4gUmV0dXJucyB0aGUgZmlyc3QgYWNjZXB0YWJsZVxuICAgKiBjb21iaW5hdGlvbiBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGNvbXB1dGF0aW9uYWwgbG9hZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBmaW5kUGFyYW1zKGluZk5vcm0sIGVwcykge1xuICAgIHZhciBtYXhTZWFyY2hTaXplID0gMzA7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG1heFNlYXJjaFNpemU7IGsrKykge1xuICAgICAgZm9yICh2YXIgcSA9IDA7IHEgPD0gazsgcSsrKSB7XG4gICAgICAgIHZhciBqID0gayAtIHE7XG5cbiAgICAgICAgaWYgKGVycm9yRXN0aW1hdGUoaW5mTm9ybSwgcSwgaikgPCBlcHMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcTogcSxcbiAgICAgICAgICAgIGo6IGpcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBhY2NlcHRhYmxlIHBhcmFtZXRlcnMgdG8gY29tcHV0ZSB0aGUgbWF0cml4IGV4cG9uZW50aWFsICh0cnkgaW5jcmVhc2luZyBtYXhTZWFyY2hTaXplIGluIGV4cG0uanMpJyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVzdGltYXRlZCBlcnJvciBvZiB0aGUgUGFkZSBhcHByb3hpbWFudCBmb3IgdGhlIGdpdmVuXG4gICAqIHBhcmFtZXRlcnMuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZXJyb3JFc3RpbWF0ZShpbmZOb3JtLCBxLCBqKSB7XG4gICAgdmFyIHFmYWMgPSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPD0gcTsgaSsrKSB7XG4gICAgICBxZmFjICo9IGk7XG4gICAgfVxuXG4gICAgdmFyIHR3b3FmYWMgPSBxZmFjO1xuXG4gICAgZm9yICh2YXIgX2kyID0gcSArIDE7IF9pMiA8PSAyICogcTsgX2kyKyspIHtcbiAgICAgIHR3b3FmYWMgKj0gX2kyO1xuICAgIH1cblxuICAgIHZhciB0d29xcDFmYWMgPSB0d29xZmFjICogKDIgKiBxICsgMSk7XG4gICAgcmV0dXJuIDguMCAqIE1hdGgucG93KGluZk5vcm0gLyBNYXRoLnBvdygyLCBqKSwgMiAqIHEpICogcWZhYyAqIHFmYWMgLyAodHdvcWZhYyAqIHR3b3FwMWZhYyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtID0gY3JlYXRlRXhwbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXllID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuLy8gVE9ETzogZnVuY3Rpb24gZXllIGlzIHJlbW92ZWQgc2luY2UgdjUuMC4wIChKdW5lIDIwMTgpLiBSZW1vdmUgaXQgc29tZSBkYXkuXG52YXIgY3JlYXRlRXllID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCdleWUnLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZXllKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gXCJleWVcIiBpcyByZW5hbWVkIHRvIFwiaWRlbnRpdHlcIiBzaW5jZSBtYXRoanMgdmVyc2lvbiA1LjAuMC4gJyArICdUbyBrZWVwIGV5ZSB3b3JraW5nLCBjcmVhdGUgYW4gYWxpYXMgZm9yIGl0IHVzaW5nIFwibWF0aC5pbXBvcnQoe2V5ZTogbWF0aC5pZGVudGl0eX0sIHtvdmVycmlkZTogdHJ1ZX0pXCInKTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeWUgPSBjcmVhdGVFeWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpbHRlciA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZpbHRlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZpbHRlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMgaW4gYW4gYXJyYXkgb3Igb25lIGRpbWVuc2lvbmFsIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZpbHRlcih4LCB0ZXN0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgZnVuY3Rpb24gaXNQb3NpdGl2ZSAoeCkge1xuICAgKiAgICAgIHJldHVybiB4ID4gMFxuICAgKiAgICB9XG4gICAqICAgIG1hdGguZmlsdGVyKFs2LCAtMiwgLTEsIDQsIDNdLCBpc1Bvc2l0aXZlKSAvLyByZXR1cm5zIFs2LCA0LCAzXVxuICAgKlxuICAgKiAgICBtYXRoLmZpbHRlcihbXCIyM1wiLCBcImZvb1wiLCBcIjEwMFwiLCBcIjU1XCIsIFwiYmFyXCJdLCAvWzAtOV0rLykgLy8gcmV0dXJucyBbXCIyM1wiLCBcIjEwMFwiLCBcIjU1XCJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmb3JFYWNoLCBtYXAsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBBIG9uZSBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCBSZWdFeHB9IHRlc3RcbiAgICogICAgICAgIEEgZnVuY3Rpb24gb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHRlc3QgaXRlbXMuXG4gICAqICAgICAgICBBbGwgZW50cmllcyBmb3Igd2hpY2ggYHRlc3RgIHJldHVybnMgdHJ1ZSBhcmUgcmV0dXJuZWQuXG4gICAqICAgICAgICBXaGVuIGB0ZXN0YCBpcyBhIGZ1bmN0aW9uLCBpdCBpcyBpbnZva2VkIHdpdGggdGhyZWUgcGFyYW1ldGVyczpcbiAgICogICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlXG4gICAqICAgICAgICBtYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgbWF0cml4LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKCdmaWx0ZXInLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9maWx0ZXJDYWxsYmFjayxcbiAgICAnTWF0cml4LCBmdW5jdGlvbic6IGZ1bmN0aW9uIE1hdHJpeEZ1bmN0aW9uKHgsIHRlc3QpIHtcbiAgICAgIHJldHVybiB4LmNyZWF0ZShfZmlsdGVyQ2FsbGJhY2soeC50b0FycmF5KCksIHRlc3QpKTtcbiAgICB9LFxuICAgICdBcnJheSwgUmVnRXhwJzogX2FycmF5LmZpbHRlclJlZ0V4cCxcbiAgICAnTWF0cml4LCBSZWdFeHAnOiBmdW5jdGlvbiBNYXRyaXhSZWdFeHAoeCwgdGVzdCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKCgwLCBfYXJyYXkuZmlsdGVyUmVnRXhwKSh4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogRmlsdGVyIHZhbHVlcyBpbiBhIGNhbGxiYWNrIGdpdmVuIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl9IHhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgYXJyYXlcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVGaWx0ZXIgPSBjcmVhdGVGaWx0ZXI7XG5cbmZ1bmN0aW9uIF9maWx0ZXJDYWxsYmFjayh4LCBjYWxsYmFjaykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuICByZXR1cm4gKDAsIF9hcnJheS5maWx0ZXIpKHgsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgLy8gaW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzIG9yIC0xXG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleF0sIGFycmF5KTtcbiAgICB9XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGbGF0dGVuID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmbGF0dGVuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZUZsYXR0ZW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaXggaW50byBhIHNpbmdsZSBkaW1lbnNpb25hbCBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mbGF0dGVuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmZsYXR0ZW4oW1sxLDJdLCBbMyw0XV0pICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvbmNhdCwgcmVzaXplLCBzaXplLCBzcXVlZXplXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICBNYXRyaXggdG8gYmUgZmxhdHRlbmVkXG4gICAqIEByZXR1cm4ge01hdHJpeCB8IEFycmF5fSBSZXR1cm5zIHRoZSBmbGF0dGVuZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKSgoMCwgX29iamVjdC5jbG9uZSkoeCkpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgdmFyIGZsYXQgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKCgwLCBfb2JqZWN0LmNsb25lKSh4LnRvQXJyYXkoKSkpOyAvLyBUT0RPOiByZXR1cm4gdGhlIHNhbWUgbWF0cml4IHR5cGUgYXMgeFxuXG4gICAgICByZXR1cm4gbWF0cml4KGZsYXQpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRmxhdHRlbiA9IGNyZWF0ZUZsYXR0ZW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2ggPSB2b2lkIDA7XG5cbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZnVuY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmb3JFYWNoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRm9yRWFjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgZWxlbWVudHMgb2YgYSBtYXRyaXgvYXJyYXksIGFuZCBleGVjdXRlcyB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mb3JFYWNoKHgsIGNhbGxiYWNrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mb3JFYWNoKFsxLCAyLCAzXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICogICAgICBjb25zb2xlLmxvZyh2YWx1ZSlcbiAgICogICAgfSlcbiAgICogICAgLy8gb3V0cHV0cyAxLCAyLCAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmaWx0ZXIsIG1hcCwgc29ydFxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSB4ICAgIFRoZSBtYXRyaXggdG8gaXRlcmF0ZSBvbi5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogX2ZvckVhY2gsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHguZm9yRWFjaChjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBmb3JFYWNoIGZvciBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVGb3JFYWNoID0gY3JlYXRlRm9yRWFjaDtcblxuZnVuY3Rpb24gX2ZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgKDAsIF9hcnJheS5mb3JFYWNoKSh2YWx1ZSwgZnVuY3Rpb24gKGNoaWxkLCBpKSB7XG4gICAgICAgIC8vIHdlIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGluZGV4IGFycmF5IGFuZCBhcHBlbmQgdGhlIG5ldyBpbmRleCB2YWx1ZVxuICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAzIG9yIC0xXG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZWN1cnNlKGFycmF5LCBbXSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnZ2V0TWF0cml4RGF0YVR5cGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksXG4gICAqIGZvciBleGFtcGxlICdudW1iZXInIGlmIGFsbCBpdGVtcyBhcmUgYSBudW1iZXIgYW5kICdDb21wbGV4JyBpZiBhbGwgdmFsdWVzXG4gICAqIGFyZSBjb21wbGV4IG51bWJlcnMuXG4gICAqIElmIGEgbWF0cml4IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZGF0YSB0eXBlLCBpdCB3aWxsIHJldHVybiAnbWl4ZWQnLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IHggPSBbIFsxLCAyLCAzXSwgWzQsIDUsIDZdIF1cbiAgICogICAgY29uc3QgbWl4ZWRYID0gWyBbMSwgdHJ1ZV0sIFsyLCAzXSBdXG4gICAqICAgIGNvbnN0IGZyYWN0aW9uWCA9IFsgW21hdGguZnJhY3Rpb24oMSwgMyldLCBbbWF0aC5mcmFjdGlvbigxLCAzXSBdXG4gICAqICAgIGNvbnN0IHVuaXRYID0gWyBbbWF0aC51bml0KCc1Y20nKV0sIFttYXRoLnVuaXQoJzVjbScpXSBdXG4gICAqICAgIGNvbnN0IGJpZ051bWJlclggPSBbIFttYXRoLmJpZ251bWJlcigxKV0sIFttYXRoLmJpZ251bWJlcigwKV0gXVxuICAgKiAgICBjb25zdCBzcGFyc2UgPSBtYXRoLnNwYXJzZSh4KVxuICAgKiAgICBjb25zdCBkZW5zZSA9IG1hdGgubWF0cml4KHgpXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeCkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoc3BhcnNlKSAgIC8vIHJldHVybnMgJ251bWJlcidcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShkZW5zZSkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUobWl4ZWRYKSAvLyByZXR1cm5zICdtaXhlZCdcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShmcmFjdGlvblgpIC8vIHJldHVybnMgJ0ZyYWN0aW9uJ1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKHVuaXRYKSAvLyByZXR1cm5zICdVbml0J1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKGJpZ051bWJlclgpIC8vIHJldHVybiAnQmlnTnVtYmVyJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICogIFNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXhcbiAgICpcbiAgICogQHBhcmFtIHsuLi5NYXRyaXggfCBBcnJheX0geCAgIFRoZSBNYXRyaXggd2l0aCB2YWx1ZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCB0eXBlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5nZXRBcnJheURhdGFUeXBlKSh4LCBfaXMudHlwZU9mKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiB4LmdldERhdGFUeXBlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJZGVudGl0eSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaWRlbnRpdHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlSWRlbnRpdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIDItZGltZW5zaW9uYWwgaWRlbnRpdHkgbWF0cml4IHdpdGggc2l6ZSBtIHggbiBvciBuIHggbi5cbiAgICogVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmlkZW50aXR5KG4pXG4gICAqICAgIG1hdGguaWRlbnRpdHkobiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLmlkZW50aXR5KG0sIG4pXG4gICAqICAgIG1hdGguaWRlbnRpdHkobSwgbiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLmlkZW50aXR5KFttLCBuXSlcbiAgICogICAgbWF0aC5pZGVudGl0eShbbSwgbl0sIGZvcm1hdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaWRlbnRpdHkoMykgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdLCBbMCwgMCwgMV1dXG4gICAqICAgIG1hdGguaWRlbnRpdHkoMywgMikgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwXSwgWzAsIDFdLCBbMCwgMF1dXG4gICAqXG4gICAqICAgIGNvbnN0IEEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gICAqICAgIG1hdGguaWRlbnRpdHkobWF0aC5zaXplKEEpKSAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGlhZywgb25lcywgemVyb3MsIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgTWF0cml4IHwgQXJyYXl9IHNpemUgICBUaGUgc2l6ZSBmb3IgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheSB8IG51bWJlcn0gQSBtYXRyaXggd2l0aCBvbmVzIG9uIHRoZSBkaWFnb25hbC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyBtYXRyaXgoW10pIDogW107XG4gICAgfSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhmb3JtYXQpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoZm9ybWF0KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXIocm93cykge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCByb3dzLCBjb25maWcubWF0cml4ID09PSAnTWF0cml4JyA/ICdkZW5zZScgOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3RyaW5nKHJvd3MsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCByb3dzLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKHJvd3MsIGNvbHMpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgY29scywgY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyAnZGVuc2UnIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHJvd3MsIGNvbHMsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCBjb2xzLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KHNpemUpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5U3RyaW5nKHNpemUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLnZhbHVlT2YoKSwgc2l6ZS5zdG9yYWdlKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4U3RyaW5nKHNpemUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpIHtcbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBmb3JtYXQgPyBtYXRyaXgoZm9ybWF0KSA6IFtdO1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfaWRlbnRpdHkoc2l6ZVswXSwgc2l6ZVswXSwgZm9ybWF0KTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gX2lkZW50aXR5KHNpemVbMF0sIHNpemVbMV0sIGZvcm1hdCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmVjdG9yIGNvbnRhaW5pbmcgdHdvIHZhbHVlcyBleHBlY3RlZCcpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGFuIGlkZW50aXR5IG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gcm93c1xuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gY29sc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF1cbiAgICogQHJldHVybnMge01hdHJpeH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfaWRlbnRpdHkocm93cywgY29scywgZm9ybWF0KSB7XG4gICAgLy8gQmlnTnVtYmVyIGNvbnN0cnVjdG9yIHdpdGggdGhlIHJpZ2h0IHByZWNpc2lvblxuICAgIHZhciBCaWcgPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShyb3dzKSB8fCAoMCwgX2lzLmlzQmlnTnVtYmVyKShjb2xzKSA/IEJpZ051bWJlciA6IG51bGw7XG4gICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHJvd3MpKSByb3dzID0gcm93cy50b051bWJlcigpO1xuICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShjb2xzKSkgY29scyA9IGNvbHMudG9OdW1iZXIoKTtcblxuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShyb3dzKSB8fCByb3dzIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGlkZW50aXR5IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoY29scykgfHwgY29scyA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBpZGVudGl0eSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgfVxuXG4gICAgdmFyIG9uZSA9IEJpZyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxO1xuICAgIHZhciBkZWZhdWx0VmFsdWUgPSBCaWcgPyBuZXcgQmlnKDApIDogMDtcbiAgICB2YXIgc2l6ZSA9IFtyb3dzLCBjb2xzXTsgLy8gY2hlY2sgd2UgbmVlZCB0byByZXR1cm4gYSBtYXRyaXhcblxuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIC8vIGNyZWF0ZSBkaWFnb25hbCBtYXRyaXggKHVzZSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHN0b3JhZ2UgZm9ybWF0KVxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ3NwYXJzZScpIHtcbiAgICAgICAgcmV0dXJuIFNwYXJzZU1hdHJpeC5kaWFnb25hbChzaXplLCBvbmUsIDAsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdkZW5zZScpIHtcbiAgICAgICAgcmV0dXJuIERlbnNlTWF0cml4LmRpYWdvbmFsKHNpemUsIG9uZSwgMCwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gbWF0cml4IHR5cGUgXFxcIlwiLmNvbmNhdChmb3JtYXQsIFwiXFxcIlwiKSk7XG4gICAgfSAvLyBjcmVhdGUgYW5kIHJlc2l6ZSBhcnJheVxuXG5cbiAgICB2YXIgcmVzID0gKDAsIF9hcnJheS5yZXNpemUpKFtdLCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBmaWxsIGluIG9uZXMgb24gdGhlIGRpYWdvbmFsXG5cbiAgICB2YXIgbWluaW11bSA9IHJvd3MgPCBjb2xzID8gcm93cyA6IGNvbHM7IC8vIGZpbGwgZGlhZ29uYWxcblxuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgbWluaW11bTsgZCsrKSB7XG4gICAgICByZXNbZF1bZF0gPSBvbmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUlkZW50aXR5ID0gY3JlYXRlSWRlbnRpdHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUludiA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIG5hbWUgPSAnaW52JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnYWRkU2NhbGFyJywgJ211bHRpcGx5JywgJ3VuYXJ5TWludXMnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2FicyddO1xudmFyIGNyZWF0ZUludiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgZGV0ID0gX3JlZi5kZXQsXG4gICAgICBpZGVudGl0eSA9IF9yZWYuaWRlbnRpdHksXG4gICAgICBhYnMgPSBfcmVmLmFicztcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgc3F1YXJlIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pbnYoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmludihbWzEsIDJdLCBbMywgNF1dKSAgLy8gcmV0dXJucyBbWy0yLCAxXSwgWzEuNSwgLTAuNV1dXG4gICAqICAgICBtYXRoLmludig0KSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjI1XG4gICAqICAgICAxIC8gNCAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjI1XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGV0LCB0cmFuc3Bvc2VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICAgIE1hdHJpeCB0byBiZSBpbnZlcnNlZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBpbnZlcnNlIG9mIGB4YC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgdmFyIHNpemUgPSAoMCwgX2lzLmlzTWF0cml4KSh4KSA/IHguc2l6ZSgpIDogKDAsIF9hcnJheS5hcnJheVNpemUpKHgpO1xuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoW2RpdmlkZVNjYWxhcigxLCB4LnZhbHVlT2YoKVswXSldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBbZGl2aWRlU2NhbGFyKDEsIHhbMF0pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAvLyB0d28gZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoX2ludih4LnZhbHVlT2YoKSwgcm93cywgY29scyksIHguc3RvcmFnZSgpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gYW4gQXJyYXlcbiAgICAgICAgICAgICAgICByZXR1cm4gX2ludih4LCByb3dzLCBjb2xzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIC8vIHNjYWxhclxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcigxLCB4KTsgLy8gRklYTUU6IGNyZWF0ZSBhIEJpZ051bWJlciBvbmUgd2hlbiBjb25maWd1cmVkIGZvciBiaWdudW1iZXJzXG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBhIHNxdWFyZSBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheVtdfSBtYXQgICAgIEEgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAgICAgTnVtYmVyIG9mIHJvd3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHMgICAgIE51bWJlciBvZiBjb2x1bW5zLCBtdXN0IGVxdWFsIHJvd3NcbiAgICogQHJldHVybiB7QXJyYXlbXX0gaW52ICAgIEludmVyc2UgbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9pbnYobWF0LCByb3dzLCBjb2xzKSB7XG4gICAgdmFyIHIsIHMsIGYsIHZhbHVlLCB0ZW1wO1xuXG4gICAgaWYgKHJvd3MgPT09IDEpIHtcbiAgICAgIC8vIHRoaXMgaXMgYSAxIHggMSBtYXRyaXhcbiAgICAgIHZhbHVlID0gbWF0WzBdWzBdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgaW52ZXJzZSwgZGV0ZXJtaW5hbnQgaXMgemVybycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1tkaXZpZGVTY2FsYXIoMSwgdmFsdWUpXV07XG4gICAgfSBlbHNlIGlmIChyb3dzID09PSAyKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgMiB4IDIgbWF0cml4XG4gICAgICB2YXIgZCA9IGRldChtYXQpO1xuXG4gICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBpbnZlcnNlLCBkZXRlcm1pbmFudCBpcyB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbW2RpdmlkZVNjYWxhcihtYXRbMV1bMV0sIGQpLCBkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhtYXRbMF1bMV0pLCBkKV0sIFtkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhtYXRbMV1bMF0pLCBkKSwgZGl2aWRlU2NhbGFyKG1hdFswXVswXSwgZCldXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBpcyBhIG1hdHJpeCBvZiAzIHggMyBvciBsYXJnZXJcbiAgICAgIC8vIGNhbGN1bGF0ZSBpbnZlcnNlIHVzaW5nIGdhdXNzLWpvcmRhbiBlbGltaW5hdGlvblxuICAgICAgLy8gICAgICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HYXVzc2lhbl9lbGltaW5hdGlvblxuICAgICAgLy8gICAgICBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL01hdHJpeEludmVyc2UuaHRtbFxuICAgICAgLy8gICAgICBodHRwOi8vbWF0aC51d3cuZWR1L35tY2ZhcmxhdC9pbnZlcnNlLmh0bVxuICAgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIG1hdHJpeCAob25seSB0aGUgYXJyYXlzLCBub3Qgb2YgdGhlIGVsZW1lbnRzKVxuICAgICAgdmFyIEEgPSBtYXQuY29uY2F0KCk7XG5cbiAgICAgIGZvciAociA9IDA7IHIgPCByb3dzOyByKyspIHtcbiAgICAgICAgQVtyXSA9IEFbcl0uY29uY2F0KCk7XG4gICAgICB9IC8vIGNyZWF0ZSBhbiBpZGVudGl0eSBtYXRyaXggd2hpY2ggaW4gdGhlIGVuZCB3aWxsIGNvbnRhaW4gdGhlXG4gICAgICAvLyBtYXRyaXggaW52ZXJzZVxuXG5cbiAgICAgIHZhciBCID0gaWRlbnRpdHkocm93cykudmFsdWVPZigpOyAvLyBsb29wIG92ZXIgYWxsIGNvbHVtbnMsIGFuZCBwZXJmb3JtIHJvdyByZWR1Y3Rpb25zXG5cbiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29sczsgYysrKSB7XG4gICAgICAgIC8vIFBpdm90aW5nOiBTd2FwIHJvdyBjIHdpdGggcm93IHIsIHdoZXJlIHJvdyByIGNvbnRhaW5zIHRoZSBsYXJnZXN0IGVsZW1lbnQgQVtyXVtjXVxuICAgICAgICB2YXIgQUJpZyA9IGFicyhBW2NdW2NdKTtcbiAgICAgICAgdmFyIHJCaWcgPSBjO1xuICAgICAgICByID0gYyArIDE7XG5cbiAgICAgICAgd2hpbGUgKHIgPCByb3dzKSB7XG4gICAgICAgICAgaWYgKGFicyhBW3JdW2NdKSA+IEFCaWcpIHtcbiAgICAgICAgICAgIEFCaWcgPSBhYnMoQVtyXVtjXSk7XG4gICAgICAgICAgICByQmlnID0gcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByKys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQUJpZyA9PT0gMCkge1xuICAgICAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHIgPSByQmlnO1xuXG4gICAgICAgIGlmIChyICE9PSBjKSB7XG4gICAgICAgICAgdGVtcCA9IEFbY107XG4gICAgICAgICAgQVtjXSA9IEFbcl07XG4gICAgICAgICAgQVtyXSA9IHRlbXA7XG4gICAgICAgICAgdGVtcCA9IEJbY107XG4gICAgICAgICAgQltjXSA9IEJbcl07XG4gICAgICAgICAgQltyXSA9IHRlbXA7XG4gICAgICAgIH0gLy8gZWxpbWluYXRlIG5vbi16ZXJvIHZhbHVlcyBvbiB0aGUgb3RoZXIgcm93cyBhdCBjb2x1bW4gY1xuXG5cbiAgICAgICAgdmFyIEFjID0gQVtjXTtcbiAgICAgICAgdmFyIEJjID0gQltjXTtcblxuICAgICAgICBmb3IgKHIgPSAwOyByIDwgcm93czsgcisrKSB7XG4gICAgICAgICAgdmFyIEFyID0gQVtyXTtcbiAgICAgICAgICB2YXIgQnIgPSBCW3JdO1xuXG4gICAgICAgICAgaWYgKHIgIT09IGMpIHtcbiAgICAgICAgICAgIC8vIGVsaW1pbmF0ZSB2YWx1ZSBhdCBjb2x1bW4gYyBhbmQgcm93IHJcbiAgICAgICAgICAgIGlmIChBcltjXSAhPT0gMCkge1xuICAgICAgICAgICAgICBmID0gZGl2aWRlU2NhbGFyKHVuYXJ5TWludXMoQXJbY10pLCBBY1tjXSk7IC8vIGFkZCAoZiAqIHJvdyBjKSB0byByb3cgciB0byBlbGltaW5hdGUgdGhlIHZhbHVlXG4gICAgICAgICAgICAgIC8vIGF0IGNvbHVtbiBjXG5cbiAgICAgICAgICAgICAgZm9yIChzID0gYzsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICAgIEFyW3NdID0gYWRkU2NhbGFyKEFyW3NdLCBtdWx0aXBseShmLCBBY1tzXSkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICAgIEJyW3NdID0gYWRkU2NhbGFyKEJyW3NdLCBtdWx0aXBseShmLCBCY1tzXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB2YWx1ZSBhdCBBY2MgdG8gMSxcbiAgICAgICAgICAgIC8vIGRpdmlkZSBlYWNoIHZhbHVlIG9uIHJvdyByIHdpdGggdGhlIHZhbHVlIGF0IEFjY1xuICAgICAgICAgICAgZiA9IEFjW2NdO1xuXG4gICAgICAgICAgICBmb3IgKHMgPSBjOyBzIDwgY29sczsgcysrKSB7XG4gICAgICAgICAgICAgIEFyW3NdID0gZGl2aWRlU2NhbGFyKEFyW3NdLCBmKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICBCcltzXSA9IGRpdmlkZVNjYWxhcihCcltzXSwgZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUludiA9IGNyZWF0ZUludjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlS3JvbiA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2tyb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ211bHRpcGx5U2NhbGFyJ107XG52YXIgY3JlYXRlS3JvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcjtcblxuICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiAyIG1hdHJpY2VzIG9yIHZlY3RvcnMuXG4gICAgICpcbiAgICAgKiBOT1RFOiBJZiBhIG9uZSBkaW1lbnNpb25hbCB2ZWN0b3IgLyBtYXRyaXggaXMgZ2l2ZW4sIGl0IHdpbGwgYmVcbiAgICAgKiB3cmFwcGVkIHNvIGl0cyB0d28gZGltZW5zaW9ucy5cbiAgICAgKiBTZWUgdGhlIGV4YW1wbGVzLlxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgbWF0aC5rcm9uKHgsIHkpXG4gICAgICpcbiAgICAgKiBFeGFtcGxlczpcbiAgICAgKlxuICAgICAqICAgIG1hdGgua3JvbihbWzEsIDBdLCBbMCwgMV1dLCBbWzEsIDJdLCBbMywgNF1dKVxuICAgICAqICAgIC8vIHJldHVybnMgWyBbIDEsIDIsIDAsIDAgXSwgWyAzLCA0LCAwLCAwIF0sIFsgMCwgMCwgMSwgMiBdLCBbIDAsIDAsIDMsIDQgXSBdXG4gICAgICpcbiAgICAgKiAgICBtYXRoLmtyb24oWzEsMV0sIFsyLDMsNF0pXG4gICAgICogICAgLy8gcmV0dXJucyBbIFsgMiwgMywgNCwgMiwgMywgNCBdIF1cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvOlxuICAgICAqXG4gICAgICogICAgbXVsdGlwbHksIGRvdCwgY3Jvc3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geSAgICAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgICBSZXR1cm5zIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5LnRvQXJyYXkoKSkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2tyb24oeCwgeS50b0FycmF5KCkpKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBfa3JvblxuICB9KTtcbiAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiB0d28gbWF0cmljZXMgLyB2ZWN0b3JzXG4gICAgICogQHBhcmFtIHtBcnJheX0gYSAgRmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gYiAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgeCBhbmQgeVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgZnVuY3Rpb24gX2tyb24oYSwgYikge1xuICAgIC8vIERlYWwgd2l0aCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgbWF0cmljaWVzLlxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYSkubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4XG4gICAgICBhID0gW2FdO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYikubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4XG4gICAgICBiID0gW2JdO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYSkubGVuZ3RoID4gMiB8fCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoYikubGVuZ3RoID4gMikge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgd2l0aCBkaW1lbnNpb25zIGdyZWF0ZXIgdGhlbiAyIGFyZSBub3Qgc3VwcG9ydGVkIGV4cGVjdGVkICcgKyAnKFNpemUgeCA9ICcgKyBKU09OLnN0cmluZ2lmeShhLmxlbmd0aCkgKyAnLCB5ID0gJyArIEpTT04uc3RyaW5naWZ5KGIubGVuZ3RoKSArICcpJyk7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBbXTtcbiAgICB2YXIgciA9IFtdO1xuICAgIHJldHVybiBhLm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGIubWFwKGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHIgPSBbXTtcbiAgICAgICAgdC5wdXNoKHIpO1xuICAgICAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICByZXR1cm4gYi5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiByLnB1c2gobXVsdGlwbHlTY2FsYXIoeSwgeCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pICYmIHQ7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVLcm9uID0gY3JlYXRlS3JvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFwID0gdm9pZCAwO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbWFwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTWFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5tYXAoeCwgY2FsbGJhY2spXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm1hcChbMSwgMiwgM10sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAqICAgICAgcmV0dXJuIHZhbHVlICogdmFsdWVcbiAgICogICAgfSkgIC8vIHJldHVybnMgWzEsIDQsIDldXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmaWx0ZXIsIGZvckVhY2gsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBUaGUgbWF0cml4IHRvIGl0ZXJhdGUgb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIG1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqIEByZXR1cm4ge01hdHJpeCB8IGFycmF5fSAgICAgVHJhbnNmb3JtZWQgbWFwIG9mIHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9tYXAsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHgubWFwKGNhbGxiYWNrKTtcbiAgICB9XG4gIH0pO1xufSk7XG4vKipcbiAqIE1hcCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVNYXAgPSBjcmVhdGVNYXA7XG5cbmZ1bmN0aW9uIF9tYXAoYXJyYXksIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDMgb3IgLTFcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVPbmVzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdvbmVzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlT25lcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1hdHJpeCBmaWxsZWQgd2l0aCBvbmVzLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yXG4gICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5vbmVzKG0pXG4gICAqICAgIG1hdGgub25lcyhtLCBmb3JtYXQpXG4gICAqICAgIG1hdGgub25lcyhtLCBuKVxuICAgKiAgICBtYXRoLm9uZXMobSwgbiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG5dKVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG5dLCBmb3JtYXQpXG4gICAqICAgIG1hdGgub25lcyhbbSwgbiwgcCwgLi4uXSlcbiAgICogICAgbWF0aC5vbmVzKFttLCBuLCBwLCAuLi5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm9uZXMoMykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMSwgMV1cbiAgICogICAgbWF0aC5vbmVzKDMsIDIpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAxXSwgWzEsIDFdLCBbMSwgMV1dXG4gICAqICAgIG1hdGgub25lcygzLCAyLCAnZGVuc2UnKSAgICAgICAvLyByZXR1cm5zIERlbnNlIE1hdHJpeCBbWzEsIDFdLCBbMSwgMV0sIFsxLCAxXV1cbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgbWF0aC5vbmVzKG1hdGguc2l6ZShBKSkgICAgICAgLy8gcmV0dXJucyBbWzEsIDEsIDFdLCBbMSwgMSwgMV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICB6ZXJvcywgaWRlbnRpdHksIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgQXJyYXl9IHNpemUgICAgVGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXggfCBudW1iZXJ9ICBBIG1hdHJpeCBmaWxsZWQgd2l0aCBvbmVzXG4gICAqL1xuICByZXR1cm4gdHlwZWQoJ29uZXMnLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IF9vbmVzKFtdKSA6IF9vbmVzKFtdLCAnZGVmYXVsdCcpO1xuICAgIH0sXG4gICAgLy8gbWF0aC5vbmVzKG0sIG4sIHAsIC4uLiwgZm9ybWF0KVxuICAgIC8vIFRPRE86IG1vcmUgYWNjdXJhdGUgc2lnbmF0dXJlICcuLi5udW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZycgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyB0aGlzXG4gICAgJy4uLm51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclN0cmluZyhzaXplKSB7XG4gICAgICB2YXIgbGFzdCA9IHNpemVbc2l6ZS5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5wb3AoKTtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsIGZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScpIHtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsICdkZWZhdWx0Jyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBBcnJheTogX29uZXMsXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgdmFyIGZvcm1hdCA9IHNpemUuc3RvcmFnZSgpO1xuICAgICAgcmV0dXJuIF9vbmVzKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfb25lcyhzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ3JlYXRlIGFuIEFycmF5IG9yIE1hdHJpeCB3aXRoIG9uZXNcbiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdD0nZGVmYXVsdCddXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfb25lcyhzaXplLCBmb3JtYXQpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxO1xuXG4gICAgX3ZhbGlkYXRlKHNpemUpO1xuXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gcmV0dXJuIGEgbWF0cml4XG4gICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkucmVzaXplKShhcnIsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzXG5cblxuICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IGZhbHNlO1xuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7XG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZS50b051bWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYXNCaWdOdW1iZXJzO1xuICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBvbmVzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU9uZXMgPSBjcmVhdGVPbmVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJ0aXRpb25TZWxlY3QgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3BhcnRpdGlvblNlbGVjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc051bWVyaWMnLCAnaXNOYU4nLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZVBhcnRpdGlvblNlbGVjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYyxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTixcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7XG4gIHZhciBhc2MgPSBjb21wYXJlO1xuXG4gIHZhciBkZXNjID0gZnVuY3Rpb24gZGVzYyhhLCBiKSB7XG4gICAgcmV0dXJuIC1jb21wYXJlKGEsIGIpO1xuICB9O1xuICAvKipcbiAgICogUGFydGl0aW9uLWJhc2VkIHNlbGVjdGlvbiBvZiBhbiBhcnJheSBvciAxRCBtYXRyaXguXG4gICAqIFdpbGwgZmluZCB0aGUga3RoIHNtYWxsZXN0IHZhbHVlLCBhbmQgbXV0YXRlcyB0aGUgaW5wdXQgYXJyYXkuXG4gICAqIFVzZXMgUXVpY2tzZWxlY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoeCwgaylcbiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFs1LCAxMCwgMV0sIDIpICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnQycsICdCJywgJ0EnLCAnRCddLCAxKSAvLyByZXR1cm5zICdCJ1xuICAgKlxuICAgKiAgICBmdW5jdGlvbiBzb3J0QnlMZW5ndGggKGEsIGIpIHtcbiAgICogICAgICByZXR1cm4gYS5sZW5ndGggLSBiLmxlbmd0aFxuICAgKiAgICB9XG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnTGFuZ2RvbicsICdUb20nLCAnU2FyYSddLCAyLCBzb3J0QnlMZW5ndGgpIC8vIHJldHVybnMgJ0xhbmdkb24nXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzb3J0XG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGsgICAgICAgICAgICBUaGUga3RoIHNtYWxsZXN0IHZhbHVlIHRvIGJlIHJldHJpZXZlZCB6ZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCAnYXNjJyB8ICdkZXNjJ30gW2NvbXBhcmU9J2FzYyddXG4gICAqICAgICAgICBBbiBvcHRpb25hbCBjb21wYXJhdG9yIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGFzXG4gICAqICAgICAgICBgY29tcGFyZShhLCBiKWAsIGFuZCBtdXN0IHJldHVybiAxIHdoZW4gYSA+IGIsIC0xIHdoZW4gYSA8IGIsXG4gICAqICAgICAgICBhbmQgMCB3aGVuIGEgPT0gYi5cbiAgICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUga3RoIGxvd2VzdCB2YWx1ZS5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlclN0cmluZyh4LCBrLCBjb21wYXJlKSB7XG4gICAgICBpZiAoY29tcGFyZSA9PT0gJ2FzYycpIHtcbiAgICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTtcbiAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIHJldHVybiBfcGFydGl0aW9uU2VsZWN0KHgsIGssIGRlc2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wYXJlIHN0cmluZyBtdXN0IGJlIFwiYXNjXCIgb3IgXCJkZXNjXCInKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBmdW5jdGlvbic6IF9wYXJ0aXRpb25TZWxlY3RcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3BhcnRpdGlvblNlbGVjdCh4LCBrLCBjb21wYXJlKSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGspIHx8IGsgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2sgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LnZhbHVlT2YoKSwgaywgY29tcGFyZSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LCBrLCBjb21wYXJlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFF1aWNrc2VsZWN0IGFsZ29yaXRobS5cbiAgICogQ29kZSBhZGFwdGVkIGZyb206XG4gICAqIGh0dHBzOi8vYmxvZy50ZWFtbGVhZG5ldC5jb20vMjAxMi8wNy9xdWljay1zZWxlY3QtYWxnb3JpdGhtLWZpbmQta3RoLWVsZW1lbnQuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGtcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHF1aWNrU2VsZWN0KGFyciwgaywgY29tcGFyZSkge1xuICAgIGlmIChrID49IGFyci5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignayBvdXQgb2YgYm91bmRzJyk7XG4gICAgfSAvLyBjaGVjayBmb3IgTmFOIHZhbHVlcyBzaW5jZSB0aGVzZSBjYW4gY2F1c2UgYW4gaW5maW5pdGUgd2hpbGUgbG9vcFxuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGlzTnVtZXJpYyhhcnJbaV0pICYmIGlzTmFOKGFycltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGFycltpXTsgLy8gcmV0dXJuIE5hTlxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmcm9tID0gMDtcbiAgICB2YXIgdG8gPSBhcnIubGVuZ3RoIC0gMTsgLy8gaWYgZnJvbSA9PSB0byB3ZSByZWFjaGVkIHRoZSBrdGggZWxlbWVudFxuXG4gICAgd2hpbGUgKGZyb20gPCB0bykge1xuICAgICAgdmFyIHIgPSBmcm9tO1xuICAgICAgdmFyIHcgPSB0bztcbiAgICAgIHZhciBwaXZvdCA9IGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAodG8gLSBmcm9tICsgMSkpICsgZnJvbV07IC8vIHN0b3AgaWYgdGhlIHJlYWRlciBhbmQgd3JpdGVyIG1lZXRzXG5cbiAgICAgIHdoaWxlIChyIDwgdykge1xuICAgICAgICAvLyBhcnJbcl0gPj0gcGl2b3RcbiAgICAgICAgaWYgKGNvbXBhcmUoYXJyW3JdLCBwaXZvdCkgPj0gMCkge1xuICAgICAgICAgIC8vIHB1dCB0aGUgbGFyZ2UgdmFsdWVzIGF0IHRoZSBlbmRcbiAgICAgICAgICB2YXIgdG1wID0gYXJyW3ddO1xuICAgICAgICAgIGFyclt3XSA9IGFycltyXTtcbiAgICAgICAgICBhcnJbcl0gPSB0bXA7XG4gICAgICAgICAgLS13O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRoZSB2YWx1ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHBpdm90LCBza2lwXG4gICAgICAgICAgKytyO1xuICAgICAgICB9XG4gICAgICB9IC8vIGlmIHdlIHN0ZXBwZWQgdXAgKHIrKykgd2UgbmVlZCB0byBzdGVwIG9uZSBkb3duIChhcnJbcl0gPiBwaXZvdClcblxuXG4gICAgICBpZiAoY29tcGFyZShhcnJbcl0sIHBpdm90KSA+IDApIHtcbiAgICAgICAgLS1yO1xuICAgICAgfSAvLyB0aGUgciBwb2ludGVyIGlzIG9uIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGsgZWxlbWVudHNcblxuXG4gICAgICBpZiAoayA8PSByKSB7XG4gICAgICAgIHRvID0gcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb20gPSByICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyW2tdO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFydGl0aW9uU2VsZWN0ID0gY3JlYXRlUGFydGl0aW9uU2VsZWN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9ub29wXCIpO1xuXG52YXIgbmFtZSA9ICdyYW5nZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCcsICc/YmlnbnVtYmVyJywgJ3NtYWxsZXInLCAnc21hbGxlckVxJywgJ2xhcmdlcicsICdsYXJnZXJFcSddO1xudmFyIGNyZWF0ZVJhbmdlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBzbWFsbGVyRXEgPSBfcmVmLnNtYWxsZXJFcSxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgbGFyZ2VyRXEgPSBfcmVmLmxhcmdlckVxO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYXJyYXkgZnJvbSBhIHJhbmdlLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgcmFuZ2UgZW5kIGlzIGV4Y2x1ZGVkLiBUaGlzIGNhbiBiZSBjdXN0b21pemVkIGJ5IHByb3ZpZGluZ1xuICAgKiBhbiBleHRyYSBwYXJhbWV0ZXIgYGluY2x1ZGVFbmRgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmdlKHN0ciBbLCBpbmNsdWRlRW5kXSkgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSBmcm9tIGEgc3RyaW5nLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIHN0cmluZyBjb250YWlucyB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGVkIGJ5IGEgY29sb24uXG4gICAqICAgICBtYXRoLnJhbmdlKHN0YXJ0LCBlbmQgWywgaW5jbHVkZUVuZF0pICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSB3aXRoIHN0YXJ0IGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIGFuZCBhIHN0ZXAgc2l6ZSBvZiAxLlxuICAgKiAgICAgbWF0aC5yYW5nZShzdGFydCwgZW5kLCBzdGVwIFssIGluY2x1ZGVFbmRdKSAgLy8gQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBzdGFydCwgc3RlcCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBlbmQuXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAtIGBzdHI6IHN0cmluZ2BcbiAgICogICBBIHN0cmluZyAnc3RhcnQ6ZW5kJyBvciAnc3RhcnQ6c3RlcDplbmQnXG4gICAqIC0gYHN0YXJ0OiB7bnVtYmVyIHwgQmlnTnVtYmVyfWBcbiAgICogICBTdGFydCBvZiB0aGUgcmFuZ2VcbiAgICogLSBgZW5kOiBudW1iZXIgfCBCaWdOdW1iZXJgXG4gICAqICAgRW5kIG9mIHRoZSByYW5nZSwgZXhjbHVkZWQgYnkgZGVmYXVsdCwgaW5jbHVkZWQgd2hlbiBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlXG4gICAqIC0gYHN0ZXA6IG51bWJlciB8IEJpZ051bWJlcmBcbiAgICogICBTdGVwIHNpemUuIERlZmF1bHQgdmFsdWUgaXMgMS5cbiAgICogLSBgaW5jbHVkZUVuZDogYm9vbGVhbmBcbiAgICogICBPcHRpb24gdG8gc3BlY2lmeSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIGVuZCBvciBub3QuIEZhbHNlIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5nZSgyLCA2KSAgICAgICAgLy8gWzIsIDMsIDQsIDVdXG4gICAqICAgICBtYXRoLnJhbmdlKDIsIC0zLCAtMSkgICAvLyBbMiwgMSwgMCwgLTEsIC0yXVxuICAgKiAgICAgbWF0aC5yYW5nZSgnMjoxOjYnKSAgICAgLy8gWzIsIDMsIDQsIDVdXG4gICAqICAgICBtYXRoLnJhbmdlKDIsIDYsIHRydWUpICAvLyBbMiwgMywgNCwgNSwgNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBvbmVzLCB6ZXJvcywgc2l6ZSwgc3Vic2V0XG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gYXJncyAgIFBhcmFtZXRlcnMgZGVzY3JpYmluZyB0aGUgcmFuZ2VzIGBzdGFydGAsIGBlbmRgLCBhbmQgb3B0aW9uYWwgYHN0ZXBgLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmFuZ2VcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gVE9ETzogc2ltcGxpZnkgc2lnbmF0dXJlcyB3aGVuIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIGRlZmF1bHQgdmFsdWVzIGFuZCBvcHRpb25hbCBhcmd1bWVudHNcbiAgICAvLyBUT0RPOiBhIG51bWJlciBvciBib29sZWFuIHNob3VsZCBub3QgYmUgY29udmVydGVkIHRvIHN0cmluZyBoZXJlXG4gICAgc3RyaW5nOiBfc3RyUmFuZ2UsXG4gICAgJ3N0cmluZywgYm9vbGVhbic6IF9zdHJSYW5nZSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgMSkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgcmV0dXJuIF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIDEpKSA6IF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgMSkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHtcbiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfcmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfcmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIEJpZ051bWJlciA9IHN0YXJ0LmNvbnN0cnVjdG9yO1xuICAgICAgcmV0dXJuIF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgcmV0dXJuIF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gc3RhcnQuY29uc3RydWN0b3I7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX2JpZ1JhbmdlSW5jKHN0YXJ0LCBlbmQsIG5ldyBCaWdOdW1iZXIoMSkpKSA6IF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCaWdOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHtcbiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfYmlnUmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfYmlnUmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfb3V0KGFycikge1xuICAgIGlmIChjb25maWcubWF0cml4ID09PSAnTWF0cml4Jykge1xuICAgICAgcmV0dXJuIG1hdHJpeCA/IG1hdHJpeChhcnIpIDogKDAsIF9ub29wLm5vTWF0cml4KSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICBmdW5jdGlvbiBfc3RyUmFuZ2Uoc3RyLCBpbmNsdWRlRW5kKSB7XG4gICAgdmFyIHIgPSBfcGFyc2Uoc3RyKTtcblxuICAgIGlmICghcikge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTdHJpbmcgXCInICsgc3RyICsgJ1wiIGlzIG5vIHZhbGlkIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgdmFyIGZuO1xuXG4gICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICBpZiAoYmlnbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKDAsIF9ub29wLm5vQmlnbnVtYmVyKSgpO1xuICAgICAgfVxuXG4gICAgICBmbiA9IGluY2x1ZGVFbmQgPyBfYmlnUmFuZ2VJbmMgOiBfYmlnUmFuZ2VFeDtcbiAgICAgIHJldHVybiBfb3V0KGZuKGJpZ251bWJlcihyLnN0YXJ0KSwgYmlnbnVtYmVyKHIuZW5kKSwgYmlnbnVtYmVyKHIuc3RlcCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4gPSBpbmNsdWRlRW5kID8gX3JhbmdlSW5jIDogX3JhbmdlRXg7XG4gICAgICByZXR1cm4gX291dChmbihyLnN0YXJ0LCByLmVuZCwgci5zdGVwKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHdoaWxlIChzbWFsbGVyKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHdoaWxlIChsYXJnZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIG51bWJlcnMuIEVuZCBpcyBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgeCA9IHN0YXJ0O1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICB3aGlsZSAoc21hbGxlckVxKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggKz0gc3RlcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJhbmdlIHdpdGggYmlnIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciB6ZXJvID0gYmlnbnVtYmVyKDApO1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcC5ndCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKHNtYWxsZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ID0geC5wbHVzKHN0ZXApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcC5sdCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKGxhcmdlcih4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIGJpZyBudW1iZXJzLiBFbmQgaXMgaW5jbHVkZWRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBlbmRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0ZXBcbiAgICogQHJldHVybnMge0FycmF5fSByYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9iaWdSYW5nZUluYyhzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgdmFyIHplcm8gPSBiaWdudW1iZXIoMCk7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIHggPSBzdGFydDtcblxuICAgIGlmIChzdGVwLmd0KHplcm8pKSB7XG4gICAgICB3aGlsZSAoc21hbGxlckVxKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCA9IHgucGx1cyhzdGVwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAubHQoemVybykpIHtcbiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgcmFuZ2UsXG4gICAqIFRoZSBzdHJpbmcgY29udGFpbnMgdGhlIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi5cbiAgICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmFuZ2UsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEZvciBleGFtcGxlIHN0cj0nMDoyOjExJy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJuIHt7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHN0ZXA6IG51bWJlcn0gfCBudWxsfSByYW5nZSBPYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIHN0YXJ0LCBlbmQsIHN0ZXBcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcGFyc2Uoc3RyKSB7XG4gICAgdmFyIGFyZ3MgPSBzdHIuc3BsaXQoJzonKTsgLy8gbnVtYmVyXG5cbiAgICB2YXIgbnVtcyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIC8vIHVzZSBOdW1iZXIgYW5kIG5vdCBwYXJzZUZsb2F0IGFzIE51bWJlciByZXR1cm5zIE5hTiBvbiBpbnZhbGlkIGdhcmJhZ2UgaW4gdGhlIHN0cmluZ1xuICAgICAgcmV0dXJuIE51bWJlcihhcmcpO1xuICAgIH0pO1xuICAgIHZhciBpbnZhbGlkID0gbnVtcy5zb21lKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgIHJldHVybiBpc05hTihudW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAobnVtcy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogbnVtc1swXSxcbiAgICAgICAgICBlbmQ6IG51bXNbMV0sXG4gICAgICAgICAgc3RlcDogMVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IG51bXNbMF0sXG4gICAgICAgICAgZW5kOiBudW1zWzJdLFxuICAgICAgICAgIHN0ZXA6IG51bXNbMV1cbiAgICAgICAgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2UgPSBjcmVhdGVSYW5nZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzaGFwZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3Jlc2hhcGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNJbnRlZ2VyJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVJlc2hhcGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogUmVzaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnNcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIHNpemVzKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbMSwgMiwgMywgNCwgNSwgNl0sIFsyLCAzXSlcbiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgIFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbMSwgNF0pXG4gICAqICAgICAvLyByZXR1cm5zIEFycmF5ICBbWzEsIDIsIDMsIDRdXVxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFs0XSlcbiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDMsIDRdXG4gICAqXG4gICAqICAgICBjb25zdCB4ID0gbWF0aC5tYXRyaXgoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdKVxuICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIFsyLCAyLCAyXSlcbiAgICogICAgIC8vIHJldHVybnMgTWF0cml4IFtbWzEsIDJdLCBbMywgNF1dLCBbWzUsIDZdLCBbNywgOF1dXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpemUsIHNxdWVlemUsIHJlc2l6ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0geCAgTWF0cml4IHRvIGJlIHJlc2hhcGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemVzICAgICAgICBPbmUgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpbnRlZ3JhbCBzaXplcyBmb3JcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggZGltZW5zaW9uXG4gICAqXG4gICAqIEByZXR1cm4geyogfCBBcnJheSB8IE1hdHJpeH0gICBBIHJlc2hhcGVkIGNsb25lIG9mIG1hdHJpeCBgeGBcbiAgICpcbiAgICogQHRocm93cyB7VHlwZUVycm9yfSAgICAgICAgICAgIElmIGBzaXplc2AgZG9lcyBub3QgY29udGFpbiBzb2xlbHkgaW50ZWdlcnNcbiAgICogQHRocm93cyB7RGltZW5zaW9uRXJyb3J9ICAgICAgIElmIHRoZSBwcm9kdWN0IG9mIHRoZSBuZXcgZGltZW5zaW9uIHNpemVzIGRvZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBlcXVhbCB0aGF0IG9mIHRoZSBvbGQgb25lc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHNpemVzKSB7XG4gICAgICBpZiAoeC5yZXNoYXBlKSB7XG4gICAgICAgIHJldHVybiB4LnJlc2hhcGUoc2l6ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX2FycmF5LnJlc2hhcGUpKHgudmFsdWVPZigpLCBzaXplcykpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgc2l6ZXMpIHtcbiAgICAgIHNpemVzLmZvckVhY2goZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIoc2l6ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUgZm9yIGRpbWVuc2lvbjogJyArIHNpemUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoMCwgX2FycmF5LnJlc2hhcGUpKHgsIHNpemVzKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2hhcGUgPSBjcmVhdGVSZXNoYXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNpemUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXNpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVJlc2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBSZXNpemUgYSBtYXRyaXhcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNpemUoeCwgc2l6ZSlcbiAgICogICAgIG1hdGgucmVzaXplKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgMywgNCwgNV0sIFszXSkgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDNdXG4gICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgM10sIFs1XSwgMCkgICAgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDMsIDAsIDBdXG4gICAqICAgICBtYXRoLnJlc2l6ZSgyLCBbMiwgM10sIDApICAgICAgICAgLy8gcmV0dXJucyBNYXRyaXggW1syLCAwLCAwXSwgWzAsIDAsIDBdXVxuICAgKiAgICAgbWF0aC5yZXNpemUoXCJoZWxsb1wiLCBbOF0sIFwiIVwiKSAgICAvLyByZXR1cm5zIHN0cmluZyAnaGVsbG8hISEnXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2l6ZSwgc3F1ZWV6ZSwgc3Vic2V0LCByZXNoYXBlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCAqfSB4ICAgICAgICAgICAgIE1hdHJpeCB0byBiZSByZXNpemVkXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHNpemUgICAgICAgICAgICAgIE9uZSBkaW1lbnNpb25hbCBhcnJheSB3aXRoIG51bWJlcnNcbiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtkZWZhdWx0VmFsdWU9MF0gWmVybyBieSBkZWZhdWx0LCBleGNlcHQgaW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvZiBhIHN0cmluZywgaW4gdGhhdCBjYXNlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9ICcgJ1xuICAgKiBAcmV0dXJuIHsqIHwgQXJyYXkgfCBNYXRyaXh9IEEgcmVzaXplZCBjbG9uZSBvZiBtYXRyaXggYHhgXG4gICAqL1xuICAvLyBUT0RPOiByZXdvcmsgcmVzaXplIHRvIGEgdHlwZWQtZnVuY3Rpb25cbiAgcmV0dXJuIGZ1bmN0aW9uIHJlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMiAmJiBhcmd1bWVudHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yKCdyZXNpemUnLCBhcmd1bWVudHMubGVuZ3RoLCAyLCAzKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkpIHtcbiAgICAgIHNpemUgPSBzaXplLnZhbHVlT2YoKTsgLy8gZ2V0IEFycmF5XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHNpemVbMF0pKSB7XG4gICAgICAvLyBjb252ZXJ0IGJpZ251bWJlcnMgdG8gbnVtYmVyc1xuICAgICAgc2l6ZSA9IHNpemUubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gISgwLCBfaXMuaXNCaWdOdW1iZXIpKHZhbHVlKSA/IHZhbHVlIDogdmFsdWUudG9OdW1iZXIoKTtcbiAgICAgIH0pO1xuICAgIH0gLy8gY2hlY2sgeCBpcyBhIE1hdHJpeFxuXG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgIC8vIHVzZSBvcHRpbWl6ZWQgbWF0cml4IGltcGxlbWVudGF0aW9uLCByZXR1cm4gY29weVxuICAgICAgcmV0dXJuIHgucmVzaXplKHNpemUsIGRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB4ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gcmVzaXplIHN0cmluZ1xuICAgICAgcmV0dXJuIF9yZXNpemVTdHJpbmcoeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICB9IC8vIGNoZWNrIHJlc3VsdCBzaG91bGQgYmUgYSBtYXRyaXhcblxuXG4gICAgdmFyIGFzTWF0cml4ID0gQXJyYXkuaXNBcnJheSh4KSA/IGZhbHNlIDogY29uZmlnLm1hdHJpeCAhPT0gJ0FycmF5JztcblxuICAgIGlmIChzaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gb3V0cHV0IGEgc2NhbGFyXG4gICAgICB3aGlsZSAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgICB4ID0geFswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IGFuIGFycmF5L21hdHJpeFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHggPSBbeF07XG4gICAgICB9XG5cbiAgICAgIHggPSAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgICB2YXIgcmVzID0gKDAsIF9hcnJheS5yZXNpemUpKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICByZXR1cm4gYXNNYXRyaXggPyBtYXRyaXgocmVzKSA6IHJlcztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXNpemUgYSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdENoYXI9JyAnXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfcmVzaXplU3RyaW5nKHN0ciwgc2l6ZSwgZGVmYXVsdENoYXIpIHtcbiAgICBpZiAoZGVmYXVsdENoYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0Q2hhciAhPT0gJ3N0cmluZycgfHwgZGVmYXVsdENoYXIubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmF1bHRDaGFyID0gJyAnO1xuICAgIH1cblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCwgMSk7XG4gICAgfVxuXG4gICAgdmFyIGxlbiA9IHNpemVbMF07XG5cbiAgICBpZiAodHlwZW9mIGxlbiAhPT0gJ251bWJlcicgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobGVuKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgIH1cblxuICAgIGlmIChzdHIubGVuZ3RoID4gbGVuKSB7XG4gICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBsZW4pO1xuICAgIH0gZWxzZSBpZiAoc3RyLmxlbmd0aCA8IGxlbikge1xuICAgICAgdmFyIHJlcyA9IHN0cjtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbGVuIC0gc3RyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgcmVzICs9IGRlZmF1bHRDaGFyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2l6ZSA9IGNyZWF0ZVJlc2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm93ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdyb3cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG52YXIgY3JlYXRlUm93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSByb3cgZnJvbSBhIE1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yb3codmFsdWUsIGluZGV4KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgcm93XG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5yb3coZCwgMSkgLy8gcmV0dXJucyBbWzMsIDRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IH0gdmFsdWUgICBBbiBhcnJheSBvciBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyAgICAgICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSByb3dcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICAgICAgVGhlIHJldHJpZXZlZCByb3dcbiAgICovXG4gIHZhciByb3cgPSB0eXBlZChuYW1lLCB7XG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX3JvdyxcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHZhbHVlLCByb3cpIHtcbiAgICAgIHJldHVybiBfcm93KG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKSwgcm93KS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJvdztcbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgcm93IG9mIGEgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4IH0gdmFsdWUgIEEgbWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgICAgIFRoZSBpbmRleCBvZiB0aGUgcm93XG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgIFRoZSByZXRyaWV2ZWQgcm93XG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9yb3codmFsdWUsIHJvdykge1xuICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICBpZiAodmFsdWUuc2l6ZSgpLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25hbCBtYXRyaXggaXMgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShyb3csIHZhbHVlLnNpemUoKVswXSk7XG4gICAgdmFyIGNvbHVtblJhbmdlID0gcmFuZ2UoMCwgdmFsdWUuc2l6ZSgpWzFdKTtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgocm93LCBjb2x1bW5SYW5nZSk7XG4gICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3cgPSBjcmVhdGVSb3c7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpemUgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAnc2l6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCddO1xudmFyIGNyZWF0ZVNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgbWF0cml4IG9yIHNjYWxhci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zaXplKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zaXplKDIuMykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtdXG4gICAqICAgICBtYXRoLnNpemUoJ2hlbGxvIHdvcmxkJykgICAgICAgIC8vIHJldHVybnMgWzExXVxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgIG1hdGguc2l6ZShBKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMiwgM11cbiAgICogICAgIG1hdGguc2l6ZShtYXRoLnJhbmdlKDEsNikpICAgICAgLy8gcmV0dXJucyBbNV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICByZXNpemUsIHNxdWVlemUsIHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG1hdHJpeFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gQSB2ZWN0b3Igd2l0aCBzaXplIG9mIGB4YC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKHguc2l6ZSgpKTtcbiAgICB9LFxuICAgIEFycmF5OiBfYXJyYXkuYXJyYXlTaXplLFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW3gubGVuZ3RoXSA6IG1hdHJpeChbeC5sZW5ndGhdKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyIHwgVW5pdCB8IGJvb2xlYW4gfCBudWxsJzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlclVuaXRCb29sZWFuTnVsbCh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW10gOiBtYXRyaXggPyBtYXRyaXgoW10pIDogKDAsIF9ub29wLm5vTWF0cml4KSgpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2l6ZSA9IGNyZWF0ZVNpemU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvcnQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzb3J0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ107XG52YXIgY3JlYXRlU29ydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmUsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWw7XG4gIHZhciBjb21wYXJlQXNjID0gY29tcGFyZTtcblxuICB2YXIgY29tcGFyZURlc2MgPSBmdW5jdGlvbiBjb21wYXJlRGVzYyhhLCBiKSB7XG4gICAgcmV0dXJuIC1jb21wYXJlKGEsIGIpO1xuICB9O1xuICAvKipcbiAgICogU29ydCB0aGUgaXRlbXMgaW4gYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zb3J0KHgpXG4gICAqICAgIG1hdGguc29ydCh4LCBjb21wYXJlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zb3J0KFs1LCAxMCwgMV0pIC8vIHJldHVybnMgWzEsIDUsIDEwXVxuICAgKiAgICBtYXRoLnNvcnQoWydDJywgJ0InLCAnQScsICdEJ10sIG1hdGguY29tcGFyZU5hdHVyYWwpXG4gICAqICAgIC8vIHJldHVybnMgWydBJywgJ0InLCAnQycsICdEJ11cbiAgICpcbiAgICogICAgZnVuY3Rpb24gc29ydEJ5TGVuZ3RoIChhLCBiKSB7XG4gICAqICAgICAgcmV0dXJuIGEubGVuZ3RoIC0gYi5sZW5ndGhcbiAgICogICAgfVxuICAgKiAgICBtYXRoLnNvcnQoWydMYW5nZG9uJywgJ1RvbScsICdTYXJhJ10sIHNvcnRCeUxlbmd0aClcbiAgICogICAgLy8gcmV0dXJucyBbJ1RvbScsICdTYXJhJywgJ0xhbmdkb24nXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmlsdGVyLCBmb3JFYWNoLCBtYXAsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8ICdhc2MnIHwgJ2Rlc2MnIHwgJ25hdHVyYWwnfSBbY29tcGFyZT0nYXNjJ11cbiAgICogICAgICAgIEFuIG9wdGlvbmFsIF9jb21wYXJhdG9yIGZ1bmN0aW9uIG9yIG5hbWUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYXNcbiAgICogICAgICAgIGBjb21wYXJlKGEsIGIpYCwgYW5kIG11c3QgcmV0dXJuIDEgd2hlbiBhID4gYiwgLTEgd2hlbiBhIDwgYixcbiAgICogICAgICAgIGFuZCAwIHdoZW4gYSA9PSBiLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgc29ydGVkIG1hdHJpeC5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICBfYXJyYXlJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIHguc29ydChjb21wYXJlQXNjKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIF9tYXRyaXhJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIG1hdHJpeCh4LnRvQXJyYXkoKS5zb3J0KGNvbXBhcmVBc2MpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBfY29tcGFyYXRvcikge1xuICAgICAgX2FycmF5SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiB4LnNvcnQoX2NvbXBhcmF0b3IpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBfY29tcGFyYXRvcikge1xuICAgICAgX21hdHJpeElzVmVjdG9yKHgpO1xuXG4gICAgICByZXR1cm4gbWF0cml4KHgudG9BcnJheSgpLnNvcnQoX2NvbXBhcmF0b3IpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5U3RyaW5nKHgsIG9yZGVyKSB7XG4gICAgICBfYXJyYXlJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIHguc29ydChfY29tcGFyYXRvcihvcmRlcikpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4U3RyaW5nKHgsIG9yZGVyKSB7XG4gICAgICBfbWF0cml4SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiBtYXRyaXgoeC50b0FycmF5KCkuc29ydChfY29tcGFyYXRvcihvcmRlcikpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29tcGFyYXRvciBmb3IgZ2l2ZW4gb3JkZXIgKCdhc2MnLCAnZGVzYycsICduYXR1cmFsJylcbiAgICogQHBhcmFtIHsnYXNjJyB8ICdkZXNjJyB8ICduYXR1cmFsJ30gb3JkZXJcbiAgICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgYSBfY29tcGFyYXRvciBmdW5jdGlvblxuICAgKi9cblxuICBmdW5jdGlvbiBfY29tcGFyYXRvcihvcmRlcikge1xuICAgIGlmIChvcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgIHJldHVybiBjb21wYXJlQXNjO1xuICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICdkZXNjJykge1xuICAgICAgcmV0dXJuIGNvbXBhcmVEZXNjO1xuICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICduYXR1cmFsJykge1xuICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyBcImFzY1wiLCBcImRlc2NcIiwgb3IgXCJuYXR1cmFsXCIgZXhwZWN0ZWQnKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHdoZXRoZXIgYW4gYXJyYXkgaXMgb25lIGRpbWVuc2lvbmFsXG4gICAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoaXMgaXMgbm90IHRoZSBjYXNlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2FycmF5SXNWZWN0b3IoYXJyYXkpIHtcbiAgICBpZiAoKDAsIF9hcnJheS5hcnJheVNpemUpKGFycmF5KS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25lIGRpbWVuc2lvbmFsIGFycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGEgbWF0cml4IGlzIG9uZSBkaW1lbnNpb25hbFxuICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZVxuICAgKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX21hdHJpeElzVmVjdG9yKG1hdHJpeCkge1xuICAgIGlmIChtYXRyaXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgZGltZW5zaW9uYWwgbWF0cml4IGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlU29ydCA9IGNyZWF0ZVNvcnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxcnRtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzcXJ0bSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ211bHRpcGx5JywgJ3NxcnQnLCAnc3VidHJhY3QnLCAnaW52JywgJ3NpemUnLCAnbWF4JywgJ2lkZW50aXR5J107XG52YXIgY3JlYXRlU3FydG0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBpbnYgPSBfcmVmLmludixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBtYXggPSBfcmVmLm1heCxcbiAgICAgIGlkZW50aXR5ID0gX3JlZi5pZGVudGl0eTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgYSBzcXVhcmUgbWF0cml4LlxuICAgKiBUaGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCBgWGAgb2YgYW5vdGhlciBtYXRyaXggYEFgIGlzIHN1Y2ggdGhhdCBgWCAqIFggPSBBYC5cbiAgICpcbiAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3F1YXJlX3Jvb3Rfb2ZfYV9tYXRyaXhcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgWCA9IG1hdGguc3FydG0oQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNxcnRtKFtbMSwgMl0sIFszLCA0XV0pIC8vIHJldHVybnMgW1stMiwgMV0sIFsxLjUsIC0wLjVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNxcnQsIHBvd1xuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gQSAgIFRoZSBzcXVhcmUgbWF0cml4IGBBYFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgbWF0cml4IGBBYFxuICAgKi9cbiAgdmFyIHNxcnRtID0gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KEEpIHtcbiAgICAgIHZhciBzaXplID0gKDAsIF9pcy5pc01hdHJpeCkoQSkgPyBBLnNpemUoKSA6ICgwLCBfYXJyYXkuYXJyYXlTaXplKShBKTtcblxuICAgICAgc3dpdGNoIChzaXplLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgLy8gU2luZ2xlIGVsZW1lbnQgQXJyYXkgfCBNYXRyaXhcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHNxcnQoQSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gVHdvLWRpbWVuc2lvbmFsIEFycmF5IHwgTWF0cml4XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGVubWFuQmVhdmVycyhBKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICB2YXIgX21heEl0ZXJhdGlvbnMgPSAxZTM7XG4gIHZhciBfdG9sZXJhbmNlID0gMWUtNjtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCB1c2luZyB0aGUgRGVubWFu4oCTQmVhdmVycyBpdGVyYXRpdmUgbWV0aG9kXG4gICAqXG4gICAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NxdWFyZV9yb290X29mX2FfbWF0cml4I0J5X0Rlbm1hbuKAk0JlYXZlcnNfaXRlcmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSBBICAgVGhlIHNxdWFyZSBtYXRyaXggYEFgXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgVGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBtYXRyaXggYEFgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9kZW5tYW5CZWF2ZXJzKEEpIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHZhciBZID0gQTtcbiAgICB2YXIgWiA9IGlkZW50aXR5KHNpemUoQSkpO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIFlrID0gWTtcbiAgICAgIFkgPSBtdWx0aXBseSgwLjUsIGFkZChZaywgaW52KFopKSk7XG4gICAgICBaID0gbXVsdGlwbHkoMC41LCBhZGQoWiwgaW52KFlrKSkpO1xuICAgICAgZXJyb3IgPSBtYXgoYWJzKHN1YnRyYWN0KFksIFlrKSkpO1xuXG4gICAgICBpZiAoZXJyb3IgPiBfdG9sZXJhbmNlICYmICsraXRlcmF0aW9ucyA+IF9tYXhJdGVyYXRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29tcHV0aW5nIHNxdWFyZSByb290IG9mIG1hdHJpeDogaXRlcmF0aXZlIG1ldGhvZCBjb3VsZCBub3QgY29udmVyZ2UnKTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChlcnJvciA+IF90b2xlcmFuY2UpO1xuXG4gICAgcmV0dXJuIFk7XG4gIH1cblxuICByZXR1cm4gc3FydG07XG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydG0gPSBjcmVhdGVTcXJ0bTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3F1ZWV6ZSA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3F1ZWV6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVTcXVlZXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBTcXVlZXplIGEgbWF0cml4LCByZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguc3F1ZWV6ZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc3F1ZWV6ZShbM10pICAgICAgICAgICAvLyByZXR1cm5zIDNcbiAgICogICAgIG1hdGguc3F1ZWV6ZShbWzNdXSkgICAgICAgICAvLyByZXR1cm5zIDNcbiAgICpcbiAgICogICAgIGNvbnN0IEEgPSBtYXRoLnplcm9zKDMsIDEpICAgIC8vIHJldHVybnMgW1swXSwgWzBdLCBbMF1dIChzaXplIDN4MSlcbiAgICogICAgIG1hdGguc3F1ZWV6ZShBKSAgICAgICAgICAgICAvLyByZXR1cm5zIFswLCAwLCAwXSAoc2l6ZSAzKVxuICAgKlxuICAgKiAgICAgY29uc3QgQiA9IG1hdGguemVyb3MoMSwgMykgICAgLy8gcmV0dXJucyBbWzAsIDAsIDBdXSAoc2l6ZSAxeDMpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQikgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF0gKHNpemUgMylcbiAgICpcbiAgICogICAgIC8vIG9ubHkgaW5uZXIgYW5kIG91dGVyIGRpbWVuc2lvbnMgYXJlIHJlbW92ZWRcbiAgICogICAgIGNvbnN0IEMgPSBtYXRoLnplcm9zKDIsIDEsIDMpIC8vIHJldHVybnMgW1tbMCwgMCwgMF1dLCBbWzAsIDAsIDBdXV0gKHNpemUgMngxeDMpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQykgICAgICAgICAgICAgLy8gcmV0dXJucyBbW1swLCAwLCAwXV0sIFtbMCwgMCwgMF1dXSAoc2l6ZSAyeDF4MylcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgIE1hdHJpeCB0byBiZSBzcXVlZXplZFxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gU3F1ZWV6ZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5zcXVlZXplKSgoMCwgX29iamVjdC5jbG9uZSkoeCkpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgdmFyIHJlcyA9ICgwLCBfYXJyYXkuc3F1ZWV6ZSkoeC50b0FycmF5KCkpOyAvLyBGSVhNRTogcmV0dXJuIHRoZSBzYW1lIHR5cGUgb2YgbWF0cml4IGFzIHRoZSBpbnB1dFxuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXMpID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXVlZXplID0gY3JlYXRlU3F1ZWV6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3Vic2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogR2V0IG9yIHNldCBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBzdHJpbmcuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICogICAgIG1hdGguc3Vic2V0KHZhbHVlLCBpbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIGEgc3Vic2V0XG4gICAqICAgICBtYXRoLnN1YnNldCh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50IFssIGRlZmF1bHRWYWx1ZV0pICAvLyByZXBsYWNlIGEgc3Vic2V0XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgc3Vic2V0XG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleCgxLCAwKSkgICAgICAgIC8vIHJldHVybnMgM1xuICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleChbMCwgMV0sIDEpKSAgIC8vIHJldHVybnMgW1syXSwgWzRdXVxuICAgKlxuICAgKiAgICAgLy8gcmVwbGFjZSBhIHN1YnNldFxuICAgKiAgICAgY29uc3QgZSA9IFtdXG4gICAqICAgICBjb25zdCBmID0gbWF0aC5zdWJzZXQoZSwgbWF0aC5pbmRleCgwLCBbMCwgMl0pLCBbNSwgNl0pICAvLyBmID0gW1s1LCA2XV1cbiAgICogICAgIGNvbnN0IGcgPSBtYXRoLnN1YnNldChmLCBtYXRoLmluZGV4KDEsIDEpLCA3LCAwKSAgICAgICAgIC8vIGcgPSBbWzUsIDZdLCBbMCwgN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2l6ZSwgcmVzaXplLCBzcXVlZXplLCBpbmRleFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBtYXRyaXggIEFuIGFycmF5LCBtYXRyaXgsIG9yIHN0cmluZ1xuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleCAgICAgICAgICAgICAgICAgICAgIEFuIGluZGV4IGNvbnRhaW5pbmcgcmFuZ2VzIGZvciBlYWNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uXG4gICAqIEBwYXJhbSB7Kn0gW3JlcGxhY2VtZW50XSAgICAgICAgICAgICAgICAgQW4gYXJyYXksIG1hdHJpeCwgb3Igc2NhbGFyLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHByb3ZpZGVkLCB0aGUgc3Vic2V0IGlzIHJlcGxhY2VkIHdpdGggcmVwbGFjZW1lbnQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgc3Vic2V0IGlzIHJldHVybmVkXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT11bmRlZmluZWRdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLm1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGxlZnQgdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gRWl0aGVyIHRoZSByZXRyaWV2ZWQgc3Vic2V0IG9yIHRoZSB1cGRhdGVkIG1hdHJpeC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gZ2V0IHN1YnNldFxuICAgICdBcnJheSwgSW5kZXgnOiBmdW5jdGlvbiBBcnJheUluZGV4KHZhbHVlLCBpbmRleCkge1xuICAgICAgdmFyIG0gPSBtYXRyaXgodmFsdWUpO1xuICAgICAgdmFyIHN1YnNldCA9IG0uc3Vic2V0KGluZGV4KTsgLy8gcmV0dXJucyBhIE1hdHJpeFxuXG4gICAgICByZXR1cm4gaW5kZXguaXNTY2FsYXIoKSA/IHN1YnNldCA6IHN1YnNldC52YWx1ZU9mKCk7IC8vIHJldHVybiBhbiBBcnJheSAobGlrZSB0aGUgaW5wdXQpXG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCc6IGZ1bmN0aW9uIE1hdHJpeEluZGV4KHZhbHVlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBJbmRleCc6IF9nZXRPYmplY3RQcm9wZXJ0eSxcbiAgICAnc3RyaW5nLCBJbmRleCc6IF9nZXRTdWJzdHJpbmcsXG4gICAgLy8gc2V0IHN1YnNldFxuICAgICdBcnJheSwgSW5kZXgsIGFueSc6IGZ1bmN0aW9uIEFycmF5SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKS5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50LCB1bmRlZmluZWQpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgSW5kZXgsIGFueSwgYW55JzogZnVuY3Rpb24gQXJyYXlJbmRleEFueUFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKSkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCwgYW55JzogZnVuY3Rpb24gTWF0cml4SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmNsb25lKCkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCwgYW55LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhJbmRleEFueUFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5jbG9uZSgpLnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBJbmRleCwgc3RyaW5nJzogX3NldFN1YnN0cmluZyxcbiAgICAnc3RyaW5nLCBJbmRleCwgc3RyaW5nLCBzdHJpbmcnOiBfc2V0U3Vic3RyaW5nLFxuICAgICdPYmplY3QsIEluZGV4LCBhbnknOiBfc2V0T2JqZWN0UHJvcGVydHlcbiAgfSk7XG59KTtcbi8qKlxuICogUmV0cmlldmUgYSBzdWJzZXQgb2YgYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICBzdHJpbmcgZnJvbSB3aGljaCB0byBnZXQgYSBzdWJzdHJpbmdcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IHN1YnN0cmluZ1xuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVN1YnNldCA9IGNyZWF0ZVN1YnNldDtcblxuZnVuY3Rpb24gX2dldFN1YnN0cmluZyhzdHIsIGluZGV4KSB7XG4gIGlmICghKDAsIF9pcy5pc0luZGV4KShpbmRleCkpIHtcbiAgICAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luZGV4IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLmxlbmd0aCwgMSk7XG4gIH0gLy8gdmFsaWRhdGUgd2hldGhlciB0aGUgcmFuZ2UgaXMgb3V0IG9mIHJhbmdlXG5cblxuICB2YXIgc3RyTGVuID0gc3RyLmxlbmd0aDtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5taW4oKVswXSwgc3RyTGVuKTtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5tYXgoKVswXSwgc3RyTGVuKTtcbiAgdmFyIHJhbmdlID0gaW5kZXguZGltZW5zaW9uKDApO1xuICB2YXIgc3Vic3RyID0gJyc7XG4gIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICBzdWJzdHIgKz0gc3RyLmNoYXJBdCh2KTtcbiAgfSk7XG4gIHJldHVybiBzdWJzdHI7XG59XG4vKipcbiAqIFJlcGxhY2UgYSBzdWJzdHJpbmcgaW4gYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICBzdHJpbmcgdG8gYmUgcmVwbGFjZWRcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudCAgICBSZXBsYWNlbWVudCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdFZhbHVlXSBEZWZhdWx0IHZhbHVlIHRvIGJlIHVzZXMgd2hlbiByZXNpemluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdHJpbmcuIGlzICcgJyBieSBkZWZhdWx0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSByZXN1bHRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc2V0U3Vic3RyaW5nKHN0ciwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgLy8gVE9ETzogYmV0dGVyIGVycm9yIG1lc3NhZ2VcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGluZGV4LnNpemUoKS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGluZGV4LnNpemUoKS5sZW5ndGgsIDEpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgIT09ICdzdHJpbmcnIHx8IGRlZmF1bHRWYWx1ZS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRlZmF1bHRWYWx1ZSA9ICcgJztcbiAgfVxuXG4gIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbigwKTtcbiAgdmFyIGxlbiA9IHJhbmdlLnNpemUoKVswXTtcblxuICBpZiAobGVuICE9PSByZXBsYWNlbWVudC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHJhbmdlLnNpemUoKVswXSwgcmVwbGFjZW1lbnQubGVuZ3RoKTtcbiAgfSAvLyB2YWxpZGF0ZSB3aGV0aGVyIHRoZSByYW5nZSBpcyBvdXQgb2YgcmFuZ2VcblxuXG4gIHZhciBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4Lm1pbigpWzBdKTtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5tYXgoKVswXSk7IC8vIGNvcHkgdGhlIHN0cmluZyBpbnRvIGFuIGFycmF5IHdpdGggY2hhcmFjdGVyc1xuXG4gIHZhciBjaGFycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IHN0ci5jaGFyQXQoaSk7XG4gIH1cblxuICByYW5nZS5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgY2hhcnNbdl0gPSByZXBsYWNlbWVudC5jaGFyQXQoaVswXSk7XG4gIH0pOyAvLyBpbml0aWFsaXplIHVuZGVmaW5lZCBjaGFyYWN0ZXJzIHdpdGggYSBzcGFjZVxuXG4gIGlmIChjaGFycy5sZW5ndGggPiBzdHJMZW4pIHtcbiAgICBmb3IgKHZhciBfaSA9IHN0ckxlbiAtIDEsIF9sZW4gPSBjaGFycy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgaWYgKCFjaGFyc1tfaV0pIHtcbiAgICAgICAgY2hhcnNbX2ldID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFycy5qb2luKCcnKTtcbn1cbi8qKlxuICogUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9nZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4KSB7XG4gIGlmIChpbmRleC5zaXplKCkubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpbmRleC5zaXplKCksIDEpO1xuICB9XG5cbiAgdmFyIGtleSA9IGluZGV4LmRpbWVuc2lvbigwKTtcblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQgYXMgaW5kZXggdG8gcmV0cmlldmUgYW4gb2JqZWN0IHByb3BlcnR5Jyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkob2JqZWN0LCBrZXkpO1xufVxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gKiBAcGFyYW0geyp9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHsqfSBSZXR1cm5zIHRoZSB1cGRhdGVkIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLCAxKTtcbiAgfVxuXG4gIHZhciBrZXkgPSBpbmRleC5kaW1lbnNpb24oMCk7XG5cbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGFzIGluZGV4IHRvIHJldHJpZXZlIGFuIG9iamVjdCBwcm9wZXJ0eScpO1xuICB9IC8vIGNsb25lIHRoZSBvYmplY3QsIGFuZCBhcHBseSB0aGUgcHJvcGVydHkgdG8gdGhlIGNsb25lXG5cblxuICB2YXIgdXBkYXRlZCA9ICgwLCBfb2JqZWN0LmNsb25lKShvYmplY3QpO1xuICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KSh1cGRhdGVkLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgcmV0dXJuIHVwZGF0ZWQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVRyYWNlID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3RyYWNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGQnXTtcbnZhciBjcmVhdGVUcmFjZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHRyYWNlIG9mIGEgbWF0cml4OiB0aGUgc3VtIG9mIHRoZSBlbGVtZW50cyBvbiB0aGUgbWFpblxuICAgKiBkaWFnb25hbCBvZiBhIHNxdWFyZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC50cmFjZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC50cmFjZShbWzEsIDJdLCBbMywgNF1dKSAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtcbiAgICogICAgICBbMSwgMiwgM10sXG4gICAqICAgICAgWy0xLCAyLCAzXSxcbiAgICogICAgICBbMiwgMCwgM11cbiAgICogICAgXVxuICAgKiAgICBtYXRoLnRyYWNlKEEpIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGlhZ1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBBIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0cmFjZSBvZiBgeGBcbiAgICovXG4gIHJldHVybiB0eXBlZCgndHJhY2UnLCB7XG4gICAgQXJyYXk6IGZ1bmN0aW9uIF9hcnJheVRyYWNlKHgpIHtcbiAgICAgIC8vIHVzZSBkZW5zZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBfZGVuc2VUcmFjZShtYXRyaXgoeCkpO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBfc3BhcnNlVHJhY2UsXG4gICAgRGVuc2VNYXRyaXg6IF9kZW5zZVRyYWNlLFxuICAgIGFueTogX29iamVjdC5jbG9uZVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VUcmFjZShtKSB7XG4gICAgLy8gbWF0cml4IHNpemUgJiBkYXRhXG4gICAgdmFyIHNpemUgPSBtLl9zaXplO1xuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIC8vIHZlY3RvclxuICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgIC8vIHJldHVybiBkYXRhWzBdXG4gICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKShkYXRhWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsXG4gICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdO1xuICAgICAgICAgIHZhciBjb2xzID0gc2l6ZVsxXTtcblxuICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAvLyBjYWx1bGF0ZSBzdW1cbiAgICAgICAgICAgIHZhciBzdW0gPSAwOyAvLyBsb29wIGRpYWdvbmFsXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgIHN1bSA9IGFkZChzdW0sIGRhdGFbaV1baV0pO1xuICAgICAgICAgICAgfSAvLyByZXR1cm4gdHJhY2VcblxuXG4gICAgICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIG11bHRpIGRpbWVuc2lvbmFsXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSB0d28gZGltZW5zaW9uYWwgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlVHJhY2UobSkge1xuICAgIC8vIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7XG4gICAgdmFyIHNpemUgPSBtLl9zaXplOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyBtYXRyaXggbXVzdCBiZSBzcXVhcmVcblxuICAgIGlmIChyb3dzID09PSBjb2x1bW5zKSB7XG4gICAgICAvLyBjYWx1bGF0ZSBzdW1cbiAgICAgIHZhciBzdW0gPSAwOyAvLyBjaGVjayB3ZSBoYXZlIGRhdGEgKGF2b2lkIGxvb3BpbmcgY29sdW1ucylcblxuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGxvb3AgY29sdW1uc1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICAgICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuXG4gICAgICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgICAgICB2YXIgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3dcblxuICAgICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgICAgLy8gYWNjdW11bGF0ZSB2YWx1ZVxuICAgICAgICAgICAgICBzdW0gPSBhZGQoc3VtLCB2YWx1ZXNba10pOyAvLyBleGl0IGxvb3BcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGkgPiBqKSB7XG4gICAgICAgICAgICAgIC8vIGV4aXQgbG9vcCwgbm8gdmFsdWUgb24gdGhlIGRpYWdvbmFsIGZvciBjb2x1bW4galxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcmV0dXJuIHRyYWNlXG5cblxuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFjZSA9IGNyZWF0ZVRyYWNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFuc3Bvc2UgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAndHJhbnNwb3NlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVRyYW5zcG9zZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogVHJhbnNwb3NlIGEgbWF0cml4LiBBbGwgdmFsdWVzIG9mIHRoZSBtYXRyaXggYXJlIHJlZmxlY3RlZCBvdmVyIGl0c1xuICAgKiBtYWluIGRpYWdvbmFsLiBPbmx5IGFwcGxpY2FibGUgdG8gdHdvIGRpbWVuc2lvbmFsIG1hdHJpY2VzIGNvbnRhaW5pbmdcbiAgICogYSB2ZWN0b3IgKGkuZS4gaGF2aW5nIHNpemUgYFsxLG5dYCBvciBgW24sMV1gKS4gT25lIGRpbWVuc2lvbmFsXG4gICAqIHZlY3RvcnMgYW5kIHNjYWxhcnMgcmV0dXJuIHRoZSBpbnB1dCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudHJhbnNwb3NlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgIG1hdGgudHJhbnNwb3NlKEEpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbWzEsIDRdLCBbMiwgNV0sIFszLCA2XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBkaWFnLCBpbnYsIHN1YnNldCwgc3F1ZWV6ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgdHJhbnNwb3NlZFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICBUaGUgdHJhbnNwb3NlZCBtYXRyaXhcbiAgICovXG4gIHZhciB0cmFuc3Bvc2UgPSB0eXBlZCgndHJhbnNwb3NlJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gdHJhbnNwb3NlKG1hdHJpeCh4KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgLy8gbWF0cml4IHNpemVcbiAgICAgIHZhciBzaXplID0geC5zaXplKCk7IC8vIHJlc3VsdFxuXG4gICAgICB2YXIgYzsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cbiAgICAgIHN3aXRjaCAoc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIHZlY3RvclxuICAgICAgICAgIGMgPSB4LmNsb25lKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHJvd3MgYW5kIGNvbHVtbnNcbiAgICAgICAgICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICAgICAgICAgIHZhciBjb2x1bW5zID0gc2l6ZVsxXTsgLy8gY2hlY2sgY29sdW1uc1xuXG4gICAgICAgICAgICBpZiAoY29sdW1ucyA9PT0gMCkge1xuICAgICAgICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Nhbm5vdCB0cmFuc3Bvc2UgYSAyRCBtYXRyaXggd2l0aCBubyBjb2x1bW5zIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9IC8vIHByb2Nlc3Mgc3RvcmFnZSBmb3JtYXRcblxuXG4gICAgICAgICAgICBzd2l0Y2ggKHguc3RvcmFnZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnNlJzpcbiAgICAgICAgICAgICAgICBjID0gX2RlbnNlVHJhbnNwb3NlKHgsIHJvd3MsIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3NwYXJzZSc6XG4gICAgICAgICAgICAgICAgYyA9IF9zcGFyc2VUcmFuc3Bvc2UoeCwgcm93cywgY29sdW1ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWxcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgYSB2ZWN0b3Igb3IgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLl9zaXplKSArICcpJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0sXG4gICAgLy8gc2NhbGFyc1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VUcmFuc3Bvc2UobSwgcm93cywgY29sdW1ucykge1xuICAgIC8vIG1hdHJpeCBhcnJheVxuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gdHJhbnNwb3NlZCBtYXRyaXggZGF0YVxuXG4gICAgdmFyIHRyYW5zcG9zZWQgPSBbXTtcbiAgICB2YXIgdHJhbnNwb3NlZFJvdzsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gaW5pdGlhbGl6ZSByb3dcbiAgICAgIHRyYW5zcG9zZWRSb3cgPSB0cmFuc3Bvc2VkW2pdID0gW107IC8vIGxvb3Agcm93c1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBzZXQgZGF0YVxuICAgICAgICB0cmFuc3Bvc2VkUm93W2ldID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGFbaV1bal0pO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB0cmFuc3Bvc2VkLFxuICAgICAgc2l6ZTogW2NvbHVtbnMsIHJvd3NdLFxuICAgICAgZGF0YXR5cGU6IG0uX2RhdGF0eXBlXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlVHJhbnNwb3NlKG0sIHJvd3MsIGNvbHVtbnMpIHtcbiAgICAvLyBtYXRyaXggYXJyYXlzXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyByZXN1bHQgbWF0cmljZXNcblxuICAgIHZhciBjdmFsdWVzID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHJvdyBjb3VudHNcblxuICAgIHZhciB3ID0gW107XG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHJvd3M7IHgrKykge1xuICAgICAgd1t4XSA9IDA7XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciBwLCBsLCBqOyAvLyBsb29wIHZhbHVlcyBpbiBtYXRyaXhcblxuICAgIGZvciAocCA9IDAsIGwgPSBpbmRleC5sZW5ndGg7IHAgPCBsOyBwKyspIHtcbiAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gcm93XG4gICAgICB3W2luZGV4W3BdXSsrO1xuICAgIH0gLy8gY3VtdWxhdGl2ZSBzdW1cblxuXG4gICAgdmFyIHN1bSA9IDA7IC8vIGluaXRpYWxpemUgY3B0ciB3aXRoIHRoZSBjdW1tdWxhdGl2ZSBzdW0gb2Ygcm93IGNvdW50c1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyLnB1c2goc3VtKTsgLy8gdXBkYXRlIHN1bVxuXG4gICAgICBzdW0gKz0gd1tpXTsgLy8gdXBkYXRlIHdcblxuICAgICAgd1tpXSA9IGNwdHJbaV07XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyLnB1c2goc3VtKTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB2YWx1ZXMgJiBpbmRleCBpbiBjb2x1bW5cbiAgICAgIGZvciAodmFyIGswID0gcHRyW2pdLCBrMSA9IHB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gQyB2YWx1ZXMgJiBpbmRleFxuICAgICAgICB2YXIgcSA9IHdbaW5kZXhba11dKys7IC8vIENbaiwgaV0gPSBBW2ksIGpdXG5cbiAgICAgICAgY2luZGV4W3FdID0gajsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBtYXRyaXgpXG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIGN2YWx1ZXNbcV0gPSAoMCwgX29iamVjdC5jbG9uZSkodmFsdWVzW2tdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtjb2x1bW5zLCByb3dzXSxcbiAgICAgIGRhdGF0eXBlOiBtLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zcG9zZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFuc3Bvc2UgPSBjcmVhdGVUcmFuc3Bvc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVplcm9zID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICd6ZXJvcyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVplcm9zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yXG4gICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC56ZXJvcyhtKVxuICAgKiAgICBtYXRoLnplcm9zKG0sIGZvcm1hdClcbiAgICogICAgbWF0aC56ZXJvcyhtLCBuKVxuICAgKiAgICBtYXRoLnplcm9zKG0sIG4sIGZvcm1hdClcbiAgICogICAgbWF0aC56ZXJvcyhbbSwgbl0pXG4gICAqICAgIG1hdGguemVyb3MoW20sIG5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnplcm9zKDMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF1cbiAgICogICAgbWF0aC56ZXJvcygzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1swLCAwXSwgWzAsIDBdLCBbMCwgMF1dXG4gICAqICAgIG1hdGguemVyb3MoMywgJ2RlbnNlJykgICAgICAgICAvLyByZXR1cm5zIFswLCAwLCAwXVxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXVxuICAgKiAgICBtYXRoLnplcm9zKG1hdGguc2l6ZShBKSkgICAgICAgLy8gcmV0dXJucyBbWzAsIDAsIDBdLCBbMCwgMCwgMF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBvbmVzLCBpZGVudGl0eSwgc2l6ZSwgcmFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi5udW1iZXIgfCBBcnJheX0gc2l6ZSAgICBUaGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XSAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICAgIEEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScgPyBfemVyb3MoW10pIDogX3plcm9zKFtdLCAnZGVmYXVsdCcpO1xuICAgIH0sXG4gICAgLy8gbWF0aC56ZXJvcyhtLCBuLCBwLCAuLi4sIGZvcm1hdClcbiAgICAvLyBUT0RPOiBtb3JlIGFjY3VyYXRlIHNpZ25hdHVyZSAnLi4ubnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnIGFzIHNvb24gYXMgdHlwZWQtZnVuY3Rpb24gc3VwcG9ydHMgdGhpc1xuICAgICcuLi5udW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTdHJpbmcoc2l6ZSkge1xuICAgICAgdmFyIGxhc3QgPSBzaXplW3NpemUubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGFzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHNpemUucG9wKCk7XG4gICAgICAgIHJldHVybiBfemVyb3Moc2l6ZSwgZm9ybWF0KTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5Jykge1xuICAgICAgICByZXR1cm4gX3plcm9zKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF96ZXJvcyhzaXplLCAnZGVmYXVsdCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQXJyYXk6IF96ZXJvcyxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeChzaXplKSB7XG4gICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5zdG9yYWdlKCk7XG4gICAgICByZXR1cm4gX3plcm9zKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfemVyb3Moc2l6ZS52YWx1ZU9mKCksIGZvcm1hdCk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcnJheSBvciBNYXRyaXggd2l0aCB6ZXJvc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0PSdkZWZhdWx0J11cbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF96ZXJvcyhzaXplLCBmb3JtYXQpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMCkgOiAwO1xuXG4gICAgX3ZhbGlkYXRlKHNpemUpO1xuXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gcmV0dXJuIGEgbWF0cml4XG4gICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkucmVzaXplKShhcnIsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzXG5cblxuICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IGZhbHNlO1xuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7XG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZS50b051bWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYXNCaWdOdW1iZXJzO1xuICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiB6ZXJvcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pOyAvLyBUT0RPOiB6ZXJvcyBjb250YWlucyBhbG1vc3QgdGhlIHNhbWUgY29kZSBhcyBvbmVzLiBSZXVzZSB0aGlzP1xuXG5leHBvcnRzLmNyZWF0ZVplcm9zID0gY3JlYXRlWmVyb3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbWJpbmF0aW9ucyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tYmluYXRpb25zID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlci9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBuYW1lID0gJ2NvbWJpbmF0aW9ucyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbWJpbmF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYGtgIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYFxuICAgKiBwb3NzaWJpbGl0aWVzLlxuICAgKlxuICAgKiBDb21iaW5hdGlvbnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmNvbWJpbmF0aW9ucyhuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21iaW5hdGlvbnMoNywgNSkgLy8gcmV0dXJucyAyMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zV2l0aFJlcCwgcGVybXV0YXRpb25zLCBmYWN0b3JpYWxcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgIE51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IF9jb21iaW5hdGlvbnMuY29tYmluYXRpb25zTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcihuLCBrKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gbi5jb25zdHJ1Y3RvcjtcbiAgICAgIHZhciByZXN1bHQsIGk7XG4gICAgICB2YXIgbk1pbnVzayA9IG4ubWludXMoayk7XG4gICAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsuZ3QobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBuIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBvbmU7XG5cbiAgICAgIGlmIChrLmx0KG5NaW51c2spKSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUobk1pbnVzayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhrLnBsdXMoaSkpLmRpdmlkZWRCeShpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShrKTsgaSA9IGkucGx1cyhvbmUpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRpbWVzKG5NaW51c2sucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgY29sbGVjdGlvbiBpbiBjb21iaW5hdGlvbnNcblxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnMgPSBjcmVhdGVDb21iaW5hdGlvbnM7XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKG4pIHtcbiAgcmV0dXJuIG4uaXNJbnRlZ2VyKCkgJiYgbi5ndGUoMCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfcHJvZHVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9wcm9kdWN0XCIpO1xuXG52YXIgbmFtZSA9ICdjb21iaW5hdGlvbnNXaXRoUmVwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYGtgIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYFxuICAgKiBwb3NzaWJpbGl0aWVzLCBhbGxvd2luZyBpbmRpdmlkdWFsIG91dGNvbWVzIHRvIGJlIHJlcGVhdGVkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBDb21iaW5hdGlvbnNXaXRoUmVwIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbiArIGsgLTEuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tYmluYXRpb25zV2l0aFJlcChuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21iaW5hdGlvbnNXaXRoUmVwKDcsIDUpIC8vIHJldHVybnMgNDYyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIHBlcm11dGF0aW9ucywgZmFjdG9yaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBuICAgIFRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzZXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGsgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBOdW1iZXIgb2YgcG9zc2libGUgY29tYmluYXRpb25zIHdpdGggcmVwbGFjZW1lbnQuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihuLCBrKSB7XG4gICAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobikgfHwgbiA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9uc1dpdGhSZXAnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG4gPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiArIGsgLSAxJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrIDwgbiAtIDEpIHtcbiAgICAgICAgdmFyIF9wcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkobiwgbiArIGsgLSAxKTtcblxuICAgICAgICByZXR1cm4gX3Byb2RyYW5nZSAvICgwLCBfcHJvZHVjdC5wcm9kdWN0KSgxLCBrKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb2RyYW5nZSA9ICgwLCBfcHJvZHVjdC5wcm9kdWN0KShrICsgMSwgbiArIGsgLSAxKTtcbiAgICAgIHJldHVybiBwcm9kcmFuZ2UgLyAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoMSwgbiAtIDEpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIHZhciBCaWdOdW1iZXIgPSBuLmNvbnN0cnVjdG9yO1xuICAgICAgdmFyIHJlc3VsdCwgaTtcbiAgICAgIHZhciBvbmUgPSBuZXcgQmlnTnVtYmVyKDEpO1xuICAgICAgdmFyIG5NaW51c09uZSA9IG4ubWludXMob25lKTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuLmx0KG9uZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuICsgayAtIDEgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zV2l0aFJlcCcpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBvbmU7XG5cbiAgICAgIGlmIChrLmx0KG5NaW51c09uZSkpIHtcbiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShuTWludXNPbmUpOyBpID0gaS5wbHVzKG9uZSkpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudGltZXMoay5wbHVzKGkpKS5kaXZpZGVkQnkoaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUoayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhuTWludXNPbmUucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwID0gY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDtcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikge1xuICByZXR1cm4gbi5pc0ludGVnZXIoKSAmJiBuLmd0ZSgwKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yaWFsID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZhY3RvcmlhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdnYW1tYSddO1xudmFyIGNyZWF0ZUZhY3RvcmlhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBnYW1tYSA9IF9yZWYuZ2FtbWE7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGZhY3RvcmlhbCBvZiBhIHZhbHVlXG4gICAqXG4gICAqIEZhY3RvcmlhbCBvbmx5IHN1cHBvcnRzIGFuIGludGVnZXIgdmFsdWUgYXMgYXJndW1lbnQuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mYWN0b3JpYWwobilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKDUpICAgIC8vIHJldHVybnMgMTIwXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKDMpICAgIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zLCBjb21iaW5hdGlvbnNXaXRoUmVwLCBnYW1tYSwgcGVybXV0YXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBbiBpbnRlZ2VyIG51bWJlclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGZhY3RvcmlhbCBvZiBgbmBcbiAgICovXG4gIHZhciBmYWN0b3JpYWwgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobikge1xuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdhbW1hKG4gKyAxKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLmlzTmVnYXRpdmUoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnYW1tYShuLnBsdXMoMSkpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgobikge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKShuLCBmYWN0b3JpYWwpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmYWN0b3JpYWw7XG59KTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yaWFsID0gY3JlYXRlRmFjdG9yaWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVHYW1tYSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2dhbW1hJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtdWx0aXBseVNjYWxhcicsICdwb3cnLCAnQmlnTnVtYmVyJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVHYW1tYSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGdhbW1hIGZ1bmN0aW9uIG9mIGEgdmFsdWUgdXNpbmcgTGFuY3pvcyBhcHByb3hpbWF0aW9uIGZvclxuICAgKiBzbWFsbCB2YWx1ZXMsIGFuZCBhbiBleHRlbmRlZCBTdGlybGluZyBhcHByb3hpbWF0aW9uIGZvciBsYXJnZSB2YWx1ZXMuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5nYW1tYShuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5nYW1tYSg1KSAgICAgICAvLyByZXR1cm5zIDI0XG4gICAqICAgIG1hdGguZ2FtbWEoLTAuNSkgICAgLy8gcmV0dXJucyAtMy41NDQ5MDc3MDE4MTEwMzM1XG4gICAqICAgIG1hdGguZ2FtbWEobWF0aC5pKSAgLy8gcmV0dXJucyAtMC4xNTQ5NDk4MjgzMDE4MDk3MyAtIDAuNDk4MDE1NjY4MTE4MzU1OTZpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbCwgcGVybXV0YXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBIHJlYWwgb3IgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBnYW1tYSBvZiBgbmBcbiAgICovXG4gIHZhciBnYW1tYSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZ2FtbWFOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleChuKSB7XG4gICAgICBpZiAobi5pbSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2FtbWEobi5yZSk7XG4gICAgICB9XG5cbiAgICAgIG4gPSBuZXcgX0NvbXBsZXgobi5yZSAtIDEsIG4uaW0pO1xuICAgICAgdmFyIHggPSBuZXcgX0NvbXBsZXgoX251bWJlci5nYW1tYVBbMF0sIDApO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IF9udW1iZXIuZ2FtbWFQLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciByZWFsID0gbi5yZSArIGk7IC8vIHggKz0gcFtpXS8obitpKVxuXG4gICAgICAgIHZhciBkZW4gPSByZWFsICogcmVhbCArIG4uaW0gKiBuLmltO1xuXG4gICAgICAgIGlmIChkZW4gIT09IDApIHtcbiAgICAgICAgICB4LnJlICs9IF9udW1iZXIuZ2FtbWFQW2ldICogcmVhbCAvIGRlbjtcbiAgICAgICAgICB4LmltICs9IC0oX251bWJlci5nYW1tYVBbaV0gKiBuLmltKSAvIGRlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4LnJlID0gX251bWJlci5nYW1tYVBbaV0gPCAwID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHQgPSBuZXcgX0NvbXBsZXgobi5yZSArIF9udW1iZXIuZ2FtbWFHICsgMC41LCBuLmltKTtcbiAgICAgIHZhciB0d29QaVNxcnQgPSBNYXRoLnNxcnQoMiAqIE1hdGguUEkpO1xuICAgICAgbi5yZSArPSAwLjU7XG4gICAgICB2YXIgcmVzdWx0ID0gcG93KHQsIG4pO1xuXG4gICAgICBpZiAocmVzdWx0LmltID09PSAwKSB7XG4gICAgICAgIC8vIHNxcnQoMipQSSkqcmVzdWx0XG4gICAgICAgIHJlc3VsdC5yZSAqPSB0d29QaVNxcnQ7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZSA9PT0gMCkge1xuICAgICAgICByZXN1bHQuaW0gKj0gdHdvUGlTcXJ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnJlICo9IHR3b1BpU3FydDtcbiAgICAgICAgcmVzdWx0LmltICo9IHR3b1BpU3FydDtcbiAgICAgIH1cblxuICAgICAgdmFyIHIgPSBNYXRoLmV4cCgtdC5yZSk7IC8vIGV4cCgtdClcblxuICAgICAgdC5yZSA9IHIgKiBNYXRoLmNvcygtdC5pbSk7XG4gICAgICB0LmltID0gciAqIE1hdGguc2luKC10LmltKTtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihyZXN1bHQsIHQpLCB4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLmlzSW50ZWdlcigpKSB7XG4gICAgICAgIHJldHVybiBuLmlzTmVnYXRpdmUoKSB8fCBuLmlzWmVybygpID8gbmV3IF9CaWdOdW1iZXIoSW5maW5pdHkpIDogYmlnRmFjdG9yaWFsKG4ubWludXMoMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW4uaXNGaW5pdGUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIobi5pc05lZ2F0aXZlKCkgPyBOYU4gOiBJbmZpbml0eSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBCaWdOdW1iZXIgZXhwZWN0ZWQnKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkobiwgZ2FtbWEpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgZmFjdG9yaWFsIGZvciBhIEJpZ051bWJlclxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBmYWN0b3JpYWwgb2YgblxuICAgKi9cblxuICBmdW5jdGlvbiBiaWdGYWN0b3JpYWwobikge1xuICAgIGlmIChuIDwgOCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKFsxLCAxLCAyLCA2LCAyNCwgMTIwLCA3MjAsIDUwNDBdW25dKTtcbiAgICB9XG5cbiAgICB2YXIgcHJlY2lzaW9uID0gY29uZmlnLnByZWNpc2lvbiArIChNYXRoLmxvZyhuLnRvTnVtYmVyKCkpIHwgMCk7XG5cbiAgICB2YXIgQmlnID0gX0JpZ051bWJlci5jbG9uZSh7XG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvblxuICAgIH0pO1xuXG4gICAgaWYgKG4gJSAyID09PSAxKSB7XG4gICAgICByZXR1cm4gbi50aW1lcyhiaWdGYWN0b3JpYWwobmV3IF9CaWdOdW1iZXIobiAtIDEpKSk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSBuO1xuICAgIHZhciBwcm9kID0gbmV3IEJpZyhuKTtcbiAgICB2YXIgc3VtID0gbi50b051bWJlcigpO1xuXG4gICAgd2hpbGUgKHAgPiAyKSB7XG4gICAgICBwIC09IDI7XG4gICAgICBzdW0gKz0gcDtcbiAgICAgIHByb2QgPSBwcm9kLnRpbWVzKHN1bSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHByb2QudG9QcmVjaXNpb24oX0JpZ051bWJlci5wcmVjaXNpb24pKTtcbiAgfVxuXG4gIHJldHVybiBnYW1tYTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVHYW1tYSA9IGNyZWF0ZUdhbW1hOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVLbGRpdmVyZ2VuY2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdrbGRpdmVyZ2VuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2RpdmlkZScsICdzdW0nLCAnbXVsdGlwbHknLCAnZG90RGl2aWRlJywgJ2xvZycsICdpc051bWVyaWMnXTtcbnZhciBjcmVhdGVLbGRpdmVyZ2VuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHN1bSA9IF9yZWYuc3VtLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZG90RGl2aWRlID0gX3JlZi5kb3REaXZpZGUsXG4gICAgICBsb2cgPSBfcmVmLmxvZyxcbiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljO1xuXG4gIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgS3VsbGJhY2stTGVpYmxlciAoS0wpIGRpdmVyZ2VuY2UgIGJldHdlZW4gdHdvIGRpc3RyaWJ1dGlvbnNcbiAgICAgKlxuICAgICAqIFN5bnRheDpcbiAgICAgKlxuICAgICAqICAgICBtYXRoLmtsZGl2ZXJnZW5jZSh4LCB5KVxuICAgICAqXG4gICAgICogRXhhbXBsZXM6XG4gICAgICpcbiAgICAgKiAgICAgbWF0aC5rbGRpdmVyZ2VuY2UoWzAuNywwLjUsMC40XSwgWzAuMiwwLjksMC41XSkgICAvL3JldHVybnMgMC4yNDM3NjY5ODc3MzEyMTE1M1xuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcSAgICBGaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcCAgICBTZWNvbmQgdmVjdG9yXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgICAgUmV0dXJucyBkaXN0YW5jZSBiZXR3ZWVuIHEgYW5kIHBcbiAgICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheShxLCBwKSB7XG4gICAgICByZXR1cm4gX2tsZGl2KG1hdHJpeChxKSwgbWF0cml4KHApKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihxLCBtYXRyaXgocCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChxLCBwKSB7XG4gICAgICByZXR1cm4gX2tsZGl2KG1hdHJpeChxKSwgcCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihxLCBwKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9rbGRpdihxLCBwKSB7XG4gICAgdmFyIHBsZW5ndGggPSBwLnNpemUoKS5sZW5ndGg7XG4gICAgdmFyIHFsZW5ndGggPSBxLnNpemUoKS5sZW5ndGg7XG5cbiAgICBpZiAocGxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3Qgb2JqZWN0IG11c3QgYmUgb25lIGRpbWVuc2lvbmFsJyk7XG4gICAgfVxuXG4gICAgaWYgKHFsZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY29uZCBvYmplY3QgbXVzdCBiZSBvbmUgZGltZW5zaW9uYWwnKTtcbiAgICB9XG5cbiAgICBpZiAocGxlbmd0aCAhPT0gcWxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMZW5ndGggb2YgdHdvIHZlY3RvcnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH0gLy8gQmVmb3JlIGNhbGN1bGF0aW9uLCBhcHBseSBub3JtYWxpemF0aW9uXG5cblxuICAgIHZhciBzdW1xID0gc3VtKHEpO1xuXG4gICAgaWYgKHN1bXEgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VtIG9mIGVsZW1lbnRzIGluIGZpcnN0IG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvJyk7XG4gICAgfVxuXG4gICAgdmFyIHN1bXAgPSBzdW0ocCk7XG5cbiAgICBpZiAoc3VtcCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdW0gb2YgZWxlbWVudHMgaW4gc2Vjb25kIG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvJyk7XG4gICAgfVxuXG4gICAgdmFyIHFub3JtID0gZGl2aWRlKHEsIHN1bShxKSk7XG4gICAgdmFyIHBub3JtID0gZGl2aWRlKHAsIHN1bShwKSk7XG4gICAgdmFyIHJlc3VsdCA9IHN1bShtdWx0aXBseShxbm9ybSwgbG9nKGRvdERpdmlkZShxbm9ybSwgcG5vcm0pKSkpO1xuXG4gICAgaWYgKGlzTnVtZXJpYyhyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTnVtYmVyLk5hTjtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVLbGRpdmVyZ2VuY2UgPSBjcmVhdGVLbGRpdmVyZ2VuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU11bHRpbm9taWFsID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ211bHRpbm9taWFsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnLCAnbXVsdGlwbHknLCAnZmFjdG9yaWFsJywgJ2lzSW50ZWdlcicsICdpc1Bvc2l0aXZlJ107XG52YXIgY3JlYXRlTXVsdGlub21pYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlO1xuXG4gIC8qKlxuICAgKiBNdWx0aW5vbWlhbCBDb2VmZmljaWVudHMgY29tcHV0ZSB0aGUgbnVtYmVyIG9mIHdheXMgb2YgcGlja2luZyBhMSwgYTIsIC4uLiwgYWkgdW5vcmRlcmVkIG91dGNvbWVzIGZyb20gYG5gIHBvc3NpYmlsaXRpZXMuXG4gICAqXG4gICAqIG11bHRpbm9taWFsIHRha2VzIG9uZSBhcnJheSBvZiBpbnRlZ2VycyBhcyBhbiBhcmd1bWVudC5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogZXZlcnkgYWkgPD0gMFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm11bHRpbm9taWFsKGEpIC8vIGEgaXMgYW4gYXJyYXkgdHlwZVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aW5vbWlhbChbMSwyLDFdKSAvLyByZXR1cm5zIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgQmlnTnVtYmVyW119IGEgICAgSW50ZWdlciBudW1iZXJzIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICAgICAgTXVsdGlub21pYWwgY29lZmZpY2llbnQuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHtcbiAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgdmFyIGRlbm9tID0gMTtcbiAgICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYSwgZnVuY3Rpb24gKGFpKSB7XG4gICAgICAgIGlmICghaXNJbnRlZ2VyKGFpKSB8fCAhaXNQb3NpdGl2ZShhaSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG11bHRpbm9taWFsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdW0gPSBhZGQoc3VtLCBhaSk7XG4gICAgICAgIGRlbm9tID0gbXVsdGlwbHkoZGVub20sIGZhY3RvcmlhbChhaSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGl2aWRlKGZhY3RvcmlhbChzdW0pLCBkZW5vbSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aW5vbWlhbCA9IGNyZWF0ZU11bHRpbm9taWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQZXJtdXRhdGlvbnMgPSB2b2lkIDA7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9wcm9kdWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3Byb2R1Y3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdwZXJtdXRhdGlvbnMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZmFjdG9yaWFsJ107XG52YXIgY3JlYXRlUGVybXV0YXRpb25zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Ygd2F5cyBvZiBvYnRhaW5pbmcgYW4gb3JkZXJlZCBzdWJzZXQgb2YgYGtgIGVsZW1lbnRzXG4gICAqIGZyb20gYSBzZXQgb2YgYG5gIGVsZW1lbnRzLlxuICAgKlxuICAgKiBQZXJtdXRhdGlvbnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnBlcm11dGF0aW9ucyhuKVxuICAgKiAgICAgbWF0aC5wZXJtdXRhdGlvbnMobiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucGVybXV0YXRpb25zKDUpICAgICAvLyAxMjBcbiAgICogICAgbWF0aC5wZXJtdXRhdGlvbnMoNSwgMykgIC8vIDYwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGNvbWJpbmF0aW9uc1dpdGhSZXAsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gbiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0b3RhbFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2tdIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgVGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZhY3RvcmlhbCxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pIHx8IG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcGVybXV0YXRpb25zJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHBlcm11dGF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoayA+IG4pIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbicpO1xuICAgICAgfSAvLyBQZXJtdXRlIG4gb2JqZWN0cywgayBhdCBhIHRpbWVcblxuXG4gICAgICByZXR1cm4gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKG4gLSBrICsgMSwgbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgdmFyIHJlc3VsdCwgaTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBwZXJtdXRhdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsuZ3QobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb25lID0gbi5tdWwoMCkuYWRkKDEpO1xuICAgICAgcmVzdWx0ID0gb25lO1xuXG4gICAgICBmb3IgKGkgPSBuLm1pbnVzKGspLnBsdXMoMSk7IGkubHRlKG4pOyBpID0gaS5wbHVzKDEpKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciBjb2xsZWN0aW9uIGluIHBlcm11dGF0aW9uc1xuXG4gIH0pO1xufSk7XG4vKipcbiAqIFRlc3Qgd2hldGhlciBCaWdOdW1iZXIgbiBpcyBhIHBvc2l0aXZlIGludGVnZXJcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSBuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gaXNQb3NpdGl2ZUludGVnZXJcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVBlcm11dGF0aW9ucyA9IGNyZWF0ZVBlcm11dGF0aW9ucztcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikge1xuICByZXR1cm4gbi5pc0ludGVnZXIoKSAmJiBuLmd0ZSgwKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGlja1JhbmRvbSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfc2VlZGVkUk5HID0gcmVxdWlyZShcIi4vdXRpbC9zZWVkZWRSTkdcIik7XG5cbnZhciBuYW1lID0gJ3BpY2tSYW5kb20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9vbiddO1xudmFyIGNyZWF0ZVBpY2tSYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYub247XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgdmFyIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY29uZmlnLnJhbmRvbVNlZWQpO1xuXG4gIGlmIChvbikge1xuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7XG4gICAgICAgIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY3Vyci5yYW5kb21TZWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmFuZG9tIHBpY2sgb25lIG9yIG1vcmUgdmFsdWVzIGZyb20gYSBvbmUgZGltZW5zaW9uYWwgYXJyYXkuXG4gICAqIEFycmF5IGVsZW1lbnRzIGFyZSBwaWNrZWQgdXNpbmcgYSByYW5kb20gZnVuY3Rpb24gd2l0aCB1bmlmb3JtIG9yIHdlaWdodGVkIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5KVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5LCBudW1iZXIpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIHdlaWdodHMpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIG51bWJlciwgd2VpZ2h0cylcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShhcnJheSwgd2VpZ2h0cywgbnVtYmVyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgb25lIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5XG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIFsxLCAzLCAyLCAxXSkgICAgLy8gcmV0dXJucyBvbmUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgd2l0aCB3ZWlnaHRlZCBkaXN0cmlidXRpb25cbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdLCAyLCBbMSwgMywgMiwgMV0pIC8vIHJldHVybnMgYW4gYXJyYXkgb2YgdHdvIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5IHdpdGggd2VpZ2h0ZWQgZGlzdHJpYnV0aW9uXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgWzEsIDMsIDIsIDFdLCAyKSAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSB3aXRoIHdlaWdodGVkIGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHJhbmRvbSwgcmFuZG9tSW50XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5ICAgICBBIG9uZSBkaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0ludH0gbnVtYmVyICAgICAgICAgICAgICAgQW4gaW50IG9yIGZsb2F0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHdlaWdodHMgICBBbiBhcnJheSBvZiBpbnRzIG9yIGZsb2F0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheX0gICAgICAgICAgUmV0dXJucyBhIHNpbmdsZSByYW5kb20gdmFsdWUgZnJvbSBhcnJheSB3aGVuIG51bWJlciBpcyAxIG9yIHVuZGVmaW5lZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgY29uZmlndXJlZCBudW1iZXIgb2YgZWxlbWVudHMgd2hlbiBudW1iZXIgaXMgPiAxLlxuICAgKi9cblxuXG4gIHJldHVybiB0eXBlZCh7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgocG9zc2libGVzKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIocG9zc2libGVzLCBudW1iZXIpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5KHBvc3NpYmxlcywgd2VpZ2h0cykge1xuICAgICAgcmV0dXJuIF9waWNrUmFuZG9tKHBvc3NpYmxlcywgdW5kZWZpbmVkLCB3ZWlnaHRzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXhOdW1iZXIocG9zc2libGVzLCB3ZWlnaHRzLCBudW1iZXIpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgd2VpZ2h0cyk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckFycmF5TWF0cml4KHBvc3NpYmxlcywgbnVtYmVyLCB3ZWlnaHRzKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpIHtcbiAgICB2YXIgc2luZ2xlID0gdHlwZW9mIG51bWJlciA9PT0gJ3VuZGVmaW5lZCc7XG5cbiAgICBpZiAoc2luZ2xlKSB7XG4gICAgICBudW1iZXIgPSAxO1xuICAgIH1cblxuICAgIHBvc3NpYmxlcyA9IHBvc3NpYmxlcy52YWx1ZU9mKCk7IC8vIGdldCBBcnJheVxuXG4gICAgaWYgKHdlaWdodHMpIHtcbiAgICAgIHdlaWdodHMgPSB3ZWlnaHRzLnZhbHVlT2YoKTsgLy8gZ2V0IEFycmF5XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfYXJyYXkuYXJyYXlTaXplKShwb3NzaWJsZXMpLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgdmVjdG9ycyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxXZWlnaHRzID0gMDtcblxuICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh3ZWlnaHRzLmxlbmd0aCAhPT0gcG9zc2libGVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBwb3NzaWJsZXMnKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHdlaWdodHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh3ZWlnaHRzW2ldKSB8fCB3ZWlnaHRzW2ldIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2VpZ2h0cyBtdXN0IGJlIGFuIGFycmF5IG9mIHBvc2l0aXZlIG51bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvdGFsV2VpZ2h0cyArPSB3ZWlnaHRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsZW5ndGggPSBwb3NzaWJsZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyID49IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bWJlciA+IDEgPyBwb3NzaWJsZXMgOiBwb3NzaWJsZXNbMF07XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBwaWNrO1xuXG4gICAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCBudW1iZXIpIHtcbiAgICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcGljayA9IHBvc3NpYmxlc1tNYXRoLmZsb29yKHJuZygpICogbGVuZ3RoKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmFuZEtleSA9IHJuZygpICogdG90YWxXZWlnaHRzO1xuXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2xlbiA9IHBvc3NpYmxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIHJhbmRLZXkgLT0gd2VpZ2h0c1tfaV07XG5cbiAgICAgICAgICBpZiAocmFuZEtleSA8IDApIHtcbiAgICAgICAgICAgIHBpY2sgPSBwb3NzaWJsZXNbX2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihwaWNrKSA9PT0gLTEpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocGljayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmdsZSA/IHJlc3VsdFswXSA6IHJlc3VsdDsgLy8gVE9ETzogcmV0dXJuIG1hdHJpeCB3aGVuIGlucHV0IHdhcyBhIG1hdHJpeFxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaWNlc1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUGlja1JhbmRvbSA9IGNyZWF0ZVBpY2tSYW5kb207IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbU51bWJlciA9IGV4cG9ydHMuY3JlYXRlUmFuZG9tID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9zZWVkZWRSTkcgPSByZXF1aXJlKFwiLi91dGlsL3NlZWRlZFJOR1wiKTtcblxudmFyIF9yYW5kb21NYXRyaXgyID0gcmVxdWlyZShcIi4vdXRpbC9yYW5kb21NYXRyaXhcIik7XG5cbnZhciBuYW1lID0gJ3JhbmRvbSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ107XG52YXIgY3JlYXRlUmFuZG9tID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgb24gPSBfcmVmLm9uO1xuICAvLyBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIHJhbmRvbSBudW1iZXIgbGFyZ2VyIG9yIGVxdWFsIHRvIGBtaW5gIGFuZCBzbWFsbGVyIHRoYW4gYG1heGBcbiAgICogdXNpbmcgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5kb20oKSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbShtYXgpICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20obWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSkgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgMVxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSwgbWF4KSAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgbWF4XG4gICAqICAgICBtYXRoLnJhbmRvbShzaXplLCBtaW4sIG1heCkgIC8vIGdlbmVyYXRlIGEgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tKCkgICAgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbSgxMDApICAgIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwXG4gICAqICAgICBtYXRoLnJhbmRvbSgzMCwgNDApIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMzAgYW5kIDQwXG4gICAqICAgICBtYXRoLnJhbmRvbShbMiwgM10pIC8vIHJldHVybnMgYSAyeDMgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiAwIGFuZCAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmFuZG9tSW50LCBwaWNrUmFuZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgYW5kIGZpbGxlZCB3aXRoIHJhbmRvbSB2YWx1ZXMgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5dICBNaW5pbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBBIHJhbmRvbSBudW1iZXJcbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHNpemUpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIDEpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlcihzaXplLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJOdW1iZXIoc2l6ZSwgbWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIG1pbiwgbWF4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9yYW5kb21NYXRyaXgoc2l6ZSwgbWluLCBtYXgpIHtcbiAgICB2YXIgcmVzID0gKDAsIF9yYW5kb21NYXRyaXgyLnJhbmRvbU1hdHJpeCkoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JhbmRvbShtaW4sIG1heCkge1xuICAgIHJldHVybiBtaW4gKyBybmcoKSAqIChtYXggLSBtaW4pO1xuICB9XG59KTsgLy8gbnVtYmVyIG9ubHkgaW1wbGVtZW50YXRpb24gb2YgcmFuZG9tLCBubyBtYXRyaXggc3VwcG9ydFxuLy8gVE9ETzogdGhlcmUgaXMgcXVpdGUgc29tZSBkdXBsaWNhdGUgY29kZSBpbiBib3RoIGNyZWF0ZVJhbmRvbSBhbmQgY3JlYXRlUmFuZG9tTnVtYmVyLCBjYW4gd2UgaW1wcm92ZSB0aGF0P1xuXG5leHBvcnRzLmNyZWF0ZVJhbmRvbSA9IGNyZWF0ZVJhbmRvbTtcbnZhciBjcmVhdGVSYW5kb21OdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgIG9uID0gX3JlZjIub24sXG4gICAgICBtYXRyaXggPSBfcmVmMi5tYXRyaXg7XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IxXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9yYW5kb20obWluLCBtYXgpIHtcbiAgICByZXR1cm4gbWluICsgcm5nKCkgKiAobWF4IC0gbWluKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbU51bWJlciA9IGNyZWF0ZVJhbmRvbU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZG9tSW50ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9yYW5kb21NYXRyaXggPSByZXF1aXJlKFwiLi91dGlsL3JhbmRvbU1hdHJpeFwiKTtcblxudmFyIF9zZWVkZWRSTkcgPSByZXF1aXJlKFwiLi91dGlsL3NlZWRlZFJOR1wiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAncmFuZG9tSW50JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICc/b24nXTtcbnZhciBjcmVhdGVSYW5kb21JbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYub247XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgdmFyIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY29uZmlnLnJhbmRvbVNlZWQpO1xuXG4gIGlmIChvbikge1xuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7XG4gICAgICAgIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY3Vyci5yYW5kb21TZWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGxhcmdlciBvciBlcXVhbCB0byBgbWluYCBhbmQgc21hbGxlciB0aGFuIGBtYXhgXG4gICAqIHVzaW5nIGEgdW5pZm9ybSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tSW50KCkgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tSW50KG1heCkgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQobWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUpICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUsIG1heCkgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmRvbUludCgxMDApICAgIC8vIHJldHVybnMgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwMFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoMzAsIDQwKSAvLyByZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAzMCBhbmQgNDBcbiAgICogICAgIG1hdGgucmFuZG9tSW50KFsyLCAzXSkgLy8gcmV0dXJucyBhIDJ4MyBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmFuZG9tLCBwaWNrUmFuZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgYW5kIGZpbGxlZCB3aXRoIHJhbmRvbSB2YWx1ZXMgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5dICBNaW5pbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBBIHJhbmRvbSBpbnRlZ2VyIHZhbHVlXG4gICAqL1xuXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tSW50KDAsIDEpO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludCgwLCBtYXgpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludChtaW4sIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChzaXplKSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoc2l6ZSwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCBtYXgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyTnVtYmVyKHNpemUsIG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCBtaW4sIG1heCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfcmFuZG9tSW50TWF0cml4KHNpemUsIG1pbiwgbWF4KSB7XG4gICAgdmFyIHJlcyA9ICgwLCBfcmFuZG9tTWF0cml4LnJhbmRvbU1hdHJpeCkoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tSW50KG1pbiwgbWF4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JhbmRvbUludChtaW4sIG1heCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKG1pbiArIHJuZygpICogKG1heCAtIG1pbikpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZG9tSW50ID0gY3JlYXRlUmFuZG9tSW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21NYXRyaXggPSByYW5kb21NYXRyaXg7XG5cbi8qKlxuICogVGhpcyBpcyBhIHV0aWwgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSByYW5kb20gbWF0cml4IHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcmFuZG9tXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHJhbmRvbU1hdHJpeChzaXplLCByYW5kb20pIHtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgc2l6ZSA9IHNpemUuc2xpY2UoMCk7XG5cbiAgaWYgKHNpemUubGVuZ3RoID4gMSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzaXplLnNoaWZ0KCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgZGF0YS5wdXNoKHJhbmRvbU1hdHJpeChzaXplLCByYW5kb20pKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuZ3RoID0gc2l6ZS5zaGlmdCgpOyBfaSA8IF9sZW5ndGg7IF9pKyspIHtcbiAgICAgIGRhdGEucHVzaChyYW5kb20oKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJuZyA9IGNyZWF0ZVJuZztcblxudmFyIF9zZWVkUmFuZG9tID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwic2VlZC1yYW5kb21cIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuLy8gY3JlYXRlIGEgcmFuZG9tIHNlZWQgaGVyZSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AgZnJvbSBzZWVkLXJhbmRvbVxuLy8gaW5zaWRlIHRoZSBmYWN0b3J5LiBSZWFzb24gaXMgdGhhdCBtYXRoLnJhbmRvbSBpcyBkZWZpbmVkIGFzIGEgZ2V0dGVyL3NldHRlclxuLy8gYW5kIHNlZWQtcmFuZG9tIGdlbmVyYXRlcyBhIHNlZWQgZnJvbSB0aGUgbG9jYWwgZW50cm9weSBieSByZWFkaW5nIGV2ZXJ5XG4vLyBkZWZpbmVkIG9iamVjdCBpbmNsdWRpbmcgYG1hdGhgIGl0c2VsZi4gVGhhdCBtZWFucyB0aGF0IHdoaWxzdCBnZXR0aW5nXG4vLyBtYXRoLnJhbmRvbSwgaXQgdHJpZXMgdG8gZ2V0IG1hdGgucmFuZG9tLCBldGMuLi4gYW4gaW5maW5pdGUgbG9vcC5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vRm9yYmVzTGluZGVzYXkvc2VlZC1yYW5kb20vaXNzdWVzLzZcbnZhciBzaW5nbGV0b25SYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX3NlZWRSYW5kb21bXCJkZWZhdWx0XCJdKSgpO1xuXG5mdW5jdGlvbiBjcmVhdGVSbmcocmFuZG9tU2VlZCkge1xuICB2YXIgcmFuZG9tOyAvLyBjcmVhdGUgYSBuZXcgcmFuZG9tIGdlbmVyYXRvciB3aXRoIGdpdmVuIHNlZWRcblxuICBmdW5jdGlvbiBzZXRTZWVkKHNlZWQpIHtcbiAgICByYW5kb20gPSBzZWVkID09PSBudWxsID8gc2luZ2xldG9uUmFuZG9tIDogKDAsIF9zZWVkUmFuZG9tW1wiZGVmYXVsdFwiXSkoU3RyaW5nKHNlZWQpKTtcbiAgfSAvLyBpbml0aWFsaXplIGEgc2VlZGVkIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGNvbmZpZydzIHJhbmRvbSBzZWVkXG5cblxuICBzZXRTZWVkKHJhbmRvbVNlZWQpOyAvLyB3cmFwcGVyIGZ1bmN0aW9uIHNvIHRoZSBybmcgY2FuIGJlIHVwZGF0ZWQgdmlhIGdlbmVyYXRvclxuXG4gIGZ1bmN0aW9uIHJuZygpIHtcbiAgICByZXR1cm4gcmFuZG9tKCk7XG4gIH1cblxuICByZXR1cm4gcm5nO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVDb21wYXJlID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIG5hbWUgPSAnY29tcGFyZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUNvbXBhcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA1ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTA1KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byB2YWx1ZXMuIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICpcbiAgICogeCBhbmQgeSBhcmUgY29uc2lkZXJlZCBlcXVhbCB3aGVuIHRoZSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeVxuICAgKiBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvXG4gICAqIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmUoNiwgMSkgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmUoMiwgMykgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKDcsIDcpICAgICAgICAgICAvLyByZXR1cm5zIDBcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMDAwJywgJzFlMycpICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCgnNSBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzQwIG1tJylcbiAgICogICAgbWF0aC5jb21wYXJlKGEsIGIpICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKDIsIFsxLCAyLCAzXSkgICAvLyByZXR1cm5zIFsxLCAwLCAtMV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlciwgbGFyZ2VyRXEsIGNvbXBhcmVOYXR1cmFsLCBjb21wYXJlVGV4dFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmUgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA9PT0geSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pID8gbmV3IEJpZ051bWJlcigwKSA6IG5ldyBCaWdOdW1iZXIoeC5jbXAoeSkpO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4LmNvbXBhcmUoeSkpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGFyZSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgY29tcGFyZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBjb21wYXJlLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBjb21wYXJlKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgY29tcGFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBjb21wYXJlLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgY29tcGFyZSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgY29tcGFyZSwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb21wYXJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmUgPSBjcmVhdGVDb21wYXJlO1xudmFyIGNyZWF0ZUNvbXBhcmVOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVOdW1iZXIgPSBjcmVhdGVDb21wYXJlTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTmF0dXJhbCA9IHZvaWQgMDtcblxudmFyIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJqYXZhc2NyaXB0LW5hdHVyYWwtc29ydFwiKSk7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIG5hbWUgPSAnY29tcGFyZU5hdHVyYWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZUNvbXBhcmVOYXR1cmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7XG4gIHZhciBjb21wYXJlQm9vbGVhbnMgPSBjb21wYXJlLnNpZ25hdHVyZXNbJ2Jvb2xlYW4sYm9vbGVhbiddO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gdmFsdWVzIG9mIGFueSB0eXBlIGluIGEgZGV0ZXJtaW5pc3RpYywgbmF0dXJhbCB3YXkuXG4gICAqXG4gICAqIEZvciBudW1lcmljIHZhbHVlcywgdGhlIGZ1bmN0aW9uIHdvcmtzIHRoZSBzYW1lIGFzIGBtYXRoLmNvbXBhcmVgLlxuICAgKiBGb3IgdHlwZXMgb2YgdmFsdWVzIHRoYXQgY2FuJ3QgYmUgY29tcGFyZWQgbWF0aGVtYXRpY2FsbHksXG4gICAqIHRoZSBmdW5jdGlvbiBjb21wYXJlcyBpbiBhIG5hdHVyYWwgd2F5LlxuICAgKlxuICAgKiBGb3IgbnVtZXJpYyB2YWx1ZXMsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgZXF1YWwgd2hlbiB0aGUgcmVsYXRpdmVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uXG4gICAqIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW5cbiAgICogYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIENvbXBsZXggbnVtYmVycywgZmlyc3QgdGhlIHJlYWwgcGFydHMgYXJlIGNvbXBhcmVkLiBJZiBlcXVhbCxcbiAgICogdGhlIGltYWdpbmFyeSBwYXJ0cyBhcmUgY29tcGFyZWQuXG4gICAqXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIHdpdGggYSBuYXR1cmFsIHNvcnRpbmcgYWxnb3JpdGhtLCB3aGljaFxuICAgKiBvcmRlcnMgc3RyaW5ncyBpbiBhIFwibG9naWNcIiB3YXkgZm9sbG93aW5nIHNvbWUgaGV1cmlzdGljcy5cbiAgICogVGhpcyBkaWZmZXJzIGZyb20gdGhlIGZ1bmN0aW9uIGBjb21wYXJlYCwgd2hpY2ggY29udmVydHMgdGhlIHN0cmluZ1xuICAgKiBpbnRvIGEgbnVtZXJpYyB2YWx1ZSBhbmQgY29tcGFyZXMgdGhhdC4gVGhlIGZ1bmN0aW9uIGBjb21wYXJlVGV4dGBcbiAgICogb24gdGhlIG90aGVyIGhhbmQgY29tcGFyZXMgdGV4dCBsZXhpY2FsbHkuXG4gICAqXG4gICAqIEFycmF5cyBhbmQgTWF0cmljZXMgYXJlIGNvbXBhcmVkIHZhbHVlIGJ5IHZhbHVlIHVudGlsIHRoZXJlIGlzIGFuXG4gICAqIHVuZXF1YWwgcGFpciBvZiB2YWx1ZXMgZW5jb3VudGVyZWQuIE9iamVjdHMgYXJlIGNvbXBhcmVkIGJ5IHNvcnRlZFxuICAgKiBrZXlzIHVudGlsIHRoZSBrZXlzIG9yIHRoZWlyIHZhbHVlcyBhcmUgdW5lcXVhbC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDYsIDEpICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgyLCAzKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDcsIDcpICAgICAgICAgICAgICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgnMTAnLCAnMicpICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJzEwJywgJzInKSAgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLmNvbXBhcmUoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJylcbiAgICogICAgICAgIC8vIEVycm9yOiBDYW5ub3QgY29udmVydCBcIkFuc3dlcjogMTBcIiB0byBhIG51bWJlclxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnNDAgbW0nKVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKGEsIGIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgnMiArIDNpJylcbiAgICogICAgY29uc3QgZCA9IG1hdGguY29tcGxleCgnMiArIDRpJylcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChjLCBkKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyLCA0XSwgWzEsIDIsIDNdKSAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChbMSwgMiwgM10sIFsxLCAyXSkgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoWzEsIDVdLCBbMSwgMiwgM10pICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyXSwgWzEsIDJdKSAgICAgICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCh7YTogMn0sIHthOiA0fSkgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tcGFyZSwgY29tcGFyZVRleHRcbiAgICpcbiAgICogQHBhcmFtICB7Kn0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAgeyp9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG4gICAqICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmVOYXR1cmFsID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7XG4gICAgICB2YXIgdHlwZVggPSAoMCwgX2lzLnR5cGVPZikoeCk7XG4gICAgICB2YXIgdHlwZVkgPSAoMCwgX2lzLnR5cGVPZikoeSk7XG4gICAgICB2YXIgYzsgLy8gbnVtZXJpYyB0eXBlc1xuXG4gICAgICBpZiAoKHR5cGVYID09PSAnbnVtYmVyJyB8fCB0eXBlWCA9PT0gJ0JpZ051bWJlcicgfHwgdHlwZVggPT09ICdGcmFjdGlvbicpICYmICh0eXBlWSA9PT0gJ251bWJlcicgfHwgdHlwZVkgPT09ICdCaWdOdW1iZXInIHx8IHR5cGVZID09PSAnRnJhY3Rpb24nKSkge1xuICAgICAgICBjID0gY29tcGFyZSh4LCB5KTtcblxuICAgICAgICBpZiAoYy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAvLyBjIGNhbiBiZSBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb25cbiAgICAgICAgICByZXR1cm4gYyA+IDAgPyAxIDogLTE7IC8vIHJldHVybiBhIG51bWJlclxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbWF0cml4IHR5cGVzXG5cblxuICAgICAgaWYgKHR5cGVYID09PSAnQXJyYXknIHx8IHR5cGVYID09PSAnTWF0cml4JyB8fCB0eXBlWSA9PT0gJ0FycmF5JyB8fCB0eXBlWSA9PT0gJ01hdHJpeCcpIHtcbiAgICAgICAgYyA9IGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KTtcblxuICAgICAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gaW4gY2FzZSBvZiBkaWZmZXJlbnQgdHlwZXMsIG9yZGVyIGJ5IG5hbWUgb2YgdHlwZSwgaS5lLiAnQmlnTnVtYmVyJyA8ICdDb21wbGV4J1xuXG5cbiAgICAgIGlmICh0eXBlWCAhPT0gdHlwZVkpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfamF2YXNjcmlwdE5hdHVyYWxTb3J0W1wiZGVmYXVsdFwiXSkodHlwZVgsIHR5cGVZKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVDb21wbGV4TnVtYmVycyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnVW5pdCcpIHtcbiAgICAgICAgaWYgKHguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsKHgudmFsdWUsIHkudmFsdWUpO1xuICAgICAgICB9IC8vIGNvbXBhcmUgYnkgdW5pdHNcblxuXG4gICAgICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHguZm9ybWF0VW5pdHMoKSwgeS5mb3JtYXRVbml0cygpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVCb29sZWFucyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gKDAsIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKSh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnT2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gY29tcGFyZU9iamVjdHMoeCwgeSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ251bGwnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZVggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyB0aGlzIHNob3VsZCBub3Qgb2NjdXIuLi5cblxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHZhbHVlIFwiJyArIHR5cGVYICsgJ1wiJyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENvbXBhcmUgbWl4ZWQgbWF0cml4L2FycmF5IHR5cGVzLCBieSBjb252ZXJ0aW5nIHRvIHNhbWUtc2hhcGVkIGFycmF5LlxuICAgKiBUaGlzIGNvbXBhcmF0b3IgaXMgbm9uLWRldGVybWluaXN0aWMgcmVnYXJkaW5nIGlucHV0IHR5cGVzLlxuICAgKiBAcGFyYW0ge0FycmF5IHwgU3BhcnNlTWF0cml4IHwgRGVuc2VNYXRyaXggfCAqfSB4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBTcGFyc2VNYXRyaXggfCBEZW5zZU1hdHJpeCB8ICp9IHlcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KSB7XG4gICAgaWYgKCgwLCBfaXMuaXNTcGFyc2VNYXRyaXgpKHgpICYmICgwLCBfaXMuaXNTcGFyc2VNYXRyaXgpKHkpKSB7XG4gICAgICByZXR1cm4gY29tcGFyZUFycmF5cyh4LnRvSlNPTigpLnZhbHVlcywgeS50b0pTT04oKS52YWx1ZXMpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh4KSkge1xuICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmVcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0FycmF5KCksIHkpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh5KSkge1xuICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmVcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeCwgeS50b0FycmF5KCkpO1xuICAgIH0gLy8gY29udmVydCBEZW5zZUFycmF5IGludG8gQXJyYXlcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoeCkpIHtcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0pTT04oKS5kYXRhLCB5KTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc0RlbnNlTWF0cml4KSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5LnRvSlNPTigpLmRhdGEpO1xuICAgIH0gLy8gY29udmVydCBzY2FsYXJzIHRvIGFycmF5XG5cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyhbeF0sIHkpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCBbeV0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHgsIHkpO1xuICB9XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBBcnJheXNcbiAgICpcbiAgICogLSBGaXJzdCwgY29tcGFyZXMgdmFsdWUgYnkgdmFsdWVcbiAgICogLSBOZXh0LCBpZiBhbGwgY29ycmVzcG9uZGluZyB2YWx1ZXMgYXJlIGVxdWFsLFxuICAgKiAgIGxvb2sgYXQgdGhlIGxlbmd0aDogbG9uZ2VzdCBhcnJheSB3aWxsIGJlIGNvbnNpZGVyZWQgbGFyZ2VzdFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSB4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHlcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyh4LCB5KSB7XG4gICAgLy8gY29tcGFyZSBlYWNoIHZhbHVlXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gTWF0aC5taW4oeC5sZW5ndGgsIHkubGVuZ3RoKTsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtpXSwgeVtpXSk7XG5cbiAgICAgIGlmICh2ICE9PSAwKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfVxuICAgIH0gLy8gY29tcGFyZSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzXG5cblxuICAgIGlmICh4Lmxlbmd0aCA+IHkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZiAoeC5sZW5ndGggPCB5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gLy8gYm90aCBBcnJheXMgaGF2ZSBlcXVhbCBzaXplIGFuZCBjb250ZW50XG5cblxuICAgIHJldHVybiAwO1xuICB9XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBvYmplY3RzXG4gICAqXG4gICAqIC0gRmlyc3QsIGNvbXBhcmUgc29ydGVkIHByb3BlcnR5IG5hbWVzXG4gICAqIC0gTmV4dCwgY29tcGFyZSB0aGUgcHJvcGVydHkgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVPYmplY3RzKHgsIHkpIHtcbiAgICB2YXIga2V5c1ggPSBPYmplY3Qua2V5cyh4KTtcbiAgICB2YXIga2V5c1kgPSBPYmplY3Qua2V5cyh5KTsgLy8gY29tcGFyZSBrZXlzXG5cbiAgICBrZXlzWC5zb3J0KF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKTtcbiAgICBrZXlzWS5zb3J0KF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKTtcbiAgICB2YXIgYyA9IGNvbXBhcmVBcnJheXMoa2V5c1gsIGtleXNZKTtcblxuICAgIGlmIChjICE9PSAwKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9IC8vIGNvbXBhcmUgdmFsdWVzXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c1gubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtrZXlzWFtpXV0sIHlba2V5c1lbaV1dKTtcblxuICAgICAgaWYgKHYgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gY29tcGFyZU5hdHVyYWw7XG59KTtcbi8qKlxuICogQ29tcGFyZSB0d28gY29tcGxleCBudW1iZXJzLCBgeGAgYW5kIGB5YDpcbiAqXG4gKiAtIEZpcnN0LCBjb21wYXJlIHRoZSByZWFsIHZhbHVlcyBvZiBgeGAgYW5kIGB5YFxuICogLSBJZiBlcXVhbCwgY29tcGFyZSB0aGUgaW1hZ2luYXJ5IHZhbHVlcyBvZiBgeGAgYW5kIGB5YFxuICpcbiAqIEBwYXJhbXMge0NvbXBsZXh9IHhcbiAqIEBwYXJhbXMge0NvbXBsZXh9IHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29tcGFyZU5hdHVyYWwgPSBjcmVhdGVDb21wYXJlTmF0dXJhbDtcblxuZnVuY3Rpb24gY29tcGFyZUNvbXBsZXhOdW1iZXJzKHgsIHkpIHtcbiAgaWYgKHgucmUgPiB5LnJlKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoeC5yZSA8IHkucmUpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBpZiAoeC5pbSA+IHkuaW0pIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmICh4LmltIDwgeS5pbSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHJldHVybiAwO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dE51bWJlciA9IGV4cG9ydHMuY3JlYXRlQ29tcGFyZVRleHQgPSB2b2lkIDA7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ2NvbXBhcmVUZXh0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZUNvbXBhcmVUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gc3RyaW5ncyBsZXhpY2FsbHkuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuXG4gICAqIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KCdCJywgJ0EnKSAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJzInLCAnMTAnKSAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKCcyJywgJzEwJykgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgnMicsICcxMCcpIC8vIHJldHVybnMgLTFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlVGV4dCgnQicsIFsnQScsICdCJywgJ0MnXSkgLy8gcmV0dXJucyBbMSwgMCwgLTFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgZXF1YWxUZXh0LCBjb21wYXJlLCBjb21wYXJlTmF0dXJhbFxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheSB8IERlbnNlTWF0cml4fSB4IEZpcnN0IHN0cmluZyB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHkgU2Vjb25kIHN0cmluZyB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmVUZXh0ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IF9zdHJpbmcuY29tcGFyZVRleHQsXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIF9zdHJpbmcuY29tcGFyZVRleHQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGNvbXBhcmVUZXh0KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlVGV4dChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gY29tcGFyZVRleHQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIF9zdHJpbmcuY29tcGFyZVRleHQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIF9zdHJpbmcuY29tcGFyZVRleHQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbXBhcmVUZXh0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVUZXh0ID0gY3JlYXRlQ29tcGFyZVRleHQ7XG52YXIgY3JlYXRlQ29tcGFyZVRleHROdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogX3N0cmluZy5jb21wYXJlVGV4dFxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dE51bWJlciA9IGNyZWF0ZUNvbXBhcmVUZXh0TnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZWVwRXF1YWwgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkZWVwRXF1YWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWwnXTtcbnZhciBjcmVhdGVEZWVwRXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsO1xuXG4gIC8qKlxuICAgKiBUZXN0IGVsZW1lbnQgd2lzZSB3aGV0aGVyIHR3byBtYXRyaWNlcyBhcmUgZXF1YWwuXG4gICAqIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGJvdGggbWF0cmljZXMgYW5kIHNjYWxhciB2YWx1ZXMuXG4gICAqXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRlZXBFcXVhbCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kZWVwRXF1YWwoMiwgNCkgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGEgPSBbMiwgNSwgMV1cbiAgICogICAgYiA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLmRlZXBFcXVhbChhLCBiKSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5lcXVhbChhLCBiKSAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCBtYXRyaXggdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIG1hdHJpeCB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiB0aGUgaW5wdXQgbWF0cmljZXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBlYWNoIG9mIHRoZWlyIGVsZW1lbnRzIGlzIGVxdWFsLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIF9kZWVwRXF1YWwoeC52YWx1ZU9mKCksIHkudmFsdWVPZigpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byBhcnJheXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBhbGwgZWxlbWVudHMgYXJlIGVxdWFsXG4gICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB5XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBib3RoIGFycmF5cyBhcmUgZGVlcCBlcXVhbFxuICAgKi9cblxuICBmdW5jdGlvbiBfZGVlcEVxdWFsKHgsIHkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeSkpIHtcbiAgICAgICAgdmFyIGxlbiA9IHgubGVuZ3RoO1xuXG4gICAgICAgIGlmIChsZW4gIT09IHkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICghX2RlZXBFcXVhbCh4W2ldLCB5W2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZXF1YWwoeCwgeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVlcEVxdWFsID0gY3JlYXRlRGVlcEVxdWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbE51bWJlciA9IGV4cG9ydHMuY3JlYXRlRXF1YWwgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICdlcXVhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVFcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gdGVzdHMgd2hldGhlciB0aGUgcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXNcbiAgICogc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0b1xuICAgKiBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogSW4gY2FzZSBvZiBjb21wbGV4IG51bWJlcnMsIHgucmUgbXVzdCBlcXVhbCB5LnJlLCBhbmQgeC5pbSBtdXN0IGVxdWFsIHkuaW0uXG4gICAqXG4gICAqIFZhbHVlcyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBjb21wYXJlZCBzdHJpY3RseSwgdGh1cyBgbnVsbGAgaXMgb25seVxuICAgKiBlcXVhbCB0byBgbnVsbGAgYW5kIG5vdGhpbmcgZWxzZSwgYW5kIGB1bmRlZmluZWRgIGlzIG9ubHkgZXF1YWwgdG9cbiAgICogYHVuZGVmaW5lZGAgYW5kIG5vdGhpbmcgZWxzZS4gU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoMiArIDIsIDMpICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmVxdWFsKDIgKyAyLCA0KSAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1MCBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzUgbScpXG4gICAqICAgIG1hdGguZXF1YWwoYSwgYikgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBbMiwgNSwgMV1cbiAgICogICAgY29uc3QgZCA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsKGMsIGQpICAgICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlXVxuICAgKiAgICBtYXRoLmRlZXBFcXVhbChjLCBkKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbChcIjEwMDBcIiwgXCIxZTNcIikgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguZXF1YWwoMCwgbnVsbCkgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGxhcmdlckVxLCBjb21wYXJlLCBkZWVwRXF1YWwsIGVxdWFsVGV4dFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgZXF1YWwgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHtcbiAgICAgIC8vIHN0cmljdCBlcXVhbGl0eSBmb3IgbnVsbCBhbmQgdW5kZWZpbmVkP1xuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB4ID09PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB5ID09PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgsIHkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBlcXVhbFNjYWxhcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGVxdWFsU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBlcXVhbChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZXF1YWwobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGVxdWFsKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGVxdWFsU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGVxdWFsU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlcXVhbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbCA9IGNyZWF0ZUVxdWFsO1xudmFyIGNyZWF0ZUVxdWFsTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmMi5lcXVhbFNjYWxhcjtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geSA9PT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXF1YWxTY2FsYXIoeCwgeSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbE51bWJlciA9IGNyZWF0ZUVxdWFsTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhck51bWJlciA9IGV4cG9ydHMuY3JlYXRlRXF1YWxTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbXBsZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29tcGxleFwiKTtcblxudmFyIG5hbWUgPSAnZXF1YWxTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJ107XG52YXIgY3JlYXRlRXF1YWxTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWc7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0d28gc2NhbGFyIHZhbHVlcyBhcmUgbmVhcmx5IGVxdWFsLlxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdmFyIGVxdWFsU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPT09IHk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZXEoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguZXF1YWxzKHkpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb21wbGV4LmNvbXBsZXhFcXVhbHMpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgudmFsdWUsIHkudmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlcXVhbFNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhciA9IGNyZWF0ZUVxdWFsU2NhbGFyO1xudmFyIGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhck51bWJlciA9IGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFRleHQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdlcXVhbFRleHQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZVRleHQnLCAnaXNaZXJvJ107XG52YXIgY3JlYXRlRXF1YWxUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbXBhcmVUZXh0ID0gX3JlZi5jb21wYXJlVGV4dCxcbiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvO1xuXG4gIC8qKlxuICAgKiBDaGVjayBlcXVhbGl0eSBvZiB0d28gc3RyaW5ncy4gQ29tcGFyaXNvbiBpcyBjYXNlIHNlbnNpdGl2ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbFRleHQoJ0hlbGxvJywgJ0hlbGxvJykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCgnYScsICdBJykgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmVxdWFsKCcyZTMnLCAnMjAwMCcpICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCcyZTMnLCAnMjAwMCcpICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCdCJywgWydBJywgJ0InLCAnQyddKSAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgY29tcGFyZVRleHQsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHggRmlyc3Qgc3RyaW5nIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7c3RyaW5nIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0geSBTZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGlzWmVybyhjb21wYXJlVGV4dCh4LCB5KSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFRleHQgPSBjcmVhdGVFcXVhbFRleHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlck51bWJlciA9IGV4cG9ydHMuY3JlYXRlTGFyZ2VyID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIG5hbWUgPSAnbGFyZ2VyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMYXJnZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHZhbHVlIHggaXMgbGFyZ2VyIHRoYW4geS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgbGFyZ2VyIHRoYW4geSBhbmQgdGhlIHJlbGF0aXZlXG4gICAqIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzIGxhcmdlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZVxuICAgKiBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxhcmdlcigyLCAzKSAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGgubGFyZ2VyKDUsIDIgKyAyKSAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnMiBpbmNoJylcbiAgICogICAgbWF0aC5sYXJnZXIoYSwgYikgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXF1YWwsIHVuZXF1YWwsIHNtYWxsZXIsIHNtYWxsZXJFcSwgbGFyZ2VyRXEsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgbGFyZ2VyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBsYXJnZXIgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+IHk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggPiB5ICYmICEoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lmd0KHkpICYmICEoMCwgX25lYXJseUVxdWFsLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5jb21wYXJlKHkpID09PSAxO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFyZ2VyKHgudmFsdWUsIHkudmFsdWUpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBsYXJnZXIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgbGFyZ2VyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGxhcmdlciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGxhcmdlcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGFyZ2VyKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsYXJnZXIobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxhcmdlcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBsYXJnZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGxhcmdlciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBsYXJnZXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGFyZ2VyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbGFyZ2VyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBsYXJnZXIsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGFyZ2VyO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlciA9IGNyZWF0ZUxhcmdlcjtcbnZhciBjcmVhdGVMYXJnZXJOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+IHkgJiYgISgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMYXJnZXJOdW1iZXIgPSBjcmVhdGVMYXJnZXJOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlckVxTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVMYXJnZXJFcSA9IHZvaWQgMDtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ2xhcmdlckVxJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMYXJnZXJFcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdmFsdWUgeCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8geS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgbGFyZ2VyIHRoYW4geSBvciB0aGUgcmVsYXRpdmVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZVxuICAgKiBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyRXEoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyKDIsIDEgKyAxKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5sYXJnZXJFcSgyLCAxICsgMSkgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHksIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgbGFyZ2VyRXEgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+PSB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID49IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5ndGUoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSAhPT0gLTE7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzJyk7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIGlmICgheC5lcXVhbEJhc2UoeSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSB1bml0cyB3aXRoIGRpZmZlcmVudCBiYXNlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYXJnZXJFcSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgbGFyZ2VyRXEpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsYXJnZXJFcSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGFyZ2VyRXEobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxhcmdlckVxKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsYXJnZXJFcSh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBsYXJnZXJFcSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBsYXJnZXJFcSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGFyZ2VyRXEsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGFyZ2VyRXE7XG59KTtcbmV4cG9ydHMuY3JlYXRlTGFyZ2VyRXEgPSBjcmVhdGVMYXJnZXJFcTtcbnZhciBjcmVhdGVMYXJnZXJFcU51bWJlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBbJ3R5cGVkJywgJ2NvbmZpZyddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmMi5jb25maWc7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID49IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlckVxTnVtYmVyID0gY3JlYXRlTGFyZ2VyRXFOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNtYWxsZXJOdW1iZXIgPSBleHBvcnRzLmNyZWF0ZVNtYWxsZXIgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgbmFtZSA9ICdzbWFsbGVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTbWFsbGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB2YWx1ZSB4IGlzIHNtYWxsZXIgdGhhbiB5LlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4geCBpcyBzbWFsbGVyIHRoYW4geSBhbmQgdGhlIHJlbGF0aXZlXG4gICAqIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzIHNtYWxsZXIgdGhhbiB0aGUgY29uZmlndXJlZCBlcHNpbG9uLiBUaGVcbiAgICogZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNtYWxsZXIoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc21hbGxlcigyLCAzKSAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLnNtYWxsZXIoNSwgMiAqIDIpICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUgY20nKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC51bml0KCcyIGluY2gnKVxuICAgKiAgICBtYXRoLnNtYWxsZXIoYSwgYikgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyRXEsIHNtYWxsZXIsIHNtYWxsZXJFcSwgY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgeCBpcyBzbWFsbGVyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBzbWFsbGVyID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPCB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4IDwgeSAmJiAhKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5sdCh5KSAmJiAhKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSA9PT0gLTE7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc21hbGxlcih4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgc21hbGxlcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzbWFsbGVyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzbWFsbGVyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgc21hbGxlciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzbWFsbGVyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgc21hbGxlciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgc21hbGxlciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzbWFsbGVyO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNtYWxsZXIgPSBjcmVhdGVTbWFsbGVyO1xudmFyIGNyZWF0ZVNtYWxsZXJOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA8IHkgJiYgISgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbWFsbGVyTnVtYmVyID0gY3JlYXRlU21hbGxlck51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU21hbGxlckVxTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVTbWFsbGVyRXEgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgbmFtZSA9ICdzbWFsbGVyRXEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNtYWxsZXJFcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdmFsdWUgeCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHkuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiB4IGlzIHNtYWxsZXIgdGhhbiB5IG9yIHRoZSByZWxhdGl2ZVxuICAgKiBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeSBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlXG4gICAqIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zbWFsbGVyRXEoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc21hbGxlcigxICsgMiwgMykgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5zbWFsbGVyRXEoMSArIDIsIDMpICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgbGFyZ2VyLCBsYXJnZXJFcSwgY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgeCBpcyBzbWFsbGVyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBzbWFsbGVyRXEgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA8PSB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4IDw9IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5sdGUoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSAhPT0gMTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMnKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNtYWxsZXJFcSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgc21hbGxlckVxKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBzbWFsbGVyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzbWFsbGVyRXEpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHNtYWxsZXJFcShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc21hbGxlckVxKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyRXEoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgc21hbGxlckVxLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBzbWFsbGVyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgc21hbGxlckVxLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHNtYWxsZXJFcSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgc21hbGxlckVxLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNtYWxsZXJFcTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbWFsbGVyRXEgPSBjcmVhdGVTbWFsbGVyRXE7XG52YXIgY3JlYXRlU21hbGxlckVxTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggPD0geSB8fCAoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU21hbGxlckVxTnVtYmVyID0gY3JlYXRlU21hbGxlckVxTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmVxdWFsTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVVbmVxdWFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIG5hbWUgPSAndW5lcXVhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnZXF1YWxTY2FsYXInLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlVW5lcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgdW5lcXVhbC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHRlc3RzIHdoZXRoZXIgdGhlIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzXG4gICAqIGxhcmdlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlXG4gICAqIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogSW4gY2FzZSBvZiBjb21wbGV4IG51bWJlcnMsIHgucmUgbXVzdCB1bmVxdWFsIHkucmUsIG9yIHguaW0gbXVzdCB1bmVxdWFsIHkuaW0uXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogVmFsdWVzIGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgYXJlIGNvbXBhcmVkIHN0cmljdGx5LCB0aHVzIGBudWxsYCBpcyB1bmVxdWFsXG4gICAqIHdpdGggZXZlcnl0aGluZyBleGNlcHQgYG51bGxgLCBhbmQgYHVuZGVmaW5lZGAgaXMgdW5lcXVhbCB3aXRoIGV2ZXJ5dGhpbmdcbiAgICogZXhjZXB0IGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudW5lcXVhbCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC51bmVxdWFsKDIgKyAyLCAzKSAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC51bmVxdWFsKDIgKyAyLCA0KSAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUwIGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnNSBtJylcbiAgICogICAgbWF0aC51bmVxdWFsKGEsIGIpICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBbMiwgNSwgMV1cbiAgICogICAgY29uc3QgZCA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLnVuZXF1YWwoYywgZCkgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV1cbiAgICogICAgbWF0aC5kZWVwRXF1YWwoYywgZCkgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIG1hdGgudW5lcXVhbCgwLCBudWxsKSAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgZGVlcEVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlciwgbGFyZ2VyRXEsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeCB8IHVuZGVmaW5lZH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IENvbXBsZXggfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXggfCB1bmRlZmluZWR9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgY29tcGFyZWQgdmFsdWVzIGFyZSB1bmVxdWFsLCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICovXG5cbiAgdmFyIHVuZXF1YWwgPSB0eXBlZCgndW5lcXVhbCcsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geSAhPT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHkgIT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geCAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3VuZXF1YWwoeCwgeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIF91bmVxdWFsKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIF91bmVxdWFsLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgX3VuZXF1YWwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgX3VuZXF1YWwsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIF91bmVxdWFsLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgX3VuZXF1YWwsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIF91bmVxdWFsLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfdW5lcXVhbCh4LCB5KSB7XG4gICAgcmV0dXJuICFlcXVhbFNjYWxhcih4LCB5KTtcbiAgfVxuXG4gIHJldHVybiB1bmVxdWFsO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVuZXF1YWwgPSBjcmVhdGVVbmVxdWFsO1xudmFyIGNyZWF0ZVVuZXF1YWxOdW1iZXIgPSAoMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdlcXVhbFNjYWxhciddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYyLmVxdWFsU2NhbGFyO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7XG4gICAgICAvLyBzdHJpY3QgZXF1YWxpdHkgZm9yIG51bGwgYW5kIHVuZGVmaW5lZD9cbiAgICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB5ICE9PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geCAhPT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geSAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB4ICE9PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhZXF1YWxTY2FsYXIoeCwgeSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmVxdWFsTnVtYmVyID0gY3JlYXRlVW5lcXVhbE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0Q2FydGVzaWFuID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0Q2FydGVzaWFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlU2V0Q2FydGVzaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRDYXJ0ZXNpYW4oc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0Q2FydGVzaWFuKFsxLCAyXSwgWzMsIDRdKSAgICAgICAgLy8gcmV0dXJucyBbWzEsIDNdLCBbMSwgNF0sIFsyLCAzXSwgWzIsIDRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZSwgc2V0UG93ZXJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMiAgQSAobXVsdGkpc2V0XG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICBUaGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIChtdWx0aSlzZXRzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpICE9PSAwICYmIHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSAhPT0gMCkge1xuICAgICAgICAvLyBpZiBhbnkgb2YgdGhlbSBpcyBlbXB0eSwgcmV0dXJuIGVtcHR5XG4gICAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHZhciBiMiA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMikgPyBhMiA6IGEyLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYjEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbYjFbaV0sIGIyW2pdXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHJldHVybiBhbiBhcnJheSwgaWYgYm90aCBpbnB1dHMgd2VyZSBhcnJheXNcblxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhMSkgJiYgQXJyYXkuaXNBcnJheShhMikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gLy8gcmV0dXJuIGEgbWF0cml4IG90aGVyd2lzZVxuXG5cbiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgocmVzdWx0KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldENhcnRlc2lhbiA9IGNyZWF0ZVNldENhcnRlc2lhbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0RGlmZmVyZW5jZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldERpZmZlcmVuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTZXREaWZmZXJlbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0czogZXZlcnkgZWxlbWVudCBvZiBzZXQxLCB0aGF0IGlzIG5vdCB0aGUgZWxlbWVudCBvZiBzZXQyLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0RGlmZmVyZW5jZShzZXQxLCBzZXQyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXREaWZmZXJlbmNlKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKSAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDJdXG4gICAqICAgIG1hdGguc2V0RGlmZmVyZW5jZShbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFsxLCAyXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0U3ltRGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gZW1wdHktYW55dGhpbmc9ZW1wdHlcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICB9IGVsc2UgaWYgKHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBhbnl0aGluZy1lbXB0eT1hbnl0aGluZ1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKShhMS50b0FycmF5KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5pZGVudGlmeSkoKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGExKSA/IGExIDogYTEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7XG4gICAgICAgIHZhciBiMiA9ICgwLCBfYXJyYXkuaWRlbnRpZnkpKCgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMikgPyBhMiA6IGEyLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpO1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgdmFyIGluYjI7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGluYjIgPSBmYWxzZTtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgICAgaW5iMiA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaW5iMikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goYjFbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyByZXR1cm4gYW4gYXJyYXksIGlmIGJvdGggaW5wdXRzIHdlcmUgYXJyYXlzXG5cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYTEpICYmIEFycmF5LmlzQXJyYXkoYTIpKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmdlbmVyYWxpemUpKHJlc3VsdCk7XG4gICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2VcblxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KCgwLCBfYXJyYXkuZ2VuZXJhbGl6ZSkocmVzdWx0KSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXREaWZmZXJlbmNlID0gY3JlYXRlU2V0RGlmZmVyZW5jZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0RGlzdGluY3QgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXREaXN0aW5jdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNldERpc3RpbmN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ29sbGVjdCB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBtdWx0aXNldC5cbiAgICogQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0RGlzdGluY3Qoc2V0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXREaXN0aW5jdChbMSwgMSwgMSwgMiwgMiwgM10pICAgICAgICAvLyByZXR1cm5zIFsxLCAyLCAzXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0TXVsdGlwbGljaXR5XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEgIEEgbXVsdGlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIEEgc2V0IGNvbnRhaW5pbmcgdGhlIGRpc3RpbmMgZWxlbWVudHMgb2YgdGhlIG11bHRpc2V0XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBpZiBlbXB0eSwgcmV0dXJuIGVtcHR5XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYSkgPyBhIDogYS50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpO1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgcmVzdWx0LnB1c2goYlswXSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGJbaSAtIDFdKSAhPT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goYltpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHJldHVybiBhbiBhcnJheSwgaWYgdGhlIGlucHV0IHdhcyBhbiBhcnJheVxuXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2VcblxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHJlc3VsdCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXREaXN0aW5jdCA9IGNyZWF0ZVNldERpc3RpbmN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRJbnRlcnNlY3QgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRJbnRlcnNlY3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTZXRJbnRlcnNlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJbnRlcnNlY3Qoc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0SW50ZXJzZWN0KFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKSAgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDRdXG4gICAqICAgIG1hdGguc2V0SW50ZXJzZWN0KFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pICAgIC8vIHJldHVybnMgWzMsIDRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIChtdWx0aSlzZXRzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikge1xuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgaWYgKHN1YnNldChzaXplKGExKSwgbmV3IEluZGV4KDApKSA9PT0gMCB8fCBzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gb2YgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiBlbXB0eVxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuaWRlbnRpZnkpKCgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpO1xuICAgICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmlkZW50aWZ5KSgoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTtcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYjFbaV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcmV0dXJuIGFuIGFycmF5LCBpZiBib3RoIGlucHV0cyB3ZXJlIGFycmF5c1xuXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGExKSAmJiBBcnJheS5pc0FycmF5KGEyKSkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5nZW5lcmFsaXplKShyZXN1bHQpO1xuICAgICAgfSAvLyByZXR1cm4gYSBtYXRyaXggb3RoZXJ3aXNlXG5cblxuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCgoMCwgX2FycmF5LmdlbmVyYWxpemUpKHJlc3VsdCkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0SW50ZXJzZWN0ID0gY3JlYXRlU2V0SW50ZXJzZWN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRJc1N1YnNldCA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldElzU3Vic2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0SXNTdWJzZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgKG11bHRpKXNldCBpcyBhIHN1YnNldCBvZiBhbm90aGVyIChtdWx0aSlzZXQuIChFdmVyeSBlbGVtZW50IG9mIHNldDEgaXMgdGhlIGVsZW1lbnQgb2Ygc2V0Mi4pXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChzZXQxLCBzZXQyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChbMSwgMl0sIFszLCA0LCA1LCA2XSkgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChbMywgNF0sIFszLCA0LCA1LCA2XSkgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gICAgICAgICAgICB0cnVlIHwgZmFsc2VcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoYTEsIGEyKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIC8vIGVtcHR5IGlzIGEgc3Vic2V0IG9mIGFueXRoaW5nXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gYW55dGhpbmcgaXMgbm90IGEgc3Vic2V0IG9mIGVtcHR5XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5pZGVudGlmeSkoKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGExKSA/IGExIDogYTEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmlkZW50aWZ5KSgoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTtcbiAgICAgIHZhciBpbmIyO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluYjIgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGIxW2ldLnZhbHVlLCBiMltqXS52YWx1ZSkgPT09IDAgJiYgYjFbaV0uaWRlbnRpZmllciA9PT0gYjJbal0uaWRlbnRpZmllcikge1xuICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgIGluYjIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluYjIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0SXNTdWJzZXQgPSBjcmVhdGVTZXRJc1N1YnNldDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0TXVsdGlwbGljaXR5ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0TXVsdGlwbGljaXR5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0TXVsdGlwbGljaXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ291bnQgdGhlIG11bHRpcGxpY2l0eSBvZiBhbiBlbGVtZW50IGluIGEgbXVsdGlzZXQuXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eShlbGVtZW50LCBzZXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eSgxLCBbMSwgMiwgMiwgNF0pICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pICAgIC8vIHJldHVybnMgMlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0RGlzdGluY3QsIHNldFNpemVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IGUgIEFuIGVsZW1lbnQgaW4gdGhlIG11bHRpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgICBhICBBIG11bHRpc2V0XG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGhvdyBtYW55IHRpbWVzIHRoZSBtdWx0aXNldCBjb250YWlucyB0aGUgZWxlbWVudFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckZyYWN0aW9uQ29tcGxleEFycmF5TWF0cml4KGUsIGEpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBpZiBlbXB0eSwgcmV0dXJuIDBcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHZhciBiID0gKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKTtcbiAgICAgIHZhciBjb3VudCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29tcGFyZU5hdHVyYWwoYltpXSwgZSkgPT09IDApIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldE11bHRpcGxpY2l0eSA9IGNyZWF0ZVNldE11bHRpcGxpY2l0eTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0UG93ZXJzZXQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRQb3dlcnNldCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCddO1xudmFyIGNyZWF0ZVNldFBvd2Vyc2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBwb3dlcnNldCBvZiBhIChtdWx0aSlzZXQuIChUaGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4pXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldFBvd2Vyc2V0KHNldClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0UG93ZXJzZXQoWzEsIDIsIDNdKSAgICAgICAgLy8gcmV0dXJucyBbW10sIFsxXSwgWzJdLCBbM10sIFsxLCAyXSwgWzEsIDNdLCBbMiwgM10sIFsxLCAyLCAzXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNldENhcnRlc2lhblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXl9ICAgIFRoZSBwb3dlcnNldCBvZiB0aGUgKG11bHRpKXNldFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgZW1wdHksIHJldHVybiBlbXB0eVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHZhciBiID0gKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKTtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIHZhciBudW1iZXIgPSAwO1xuXG4gICAgICB3aGlsZSAobnVtYmVyLnRvU3RyaW5nKDIpLmxlbmd0aCA8PSBiLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHVzaChfc3Vic2V0KGIsIG51bWJlci50b1N0cmluZygyKS5zcGxpdCgnJykucmV2ZXJzZSgpKSk7XG4gICAgICAgIG51bWJlcisrO1xuICAgICAgfSAvLyBjYW4gbm90IHJldHVybiBhIG1hdHJpeCwgYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHNpemUgb2YgdGhlIHN1YmFycmF5c1xuXG5cbiAgICAgIHJldHVybiBfc29ydChyZXN1bHQpO1xuICAgIH1cbiAgfSk7IC8vIGNyZWF0ZSBzdWJzZXRcblxuICBmdW5jdGlvbiBfc3Vic2V0KGFycmF5LCBiaXRhcnJheSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYml0YXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChiaXRhcnJheVtpXSA9PT0gJzEnKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGFycmF5W2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IC8vIHNvcnQgc3Vic2VzdHMgYnkgbGVuZ3RoXG5cblxuICBmdW5jdGlvbiBfc29ydChhcnJheSkge1xuICAgIHZhciB0ZW1wID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpOyBqKyspIHtcbiAgICAgICAgaWYgKGFycmF5W2pdLmxlbmd0aCA+IGFycmF5W2ogKyAxXS5sZW5ndGgpIHtcbiAgICAgICAgICB0ZW1wID0gYXJyYXlbal07XG4gICAgICAgICAgYXJyYXlbal0gPSBhcnJheVtqICsgMV07XG4gICAgICAgICAgYXJyYXlbaiArIDFdID0gdGVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFBvd2Vyc2V0ID0gY3JlYXRlU2V0UG93ZXJzZXQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFNpemUgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRTaXplJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbXBhcmVOYXR1cmFsJ107XG52YXIgY3JlYXRlU2V0U2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWw7XG5cbiAgLyoqXG4gICAqIENvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgYSAobXVsdGkpc2V0LiBXaGVuIGEgc2Vjb25kIHBhcmFtZXRlciBpcyAndHJ1ZScsIGNvdW50IG9ubHkgdGhlIHVuaXF1ZSB2YWx1ZXMuXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldFNpemUoc2V0KVxuICAgKiAgICBtYXRoLnNldFNpemUoc2V0LCB1bmlxdWUpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldFNpemUoWzEsIDIsIDIsIDRdKSAgICAgICAgICAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5zZXRTaXplKFsxLCAyLCAyLCA0XSwgdHJ1ZSkgICAgLy8gcmV0dXJucyAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEgIEEgbXVsdGlzZXRcbiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIChtdWx0aSlzZXRcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoYSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYSkgPyAoMCwgX2FycmF5LmZsYXR0ZW4pKGEpLmxlbmd0aCA6ICgwLCBfYXJyYXkuZmxhdHRlbikoYS50b0FycmF5KCkpLmxlbmd0aDtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgYm9vbGVhbic6IGZ1bmN0aW9uIEFycmF5TWF0cml4Qm9vbGVhbihhLCB1bmlxdWUpIHtcbiAgICAgIGlmICh1bmlxdWUgPT09IGZhbHNlIHx8IGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGEpID8gKDAsIF9hcnJheS5mbGF0dGVuKShhKS5sZW5ndGggOiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEudG9BcnJheSgpKS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYiA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBhLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHZhciBjb3VudCA9IDE7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGJbaSAtIDFdKSAhPT0gMCkge1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRTaXplID0gY3JlYXRlU2V0U2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0U3ltRGlmZmVyZW5jZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldFN5bURpZmZlcmVuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdjb25jYXQnLCAnc3Vic2V0JywgJ3NldERpZmZlcmVuY2UnLCAnSW5kZXgnXTtcbnZhciBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBjb25jYXQgPSBfcmVmLmNvbmNhdCxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgc2V0RGlmZmVyZW5jZSA9IF9yZWYuc2V0RGlmZmVyZW5jZSxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBzeW1tZXRyaWMgZGlmZmVyZW5jZSBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRTeW1EaWZmZXJlbmNlKHNldDEsIHNldDIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldFN5bURpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMiwgNSwgNl1cbiAgICogICAgbWF0aC5zZXRTeW1EaWZmZXJlbmNlKFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pICAgIC8vIHJldHVybnMgWzEsIDIsIDUsIDZdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGExICBBIChtdWx0aSlzZXRcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTIgIEEgKG11bHRpKXNldFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiB0aGUgb3RoZXIgb25lXG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGExKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5mbGF0dGVuKShhMSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIHJldHVybiBjb25jYXQoc2V0RGlmZmVyZW5jZShiMSwgYjIpLCBzZXREaWZmZXJlbmNlKGIyLCBiMSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0U3ltRGlmZmVyZW5jZSA9IGNyZWF0ZVNldFN5bURpZmZlcmVuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFVuaW9uID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0VW5pb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdjb25jYXQnLCAnc3Vic2V0JywgJ3NldEludGVyc2VjdCcsICdzZXRTeW1EaWZmZXJlbmNlJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0VW5pb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIGNvbmNhdCA9IF9yZWYuY29uY2F0LFxuICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBzZXRJbnRlcnNlY3QgPSBfcmVmLnNldEludGVyc2VjdCxcbiAgICAgIHNldFN5bURpZmZlcmVuY2UgPSBfcmVmLnNldFN5bURpZmZlcmVuY2UsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0VW5pb24oc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0VW5pb24oWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICogICAgbWF0aC5zZXRVbmlvbihbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGExICBBIChtdWx0aSlzZXRcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTIgIEEgKG11bHRpKXNldFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIHVuaW9uIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiB0aGUgb3RoZXIgb25lXG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGExKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5mbGF0dGVuKShhMSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIHJldHVybiBjb25jYXQoc2V0U3ltRGlmZmVyZW5jZShiMSwgYjIpLCBzZXRJbnRlcnNlY3QoYjEsIGIyKSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRVbmlvbiA9IGNyZWF0ZVNldFVuaW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcmYgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdlcmYnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVFcmYgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBlcmYgZnVuY3Rpb24gb2YgYSB2YWx1ZSB1c2luZyBhIHJhdGlvbmFsIENoZWJ5c2hldlxuICAgKiBhcHByb3hpbWF0aW9ucyBmb3IgZGlmZmVyZW50IGludGVydmFscyBvZiB4LlxuICAgKlxuICAgKiBUaGlzIGlzIGEgdHJhbnNsYXRpb24gb2YgVy4gSi4gQ29keSdzIEZvcnRyYW4gaW1wbGVtZW50YXRpb24gZnJvbSAxOTg3XG4gICAqICggaHR0cHM6Ly93d3cubmV0bGliLm9yZy9zcGVjZnVuL2VyZiApLiBTZWUgdGhlIEFNUyBwdWJsaWNhdGlvblxuICAgKiBcIlJhdGlvbmFsIENoZWJ5c2hldiBBcHByb3hpbWF0aW9ucyBmb3IgdGhlIEVycm9yIEZ1bmN0aW9uXCIgYnkgVy4gSi4gQ29keVxuICAgKiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhpcyBwcm9jZXNzLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXJmKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmVyZigwLjIpICAgIC8vIHJldHVybnMgMC4yMjI3MDI1ODkyMTA0Nzg0N1xuICAgKiAgICBtYXRoLmVyZigtMC41KSAgIC8vIHJldHVybnMgLTAuNTIwNDk5ODc3ODEzMDQ2NVxuICAgKiAgICBtYXRoLmVyZig0KSAgICAgIC8vIHJldHVybnMgMC45OTk5OTk5ODQ1ODI3NDIxXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggICBBIHJlYWwgbnVtYmVyXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSAgICBUaGUgZXJmIG9mIGB4YFxuICAgKi9cbiAgdmFyIGVyZiA9IHR5cGVkKCduYW1lJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHZhciB5ID0gTWF0aC5hYnMoeCk7XG5cbiAgICAgIGlmICh5ID49IE1BWF9OVU0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA8PSBUSFJFU0gpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpICogZXJmMSh5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPD0gNC4wKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5zaWduKSh4KSAqICgxIC0gZXJmYzIoeSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIuc2lnbikoeCkgKiAoMSAtIGVyZmMzKHkpKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkobiwgZXJmKTtcbiAgICB9IC8vIFRPRE86IEZvciBjb21wbGV4IG51bWJlcnMsIHVzZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdGhlIEZhZGRlZXZhIGZ1bmN0aW9uXG4gICAgLy8gIGZyb20gXCJNb3JlIEVmZmljaWVudCBDb21wdXRhdGlvbiBvZiB0aGUgQ29tcGxleCBFcnJvciBGdW5jdGlvblwiIChBTVMpXG5cbiAgfSk7XG4gIC8qKlxuICAgKiBBcHByb3hpbWF0ZXMgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZigpIGZvciB4IDw9IDAuNDY4NzUgdXNpbmcgdGhpcyBmdW5jdGlvbjpcbiAgICogICAgICAgICAgICAgICBuXG4gICAqIGVyZih4KSA9IHggKiBzdW0gKHBfaiAqIHheKDJqKSkgLyAocV9qICogeF4oMmopKVxuICAgKiAgICAgICAgICAgICAgaj0wXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGVyZjEoeSkge1xuICAgIHZhciB5c3EgPSB5ICogeTtcbiAgICB2YXIgeG51bSA9IFBbMF1bNF0gKiB5c3E7XG4gICAgdmFyIHhkZW4gPSB5c3E7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICB4bnVtID0gKHhudW0gKyBQWzBdW2ldKSAqIHlzcTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMF1baV0pICogeXNxO1xuICAgIH1cblxuICAgIHJldHVybiB5ICogKHhudW0gKyBQWzBdWzNdKSAvICh4ZGVuICsgUVswXVszXSk7XG4gIH1cbiAgLyoqXG4gICAqIEFwcHJveGltYXRlcyB0aGUgY29tcGxlbWVudCBvZiB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmYygpIGZvclxuICAgKiAwLjQ2ODc1IDw9IHggPD0gNC4wIHVzaW5nIHRoaXMgZnVuY3Rpb246XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBuXG4gICAqIGVyZmMoeCkgPSBlXigteF4yKSAqIHN1bSAocF9qICogeF5qKSAvIChxX2ogKiB4XmopXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGo9MFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGVyZmMyKHkpIHtcbiAgICB2YXIgeG51bSA9IFBbMV1bOF0gKiB5O1xuICAgIHZhciB4ZGVuID0geTtcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpICs9IDEpIHtcbiAgICAgIHhudW0gPSAoeG51bSArIFBbMV1baV0pICogeTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMV1baV0pICogeTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gKHhudW0gKyBQWzFdWzddKSAvICh4ZGVuICsgUVsxXVs3XSk7XG4gICAgdmFyIHlzcSA9IHBhcnNlSW50KHkgKiAxNikgLyAxNjtcbiAgICB2YXIgZGVsID0gKHkgLSB5c3EpICogKHkgKyB5c3EpO1xuICAgIHJldHVybiBNYXRoLmV4cCgteXNxICogeXNxKSAqIE1hdGguZXhwKC1kZWwpICogcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBBcHByb3hpbWF0ZXMgdGhlIGNvbXBsZW1lbnQgb2YgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZmMoKSBmb3IgeCA+IDQuMCB1c2luZ1xuICAgKiB0aGlzIGZ1bmN0aW9uOlxuICAgKlxuICAgKiBlcmZjKHgpID0gKGVeKC14XjIpIC8geCkgKiBbIDEvc3FydChwaSkgK1xuICAgKiAgICAgICAgICAgICAgIG5cbiAgICogICAgMS8oeF4yKSAqIHN1bSAocF9qICogeF4oLTJqKSkgLyAocV9qICogeF4oLTJqKSkgXVxuICAgKiAgICAgICAgICAgICAgaj0wXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZXJmYzMoeSkge1xuICAgIHZhciB5c3EgPSAxIC8gKHkgKiB5KTtcbiAgICB2YXIgeG51bSA9IFBbMl1bNV0gKiB5c3E7XG4gICAgdmFyIHhkZW4gPSB5c3E7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICB4bnVtID0gKHhudW0gKyBQWzJdW2ldKSAqIHlzcTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMl1baV0pICogeXNxO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB5c3EgKiAoeG51bSArIFBbMl1bNF0pIC8gKHhkZW4gKyBRWzJdWzRdKTtcbiAgICByZXN1bHQgPSAoU1FSUEkgLSByZXN1bHQpIC8geTtcbiAgICB5c3EgPSBwYXJzZUludCh5ICogMTYpIC8gMTY7XG4gICAgdmFyIGRlbCA9ICh5IC0geXNxKSAqICh5ICsgeXNxKTtcbiAgICByZXR1cm4gTWF0aC5leHAoLXlzcSAqIHlzcSkgKiBNYXRoLmV4cCgtZGVsKSAqIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBlcmY7XG59KTtcbi8qKlxuICogVXBwZXIgYm91bmQgZm9yIHRoZSBmaXJzdCBhcHByb3hpbWF0aW9uIGludGVydmFsLCAwIDw9IHggPD0gVEhSRVNIXG4gKiBAY29uc3RhbnRcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUVyZiA9IGNyZWF0ZUVyZjtcbnZhciBUSFJFU0ggPSAwLjQ2ODc1O1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIGJ5IFcuIEouIENvZHkncyBGb3J0cmFuNzcgaW1wbGVtZW50YXRpb24gdG8gZGVub3RlIHNxcnQocGkpXG4gKiBAY29uc3RhbnRcbiAqL1xuXG52YXIgU1FSUEkgPSA1LjY0MTg5NTgzNTQ3NzU2Mjg2OTVlLTE7XG4vKipcbiAqIENvZWZmaWNpZW50cyBmb3IgZWFjaCB0ZXJtIG9mIHRoZSBudW1lcmF0b3Igc3VtIChwX2opIGZvciBlYWNoIGFwcHJveGltYXRpb25cbiAqIGludGVydmFsIChzZWUgVy4gSi4gQ29keSdzIHBhcGVyIGZvciBtb3JlIGRldGFpbHMpXG4gKiBAY29uc3RhbnRcbiAqL1xuXG52YXIgUCA9IFtbMy4xNjExMjM3NDM4NzA1NjU2MGUwMCwgMS4xMzg2NDE1NDE1MTA1MDE1NmUwMiwgMy43NzQ4NTIzNzY4NTMwMjAyMWUwMiwgMy4yMDkzNzc1ODkxMzg0Njk0N2UwMywgMS44NTc3NzcwNjE4NDYwMzE1M2UtMV0sIFs1LjY0MTg4NDk2OTg4NjcwMDg5ZS0xLCA4Ljg4MzE0OTc5NDM4ODM3NTk0ZTAwLCA2LjYxMTkxOTA2MzcxNDE2Mjk1ZTAxLCAyLjk4NjM1MTM4MTk3NDAwMTMxZTAyLCA4LjgxOTUyMjIxMjQxNzY5MDkwZTAyLCAxLjcxMjA0NzYxMjYzNDA3MDU4ZTAzLCAyLjA1MTA3ODM3NzgyNjA3MTQ3ZTAzLCAxLjIzMDMzOTM1NDc5Nzk5NzI1ZTAzLCAyLjE1MzExNTM1NDc0NDAzODQ2ZS04XSwgWzMuMDUzMjY2MzQ5NjEyMzIzNDRlLTEsIDMuNjAzNDQ4OTk5NDk4MDQ0MzllLTEsIDEuMjU3ODE3MjYxMTEyMjkyNDZlLTEsIDEuNjA4Mzc4NTE0ODc0MjI3NjZlLTIsIDYuNTg3NDkxNjE1Mjk4Mzc4MDNlLTQsIDEuNjMxNTM4NzEzNzMwMjA5NzhlLTJdXTtcbi8qKlxuICogQ29lZmZpY2llbnRzIGZvciBlYWNoIHRlcm0gb2YgdGhlIGRlbm9taW5hdG9yIHN1bSAocV9qKSBmb3IgZWFjaCBhcHByb3hpbWF0aW9uXG4gKiBpbnRlcnZhbCAoc2VlIFcuIEouIENvZHkncyBwYXBlciBmb3IgbW9yZSBkZXRhaWxzKVxuICogQGNvbnN0YW50XG4gKi9cblxudmFyIFEgPSBbWzIuMzYwMTI5MDk1MjM0NDEyMDllMDEsIDIuNDQwMjQ2Mzc5MzQ0NDQxNzNlMDIsIDEuMjgyNjE2NTI2MDc3MzcyMjhlMDMsIDIuODQ0MjM2ODMzNDM5MTcwNjJlMDNdLCBbMS41NzQ0OTI2MTEwNzA5ODM0N2UwMSwgMS4xNzY5Mzk1MDg5MTMxMjQ5OWUwMiwgNS4zNzE4MTEwMTg2MjAwOTg1OGUwMiwgMS42MjEzODk1NzQ1NjY2OTAxOWUwMywgMy4yOTA3OTkyMzU3MzM0NTk2M2UwMywgNC4zNjI2MTkwOTAxNDMyNDcxNmUwMywgMy40MzkzNjc2NzQxNDM3MjE2NGUwMywgMS4yMzAzMzkzNTQ4MDM3NDk0MmUwM10sIFsyLjU2ODUyMDE5MjI4OTgyMjQyZTAwLCAxLjg3Mjk1Mjg0OTkyMzQ2MDQ3ZTAwLCA1LjI3OTA1MTAyOTUxNDI4NDEyZS0xLCA2LjA1MTgzNDEzMTI0NDEzMTkxZS0yLCAyLjMzNTIwNDk3NjI2ODY5MTg1ZS0zXV07XG4vKipcbiAqIE1heGltdW0vbWluaW11bSBzYWZlIG51bWJlcnMgdG8gaW5wdXQgdG8gZXJmKCkgKGluIEVTNissIHRoaXMgbnVtYmVyIGlzXG4gKiBOdW1iZXIuW01BWHxNSU5dX1NBRkVfSU5URUdFUikuIGVyZigpIGZvciBhbGwgbnVtYmVycyBiZXlvbmQgdGhpcyBsaW1pdCB3aWxsXG4gKiByZXR1cm4gMVxuICovXG5cbnZhciBNQVhfTlVNID0gTWF0aC5wb3coMiwgNTMpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYWQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtYWQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWJzJywgJ21hcCcsICdtZWRpYW4nLCAnc3VidHJhY3QnXTtcbnZhciBjcmVhdGVNYWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBtYXAgPSBfcmVmLm1hcCxcbiAgICAgIG1lZGlhbiA9IF9yZWYubWVkaWFuLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogVGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gaXMgZGVmaW5lZCBhcyB0aGUgbWVkaWFuIG9mIHRoZSBhYnNvbHV0ZVxuICAgKiBkZXZpYXRpb25zIGZyb20gdGhlIG1lZGlhbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5tYWQoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5tYWQoQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm1hZCgxMCwgMjAsIDMwKSAgICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgICBtYXRoLm1hZChbMSwgMiwgM10pICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgIG1hdGgubWFkKFtbMSwgMiwgM10sIFs0LCA1LCA2XV0pIC8vIHJldHVybnMgMS41XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgbWVkaWFuLCBtZWFuLCBzdGQsIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzLlxuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbi5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gbWFkKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9tYWQsXG4gICAgLy8gbWFkKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICByZXR1cm4gX21hZChhcmdzKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9tYWQoYXJyYXkpIHtcbiAgICBhcnJheSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoYXJyYXkudmFsdWVPZigpKTtcblxuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIChtYWQpIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBtZWQgPSBtZWRpYW4oYXJyYXkpO1xuICAgICAgcmV0dXJuIG1lZGlhbihtYXAoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWJzKHN1YnRyYWN0KHZhbHVlLCBtZWQpKTtcbiAgICAgIH0pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgZXJyLm1lc3NhZ2UuaW5kZXhPZignbWVkaWFuJykgIT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyLm1lc3NhZ2UucmVwbGFjZSgnbWVkaWFuJywgJ21hZCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtYWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVNYWQgPSBjcmVhdGVNYWQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1heCA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtYXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbGFyZ2VyJ107XG52YXIgY3JlYXRlTWF4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIEluIGNhc2Ugb2YgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSwgdGhlIG1heGltdW0gb2YgdGhlIGZsYXR0ZW5lZCBhcnJheVxuICAgKiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFdoZW4gYGRpbWAgaXMgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIG92ZXIgdGhlIHNlbGVjdGVkXG4gICAqIGRpbWVuc2lvbiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFBhcmFtZXRlciBgZGltYCBpcyB6ZXJvLWJhc2VkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm1heChhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1heChBKVxuICAgKiAgICAgbWF0aC5tYXgoQSwgZGltKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgubWF4KDIsIDEsIDQsIDMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgICBtYXRoLm1heChbMiwgMSwgNCwgM10pICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKlxuICAgKiAgICAgLy8gbWF4aW11bSBvdmVyIGEgc3BlY2lmaWVkIGRpbWVuc2lvbiAoemVyby1iYXNlZClcbiAgICogICAgIG1hdGgubWF4KFtbMiwgNV0sIFs0LCAzXSwgWzEsIDddXSwgMCkgLy8gcmV0dXJucyBbNCwgN11cbiAgICogICAgIG1hdGgubWF4KFtbMiwgNV0sIFs0LCAzXV0sIFsxLCA3XSwgMSkgLy8gcmV0dXJucyBbNSwgNCwgN11cbiAgICpcbiAgICogICAgIG1hdGgubWF4KDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkgICAgLy8gcmV0dXJucyA3LjFcbiAgICogICAgIG1hdGgubWluKDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkgICAgLy8gcmV0dXJucyAtNC41XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1pbiwgcHJvZCwgc3RkLCBzdW0sIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uICp9IGFyZ3MgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEByZXR1cm4geyp9IFRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIG1heChbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfbWF4LFxuICAgIC8vIG1heChbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0udmFsdWVPZigpLCBfbGFyZ2VzdCk7XG4gICAgfSxcbiAgICAvLyBtYXgoYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIGlmICgoMCwgX2NvbGxlY3Rpb24uY29udGFpbnNDb2xsZWN0aW9ucykoYXJncykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2NhbGFyIHZhbHVlcyBleHBlY3RlZCBpbiBmdW5jdGlvbiBtYXgnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9tYXgoYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbGFyZ2VzdCBvZiB0d28gdmFsdWVzXG4gICAqIEBwYXJhbSB7Kn0geFxuICAgKiBAcGFyYW0geyp9IHlcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgeCB3aGVuIHggaXMgbGFyZ2VzdCwgb3IgeSB3aGVuIHkgaXMgbGFyZ2VzdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbGFyZ2VzdCh4LCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsYXJnZXIoeCwgeSkgPyB4IDogeTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtYXgnLCB5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEByZXR1cm4ge251bWJlcn0gbWF4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX21heChhcnJheSkge1xuICAgIHZhciByZXM7XG4gICAgKDAsIF9jb2xsZWN0aW9uLmRlZXBGb3JFYWNoKShhcnJheSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaXNOYU4odmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXMgPSBOYU47XG4gICAgICAgIH0gZWxzZSBpZiAocmVzID09PSB1bmRlZmluZWQgfHwgbGFyZ2VyKHZhbHVlLCByZXMpKSB7XG4gICAgICAgICAgcmVzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWF4JywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWF4IG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU1heCA9IGNyZWF0ZU1heDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWVhbiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtZWFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnXTtcbnZhciBjcmVhdGVNZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGU7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1lYW4gdmFsdWUgb2YgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LCB0aGUgbWVhbiBvZiB0aGUgZmxhdHRlbmVkIGFycmF5XG4gICAqIHdpbGwgYmUgY2FsY3VsYXRlZC4gV2hlbiBgZGltYCBpcyBwcm92aWRlZCwgdGhlIG1heGltdW0gb3ZlciB0aGUgc2VsZWN0ZWRcbiAgICogZGltZW5zaW9uIHdpbGwgYmUgY2FsY3VsYXRlZC4gUGFyYW1ldGVyIGBkaW1gIGlzIHplcm8tYmFzZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubWVhbihhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1lYW4oQSlcbiAgICogICAgIG1hdGgubWVhbihBLCBkaW0pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5tZWFuKDIsIDEsIDQsIDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyLjVcbiAgICogICAgIG1hdGgubWVhbihbMSwgMi43LCAzLjIsIDRdKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMi43MjVcbiAgICpcbiAgICogICAgIG1hdGgubWVhbihbWzIsIDVdLCBbNiwgM10sIFsxLCA3XV0sIDApICAgIC8vIHJldHVybnMgWzMsIDVdXG4gICAqICAgICBtYXRoLm1lYW4oW1syLCA1XSwgWzYsIDNdLCBbMSwgN11dLCAxKSAgICAvLyByZXR1cm5zIFszLjUsIDQuNSwgNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWRpYW4sIG1pbiwgbWF4LCBzdW0sIHByb2QsIHN0ZCwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXNcbiAgICogQHJldHVybiB7Kn0gVGhlIG1lYW4gb2YgYWxsIHZhbHVlc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBtZWFuKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9tZWFuLFxuICAgIC8vIG1lYW4oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9ubWVhbkRpbSxcbiAgICAvLyBtZWFuKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICBpZiAoKDAsIF9jb2xsZWN0aW9uLmNvbnRhaW5zQ29sbGVjdGlvbnMpKGFyZ3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciB2YWx1ZXMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbWVhbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21lYW4oYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWVhbiB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5LCByZXR1cm5pbmcgYVxuICAgKiBuLTEgZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IG1lYW5cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX25tZWFuRGltKGFycmF5LCBkaW0pIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHN1bSA9ICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0sIGFkZCk7XG4gICAgICB2YXIgcyA9IEFycmF5LmlzQXJyYXkoYXJyYXkpID8gKDAsIF9hcnJheS5hcnJheVNpemUpKGFycmF5KSA6IGFycmF5LnNpemUoKTtcbiAgICAgIHJldHVybiBkaXZpZGUoc3VtLCBzW2RpbV0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ21lYW4nKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGN1bGF0ZSB0aGUgbWVhbiB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEByZXR1cm4ge251bWJlcn0gbWVhblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tZWFuKGFycmF5KSB7XG4gICAgdmFyIHN1bTtcbiAgICB2YXIgbnVtID0gMDtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1bSA9IHN1bSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBhZGQoc3VtLCB2YWx1ZSk7XG4gICAgICAgIG51bSsrO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtZWFuJywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHRoZSBtZWFuIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpdmlkZShzdW0sIG51bSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVNZWFuID0gY3JlYXRlTWVhbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWVkaWFuID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaW1wcm92ZUVycm9yTWVzc2FnZSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ltcHJvdmVFcnJvck1lc3NhZ2VcIik7XG5cbnZhciBuYW1lID0gJ21lZGlhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnZGl2aWRlJywgJ2NvbXBhcmUnLCAncGFydGl0aW9uU2VsZWN0J107XG52YXIgY3JlYXRlTWVkaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlLFxuICAgICAgcGFydGl0aW9uU2VsZWN0ID0gX3JlZi5wYXJ0aXRpb25TZWxlY3Q7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1lZGlhbiBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuIFRoZSB2YWx1ZXMgYXJlXG4gICAqIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gSW4gY2FzZSBvZiBhbiBldmVuIG51bWJlciBvZlxuICAgKiB2YWx1ZXMsIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC5cbiAgICogU3VwcG9ydGVkIHR5cGVzIG9mIHZhbHVlcyBhcmU6IE51bWJlciwgQmlnTnVtYmVyLCBVbml0XG4gICAqXG4gICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIG1lZGlhbiBvZiBhbGxcbiAgICogZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm1lZGlhbihhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1lZGlhbihBKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgubWVkaWFuKDUsIDIsIDcpICAgICAgICAvLyByZXR1cm5zIDVcbiAgICogICAgIG1hdGgubWVkaWFuKFszLCAtMSwgNSwgN10pICAvLyByZXR1cm5zIDRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWFuLCBtaW4sIG1heCwgc3VtLCBwcm9kLCBzdGQsIHZhcmlhbmNlLCBxdWFudGlsZVNlcVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWVkaWFuXG4gICAqL1xuICB2YXIgbWVkaWFuID0gdHlwZWQobmFtZSwge1xuICAgIC8vIG1lZGlhbihbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfbWVkaWFuLFxuICAgIC8vIG1lZGlhbihbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1lZGlhbihBLCBkaW0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21lZGlhbihBLCBkaW0pIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7IC8vIHJldHVybiByZWR1Y2UoYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIC4uLilcbiAgICB9LFxuICAgIC8vIG1lZGlhbihhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1lZGlhbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21lZGlhbihhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBtZWRpYW4gb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IG1lZGlhblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbWVkaWFuKGFycmF5KSB7XG4gICAgdHJ5IHtcbiAgICAgIGFycmF5ID0gKDAsIF9hcnJheS5mbGF0dGVuKShhcnJheS52YWx1ZU9mKCkpO1xuICAgICAgdmFyIG51bSA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWVkaWFuIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChudW0gJSAyID09PSAwKSB7XG4gICAgICAgIC8vIGV2ZW46IHJldHVybiB0aGUgYXZlcmFnZSBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXNcbiAgICAgICAgdmFyIG1pZCA9IG51bSAvIDIgLSAxO1xuICAgICAgICB2YXIgcmlnaHQgPSBwYXJ0aXRpb25TZWxlY3QoYXJyYXksIG1pZCArIDEpOyAvLyBhcnJheSBub3cgcGFydGl0aW9uZWQgYXQgbWlkICsgMSwgdGFrZSBtYXggb2YgbGVmdCBwYXJ0XG5cbiAgICAgICAgdmFyIGxlZnQgPSBhcnJheVttaWRdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlkOyArK2kpIHtcbiAgICAgICAgICBpZiAoY29tcGFyZShhcnJheVtpXSwgbGVmdCkgPiAwKSB7XG4gICAgICAgICAgICBsZWZ0ID0gYXJyYXlbaV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1pZGRsZTIobGVmdCwgcmlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb2RkOiByZXR1cm4gdGhlIG1pZGRsZSB2YWx1ZVxuICAgICAgICB2YXIgbSA9IHBhcnRpdGlvblNlbGVjdChhcnJheSwgKG51bSAtIDEpIC8gMik7XG4gICAgICAgIHJldHVybiBtaWRkbGUobSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWVkaWFuJyk7XG4gICAgfVxuICB9IC8vIGhlbHBlciBmdW5jdGlvbiB0byB0eXBlIGNoZWNrIHRoZSBtaWRkbGUgdmFsdWUgb2YgdGhlIGFycmF5XG5cblxuICB2YXIgbWlkZGxlID0gdHlwZWQoe1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckNvbXBsZXhVbml0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9KTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHR5cGUgY2hlY2sgdGhlIHR3byBtaWRkbGUgdmFsdWUgb2YgdGhlIGFycmF5XG5cbiAgdmFyIG1pZGRsZTIgPSB0eXBlZCh7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0LCBudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckNvbXBsZXhVbml0TnVtYmVyQmlnTnVtYmVyQ29tcGxleFVuaXQobGVmdCwgcmlnaHQpIHtcbiAgICAgIHJldHVybiBkaXZpZGUoYWRkKGxlZnQsIHJpZ2h0KSwgMik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1lZGlhbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNZWRpYW4gPSBjcmVhdGVNZWRpYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1pbiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddO1xudmFyIGNyZWF0ZU1pbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgb2YgdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXksIHRoZSBtaW5pbXVtIG9mIHRoZSBmbGF0dGVuZWQgYXJyYXlcbiAgICogd2lsbCBiZSBjYWxjdWxhdGVkLiBXaGVuIGBkaW1gIGlzIHByb3ZpZGVkLCB0aGUgbWluaW11bSBvdmVyIHRoZSBzZWxlY3RlZFxuICAgKiBkaW1lbnNpb24gd2lsbCBiZSBjYWxjdWxhdGVkLiBQYXJhbWV0ZXIgYGRpbWAgaXMgemVyby1iYXNlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5taW4oYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5taW4oQSlcbiAgICogICAgIG1hdGgubWluKEEsIGRpbSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm1pbigyLCAxLCA0LCAzKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICAgbWF0aC5taW4oWzIsIDEsIDQsIDNdKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgIC8vIG1pbmltdW0gb3ZlciBhIHNwZWNpZmllZCBkaW1lbnNpb24gKHplcm8tYmFzZWQpXG4gICAqICAgICBtYXRoLm1pbihbWzIsIDVdLCBbNCwgM10sIFsxLCA3XV0sIDApIC8vIHJldHVybnMgWzEsIDNdXG4gICAqICAgICBtYXRoLm1pbihbWzIsIDVdLCBbNCwgM10sIFsxLCA3XV0sIDEpIC8vIHJldHVybnMgWzIsIDMsIDFdXG4gICAqXG4gICAqICAgICBtYXRoLm1heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpICAgIC8vIHJldHVybnMgNy4xXG4gICAqICAgICBtYXRoLm1pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpICAgIC8vIHJldHVybnMgLTQuNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbWVhbiwgbWVkaWFuLCBtYXgsIHByb2QsIHN0ZCwgc3VtLCB2YXJpYW5jZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWluaW11bSB2YWx1ZVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBtaW4oW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX21pbixcbiAgICAvLyBtaW4oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24ucmVkdWNlKShhcnJheSwgZGltLnZhbHVlT2YoKSwgX3NtYWxsZXN0KTtcbiAgICB9LFxuICAgIC8vIG1pbihhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1pbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21pbihhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0d28gdmFsdWVzXG4gICAqIEBwYXJhbSB7Kn0geFxuICAgKiBAcGFyYW0geyp9IHlcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgeCB3aGVuIHggaXMgc21hbGxlc3QsIG9yIHkgd2hlbiB5IGlzIHNtYWxsZXN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9zbWFsbGVzdCh4LCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzbWFsbGVyKHgsIHkpID8geCA6IHk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWluJywgeSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgaW4gYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IG1pblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9taW4oYXJyYXkpIHtcbiAgICB2YXIgbWluO1xuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbWluID0gTmFOO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbiA9PT0gdW5kZWZpbmVkIHx8IHNtYWxsZXIodmFsdWUsIG1pbikpIHtcbiAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtaW4nLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAobWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtaW4gb2YgYW4gZW1wdHkgYXJyYXknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTWluID0gY3JlYXRlTWluOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNb2RlID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbW9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc05hTicsICdpc051bWVyaWMnXTtcbnZhciBjcmVhdGVNb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTixcbiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljO1xuXG4gIC8qKlxuICAqIENvbXB1dGVzIHRoZSBtb2RlIG9mIGEgc2V0IG9mIG51bWJlcnMgb3IgYSBsaXN0IHdpdGggdmFsdWVzKG51bWJlcnMgb3IgY2hhcmFjdGVycykuXG4gICogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbW9kZXMsIGl0IHJldHVybnMgYSBsaXN0IG9mIHRob3NlIHZhbHVlcy5cbiAgKlxuICAqIFN5bnRheDpcbiAgKlxuICAqICAgICBtYXRoLm1vZGUoYSwgYiwgYywgLi4uKVxuICAqICAgICBtYXRoLm1vZGUoQSlcbiAgKlxuICAqIEV4YW1wbGVzOlxuICAqXG4gICogICAgIG1hdGgubW9kZSgyLCAxLCA0LCAzLCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFsxXVxuICAqICAgICBtYXRoLm1vZGUoWzEsIDIuNywgMy4yLCA0LCAyLjddKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMi43XVxuICAqICAgICBtYXRoLm1vZGUoMSwgNCwgNiwgMSwgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDZdXG4gICogICAgIG1hdGgubW9kZSgnYScsJ2EnLCdiJywnYycpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbXCJhXCJdXG4gICogICAgIG1hdGgubW9kZSgxLCAxLjUsICdhYmMnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMS41LCBcImFiY1wiXVxuICAqXG4gICogU2VlIGFsc286XG4gICpcbiAgKiAgICAgbWVkaWFuLFxuICAqICAgICBtZWFuXG4gICpcbiAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXhcbiAgKiBAcmV0dXJuIHsqfSBUaGUgbW9kZSBvZiBhbGwgdmFsdWVzXG4gICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogX21vZGUsXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgcmV0dXJuIF9tb2RlKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBtb2RlIGluIGFuIDEtZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge0FycmF5fSBtb2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9tb2RlKHZhbHVlcykge1xuICAgIHZhbHVlcyA9ICgwLCBfYXJyYXkuZmxhdHRlbikodmFsdWVzLnZhbHVlT2YoKSk7XG4gICAgdmFyIG51bSA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbW9kZSBvZiBhbiBlbXB0eSBhcnJheScpO1xuICAgIH1cblxuICAgIHZhciBjb3VudCA9IHt9O1xuICAgIHZhciBtb2RlID0gW107XG4gICAgdmFyIG1heCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuXG4gICAgICBpZiAoaXNOdW1lcmljKHZhbHVlKSAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1vZGUgb2YgYW4gYXJyYXkgY29udGFpbmluZyBOYU4gdmFsdWVzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKHZhbHVlIGluIGNvdW50KSkge1xuICAgICAgICBjb3VudFt2YWx1ZV0gPSAwO1xuICAgICAgfVxuXG4gICAgICBjb3VudFt2YWx1ZV0rKztcblxuICAgICAgaWYgKGNvdW50W3ZhbHVlXSA9PT0gbWF4KSB7XG4gICAgICAgIG1vZGUucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGNvdW50W3ZhbHVlXSA+IG1heCkge1xuICAgICAgICBtYXggPSBjb3VudFt2YWx1ZV07XG4gICAgICAgIG1vZGUgPSBbdmFsdWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTW9kZSA9IGNyZWF0ZU1vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVByb2QgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIG5hbWUgPSAncHJvZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZVByb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBwcm9kdWN0IG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3VtIG9mIGFsbFxuICAgKiBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucHJvZChhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLnByb2QoQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm11bHRpcGx5KDIsIDMpICAgICAgICAgICAvLyByZXR1cm5zIDZcbiAgICogICAgIG1hdGgucHJvZCgyLCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgNlxuICAgKiAgICAgbWF0aC5wcm9kKDIsIDMsIDQpICAgICAgICAgICAgLy8gcmV0dXJucyAyNFxuICAgKiAgICAgbWF0aC5wcm9kKFsyLCAzLCA0XSkgICAgICAgICAgLy8gcmV0dXJucyAyNFxuICAgKiAgICAgbWF0aC5wcm9kKFtbMiwgNV0sIFs0LCAzXV0pICAgLy8gcmV0dXJucyAxMjBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG1lYW4sIG1lZGlhbiwgbWluLCBtYXgsIHN1bSwgc3RkLCB2YXJpYW5jZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgcHJvZHVjdCBvZiBhbGwgdmFsdWVzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIHByb2QoW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3Byb2QsXG4gICAgLy8gcHJvZChbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHByb2QoQSwgZGltKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9kKEEsIGRpbSkgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTsgLy8gcmV0dXJuIHJlZHVjZShhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgbWF0aC5wcm9kKVxuICAgIH0sXG4gICAgLy8gcHJvZChhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgcmV0dXJuIF9wcm9kKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIHByb2R1Y3Qgb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHByb2RcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3Byb2QoYXJyYXkpIHtcbiAgICB2YXIgcHJvZDtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2QgPSBwcm9kID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IG11bHRpcGx5KHByb2QsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAncHJvZCcsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwcm9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9kIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Q7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVQcm9kID0gY3JlYXRlUHJvZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUXVhbnRpbGVTZXEgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3F1YW50aWxlU2VxJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseScsICdwYXJ0aXRpb25TZWxlY3QnLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZVF1YW50aWxlU2VxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgcGFydGl0aW9uU2VsZWN0ID0gX3JlZi5wYXJ0aXRpb25TZWxlY3QsXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogVGhlIHNlcXVlbmNlIGlzIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC5cbiAgICogU3VwcG9ydGVkIHR5cGVzIG9mIHNlcXVlbmNlIHZhbHVlcyBhcmU6IE51bWJlciwgQmlnTnVtYmVyLCBVbml0XG4gICAqIFN1cHBvcnRlZCB0eXBlcyBvZiBwcm9iYWJpbGl0eSBhcmU6IE51bWJlciwgQmlnTnVtYmVyXG4gICAqXG4gICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIHByb2Igb3JkZXIgcXVhbnRpbGVcbiAgICogb2YgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShBLCBwcm9iWywgc29ydGVkXSlcbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoQSwgW3Byb2IxLCBwcm9iMiwgLi4uXVssIHNvcnRlZF0pXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKEEsIE5bLCBzb3J0ZWRdKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMC41KSAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKSAgLy8gcmV0dXJucyBbMywgNV1cbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMikgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDVdXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKFstMSwgMywgNSwgN10sIDAuNSwgdHJ1ZSkgICAvLyByZXR1cm5zIDRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWRpYW4sIG1lYW4sIG1pbiwgbWF4LCBzdW0sIHByb2QsIHN0ZCwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSwgTWF0cml4fSBkYXRhICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBBcnJheVxuICAgKiBAcGFyYW0ge051bWJlciwgQmlnTnVtYmVyLCBBcnJheX0gcHJvYk9yTiAgcHJvYiBpcyB0aGUgb3JkZXIgb2YgdGhlIHF1YW50aWxlLCB3aGlsZSBOIGlzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYW1vdW50IG9mIGV2ZW5seSBkaXN0cmlidXRlZCBzdGVwcyBvZlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmFiaWxpdGllczsgb25seSBvbmUgb2YgdGhlc2Ugb3B0aW9ucyBjYW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3ZpZGVkXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gc29ydGVkPWZhbHNlICAgICAgICAgICAgICBpcyBkYXRhIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgICogQHJldHVybiB7TnVtYmVyLCBCaWdOdW1iZXIsIFVuaXQsIEFycmF5fSAgIFF1YW50aWxlKHMpXG4gICAqL1xuICBmdW5jdGlvbiBxdWFudGlsZVNlcShkYXRhLCBwcm9iT3JOLCBzb3J0ZWQpIHtcbiAgICB2YXIgcHJvYkFyciwgZGF0YUFyciwgb25lO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyIHx8IGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Z1bmN0aW9uIHF1YW50aWxlU2VxIHJlcXVpcmVzIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNDb2xsZWN0aW9uKShkYXRhKSkge1xuICAgICAgc29ydGVkID0gc29ydGVkIHx8IGZhbHNlO1xuXG4gICAgICBpZiAodHlwZW9mIHNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRhdGFBcnIgPSBkYXRhLnZhbHVlT2YoKTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikocHJvYk9yTikpIHtcbiAgICAgICAgICBpZiAocHJvYk9yTiA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTi9wcm9iIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4gPD0gMSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIHByb2JbLHNvcnRlZF0pXG4gICAgICAgICAgICByZXR1cm4gX3F1YW50aWxlU2VxKGRhdGFBcnIsIHByb2JPck4sIHNvcnRlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4gPiAxKSB7XG4gICAgICAgICAgICAvLyBxdWFudGlsZVNlcShbYSwgYiwgYywgZCwgLi4uXSwgTlssc29ydGVkXSlcbiAgICAgICAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShwcm9iT3JOKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5QbHVzT25lID0gcHJvYk9yTiArIDE7XG4gICAgICAgICAgICBwcm9iQXJyID0gbmV3IEFycmF5KHByb2JPck4pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2JPck47KSB7XG4gICAgICAgICAgICAgIHByb2JBcnJbaV0gPSBfcXVhbnRpbGVTZXEoZGF0YUFyciwgKytpIC8gblBsdXNPbmUsIHNvcnRlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9iQXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShwcm9iT3JOKSkge1xuICAgICAgICAgIHZhciBCaWdOdW1iZXIgPSBwcm9iT3JOLmNvbnN0cnVjdG9yO1xuXG4gICAgICAgICAgaWYgKHByb2JPck4uaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04vcHJvYiBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9uZSA9IG5ldyBCaWdOdW1iZXIoMSk7XG5cbiAgICAgICAgICBpZiAocHJvYk9yTi5sdGUob25lKSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIHByb2JbLHNvcnRlZF0pXG4gICAgICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihfcXVhbnRpbGVTZXEoZGF0YUFyciwgcHJvYk9yTiwgc29ydGVkKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4uZ3Qob25lKSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIE5bLHNvcnRlZF0pXG4gICAgICAgICAgICBpZiAoIXByb2JPck4uaXNJbnRlZ2VyKCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9IC8vIGxhcmdlc3QgcG9zc2libGUgQXJyYXkgbGVuZ3RoIGlzIDJeMzItMVxuICAgICAgICAgICAgLy8gMl4zMiA8IDEwXjE1LCB0aHVzIHNhZmUgY29udmVyc2lvbiBndWFyYW50ZWVkXG5cblxuICAgICAgICAgICAgdmFyIGludE4gPSBwcm9iT3JOLnRvTnVtYmVyKCk7XG5cbiAgICAgICAgICAgIGlmIChpbnROID4gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMi0xLCBhcyB0aGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgX25QbHVzT25lID0gbmV3IEJpZ051bWJlcihpbnROICsgMSk7XG5cbiAgICAgICAgICAgIHByb2JBcnIgPSBuZXcgQXJyYXkoaW50Tik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBpbnROOykge1xuICAgICAgICAgICAgICBwcm9iQXJyW19pXSA9IG5ldyBCaWdOdW1iZXIoX3F1YW50aWxlU2VxKGRhdGFBcnIsIG5ldyBCaWdOdW1iZXIoKytfaSkuZGl2KF9uUGx1c09uZSksIHNvcnRlZCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcHJvYkFycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9iT3JOKSkge1xuICAgICAgICAgIC8vIHF1YW50aWxlU2VxKFthLCBiLCBjLCBkLCAuLi5dLCBbcHJvYjEsIHByb2IyLCAuLi5dWyxzb3J0ZWRdKVxuICAgICAgICAgIHByb2JBcnIgPSBuZXcgQXJyYXkocHJvYk9yTi5sZW5ndGgpO1xuXG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcHJvYkFyci5sZW5ndGg7ICsrX2kyKSB7XG4gICAgICAgICAgICB2YXIgY3VyclByb2IgPSBwcm9iT3JOW19pMl07XG5cbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShjdXJyUHJvYikpIHtcbiAgICAgICAgICAgICAgaWYgKGN1cnJQcm9iIDwgMCB8fCBjdXJyUHJvYiA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2JhYmlsaXR5IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBpbmNsdXNpdmUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShjdXJyUHJvYikpIHtcbiAgICAgICAgICAgICAgb25lID0gbmV3IGN1cnJQcm9iLmNvbnN0cnVjdG9yKDEpO1xuXG4gICAgICAgICAgICAgIGlmIChjdXJyUHJvYi5pc05lZ2F0aXZlKCkgfHwgY3VyclByb2IuZ3Qob25lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvYmFiaWxpdHkgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gcXVhbnRpbGVTZXEnKTsgLy8gRklYTUU6IGJlY29tZXMgcmVkdW5kYW50IHdoZW4gY29udmVydGVkIHRvIHR5cGVkLWZ1bmN0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2JBcnJbX2kyXSA9IF9xdWFudGlsZVNlcShkYXRhQXJyLCBjdXJyUHJvYiwgc29ydGVkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvYkFycjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb25cbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50IGluIGZ1bmN0aW9uIHF1YW50aWxlU2VxJyk7IC8vIEZJWE1FOiBiZWNvbWVzIHJlZHVuZGFudCB3aGVuIGNvbnZlcnRlZCB0byB0eXBlZC1mdW5jdGlvblxuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb25cbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwYXJhbSB7TnVtYmVyLCBCaWdOdW1iZXJ9IHByb2JcbiAgICogQHBhcmFtIHtCb29sZWFufSBzb3J0ZWRcbiAgICogQHJldHVybiB7TnVtYmVyLCBCaWdOdW1iZXIsIFVuaXR9IHByb2Igb3JkZXIgcXVhbnRpbGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcXVhbnRpbGVTZXEoYXJyYXksIHByb2IsIHNvcnRlZCkge1xuICAgIHZhciBmbGF0ID0gKDAsIF9hcnJheS5mbGF0dGVuKShhcnJheSk7XG4gICAgdmFyIGxlbiA9IGZsYXQubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHF1YW50aWxlIG9mIGFuIGVtcHR5IHNlcXVlbmNlJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKHByb2IpKSB7XG4gICAgICB2YXIgX2luZGV4ID0gcHJvYiAqIChsZW4gLSAxKTtcblxuICAgICAgdmFyIF9mcmFjUGFydCA9IF9pbmRleCAlIDE7XG5cbiAgICAgIGlmIChfZnJhY1BhcnQgPT09IDApIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc29ydGVkID8gZmxhdFtfaW5kZXhdIDogcGFydGl0aW9uU2VsZWN0KGZsYXQsIF9pbmRleCk7XG4gICAgICAgIHZhbGlkYXRlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2ludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihfaW5kZXgpO1xuXG4gICAgICB2YXIgX2xlZnQ7XG5cbiAgICAgIHZhciBfcmlnaHQ7XG5cbiAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgX2xlZnQgPSBmbGF0W19pbnRlZ2VyUGFydF07XG4gICAgICAgIF9yaWdodCA9IGZsYXRbX2ludGVnZXJQYXJ0ICsgMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcmlnaHQgPSBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgX2ludGVnZXJQYXJ0ICsgMSk7IC8vIG1heCBvZiBwYXJ0aXRpb24gaXMga3RoIGxhcmdlc3RcblxuICAgICAgICBfbGVmdCA9IGZsYXRbX2ludGVnZXJQYXJ0XTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9pbnRlZ2VyUGFydDsgKytpKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmUoZmxhdFtpXSwgX2xlZnQpID4gMCkge1xuICAgICAgICAgICAgX2xlZnQgPSBmbGF0W2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YWxpZGF0ZShfbGVmdCk7XG4gICAgICB2YWxpZGF0ZShfcmlnaHQpOyAvLyBRKHByb2IpID0gKDEtZikqQVtmbG9vcihpbmRleCldICsgZipBW2Zsb29yKGluZGV4KSsxXVxuXG4gICAgICByZXR1cm4gYWRkKG11bHRpcGx5KF9sZWZ0LCAxIC0gX2ZyYWNQYXJ0KSwgbXVsdGlwbHkoX3JpZ2h0LCBfZnJhY1BhcnQpKTtcbiAgICB9IC8vIElmIHByb2IgaXMgYSBCaWdOdW1iZXJcblxuXG4gICAgdmFyIGluZGV4ID0gcHJvYi50aW1lcyhsZW4gLSAxKTtcblxuICAgIGlmIChpbmRleC5pc0ludGVnZXIoKSkge1xuICAgICAgaW5kZXggPSBpbmRleC50b051bWJlcigpO1xuXG4gICAgICB2YXIgX3ZhbHVlID0gc29ydGVkID8gZmxhdFtpbmRleF0gOiBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgaW5kZXgpO1xuXG4gICAgICB2YWxpZGF0ZShfdmFsdWUpO1xuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIgaW50ZWdlclBhcnQgPSBpbmRleC5mbG9vcigpO1xuICAgIHZhciBmcmFjUGFydCA9IGluZGV4Lm1pbnVzKGludGVnZXJQYXJ0KTtcbiAgICB2YXIgaW50ZWdlclBhcnROdW1iZXIgPSBpbnRlZ2VyUGFydC50b051bWJlcigpO1xuICAgIHZhciBsZWZ0O1xuICAgIHZhciByaWdodDtcblxuICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgIGxlZnQgPSBmbGF0W2ludGVnZXJQYXJ0TnVtYmVyXTtcbiAgICAgIHJpZ2h0ID0gZmxhdFtpbnRlZ2VyUGFydE51bWJlciArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByaWdodCA9IHBhcnRpdGlvblNlbGVjdChmbGF0LCBpbnRlZ2VyUGFydE51bWJlciArIDEpOyAvLyBtYXggb2YgcGFydGl0aW9uIGlzIGt0aCBsYXJnZXN0XG5cbiAgICAgIGxlZnQgPSBmbGF0W2ludGVnZXJQYXJ0TnVtYmVyXTtcblxuICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgaW50ZWdlclBhcnROdW1iZXI7ICsrX2kzKSB7XG4gICAgICAgIGlmIChjb21wYXJlKGZsYXRbX2kzXSwgbGVmdCkgPiAwKSB7XG4gICAgICAgICAgbGVmdCA9IGZsYXRbX2kzXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhbGlkYXRlKGxlZnQpO1xuICAgIHZhbGlkYXRlKHJpZ2h0KTsgLy8gUShwcm9iKSA9ICgxLWYpKkFbZmxvb3IoaW5kZXgpXSArIGYqQVtmbG9vcihpbmRleCkrMV1cblxuICAgIHZhciBvbmUgPSBuZXcgZnJhY1BhcnQuY29uc3RydWN0b3IoMSk7XG4gICAgcmV0dXJuIGFkZChtdWx0aXBseShsZWZ0LCBvbmUubWludXMoZnJhY1BhcnQpKSwgbXVsdGlwbHkocmlnaHQsIGZyYWNQYXJ0KSk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFycmF5IHZhbHVlIHR5cGVzIGFyZSB2YWxpZCwgdGhyb3cgZXJyb3Igb3RoZXJ3aXNlLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IFVuaXR9IHhcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0fSB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgdmFyIHZhbGlkYXRlID0gdHlwZWQoe1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyVW5pdCh4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcXVhbnRpbGVTZXE7XG59KTtcbmV4cG9ydHMuY3JlYXRlUXVhbnRpbGVTZXEgPSBjcmVhdGVRdWFudGlsZVNlcTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RkID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3RkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTtcbnZhciBjcmVhdGVTdGQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIHZhcmlhbmNlID0gX3JlZi52YXJpYW5jZTtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIFRoZSBzdGFuZGFyZCBkZXZpYXRpb25zIGlzIGRlZmluZWQgYXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YXJpYW5jZTpcbiAgICogYHN0ZChBKSA9IHNxcnQodmFyaWFuY2UoQSkpYC5cbiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uXG4gICAqIG92ZXIgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZCBieSBkZWZhdWx0LCB1bmxlc3MgYW4gYXhpcyBpcyBzcGVjaWZpZWRcbiAgICogaW4gd2hpY2ggY2FzZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIHdpbGwgYmUgY29tcHV0ZWQgYWxvbmcgdGhhdCBheGlzLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIGNvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBhbG9uZyB0aGUgcm93c1xuICAgKiBvciBjb2x1bW5zIG9mIGEgbWF0cml4IGJ5IHNwZWNpZnlpbmcgdGhlIGRpbWVuc2lvbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKlxuICAgKiBPcHRpb25hbGx5LCB0aGUgdHlwZSBvZiBub3JtYWxpemF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgdGhlIGZpbmFsXG4gICAqIHBhcmFtZXRlci4gVGhlIHBhcmFtZXRlciBgbm9ybWFsaXphdGlvbmAgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAgICpcbiAgICogLSAndW5iaWFzZWQnIChkZWZhdWx0KSBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gLSAxKVxuICAgKiAtICd1bmNvcnJlY3RlZCcgICAgICAgIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSBuXG4gICAqIC0gJ2JpYXNlZCcgICAgICAgICAgICAgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuICsgMSlcbiAgICpcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zdGQoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5zdGQoQSlcbiAgICogICAgIG1hdGguc3RkKEEsIG5vcm1hbGl6YXRpb24pXG4gICAqICAgICBtYXRoLnN0ZChBLCBkaW1lbnNpb24pXG4gICAqICAgICBtYXRoLnN0ZChBLCBkaW1lbnNpb24sIG5vcm1hbGl6YXRpb24pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zdGQoMiwgNCwgNikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICogICAgIG1hdGguc3RkKFsyLCA0LCA2LCA4XSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyLjU4MTk4ODg5NzQ3MTYxMVxuICAgKiAgICAgbWF0aC5zdGQoWzIsIDQsIDYsIDhdLCAndW5jb3JyZWN0ZWQnKSAvLyByZXR1cm5zIDIuMjM2MDY3OTc3NDk5NzlcbiAgICogICAgIG1hdGguc3RkKFsyLCA0LCA2LCA4XSwgJ2JpYXNlZCcpICAgICAgLy8gcmV0dXJucyAyXG4gICAqXG4gICAqICAgICBtYXRoLnN0ZChbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAgICAgIC8vIHJldHVybnMgMS44NzA4Mjg2OTMzODY5NzA3XG4gICAqICAgICBtYXRoLnN0ZChbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAwKSAgICAvLyByZXR1cm5zIFsyLjEyMTMyMDM0MzU1OTY0MjQsIDIuODI4NDI3MTI0NzQ2MTkwMywgMy41MzU1MzM5MDU5MzI3Mzc4XVxuICAgKiAgICAgbWF0aC5zdGQoW1sxLCAyLCAzXSwgWzQsIDYsIDhdXSwgMSkgICAgLy8gcmV0dXJucyBbMSwgMl1cbiAgICogICAgIG1hdGguc3RkKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEsICdiaWFzZWQnKSAvLyByZXR1cm5zIFswLjcwNzEwNjc4MTE4NjU0NzYsIDEuNDE0MjEzNTYyMzczMDk1MV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG1lYW4sIG1lZGlhbiwgbWF4LCBtaW4sIHByb2QsIHN1bSwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW25vcm1hbGl6YXRpb249J3VuYmlhc2VkJ11cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGhvdyB0byBub3JtYWxpemUgdGhlIHZhcmlhbmNlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAndW5iaWFzZWQnIChkZWZhdWx0KSwgJ3VuY29ycmVjdGVkJywgb3IgJ2JpYXNlZCcuXG4gICAqIEBwYXJhbSBkaW1lbnNpb24ge251bWJlciB8IEJpZ051bWJlcn1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBheGlzIHRvIGNvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmb3IgYSBtYXRyaXhcbiAgICogQHJldHVybiB7Kn0gVGhlIHN0YW5kYXJkIGRldmlhdGlvblxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3N0ZCxcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGQsIC4uLl0sIG5vcm1hbGl6YXRpb24pXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBfc3RkLFxuICAgIC8vIHN0ZChbYSwgYiwgYywgYywgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogX3N0ZCxcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSwgbm9ybWFsaXphdGlvbilcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogX3N0ZCxcbiAgICAvLyBzdGQoYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIHJldHVybiBfc3RkKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3N0ZChhcnJheSwgbm9ybWFsaXphdGlvbikge1xuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gc3RkIHJlcXVpcmVzIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMgKDAgcHJvdmlkZWQpJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzcXJ0KHZhcmlhbmNlLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJiBlcnIubWVzc2FnZS5pbmRleE9mKCcgdmFyaWFuY2UnKSAhPT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnIubWVzc2FnZS5yZXBsYWNlKCcgdmFyaWFuY2UnLCAnIHN0ZCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVTdGQgPSBjcmVhdGVTdGQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAnc3VtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdhZGQnLCAnP2JpZ251bWJlcicsICc/ZnJhY3Rpb24nXTtcbnZhciBjcmVhdGVTdW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBzdW0gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBzdW0gb2YgYWxsXG4gICAqIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zdW0oYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5zdW0oQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnN1bSgyLCAxLCA0LCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTBcbiAgICogICAgIG1hdGguc3VtKFsyLCAxLCA0LCAzXSkgICAgICAgICAgICAgLy8gcmV0dXJucyAxMFxuICAgKiAgICAgbWF0aC5zdW0oW1syLCA1XSwgWzQsIDNdLCBbMSwgN11dKSAvLyByZXR1cm5zIDIyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1pbiwgbWF4LCBwcm9kLCBzdGQsIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uICp9IGFyZ3MgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEByZXR1cm4geyp9IFRoZSBzdW0gb2YgYWxsIHZhbHVlc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBzdW0oW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3N1bSxcbiAgICAvLyBzdW0oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9uc3VtRGltLFxuICAgIC8vIHN1bShhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHN1bScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3N1bShhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBzdW0gb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHN1bVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfc3VtKGFycmF5KSB7XG4gICAgdmFyIHN1bTtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1bSA9IHN1bSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBhZGQoc3VtLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ3N1bScsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzdW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc3dpdGNoIChjb25maWcubnVtYmVyKSB7XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnQmlnTnVtYmVyJzpcbiAgICAgICAgICByZXR1cm4gYmlnbnVtYmVyID8gYmlnbnVtYmVyKDApIDogKDAsIF9ub29wLm5vQmlnbnVtYmVyKSgpO1xuXG4gICAgICAgIGNhc2UgJ0ZyYWN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gZnJhY3Rpb24gPyBmcmFjdGlvbigwKSA6ICgwLCBfbm9vcC5ub0ZyYWN0aW9uKSgpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1bTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9uc3VtRGltKGFycmF5LCBkaW0pIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHN1bSA9ICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0sIGFkZCk7XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ3N1bScpO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bSA9IGNyZWF0ZVN1bTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1wcm92ZUVycm9yTWVzc2FnZSA9IGltcHJvdmVFcnJvck1lc3NhZ2U7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbi8qKlxuICogSW1wcm92ZSBlcnJvciBtZXNzYWdlcyBmb3Igc3RhdGlzdGljcyBmdW5jdGlvbnMuIEVycm9ycyBhcmUgdHlwaWNhbGx5XG4gKiB0aHJvd24gaW4gYW4gaW50ZXJuYWxseSB1c2VkIGZ1bmN0aW9uIGxpa2UgbGFyZ2VyLCBjYXVzaW5nIHRoZSBlcnJvclxuICogbm90IHRvIG1lbnRpb24gdGhlIGZ1bmN0aW9uIChsaWtlIG1heCkgd2hpY2ggaXMgYWN0dWFsbHkgdXNlZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbk5hbWVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuICogQHJldHVybiB7RXJyb3J9XG4gKi9cbmZ1bmN0aW9uIGltcHJvdmVFcnJvck1lc3NhZ2UoZXJyLCBmbk5hbWUsIHZhbHVlKSB7XG4gIC8vIFRPRE86IGFkZCBpbmZvcm1hdGlvbiB3aXRoIHRoZSBpbmRleCAoYWxzbyBuZWVkcyB0cmFuc2Zvcm0gaW4gZXhwcmVzc2lvbiBwYXJzZXIpXG4gIHZhciBkZXRhaWxzO1xuXG4gIGlmIChTdHJpbmcoZXJyKS5pbmRleE9mKCdVbmV4cGVjdGVkIHR5cGUnKSAhPT0gLTEpIHtcbiAgICBkZXRhaWxzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyAnICh0eXBlOiAnICsgKDAsIF9pcy50eXBlT2YpKHZhbHVlKSArICcsIHZhbHVlOiAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJyknIDogJyAodHlwZTogJyArIGVyci5kYXRhLmFjdHVhbCArICcpJztcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSAnICsgZm5OYW1lICsgJywgdW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50JyArIGRldGFpbHMpO1xuICB9XG5cbiAgaWYgKFN0cmluZyhlcnIpLmluZGV4T2YoJ2NvbXBsZXggbnVtYmVycycpICE9PSAtMSkge1xuICAgIGRldGFpbHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/ICcgKHR5cGU6ICcgKyAoMCwgX2lzLnR5cGVPZikodmFsdWUpICsgJywgdmFsdWU6ICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnKScgOiAnJztcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSAnICsgZm5OYW1lICsgJywgbm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzJyArIGRldGFpbHMpO1xuICB9XG5cbiAgcmV0dXJuIGVycjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFZhciA9IGV4cG9ydHMuY3JlYXRlVmFyaWFuY2UgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG52YXIgREVGQVVMVF9OT1JNQUxJWkFUSU9OID0gJ3VuYmlhc2VkJztcbnZhciBuYW1lID0gJ3ZhcmlhbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAnYXBwbHknLCAnaXNOYU4nXTtcbnZhciBjcmVhdGVWYXJpYW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgYXBwbHkgPSBfcmVmLmFwcGx5LFxuICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB2YXJpYW5jZSBvZiBhIG1hdHJpeCBvciBhICBsaXN0IHdpdGggdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSB2YXJpYW5jZSBvdmVyIGFsbFxuICAgKiBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIEFkZGl0aW9uYWxseSwgaXQgaXMgcG9zc2libGUgdG8gY29tcHV0ZSB0aGUgdmFyaWFuY2UgYWxvbmcgdGhlIHJvd3NcbiAgICogb3IgY29sdW1ucyBvZiBhIG1hdHJpeCBieSBzcGVjaWZ5aW5nIHRoZSBkaW1lbnNpb24gYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICpcbiAgICogT3B0aW9uYWxseSwgdGhlIHR5cGUgb2Ygbm9ybWFsaXphdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIHRoZSBmaW5hbFxuICAgKiBwYXJhbWV0ZXIuIFRoZSBwYXJhbWV0ZXIgYG5vcm1hbGl6YXRpb25gIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gICAqXG4gICAqIC0gJ3VuYmlhc2VkJyAoZGVmYXVsdCkgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuIC0gMSlcbiAgICogLSAndW5jb3JyZWN0ZWQnICAgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgblxuICAgKiAtICdiaWFzZWQnICAgICAgICAgICAgIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSAobiArIDEpXG4gICAqXG4gICAqXG4gICAqIE5vdGUgdGhhdCBvbGRlciBicm93c2VyIG1heSBub3QgbGlrZSB0aGUgdmFyaWFibGUgbmFtZSBgdmFyYC4gSW4gdGhhdFxuICAgKiBjYXNlLCB0aGUgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhcyBgbWF0aFsndmFyJ10oLi4uKWAgaW5zdGVhZCBvZlxuICAgKiBgbWF0aC52YXIoLi4uKWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudmFyaWFuY2UoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBLCBub3JtYWxpemF0aW9uKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBLCBkaW1lbnNpb24pXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKEEsIGRpbWVuc2lvbiwgbm9ybWFsaXphdGlvbilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKDIsIDQsIDYpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFsyLCA0LCA2LCA4XSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA2LjY2NjY2NjY2NjY2NjY2N1xuICAgKiAgICAgbWF0aC52YXJpYW5jZShbMiwgNCwgNiwgOF0sICd1bmNvcnJlY3RlZCcpIC8vIHJldHVybnMgNVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbMiwgNCwgNiwgOF0sICdiaWFzZWQnKSAgICAgIC8vIHJldHVybnMgNFxuICAgKlxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAgICAgIC8vIHJldHVybnMgMy41XG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDApICAgLy8gcmV0dXJucyBbNC41LCA4LCAxMi41XVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAxKSAgIC8vIHJldHVybnMgWzEsIDRdXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEsICdiaWFzZWQnKSAvLyByZXR1cm5zIFswLjUsIDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1heCwgbWluLCBwcm9kLCBzdGQsIHN1bVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbm9ybWFsaXphdGlvbj0ndW5iaWFzZWQnXVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgaG93IHRvIG5vcm1hbGl6ZSB0aGUgdmFyaWFuY2UuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlICd1bmJpYXNlZCcgKGRlZmF1bHQpLCAndW5jb3JyZWN0ZWQnLCBvciAnYmlhc2VkJy5cbiAgICogQHBhcmFtIGRpbWVuc2lvbiB7bnVtYmVyIHwgQmlnTnVtYmVyfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgdGhlIGF4aXMgdG8gY29tcHV0ZSB0aGUgdmFyaWFuY2UgZm9yIGEgbWF0cml4XG4gICAqIEByZXR1cm4geyp9IFRoZSB2YXJpYW5jZVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhcnJheSkge1xuICAgICAgcmV0dXJuIF92YXIoYXJyYXksIERFRkFVTFRfTk9STUFMSVpBVElPTik7XG4gICAgfSxcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgZCwgLi4uXSwgbm9ybWFsaXphdGlvbilcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IF92YXIsXG4gICAgLy8gdmFyaWFuY2UoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIHJldHVybiBfdmFyRGltKGFycmF5LCBkaW0sIERFRkFVTFRfTk9STUFMSVpBVElPTik7XG4gICAgfSxcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgYywgLi4uXSwgZGltLCBub3JtYWxpemF0aW9uKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnOiBfdmFyRGltLFxuICAgIC8vIHZhcmlhbmNlKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICByZXR1cm4gX3ZhcihhcmdzLCBERUZBVUxUX05PUk1BTElaQVRJT04pO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5vcm1hbGl6YXRpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGhvdyB0byBub3JtYWxpemUgdGhlIHZhcmlhbmNlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3VuYmlhc2VkJyAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gLSAxKVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3VuY29ycmVjdGVkJyBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ2JpYXNlZCcgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gKyAxKVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHZhcmlhbmNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF92YXIoYXJyYXksIG5vcm1hbGl6YXRpb24pIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgbnVtID0gMDtcblxuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gdmFyaWFuY2UgcmVxdWlyZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVycyAoMCBwcm92aWRlZCknKTtcbiAgICB9IC8vIGNhbGN1bGF0ZSB0aGUgbWVhbiBhbmQgbnVtYmVyIG9mIGVsZW1lbnRzXG5cblxuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3VtID0gYWRkKHN1bSwgdmFsdWUpO1xuICAgICAgICBudW0rKztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAndmFyaWFuY2UnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG51bSA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHZhcmlhbmNlIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgdmFyIG1lYW4gPSBkaXZpZGUoc3VtLCBudW0pOyAvLyBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlXG5cbiAgICBzdW0gPSAwO1xuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyIGRpZmYgPSBzdWJ0cmFjdCh2YWx1ZSwgbWVhbik7XG4gICAgICBzdW0gPSBhZGQoc3VtLCBtdWx0aXBseShkaWZmLCBkaWZmKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoaXNOYU4oc3VtKSkge1xuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG5vcm1hbGl6YXRpb24pIHtcbiAgICAgIGNhc2UgJ3VuY29ycmVjdGVkJzpcbiAgICAgICAgcmV0dXJuIGRpdmlkZShzdW0sIG51bSk7XG5cbiAgICAgIGNhc2UgJ2JpYXNlZCc6XG4gICAgICAgIHJldHVybiBkaXZpZGUoc3VtLCBudW0gKyAxKTtcblxuICAgICAgY2FzZSAndW5iaWFzZWQnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHplcm8gPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShzdW0pID8gc3VtLm11bCgwKSA6IDA7XG4gICAgICAgICAgcmV0dXJuIG51bSA9PT0gMSA/IHplcm8gOiBkaXZpZGUoc3VtLCBudW0gLSAxKTtcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9ybWFsaXphdGlvbiBcIicgKyBub3JtYWxpemF0aW9uICsgJ1wiLiAnICsgJ0Nob29zZSBcInVuYmlhc2VkXCIgKGRlZmF1bHQpLCBcInVuY29ycmVjdGVkXCIsIG9yIFwiYmlhc2VkXCIuJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX3ZhckRpbShhcnJheSwgZGltLCBub3JtYWxpemF0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiB2YXJpYW5jZSByZXF1aXJlcyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzICgwIHByb3ZpZGVkKScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXBwbHkoYXJyYXksIGRpbSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIF92YXIoeCwgbm9ybWFsaXphdGlvbik7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICd2YXJpYW5jZScpO1xuICAgIH1cbiAgfVxufSk7IC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNi4wLjAuIERhdGU6IDIwMTgtMTEtMDlcblxuZXhwb3J0cy5jcmVhdGVWYXJpYW5jZSA9IGNyZWF0ZVZhcmlhbmNlO1xudmFyIGNyZWF0ZURlcHJlY2F0ZWRWYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ3ZhcicsIFsndmFyaWFuY2UnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB2YXJpYW5jZSA9IF9yZWYyLnZhcmlhbmNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnRnVuY3Rpb24gXCJ2YXJcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwidmFyaWFuY2VcIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYW5jZS5hcHBseSh2YXJpYW5jZSwgYXJncyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFZhciA9IGNyZWF0ZURlcHJlY2F0ZWRWYXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvcm1hdCA9IHZvaWQgMDtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZm9ybWF0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRm9ybWF0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogRm9ybWF0IGEgdmFsdWUgb2YgYW55IHR5cGUgaW50byBhIHN0cmluZy5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZvcm1hdCh2YWx1ZSlcbiAgICogICAgbWF0aC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gICAqICAgIG1hdGguZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pXG4gICAqICAgIG1hdGguZm9ybWF0KHZhbHVlLCBjYWxsYmFjaylcbiAgICpcbiAgICogV2hlcmU6XG4gICAqXG4gICAqICAtIGB2YWx1ZTogKmBcbiAgICogICAgVGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxuICAgKiAgLSBgb3B0aW9uczogT2JqZWN0YFxuICAgKiAgICBBbiBvYmplY3Qgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgKiAgICAtIGBub3RhdGlvbjogc3RyaW5nYFxuICAgKiAgICAgIE51bWJlciBub3RhdGlvbi4gQ2hvb3NlIGZyb206XG4gICAqICAgICAgLSAnZml4ZWQnXG4gICAqICAgICAgICBBbHdheXMgdXNlIHJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uLlxuICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40MCcgYW5kICcxNDAwMDAwMCdcbiAgICogICAgICAtICdleHBvbmVudGlhbCdcbiAgICogICAgICAgIEFsd2F5cyB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24uXG4gICAqICAgICAgICBGb3IgZXhhbXBsZSAnMS4yMzRlKzInIGFuZCAnMS40ZSs3J1xuICAgKiAgICAgIC0gJ2VuZ2luZWVyaW5nJ1xuICAgKiAgICAgICAgQWx3YXlzIHVzZSBlbmdpbmVlcmluZyBub3RhdGlvbjogYWx3YXlzIGhhdmUgZXhwb25lbnRpYWwgbm90YXRpb24sXG4gICAqICAgICAgICBhbmQgc2VsZWN0IHRoZSBleHBvbmVudCB0byBiZSBhIG11bHRpcGxlIG9mIDMuXG4gICAqICAgICAgICBGb3IgZXhhbXBsZSAnMTIzLjRlKzAnIGFuZCAnMTQuMGUrNidcbiAgICogICAgICAtICdhdXRvJyAoZGVmYXVsdClcbiAgICogICAgICAgIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gICAqICAgICAgICBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcywgYW5kIHVzZXMgZXhwb25lbnRpYWwgbm90YXRpb24gZWxzZXdoZXJlLlxuICAgKiAgICAgICAgTG93ZXIgYm91bmQgaXMgaW5jbHVkZWQsIHVwcGVyIGJvdW5kIGlzIGV4Y2x1ZGVkLlxuICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAgICogICAgLSBgcHJlY2lzaW9uOiBudW1iZXJgXG4gICAqICAgICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZCB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuIEluIGNhc2VcbiAgICogICAgICBvZiBub3RhdGlvbnMgJ2V4cG9uZW50aWFsJywgJ2VuZ2luZWVyaW5nJywgYW5kICdhdXRvJywgYHByZWNpc2lvbmBcbiAgICogICAgICBkZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIHJldHVybmVkLlxuICAgKiAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJywgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gICAqICAgICAgc2lnbmlmaWNhbnQgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LlxuICAgKiAgICAgIGBwcmVjaXNpb25gIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICAgKiAgICAtIGBsb3dlckV4cDogbnVtYmVyYFxuICAgKiAgICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSBsb3dlciBib3VuZGFyeSBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGhcbiAgICogICAgICBhbiBleHBvbmVudCB3aGVuIGBub3RhdGlvbj0nYXV0b2AuIERlZmF1bHQgdmFsdWUgaXMgYC0zYC5cbiAgICogICAgLSBgdXBwZXJFeHA6IG51bWJlcmBcbiAgICogICAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgdXBwZXIgYm91bmRhcnkgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoXG4gICAqICAgICAgYW4gZXhwb25lbnQgd2hlbiBgbm90YXRpb249J2F1dG9gLiBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAgICogICAgLSBgZnJhY3Rpb246IHN0cmluZ2AuIEF2YWlsYWJsZSB2YWx1ZXM6ICdyYXRpbycgKGRlZmF1bHQpIG9yICdkZWNpbWFsJy5cbiAgICogICAgICBGb3IgZXhhbXBsZSBgZm9ybWF0KGZyYWN0aW9uKDEsIDMpKWAgd2lsbCBvdXRwdXQgJzEvMycgd2hlbiAncmF0aW8nIGlzXG4gICAqICAgICAgY29uZmlndXJlZCwgYW5kIHdpbGwgb3V0cHV0IGAwLigzKWAgd2hlbiAnZGVjaW1hbCcgaXMgY29uZmlndXJlZC5cbiAgICogLSBgY2FsbGJhY2s6IGZ1bmN0aW9uYFxuICAgKiAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24sIGludm9rZWQgZm9yIGFsbCBudW1lcmljIGVsZW1lbnRzIGluIGB2YWx1ZWAsXG4gICAqICAgZm9yIGV4YW1wbGUgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4LCBvciB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5XG4gICAqICAgcGFydHMgb2YgYSBjb21wbGV4IG51bWJlci4gVGhpcyBjYWxsYmFjayBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGVcbiAgICogICBidWlsdC1pbiBudW1lcmljIG5vdGF0aW9uIHdpdGggYW55IHR5cGUgb2YgZm9ybWF0dGluZy4gRnVuY3Rpb24gYGNhbGxiYWNrYFxuICAgKiAgIGlzIGNhbGxlZCB3aXRoIGB2YWx1ZWAgYXMgcGFyYW1ldGVyIGFuZCBtdXN0IHJldHVybiBhIHN0cmluZy5cbiAgICpcbiAgICogV2hlbiBgdmFsdWVgIGlzIGFuIE9iamVjdDpcbiAgICpcbiAgICogLSBXaGVuIHRoZSBvYmplY3QgY29udGFpbnMgYSBwcm9wZXJ0eSBgZm9ybWF0YCBiZWluZyBhIGZ1bmN0aW9uLCB0aGlzIGZ1bmN0aW9uXG4gICAqICAgaXMgaW52b2tlZCBhcyBgdmFsdWUuZm9ybWF0KG9wdGlvbnMpYCBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICogLSBXaGVuIHRoZSBvYmplY3QgaGFzIGl0cyBvd24gYHRvU3RyaW5nYCBtZXRob2QsIHRoaXMgbWV0aG9kIGlzIGludm9rZWRcbiAgICogICBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICogLSBJbiBvdGhlciBjYXNlcyB0aGUgZnVuY3Rpb24gd2lsbCBsb29wIG92ZXIgYWxsIG9iamVjdCBwcm9wZXJ0aWVzIGFuZFxuICAgKiAgIHJldHVybiBKU09OIG9iamVjdCBub3RhdGlvbiBsaWtlICd7XCJhXCI6IDIsIFwiYlwiOiAzfScuXG4gICAqXG4gICAqIFdoZW4gdmFsdWUgaXMgYSBmdW5jdGlvbjpcbiAgICpcbiAgICogLSBXaGVuIHRoZSBmdW5jdGlvbiBoYXMgYSBwcm9wZXJ0eSBgc3ludGF4YCwgaXQgcmV0dXJucyB0aGlzXG4gICAqICAgc3ludGF4IGRlc2NyaXB0aW9uLlxuICAgKiAtIEluIG90aGVyIGNhc2VzLCBhIHN0cmluZyBgJ2Z1bmN0aW9uJ2AgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmZvcm1hdCg2LjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzYuNCdcbiAgICogICAgbWF0aC5mb3JtYXQoMTI0MDAwMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcxLjI0ZTYnXG4gICAqICAgIG1hdGguZm9ybWF0KDEvMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnMC4zMzMzMzMzMzMzMzMzMzMzJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgxLzMsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzAuMzMzJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgyMTM4NSwgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzIxMDAwJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgxMmU4LCB7bm90YXRpb246ICdmaXhlZCd9KSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzEyMDAwMDAwMDAnXG4gICAqICAgIG1hdGguZm9ybWF0KDIuMywgIHtub3RhdGlvbjogJ2ZpeGVkJywgcHJlY2lzaW9uOiA0fSkgICAgLy8gcmV0dXJucyAnMi4zMDAwJ1xuICAgKiAgICBtYXRoLmZvcm1hdCg1Mi44LCB7bm90YXRpb246ICdleHBvbmVudGlhbCd9KSAgICAgICAgICAgIC8vIHJldHVybnMgJzUuMjhlKzEnXG4gICAqICAgIG1hdGguZm9ybWF0KDEyNDAwLHtub3RhdGlvbjogJ2VuZ2luZWVyaW5nJ30pICAgICAgICAgICAgLy8gcmV0dXJucyAnMTIuNDAwZSszJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgyMDAwLCB7bG93ZXJFeHA6IC0yLCB1cHBlckV4cDogMn0pICAgICAgICAgIC8vIHJldHVybnMgJzJlKzMnXG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIGZvcm1hdEN1cnJlbmN5KHZhbHVlKSB7XG4gICAqICAgICAgLy8gcmV0dXJuIGN1cnJlbmN5IG5vdGF0aW9uIHdpdGggdHdvIGRpZ2l0czpcbiAgICogICAgICByZXR1cm4gJyQnICsgdmFsdWUudG9GaXhlZCgyKVxuICAgKlxuICAgKiAgICAgIC8vIHlvdSBjb3VsZCBhbHNvIHVzZSBtYXRoLmZvcm1hdCBpbnNpZGUgdGhlIGNhbGxiYWNrOlxuICAgKiAgICAgIC8vIHJldHVybiAnJCcgKyBtYXRoLmZvcm1hdCh2YWx1ZSwge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDJ9KVxuICAgKiAgICB9XG4gICAqICAgIG1hdGguZm9ybWF0KFsyLjEsIDMsIDAuMDE2XSwgZm9ybWF0Q3VycmVuY3l9ICAgICAgICAgICAgLy8gcmV0dXJucyAnWyQyLjEwLCAkMy4wMCwgJDAuMDJdJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcHJpbnRcbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSB0byBiZSBzdHJpbmdpZmllZFxuICAgKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBfc3RyaW5nLmZvcm1hdCxcbiAgICAnYW55LCBPYmplY3QgfCBmdW5jdGlvbiB8IG51bWJlcic6IF9zdHJpbmcuZm9ybWF0XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZvcm1hdCA9IGNyZWF0ZUZvcm1hdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUHJpbnQgPSB2b2lkIDA7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3ByaW50JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlUHJpbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJbnRlcnBvbGF0ZSB2YWx1ZXMgaW50byBhIHN0cmluZyB0ZW1wbGF0ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5wcmludCh0ZW1wbGF0ZSwgdmFsdWVzKVxuICAgKiAgICAgbWF0aC5wcmludCh0ZW1wbGF0ZSwgdmFsdWVzLCBwcmVjaXNpb24pXG4gICAqICAgICBtYXRoLnByaW50KHRlbXBsYXRlLCB2YWx1ZXMsIG9wdGlvbnMpXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICAvLyB0aGUgZm9sbG93aW5nIG91dHB1dHM6ICdMdWN5IGlzIDUgeWVhcnMgb2xkJ1xuICAgKiAgICAgbWF0aC5wcmludCgnTHVjeSBpcyAkYWdlIHllYXJzIG9sZCcsIHthZ2U6IDV9KVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnVGhlIHZhbHVlIG9mIHBpIGlzIDMuMTQxNTkyNjU0J1xuICAgKiAgICAgbWF0aC5wcmludCgnVGhlIHZhbHVlIG9mIHBpIGlzICRwaScsIHtwaTogbWF0aC5waX0sIDEwKVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnaGVsbG8gTWFyeSEgVGhlIGRhdGUgaXMgMjAxMy0wMy0yMydcbiAgICogICAgIG1hdGgucHJpbnQoJ0hlbGxvICR1c2VyLm5hbWUhIFRoZSBkYXRlIGlzICRkYXRlJywge1xuICAgKiAgICAgICB1c2VyOiB7XG4gICAqICAgICAgICAgbmFtZTogJ01hcnknLFxuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBkYXRlOiBuZXcgRGF0ZSgyMDEzLCAyLCAyMykudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApXG4gICAqICAgICB9KVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnTXkgZmF2b3JpdGUgZnJ1aXRzIGFyZSBhcHBsZXMgYW5kIGJhbmFuYXMgISdcbiAgICogICAgIG1hdGgucHJpbnQoJ015IGZhdm9yaXRlIGZydWl0cyBhcmUgJDAgYW5kICQxICEnLCBbXG4gICAqICAgICAgICdhcHBsZXMnLFxuICAgKiAgICAgICAnYmFuYW5hcydcbiAgICogICAgIF0pXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZm9ybWF0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSAgICAgICAgICAgQSBzdHJpbmcgY29udGFpbmluZyB2YXJpYWJsZSBwbGFjZWhvbGRlcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXh9ICAgdmFsdWVzIEFuIG9iamVjdCBvciBhcnJheSBjb250YWluaW5nIHZhcmlhYmxlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdpbGwgYmUgZmlsbGVkIGluIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBPYmplY3R9IFtvcHRpb25zXSBGb3JtYXR0aW5nIG9wdGlvbnMsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gZm9ybWF0IG51bWJlcnMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uIG1hdGguZm9ybWF0IGZvciBhIGRlc2NyaXB0aW9uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYWxsIG9wdGlvbnMuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gSW50ZXJwb2xhdGVkIHN0cmluZ1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBub3RlOiBNYXRyaXggd2lsbCBiZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSB0byBhbiBBcnJheVxuICAgICdzdHJpbmcsIE9iamVjdCB8IEFycmF5JzogX3ByaW50LFxuICAgICdzdHJpbmcsIE9iamVjdCB8IEFycmF5LCBudW1iZXIgfCBPYmplY3QnOiBfcHJpbnRcbiAgfSk7XG59KTtcbi8qKlxuICogSW50ZXJwb2xhdGUgdmFsdWVzIGludG8gYSBzdHJpbmcgdGVtcGxhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyIHwgT2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEludGVycG9sYXRlZCBzdHJpbmdcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVQcmludCA9IGNyZWF0ZVByaW50O1xuXG5mdW5jdGlvbiBfcHJpbnQodGVtcGxhdGUsIHZhbHVlcywgb3B0aW9ucykge1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwkKFtcXHcuXSspL2csIGZ1bmN0aW9uIChvcmlnaW5hbCwga2V5KSB7XG4gICAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNba2V5cy5zaGlmdCgpXTtcblxuICAgIHdoaWxlIChrZXlzLmxlbmd0aCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgayA9IGtleXMuc2hpZnQoKTtcbiAgICAgIHZhbHVlID0gayA/IHZhbHVlW2tdIDogdmFsdWUgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghKDAsIF9pcy5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3N0cmluZy5mb3JtYXQpKHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWw7XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2Fjb3MnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVBY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNvcyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY29zKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDEuMDQ3MTk3NTUxMTk2NTk3OVxuICAgKiAgICBtYXRoLmFjb3MobWF0aC5jb3MoMS41KSkgLy8gcmV0dXJucyBudW1iZXIgMS41XG4gICAqXG4gICAqICAgIG1hdGguYWNvcygyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMCArIDEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIGF0YW4sIGFzaW5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBjb3NpbmUgb2YgeFxuICAgKi9cbiAgdmFyIGFjb3MgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gLTEgJiYgeCA8PSAxIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gTWF0aC5hY29zKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmFjb3MoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNvcygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWNvcygpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhY29zKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYWNvcztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zID0gY3JlYXRlQWNvczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvc2ggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhY29zaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUFjb3NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhY29zaCh4KSA9IGxuKHNxcnQoeF4yIC0gMSkgKyB4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY29zaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY29zaCgxLjUpICAgICAgIC8vIHJldHVybnMgMC45NjI0MjM2NTAxMTkyMDY5XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3NoLCBhc2luaCwgYXRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjY29zaW5lIG9mIHhcbiAgICovXG4gIHZhciBhY29zaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAxIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIuYWNvc2hOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA8PSAtMSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4IC0gMSkgLSB4KSwgTWF0aC5QSSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY29zaCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY29zaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWNvc2goKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNvc2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY29zaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zaCA9IGNyZWF0ZUFjb3NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY290ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNvdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVBY290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY290KHgpID0gYXRhbigxL3gpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFjb3QoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdCgwLjUpICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjQ2MzY0NzYwOTAwMDgwNjFcbiAgICogICAgbWF0aC5hY290KG1hdGguY290KDEuNSkpIC8vIHJldHVybnMgbnVtYmVyIDEuNVxuICAgKlxuICAgKiAgICBtYXRoLmFjb3QoMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvdCwgYXRhblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBjb3RhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIGFjb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFjb3ROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY290KCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmF0YW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNvdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvdCA9IGNyZWF0ZUFjb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjb3RoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNvdGgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQWNvdGggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFjb3RoKHgpID0gYXRhbmgoMS94KSA9IChsbigoeCsxKS94KSArIGxuKHgvKHgtMSkpKSAvIDJgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdGgoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdGgoMC41KSAgICAgICAvLyByZXR1cm5zIDAuODA0NzE4OTU2MjE3MDUwM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWNzY2gsIGFzZWNoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciBhY290aCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAxIHx8IHggPD0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5hY290aE51bWJlcikoeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY290aCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY290aCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hdGFuaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhY290aCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjb3RoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFjb3RoID0gY3JlYXRlQWNvdGg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjc2MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhY3NjJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZUFjc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgY29zZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNzYyh4KSA9IGFzaW4oMS94KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFjc2MoMC41KSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC41MjM1OTg3NzU1OTgyOTg5XG4gICAqICAgIG1hdGguYWNzYyhtYXRoLmNzYygxLjUpKSAvLyByZXR1cm5zIG51bWJlciB+MS41XG4gICAqXG4gICAqICAgIG1hdGguYWNzYygyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY3NjLCBhc2luLCBhc2VjXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJjIGNvc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhY3NjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IC0xIHx8IHggPj0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmFjc2NOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYWNzYygpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY3NjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFzaW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNzYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjc2M7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNzYyA9IGNyZWF0ZUFjc2M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjc2NoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNzY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQWNzY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgYWNzY2goeCkgPSBhc2luaCgxL3gpID0gbG4oMS94ICsgc3FydCgxL3heMiArIDEpKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjaCgwLjUpICAgICAgIC8vIHJldHVybnMgMS40NDM2MzU0NzUxNzg4MTAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhc2VjaCwgYWNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmNjb3NlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgYWNzY2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFjc2NoTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNzY2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeCkuYXNpbmgoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNzY2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY3NjaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY3NjaCA9IGNyZWF0ZUFjc2NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBc2VjID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNlYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVBc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLiBEZWZpbmVkIGFzIGBhc2VjKHgpID0gYWNvcygxL3gpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFzZWMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYXNlYygwLjUpICAgICAgICAgICAvLyByZXR1cm5zIDEuMDQ3MTk3NTUxMTk2NTk3OVxuICAgKiAgICBtYXRoLmFzZWMobWF0aC5zZWMoMS41KSkgLy8gcmV0dXJucyAxLjVcbiAgICpcbiAgICogICAgbWF0aC5hc2VjKDIpICAgICAgICAgICAgIC8vIHJldHVybnMgMCArIDEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhY29zLCBhY290LCBhY3NjXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhc2VjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IC0xIHx8IHggPj0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmFzZWNOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYXNlYygpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2VjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFjb3MoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXNlYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzZWM7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNlYyA9IGNyZWF0ZUFzZWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzZWNoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNlY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQXNlY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjc2VjYW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFzZWNoKHgpID0gYWNvc2goMS94KSA9IGxuKHNxcnQoMS94XjIgLSAxKSArIDEveClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYXNlY2goeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYXNlY2goMC41KSAgICAgICAvLyByZXR1cm5zIDEuMzE2OTU3ODk2OTI0ODE2NlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWNzY2gsIGFjb3RoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhc2VjaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA8PSAxICYmIHggPj0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHZhciB4SW52ID0gMSAvIHg7XG5cbiAgICAgICAgaWYgKHhJbnYgPiAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICAgIHJldHVybiAoMCwgX251bWJlci5hc2VjaE51bWJlcikoeCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmV0ID0gTWF0aC5zcXJ0KHhJbnYgKiB4SW52IC0gMSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZyhyZXQgLSB4SW52KSwgTWF0aC5QSSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hc2VjaCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2VjaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hY29zaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhc2VjaCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzZWNoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFzZWNoID0gY3JlYXRlQXNlY2g7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzaW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYXNpbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUFzaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2Ugc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYXNpbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hc2luKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNTIzNTk4Nzc1NTk4Mjk4OVxuICAgKiAgICBtYXRoLmFzaW4obWF0aC5zaW4oMS41KSkgLy8gcmV0dXJucyBudW1iZXIgfjEuNVxuICAgKlxuICAgKiAgICBtYXRoLmFzaW4oMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpbiwgYXRhbiwgYWNvc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBzaW5lIG9mIHhcbiAgICovXG4gIHZhciBhc2luID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IC0xICYmIHggPD0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXNpbih4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hc2luKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFzaW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmFzaW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXNpbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXNpbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzaW47XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNpbiA9IGNyZWF0ZUFzaW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzaW5oID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNpbmgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBc2luaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNzaW5lIG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFzaW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFzaW5oKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjQ4MTIxMTgyNTA1OTYwMzQ3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhY29zaCwgYXRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmNzaW5lIG9mIHhcbiAgICovXG4gIHZhciBhc2luaCA9IHR5cGVkKCdhc2luaCcsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuYXNpbmhOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2luaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYXNpbmgoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXNpbmgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFzaW5oLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXNpbmg7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNpbmggPSBjcmVhdGVBc2luaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdhdGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQXRhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgdmFsdWUuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW4oMC41KSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC40NjM2NDc2MDkwMDA4MDYxXG4gICAqICAgIG1hdGguYXRhbihtYXRoLnRhbigxLjUpKSAvLyByZXR1cm5zIG51bWJlciAxLjVcbiAgICpcbiAgICogICAgbWF0aC5hdGFuKDIpICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAxLjU3MDc5NjMyNjc5NDg5NjYgLTEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICB0YW4sIGFzaW4sIGFjb3NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgYXRhbiA9IHR5cGVkKCdhdGFuJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBNYXRoLmF0YW4oeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXRhbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXRhbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGF0YW47XG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbiA9IGNyZWF0ZUF0YW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUF0YW4yID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA5XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ2F0YW4yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVBdGFuMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA5ID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTA5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTcuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgdGFuZ2VudCBmdW5jdGlvbiB3aXRoIHR3byBhcmd1bWVudHMsIHkveC5cbiAgICogQnkgcHJvdmlkaW5nIHR3byBhcmd1bWVudHMsIHRoZSByaWdodCBxdWFkcmFudCBvZiB0aGUgY29tcHV0ZWQgYW5nbGUgY2FuIGJlXG4gICAqIGRldGVybWluZWQuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuMih5LCB4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuMigyLCAyKSAvIG1hdGgucGkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4yNVxuICAgKlxuICAgKiAgICBjb25zdCBhbmdsZSA9IG1hdGgudW5pdCg2MCwgJ2RlZycpIC8vIHJldHVybnMgVW5pdCA2MCBkZWdcbiAgICogICAgY29uc3QgeCA9IG1hdGguY29zKGFuZ2xlKVxuICAgKiAgICBjb25zdCB5ID0gbWF0aC5zaW4oYW5nbGUpXG4gICAqXG4gICAqICAgIG1hdGguYXRhbigyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdGFuLCBhdGFuLCBzaW4sIGNvc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB5ICBTZWNvbmQgZGltZW5zaW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggIEZpcnN0IGRpbWVuc2lvblxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gRm91ci1xdWFkcmFudCBpbnZlcnNlIHRhbmdlbnRcbiAgICovXG5cbiAgdmFyIGF0YW4yID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IE1hdGguYXRhbjIsXG4gICAgLy8gQ29tcGxleCBudW1iZXJzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgcmVhc29uYWJsZSBpbXBsZW1lbnRhdGlvbiBvZlxuICAgIC8vIGF0YW4yKCkuIEV2ZW4gTWF0bGFiIHJlbW92ZWQgdGhlIHN1cHBvcnQsIGFmdGVyIHRoZXkgb25seSBjYWxjdWxhdGVkXG4gICAgLy8gdGhlIGF0YW4gb25seSBvbiBiYXNlIG9mIHRoZSByZWFsIHBhcnQgb2YgdGhlIG51bWJlcnMgYW5kIGlnbm9yZWQgdGhlIGltYWdpbmFyeS5cbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeSwgeCkge1xuICAgICAgcmV0dXJuIEJpZ051bWJlci5hdGFuMih5LCB4KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDkoeCwgeSwgYXRhbjIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gbWluZCB0aGUgb3JkZXIgb2YgeSBhbmQgeCFcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBhdGFuMiwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGF0YW4yKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIHJldHVybiBhdGFuMihtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYXRhbjIobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgcmV0dXJuIGF0YW4yKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIGF0YW4yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhdGFuMiwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIG1pbmQgdGhlIG9yZGVyIG9mIHkgYW5kIHhcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIG1pbmQgdGhlIG9yZGVyIG9mIHkgYW5kIHhcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGF0YW4yLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBhdGFuMiwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhdGFuMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuMiA9IGNyZWF0ZUF0YW4yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2F0YW5oJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107XG52YXIgY3JlYXRlQXRhbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjdGFuZ2VudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhdGFuaCh4KSA9IGxuKCgxICsgeCkvKDEgLSB4KSkgLyAyYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW5oKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjU0OTMwNjE0NDMzNDA1NDlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFjb3NoLCBhc2luaFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIGF0YW5oID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IDEgJiYgeCA+PSAtMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmF0YW5oTnVtYmVyKSh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmF0YW5oKCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW5oKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5hdGFuaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBhdGFuaCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXRhbmgsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhdGFuaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuaCA9IGNyZWF0ZUF0YW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnY29zJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjb3NpbmUgb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvcyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb3MoMikgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTAuNDE2MTQ2ODM2NTQ3MTQyMlxuICAgKiAgICBtYXRoLmNvcyhtYXRoLnBpIC8gNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAgMC43MDcxMDY3ODExODY1NDc1XG4gICAqICAgIG1hdGguY29zKG1hdGgudW5pdCgxODAsICdkZWcnKSkgIC8vIHJldHVybnMgbnVtYmVyIC0xXG4gICAqICAgIG1hdGguY29zKG1hdGgudW5pdCg2MCwgJ2RlZycpKSAgIC8vIHJldHVybnMgbnVtYmVyICAwLjVcbiAgICpcbiAgICogICAgY29uc3QgYW5nbGUgPSAwLjJcbiAgICogICAgbWF0aC5wb3cobWF0aC5zaW4oYW5nbGUpLCAyKSArIG1hdGgucG93KG1hdGguY29zKGFuZ2xlKSwgMikgLy8gcmV0dXJucyBudW1iZXIgfjFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvcywgdGFuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBDb3NpbmUgb2YgeFxuICAgKi9cbiAgdmFyIGNvcyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IE1hdGguY29zLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY29zKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5jb3MoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvcyBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29zKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb3MpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3M7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29zID0gY3JlYXRlQ29zOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3NoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnY29zaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGNvc2goeCkgPSAxLzIgKiAoZXhwKHgpICsgZXhwKC14KSlgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY29zaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb3NoKDAuNSkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMS4xMjc2MjU5NjUyMDYzODA3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW5oLCB0YW5oXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGNvc2luZSBvZiB4XG4gICAqL1xuICB2YXIgY29zaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuY29zaCxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvc2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmNvc2goKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvc2ggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvc2goeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNvc2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3NoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvc2ggPSBjcmVhdGVDb3NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjb3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQ290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4gRGVmaW5lZCBhcyBgY290KHgpID0gMSAvIHRhbih4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb3QoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY290KDIpICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTAuNDU3NjU3NTU0MzYwMjg1NzdcbiAgICogICAgMSAvIG1hdGgudGFuKDIpICAvLyByZXR1cm5zIG51bWJlciAtMC40NTc2NTc1NTQzNjAyODU3N1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdGFuLCBzZWMsIGNzY1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gQ290YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciBjb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmNvdE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvdCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LnRhbigpKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvdCBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY290KHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb3QpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ290ID0gY3JlYXRlQ290OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3RoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnY290aCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVDb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGNvdGFuZ2VudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBjb3RoKHgpID0gMSAvIHRhbmgoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY290aCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgLy8gY290aCh4KSA9IDEgLyB0YW5oKHgpXG4gICAqICAgIG1hdGguY290aCgyKSAgICAgICAgIC8vIHJldHVybnMgMS4wMzczMTQ3MjA3Mjc1NDgyXG4gICAqICAgIDEgLyBtYXRoLnRhbmgoMikgICAgIC8vIHJldHVybnMgMS4wMzczMTQ3MjA3Mjc1NDgyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW5oLCB0YW5oLCBjb3NoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGNvdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgY290aCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuY290aE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvdGgoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC50YW5oKCkpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gY290aCBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY290aCh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY290aCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvdGg7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ290aCA9IGNyZWF0ZUNvdGg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzYyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NzYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVDc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGNvc2VjYW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGNzYyh4KSA9IDEvc2luKHgpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNzYyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jc2MoMikgICAgICAvLyByZXR1cm5zIG51bWJlciAxLjA5OTc1MDE3MDI5NDYxN1xuICAgKiAgICAxIC8gbWF0aC5zaW4oMikgIC8vIHJldHVybnMgbnVtYmVyIDEuMDk5NzUwMTcwMjk0NjE3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW4sIHNlYywgY290XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBDb3NlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgY3NjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jc2NOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jc2MoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC5zaW4oKSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjc2MgaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzYyh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY3NjKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY3NjO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzYyA9IGNyZWF0ZUNzYzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NjaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NzY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQ3NjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBjb3NlY2FudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBjc2NoKHgpID0gMSAvIHNpbmgoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY3NjaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgLy8gY3NjaCh4KSA9IDEvIHNpbmgoeClcbiAgICogICAgbWF0aC5jc2NoKDAuNSkgICAgICAgLy8gcmV0dXJucyAxLjkxOTAzNDc1MTMzNDk0MzdcbiAgICogICAgMSAvIG1hdGguc2luaCgwLjUpICAgLy8gcmV0dXJucyAxLjkxOTAzNDc1MTMzNDk0MzdcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpbmgsIHNlY2gsIGNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgY29zZWNhbnQgb2YgeFxuICAgKi9cbiAgdmFyIGNzY2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmNzY2hOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jc2NoKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHguc2luaCgpKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNzY2ggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzY2goeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNzY2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjc2NoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzY2ggPSBjcmVhdGVDc2NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzZWMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlU2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgc2VjKHgpID0gMS9jb3MoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2VjKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNlYygyKSAgICAgIC8vIHJldHVybnMgbnVtYmVyIC0yLjQwMjk5Nzk2MTcyMjM4MjJcbiAgICogICAgMSAvIG1hdGguY29zKDIpICAvLyByZXR1cm5zIG51bWJlciAtMi40MDI5OTc5NjE3MjIzODIyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIGNzYywgY290XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBTZWNhbnQgb2YgeFxuICAgKi9cbiAgdmFyIHNlYyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2VjTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguc2VjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHguY29zKCkpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gc2VjIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWMoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNlYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNlYztcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWMgPSBjcmVhdGVTZWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNlY2ggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzZWNoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVNlY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgc2VjYW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYHNlY2goeCkgPSAxIC8gY29zaCh4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZWNoKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAvLyBzZWNoKHgpID0gMS8gY29zaCh4KVxuICAgKiAgICBtYXRoLnNlY2goMC41KSAgICAgICAvLyByZXR1cm5zIDAuODg2ODE4ODgzOTcwMDc0XG4gICAqICAgIDEgLyBtYXRoLmNvc2goMC41KSAgIC8vIHJldHVybnMgMC44ODY4MTg4ODM5NzAwNzRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvc2gsIGNzY2gsIGNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBzZWNoID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5zZWNoTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguc2VjaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LmNvc2goKSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBzZWNoIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWNoKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBzZWNoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2VjaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWNoID0gY3JlYXRlU2VjaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2luID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3Npbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVNpbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2luKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNpbigyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjkwOTI5NzQyNjgyNTY4MTNcbiAgICogICAgbWF0aC5zaW4obWF0aC5waSAvIDQpICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC43MDcxMDY3ODExODY1NDc1XG4gICAqICAgIG1hdGguc2luKG1hdGgudW5pdCg5MCwgJ2RlZycpKSAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC5zaW4obWF0aC51bml0KDMwLCAnZGVnJykpICAgLy8gcmV0dXJucyBudW1iZXIgMC41XG4gICAqXG4gICAqICAgIGNvbnN0IGFuZ2xlID0gMC4yXG4gICAqICAgIG1hdGgucG93KG1hdGguc2luKGFuZ2xlKSwgMikgKyBtYXRoLnBvdyhtYXRoLmNvcyhhbmdsZSksIDIpIC8vIHJldHVybnMgbnVtYmVyIH4xXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIHRhblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gU2luZSBvZiB4XG4gICAqL1xuICB2YXIgc2luID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogTWF0aC5zaW4sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5zaW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnNpbigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gc2luIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzaW4oeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc2luLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2luO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbiA9IGNyZWF0ZVNpbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2luaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3NpbmgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVTaW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgc2luaCh4KSA9IDEvMiAqIChleHAoeCkgLSBleHAoLXgpKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zaW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNpbmgoMC41KSAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjUyMTA5NTMwNTQ5Mzc0NzRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvc2gsIHRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgc2luZSBvZiB4XG4gICAqL1xuICB2YXIgc2luaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2luaE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNpbmgoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnNpbmgoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHNpbmggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNpbmgoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpbmgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNpbmgsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzaW5oO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbmggPSBjcmVhdGVTaW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAndGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlVGFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0YW5nZW50IG9mIGEgdmFsdWUuIGB0YW4oeClgIGlzIGVxdWFsIHRvIGBzaW4oeCkgLyBjb3MoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudGFuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnRhbigwLjUpICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjU0NjMwMjQ4OTg0Mzc5MDVcbiAgICogICAgbWF0aC5zaW4oMC41KSAvIG1hdGguY29zKDAuNSkgICAgLy8gcmV0dXJucyBudW1iZXIgMC41NDYzMDI0ODk4NDM3OTA1XG4gICAqICAgIG1hdGgudGFuKG1hdGgucGkgLyA0KSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC50YW4obWF0aC51bml0KDQ1LCAnZGVnJykpICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYXRhbiwgc2luLCBjb3NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIHRhbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IE1hdGgudGFuLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgudGFuKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50YW4oKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHRhbiBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFuKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB0YW4oMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHRhbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRhbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW4gPSBjcmVhdGVUYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVRhbmggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd0YW5oJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlVGFuaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYHRhbmgoeCkgPSAoZXhwKDIgKiB4KSAtIDEpIC8gKGV4cCgyICogeCkgKyAxKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC50YW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAvLyB0YW5oKHgpID0gc2luaCh4KSAvIGNvc2goeCkgPSAxIC8gY290aCh4KVxuICAgKiAgICBtYXRoLnRhbmgoMC41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDAuNDYyMTE3MTU3MjYwMDA5NzRcbiAgICogICAgbWF0aC5zaW5oKDAuNSkgLyBtYXRoLmNvc2goMC41KSAgLy8gcmV0dXJucyAwLjQ2MjExNzE1NzI2MDAwOTc0XG4gICAqICAgIDEgLyBtYXRoLmNvdGgoMC41KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMC40NjIxMTcxNTcyNjAwMDk3NFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2luaCwgY29zaCwgY290aFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyB0YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciB0YW5oID0gdHlwZWQoJ3RhbmgnLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnRhbmgsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC50YW5oKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50YW5oKCk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiB0YW5oIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YW5oKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB0YW5oKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB0YW5oLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGFuaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW5oID0gY3JlYXRlVGFuaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVG8gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICd0byc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVUbyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgdW5pdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudG8oeCwgdW5pdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudG8obWF0aC51bml0KCcyIGluY2gnKSwgJ2NtJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDUuMDggY21cbiAgICogICAgbWF0aC50byhtYXRoLnVuaXQoJzIgaW5jaCcpLCBtYXRoLnVuaXQobnVsbCwgJ2NtJykpICAvLyByZXR1cm5zIFVuaXQgNS4wOCBjbVxuICAgKiAgICBtYXRoLnRvKG1hdGgudW5pdCgxNiwgJ2J5dGVzJyksICdiaXRzJykgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCAxMjggYml0c1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgICAgVGhlIHVuaXQgdG8gYmUgY29udmVydGVkLlxuICAgKiBAcGFyYW0ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gdW5pdCAgTmV3IHVuaXQuIENhbiBiZSBhIHN0cmluZyBsaWtlIFwiY21cIlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSB1bml0IHdpdGhvdXQgdmFsdWUuXG4gICAqIEByZXR1cm4ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gdmFsdWUgd2l0aCBjaGFuZ2VkLCBmaXhlZCB1bml0LlxuICAgKi9cblxuICB2YXIgdG8gPSB0eXBlZChuYW1lLCB7XG4gICAgJ1VuaXQsIFVuaXQgfCBzdHJpbmcnOiBmdW5jdGlvbiBVbml0VW5pdFN0cmluZyh4LCB1bml0KSB7XG4gICAgICByZXR1cm4geC50byh1bml0KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBTcGFyc2VNYXRyaXggZG9lcyBub3Qgc3VwcG9ydCBVbml0c1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHRvKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB0byhtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gdG8obWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHRvKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgLy8gU3BhcnNlTWF0cml4IGRvZXMgbm90IHN1cHBvcnQgVW5pdHNcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCB0bywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgTWF0cml4JzogZnVuY3Rpb24gYW55TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIFNwYXJzZU1hdHJpeCBkb2VzIG5vdCBzdXBwb3J0IFVuaXRzXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgdG8sIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCB0bywgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgdG8sIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdG87XG59KTtcbmV4cG9ydHMuY3JlYXRlVG8gPSBjcmVhdGVUbzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ2xvbmUgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Nsb25lJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ2xvbmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDbG9uZSBhbiBvYmplY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY2xvbmUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY2xvbmUoMy41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjVcbiAgICogICAgbWF0aC5jbG9uZShtYXRoLmNvbXBsZXgoJzItNGknKSAvLyByZXR1cm5zIENvbXBsZXggMiAtIDRpXG4gICAqICAgIG1hdGguY2xvbmUobWF0aC51bml0KDQ1LCAnZGVnJykpICAvLyByZXR1cm5zIFVuaXQgNDUgZGVnXG4gICAqICAgIG1hdGguY2xvbmUoW1sxLCAyXSwgWzMsIDRdXSkgICAgICAvLyByZXR1cm5zIEFycmF5IFtbMSwgMl0sIFszLCA0XV1cbiAgICogICAgbWF0aC5jbG9uZShcImhlbGxvIHdvcmxkXCIpICAgICAgICAgLy8gcmV0dXJucyBzdHJpbmcgXCJoZWxsbyB3b3JsZFwiXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgIE9iamVjdCB0byBiZSBjbG9uZWRcbiAgICogQHJldHVybiB7Kn0gQSBjbG9uZSBvZiBvYmplY3QgeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBhbnk6IF9vYmplY3QuY2xvbmVcbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2xvbmUgPSBjcmVhdGVDbG9uZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSGFzTnVtZXJpY1ZhbHVlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaGFzTnVtZXJpY1ZhbHVlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2lzTnVtZXJpYyddO1xudmFyIGNyZWF0ZUhhc051bWVyaWNWYWx1ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYztcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogSW4gY2FzZSBvZiBhIHN0cmluZywgdHJ1ZSBpcyByZXR1cm5lZCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKDIpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKCcyJykgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZSgwKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmJpZ251bWJlcig1MDApKSAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmNvbXBsZXgoJzItNGknKSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoWzIuMywgJ2ZvbycsIGZhbHNlXSkgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzWmVybywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyLCBpc051bWVyaWNcbiAgICpcbiAgICogQHBhcmFtIHsqfSB4ICAgICAgIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIGEgYG51bWJlcmAsIGBCaWdOdW1iZXJgLFxuICAgKiAgICAgICAgICAgICAgICAgICAgYEZyYWN0aW9uYCwgYEJvb2xlYW5gLCBvciBhIGBTdHJpbmdgIGNvbnRhaW5pbmcgbnVtYmVyLiBSZXR1cm5zIGZhbHNlIGZvciBvdGhlciB0eXBlcy5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIHVua25vd24gdHlwZXMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiB4LnRyaW0oKS5sZW5ndGggPiAwICYmICFpc05hTihOdW1iZXIoeCkpO1xuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgcmV0dXJuIGlzTnVtZXJpYyh4KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUhhc051bWVyaWNWYWx1ZSA9IGNyZWF0ZUhhc051bWVyaWNWYWx1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNJbnRlZ2VyID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNJbnRlZ2VyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNJbnRlZ2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gaW50ZWdlciBudW1iZXIuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBgbnVtYmVyYCwgYEJpZ051bWJlcmAsIGFuZCBgRnJhY3Rpb25gLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc0ludGVnZXIoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDIpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmJpZ251bWJlcig1MDApKSAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcignMycpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihbMywgMC41LCAtMl0pICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlXVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmNvbXBsZXgoJzItNGknKSAgIC8vIHRocm93cyBhbiBlcnJvclxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaXNOdW1lcmljLCBpc1Bvc2l0aXZlLCBpc05lZ2F0aXZlLCBpc1plcm9cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB4ICAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgY29udGFpbnMgYSBudW1lcmljLCBpbnRlZ2VyIHZhbHVlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGluIGNhc2Ugb2YgYW4gdW5rbm93biBkYXRhIHR5cGUuXG4gICAqL1xuICB2YXIgaXNJbnRlZ2VyID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5pc0ludGVnZXIsXG4gICAgLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoIGlzSW50ZWdlcihhZGQoMC4xLCAwLjIpKSAgP1xuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzSW50KCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguZCA9PT0gMSAmJiBpc0Zpbml0ZSh4Lm4pO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpc0ludGVnZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc0ludGVnZXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNJbnRlZ2VyID0gY3JlYXRlSXNJbnRlZ2VyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc05hTiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2lzTmFOJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNOYU4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBOYU4gKG5vdCBhIG51bWJlcikuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyB0eXBlcyBgbnVtYmVyYCwgYEJpZ051bWJlcmAsIGBGcmFjdGlvbmAsIGBVbml0YCBhbmQgYENvbXBsZXhgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc05hTih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc05hTigzKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc05hTihOYU4pICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTmFOKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmFOKG1hdGguYmlnbnVtYmVyKE5hTikpICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOYU4obWF0aC5iaWdudW1iZXIoMCkpICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4obWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4oJy0yJykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4oWzIsIDAsIC0zLCBOYU5dJykgICAgICAvLyByZXR1cm5zIFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaXNOdW1lcmljLCBpc05lZ2F0aXZlLCBpc1Bvc2l0aXZlLCBpc1plcm8sIGlzSW50ZWdlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBWYWx1ZSB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyBOYU4uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzTmFOTnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzTmFOKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5pc05hTigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBOdW1iZXIuaXNOYU4pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOYU4gPSBjcmVhdGVJc05hTjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOZWdhdGl2ZSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2lzTmVnYXRpdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVJc05lZ2F0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgbmVnYXRpdmU6IHNtYWxsZXIgdGhhbiB6ZXJvLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLCBhbmQgYFVuaXRgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc05lZ2F0aXZlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZSgtMikgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZSgtMCkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKG1hdGguYmlnbnVtYmVyKDIpKSAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUobWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKCctMicpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZShbMiwgMCwgLTNdJykgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNQb3NpdGl2ZSwgaXNaZXJvLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzTmVnYXRpdmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzTmVnYXRpdmVOdW1iZXIsXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSAmJiAheC5pc05hTigpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnMgPCAwOyAvLyBJdCdzIGVub3VnaCB0byBkZWNpZGUgb24gdGhlIHNpZ25cbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIGlzTmVnYXRpdmUoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGlzTmVnYXRpdmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc05lZ2F0aXZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzTmVnYXRpdmUgPSBjcmVhdGVJc05lZ2F0aXZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc051bWVyaWMgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNOdW1lcmljJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNOdW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNOdW1lcmljKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzTnVtZXJpYygyKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTnVtZXJpYygnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoJzInKSAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5iaWdudW1iZXIoNTAwKSkgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5mcmFjdGlvbig0KSkgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5jb21wbGV4KCcyLTRpJykgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKFsyLjMsICdmb28nLCBmYWxzZV0pICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpc1plcm8sIGlzUG9zaXRpdmUsIGlzTmVnYXRpdmUsIGlzSW50ZWdlciwgaGFzTnVtZXJpY1ZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgICAgICBWYWx1ZSB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyBhIGBudW1iZXJgLCBgQmlnTnVtYmVyYCxcbiAgICogICAgICAgICAgICAgICAgICAgIGBGcmFjdGlvbmAsIG9yIGBib29sZWFuYC4gUmV0dXJucyBmYWxzZSBmb3Igb3RoZXIgdHlwZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiB1bmtub3duIHR5cGVzLlxuICAgKi9cbiAgdmFyIGlzTnVtZXJpYyA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRnJhY3Rpb25Cb29sZWFuKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAnQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHwgTm9kZSc6IGZ1bmN0aW9uIENvbXBsZXhVbml0U3RyaW5nTnVsbFVuZGVmaW5lZE5vZGUoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGlzTnVtZXJpYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzTnVtZXJpYztcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc051bWVyaWMgPSBjcmVhdGVJc051bWVyaWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzUG9zaXRpdmUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdpc1Bvc2l0aXZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNQb3NpdGl2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHBvc2l0aXZlOiBsYXJnZXIgdGhhbiB6ZXJvLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLCBhbmQgYFVuaXRgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc1Bvc2l0aXZlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKC0yKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZSgtMCkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShtYXRoLmJpZ251bWJlcigyKSkgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUobWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShtYXRoLmZyYWN0aW9uKDEsMykpICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShbMiwgMCwgLTNdKSAgICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNaZXJvLCBpc05lZ2F0aXZlLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzUG9zaXRpdmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzUG9zaXRpdmVOdW1iZXIsXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuICF4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5zID4gMCAmJiB4Lm4gPiAwO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4gaXNQb3NpdGl2ZSh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgaXNQb3NpdGl2ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzUG9zaXRpdmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNQb3NpdGl2ZSA9IGNyZWF0ZUlzUG9zaXRpdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzUHJpbWUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNQcmltZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUlzUHJpbWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBwcmltZTogaGFzIG5vIGRpdmlzb3JzIG90aGVyIHRoYW4gaXRzZWxmIGFuZCBvbmUuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyB0eXBlIGBudW1iZXJgLCBgYmlnbnVtYmVyYC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNQcmltZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc1ByaW1lKDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQcmltZSgtMikgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1ByaW1lKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUHJpbWUoLTApICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQcmltZSgwLjUpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1ByaW1lKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQcmltZShbMiwgMTcsIDEwMF0pICAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCB0cnVlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNaZXJvLCBpc05lZ2F0aXZlLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzUHJpbWUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggKiAwICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHggPD0gMykge1xuICAgICAgICByZXR1cm4geCA+IDE7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ICUgMiA9PT0gMCB8fCB4ICUgMyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSA1OyBpICogaSA8PSB4OyBpICs9IDYpIHtcbiAgICAgICAgaWYgKHggJSBpID09PSAwIHx8IHggJSAoaSArIDIpID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIobikge1xuICAgICAgaWYgKG4udG9OdW1iZXIoKSAqIDAgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAobi5sdGUoMykpIHJldHVybiBuLmd0KDEpO1xuICAgICAgaWYgKG4ubW9kKDIpLmVxKDApIHx8IG4ubW9kKDMpLmVxKDApKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIGkgPSA1OyBuLmd0ZShpICogaSk7IGkgKz0gNikge1xuICAgICAgICBpZiAobi5tb2QoaSkuZXEoMCkgfHwgbi5tb2QoaSArIDIpLmVxKDApKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpc1ByaW1lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNQcmltZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc1ByaW1lID0gY3JlYXRlSXNQcmltZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNaZXJvID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnaXNaZXJvJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNaZXJvID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgemVyby5cbiAgICogVGhlIGZ1bmN0aW9uIGNhbiBjaGVjayBmb3IgemVybyBmb3IgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLFxuICAgKiBgQ29tcGxleGAsIGFuZCBgVW5pdGAuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudC13aXNlIGluIGNhc2Ugb2YgQXJyYXkgb3IgTWF0cml4IGlucHV0LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmlzWmVybyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc1plcm8oMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1plcm8oMikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNaZXJvKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmJpZ251bWJlcigwKSkgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmZyYWN0aW9uKDApKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmZyYWN0aW9uKDEsMykpICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1plcm8obWF0aC5jb21wbGV4KCcyIC0gNGknKSAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNaZXJvKG1hdGguY29tcGxleCgnMGknKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNaZXJvKCcwJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNaZXJvKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzWmVybyhbMiwgMCwgLTNdJykgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICAgICAgIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIHplcm8uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHZhciBpc1plcm8gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzWmVyb051bWJlcixcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5pc1plcm8oKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgucmUgPT09IDAgJiYgeC5pbSA9PT0gMDtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5kID09PSAxICYmIHgubiA9PT0gMDtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIGlzWmVybyh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgaXNaZXJvKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNaZXJvO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzWmVybyA9IGNyZWF0ZUlzWmVybzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTnVtZXJpYyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9ub29wXCIpO1xuXG52YXIgbmFtZSA9ICdudW1lcmljJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ251bWJlcicsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddO1xudmFyIGNyZWF0ZU51bWVyaWMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgX251bWJlciA9IF9yZWYubnVtYmVyLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb247XG4gIHZhciB2YWxpZElucHV0VHlwZXMgPSB7XG4gICAgc3RyaW5nOiB0cnVlLFxuICAgIG51bWJlcjogdHJ1ZSxcbiAgICBCaWdOdW1iZXI6IHRydWUsXG4gICAgRnJhY3Rpb246IHRydWVcbiAgfTsgLy8gTG9hZCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIGVhY2ggb3V0cHV0IHR5cGVcblxuICB2YXIgdmFsaWRPdXRwdXRUeXBlcyA9IHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gX251bWJlcih4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogYmlnbnVtYmVyID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBiaWdudW1iZXIoeCk7XG4gICAgfSA6IF9ub29wLm5vQmlnbnVtYmVyLFxuICAgIEZyYWN0aW9uOiBmcmFjdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gZnJhY3Rpb24oeCk7XG4gICAgfSA6IF9ub29wLm5vRnJhY3Rpb25cbiAgfTtcbiAgLyoqXG4gICAqIENvbnZlcnQgYSBudW1lcmljIGlucHV0IHRvIGEgc3BlY2lmaWMgbnVtZXJpYyB0eXBlOiBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5udW1lcmljKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm51bWVyaWMoJzQnKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDRcbiAgICogICAgbWF0aC5udW1lcmljKCc0JywgJ251bWJlcicpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqICAgIG1hdGgubnVtZXJpYygnNCcsICdCaWdOdW1iZXInKSAgICAgICAgICAgICAgLy8gcmV0dXJucyBCaWdOdW1iZXIgNFxuICAgKiAgICBtYXRoLm51bWVyaWMoJzQnLCAnRnJhY3Rpb24nKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgRnJhY3Rpb24gNFxuICAgKiAgICBtYXRoLm51bWVyaWMoNCwgJ0ZyYWN0aW9uJykgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgRnJhY3Rpb24gNFxuICAgKiAgICBtYXRoLm51bWVyaWMobWF0aC5mcmFjdGlvbigyLCA1KSwgJ251bWJlcicpIC8vIHJldHVybnMgbnVtYmVyIDAuNFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbnVtYmVyLCBmcmFjdGlvbiwgYmlnbnVtYmVyLCBzdHJpbmcsIGZvcm1hdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIH0gdmFsdWVcbiAgICogICAgICAgICAgICAgIEEgbnVtZXJpYyB2YWx1ZSBvciBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtZXJpYyB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3V0cHV0VHlwZVxuICAgKiAgICAgICAgICAgICAgRGVzaXJlZCBudW1lcmljIG91dHB1dCB0eXBlLlxuICAgKiAgICAgICAgICAgICAgQXZhaWxhYmxlIHZhbHVlczogJ251bWJlcicsICdCaWdOdW1iZXInLCBvciAnRnJhY3Rpb24nXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9ufVxuICAgKiAgICAgICAgICAgICAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgbnVtZXJpYyBpbiB0aGUgcmVxdWVzdGVkIHR5cGVcbiAgICovXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIG51bWVyaWModmFsdWUsIG91dHB1dFR5cGUpIHtcbiAgICB2YXIgaW5wdXRUeXBlID0gKDAsIF9pcy50eXBlT2YpKHZhbHVlKTtcblxuICAgIGlmICghKGlucHV0VHlwZSBpbiB2YWxpZElucHV0VHlwZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAnICsgdmFsdWUgKyAnIG9mIHR5cGUgXCInICsgaW5wdXRUeXBlICsgJ1wiOyB2YWxpZCBpbnB1dCB0eXBlcyBhcmUgJyArIE9iamVjdC5rZXlzKHZhbGlkSW5wdXRUeXBlcykuam9pbignLCAnKSk7XG4gICAgfVxuXG4gICAgaWYgKCEob3V0cHV0VHlwZSBpbiB2YWxpZE91dHB1dFR5cGVzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgJyArIHZhbHVlICsgJyB0byB0eXBlIFwiJyArIG91dHB1dFR5cGUgKyAnXCI7IHZhbGlkIG91dHB1dCB0eXBlcyBhcmUgJyArIE9iamVjdC5rZXlzKHZhbGlkT3V0cHV0VHlwZXMpLmpvaW4oJywgJykpO1xuICAgIH1cblxuICAgIGlmIChvdXRwdXRUeXBlID09PSBpbnB1dFR5cGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbGlkT3V0cHV0VHlwZXNbb3V0cHV0VHlwZV0odmFsdWUpO1xuICAgIH1cbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdW1lcmljID0gY3JlYXRlTnVtZXJpYzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFR5cGVvZiA9IGV4cG9ydHMuY3JlYXRlVHlwZU9mID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG52YXIgbmFtZSA9ICd0eXBlT2YnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVUeXBlT2YgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSB2YXJpYWJsZS5cbiAgICpcbiAgICogRnVuY3Rpb24gYHR5cGVPZmAgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIG9iamVjdHM6XG4gICAqXG4gICAqIE9iamVjdCAgICAgICAgICAgICAgICAgfCBSZXR1cm5zICAgICAgIHwgRXhhbXBsZVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBudWxsICAgICAgICAgICAgICAgICAgIHwgYCdudWxsJ2AgICAgICB8IGBtYXRoLnR5cGVPZihudWxsKWBcbiAgICogbnVtYmVyICAgICAgICAgICAgICAgICB8IGAnbnVtYmVyJ2AgICAgfCBgbWF0aC50eXBlT2YoMy41KWBcbiAgICogYm9vbGVhbiAgICAgICAgICAgICAgICB8IGAnYm9vbGVhbidgICAgfCBgbWF0aC50eXBlT2YodHJ1ZSlgXG4gICAqIHN0cmluZyAgICAgICAgICAgICAgICAgfCBgJ3N0cmluZydgICAgIHwgYG1hdGgudHlwZU9mKCdoZWxsbyB3b3JsZCcpYFxuICAgKiBBcnJheSAgICAgICAgICAgICAgICAgIHwgYCdBcnJheSdgICAgICB8IGBtYXRoLnR5cGVPZihbMSwgMiwgM10pYFxuICAgKiBEYXRlICAgICAgICAgICAgICAgICAgIHwgYCdEYXRlJ2AgICAgICB8IGBtYXRoLnR5cGVPZihuZXcgRGF0ZSgpKWBcbiAgICogRnVuY3Rpb24gICAgICAgICAgICAgICB8IGAnRnVuY3Rpb24nYCAgfCBgbWF0aC50eXBlT2YoZnVuY3Rpb24gKCkge30pYFxuICAgKiBPYmplY3QgICAgICAgICAgICAgICAgIHwgYCdPYmplY3QnYCAgICB8IGBtYXRoLnR5cGVPZih7YTogMiwgYjogM30pYFxuICAgKiBSZWdFeHAgICAgICAgICAgICAgICAgIHwgYCdSZWdFeHAnYCAgICB8IGBtYXRoLnR5cGVPZigvYSByZWdleHAvKWBcbiAgICogdW5kZWZpbmVkICAgICAgICAgICAgICB8IGAndW5kZWZpbmVkJ2AgfCBgbWF0aC50eXBlT2YodW5kZWZpbmVkKWBcbiAgICogbWF0aC5CaWdOdW1iZXIgICAgICAgICB8IGAnQmlnTnVtYmVyJ2AgfCBgbWF0aC50eXBlT2YobWF0aC5iaWdudW1iZXIoJzIuM2U1MDAnKSlgXG4gICAqIG1hdGguQ2hhaW4gICAgICAgICAgICAgfCBgJ0NoYWluJ2AgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguY2hhaW4oMikpYFxuICAgKiBtYXRoLkNvbXBsZXggICAgICAgICAgIHwgYCdDb21wbGV4J2AgICB8IGBtYXRoLnR5cGVPZihtYXRoLmNvbXBsZXgoMiwgMykpYFxuICAgKiBtYXRoLkZyYWN0aW9uICAgICAgICAgIHwgYCdGcmFjdGlvbidgICB8IGBtYXRoLnR5cGVPZihtYXRoLmZyYWN0aW9uKDEsIDMpKWBcbiAgICogbWF0aC5IZWxwICAgICAgICAgICAgICB8IGAnSGVscCdgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5oZWxwKCdzcXJ0JykpYFxuICAgKiBtYXRoLkhlbHAgICAgICAgICAgICAgIHwgYCdIZWxwJ2AgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLmhlbHAoJ3NxcnQnKSlgXG4gICAqIG1hdGguSW5kZXggICAgICAgICAgICAgfCBgJ0luZGV4J2AgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguaW5kZXgoMSwgMykpYFxuICAgKiBtYXRoLk1hdHJpeCAgICAgICAgICAgIHwgYCdNYXRyaXgnYCAgICB8IGBtYXRoLnR5cGVPZihtYXRoLm1hdHJpeChbWzEsMl0sIFszLCA0XV0pKWBcbiAgICogbWF0aC5SYW5nZSAgICAgICAgICAgICB8IGAnUmFuZ2UnYCAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5yYW5nZSgwLCAxMCkpYFxuICAgKiBtYXRoLlJlc3VsdFNldCAgICAgICAgIHwgYCdSZXN1bHRTZXQnYCB8IGBtYXRoLnR5cGVPZihtYXRoLmV2YWx1YXRlKCdhPTJcXG5iPTMnKSlgXG4gICAqIG1hdGguVW5pdCAgICAgICAgICAgICAgfCBgJ1VuaXQnYCAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgudW5pdCgnNDUgZGVnJykpYFxuICAgKiBtYXRoLkFjY2Vzc29yTm9kZSAgICAgICAgICAgIHwgYCdBY2Nlc3Nvck5vZGUnYCAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ0FbMl0nKSlgXG4gICAqIG1hdGguQXJyYXlOb2RlICAgICAgICAgICAgICAgfCBgJ0FycmF5Tm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnWzEsMiwzXScpKWBcbiAgICogbWF0aC5Bc3NpZ25tZW50Tm9kZSAgICAgICAgICB8IGAnQXNzaWdubWVudE5vZGUnYCAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCd4PTInKSlgXG4gICAqIG1hdGguQmxvY2tOb2RlICAgICAgICAgICAgICAgfCBgJ0Jsb2NrTm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnYT0yOyBiPTMnKSlgXG4gICAqIG1hdGguQ29uZGl0aW9uYWxOb2RlICAgICAgICAgfCBgJ0NvbmRpdGlvbmFsTm9kZSdgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgneDwwID8gLXggOiB4JykpYFxuICAgKiBtYXRoLkNvbnN0YW50Tm9kZSAgICAgICAgICAgIHwgYCdDb25zdGFudE5vZGUnYCAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJzIuMycpKWBcbiAgICogbWF0aC5GdW5jdGlvbkFzc2lnbm1lbnROb2RlICB8IGAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSdgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdmKHgpPXheMicpKWBcbiAgICogbWF0aC5GdW5jdGlvbk5vZGUgICAgICAgICAgICB8IGAnRnVuY3Rpb25Ob2RlJ2AgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdzcXJ0KDQpJykpYFxuICAgKiBtYXRoLkluZGV4Tm9kZSAgICAgICAgICAgICAgIHwgYCdJbmRleE5vZGUnYCAgICAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ0FbMl0nKS5pbmRleClgXG4gICAqIG1hdGguT2JqZWN0Tm9kZSAgICAgICAgICAgICAgfCBgJ09iamVjdE5vZGUnYCAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgne2E6Mn0nKSlgXG4gICAqIG1hdGguUGFyZW50aGVzaXNOb2RlICAgICAgICAgfCBgJ1BhcmVudGhlc2lzTm9kZSdgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnKDIrMyknKSlgXG4gICAqIG1hdGguUmFuZ2VOb2RlICAgICAgICAgICAgICAgfCBgJ1JhbmdlTm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnMToxMCcpKWBcbiAgICogbWF0aC5TeW1ib2xOb2RlICAgICAgICAgICAgICB8IGAnU3ltYm9sTm9kZSdgICAgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCd4JykpYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudHlwZU9mKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnR5cGVPZigzLjUpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnbnVtYmVyJ1xuICAgKiAgICBtYXRoLnR5cGVPZihtYXRoLmNvbXBsZXgoJzItNGknKSkgICAgLy8gcmV0dXJucyAnQ29tcGxleCdcbiAgICogICAgbWF0aC50eXBlT2YobWF0aC51bml0KCc0NSBkZWcnKSkgICAgIC8vIHJldHVybnMgJ1VuaXQnXG4gICAqICAgIG1hdGgudHlwZU9mKCdoZWxsbyB3b3JsZCcpICAgICAgICAgICAvLyByZXR1cm5zICdzdHJpbmcnXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgICAgVGhlIHZhcmlhYmxlIGZvciB3aGljaCB0byB0ZXN0IHRoZSB0eXBlLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHR5cGUuIFByaW1pdGl2ZSB0eXBlcyBhcmUgbG93ZXIgY2FzZSxcbiAgICogICAgICAgICAgICAgICAgICBub24tcHJpbWl0aXZlIHR5cGVzIGFyZSB1cHBlci1jYW1lbC1jYXNlLlxuICAgKiAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICdudW1iZXInLCAnc3RyaW5nJywgJ0FycmF5JywgJ0RhdGUnLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBhbnk6IF9pcy50eXBlT2ZcbiAgfSk7XG59KTsgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA2LjAuMC4gRGF0ZTogMjAxOC0xMS0wNlxuXG5leHBvcnRzLmNyZWF0ZVR5cGVPZiA9IGNyZWF0ZVR5cGVPZjtcbnZhciBjcmVhdGVEZXByZWNhdGVkVHlwZW9mID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd0eXBlb2YnLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnRnVuY3Rpb24gXCJ0eXBlb2ZcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwidHlwZU9mXCIgaW4gdjYuMC4wLCBwbGVhc2UgdXNlIHRoZSBuZXcgZnVuY3Rpb24gaW5zdGVhZC4nKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2lzLnR5cGVPZi5hcHBseShfaXMudHlwZU9mLCBhcmdzKTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXByZWNhdGVkVHlwZW9mID0gY3JlYXRlRGVwcmVjYXRlZFR5cGVvZjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVwbGFjZXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXBsYWNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlUmVwbGFjZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBTdHJpbmdpZnkgZGF0YSB0eXBlcyBpbnRvIHRoZWlyIEpTT04gcmVwcmVzZW50YXRpb24uXG4gICAqIE1vc3QgZGF0YSB0eXBlcyBjYW4gYmUgc2VyaWFsaXplZCB1c2luZyB0aGVpciBgLnRvSlNPTmAgbWV0aG9kLFxuICAgKiBidXQgbm90IGFsbCwgZm9yIGV4YW1wbGUgdGhlIG51bWJlciBgSW5maW5pdHlgLiBGb3IgdGhlc2UgY2FzZXMgeW91IGhhdmVcbiAgICogdG8gdXNlIHRoZSByZXBsYWNlci4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIEpTT04uc3RyaW5naWZ5KFsyLCBJbmZpbml0eV0sIG1hdGgucmVwbGFjZXIpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVwbGFjZWQgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHRoZSBudW1lcmljIHZhbHVlcyBJbmZpbml0aXksIC1JbmZpbml0eSwgYW5kIE5hTiBjYW5ub3QgYmUgc2VyaWFsaXplZCB0byBKU09OXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgKCFpc0Zpbml0ZSh2YWx1ZSkgfHwgaXNOYU4odmFsdWUpKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF0aGpzOiAnbnVtYmVyJyxcbiAgICAgICAgdmFsdWU6IFN0cmluZyh2YWx1ZSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlcGxhY2VyID0gY3JlYXRlUmVwbGFjZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJldml2ZXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXZpdmVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NsYXNzZXMnXTtcbnZhciBjcmVhdGVSZXZpdmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNsYXNzZXMgPSBfcmVmLmNsYXNzZXM7XG5cbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIG1hdGhqcyBkYXRhIHR5cGVzIGZyb20gdGhlaXIgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJldml2ZWQgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gcmV2aXZlcihrZXksIHZhbHVlKSB7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gY2xhc3Nlc1t2YWx1ZSAmJiB2YWx1ZS5tYXRoanNdO1xuXG4gICAgaWYgKGNvbnN0cnVjdG9yICYmIHR5cGVvZiBjb25zdHJ1Y3Rvci5mcm9tSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLmZyb21KU09OKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlUmV2aXZlciA9IGNyZWF0ZVJldml2ZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFic051bWJlciA9IGFic051bWJlcjtcbmV4cG9ydHMuYWRkTnVtYmVyID0gYWRkTnVtYmVyO1xuZXhwb3J0cy5zdWJ0cmFjdE51bWJlciA9IHN1YnRyYWN0TnVtYmVyO1xuZXhwb3J0cy5tdWx0aXBseU51bWJlciA9IG11bHRpcGx5TnVtYmVyO1xuZXhwb3J0cy5kaXZpZGVOdW1iZXIgPSBkaXZpZGVOdW1iZXI7XG5leHBvcnRzLnVuYXJ5TWludXNOdW1iZXIgPSB1bmFyeU1pbnVzTnVtYmVyO1xuZXhwb3J0cy51bmFyeVBsdXNOdW1iZXIgPSB1bmFyeVBsdXNOdW1iZXI7XG5leHBvcnRzLmNicnROdW1iZXIgPSBjYnJ0TnVtYmVyO1xuZXhwb3J0cy5jZWlsTnVtYmVyID0gY2VpbE51bWJlcjtcbmV4cG9ydHMuY3ViZU51bWJlciA9IGN1YmVOdW1iZXI7XG5leHBvcnRzLmV4cE51bWJlciA9IGV4cE51bWJlcjtcbmV4cG9ydHMuZXhwbTFOdW1iZXIgPSBleHBtMU51bWJlcjtcbmV4cG9ydHMuZml4TnVtYmVyID0gZml4TnVtYmVyO1xuZXhwb3J0cy5mbG9vck51bWJlciA9IGZsb29yTnVtYmVyO1xuZXhwb3J0cy5nY2ROdW1iZXIgPSBnY2ROdW1iZXI7XG5leHBvcnRzLmxjbU51bWJlciA9IGxjbU51bWJlcjtcbmV4cG9ydHMubG9nTnVtYmVyID0gbG9nTnVtYmVyO1xuZXhwb3J0cy5sb2cxME51bWJlciA9IGxvZzEwTnVtYmVyO1xuZXhwb3J0cy5sb2cyTnVtYmVyID0gbG9nMk51bWJlcjtcbmV4cG9ydHMubG9nMXBOdW1iZXIgPSBsb2cxcE51bWJlcjtcbmV4cG9ydHMubW9kTnVtYmVyID0gbW9kTnVtYmVyO1xuZXhwb3J0cy5udGhSb290TnVtYmVyID0gbnRoUm9vdE51bWJlcjtcbmV4cG9ydHMuc2lnbk51bWJlciA9IHNpZ25OdW1iZXI7XG5leHBvcnRzLnNxcnROdW1iZXIgPSBzcXJ0TnVtYmVyO1xuZXhwb3J0cy5zcXVhcmVOdW1iZXIgPSBzcXVhcmVOdW1iZXI7XG5leHBvcnRzLnhnY2ROdW1iZXIgPSB4Z2NkTnVtYmVyO1xuZXhwb3J0cy5wb3dOdW1iZXIgPSBwb3dOdW1iZXI7XG5leHBvcnRzLnJvdW5kTnVtYmVyID0gcm91bmROdW1iZXI7XG5leHBvcnRzLm5vcm1OdW1iZXIgPSBub3JtTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuMSA9ICdudW1iZXInO1xudmFyIG4yID0gJ251bWJlciwgbnVtYmVyJztcblxuZnVuY3Rpb24gYWJzTnVtYmVyKGEpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEpO1xufVxuXG5hYnNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFkZE51bWJlcihhLCBiKSB7XG4gIHJldHVybiBhICsgYjtcbn1cblxuYWRkTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBzdWJ0cmFjdE51bWJlcihhLCBiKSB7XG4gIHJldHVybiBhIC0gYjtcbn1cblxuc3VidHJhY3ROdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIG11bHRpcGx5TnVtYmVyKGEsIGIpIHtcbiAgcmV0dXJuIGEgKiBiO1xufVxuXG5tdWx0aXBseU51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gZGl2aWRlTnVtYmVyKGEsIGIpIHtcbiAgcmV0dXJuIGEgLyBiO1xufVxuXG5kaXZpZGVOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIHVuYXJ5TWludXNOdW1iZXIoeCkge1xuICByZXR1cm4gLXg7XG59XG5cbnVuYXJ5TWludXNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHVuYXJ5UGx1c051bWJlcih4KSB7XG4gIHJldHVybiB4O1xufVxuXG51bmFyeVBsdXNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNicnROdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuY2JydCkoeCk7XG59XG5cbmNicnROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNlaWxOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5jZWlsKHgpO1xufVxuXG5jZWlsTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjdWJlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggKiB4ICogeDtcbn1cblxuY3ViZU51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gZXhwTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguZXhwKHgpO1xufVxuXG5leHBOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGV4cG0xTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmV4cG0xKSh4KTtcbn1cblxuZXhwbTFOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGZpeE51bWJlcih4KSB7XG4gIHJldHVybiB4ID4gMCA/IE1hdGguZmxvb3IoeCkgOiBNYXRoLmNlaWwoeCk7XG59XG5cbmZpeE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gZmxvb3JOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5mbG9vcih4KTtcbn1cblxuZmxvb3JOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSBnY2QgZm9yIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRlbm9taW5hdG9yIG9mIGEgYW5kIGJcbiAqL1xuXG5mdW5jdGlvbiBnY2ROdW1iZXIoYSwgYikge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gZ2NkIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gIH0gLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2FsZ29yaXRobVxuXG5cbiAgdmFyIHI7XG5cbiAgd2hpbGUgKGIgIT09IDApIHtcbiAgICByID0gYSAlIGI7XG4gICAgYSA9IGI7XG4gICAgYiA9IHI7XG4gIH1cblxuICByZXR1cm4gYSA8IDAgPyAtYSA6IGE7XG59XG5cbmdjZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIGxjbSBmb3IgdHdvIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlIG9mIGEgYW5kIGJcbiAqL1xuXG5mdW5jdGlvbiBsY21OdW1iZXIoYSwgYikge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gIH1cblxuICBpZiAoYSA9PT0gMCB8fCBiID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2FsZ29yaXRobVxuICAvLyBldmFsdWF0ZSBsY20gaGVyZSBpbmxpbmUgdG8gcmVkdWNlIG92ZXJoZWFkXG5cblxuICB2YXIgdDtcbiAgdmFyIHByb2QgPSBhICogYjtcblxuICB3aGlsZSAoYiAhPT0gMCkge1xuICAgIHQgPSBiO1xuICAgIGIgPSBhICUgdDtcbiAgICBhID0gdDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmFicyhwcm9kIC8gYSk7XG59XG5cbmxjbU51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblxuZnVuY3Rpb24gbG9nTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpO1xufVxuXG5sb2dOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgMTAtYmFzZSBsb2dhcml0aG0gb2YgYSBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblxuZnVuY3Rpb24gbG9nMTBOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIubG9nMTApKHgpO1xufVxuXG5sb2cxME51bWJlci5zaWduYXR1cmUgPSBuMTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSAyLWJhc2UgbG9nYXJpdGhtIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cbmZ1bmN0aW9uIGxvZzJOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIubG9nMikoeCk7XG59XG5cbmxvZzJOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSBgbnVtYmVyKzFgXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5mdW5jdGlvbiBsb2cxcE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5sb2cxcCkoeCk7XG59XG5cbmxvZzFwTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG1vZHVsdXMgb2YgdHdvIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybnMge251bWJlcn0gcmVzXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG1vZE51bWJlcih4LCB5KSB7XG4gIGlmICh5ID4gMCkge1xuICAgIC8vIFdlIGRvbid0IHVzZSBKYXZhU2NyaXB0J3MgJSBvcGVyYXRvciBoZXJlIGFzIHRoaXMgZG9lc24ndCB3b3JrXG4gICAgLy8gY29ycmVjdGx5IGZvciB4IDwgMCBhbmQgeCA9PT0gMFxuICAgIC8vIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uXG4gICAgcmV0dXJuIHggLSB5ICogTWF0aC5mbG9vcih4IC8geSk7XG4gIH0gZWxzZSBpZiAoeSA9PT0gMCkge1xuICAgIHJldHVybiB4O1xuICB9IGVsc2Uge1xuICAgIC8vIHkgPCAwXG4gICAgLy8gVE9ETzogaW1wbGVtZW50IG1vZCBmb3IgYSBuZWdhdGl2ZSBkaXZpc29yXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1vZCBmb3IgYSBuZWdhdGl2ZSBkaXZpc29yJyk7XG4gIH1cbn1cblxubW9kTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG50aCByb290IG9mIGEsIHNvbHZlIHhecm9vdCA9PSBhXG4gKiBodHRwOi8vcm9zZXR0YWNvZGUub3JnL3dpa2kvTnRoX3Jvb3QjSmF2YVNjcmlwdFxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSByb290XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG50aFJvb3ROdW1iZXIoYSwgcm9vdCkge1xuICB2YXIgaW52ID0gcm9vdCA8IDA7XG5cbiAgaWYgKGludikge1xuICAgIHJvb3QgPSAtcm9vdDtcbiAgfVxuXG4gIGlmIChyb290ID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgfVxuXG4gIGlmIChhIDwgMCAmJiBNYXRoLmFicyhyb290KSAlIDIgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBvZGQgd2hlbiBhIGlzIG5lZ2F0aXZlLicpO1xuICB9IC8vIGVkZ2UgY2FzZXMgemVybyBhbmQgaW5maW5pdHlcblxuXG4gIGlmIChhID09PSAwKSB7XG4gICAgcmV0dXJuIGludiA/IEluZmluaXR5IDogMDtcbiAgfVxuXG4gIGlmICghaXNGaW5pdGUoYSkpIHtcbiAgICByZXR1cm4gaW52ID8gMCA6IGE7XG4gIH1cblxuICB2YXIgeCA9IE1hdGgucG93KE1hdGguYWJzKGEpLCAxIC8gcm9vdCk7IC8vIElmIGEgPCAwLCB3ZSByZXF1aXJlIHRoYXQgcm9vdCBpcyBhbiBvZGQgaW50ZWdlcixcbiAgLy8gc28gKC0xKSBeICgxL3Jvb3QpID0gLTFcblxuICB4ID0gYSA8IDAgPyAteCA6IHg7XG4gIHJldHVybiBpbnYgPyAxIC8geCA6IHg7IC8vIFZlcnkgbmljZSBhbGdvcml0aG0sIGJ1dCBmYWlscyB3aXRoIG50aFJvb3QoLTIsIDMpLlxuICAvLyBOZXd0b24ncyBtZXRob2QgaGFzIHNvbWUgd2VsbC1rbm93biBwcm9ibGVtcyBhdCB0aW1lczpcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmV3dG9uJTI3c19tZXRob2QjRmFpbHVyZV9hbmFseXNpc1xuXG4gIC8qXG4gIGxldCB4ID0gMSAvLyBJbml0aWFsIGd1ZXNzXG4gIGxldCB4UHJldiA9IDFcbiAgbGV0IGkgPSAwXG4gIGNvbnN0IGlNYXggPSAxMDAwMFxuICBkbyB7XG4gICAgY29uc3QgZGVsdGEgPSAoYSAvIE1hdGgucG93KHgsIHJvb3QgLSAxKSAtIHgpIC8gcm9vdFxuICAgIHhQcmV2ID0geFxuICAgIHggPSB4ICsgZGVsdGFcbiAgICBpKytcbiAgfVxuICB3aGlsZSAoeFByZXYgIT09IHggJiYgaSA8IGlNYXgpXG4gICBpZiAoeFByZXYgIT09IHgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIG50aFJvb3QgZmFpbGVkIHRvIGNvbnZlcmdlJylcbiAgfVxuICAgcmV0dXJuIGludiA/IDEgLyB4IDogeFxuICAqL1xufVxuXG5udGhSb290TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBzaWduTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xufVxuXG5zaWduTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBzcXJ0TnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh4KTtcbn1cblxuc3FydE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc3F1YXJlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggKiB4O1xufVxuXG5zcXVhcmVOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB4Z2NkIGZvciB0d28gbnVtYmVyc1xuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHJlc3VsdFxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB4Z2NkTnVtYmVyKGEsIGIpIHtcbiAgLy8gc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9FdWNsaWRlYW5fYWxnb3JpdGhtXG4gIHZhciB0OyAvLyB1c2VkIHRvIHN3YXAgdHdvIHZhcmlhYmxlc1xuXG4gIHZhciBxOyAvLyBxdW90aWVudFxuXG4gIHZhciByOyAvLyByZW1haW5kZXJcblxuICB2YXIgeCA9IDA7XG4gIHZhciBsYXN0eCA9IDE7XG4gIHZhciB5ID0gMTtcbiAgdmFyIGxhc3R5ID0gMDtcblxuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24geGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICB9XG5cbiAgd2hpbGUgKGIpIHtcbiAgICBxID0gTWF0aC5mbG9vcihhIC8gYik7XG4gICAgciA9IGEgLSBxICogYjtcbiAgICB0ID0geDtcbiAgICB4ID0gbGFzdHggLSBxICogeDtcbiAgICBsYXN0eCA9IHQ7XG4gICAgdCA9IHk7XG4gICAgeSA9IGxhc3R5IC0gcSAqIHk7XG4gICAgbGFzdHkgPSB0O1xuICAgIGEgPSBiO1xuICAgIGIgPSByO1xuICB9XG5cbiAgdmFyIHJlcztcblxuICBpZiAoYSA8IDApIHtcbiAgICByZXMgPSBbLWEsIC1sYXN0eCwgLWxhc3R5XTtcbiAgfSBlbHNlIHtcbiAgICByZXMgPSBbYSwgYSA/IGxhc3R4IDogMCwgbGFzdHldO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxueGdjZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnksIGZvciB0d28gbnVtYmVycy5cbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7bnVtYmVyfSByZXNcbiAqL1xuXG5mdW5jdGlvbiBwb3dOdW1iZXIoeCwgeSkge1xuICAvLyB4XkluZmluaXR5ID09PSAwIGlmIC0xIDwgeCA8IDFcbiAgLy8gQSByZWFsIG51bWJlciAwIGlzIHJldHVybmVkIGluc3RlYWQgb2YgY29tcGxleCgwKVxuICBpZiAoeCAqIHggPCAxICYmIHkgPT09IEluZmluaXR5IHx8IHggKiB4ID4gMSAmJiB5ID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLnBvdyh4LCB5KTtcbn1cblxucG93TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuLyoqXG4gKiByb3VuZCBhIG51bWJlciB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWxzLCBvciB0byB6ZXJvIGlmIGRlY2ltYWxzIGlzXG4gKiBub3QgcHJvdmlkZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGRlY2ltYWxzICAgICAgIG51bWJlciBvZiBkZWNpbWFscywgYmV0d2VlbiAwIGFuZCAxNSAoMCBieSBkZWZhdWx0KVxuICogQHJldHVybiB7bnVtYmVyfSByb3VuZGVkVmFsdWVcbiAqL1xuXG5mdW5jdGlvbiByb3VuZE51bWJlcih2YWx1ZSkge1xuICB2YXIgZGVjaW1hbHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIHJldHVybiBwYXJzZUZsb2F0KCgwLCBfbnVtYmVyLnRvRml4ZWQpKHZhbHVlLCBkZWNpbWFscykpO1xufVxuXG5yb3VuZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBub3JtIG9mIGEgbnVtYmVyLCB0aGUgYWJzb2x1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cbmZ1bmN0aW9uIG5vcm1OdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCk7XG59XG5cbm5vcm1OdW1iZXIuc2lnbmF0dXJlID0gbjE7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZE51bWJlciA9IGJpdEFuZE51bWJlcjtcbmV4cG9ydHMuYml0Tm90TnVtYmVyID0gYml0Tm90TnVtYmVyO1xuZXhwb3J0cy5iaXRPck51bWJlciA9IGJpdE9yTnVtYmVyO1xuZXhwb3J0cy5iaXRYb3JOdW1iZXIgPSBiaXRYb3JOdW1iZXI7XG5leHBvcnRzLmxlZnRTaGlmdE51bWJlciA9IGxlZnRTaGlmdE51bWJlcjtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0TnVtYmVyID0gcmlnaHRBcml0aFNoaWZ0TnVtYmVyO1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0TnVtYmVyID0gcmlnaHRMb2dTaGlmdE51bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbjEgPSAnbnVtYmVyJztcbnZhciBuMiA9ICdudW1iZXIsIG51bWJlcic7XG5cbmZ1bmN0aW9uIGJpdEFuZE51bWJlcih4LCB5KSB7XG4gIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0QW5kJyk7XG4gIH1cblxuICByZXR1cm4geCAmIHk7XG59XG5cbmJpdEFuZE51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gYml0Tm90TnVtYmVyKHgpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VyIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdE5vdCcpO1xuICB9XG5cbiAgcmV0dXJuIH54O1xufVxuXG5iaXROb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGJpdE9yTnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRPcicpO1xuICB9XG5cbiAgcmV0dXJuIHggfCB5O1xufVxuXG5iaXRPck51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gYml0WG9yTnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRYb3InKTtcbiAgfVxuXG4gIHJldHVybiB4IF4geTtcbn1cblxuYml0WG9yTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBsZWZ0U2hpZnROdW1iZXIoeCwgeSkge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeCkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGxlZnRTaGlmdCcpO1xuICB9XG5cbiAgcmV0dXJuIHggPDwgeTtcbn1cblxubGVmdFNoaWZ0TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiByaWdodEFyaXRoU2hpZnROdW1iZXIoeCwgeSkge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeCkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHJpZ2h0QXJpdGhTaGlmdCcpO1xuICB9XG5cbiAgcmV0dXJuIHggPj4geTtcbn1cblxucmlnaHRBcml0aFNoaWZ0TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiByaWdodExvZ1NoaWZ0TnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiByaWdodExvZ1NoaWZ0Jyk7XG4gIH1cblxuICByZXR1cm4geCA+Pj4geTtcbn1cblxucmlnaHRMb2dTaGlmdE51bWJlci5zaWduYXR1cmUgPSBuMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zTnVtYmVyID0gY29tYmluYXRpb25zTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfcHJvZHVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9wcm9kdWN0XCIpO1xuXG5mdW5jdGlvbiBjb21iaW5hdGlvbnNOdW1iZXIobiwgaykge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobikgfHwgbiA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucycpO1xuICB9XG5cbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGspIHx8IGsgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgfVxuXG4gIGlmIChrID4gbikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbicpO1xuICB9XG5cbiAgdmFyIG5NaW51c2sgPSBuIC0gaztcbiAgdmFyIHByb2RyYW5nZTtcblxuICBpZiAoayA8IG5NaW51c2spIHtcbiAgICBwcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkobk1pbnVzayArIDEsIG4pO1xuICAgIHJldHVybiBwcm9kcmFuZ2UgLyAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoMSwgayk7XG4gIH1cblxuICBwcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoayArIDEsIG4pO1xuICByZXR1cm4gcHJvZHJhbmdlIC8gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKDEsIG5NaW51c2spO1xufVxuXG5jb21iaW5hdGlvbnNOdW1iZXIuc2lnbmF0dXJlID0gJ251bWJlciwgbnVtYmVyJzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGhpID0gZXhwb3J0cy5lID0gZXhwb3J0cy50YXUgPSBleHBvcnRzLnBpID0gdm9pZCAwO1xudmFyIHBpID0gTWF0aC5QSTtcbmV4cG9ydHMucGkgPSBwaTtcbnZhciB0YXUgPSAyICogTWF0aC5QSTtcbmV4cG9ydHMudGF1ID0gdGF1O1xudmFyIGUgPSBNYXRoLkU7XG5leHBvcnRzLmUgPSBlO1xudmFyIHBoaSA9IDEuNjE4MDMzOTg4NzQ5ODk0ODQ4MjA0NTg2ODM0MzY1NjM4MTE3NzIwMzA5MTc5ODA1NzYyODYyMTM1NDU7XG5leHBvcnRzLnBoaSA9IHBoaTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9hcml0aG1ldGljID0gcmVxdWlyZShcIi4vYXJpdGhtZXRpY1wiKTtcblxuT2JqZWN0LmtleXMoX2FyaXRobWV0aWMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9hcml0aG1ldGljW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi9iaXR3aXNlXCIpO1xuXG5PYmplY3Qua2V5cyhfYml0d2lzZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2JpdHdpc2Vba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfY29tYmluYXRpb25zID0gcmVxdWlyZShcIi4vY29tYmluYXRpb25zXCIpO1xuXG5PYmplY3Qua2V5cyhfY29tYmluYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfY29tYmluYXRpb25zW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcblxuT2JqZWN0LmtleXMoX2NvbnN0YW50cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2NvbnN0YW50c1trZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF9sb2dpY2FsID0gcmVxdWlyZShcIi4vbG9naWNhbFwiKTtcblxuT2JqZWN0LmtleXMoX2xvZ2ljYWwpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9sb2dpY2FsW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX3JlbGF0aW9uYWwgPSByZXF1aXJlKFwiLi9yZWxhdGlvbmFsXCIpO1xuXG5PYmplY3Qua2V5cyhfcmVsYXRpb25hbCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3JlbGF0aW9uYWxba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfcHJvYmFiaWxpdHkgPSByZXF1aXJlKFwiLi9wcm9iYWJpbGl0eVwiKTtcblxuT2JqZWN0LmtleXMoX3Byb2JhYmlsaXR5KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfcHJvYmFiaWxpdHlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfdHJpZ29ub21ldHJ5ID0gcmVxdWlyZShcIi4vdHJpZ29ub21ldHJ5XCIpO1xuXG5PYmplY3Qua2V5cyhfdHJpZ29ub21ldHJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfdHJpZ29ub21ldHJ5W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5cbk9iamVjdC5rZXlzKF91dGlscykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3V0aWxzW2tleV07XG4gICAgfVxuICB9KTtcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3ROdW1iZXIgPSBub3ROdW1iZXI7XG5leHBvcnRzLm9yTnVtYmVyID0gb3JOdW1iZXI7XG5leHBvcnRzLnhvck51bWJlciA9IHhvck51bWJlcjtcbmV4cG9ydHMuYW5kTnVtYmVyID0gYW5kTnVtYmVyO1xudmFyIG4xID0gJ251bWJlcic7XG52YXIgbjIgPSAnbnVtYmVyLCBudW1iZXInO1xuXG5mdW5jdGlvbiBub3ROdW1iZXIoeCkge1xuICByZXR1cm4gIXg7XG59XG5cbm5vdE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gb3JOdW1iZXIoeCwgeSkge1xuICByZXR1cm4gISEoeCB8fCB5KTtcbn1cblxub3JOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIHhvck51bWJlcih4LCB5KSB7XG4gIHJldHVybiAhIXggIT09ICEheTtcbn1cblxueG9yTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBhbmROdW1iZXIoeCwgeSkge1xuICByZXR1cm4gISEoeCAmJiB5KTtcbn1cblxuYW5kTnVtYmVyLnNpZ25hdHVyZSA9IG4yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYW1tYU51bWJlciA9IGdhbW1hTnVtYmVyO1xuZXhwb3J0cy5nYW1tYVAgPSBleHBvcnRzLmdhbW1hRyA9IHZvaWQgMDtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX3Byb2R1Y3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvcHJvZHVjdFwiKTtcblxuZnVuY3Rpb24gZ2FtbWFOdW1iZXIobikge1xuICB2YXIgeDtcblxuICBpZiAoKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShuKSkge1xuICAgIGlmIChuIDw9IDApIHtcbiAgICAgIHJldHVybiBpc0Zpbml0ZShuKSA/IEluZmluaXR5IDogTmFOO1xuICAgIH1cblxuICAgIGlmIChuID4gMTcxKSB7XG4gICAgICByZXR1cm4gSW5maW5pdHk7IC8vIFdpbGwgb3ZlcmZsb3dcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKDEsIG4gLSAxKTtcbiAgfVxuXG4gIGlmIChuIDwgMC41KSB7XG4gICAgcmV0dXJuIE1hdGguUEkgLyAoTWF0aC5zaW4oTWF0aC5QSSAqIG4pICogZ2FtbWFOdW1iZXIoMSAtIG4pKTtcbiAgfVxuXG4gIGlmIChuID49IDE3MS4zNSkge1xuICAgIHJldHVybiBJbmZpbml0eTsgLy8gd2lsbCBvdmVyZmxvd1xuICB9XG5cbiAgaWYgKG4gPiA4NS4wKSB7XG4gICAgLy8gRXh0ZW5kZWQgU3RpcmxpbmcgQXBwcm94XG4gICAgdmFyIHR3b04gPSBuICogbjtcbiAgICB2YXIgdGhyZWVOID0gdHdvTiAqIG47XG4gICAgdmFyIGZvdXJOID0gdGhyZWVOICogbjtcbiAgICB2YXIgZml2ZU4gPSBmb3VyTiAqIG47XG4gICAgcmV0dXJuIE1hdGguc3FydCgyICogTWF0aC5QSSAvIG4pICogTWF0aC5wb3cobiAvIE1hdGguRSwgbikgKiAoMSArIDEgLyAoMTIgKiBuKSArIDEgLyAoMjg4ICogdHdvTikgLSAxMzkgLyAoNTE4NDAgKiB0aHJlZU4pIC0gNTcxIC8gKDI0ODgzMjAgKiBmb3VyTikgKyAxNjM4NzkgLyAoMjA5MDE4ODgwICogZml2ZU4pICsgNTI0NjgxOSAvICg3NTI0Njc5NjgwMCAqIGZpdmVOICogbikpO1xuICB9XG5cbiAgLS1uO1xuICB4ID0gZ2FtbWFQWzBdO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgZ2FtbWFQLmxlbmd0aDsgKytpKSB7XG4gICAgeCArPSBnYW1tYVBbaV0gLyAobiArIGkpO1xuICB9XG5cbiAgdmFyIHQgPSBuICsgZ2FtbWFHICsgMC41O1xuICByZXR1cm4gTWF0aC5zcXJ0KDIgKiBNYXRoLlBJKSAqIE1hdGgucG93KHQsIG4gKyAwLjUpICogTWF0aC5leHAoLXQpICogeDtcbn1cblxuZ2FtbWFOdW1iZXIuc2lnbmF0dXJlID0gJ251bWJlcic7IC8vIFRPRE86IGNvbW1lbnQgb24gdGhlIHZhcmlhYmxlcyBnIGFuZCBwXG5cbnZhciBnYW1tYUcgPSA0Ljc0MjE4NzU7XG5leHBvcnRzLmdhbW1hRyA9IGdhbW1hRztcbnZhciBnYW1tYVAgPSBbMC45OTk5OTk5OTk5OTk5OTcwOTE4MiwgNTcuMTU2MjM1NjY1ODYyOTIzNTE3LCAtNTkuNTk3OTYwMzU1NDc1NDkxMjQ4LCAxNC4xMzYwOTc5NzQ3NDE3NDcxNzQsIC0wLjQ5MTkxMzgxNjA5NzYyMDE5OTc4LCAwLjMzOTk0NjQ5OTg0ODExODg4Njk5ZS00LCAwLjQ2NTIzNjI4OTI3MDQ4NTc1NjY1ZS00LCAtMC45ODM3NDQ3NTMwNDg3OTU2NDY3N2UtNCwgMC4xNTgwODg3MDMyMjQ5MTI0ODg4NGUtMywgLTAuMjEwMjY0NDQxNzI0MTA0ODgzMTllLTMsIDAuMjE3NDM5NjE4MTE1MjEyNjQzMjBlLTMsIC0wLjE2NDMxODEwNjUzNjc2Mzg5MDIyZS0zLCAwLjg0NDE4MjIzOTgzODUyNzQzMjkzZS00LCAtMC4yNjE5MDgzODQwMTU4MTQwODY3MGUtNCwgMC4zNjg5OTE4MjY1OTUzMTYyMjcwNGUtNV07XG5leHBvcnRzLmdhbW1hUCA9IGdhbW1hUDsiLCJcInVzZSBzdHJpY3RcIjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvc051bWJlciA9IGFjb3NOdW1iZXI7XG5leHBvcnRzLmFjb3NoTnVtYmVyID0gYWNvc2hOdW1iZXI7XG5leHBvcnRzLmFjb3ROdW1iZXIgPSBhY290TnVtYmVyO1xuZXhwb3J0cy5hY290aE51bWJlciA9IGFjb3RoTnVtYmVyO1xuZXhwb3J0cy5hY3NjTnVtYmVyID0gYWNzY051bWJlcjtcbmV4cG9ydHMuYWNzY2hOdW1iZXIgPSBhY3NjaE51bWJlcjtcbmV4cG9ydHMuYXNlY051bWJlciA9IGFzZWNOdW1iZXI7XG5leHBvcnRzLmFzZWNoTnVtYmVyID0gYXNlY2hOdW1iZXI7XG5leHBvcnRzLmFzaW5OdW1iZXIgPSBhc2luTnVtYmVyO1xuZXhwb3J0cy5hc2luaE51bWJlciA9IGFzaW5oTnVtYmVyO1xuZXhwb3J0cy5hdGFuTnVtYmVyID0gYXRhbk51bWJlcjtcbmV4cG9ydHMuYXRhbjJOdW1iZXIgPSBhdGFuMk51bWJlcjtcbmV4cG9ydHMuYXRhbmhOdW1iZXIgPSBhdGFuaE51bWJlcjtcbmV4cG9ydHMuY29zTnVtYmVyID0gY29zTnVtYmVyO1xuZXhwb3J0cy5jb3NoTnVtYmVyID0gY29zaE51bWJlcjtcbmV4cG9ydHMuY290TnVtYmVyID0gY290TnVtYmVyO1xuZXhwb3J0cy5jb3RoTnVtYmVyID0gY290aE51bWJlcjtcbmV4cG9ydHMuY3NjTnVtYmVyID0gY3NjTnVtYmVyO1xuZXhwb3J0cy5jc2NoTnVtYmVyID0gY3NjaE51bWJlcjtcbmV4cG9ydHMuc2VjTnVtYmVyID0gc2VjTnVtYmVyO1xuZXhwb3J0cy5zZWNoTnVtYmVyID0gc2VjaE51bWJlcjtcbmV4cG9ydHMuc2luTnVtYmVyID0gc2luTnVtYmVyO1xuZXhwb3J0cy5zaW5oTnVtYmVyID0gc2luaE51bWJlcjtcbmV4cG9ydHMudGFuTnVtYmVyID0gdGFuTnVtYmVyO1xuZXhwb3J0cy50YW5oTnVtYmVyID0gdGFuaE51bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbjEgPSAnbnVtYmVyJztcbnZhciBuMiA9ICdudW1iZXIsIG51bWJlcic7XG5cbmZ1bmN0aW9uIGFjb3NOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hY29zKHgpO1xufVxuXG5hY29zTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhY29zaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5hY29zaCkoeCk7XG59XG5cbmFjb3NoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhY290TnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbigxIC8geCk7XG59XG5cbmFjb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFjb3RoTnVtYmVyKHgpIHtcbiAgcmV0dXJuIGlzRmluaXRlKHgpID8gKE1hdGgubG9nKCh4ICsgMSkgLyB4KSArIE1hdGgubG9nKHggLyAoeCAtIDEpKSkgLyAyIDogMDtcbn1cblxuYWNvdGhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFjc2NOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hc2luKDEgLyB4KTtcbn1cblxuYWNzY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYWNzY2hOdW1iZXIoeCkge1xuICB2YXIgeEludiA9IDEgLyB4O1xuICByZXR1cm4gTWF0aC5sb2coeEludiArIE1hdGguc3FydCh4SW52ICogeEludiArIDEpKTtcbn1cblxuYWNzY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFzZWNOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hY29zKDEgLyB4KTtcbn1cblxuYXNlY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYXNlY2hOdW1iZXIoeCkge1xuICB2YXIgeEludiA9IDEgLyB4O1xuICB2YXIgcmV0ID0gTWF0aC5zcXJ0KHhJbnYgKiB4SW52IC0gMSk7XG4gIHJldHVybiBNYXRoLmxvZyhyZXQgKyB4SW52KTtcbn1cblxuYXNlY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFzaW5OdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hc2luKHgpO1xufVxuXG5hc2luTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhc2luaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5hc2luaCkoeCk7XG59XG5cbmFzaW5oTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhdGFuTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbih4KTtcbn1cblxuYXRhbk51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYXRhbjJOdW1iZXIoeSwgeCkge1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KTtcbn1cblxuYXRhbjJOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIGF0YW5oTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmF0YW5oKSh4KTtcbn1cblxuYXRhbmhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNvc051bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLmNvcyh4KTtcbn1cblxuY29zTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjb3NoTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmNvc2gpKHgpO1xufVxuXG5jb3NoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjb3ROdW1iZXIoeCkge1xuICByZXR1cm4gMSAvIE1hdGgudGFuKHgpO1xufVxuXG5jb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNvdGhOdW1iZXIoeCkge1xuICB2YXIgZSA9IE1hdGguZXhwKDIgKiB4KTtcbiAgcmV0dXJuIChlICsgMSkgLyAoZSAtIDEpO1xufVxuXG5jb3RoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjc2NOdW1iZXIoeCkge1xuICByZXR1cm4gMSAvIE1hdGguc2luKHgpO1xufVxuXG5jc2NOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNzY2hOdW1iZXIoeCkge1xuICAvLyBjb25zaWRlciB2YWx1ZXMgY2xvc2UgdG8gemVybyAoKy8tKVxuICBpZiAoeCA9PT0gMCkge1xuICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKDIgLyAoTWF0aC5leHAoeCkgLSBNYXRoLmV4cCgteCkpKSAqICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xuICB9XG59XG5cbmNzY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNlY051bWJlcih4KSB7XG4gIHJldHVybiAxIC8gTWF0aC5jb3MoeCk7XG59XG5cbnNlY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc2VjaE51bWJlcih4KSB7XG4gIHJldHVybiAyIC8gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKTtcbn1cblxuc2VjaE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc2luTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguc2luKHgpO1xufVxuXG5zaW5OdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNpbmhOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuc2luaCkoeCk7XG59XG5cbnNpbmhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHRhbk51bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLnRhbih4KTtcbn1cblxudGFuTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiB0YW5oTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLnRhbmgpKHgpO1xufVxuXG50YW5oTnVtYmVyLnNpZ25hdHVyZSA9IG4xOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXJOdW1iZXIgPSBpc0ludGVnZXJOdW1iZXI7XG5leHBvcnRzLmlzTmVnYXRpdmVOdW1iZXIgPSBpc05lZ2F0aXZlTnVtYmVyO1xuZXhwb3J0cy5pc1Bvc2l0aXZlTnVtYmVyID0gaXNQb3NpdGl2ZU51bWJlcjtcbmV4cG9ydHMuaXNaZXJvTnVtYmVyID0gaXNaZXJvTnVtYmVyO1xuZXhwb3J0cy5pc05hTk51bWJlciA9IGlzTmFOTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuMSA9ICdudW1iZXInO1xuXG5mdW5jdGlvbiBpc0ludGVnZXJOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KTtcbn1cblxuaXNJbnRlZ2VyTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc05lZ2F0aXZlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPCAwO1xufVxuXG5pc05lZ2F0aXZlTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc1Bvc2l0aXZlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPiAwO1xufVxuXG5pc1Bvc2l0aXZlTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc1plcm9OdW1iZXIoeCkge1xuICByZXR1cm4geCA9PT0gMDtcbn1cblxuaXNaZXJvTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc05hTk51bWJlcih4KSB7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oeCk7XG59XG5cbmlzTmFOTnVtYmVyLnNpZ25hdHVyZSA9IG4xOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9kZWNpbWFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZGVjaW1hbC5qc1wiKSk7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIG5hbWUgPSAnQmlnTnVtYmVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJz9vbicsICdjb25maWcnXTtcbnZhciBjcmVhdGVCaWdOdW1iZXJDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBvbiA9IF9yZWYub24sXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZztcblxuICB2YXIgQmlnTnVtYmVyID0gX2RlY2ltYWxbXCJkZWZhdWx0XCJdLmNsb25lKHtcbiAgICBwcmVjaXNpb246IGNvbmZpZy5wcmVjaXNpb25cbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEJpZ051bWJlci5wcm90b3R5cGUudHlwZSA9ICdCaWdOdW1iZXInO1xuICBCaWdOdW1iZXIucHJvdG90eXBlLmlzQmlnTnVtYmVyID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBCaWdOdW1iZXIgY29udGFpbmluZ1xuICAgKiB0eXBlIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiQmlnTnVtYmVyXCIsIFwidmFsdWVcIjogXCIwLjJcIn1gXG4gICAqL1xuXG4gIEJpZ051bWJlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdCaWdOdW1iZXInLFxuICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIEJpZ051bWJlciBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJCaWdOdW1iZXJcIiwgXCJ2YWx1ZVwiOiBcIjAuMlwifWBcbiAgICogQHJldHVybiB7QmlnTnVtYmVyfVxuICAgKi9cblxuXG4gIEJpZ051bWJlci5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoanNvbi52YWx1ZSk7XG4gIH07XG5cbiAgaWYgKG9uKSB7XG4gICAgLy8gbGlzdGVuIGZvciBjaGFuZ2VkIGluIHRoZSBjb25maWd1cmF0aW9uLCBhdXRvbWF0aWNhbGx5IGFwcGx5IGNoYW5nZWQgcHJlY2lzaW9uXG4gICAgb24oJ2NvbmZpZycsIGZ1bmN0aW9uIChjdXJyLCBwcmV2KSB7XG4gICAgICBpZiAoY3Vyci5wcmVjaXNpb24gIT09IHByZXYucHJlY2lzaW9uKSB7XG4gICAgICAgIEJpZ051bWJlci5jb25maWcoe1xuICAgICAgICAgIHByZWNpc2lvbjogY3Vyci5wcmVjaXNpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gQmlnTnVtYmVyO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyQ2xhc3MgPSBjcmVhdGVCaWdOdW1iZXJDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnbnVtYmVyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2JpZ251bWJlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVCaWdudW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEJpZ051bWJlciwgd2hpY2ggY2FuIHN0b3JlIG51bWJlcnMgd2l0aCBhcmJpdHJhcnkgcHJlY2lzaW9uLlxuICAgKiBXaGVuIGEgbWF0cml4IGlzIHByb3ZpZGVkLCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gQmlnTnVtYmVyLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYmlnbnVtYmVyKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAwLjEgKyAwLjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4zMDAwMDAwMDAwMDAwMDAwNFxuICAgKiAgICBtYXRoLmJpZ251bWJlcigwLjEpICsgbWF0aC5iaWdudW1iZXIoMC4yKSAgLy8gcmV0dXJucyBCaWdOdW1iZXIgMC4zXG4gICAqXG4gICAqXG4gICAqICAgIDcuMmU1MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciBJbmZpbml0eVxuICAgKiAgICBtYXRoLmJpZ251bWJlcignNy4yZTUwMCcpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBCaWdOdW1iZXIgNy4yZTUwMFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYm9vbGVhbiwgY29tcGxleCwgaW5kZXgsIG1hdHJpeCwgc3RyaW5nLCB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeCB8IGJvb2xlYW4gfCBudWxsfSBbdmFsdWVdICBWYWx1ZSBmb3IgdGhlIGJpZyBudW1iZXIsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgYnkgZGVmYXVsdC5cbiAgICogQHJldHVybnMge0JpZ051bWJlcn0gVGhlIGNyZWF0ZWQgYmlnbnVtYmVyXG4gICAqL1xuICB2YXIgYmlnbnVtYmVyID0gdHlwZWQoJ2JpZ251bWJlcicsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgLy8gY29udmVydCB0byBzdHJpbmcgdG8gcHJldmVudCBlcnJvcnMgaW4gY2FzZSBvZiA+MTUgZGlnaXRzXG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4ICsgJycpO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICAvLyB3ZSBhc3N1bWUgYSBCaWdOdW1iZXIgaXMgaW1tdXRhYmxlXG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4Lm4pLmRpdih4LmQpLnRpbWVzKHgucyk7XG4gICAgfSxcbiAgICBcIm51bGxcIjogZnVuY3Rpb24gX251bGwoeCkge1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGJpZ251bWJlcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpZ251bWJlcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaWdudW1iZXIgPSBjcmVhdGVCaWdudW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJvb2xlYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYm9vbGVhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUJvb2xlYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBib29sZWFuIG9yIGNvbnZlcnQgYSBzdHJpbmcgb3IgbnVtYmVyIHRvIGEgYm9vbGVhbi5cbiAgICogSW4gY2FzZSBvZiBhIG51bWJlciwgYHRydWVgIGlzIHJldHVybmVkIGZvciBub24temVybyBudW1iZXJzLCBhbmQgYGZhbHNlYCBpblxuICAgKiBjYXNlIG9mIHplcm8uXG4gICAqIFN0cmluZ3MgY2FuIGJlIGAndHJ1ZSdgIG9yIGAnZmFsc2UnYCwgb3IgY2FuIGNvbnRhaW4gYSBudW1iZXIuXG4gICAqIFdoZW4gdmFsdWUgaXMgYSBtYXRyaXgsIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBib29sZWFuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYm9vbGVhbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5ib29sZWFuKDApICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguYm9vbGVhbigxKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguYm9vbGVhbigtMykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oJ3RydWUnKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguYm9vbGVhbignZmFsc2UnKSAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oWzEsIDAsIDEsIDFdKSAgICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBBcnJheSB8IE1hdHJpeCB8IG51bGx9IHZhbHVlICBBIHZhbHVlIG9mIGFueSB0eXBlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gVGhlIGJvb2xlYW4gdmFsdWVcbiAgICovXG4gIHZhciBib29sID0gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgXCJib29sZWFuXCI6IGZ1bmN0aW9uIGJvb2xlYW4oeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gISF4O1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiAheC5pc1plcm8oKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIC8vIHRyeSBjYXNlIGluc2Vuc2l0aXZlXG4gICAgICB2YXIgbGNhc2UgPSB4LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChsY2FzZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChsY2FzZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIHRlc3Qgd2hldGhlciB2YWx1ZSBpcyBhIHZhbGlkIG51bWJlclxuXG5cbiAgICAgIHZhciBudW0gPSBOdW1iZXIoeCk7XG5cbiAgICAgIGlmICh4ICE9PSAnJyAmJiAhaXNOYU4obnVtKSkge1xuICAgICAgICByZXR1cm4gISFudW07XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInICsgeCArICdcIiB0byBhIGJvb2xlYW4nKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYm9vbCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJvb2w7XG59KTtcbmV4cG9ydHMuY3JlYXRlQm9vbGVhbiA9IGNyZWF0ZUJvb2xlYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNoYWluQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnQ2hhaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnP29uJywgJ21hdGgnXTtcbnZhciBjcmVhdGVDaGFpbkNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG9uID0gX3JlZi5vbixcbiAgICAgIG1hdGggPSBfcmVmLm1hdGg7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBDaGFpblxuICAgKiBXcmFwIGFueSB2YWx1ZSBpbiBhIGNoYWluLCBhbGxvd2luZyB0byBwZXJmb3JtIGNoYWluZWQgb3BlcmF0aW9ucyBvblxuICAgKiB0aGUgdmFsdWUuXG4gICAqXG4gICAqIEFsbCBtZXRob2RzIGF2YWlsYWJsZSBpbiB0aGUgbWF0aC5qcyBsaWJyYXJ5IGNhbiBiZSBjYWxsZWQgdXBvbiB0aGUgY2hhaW4sXG4gICAqIGFuZCB0aGVuIHdpbGwgYmUgZXZhbHVhdGVkIHdpdGggdGhlIHZhbHVlIGl0c2VsZiBhcyBmaXJzdCBhcmd1bWVudC5cbiAgICogVGhlIGNoYWluIGNhbiBiZSBjbG9zZWQgYnkgZXhlY3V0aW5nIGNoYWluLmRvbmUoKSwgd2hpY2ggd2lsbCByZXR1cm5cbiAgICogdGhlIGZpbmFsIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgQ2hhaW4gaGFzIGEgbnVtYmVyIG9mIHNwZWNpYWwgZnVuY3Rpb25zOlxuICAgKiAtIGRvbmUoKSAgICAgICAgICAgICBGaW5hbGl6ZSB0aGUgY2hhaW5lZCBvcGVyYXRpb24gYW5kIHJldHVybiB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgY2hhaW4ncyB2YWx1ZS5cbiAgICogLSB2YWx1ZU9mKCkgICAgICAgICAgVGhlIHNhbWUgYXMgZG9uZSgpXG4gICAqIC0gdG9TdHJpbmcoKSAgICAgICAgIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNoYWluJ3MgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuICAgKi9cbiAgZnVuY3Rpb24gQ2hhaW4odmFsdWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2hhaW4pKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzQ2hhaW4pKHZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIENoYWluLnByb3RvdHlwZS50eXBlID0gJ0NoYWluJztcbiAgQ2hhaW4ucHJvdG90eXBlLmlzQ2hhaW4gPSB0cnVlO1xuICAvKipcbiAgICogQ2xvc2UgdGhlIGNoYWluLiBSZXR1cm5zIHRoZSBmaW5hbCB2YWx1ZS5cbiAgICogRG9lcyB0aGUgc2FtZSBhcyBtZXRob2QgdmFsdWVPZigpXG4gICAqIEByZXR1cm5zIHsqfSB2YWx1ZVxuICAgKi9cblxuICBDaGFpbi5wcm90b3R5cGUuZG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIENsb3NlIHRoZSBjaGFpbi4gUmV0dXJucyB0aGUgZmluYWwgdmFsdWUuXG4gICAqIERvZXMgdGhlIHNhbWUgYXMgbWV0aG9kIGRvbmUoKVxuICAgKiBAcmV0dXJucyB7Kn0gdmFsdWVcbiAgICovXG5cblxuICBDaGFpbi5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgaW4gdGhlIGNoYWluXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgQ2hhaW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX3N0cmluZy5mb3JtYXQpKHRoaXMudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2hhaW5cbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBDaGFpbi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdDaGFpbicsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIENoYWluIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDaGFpblwiLCB2YWx1ZTogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0NoYWlufVxuICAgKi9cblxuXG4gIENoYWluLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IENoYWluKGpzb24udmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgbWV0aG9kIGZvciB0aGUgY2hhaW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgcHJveGllZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGZuIGlzIG5vIGZ1bmN0aW9uLCBpdCBpcyBzaWxlbnRseSBpZ25vcmVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByb3h5KG5hbWUsIGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgQ2hhaW4ucHJvdG90eXBlW25hbWVdID0gY2hhaW5pZnkoZm4pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgbWV0aG9kIGZvciB0aGUgY2hhaW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXIgICBUaGUgZnVuY3Rpb24gcmVzb2x2aW5nIHdpdGggdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdG8gYmUgcHJveGllZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUxhenlQcm94eShuYW1lLCByZXNvbHZlcikge1xuICAgICgwLCBfb2JqZWN0LmxhenkpKENoYWluLnByb3RvdHlwZSwgbmFtZSwgZnVuY3Rpb24gb3V0ZXJSZXNvbHZlcigpIHtcbiAgICAgIHZhciBmbiA9IHJlc29sdmVyKCk7XG5cbiAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNoYWluaWZ5KGZuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gaWYgbm90IGEgZnVuY3Rpb24sIGlnbm9yZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBNYWtlIGEgZnVuY3Rpb24gY2hhaW5hYmxlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBjaGFpbiBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNoYWluaWZ5KGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW3RoaXMudmFsdWVdOyAvLyBgdGhpc2Agd2lsbCBiZSB0aGUgY29udGV4dCBvZiBhIENoYWluIGluc3RhbmNlXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaSArIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENoYWluKGZuLmFwcGx5KGZuLCBhcmdzKSk7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgZm9yIGEgc2luZ2xlIG1ldGhvZCwgb3IgYW4gb2JqZWN0IHdpdGggbXVsdGlwbGUgbWV0aG9kcy5cbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICBDaGFpbi5jcmVhdGVQcm94eSgnYWRkJywgZnVuY3Rpb24gYWRkICh4LCB5KSB7Li4ufSlcbiAgICogICBDaGFpbi5jcmVhdGVQcm94eSh7XG4gICAqICAgICBhZGQ6ICAgICAgZnVuY3Rpb24gYWRkICh4LCB5KSB7Li4ufSxcbiAgICogICAgIHN1YnRyYWN0OiBmdW5jdGlvbiBzdWJ0cmFjdCAoeCwgeSkgey4uLn1cbiAgICogICB9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgT2JqZWN0fSBhcmcwICAgQSBuYW1lIChzdHJpbmcpLCBvciBhbiBvYmplY3Qgd2l0aFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc1xuICAgKiBAcGFyYW0geyp9IFthcmcxXSAgICAgICAgICAgICAgIEEgZnVuY3Rpb24sIHdoZW4gYXJnMCBpcyBhIG5hbWVcbiAgICovXG5cblxuICBDaGFpbi5jcmVhdGVQcm94eSA9IGZ1bmN0aW9uIChhcmcwLCBhcmcxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcwID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gY3JlYXRlUHJveHkobmFtZSwgdmFsdWUpXG4gICAgICBjcmVhdGVQcm94eShhcmcwLCBhcmcxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX25hbWUpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShhcmcwLCBfbmFtZSkgJiYgZXhjbHVkZWROYW1lc1tfbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNyZWF0ZUxhenlQcm94eShfbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZzBbX25hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBjcmVhdGVQcm94eSh2YWx1ZXMpXG4gICAgICBmb3IgKHZhciBfbmFtZSBpbiBhcmcwKSB7XG4gICAgICAgIF9sb29wKF9uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGV4Y2x1ZGVkTmFtZXMgPSB7XG4gICAgZXhwcmVzc2lvbjogdHJ1ZSxcbiAgICBkb2NzOiB0cnVlLFxuICAgIHR5cGU6IHRydWUsXG4gICAgY2xhc3NlczogdHJ1ZSxcbiAgICBqc29uOiB0cnVlLFxuICAgIGVycm9yOiB0cnVlLFxuICAgIGlzQ2hhaW46IHRydWUgLy8gY29uZmxpY3RzIHdpdGggdGhlIHByb3BlcnR5IGlzQ2hhaW4gb2YgYSBDaGFpbiBpbnN0YW5jZVxuXG4gIH07IC8vIGNyZWF0ZSBwcm94eSBmb3IgZXZlcnl0aGluZyB0aGF0IGlzIGluIG1hdGguanNcblxuICBDaGFpbi5jcmVhdGVQcm94eShtYXRoKTsgLy8gcmVnaXN0ZXIgb24gdGhlIGltcG9ydCBldmVudCwgYXV0b21hdGljYWxseSBhZGQgYSBwcm94eSBmb3IgZXZlcnkgaW1wb3J0ZWQgZnVuY3Rpb24uXG5cbiAgaWYgKG9uKSB7XG4gICAgb24oJ2ltcG9ydCcsIGZ1bmN0aW9uIChuYW1lLCByZXNvbHZlciwgcGF0aCkge1xuICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgIC8vIGFuIGltcG9ydGVkIGZ1bmN0aW9uIChub3QgYSBkYXRhIHR5cGUgb3Igc29tZXRoaW5nIHNwZWNpYWwpXG4gICAgICAgIGNyZWF0ZUxhenlQcm94eShuYW1lLCByZXNvbHZlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gQ2hhaW47XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDaGFpbkNsYXNzID0gY3JlYXRlQ2hhaW5DbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ2hhaW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjaGFpbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdDaGFpbiddO1xudmFyIGNyZWF0ZUNoYWluID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIENoYWluID0gX3JlZi5DaGFpbjtcblxuICAvKipcbiAgICogV3JhcCBhbnkgdmFsdWUgaW4gYSBjaGFpbiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBjaGFpbmVkIG9wZXJhdGlvbnMgb25cbiAgICogdGhlIHZhbHVlLlxuICAgKlxuICAgKiBBbGwgbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhlIG1hdGguanMgbGlicmFyeSBjYW4gYmUgY2FsbGVkIHVwb24gdGhlIGNoYWluLFxuICAgKiBhbmQgdGhlbiB3aWxsIGJlIGV2YWx1YXRlZCB3aXRoIHRoZSB2YWx1ZSBpdHNlbGYgYXMgZmlyc3QgYXJndW1lbnQuXG4gICAqIFRoZSBjaGFpbiBjYW4gYmUgY2xvc2VkIGJ5IGV4ZWN1dGluZyBgY2hhaW4uZG9uZSgpYCwgd2hpY2ggcmV0dXJuc1xuICAgKiB0aGUgZmluYWwgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBjaGFpbiBoYXMgYSBudW1iZXIgb2Ygc3BlY2lhbCBmdW5jdGlvbnM6XG4gICAqXG4gICAqIC0gYGRvbmUoKWAgICAgIEZpbmFsaXplIHRoZSBjaGFpbiBhbmQgcmV0dXJuIHRoZSBjaGFpbidzIHZhbHVlLlxuICAgKiAtIGB2YWx1ZU9mKClgICBUaGUgc2FtZSBhcyBgZG9uZSgpYFxuICAgKiAtIGB0b1N0cmluZygpYCBFeGVjdXRlcyBgbWF0aC5mb3JtYXQoKWAgb250byB0aGUgY2hhaW4ncyB2YWx1ZSwgcmV0dXJuaW5nXG4gICAqICAgICAgICAgICAgICAgIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNoYWluKHZhbHVlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguY2hhaW4oMylcbiAgICogICAgICAgICAuYWRkKDQpXG4gICAqICAgICAgICAgLnN1YnRyYWN0KDIpXG4gICAqICAgICAgICAgLmRvbmUoKSAgICAgLy8gNVxuICAgKlxuICAgKiAgICAgbWF0aC5jaGFpbiggW1sxLCAyXSwgWzMsIDRdXSApXG4gICAqICAgICAgICAgLnN1YnNldChtYXRoLmluZGV4KDAsIDApLCA4KVxuICAgKiAgICAgICAgIC5tdWx0aXBseSgzKVxuICAgKiAgICAgICAgIC5kb25lKCkgICAgIC8vIFtbMjQsIDZdLCBbOSwgMTJdXVxuICAgKlxuICAgKiBAcGFyYW0geyp9IFt2YWx1ZV0gICBBIHZhbHVlIG9mIGFueSB0eXBlIG9uIHdoaWNoIHRvIHN0YXJ0IGEgY2hhaW5lZCBvcGVyYXRpb24uXG4gICAqIEByZXR1cm4ge21hdGguQ2hhaW59IFRoZSBjcmVhdGVkIGNoYWluXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIG5ldyBDaGFpbigpO1xuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkodmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgQ2hhaW4odmFsdWUpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2hhaW4gPSBjcmVhdGVDaGFpbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGxleENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2NvbXBsZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJjb21wbGV4LmpzXCIpKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnQ29tcGxleCc7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlQ29tcGxleENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudHlwZSA9ICdDb21wbGV4JztcbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS5pc0NvbXBsZXggPSB0cnVlO1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDb21wbGV4XCIsIFwicmVcIjogMiwgXCJpbVwiOiAzfWBcbiAgICovXG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0NvbXBsZXgnLFxuICAgICAgcmU6IHRoaXMucmUsXG4gICAgICBpbTogdGhpcy5pbVxuICAgIH07XG4gIH07XG4gIC8qXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBsZXggbnVtYmVyIGluIHBvbGFyIG5vdGF0aW9uXG4gICAqIFRoZSBhbmdsZSBwaGkgd2lsbCBiZSBzZXQgaW4gdGhlIGludGVydmFsIG9mIFstcGksIHBpXS5cbiAgICogQHJldHVybiB7e3I6IG51bWJlciwgcGhpOiBudW1iZXJ9fSBSZXR1cm5zIGFuZCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHIgYW5kIHBoaS5cbiAgICovXG5cblxuICBfY29tcGxleFtcImRlZmF1bHRcIl0ucHJvdG90eXBlLnRvUG9sYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHRoaXMuYWJzKCksXG4gICAgICBwaGk6IHRoaXMuYXJnKClcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wbGV4IG51bWJlcixcbiAgICogd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgdmFyIGltID0gdGhpcy5pbTtcbiAgICB2YXIgcmUgPSB0aGlzLnJlO1xuICAgIHZhciBzdHJSZSA9ICgwLCBfbnVtYmVyLmZvcm1hdCkodGhpcy5yZSwgb3B0aW9ucyk7XG4gICAgdmFyIHN0ckltID0gKDAsIF9udW1iZXIuZm9ybWF0KSh0aGlzLmltLCBvcHRpb25zKTsgLy8gcm91bmQgZWl0aGVyIHJlIG9yIGltIHdoZW4gc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIHByZWNpc2lvblxuXG4gICAgdmFyIHByZWNpc2lvbiA9ICgwLCBfaXMuaXNOdW1iZXIpKG9wdGlvbnMpID8gb3B0aW9ucyA6IG9wdGlvbnMgPyBvcHRpb25zLnByZWNpc2lvbiA6IG51bGw7XG5cbiAgICBpZiAocHJlY2lzaW9uICE9PSBudWxsKSB7XG4gICAgICB2YXIgZXBzaWxvbiA9IE1hdGgucG93KDEwLCAtcHJlY2lzaW9uKTtcblxuICAgICAgaWYgKE1hdGguYWJzKHJlIC8gaW0pIDwgZXBzaWxvbikge1xuICAgICAgICByZSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXRoLmFicyhpbSAvIHJlKSA8IGVwc2lsb24pIHtcbiAgICAgICAgaW0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbSA9PT0gMCkge1xuICAgICAgLy8gcmVhbCB2YWx1ZVxuICAgICAgc3RyID0gc3RyUmU7XG4gICAgfSBlbHNlIGlmIChyZSA9PT0gMCkge1xuICAgICAgLy8gcHVyZWx5IGNvbXBsZXggdmFsdWVcbiAgICAgIGlmIChpbSA9PT0gMSkge1xuICAgICAgICBzdHIgPSAnaSc7XG4gICAgICB9IGVsc2UgaWYgKGltID09PSAtMSkge1xuICAgICAgICBzdHIgPSAnLWknO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gc3RySW0gKyAnaSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbXBsZXggdmFsdWVcbiAgICAgIGlmIChpbSA8IDApIHtcbiAgICAgICAgaWYgKGltID09PSAtMSkge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyAtIGknO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyAtICcgKyBzdHJJbS5zdWJzdHJpbmcoMSkgKyAnaSc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbSA9PT0gMSkge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyArIGknO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyArICcgKyBzdHJJbSArICdpJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjb21wbGV4IG51bWJlciBmcm9tIHBvbGFyIGNvb3JkaW5hdGVzXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKlxuICAgKiAgICAgQ29tcGxleC5mcm9tUG9sYXIocjogbnVtYmVyLCBwaGk6IG51bWJlcikgOiBDb21wbGV4XG4gICAqICAgICBDb21wbGV4LmZyb21Qb2xhcih7cjogbnVtYmVyLCBwaGk6IG51bWJlcn0pIDogQ29tcGxleFxuICAgKlxuICAgKiBAcGFyYW0geyp9IGFyZ3MuLi5cbiAgICogQHJldHVybiB7Q29tcGxleH1cbiAgICovXG5cblxuICBfY29tcGxleFtcImRlZmF1bHRcIl0uZnJvbVBvbGFyID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbMF07XG5cbiAgICAgICAgICBpZiAoX3R5cGVvZihhcmcpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfY29tcGxleFtcImRlZmF1bHRcIl0pKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGhhcyB0byBiZSBhbiBvYmplY3Qgd2l0aCByIGFuZCBwaGkga2V5cy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAyOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgdmFyIHBoaSA9IGFyZ3VtZW50c1sxXTtcblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShyKSkge1xuICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNVbml0KShwaGkpICYmIHBoaS5oYXNCYXNlKCdBTkdMRScpKSB7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgdW5pdCB0byBhIG51bWJlciBpbiByYWRpYW5zXG4gICAgICAgICAgICAgIHBoaSA9IHBoaS50b051bWJlcigncmFkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShwaGkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgX2NvbXBsZXhbXCJkZWZhdWx0XCJdKHtcbiAgICAgICAgICAgICAgICByOiByLFxuICAgICAgICAgICAgICAgIHBoaTogcGhpXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQaGkgaXMgbm90IGEgbnVtYmVyIG5vciBhbiBhbmdsZSB1bml0LicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSYWRpdXMgciBpcyBub3QgYSBudW1iZXIuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiBmcm9tUG9sYXInKTtcbiAgICB9XG4gIH07XG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS52YWx1ZU9mID0gX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50b1N0cmluZztcbiAgLyoqXG4gICAqIENyZWF0ZSBhIENvbXBsZXggbnVtYmVyIGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQSBKU09OIE9iamVjdCBzdHJ1Y3R1cmVkIGFzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB7XCJtYXRoanNcIjogXCJDb21wbGV4XCIsIFwicmVcIjogMiwgXCJpbVwiOiAzfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBkZWZhdWx0IHZhbHVlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgZm9yIGByZWAgYW5kIGBpbWAgYXJlIDAuXG4gICAqIEByZXR1cm4ge0NvbXBsZXh9IFJldHVybnMgYSBuZXcgQ29tcGxleCBudW1iZXJcbiAgICovXG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IF9jb21wbGV4W1wiZGVmYXVsdFwiXShqc29uKTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIGNvbXBsZXggbnVtYmVycywgYGFgIGFuZCBgYmA6XG4gICAqXG4gICAqIC0gUmV0dXJucyAxIHdoZW4gdGhlIHJlYWwgcGFydCBvZiBgYWAgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlYWwgcGFydCBvZiBgYmBcbiAgICogLSBSZXR1cm5zIC0xIHdoZW4gdGhlIHJlYWwgcGFydCBvZiBgYWAgaXMgc21hbGxlciB0aGFuIHRoZSByZWFsIHBhcnQgb2YgYGJgXG4gICAqIC0gUmV0dXJucyAxIHdoZW4gdGhlIHJlYWwgcGFydHMgYXJlIGVxdWFsXG4gICAqICAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBgYWAgaXMgbGFyZ2VyIHRoYW4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBiYFxuICAgKiAtIFJldHVybnMgLTEgd2hlbiB0aGUgcmVhbCBwYXJ0cyBhcmUgZXF1YWxcbiAgICogICBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBhYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBiYFxuICAgKiAtIFJldHVybnMgMCB3aGVuIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIGFyZSBlcXVhbC5cbiAgICpcbiAgICogQHBhcmFtcyB7Q29tcGxleH0gYVxuICAgKiBAcGFyYW1zIHtDb21wbGV4fSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5jb21wYXJlID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYS5yZSA+IGIucmUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmIChhLnJlIDwgYi5yZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGlmIChhLmltID4gYi5pbSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKGEuaW0gPCBiLmltKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgcmV0dXJuIF9jb21wbGV4W1wiZGVmYXVsdFwiXTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBsZXhDbGFzcyA9IGNyZWF0ZUNvbXBsZXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGxleCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdjb21wbGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVDb21wbGV4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNvbXBsZXggdmFsdWUgb3IgY29udmVydCBhIHZhbHVlIHRvIGEgY29tcGxleCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jb21wbGV4KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVzIGEgY29tcGxleCB2YWx1ZSB3aXRoIHplcm9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQuXG4gICAqICAgICBtYXRoLmNvbXBsZXgocmUgOiBudW1iZXIsIGltIDogc3RyaW5nKSAgIC8vIGNyZWF0ZXMgYSBjb21wbGV4IHZhbHVlIHdpdGggcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVzIGZvciByZWFsIGFuZCBpbWFnaW5hcnkgcGFydC5cbiAgICogICAgIG1hdGguY29tcGxleChyZSA6IG51bWJlcikgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhIGNvbXBsZXggdmFsdWUgd2l0aCBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFsIHZhbHVlIGFuZCB6ZXJvIGltYWdpbmFyeSBwYXJ0LlxuICAgKiAgICAgbWF0aC5jb21wbGV4KGNvbXBsZXggOiBDb21wbGV4KSAgICAgICAgICAvLyBjbG9uZXMgdGhlIHByb3ZpZGVkIGNvbXBsZXggdmFsdWUuXG4gICAqICAgICBtYXRoLmNvbXBsZXgoYXJnIDogc3RyaW5nKSAgICAgICAgICAgICAgIC8vIHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgY29tcGxleCB2YWx1ZS5cbiAgICogICAgIG1hdGguY29tcGxleChhcnJheSA6IEFycmF5KSAgICAgICAgICAgICAgLy8gY29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBtYXRyaXggZWxlbWVudCB3aXNlIGludG8gYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wbGV4IHZhbHVlLlxuICAgKiAgICAgbWF0aC5jb21wbGV4KHtyZTogbnVtYmVyLCBpbTogbnVtYmVyfSkgICAvLyBjcmVhdGVzIGEgY29tcGxleCB2YWx1ZSB3aXRoIHByb3ZpZGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBmb3IgcmVhbCBhbiBpbWFnaW5hcnkgcGFydC5cbiAgICogICAgIG1hdGguY29tcGxleCh7cjogbnVtYmVyLCBwaGk6IG51bWJlcn0pICAgLy8gY3JlYXRlcyBhIGNvbXBsZXggdmFsdWUgd2l0aCBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2xhciBjb29yZGluYXRlc1xuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgzLCAtNCkgICAgIC8vIGEgPSBDb21wbGV4IDMgLSA0aVxuICAgKiAgICBhLnJlID0gNSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSA9IENvbXBsZXggNSAtIDRpXG4gICAqICAgIGNvbnN0IGkgPSBhLmltICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgLTRcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCgnMiArIDZpJykgIC8vIENvbXBsZXggMiArIDZpXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLmNvbXBsZXgoKSAgICAgICAgICAvLyBDb21wbGV4IDAgKyAwaVxuICAgKiAgICBjb25zdCBkID0gbWF0aC5hZGQoYSwgYikgICAgICAgICAgLy8gQ29tcGxleCA1ICsgMmlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgaW5kZXgsIG1hdHJpeCwgbnVtYmVyLCBzdHJpbmcsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHsqIHwgQXJyYXkgfCBNYXRyaXh9IFthcmdzXVxuICAgKiAgICAgICAgICAgIEFyZ3VtZW50cyBzcGVjaWZ5aW5nIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybiB7Q29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIGEgY29tcGxleCB2YWx1ZVxuICAgKi9cbiAgdmFyIGNvbXBsZXggPSB0eXBlZCgnY29tcGxleCcsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBDb21wbGV4LlpFUk87XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIocmUsIGltKSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgocmUsIGltKTtcbiAgICB9LFxuICAgIC8vIFRPRE86IHRoaXMgc2lnbmF0dXJlIHNob3VsZCBiZSByZWR1bmRhbnRcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIocmUsIGltKSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgocmUudG9OdW1iZXIoKSwgaW0udG9OdW1iZXIoKSk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudmFsdWVPZigpLCAwKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY2xvbmUoKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBDb21wbGV4KHgpOyAvLyBmb3IgZXhhbXBsZSAnMiArIDNpJ1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiBDb21wbGV4KDApO1xuICAgIH0sXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3QoeCkge1xuICAgICAgaWYgKCdyZScgaW4geCAmJiAnaW0nIGluIHgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgucmUsIHguaW0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3InIGluIHggJiYgJ3BoaScgaW4geCB8fCAnYWJzJyBpbiB4ICYmICdhcmcnIGluIHgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgKHJlIGFuZCBpbSkgb3IgKHIgYW5kIHBoaSkgb3IgKGFicyBhbmQgYXJnKScpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb21wbGV4KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29tcGxleDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wbGV4ID0gY3JlYXRlQ29tcGxleDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnJhY3Rpb25DbGFzcyA9IHZvaWQgMDtcblxudmFyIF9mcmFjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImZyYWN0aW9uLmpzXCIpKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgbmFtZSA9ICdGcmFjdGlvbic7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlRnJhY3Rpb25DbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuICBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50eXBlID0gJ0ZyYWN0aW9uJztcbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5wcm90b3R5cGUuaXNGcmFjdGlvbiA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gY29udGFpbmluZyB0eXBlIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiRnJhY3Rpb25cIiwgXCJuXCI6IDMsIFwiZFwiOiA4fWBcbiAgICovXG5cbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdGcmFjdGlvbicsXG4gICAgICBuOiB0aGlzLnMgKiB0aGlzLm4sXG4gICAgICBkOiB0aGlzLmRcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBGcmFjdGlvbiBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJGcmFjdGlvblwiLCBcIm5cIjogMywgXCJkXCI6IDh9YFxuICAgKiBAcmV0dXJuIHtCaWdOdW1iZXJ9XG4gICAqL1xuXG5cbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdKGpzb24pO1xuICB9O1xuXG4gIHJldHVybiBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnJhY3Rpb25DbGFzcyA9IGNyZWF0ZUZyYWN0aW9uQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZyYWN0aW9uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ZyYWN0aW9uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0ZyYWN0aW9uJ107XG52YXIgY3JlYXRlRnJhY3Rpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmFjdGlvbiBjb252ZXJ0IGEgdmFsdWUgdG8gYSBmcmFjdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKiAgICAgbWF0aC5mcmFjdGlvbihudW1lcmF0b3IsIGRlbm9taW5hdG9yKVxuICAgKiAgICAgbWF0aC5mcmFjdGlvbih7bjogbnVtZXJhdG9yLCBkOiBkZW5vbWluYXRvcn0pXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKG1hdHJpeDogQXJyYXkgfCBNYXRyaXgpICAgICAgICAgVHVybiBhbGwgbWF0cml4IGVudHJpZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGZyYWN0aW9uc1xuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguZnJhY3Rpb24oMSwgMylcbiAgICogICAgIG1hdGguZnJhY3Rpb24oJzIvMycpXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKHtuOiAyLCBkOiAzfSlcbiAgICogICAgIG1hdGguZnJhY3Rpb24oWzAuMiwgMC4yNSwgMS4yNV0pXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIG51bWJlciwgc3RyaW5nLCB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gW2FyZ3NdXG4gICAqICAgICAgICAgICAgQXJndW1lbnRzIHNwZWNpZnlpbmcgdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3Igb2ZcbiAgICogICAgICAgICAgICB0aGUgZnJhY3Rpb25cbiAgICogQHJldHVybiB7RnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyBhIGZyYWN0aW9uXG4gICAqL1xuICB2YXIgZnJhY3Rpb24gPSB0eXBlZCgnZnJhY3Rpb24nLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKCFpc0Zpbml0ZSh4KSB8fCBpc05hTih4KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoeCArICcgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGEgZnJhY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobnVtZXJhdG9yLCBkZW5vbWluYXRvcikge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihudW1lcmF0b3IsIGRlbm9taW5hdG9yKTtcbiAgICB9LFxuICAgIFwibnVsbFwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKDApO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4LnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBmcmFjdGlvbnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3QoeCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgZnJhY3Rpb24pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmcmFjdGlvbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGcmFjdGlvbiA9IGNyZWF0ZUZyYWN0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZW5zZU1hdHJpeENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnRGVuc2VNYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTWF0cml4J107XG52YXIgY3JlYXRlRGVuc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBNYXRyaXggPSBfcmVmLk1hdHJpeDtcblxuICAvKipcbiAgICogRGVuc2UgTWF0cml4IGltcGxlbWVudGF0aW9uLiBBIHJlZ3VsYXIsIGRlbnNlIG1hdHJpeCwgc3VwcG9ydGluZyBtdWx0aS1kaW1lbnNpb25hbCBtYXRyaWNlcy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBtYXRyaXggdHlwZS5cbiAgICogQGNsYXNzIERlbnNlTWF0cml4XG4gICAqL1xuICBmdW5jdGlvbiBEZW5zZU1hdHJpeChkYXRhLCBkYXRhdHlwZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEZW5zZU1hdHJpeCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGF0eXBlICYmICEoMCwgX2lzLmlzU3RyaW5nKShkYXRhdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhdHlwZTogJyArIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoZGF0YSkpIHtcbiAgICAgIC8vIGNoZWNrIGRhdGEgaXMgYSBEZW5zZU1hdHJpeFxuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ0RlbnNlTWF0cml4Jykge1xuICAgICAgICAvLyBjbG9uZSBkYXRhICYgc2l6ZVxuICAgICAgICB0aGlzLl9kYXRhID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGEuX2RhdGEpO1xuICAgICAgICB0aGlzLl9zaXplID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGEuX3NpemUpO1xuICAgICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IGRhdGEuX2RhdGF0eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYnVpbGQgZGF0YSBmcm9tIGV4aXN0aW5nIG1hdHJpeFxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YS50b0FycmF5KCk7XG4gICAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemUoKTtcbiAgICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZSB8fCBkYXRhLl9kYXRhdHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLmRhdGEpICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5zaXplKSkge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBmaWVsZHMgZnJvbSBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAgICB0aGlzLl9kYXRhID0gZGF0YS5kYXRhO1xuICAgICAgdGhpcy5fc2l6ZSA9IGRhdGEuc2l6ZTsgLy8gdmVyaWZ5IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheVxuXG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlKSh0aGlzLl9kYXRhLCB0aGlzLl9zaXplKTtcbiAgICAgIHRoaXMuX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgZGF0YS5kYXRhdHlwZTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNBcnJheSkoZGF0YSkpIHtcbiAgICAgIC8vIHJlcGxhY2UgbmVzdGVkIE1hdHJpY2VzIHdpdGggQXJyYXlzXG4gICAgICB0aGlzLl9kYXRhID0gcHJlcHJvY2VzcyhkYXRhKTsgLy8gZ2V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheVxuXG4gICAgICB0aGlzLl9zaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHRoaXMuX2RhdGEpOyAvLyB2ZXJpZnkgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGFycmF5LCBUT0RPOiBjb21wdXRlIHNpemUgd2hpbGUgcHJvY2Vzc2luZyBhcnJheVxuXG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlKSh0aGlzLl9kYXRhLCB0aGlzLl9zaXplKTsgLy8gZGF0YSB0eXBlIHVua25vd25cblxuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTtcbiAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIHR5cGVcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgb2YgZGF0YSAoJyArICgwLCBfaXMudHlwZU9mKShkYXRhKSArICcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWRcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgIHRoaXMuX3NpemUgPSBbMF07XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlO1xuICAgIH1cbiAgfVxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZSA9IG5ldyBNYXRyaXgoKTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEZW5zZU1hdHJpeFxuICAgKi9cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuY3JlYXRlRGVuc2VNYXRyaXggPSBmdW5jdGlvbiAoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnR5cGUgPSAnRGVuc2VNYXRyaXgnO1xuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuaXNEZW5zZU1hdHJpeCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1hdHJpeCB0eXBlXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICBjb25zdCBtYXRyaXhUeXBlID0gbWF0cml4LmdldERhdGFUeXBlKCkgIC8vIHJldHJpZXZlcyB0aGUgbWF0cml4IHR5cGVcbiAgICpcbiAgICogQG1lbWJlck9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICB0eXBlIGluZm9ybWF0aW9uOyBpZiBtdWx0aXBsZSB0eXBlcyBhcmUgZm91bmQgZnJvbSB0aGUgTWF0cml4LCBpdCB3aWxsIHJldHVybiBcIm1peGVkXCJcbiAgICovXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmdldERhdGFUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKHRoaXMuX2RhdGEsIF9pcy50eXBlT2YpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBzdG9yYWdlIGZvcm1hdCB1c2VkIGJ5IHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LnN0b3JhZ2UoKSAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBzdG9yYWdlIGZvcm1hdC5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ2RlbnNlJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAvLyByZXRyaWV2ZSBtYXRyaXggZGF0YXR5cGVcbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBkYXRhdHlwZS5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZGF0YXR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGF0eXBlO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERlbnNlTWF0cml4XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YXR5cGVdXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3Vic2V0IG9mIHRoZSBtYXRyaXgsIG9yIHJlcGxhY2UgYSBzdWJzZXQgb2YgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBzdWJzZXQgPSBtYXRyaXguc3Vic2V0KGluZGV4KSAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIHN1YnNldFxuICAgKiAgICAgY29uc3QgdmFsdWUgPSBtYXRyaXguc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCkgICAvLyByZXBsYWNlIHN1YnNldFxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IFtyZXBsYWNlbWVudF1cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfZ2V0KHRoaXMsIGluZGV4KTtcbiAgICAgIC8vIGludGVudGlvbmFsIGZhbGwgdGhyb3VnaFxuXG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBfc2V0KHRoaXMsIGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzJyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEByZXR1cm4geyp9IHZhbHVlXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4Lmxlbmd0aCAhPT0gdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayBpbmRleFxuXG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IGluZGV4Lmxlbmd0aDsgeCsrKSB7XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4W3hdLCB0aGlzLl9zaXplW3hdKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpbmRleC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgaW5kZXhJID0gaW5kZXhbaV07XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4SSwgZGF0YS5sZW5ndGgpO1xuICAgICAgZGF0YSA9IGRhdGFbaW5kZXhJXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKGluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXgubGVuZ3RoIDwgdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCwgJzwnKTtcbiAgICB9XG5cbiAgICB2YXIgaSwgaWksIGluZGV4STsgLy8gZW5sYXJnZSBtYXRyaXggd2hlbiBuZWVkZWRcblxuICAgIHZhciBzaXplID0gaW5kZXgubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gaSArIDE7XG4gICAgfSk7XG5cbiAgICBfZml0KHRoaXMsIHNpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIHRyYXZlcnNlIG92ZXIgdGhlIGRpbWVuc2lvbnNcblxuXG4gICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBpbmRleC5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykge1xuICAgICAgaW5kZXhJID0gaW5kZXhbaV07XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4SSwgZGF0YS5sZW5ndGgpO1xuICAgICAgZGF0YSA9IGRhdGFbaW5kZXhJXTtcbiAgICB9IC8vIHNldCBuZXcgdmFsdWVcblxuXG4gICAgaW5kZXhJID0gaW5kZXhbaW5kZXgubGVuZ3RoIC0gMV07XG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleEksIGRhdGEubGVuZ3RoKTtcbiAgICBkYXRhW2luZGV4SV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1Ym1hdHJpeCBvZiB0aGlzIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9nZXQobWF0cml4LCBpbmRleCkge1xuICAgIGlmICghKDAsIF9pcy5pc0luZGV4KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTY2FsYXIgPSBpbmRleC5pc1NjYWxhcigpO1xuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyByZXR1cm4gYSBzY2FsYXJcbiAgICAgIHJldHVybiBtYXRyaXguZ2V0KGluZGV4Lm1pbigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuICAgICAgdmFyIHNpemUgPSBpbmRleC5zaXplKCk7XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gbWF0cml4Ll9zaXplLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoKTtcbiAgICAgIH0gLy8gdmFsaWRhdGUgaWYgYW55IG9mIHRoZSByYW5nZXMgaW4gdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZVxuXG5cbiAgICAgIHZhciBtaW4gPSBpbmRleC5taW4oKTtcbiAgICAgIHZhciBtYXggPSBpbmRleC5tYXgoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbWF0cml4Ll9zaXplLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShtaW5baV0sIG1hdHJpeC5fc2l6ZVtpXSk7XG4gICAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkobWF4W2ldLCBtYXRyaXguX3NpemVbaV0pO1xuICAgICAgfSAvLyByZXRyaWV2ZSBzdWJtYXRyaXhcbiAgICAgIC8vIFRPRE86IG1vcmUgZWZmaWNpZW50IHdoZW4gY3JlYXRpbmcgYW4gZW1wdHkgbWF0cml4IGFuZCBzZXR0aW5nIF9kYXRhIGFuZCBfc2l6ZSBtYW51YWxseVxuXG5cbiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoX2dldFN1Ym1hdHJpeChtYXRyaXguX2RhdGEsIGluZGV4LCBzaXplLmxlbmd0aCwgMCksIG1hdHJpeC5fZGF0YXR5cGUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZ2V0IGEgc3VibWF0cml4IG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4LlxuICAgKiBJbmRleCBpcyBub3QgY2hlY2tlZCBmb3IgY29ycmVjdCBudW1iZXIgb3IgbGVuZ3RoIG9mIGRpbWVuc2lvbnMuXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zICAgVG90YWwgbnVtYmVyIG9mIGRpbWVuc2lvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICBDdXJyZW50IGRpbWVuc2lvblxuICAgKiBAcmV0dXJuIHtBcnJheX0gc3VibWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2dldFN1Ym1hdHJpeChkYXRhLCBpbmRleCwgZGltcywgZGltKSB7XG4gICAgdmFyIGxhc3QgPSBkaW0gPT09IGRpbXMgLSAxO1xuICAgIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbihkaW0pO1xuXG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIHJldHVybiByYW5nZS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBkYXRhW2ldO1xuICAgICAgfSkudmFsdWVPZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmFuZ2UubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaSwgZGF0YS5sZW5ndGgpO1xuICAgICAgICB2YXIgY2hpbGQgPSBkYXRhW2ldO1xuICAgICAgICByZXR1cm4gX2dldFN1Ym1hdHJpeChjaGlsZCwgaW5kZXgsIGRpbXMsIGRpbSArIDEpO1xuICAgICAgfSkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVwbGFjZSBhIHN1Ym1hdHJpeCBpbiB0aGlzIG1hdHJpeFxuICAgKiBJbmRleGVzIGFyZSB6ZXJvLWJhc2VkLlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7RGVuc2VNYXRyaXggfCBBcnJheSB8ICp9IHN1Ym1hdHJpeFxuICAgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSAgICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBtYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfc2V0KG1hdHJpeCwgaW5kZXgsIHN1Ym1hdHJpeCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfSAvLyBnZXQgaW5kZXggc2l6ZSBhbmQgY2hlY2sgd2hldGhlciB0aGUgaW5kZXggY29udGFpbnMgYSBzaW5nbGUgdmFsdWVcblxuXG4gICAgdmFyIGlTaXplID0gaW5kZXguc2l6ZSgpO1xuICAgIHZhciBpc1NjYWxhciA9IGluZGV4LmlzU2NhbGFyKCk7IC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3VibWF0cml4LCBhbmQgY29udmVydCBpdCBpbnRvIGFuIEFycmF5IGlmIG5lZWRlZFxuXG4gICAgdmFyIHNTaXplO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHN1Ym1hdHJpeCkpIHtcbiAgICAgIHNTaXplID0gc3VibWF0cml4LnNpemUoKTtcbiAgICAgIHN1Ym1hdHJpeCA9IHN1Ym1hdHJpeC52YWx1ZU9mKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHN1Ym1hdHJpeCk7XG4gICAgfVxuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyBzZXQgYSBzY2FsYXJcbiAgICAgIC8vIGNoZWNrIHdoZXRoZXIgc3VibWF0cml4IGlzIGEgc2NhbGFyXG4gICAgICBpZiAoc1NpemUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICBtYXRyaXguc2V0KGluZGV4Lm1pbigpLCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNldCBhIHN1Ym1hdHJpeFxuICAgICAgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuICAgICAgaWYgKGlTaXplLmxlbmd0aCA8IG1hdHJpeC5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZS5sZW5ndGgsIG1hdHJpeC5fc2l6ZS5sZW5ndGgsICc8Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzU2l6ZS5sZW5ndGggPCBpU2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBtaXNzaW5nIG91dGVyIGRpbWVuc2lvbnNcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgb3V0ZXIgPSAwO1xuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSAmJiBzU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIG91dGVyKys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IC8vIHVuc3F1ZWV6ZSBib3RoIG91dGVyIGFuZCBpbm5lciBkaW1lbnNpb25zXG5cblxuICAgICAgICBzdWJtYXRyaXggPSAoMCwgX2FycmF5LnVuc3F1ZWV6ZSkoc3VibWF0cml4LCBpU2l6ZS5sZW5ndGgsIG91dGVyLCBzU2l6ZSk7XG4gICAgICB9IC8vIGNoZWNrIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCBtYXRjaGVzIHRoZSBpbmRleCBzaXplXG5cblxuICAgICAgaWYgKCEoMCwgX29iamVjdC5kZWVwU3RyaWN0RXF1YWwpKGlTaXplLCBzU2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZSwgc1NpemUsICc+Jyk7XG4gICAgICB9IC8vIGVubGFyZ2UgbWF0cml4IHdoZW4gbmVlZGVkXG5cblxuICAgICAgdmFyIHNpemUgPSBpbmRleC5tYXgoKS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIGkgKyAxO1xuICAgICAgfSk7XG5cbiAgICAgIF9maXQobWF0cml4LCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBpbnNlcnQgdGhlIHN1YiBtYXRyaXhcblxuXG4gICAgICB2YXIgZGltcyA9IGlTaXplLmxlbmd0aDtcbiAgICAgIHZhciBkaW0gPSAwO1xuXG4gICAgICBfc2V0U3VibWF0cml4KG1hdHJpeC5fZGF0YSwgaW5kZXgsIHN1Ym1hdHJpeCwgZGltcywgZGltKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc3VibWF0cml4IG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YVxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbXMgICBUb3RhbCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICAgKiBAcGFyYW0ge251bWJlcn0gZGltXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3NldFN1Ym1hdHJpeChkYXRhLCBpbmRleCwgc3VibWF0cml4LCBkaW1zLCBkaW0pIHtcbiAgICB2YXIgbGFzdCA9IGRpbSA9PT0gZGltcyAtIDE7XG4gICAgdmFyIHJhbmdlID0gaW5kZXguZGltZW5zaW9uKGRpbSk7XG5cbiAgICBpZiAobGFzdCkge1xuICAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUluZGV4LCBzdWJJbmRleCkge1xuICAgICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGRhdGFJbmRleCk7XG4gICAgICAgIGRhdGFbZGF0YUluZGV4XSA9IHN1Ym1hdHJpeFtzdWJJbmRleFswXV07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUluZGV4LCBzdWJJbmRleCkge1xuICAgICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGRhdGFJbmRleCk7XG5cbiAgICAgICAgX3NldFN1Ym1hdHJpeChkYXRhW2RhdGFJbmRleF0sIGluZGV4LCBzdWJtYXRyaXhbc3ViSW5kZXhbMF1dLCBkaW1zLCBkaW0gKyAxKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaXplIGluIHBsYWNlKS5cbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgICAgIFRoZSBuZXcgc2l6ZSB0aGUgbWF0cml4IHNob3VsZCBoYXZlLlxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIG1hdHJpeCBlbGVtZW50cyB3aWxsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5XSAgICAgICAgICBSZXR1cm4gYSByZXNpemVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaXplZCBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSwgY29weSkge1xuICAgIC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9IC8vIG1hdHJpeCB0byByZXNpemVcblxuXG4gICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpczsgLy8gcmVzaXplIG1hdHJpeFxuXG4gICAgcmV0dXJuIF9yZXNpemUobSwgc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgfTtcblxuICBmdW5jdGlvbiBfcmVzaXplKG1hdHJpeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gY2hlY2sgc2l6ZVxuICAgIGlmIChzaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gZmlyc3QgdmFsdWUgaW4gbWF0cml4XG4gICAgICB2YXIgdiA9IG1hdHJpeC5fZGF0YTsgLy8gZ28gZGVlcFxuXG4gICAgICB3aGlsZSAoKDAsIF9pcy5pc0FycmF5KSh2KSkge1xuICAgICAgICB2ID0gdlswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHY7XG4gICAgfSAvLyByZXNpemUgbWF0cml4XG5cblxuICAgIG1hdHJpeC5fc2l6ZSA9IHNpemUuc2xpY2UoMCk7IC8vIGNvcHkgdGhlIGFycmF5XG5cbiAgICBtYXRyaXguX2RhdGEgPSAoMCwgX2FycmF5LnJlc2l6ZSkobWF0cml4Ll9kYXRhLCBtYXRyaXguX3NpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogTk9URTogVGhpcyBtaWdodCBiZSBiZXR0ZXIgc3VpdGVkIHRvIGNvcHkgYnkgZGVmYXVsdCwgaW5zdGVhZCBvZiBtb2RpZnlpbmdcbiAgICogICAgICAgaW4gcGxhY2UuIEZvciBub3csIGl0IG9wZXJhdGVzIGluIHBsYWNlIHRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGhcbiAgICogICAgICAgcmVzaXplKCkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaGFwZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNoYXBlZCBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaGFwZSA9IGZ1bmN0aW9uIChzaXplLCBjb3B5KSB7XG4gICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpcztcbiAgICBtLl9kYXRhID0gKDAsIF9hcnJheS5yZXNoYXBlKShtLl9kYXRhLCBzaXplKTtcbiAgICBtLl9zaXplID0gc2l6ZS5zbGljZSgwKTtcbiAgICByZXR1cm4gbTtcbiAgfTtcbiAgLyoqXG4gICAqIEVubGFyZ2UgdGhlIG1hdHJpeCB3aGVuIGl0IGlzIHNtYWxsZXIgdGhhbiBnaXZlbiBzaXplLlxuICAgKiBJZiB0aGUgbWF0cml4IGlzIGxhcmdlciBvciBlcXVhbCBzaXplZCwgbm90aGluZyBpcyBkb25lLlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4ICAgICAgICAgICBUaGUgbWF0cml4IHRvIGJlIHJlc2l6ZWRcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZVxuICAgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSAgICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2ZpdChtYXRyaXgsIHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciAvLyBjb3B5IHRoZSBhcnJheVxuICAgIG5ld1NpemUgPSBtYXRyaXguX3NpemUuc2xpY2UoMCk7XG5cbiAgICB2YXIgY2hhbmdlZCA9IGZhbHNlOyAvLyBhZGQgZGltZW5zaW9ucyB3aGVuIG5lZWRlZFxuXG4gICAgd2hpbGUgKG5ld1NpemUubGVuZ3RoIDwgc2l6ZS5sZW5ndGgpIHtcbiAgICAgIG5ld1NpemUucHVzaCgwKTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH0gLy8gZW5sYXJnZSBzaXplIHdoZW4gbmVlZGVkXG5cblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHNpemUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgaWYgKHNpemVbaV0gPiBuZXdTaXplW2ldKSB7XG4gICAgICAgIG5ld1NpemVbaV0gPSBzaXplW2ldO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgLy8gcmVzaXplIG9ubHkgd2hlbiBzaXplIGlzIGNoYW5nZWRcbiAgICAgIF9yZXNpemUobWF0cml4LCBuZXdTaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBtID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9kYXRhKSxcbiAgICAgIHNpemU6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9zaXplKSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH0pO1xuICAgIHJldHVybiBtO1xuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHNpemUgb2YgdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplLnNsaWNlKDApOyAvLyByZXR1cm4gYSBjbG9uZSBvZiBfc2l6ZVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gbWF0cml4IGluc3RhbmNlXG4gICAgdmFyIG1lID0gdGhpcztcblxuICAgIHZhciByZWN1cnNlID0gZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIG1lKTtcbiAgICAgIH1cbiAgICB9OyAvLyBkZXRlcm1pbmUgdGhlIG5ldyBkYXRhdHlwZSB3aGVuIHRoZSBvcmlnaW5hbCBtYXRyaXggaGFzIGRhdGF0eXBlIGRlZmluZWRcbiAgICAvLyBUT0RPOiBzaG91bGQgYmUgZG9uZSBpbiBtYXRyaXggY29uc3RydWN0b3IgaW5zdGVhZFxuXG5cbiAgICB2YXIgZGF0YSA9IHJlY3Vyc2UodGhpcy5fZGF0YSwgW10pO1xuICAgIHZhciBkYXRhdHlwZSA9IHRoaXMuX2RhdGF0eXBlICE9PSB1bmRlZmluZWQgPyAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKGRhdGEsIF9pcy50eXBlT2YpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIC8vIG1hdHJpeCBpbnN0YW5jZVxuICAgIHZhciBtZSA9IHRoaXM7XG5cbiAgICB2YXIgcmVjdXJzZSA9IGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0FycmF5KSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZWN1cnNlKHRoaXMuX2RhdGEsIFtdKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcnJheSB3aXRoIGEgY29weSBvZiB0aGUgZGF0YSBvZiB0aGUgRGVuc2VNYXRyaXhcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RhdGEpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIERlbnNlTWF0cml4OiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4LCB3aXRoIG9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9ucy5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLl9kYXRhLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy5fZGF0YSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRGVuc2VNYXRyaXgnLFxuICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgIHNpemU6IHRoaXMuX3NpemUsXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBrdGggTWF0cml4IGRpYWdvbmFsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICBUaGUga3RoIGRpYWdvbmFsIHdoZXJlIHRoZSB2ZWN0b3Igd2lsbCByZXRyaWV2ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgVGhlIG1hdHJpeCB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMuXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmRpYWdvbmFsID0gZnVuY3Rpb24gKGspIHtcbiAgICAvLyB2YWxpZGF0ZSBrIGlmIGFueVxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGtTdXBlciA9IGsgPiAwID8gayA6IDA7XG4gICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIG51bWJlciBkaWFnb25hbCB2YWx1ZXNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyB4IGlzIGEgbWF0cml4IGdldCBkaWFnb25hbCBmcm9tIG1hdHJpeFxuXG4gICAgdmFyIGRhdGEgPSBbXTsgLy8gbG9vcCByb3dzXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZGF0YVtpXSA9IHRoaXMuX2RhdGFbaSArIGtTdWJdW2kgKyBrU3VwZXJdO1xuICAgIH0gLy8gY3JlYXRlIERlbnNlTWF0cml4XG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHNpemU6IFtuXSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZSAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggc2l6ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBNYXRyaXggfCBBcnJheSB9IHZhbHVlIFRoZSB2YWx1ZXMgZm9yIHRoZSBkaWFnb25hbC5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICAgIFRoZSBrdGggZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZCBpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0VmFsdWVdICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBub24tZGlhZ29uYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0gICAgICAgICAgICAgIFRoZSBkYXRhdHlwZSBmb3IgdGhlIGRpYWdvbmFsXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZW5zZU1hdHJpeH1cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5kaWFnb25hbCA9IGZ1bmN0aW9uIChzaXplLCB2YWx1ZSwgaywgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKHNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCwgc2l6ZSBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9ucyBtYXRyaXggYXJlIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gbWFwIHNpemUgJiB2YWxpZGF0ZVxuXG5cbiAgICBzaXplID0gc2l6ZS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIC8vIGNoZWNrIGl0IGlzIGEgYmlnIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHMpKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgaXRcbiAgICAgICAgcyA9IHMudG9OdW1iZXIoKTtcbiAgICAgIH0gLy8gdmFsaWRhdGUgYXJndW1lbnRzXG5cblxuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShzKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShzKSB8fCBzIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpemUgdmFsdWVzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHM7XG4gICAgfSk7IC8vIHZhbGlkYXRlIGsgaWYgYW55XG5cbiAgICBpZiAoaykge1xuICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gYSBudW1iZXJcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShrKSkge1xuICAgICAgICBrID0gay50b051bWJlcigpO1xuICAgICAgfSAvLyBpcyBtdXN0IGJlIGFuIGludGVnZXJcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGspIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgdmFsdWVcbiAgICAgIGsgPSAwO1xuICAgIH1cblxuICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwO1xuICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIG51bWJlciBvZiBub24temVybyBpdGVtc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzIC0ga1N1YiwgY29sdW1ucyAtIGtTdXBlcik7IC8vIHZhbHVlIGV4dHJhY3Rpb24gZnVuY3Rpb25cblxuICAgIHZhciBfdmFsdWU7IC8vIGNoZWNrIHZhbHVlXG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgLy8gdmFsaWRhdGUgYXJyYXlcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IG4pIHtcbiAgICAgICAgLy8gbnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBtdXN0IGJlIG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGFycmF5IGxlbmd0aCcpO1xuICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb25cblxuXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpXG4gICAgICAgIHJldHVybiB2YWx1ZVtpXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzTWF0cml4KSh2YWx1ZSkpIHtcbiAgICAgIC8vIG1hdHJpeCBzaXplXG4gICAgICB2YXIgbXMgPSB2YWx1ZS5zaXplKCk7IC8vIHZhbGlkYXRlIG1hdHJpeFxuXG4gICAgICBpZiAobXMubGVuZ3RoICE9PSAxIHx8IG1zWzBdICE9PSBuKSB7XG4gICAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gYXJyYXkgbXVzdCBiZSBuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggbGVuZ3RoJyk7XG4gICAgICB9IC8vIGRlZmluZSBmdW5jdGlvblxuXG5cbiAgICAgIF92YWx1ZSA9IGZ1bmN0aW9uIF92YWx1ZShpKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBAIGlcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldChbaV0pO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmaW5lIGZ1bmN0aW9uXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH0gLy8gZGlzY292ZXIgZGVmYXVsdCB2YWx1ZSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKCFkZWZhdWx0VmFsdWUpIHtcbiAgICAgIC8vIGNoZWNrIGZpcnN0IHZhbHVlIGluIGFycmF5XG4gICAgICBkZWZhdWx0VmFsdWUgPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShfdmFsdWUoMCkpID8gX3ZhbHVlKDApLm11bCgwKSAvLyB0cmljayB0byBjcmVhdGUgYSBCaWdOdW1iZXIgd2l0aCB2YWx1ZSB6ZXJvXG4gICAgICA6IDA7XG4gICAgfSAvLyBlbXB0eSBhcnJheVxuXG5cbiAgICB2YXIgZGF0YSA9IFtdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlc2l6ZSBhcnJheVxuXG4gICAgaWYgKHNpemUubGVuZ3RoID4gMCkge1xuICAgICAgLy8gcmVzaXplIGFycmF5XG4gICAgICBkYXRhID0gKDAsIF9hcnJheS5yZXNpemUpKGRhdGEsIHNpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIGZpbGwgZGlhZ29uYWxcblxuICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBuOyBkKyspIHtcbiAgICAgICAgZGF0YVtkICsga1N1Yl1bZCArIGtTdXBlcl0gPSBfdmFsdWUoZCk7XG4gICAgICB9XG4gICAgfSAvLyBjcmVhdGUgRGVuc2VNYXRyaXhcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiRGVuc2VNYXRyaXhcIiwgZGF0YTogW10sIHNpemU6IFtdfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0RlbnNlTWF0cml4fVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGpzb24pO1xuICB9O1xuICAvKipcbiAgICogU3dhcCByb3dzIGkgYW5kIGogaW4gTWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgICAgICAgTWF0cml4IHJvdyBpbmRleCAxXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqICAgICAgIE1hdHJpeCByb3cgaW5kZXggMlxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICBUaGUgbWF0cml4IHJlZmVyZW5jZVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5zd2FwUm93cyA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgLy8gY2hlY2sgaW5kZXhcbiAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGkpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGkpIHx8ICEoMCwgX2lzLmlzTnVtYmVyKShqKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShqKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3cgaW5kZXggbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpO1xuICAgIH0gLy8gY2hlY2sgZGltZW5zaW9uc1xuXG5cbiAgICBpZiAodGhpcy5fc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9uYWwgbWF0cml4IGlzIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5kZXhcblxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpLCB0aGlzLl9zaXplWzBdKTtcbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGosIHRoaXMuX3NpemVbMF0pOyAvLyBzd2FwIHJvd3NcblxuICAgIERlbnNlTWF0cml4Ll9zd2FwUm93cyhpLCBqLCB0aGlzLl9kYXRhKTsgLy8gcmV0dXJuIGN1cnJlbnQgaW5zdGFuY2VcblxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBEZW5zZSBNYXRyaXggZGF0YSBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMVxuICAgKiBAcGFyYW0ge251bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YSAgICAgTWF0cml4IGRhdGFcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5fc3dhcFJvd3MgPSBmdW5jdGlvbiAoaSwgaiwgZGF0YSkge1xuICAgIC8vIHN3YXAgdmFsdWVzIGkgPC0+IGpcbiAgICB2YXIgdmkgPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBkYXRhW2pdO1xuICAgIGRhdGFbal0gPSB2aTtcbiAgfTtcbiAgLyoqXG4gICAqIFByZXByb2Nlc3MgZGF0YSwgd2hpY2ggY2FuIGJlIGFuIEFycmF5IG9yIERlbnNlTWF0cml4IHdpdGggbmVzdGVkIEFycmF5cyBhbmRcbiAgICogTWF0cmljZXMuIFJlcGxhY2VzIGFsbCBuZXN0ZWQgTWF0cmljZXMgd2l0aCBBcnJheXNcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFcbiAgICogQHJldHVybiB7QXJyYXl9IGRhdGFcbiAgICovXG5cblxuICBmdW5jdGlvbiBwcmVwcm9jZXNzKGRhdGEpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBlbGVtID0gZGF0YVtpXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNBcnJheSkoZWxlbSkpIHtcbiAgICAgICAgZGF0YVtpXSA9IHByZXByb2Nlc3MoZWxlbSk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0gJiYgZWxlbS5pc01hdHJpeCA9PT0gdHJ1ZSkge1xuICAgICAgICBkYXRhW2ldID0gcHJlcHJvY2VzcyhlbGVtLnZhbHVlT2YoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICByZXR1cm4gRGVuc2VNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZW5zZU1hdHJpeENsYXNzID0gY3JlYXRlRGVuc2VNYXRyaXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnRmlib25hY2NpSGVhcCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzbWFsbGVyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7XG4gIHZhciBvbmVPdmVyTG9nUGhpID0gMS4wIC8gTWF0aC5sb2coKDEuMCArIE1hdGguc3FydCg1LjApKSAvIDIuMCk7XG4gIC8qKlxuICAgKiBGaWJvbmFjY2kgSGVhcCBpbXBsZW1lbnRhdGlvbiwgdXNlZCBpbnRlcmFsbHkgZm9yIE1hdHJpeCBtYXRoLlxuICAgKiBAY2xhc3MgRmlib25hY2NpSGVhcFxuICAgKiBAY29uc3RydWN0b3IgRmlib25hY2NpSGVhcFxuICAgKi9cblxuICBmdW5jdGlvbiBGaWJvbmFjY2lIZWFwKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGaWJvbmFjY2lIZWFwKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIGluaXRpYWxpemUgZmllbGRzXG5cblxuICAgIHRoaXMuX21pbmltdW0gPSBudWxsO1xuICAgIHRoaXMuX3NpemUgPSAwO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnR5cGUgPSAnRmlib25hY2NpSGVhcCc7XG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmlzRmlib25hY2NpSGVhcCA9IHRydWU7XG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgbmV3IGRhdGEgZWxlbWVudCBpbnRvIHRoZSBoZWFwLiBObyBoZWFwIGNvbnNvbGlkYXRpb24gaXNcbiAgICogcGVyZm9ybWVkIGF0IHRoaXMgdGltZSwgdGhlIG5ldyBub2RlIGlzIHNpbXBseSBpbnNlcnRlZCBpbnRvIHRoZSByb290XG4gICAqIGxpc3Qgb2YgdGhpcyBoZWFwLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIGNyZWF0ZSBub2RlXG4gICAgdmFyIG5vZGUgPSB7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGRlZ3JlZTogMFxuICAgIH07IC8vIGNoZWNrIHdlIGhhdmUgYSBub2RlIGluIHRoZSBtaW5pbXVtXG5cbiAgICBpZiAodGhpcy5fbWluaW11bSkge1xuICAgICAgLy8gbWluaW11bSBub2RlXG4gICAgICB2YXIgbWluaW11bSA9IHRoaXMuX21pbmltdW07IC8vIHVwZGF0ZSBsZWZ0ICYgcmlnaHQgb2Ygbm9kZVxuXG4gICAgICBub2RlLmxlZnQgPSBtaW5pbXVtO1xuICAgICAgbm9kZS5yaWdodCA9IG1pbmltdW0ucmlnaHQ7XG4gICAgICBtaW5pbXVtLnJpZ2h0ID0gbm9kZTtcbiAgICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGU7IC8vIHVwZGF0ZSBtaW5pbXVtIG5vZGUgaW4gaGVhcCBpZiBuZWVkZWRcblxuICAgICAgaWYgKHNtYWxsZXIoa2V5LCBtaW5pbXVtLmtleSkpIHtcbiAgICAgICAgLy8gbm9kZSBoYXMgYSBzbWFsbGVyIGtleSwgdXNlIGl0IGFzIG1pbmltdW1cbiAgICAgICAgdGhpcy5fbWluaW11bSA9IG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNldCBsZWZ0ICYgcmlnaHRcbiAgICAgIG5vZGUubGVmdCA9IG5vZGU7XG4gICAgICBub2RlLnJpZ2h0ID0gbm9kZTsgLy8gdGhpcyBpcyB0aGUgZmlyc3Qgbm9kZVxuXG4gICAgICB0aGlzLl9taW5pbXVtID0gbm9kZTtcbiAgICB9IC8vIGluY3JlbWVudCBudW1iZXIgb2Ygbm9kZXMgaW4gaGVhcFxuXG5cbiAgICB0aGlzLl9zaXplKys7IC8vIHJldHVybiBub2RlXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiBoZWFwLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBlbGVtZW50cyBmcm9tIHRoaXMgaGVhcC5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9taW5pbXVtID0gbnVsbDtcbiAgICB0aGlzLl9zaXplID0gMDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaGVhcCBpcyBlbXB0eSwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IDA7XG4gIH07XG4gIC8qKlxuICAgKiBFeHRyYWN0cyB0aGUgbm9kZSB3aXRoIG1pbmltdW0ga2V5IGZyb20gaGVhcC4gQW1vcnRpemVkIHJ1bm5pbmdcbiAgICogdGltZTogTyhsb2cgbikuXG4gICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwXG4gICAqL1xuXG5cbiAgRmlib25hY2NpSGVhcC5wcm90b3R5cGUuZXh0cmFjdE1pbmltdW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbm9kZSB0byByZW1vdmVcbiAgICB2YXIgbm9kZSA9IHRoaXMuX21pbmltdW07IC8vIGNoZWNrIHdlIGhhdmUgYSBtaW5pbXVtXG5cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSAvLyBjdXJyZW50IG1pbmltdW1cblxuXG4gICAgdmFyIG1pbmltdW0gPSB0aGlzLl9taW5pbXVtOyAvLyBnZXQgbnVtYmVyIG9mIGNoaWxkcmVuXG5cbiAgICB2YXIgbnVtYmVyT2ZDaGlsZHJlbiA9IG5vZGUuZGVncmVlOyAvLyBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGlsZFxuXG4gICAgdmFyIHggPSBub2RlLmNoaWxkOyAvLyBmb3IgZWFjaCBjaGlsZCBvZiBub2RlIGRvLi4uXG5cbiAgICB3aGlsZSAobnVtYmVyT2ZDaGlsZHJlbiA+IDApIHtcbiAgICAgIC8vIHN0b3JlIG5vZGUgaW4gcmlnaHQgc2lkZVxuICAgICAgdmFyIHRlbXBSaWdodCA9IHgucmlnaHQ7IC8vIHJlbW92ZSB4IGZyb20gY2hpbGQgbGlzdFxuXG4gICAgICB4LmxlZnQucmlnaHQgPSB4LnJpZ2h0O1xuICAgICAgeC5yaWdodC5sZWZ0ID0geC5sZWZ0OyAvLyBhZGQgeCB0byByb290IGxpc3Qgb2YgaGVhcFxuXG4gICAgICB4LmxlZnQgPSBtaW5pbXVtO1xuICAgICAgeC5yaWdodCA9IG1pbmltdW0ucmlnaHQ7XG4gICAgICBtaW5pbXVtLnJpZ2h0ID0geDtcbiAgICAgIHgucmlnaHQubGVmdCA9IHg7IC8vIHNldCBQYXJlbnRbeF0gdG8gbnVsbFxuXG4gICAgICB4LnBhcmVudCA9IG51bGw7XG4gICAgICB4ID0gdGVtcFJpZ2h0O1xuICAgICAgbnVtYmVyT2ZDaGlsZHJlbi0tO1xuICAgIH0gLy8gcmVtb3ZlIG5vZGUgZnJvbSByb290IGxpc3Qgb2YgaGVhcFxuXG5cbiAgICBub2RlLmxlZnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGUubGVmdDsgLy8gdXBkYXRlIG1pbmltdW1cblxuICAgIGlmIChub2RlID09PSBub2RlLnJpZ2h0KSB7XG4gICAgICAvLyBlbXB0eVxuICAgICAgbWluaW11bSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVwZGF0ZSBtaW5pbXVtXG4gICAgICBtaW5pbXVtID0gbm9kZS5yaWdodDsgLy8gd2UgbmVlZCB0byB1cGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIHJvb3Qgd2l0aCBtaW5pbXVtIGtleVxuXG4gICAgICBtaW5pbXVtID0gX2ZpbmRNaW5pbXVtTm9kZShtaW5pbXVtLCB0aGlzLl9zaXplKTtcbiAgICB9IC8vIGRlY3JlbWVudCBzaXplIG9mIGhlYXBcblxuXG4gICAgdGhpcy5fc2l6ZS0tOyAvLyB1cGRhdGUgbWluaW11bVxuXG4gICAgdGhpcy5fbWluaW11bSA9IG1pbmltdW07IC8vIHJldHVybiBub2RlXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIGhlYXAgZ2l2ZW4gdGhlIHJlZmVyZW5jZSB0byB0aGUgbm9kZS4gVGhlIHRyZWVzXG4gICAqIGluIHRoZSBoZWFwIHdpbGwgYmUgY29uc29saWRhdGVkLCBpZiBuZWNlc3NhcnkuIFRoaXMgb3BlcmF0aW9uIG1heSBmYWlsXG4gICAqIHRvIHJlbW92ZSB0aGUgY29ycmVjdCBlbGVtZW50IGlmIHRoZXJlIGFyZSBub2RlcyB3aXRoIGtleSB2YWx1ZSAtSW5maW5pdHkuXG4gICAqIFJ1bm5pbmcgdGltZTogTyhsb2cgbikgYW1vcnRpemVkLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gZGVjcmVhc2Uga2V5IHZhbHVlXG4gICAgdGhpcy5fbWluaW11bSA9IF9kZWNyZWFzZUtleSh0aGlzLl9taW5pbXVtLCBub2RlLCAtMSk7IC8vIHJlbW92ZSB0aGUgc21hbGxlc3RcblxuICAgIHRoaXMuZXh0cmFjdE1pbmltdW0oKTtcbiAgfTtcbiAgLyoqXG4gICAqIERlY3JlYXNlcyB0aGUga2V5IHZhbHVlIGZvciBhIGhlYXAgbm9kZSwgZ2l2ZW4gdGhlIG5ldyB2YWx1ZSB0byB0YWtlIG9uLlxuICAgKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBoZWFwIG1heSBiZSBjaGFuZ2VkIGFuZCB3aWxsIG5vdCBiZSBjb25zb2xpZGF0ZWQuXG4gICAqIFJ1bm5pbmcgdGltZTogTygxKSBhbW9ydGl6ZWQuXG4gICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2RlY3JlYXNlS2V5KG1pbmltdW0sIG5vZGUsIGtleSkge1xuICAgIC8vIHNldCBub2RlIGtleVxuICAgIG5vZGUua2V5ID0ga2V5OyAvLyBnZXQgcGFyZW50IG5vZGVcblxuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICAgIGlmIChwYXJlbnQgJiYgc21hbGxlcihub2RlLmtleSwgcGFyZW50LmtleSkpIHtcbiAgICAgIC8vIHJlbW92ZSBub2RlIGZyb20gcGFyZW50XG4gICAgICBfY3V0KG1pbmltdW0sIG5vZGUsIHBhcmVudCk7IC8vIHJlbW92ZSBhbGwgbm9kZXMgZnJvbSBwYXJlbnQgdG8gdGhlIHJvb3QgcGFyZW50XG5cblxuICAgICAgX2Nhc2NhZGluZ0N1dChtaW5pbXVtLCBwYXJlbnQpO1xuICAgIH0gLy8gdXBkYXRlIG1pbmltdW0gbm9kZSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKHNtYWxsZXIobm9kZS5rZXksIG1pbmltdW0ua2V5KSkge1xuICAgICAgbWluaW11bSA9IG5vZGU7XG4gICAgfSAvLyByZXR1cm4gbWluaW11bVxuXG5cbiAgICByZXR1cm4gbWluaW11bTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJldmVyc2Ugb2YgdGhlIGxpbmsgb3BlcmF0aW9uOiByZW1vdmVzIG5vZGUgZnJvbSB0aGUgY2hpbGQgbGlzdCBvZiBwYXJlbnQuXG4gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBtaW4gaXMgbm9uLW51bGwuIFJ1bm5pbmcgdGltZTogTygxKS5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBmdW5jdGlvbiBfY3V0KG1pbmltdW0sIG5vZGUsIHBhcmVudCkge1xuICAgIC8vIHJlbW92ZSBub2RlIGZyb20gcGFyZW50IGNoaWxkcmVuIGFuZCBkZWNyZW1lbnQgRGVncmVlW3BhcmVudF1cbiAgICBub2RlLmxlZnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGUubGVmdDtcbiAgICBwYXJlbnQuZGVncmVlLS07IC8vIHJlc2V0IHkuY2hpbGQgaWYgbmVjZXNzYXJ5XG5cbiAgICBpZiAocGFyZW50LmNoaWxkID09PSBub2RlKSB7XG4gICAgICBwYXJlbnQuY2hpbGQgPSBub2RlLnJpZ2h0O1xuICAgIH0gLy8gcmVtb3ZlIGNoaWxkIGlmIGRlZ3JlZSBpcyAwXG5cblxuICAgIGlmIChwYXJlbnQuZGVncmVlID09PSAwKSB7XG4gICAgICBwYXJlbnQuY2hpbGQgPSBudWxsO1xuICAgIH0gLy8gYWRkIG5vZGUgdG8gcm9vdCBsaXN0IG9mIGhlYXBcblxuXG4gICAgbm9kZS5sZWZ0ID0gbWluaW11bTtcbiAgICBub2RlLnJpZ2h0ID0gbWluaW11bS5yaWdodDtcbiAgICBtaW5pbXVtLnJpZ2h0ID0gbm9kZTtcbiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlOyAvLyBzZXQgcGFyZW50W25vZGVdIHRvIG51bGxcblxuICAgIG5vZGUucGFyZW50ID0gbnVsbDsgLy8gc2V0IG1hcmtbbm9kZV0gdG8gZmFsc2VcblxuICAgIG5vZGUubWFyayA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBQZXJmb3JtcyBhIGNhc2NhZGluZyBjdXQgb3BlcmF0aW9uLiBUaGlzIGN1dHMgbm9kZSBmcm9tIGl0cyBwYXJlbnQgYW5kIHRoZW5cbiAgICogZG9lcyB0aGUgc2FtZSBmb3IgaXRzIHBhcmVudCwgYW5kIHNvIG9uIHVwIHRoZSB0cmVlLlxuICAgKiBSdW5uaW5nIHRpbWU6IE8obG9nIG4pOyBPKDEpIGV4Y2x1ZGluZyB0aGUgcmVjdXJzaW9uLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9jYXNjYWRpbmdDdXQobWluaW11bSwgbm9kZSkge1xuICAgIC8vIHN0b3JlIHBhcmVudCBub2RlXG4gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50OyAvLyBpZiB0aGVyZSdzIGEgcGFyZW50Li4uXG5cbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gaWYgbm9kZSBpcyB1bm1hcmtlZCwgc2V0IGl0IG1hcmtlZFxuXG5cbiAgICBpZiAoIW5vZGUubWFyaykge1xuICAgICAgbm9kZS5tYXJrID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaXQncyBtYXJrZWQsIGN1dCBpdCBmcm9tIHBhcmVudFxuICAgICAgX2N1dChtaW5pbXVtLCBub2RlLCBwYXJlbnQpOyAvLyBjdXQgaXRzIHBhcmVudCBhcyB3ZWxsXG5cblxuICAgICAgX2Nhc2NhZGluZ0N1dChwYXJlbnQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTWFrZSB0aGUgZmlyc3Qgbm9kZSBhIGNoaWxkIG9mIHRoZSBzZWNvbmQgb25lLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIHZhciBfbGlua05vZGVzID0gZnVuY3Rpb24gX2xpbmtOb2Rlcyhub2RlLCBwYXJlbnQpIHtcbiAgICAvLyByZW1vdmUgbm9kZSBmcm9tIHJvb3QgbGlzdCBvZiBoZWFwXG4gICAgbm9kZS5sZWZ0LnJpZ2h0ID0gbm9kZS5yaWdodDtcbiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlLmxlZnQ7IC8vIG1ha2Ugbm9kZSBhIENoaWxkIG9mIHBhcmVudFxuXG4gICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICBpZiAoIXBhcmVudC5jaGlsZCkge1xuICAgICAgcGFyZW50LmNoaWxkID0gbm9kZTtcbiAgICAgIG5vZGUucmlnaHQgPSBub2RlO1xuICAgICAgbm9kZS5sZWZ0ID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5sZWZ0ID0gcGFyZW50LmNoaWxkO1xuICAgICAgbm9kZS5yaWdodCA9IHBhcmVudC5jaGlsZC5yaWdodDtcbiAgICAgIHBhcmVudC5jaGlsZC5yaWdodCA9IG5vZGU7XG4gICAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlO1xuICAgIH0gLy8gaW5jcmVhc2UgZGVncmVlW3BhcmVudF1cblxuXG4gICAgcGFyZW50LmRlZ3JlZSsrOyAvLyBzZXQgbWFya1tub2RlXSBmYWxzZVxuXG4gICAgbm9kZS5tYXJrID0gZmFsc2U7XG4gIH07XG5cbiAgZnVuY3Rpb24gX2ZpbmRNaW5pbXVtTm9kZShtaW5pbXVtLCBzaXplKSB7XG4gICAgLy8gdG8gZmluZCB0cmVlcyBvZiB0aGUgc2FtZSBkZWdyZWUgZWZmaWNpZW50bHkgd2UgdXNlIGFuIGFycmF5IG9mIGxlbmd0aCBPKGxvZyBuKSBpbiB3aGljaCB3ZSBrZWVwIGEgcG9pbnRlciB0byBvbmUgcm9vdCBvZiBlYWNoIGRlZ3JlZVxuICAgIHZhciBhcnJheVNpemUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHNpemUpICogb25lT3ZlckxvZ1BoaSkgKyAxOyAvLyBjcmVhdGUgbGlzdCB3aXRoIGluaXRpYWwgY2FwYWNpdHlcblxuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShhcnJheVNpemUpOyAvLyBmaW5kIHRoZSBudW1iZXIgb2Ygcm9vdCBub2Rlcy5cblxuICAgIHZhciBudW1Sb290cyA9IDA7XG4gICAgdmFyIHggPSBtaW5pbXVtO1xuXG4gICAgaWYgKHgpIHtcbiAgICAgIG51bVJvb3RzKys7XG4gICAgICB4ID0geC5yaWdodDtcblxuICAgICAgd2hpbGUgKHggIT09IG1pbmltdW0pIHtcbiAgICAgICAgbnVtUm9vdHMrKztcbiAgICAgICAgeCA9IHgucmlnaHQ7XG4gICAgICB9XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciB5OyAvLyBGb3IgZWFjaCBub2RlIGluIHJvb3QgbGlzdCBkby4uLlxuXG4gICAgd2hpbGUgKG51bVJvb3RzID4gMCkge1xuICAgICAgLy8gYWNjZXNzIHRoaXMgbm9kZSdzIGRlZ3JlZS4uXG4gICAgICB2YXIgZCA9IHguZGVncmVlOyAvLyBnZXQgbmV4dCBub2RlXG5cbiAgICAgIHZhciBuZXh0ID0geC5yaWdodDsgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBub2RlIGFscmVhZHkgaW4gYXJyYXkgd2l0aCB0aGUgc2FtZSBkZWdyZWVcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgLy8gZ2V0IG5vZGUgd2l0aCB0aGUgc2FtZSBkZWdyZWUgaXMgYW55XG4gICAgICAgIHkgPSBhcnJheVtkXTtcblxuICAgICAgICBpZiAoIXkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBtYWtlIG9uZSBub2RlIHdpdGggdGhlIHNhbWUgZGVncmVlIGEgY2hpbGQgb2YgdGhlIG90aGVyLCBkbyB0aGlzIGJhc2VkIG9uIHRoZSBrZXkgdmFsdWUuXG5cblxuICAgICAgICBpZiAobGFyZ2VyKHgua2V5LCB5LmtleSkpIHtcbiAgICAgICAgICB2YXIgdGVtcCA9IHk7XG4gICAgICAgICAgeSA9IHg7XG4gICAgICAgICAgeCA9IHRlbXA7XG4gICAgICAgIH0gLy8gbWFrZSB5IGEgY2hpbGQgb2YgeFxuXG5cbiAgICAgICAgX2xpbmtOb2Rlcyh5LCB4KTsgLy8gd2UgaGF2ZSBoYW5kbGVkIHRoaXMgZGVncmVlLCBnbyB0byBuZXh0IG9uZS5cblxuXG4gICAgICAgIGFycmF5W2RdID0gbnVsbDtcbiAgICAgICAgZCsrO1xuICAgICAgfSAvLyBzYXZlIHRoaXMgbm9kZSBmb3IgbGF0ZXIgd2hlbiB3ZSBtaWdodCBlbmNvdW50ZXIgYW5vdGhlciBvZiB0aGUgc2FtZSBkZWdyZWUuXG5cblxuICAgICAgYXJyYXlbZF0gPSB4OyAvLyBtb3ZlIGZvcndhcmQgdGhyb3VnaCBsaXN0LlxuXG4gICAgICB4ID0gbmV4dDtcbiAgICAgIG51bVJvb3RzLS07XG4gICAgfSAvLyBTZXQgbWluIHRvIG51bGwgKGVmZmVjdGl2ZWx5IGxvc2luZyB0aGUgcm9vdCBsaXN0KSBhbmQgcmVjb25zdHJ1Y3QgdGhlIHJvb3QgbGlzdCBmcm9tIHRoZSBhcnJheSBlbnRyaWVzIGluIGFycmF5W10uXG5cblxuICAgIG1pbmltdW0gPSBudWxsOyAvLyBsb29wIG5vZGVzIGluIGFycmF5XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKSB7XG4gICAgICAvLyBnZXQgY3VycmVudCBub2RlXG4gICAgICB5ID0gYXJyYXlbaV07XG5cbiAgICAgIGlmICgheSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIGxpbmtlZCBsaXN0XG5cblxuICAgICAgaWYgKG1pbmltdW0pIHtcbiAgICAgICAgLy8gRmlyc3QgcmVtb3ZlIG5vZGUgZnJvbSByb290IGxpc3QuXG4gICAgICAgIHkubGVmdC5yaWdodCA9IHkucmlnaHQ7XG4gICAgICAgIHkucmlnaHQubGVmdCA9IHkubGVmdDsgLy8gbm93IGFkZCB0byByb290IGxpc3QsIGFnYWluLlxuXG4gICAgICAgIHkubGVmdCA9IG1pbmltdW07XG4gICAgICAgIHkucmlnaHQgPSBtaW5pbXVtLnJpZ2h0O1xuICAgICAgICBtaW5pbXVtLnJpZ2h0ID0geTtcbiAgICAgICAgeS5yaWdodC5sZWZ0ID0geTsgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIG5ldyBtaW4uXG5cbiAgICAgICAgaWYgKHNtYWxsZXIoeS5rZXksIG1pbmltdW0ua2V5KSkge1xuICAgICAgICAgIG1pbmltdW0gPSB5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaW5pbXVtID0geTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWluaW11bTtcbiAgfVxuXG4gIHJldHVybiBGaWJvbmFjY2lIZWFwO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzID0gY3JlYXRlRmlib25hY2NpSGVhcENsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdJbW11dGFibGVEZW5zZU1hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzbWFsbGVyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIGZ1bmN0aW9uIEltbXV0YWJsZURlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEltbXV0YWJsZURlbnNlTWF0cml4KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YXR5cGUgJiYgISgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGF0eXBlOiAnICsgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShkYXRhKSB8fCAoMCwgX2lzLmlzQXJyYXkpKGRhdGEpKSB7XG4gICAgICAvLyB1c2UgRGVuc2VNYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHZhciBtYXRyaXggPSBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpOyAvLyBpbnRlcm5hbCBzdHJ1Y3R1cmVzXG5cbiAgICAgIHRoaXMuX2RhdGEgPSBtYXRyaXguX2RhdGE7XG4gICAgICB0aGlzLl9zaXplID0gbWF0cml4Ll9zaXplO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBtYXRyaXguX2RhdGF0eXBlO1xuICAgICAgdGhpcy5fbWluID0gbnVsbDtcbiAgICAgIHRoaXMuX21heCA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5kYXRhKSAmJiAoMCwgX2lzLmlzQXJyYXkpKGRhdGEuc2l6ZSkpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZmllbGRzIGZyb20gSlNPTiByZXByZXNlbnRhdGlvblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGEuZGF0YTtcbiAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemU7XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGEuZGF0YXR5cGU7XG4gICAgICB0aGlzLl9taW4gPSB0eXBlb2YgZGF0YS5taW4gIT09ICd1bmRlZmluZWQnID8gZGF0YS5taW4gOiBudWxsO1xuICAgICAgdGhpcy5fbWF4ID0gdHlwZW9mIGRhdGEubWF4ICE9PSAndW5kZWZpbmVkJyA/IGRhdGEubWF4IDogbnVsbDtcbiAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIHR5cGVcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgb2YgZGF0YSAoJyArICgwLCBfaXMudHlwZU9mKShkYXRhKSArICcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWRcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgIHRoaXMuX3NpemUgPSBbMF07XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlO1xuICAgICAgdGhpcy5fbWluID0gbnVsbDtcbiAgICAgIHRoaXMuX21heCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IERlbnNlTWF0cml4KCk7XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUudHlwZSA9ICdJbW11dGFibGVEZW5zZU1hdHJpeCc7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5pc0ltbXV0YWJsZURlbnNlTWF0cml4ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IEltbXV0YWJsZURlbnNlTWF0cml4IHwgKn0gW3JlcGxhY2VtZW50XVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKi9cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyB1c2UgYmFzZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgIHZhciBtID0gRGVuc2VNYXRyaXgucHJvdG90eXBlLnN1YnNldC5jYWxsKHRoaXMsIGluZGV4KTsgLy8gY2hlY2sgcmVzdWx0IGlzIGEgbWF0cml4XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkobSkpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBpbW11dGFibGUgbWF0cml4XG4gICAgICAgICAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KHtcbiAgICAgICAgICAgICAgZGF0YTogbS5fZGF0YSxcbiAgICAgICAgICAgICAgc2l6ZTogbS5fc2l6ZSxcbiAgICAgICAgICAgICAgZGF0YXR5cGU6IG0uX2RhdGF0eXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfVxuICAgICAgLy8gaW50ZW50aW9uYWwgZmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgMjpcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHNldCBzdWJzZXQgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMnKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIG1hdHJpeC5cbiAgICogQHBhcmFtIHtOdW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICogQHJldHVybiB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpO1xuICB9O1xuICAvKipcbiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaXplIGluIHBsYWNlKS5cbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF0cml4IGVsZW1lbnRzIHdpbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2l6ZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeFxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHJlc2l6ZSBvbiBhbiBJbW11dGFibGUgTWF0cml4IGluc3RhbmNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBEaXNhbGxvd3MgcmVzaGFwaW5nIGluIGZhdm9yIG9mIGltbXV0YWJpbGl0eS5cbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IE9wZXJhdGlvbiBub3QgYWxsb3dlZFxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNoYXBlIG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBtYXRyaXhcbiAgICogQHJldHVybiB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RhdGEpLFxuICAgICAgc2l6ZTogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3NpemUpLFxuICAgICAgZGF0YXR5cGU6IHRoaXMuX2RhdGF0eXBlXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdJbW11dGFibGVEZW5zZU1hdHJpeCcsXG4gICAgICBkYXRhOiB0aGlzLl9kYXRhLFxuICAgICAgc2l6ZTogdGhpcy5fc2l6ZSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJJbW11dGFibGVEZW5zZU1hdHJpeFwiLCBkYXRhOiBbXSwgc2l6ZTogW119YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9XG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXguZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRGVuc2VNYXRyaXgoanNvbik7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBNYXRyaXguXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMVxuICAgKiBAcGFyYW0ge051bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIG1hdHJpeCByZWZlcmVuY2VcbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3dhcFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHN3YXBSb3dzIG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IHVuZGVmaW5lZH0gbWluXG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLm1pbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBjaGVjayBtaW4gaGFzIGJlZW4gY2FsY3VsYXRlZCBiZWZvcmVcbiAgICBpZiAodGhpcy5fbWluID09PSBudWxsKSB7XG4gICAgICAvLyBtaW5pbXVtXG4gICAgICB2YXIgbSA9IG51bGw7IC8vIGNvbXB1dGUgbWluXG5cbiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAobSA9PT0gbnVsbCB8fCBzbWFsbGVyKHYsIG0pKSB7XG4gICAgICAgICAgbSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWluID0gbSAhPT0gbnVsbCA/IG0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IHVuZGVmaW5lZH0gbWF4XG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBjaGVjayBtYXggaGFzIGJlZW4gY2FsY3VsYXRlZCBiZWZvcmVcbiAgICBpZiAodGhpcy5fbWF4ID09PSBudWxsKSB7XG4gICAgICAvLyBtYXhpbXVtXG4gICAgICB2YXIgbSA9IG51bGw7IC8vIGNvbXB1dGUgbWF4XG5cbiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAobSA9PT0gbnVsbCB8fCBzbWFsbGVyKG0sIHYpKSB7XG4gICAgICAgICAgbSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWF4ID0gbSAhPT0gbnVsbCA/IG0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfTtcblxuICByZXR1cm4gSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzID0gY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWF0cml4Q2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdNYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFtdO1xudmFyIGNyZWF0ZU1hdHJpeENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIE1hdHJpeFxuICAgKlxuICAgKiBBIE1hdHJpeCBpcyBhIHdyYXBwZXIgYXJvdW5kIGFuIEFycmF5LiBBIG1hdHJpeCBjYW4gaG9sZCBhIG11bHRpIGRpbWVuc2lvbmFsXG4gICAqIGFycmF5LiBBIG1hdHJpeCBjYW4gYmUgY29uc3RydWN0ZWQgYXM6XG4gICAqXG4gICAqICAgICBsZXQgbWF0cml4ID0gbWF0aC5tYXRyaXgoZGF0YSlcbiAgICpcbiAgICogTWF0cml4IGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgdG8gcmVzaXplLCBnZXQgYW5kIHNldCB2YWx1ZXMsIGdldCB0aGUgc2l6ZSxcbiAgICogY2xvbmUgdGhlIG1hdHJpeCBhbmQgdG8gY29udmVydCB0aGUgbWF0cml4IHRvIGEgdmVjdG9yLCBhcnJheSwgb3Igc2NhbGFyLlxuICAgKiBGdXJ0aGVybW9yZSwgb25lIGNhbiBpdGVyYXRlIG92ZXIgdGhlIG1hdHJpeCB1c2luZyBtYXAgYW5kIGZvckVhY2guXG4gICAqIFRoZSBpbnRlcm5hbCBBcnJheSBvZiB0aGUgTWF0cml4IGNhbiBiZSBhY2Nlc3NlZCB1c2luZyB0aGUgZnVuY3Rpb24gdmFsdWVPZi5cbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIGxldCBtYXRyaXggPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICAgbWF0aXguc2l6ZSgpICAgICAgICAgICAgICAvLyBbMiwgMl1cbiAgICogICAgIG1hdHJpeC5yZXNpemUoWzMsIDJdLCA1KVxuICAgKiAgICAgbWF0cml4LnZhbHVlT2YoKSAgICAgICAgICAvLyBbWzEsIDJdLCBbMywgNF0sIFs1LCA1XV1cbiAgICogICAgIG1hdHJpeC5zdWJzZXQoWzEsMl0pICAgICAgIC8vIDMgKGluZGV4ZXMgYXJlIHplcm8tYmFzZWQpXG4gICAqXG4gICAqL1xuICBmdW5jdGlvbiBNYXRyaXgoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1hdHJpeCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUudHlwZSA9ICdNYXRyaXgnO1xuICBNYXRyaXgucHJvdG90eXBlLmlzTWF0cml4ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCB0aGUgTWF0cml4IHN0b3JhZ2UgY29uc3RydWN0b3IgZm9yIHRoZSBnaXZlbiBmb3JtYXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdC5cbiAgICpcbiAgICogQHJldHVybiB7RnVuY3Rpb259ICAgICAgICAgICBUaGUgTWF0cml4IHN0b3JhZ2UgY29uc3RydWN0b3IuXG4gICAqL1xuXG4gIE1hdHJpeC5zdG9yYWdlID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4LnN0b3JhZ2UgaXMgZGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuICcgKyAnVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIG1hdGgubWF0cml4IGluc3RlYWQuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0b3JhZ2UgZm9ybWF0IHVzZWQgYnkgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBmb3JtYXQgPSBtYXRyaXguc3RvcmFnZSgpICAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIHN0b3JhZ2UgZm9ybWF0LlxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuc3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc3RvcmFnZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBkYXRhdHlwZS5cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLmRhdGF0eXBlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBkYXRhdHlwZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBNYXRyaXggV2l0aCB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBtYXRyaXggaW5zdGFuY2VcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGF0eXBlXVxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGNyZWF0ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IFtyZXBsYWNlbWVudF1cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnN1YnNldCA9IGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzdWJzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBtYXRyaXguXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcmV0dXJuIHsqfSB2YWx1ZVxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGdldCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleCAgIFplcm8tYmFzZWQgaW5kZXhcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGxlZnQgdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXNpemUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNpemUgaW4gcGxhY2UpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS5cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoZSBtYXRyaXggZWxlbWVudHMgd2lsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaXplZCBjb3B5IG9mIHRoZSBtYXRyaXhcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgVGhlIHJlc2l6ZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHJlc2l6ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2hhcGVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaGFwZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNoYXBlIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeFxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgY2xvbmUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgbWF0cml4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IHNpemVcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHNpemUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWF0cml4IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uXG4gICAqIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwWmVyb3NdIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igbm9uLXplcm8gdmFsdWVzIG9ubHkuXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHNraXBaZXJvcykge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBtYXAgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvckVhY2ggb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIE1hdHJpeFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSB0b0FycmF5IG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIE1hdHJpeDogYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHZhbHVlT2Ygb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvcm1hdCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHRvU3RyaW5nIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuXG4gIHJldHVybiBNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXRyaXhDbGFzcyA9IGNyZWF0ZU1hdHJpeENsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0luZGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0ltbXV0YWJsZURlbnNlTWF0cml4J107XG52YXIgY3JlYXRlSW5kZXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBJbW11dGFibGVEZW5zZU1hdHJpeCA9IF9yZWYuSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleC4gQW4gSW5kZXggY2FuIHN0b3JlIHJhbmdlcyBhbmQgc2V0cyBmb3IgbXVsdGlwbGUgZGltZW5zaW9ucy5cbiAgICogTWF0cml4LmdldCwgTWF0cml4LnNldCwgYW5kIG1hdGguc3Vic2V0IGFjY2VwdCBhbiBJbmRleCBhcyBpbnB1dC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBpbmRleCA9IG5ldyBJbmRleChyYW5nZTEsIHJhbmdlMiwgbWF0cml4MSwgYXJyYXkxLCAuLi4pXG4gICAqXG4gICAqIFdoZXJlIGVhY2ggcGFyYW1ldGVyIGNhbiBiZSBhbnkgb2Y6XG4gICAqICAgICBBIG51bWJlclxuICAgKiAgICAgQSBzdHJpbmcgKGNvbnRhaW5pbmcgYSBuYW1lIG9mIGFuIG9iamVjdCBwcm9wZXJ0eSlcbiAgICogICAgIEFuIGluc3RhbmNlIG9mIFJhbmdlXG4gICAqICAgICBBbiBBcnJheSB3aXRoIHRoZSBTZXQgdmFsdWVzXG4gICAqICAgICBBIE1hdHJpeCB3aXRoIHRoZSBTZXQgdmFsdWVzXG4gICAqXG4gICAqIFRoZSBwYXJhbWV0ZXJzIHN0YXJ0LCBlbmQsIGFuZCBzdGVwIG11c3QgYmUgaW50ZWdlciBudW1iZXJzLlxuICAgKlxuICAgKiBAY2xhc3MgSW5kZXhcbiAgICogQENvbnN0cnVjdG9yIEluZGV4XG4gICAqIEBwYXJhbSB7Li4uKn0gcmFuZ2VzXG4gICAqL1xuICBmdW5jdGlvbiBJbmRleChyYW5nZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMuX2RpbWVuc2lvbnMgPSBbXTtcbiAgICB0aGlzLl9pc1NjYWxhciA9IHRydWU7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNSYW5nZSkoYXJnKSkge1xuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2goYXJnKTtcblxuICAgICAgICB0aGlzLl9pc1NjYWxhciA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykgfHwgKDAsIF9pcy5pc01hdHJpeCkoYXJnKSkge1xuICAgICAgICAvLyBjcmVhdGUgbWF0cml4XG4gICAgICAgIHZhciBtID0gX2NyZWF0ZUltbXV0YWJsZU1hdHJpeChhcmcudmFsdWVPZigpKTtcblxuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2gobSk7IC8vIHNpemVcblxuXG4gICAgICAgIHZhciBzaXplID0gbS5zaXplKCk7IC8vIHNjYWxhclxuXG4gICAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSB8fCBzaXplWzBdICE9PSAxKSB7XG4gICAgICAgICAgdGhpcy5faXNTY2FsYXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2goX2NyZWF0ZUltbXV0YWJsZU1hdHJpeChbYXJnXSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBvYmplY3QgcHJvcGVydHkgKGFyZ3VtZW50cy5jb3VudCBzaG91bGQgYmUgMSlcbiAgICAgICAgdGhpcy5fZGltZW5zaW9ucy5wdXNoKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UnKTtcbiAgICAgIH0gLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIHdpbGRjYXJkICcqJ1xuXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS50eXBlID0gJ0luZGV4JztcbiAgSW5kZXgucHJvdG90eXBlLmlzSW5kZXggPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIF9jcmVhdGVJbW11dGFibGVNYXRyaXgoYXJnKSB7XG4gICAgLy8gbG9vcCBhcnJheSBlbGVtZW50c1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJnLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiBhcmdbaV0gIT09ICdudW1iZXInIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGFyZ1tpXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXggcGFyYW1ldGVycyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXIgbnVtYmVycycpO1xuICAgICAgfVxuICAgIH0gLy8gY3JlYXRlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KGFyZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBpbmRleFxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybiB7SW5kZXh9IGNsb25lXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbmRleCA9IG5ldyBJbmRleCgpO1xuICAgIGluZGV4Ll9kaW1lbnNpb25zID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RpbWVuc2lvbnMpO1xuICAgIGluZGV4Ll9pc1NjYWxhciA9IHRoaXMuX2lzU2NhbGFyO1xuICAgIHJldHVybiBpbmRleDtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleCBmcm9tIGFuIGFycmF5IHdpdGggcmFuZ2VzL251bWJlcnNcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5IHwgbnVtYmVyPn0gcmFuZ2VzXG4gICAqIEByZXR1cm4ge0luZGV4fSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIEluZGV4LmNyZWF0ZSA9IGZ1bmN0aW9uIChyYW5nZXMpIHtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgoKTtcbiAgICBJbmRleC5hcHBseShpbmRleCwgcmFuZ2VzKTtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgaW5kZXgsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgZm9yIGVhY2ggZGltZW5zaW9uLlxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpemUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGQgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgc2l6ZVtpXSA9IHR5cGVvZiBkID09PSAnc3RyaW5nJyA/IDEgOiBkLnNpemUoKVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2l6ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgaW5kZXhlcyByYW5nZXMuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IG1heFxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5tYXggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgdmFsdWVzW2ldID0gdHlwZW9mIHJhbmdlID09PSAnc3RyaW5nJyA/IHJhbmdlIDogcmFuZ2UubWF4KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWluaW11bSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgaW5kZXhlcyByYW5nZXMuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IG1pblxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgdmFsdWVzW2ldID0gdHlwZW9mIHJhbmdlID09PSAnc3RyaW5nJyA/IHJhbmdlIDogcmFuZ2UubWluKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcbiAgLyoqXG4gICAqIExvb3Agb3ZlciBlYWNoIG9mIHRoZSByYW5nZXMgb2YgdGhlIGluZGV4XG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxlZCBmb3IgZWFjaCByYW5nZSB3aXRoIGEgUmFuZ2UgYXMgZmlyc3RcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCwgdGhlIGRpbWVuc2lvbiBhcyBzZWNvbmQsIGFuZCB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBvYmplY3QgYXMgdGhpcmQuXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLl9kaW1lbnNpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuX2RpbWVuc2lvbnNbaV0sIGksIHRoaXMpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBkaW1lbnNpb24gZm9yIHRoZSBnaXZlbiBpbmRleFxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRpbSAgICAgICAgICAgICAgICAgIE51bWJlciBvZiB0aGUgZGltZW5zaW9uXG4gICAqIEByZXR1cm5zIHtSYW5nZSB8IG51bGx9IHJhbmdlXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmRpbWVuc2lvbiA9IGZ1bmN0aW9uIChkaW0pIHtcbiAgICByZXR1cm4gdGhpcy5fZGltZW5zaW9uc1tkaW1dIHx8IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdGhpcyBpbmRleCBjb250YWlucyBhbiBvYmplY3QgcHJvcGVydHlcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5kZXggaXMgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmlzT2JqZWN0UHJvcGVydHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmIHR5cGVvZiB0aGlzLl9kaW1lbnNpb25zWzBdID09PSAnc3RyaW5nJztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9iamVjdCBwcm9wZXJ0eSBuYW1lIHdoZW4gdGhlIEluZGV4IGhvbGRzIGEgc2luZ2xlIG9iamVjdCBwcm9wZXJ0eSxcbiAgICogZWxzZSByZXR1cm5zIG51bGxcbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bGx9XG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmdldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuX2RpbWVuc2lvbnNbMF0gOiBudWxsO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoaXMgaW5kZXggY29udGFpbnMgb25seSBhIHNpbmdsZSB2YWx1ZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBpbmRleCBpcyBjcmVhdGVkIHdpdGggb25seSBzY2FsYXIgdmFsdWVzIGFzIHJhbmdlcyxcbiAgICogbm90IGZvciByYW5nZXMgcmVzb2x2aW5nIGludG8gYSBzaW5nbGUgdmFsdWUuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBpc1NjYWxhclxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5pc1NjYWxhciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTY2FsYXI7XG4gIH07XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIEluZGV4IGludG8gYW4gYXJyYXkuXG4gICAqIEZvciBleGFtcGxlIG5ldyBJbmRleChbMCwzXSwgWzIsN10pIHJldHVybnMgW1swLDEsMl0sIFsyLDMsNCw1LDZdXVxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcbiAgICAgIGFycmF5LnB1c2godHlwZW9mIGRpbWVuc2lvbiA9PT0gJ3N0cmluZycgPyBkaW1lbnNpb24gOiBkaW1lbnNpb24udG9BcnJheSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgSW5kZXgsIGEgdHdvIGRpbWVuc2lvbmFsIGFycmF5LlxuICAgKiBFcXVpdmFsZW50IHRvIEluZGV4LnRvQXJyYXkoKS5cbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBJbmRleC5wcm90b3R5cGUudmFsdWVPZiA9IEluZGV4LnByb3RvdHlwZS50b0FycmF5O1xuICAvKipcbiAgICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluZGV4LCBmb3IgZXhhbXBsZSAnWzI6Nl0nIG9yICdbMDoyOjEwLCA0OjcsIFsxLDIsM11dJ1xuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge1N0cmluZ30gc3RyXG4gICAqL1xuXG4gIEluZGV4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RyaW5ncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcblxuICAgICAgaWYgKHR5cGVvZiBkaW1lbnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0cmluZ3MucHVzaChKU09OLnN0cmluZ2lmeShkaW1lbnNpb24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmluZ3MucHVzaChkaW1lbnNpb24udG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICdbJyArIHN0cmluZ3Muam9pbignLCAnKSArICddJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIEluZGV4XG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkluZGV4XCIsIFwicmFuZ2VzXCI6IFt7XCJtYXRoanNcIjogXCJSYW5nZVwiLCBzdGFydDogMCwgZW5kOiAxMCwgc3RlcDoxfSwgLi4uXX1gXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnSW5kZXgnLFxuICAgICAgZGltZW5zaW9uczogdGhpcy5fZGltZW5zaW9uc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBJbmRleCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uIEEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiSW5kZXhcIiwgXCJkaW1lbnNpb25zXCI6IFt7XCJtYXRoanNcIjogXCJSYW5nZVwiLCBzdGFydDogMCwgZW5kOiAxMCwgc3RlcDoxfSwgLi4uXX1gXG4gICAqIEByZXR1cm4ge0luZGV4fVxuICAgKi9cblxuXG4gIEluZGV4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gSW5kZXguY3JlYXRlKGpzb24uZGltZW5zaW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIEluZGV4O1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhDbGFzcyA9IGNyZWF0ZUluZGV4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1JhbmdlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbXTtcbnZhciBjcmVhdGVSYW5nZUNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlIGEgcmFuZ2UuIEEgcmFuZ2UgaGFzIGEgc3RhcnQsIHN0ZXAsIGFuZCBlbmQsIGFuZCBjb250YWlucyBmdW5jdGlvbnNcbiAgICogdG8gaXRlcmF0ZSBvdmVyIHRoZSByYW5nZS5cbiAgICpcbiAgICogQSByYW5nZSBjYW4gYmUgY29uc3RydWN0ZWQgYXM6XG4gICAqXG4gICAqICAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgZW5kKVxuICAgKiAgICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcClcbiAgICpcbiAgICogVG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIHJhbmdlOlxuICAgKiAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHgpXG4gICAqICAgICB9KVxuICAgKiAgICAgcmFuZ2UubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAqICAgICAgICAgcmV0dXJuIG1hdGguc2luKHgpXG4gICAqICAgICB9KVxuICAgKiAgICAgcmFuZ2UudG9BcnJheSgpXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICBjb25zdCBjID0gbmV3IFJhbmdlKDIsIDYpICAgICAgIC8vIDI6MTo1XG4gICAqICAgICBjLnRvQXJyYXkoKSAgICAgICAgICAgICAgICAgICAgIC8vIFsyLCAzLCA0LCA1XVxuICAgKiAgICAgY29uc3QgZCA9IG5ldyBSYW5nZSgyLCAtMywgLTEpICAvLyAyOi0xOi0yXG4gICAqICAgICBkLnRvQXJyYXkoKSAgICAgICAgICAgICAgICAgICAgIC8vIFsyLCAxLCAwLCAtMSwgLTJdXG4gICAqXG4gICAqIEBjbGFzcyBSYW5nZVxuICAgKiBAY29uc3RydWN0b3IgUmFuZ2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0ICBpbmNsdWRlZCBsb3dlciBib3VuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kICAgIGV4Y2x1ZGVkIHVwcGVyIGJvdW5kXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcF0gc3RlcCBzaXplLCBkZWZhdWx0IHZhbHVlIGlzIDFcbiAgICovXG4gIGZ1bmN0aW9uIFJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHZhciBoYXNTdGFydCA9IHN0YXJ0ICE9PSBudWxsICYmIHN0YXJ0ICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGhhc0VuZCA9IGVuZCAhPT0gbnVsbCAmJiBlbmQgIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaGFzU3RlcCA9IHN0ZXAgIT09IG51bGwgJiYgc3RlcCAhPT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGhhc1N0YXJ0KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoc3RhcnQpKSB7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQudG9OdW1iZXIoKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YXJ0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgc3RhcnQgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNFbmQpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShlbmQpKSB7XG4gICAgICAgIGVuZCA9IGVuZC50b051bWJlcigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgZW5kIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzU3RlcCkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHN0ZXApKSB7XG4gICAgICAgIHN0ZXAgPSBzdGVwLnRvTnVtYmVyKCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGVwICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgc3RlcCBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydCA9IGhhc1N0YXJ0ID8gcGFyc2VGbG9hdChzdGFydCkgOiAwO1xuICAgIHRoaXMuZW5kID0gaGFzRW5kID8gcGFyc2VGbG9hdChlbmQpIDogMDtcbiAgICB0aGlzLnN0ZXAgPSBoYXNTdGVwID8gcGFyc2VGbG9hdChzdGVwKSA6IDE7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLnR5cGUgPSAnUmFuZ2UnO1xuICBSYW5nZS5wcm90b3R5cGUuaXNSYW5nZSA9IHRydWU7XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgcmFuZ2UsXG4gICAqIFRoZSBzdHJpbmcgY29udGFpbnMgdGhlIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi5cbiAgICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmFuZ2UsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEZvciBleGFtcGxlIHN0cj0nMDoyOjExJy5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybiB7UmFuZ2UgfCBudWxsfSByYW5nZVxuICAgKi9cblxuICBSYW5nZS5wYXJzZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBhcmdzID0gc3RyLnNwbGl0KCc6Jyk7XG4gICAgdmFyIG51bXMgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdChhcmcpO1xuICAgIH0pO1xuICAgIHZhciBpbnZhbGlkID0gbnVtcy5zb21lKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgIHJldHVybiBpc05hTihudW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAobnVtcy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShudW1zWzBdLCBudW1zWzFdKTtcblxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKG51bXNbMF0sIG51bXNbMl0sIG51bXNbMV0pO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgcmFuZ2VcbiAgICogQHJldHVybiB7UmFuZ2V9IGNsb25lXG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5lbmQsIHRoaXMuc3RlcCk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UuXG4gICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBvbmUgbnVtYmVyLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSByYW5nZS5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSAwO1xuICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXA7XG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kO1xuICAgIHZhciBkaWZmID0gZW5kIC0gc3RhcnQ7XG5cbiAgICBpZiAoKDAsIF9udW1iZXIuc2lnbikoc3RlcCkgPT09ICgwLCBfbnVtYmVyLnNpZ24pKGRpZmYpKSB7XG4gICAgICBsZW4gPSBNYXRoLmNlaWwoZGlmZiAvIHN0ZXApO1xuICAgIH0gZWxzZSBpZiAoZGlmZiA9PT0gMCkge1xuICAgICAgbGVuID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4obGVuKSkge1xuICAgICAgbGVuID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xlbl07XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIHJhbmdlXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCB1bmRlZmluZWR9IG1pblxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemUoKVswXTtcblxuICAgIGlmIChzaXplID4gMCkge1xuICAgICAgaWYgKHRoaXMuc3RlcCA+IDApIHtcbiAgICAgICAgLy8gcG9zaXRpdmUgc3RlcFxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHN0ZXBcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQgKyAoc2l6ZSAtIDEpICogdGhpcy5zdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2VcbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm4ge251bWJlciB8IHVuZGVmaW5lZH0gbWF4XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZSgpWzBdO1xuXG4gICAgaWYgKHNpemUgPiAwKSB7XG4gICAgICBpZiAodGhpcy5zdGVwID4gMCkge1xuICAgICAgICAvLyBwb3NpdGl2ZSBzdGVwXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0ICsgKHNpemUgLSAxKSAqIHRoaXMuc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHN0ZXBcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIHZhbHVlIGluIHRoZSByYW5nZS5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIFJhbmdlIGJlaW5nIHRyYXZlcnNlZC5cbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciB4ID0gdGhpcy5zdGFydDtcbiAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcDtcbiAgICB2YXIgZW5kID0gdGhpcy5lbmQ7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICB3aGlsZSAoeCA8IGVuZCkge1xuICAgICAgICBjYWxsYmFjayh4LCBbaV0sIHRoaXMpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICB3aGlsZSAoeCA+IGVuZCkge1xuICAgICAgICBjYWxsYmFjayh4LCBbaV0sIHRoaXMpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggdmFsdWUgaW4gdGhlIFJhbmdlLCBhbmQgcmV0dXJuIHRoZVxuICAgKiByZXN1bHRzIGFzIGFuIGFycmF5XG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBtZXRob2QgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBvYmopIHtcbiAgICAgIGFycmF5W2luZGV4WzBdXSA9IGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIFJhbmdlcyBkYXRhXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGFycmF5W2luZGV4WzBdXSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgcHJpbWl0aXZlIHZhbHVlIG9mIHRoZSBSYW5nZSwgYSBvbmUgZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYSBjYWNoaW5nIG1lY2hhbmlzbSBmb3IgcmFuZ2UudmFsdWVPZigpXG4gICAgcmV0dXJuIHRoaXMudG9BcnJheSgpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByYW5nZSwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIE91dHB1dCBpcyBmb3JtYXR0ZWQgYXMgJ3N0YXJ0OnN0ZXA6ZW5kJywgZm9yIGV4YW1wbGUgJzI6Nicgb3IgJzA6MC4yOjExJ1xuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudW1iZXIgfCBmdW5jdGlvbn0gW29wdGlvbnNdICBGb3JtYXR0aW5nIG9wdGlvbnMuIFNlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi91dGlscy9udW1iZXI6Zm9ybWF0IGZvciBhXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBzdHIgPSAoMCwgX251bWJlci5mb3JtYXQpKHRoaXMuc3RhcnQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuc3RlcCAhPT0gMSkge1xuICAgICAgc3RyICs9ICc6JyArICgwLCBfbnVtYmVyLmZvcm1hdCkodGhpcy5zdGVwLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzonICsgKDAsIF9udW1iZXIuZm9ybWF0KSh0aGlzLmVuZCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmFuZ2UuXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXQoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhbmdlXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJhbmdlXCIsIFwic3RhcnRcIjogMiwgXCJlbmRcIjogNCwgXCJzdGVwXCI6IDF9YFxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1JhbmdlJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICAgIHN0ZXA6IHRoaXMuc3RlcFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIFJhbmdlIGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gQSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUmFuZ2VcIiwgXCJzdGFydFwiOiAyLCBcImVuZFwiOiA0LCBcInN0ZXBcIjogMX1gXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cblxuXG4gIFJhbmdlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKGpzb24uc3RhcnQsIGpzb24uZW5kLCBqc29uLnN0ZXApO1xuICB9O1xuXG4gIHJldHVybiBSYW5nZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlQ2xhc3MgPSBjcmVhdGVSYW5nZUNsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1NwYSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGRTY2FsYXInLCAnZXF1YWxTY2FsYXInLCAnRmlib25hY2NpSGVhcCddO1xudmFyIGNyZWF0ZVNwYUNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRmlib25hY2NpSGVhcCA9IF9yZWYuRmlib25hY2NpSGVhcDtcblxuICAvKipcbiAgICogQW4gb3JkZXJlZCBTcGFyc2UgQWNjdW11bGF0b3IgaXMgYSByZXByZXNlbnRhdGlvbiBmb3IgYSBzcGFyc2UgdmVjdG9yIHRoYXQgaW5jbHVkZXMgYSBkZW5zZSBhcnJheVxuICAgKiBvZiB0aGUgdmVjdG9yIGVsZW1lbnRzIGFuZCBhbiBvcmRlcmVkIGxpc3Qgb2Ygbm9uLXplcm8gZWxlbWVudHMuXG4gICAqL1xuICBmdW5jdGlvbiBTcGEoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNwYSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyBhbGxvY2F0ZSB2ZWN0b3IsIFRPRE8gdXNlIHR5cGVkIGFycmF5c1xuXG5cbiAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICB0aGlzLl9oZWFwID0gbmV3IEZpYm9uYWNjaUhlYXAoKTtcbiAgfVxuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBTcGEucHJvdG90eXBlLnR5cGUgPSAnU3BhJztcbiAgU3BhLnByb3RvdHlwZS5pc1NwYSA9IHRydWU7XG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGZvciBpbmRleCBpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaSAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluZGV4XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gICBUaGUgdmFsdWUgYXQgaW5kZXggaVxuICAgKi9cblxuICBTcGEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpLCB2KSB7XG4gICAgLy8gY2hlY2sgd2UgaGF2ZSBhIHZhbHVlIEAgaVxuICAgIGlmICghdGhpcy5fdmFsdWVzW2ldKSB7XG4gICAgICAvLyBpbnNlcnQgaW4gaGVhcFxuICAgICAgdmFyIG5vZGUgPSB0aGlzLl9oZWFwLmluc2VydChpLCB2KTsgLy8gc2V0IHRoZSB2YWx1ZSBAIGlcblxuXG4gICAgICB0aGlzLl92YWx1ZXNbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGUgdGhlIHZhbHVlIEAgaVxuICAgICAgdGhpcy5fdmFsdWVzW2ldLnZhbHVlID0gdjtcbiAgICB9XG4gIH07XG5cbiAgU3BhLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoaSkge1xuICAgIHZhciBub2RlID0gdGhpcy5fdmFsdWVzW2ldO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIFNwYS5wcm90b3R5cGUuYWNjdW11bGF0ZSA9IGZ1bmN0aW9uIChpLCB2KSB7XG4gICAgLy8gbm9kZSBAIGlcbiAgICB2YXIgbm9kZSA9IHRoaXMuX3ZhbHVlc1tpXTtcblxuICAgIGlmICghbm9kZSkge1xuICAgICAgLy8gaW5zZXJ0IGluIGhlYXBcbiAgICAgIG5vZGUgPSB0aGlzLl9oZWFwLmluc2VydChpLCB2KTsgLy8gaW5pdGlhbGl6ZSB2YWx1ZVxuXG4gICAgICB0aGlzLl92YWx1ZXNbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhY2N1bXVsYXRlIHZhbHVlXG4gICAgICBub2RlLnZhbHVlID0gYWRkU2NhbGFyKG5vZGUudmFsdWUsIHYpO1xuICAgIH1cbiAgfTtcblxuICBTcGEucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZnJvbSwgdG8sIGNhbGxiYWNrKSB7XG4gICAgLy8gcmVmZXJlbmNlc1xuICAgIHZhciBoZWFwID0gdGhpcy5faGVhcDtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzOyAvLyBub2Rlc1xuXG4gICAgdmFyIG5vZGVzID0gW107IC8vIG5vZGUgd2l0aCBtaW5pbXVtIGtleSwgc2F2ZSBpdFxuXG4gICAgdmFyIG5vZGUgPSBoZWFwLmV4dHJhY3RNaW5pbXVtKCk7XG5cbiAgICBpZiAobm9kZSkge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICB9IC8vIGV4dHJhY3Qgbm9kZXMgZnJvbSBoZWFwIChvcmRlcmVkKVxuXG5cbiAgICB3aGlsZSAobm9kZSAmJiBub2RlLmtleSA8PSB0bykge1xuICAgICAgLy8gY2hlY2sgaXQgaXMgaW4gcmFuZ2VcbiAgICAgIGlmIChub2RlLmtleSA+PSBmcm9tKSB7XG4gICAgICAgIC8vIGNoZWNrIHZhbHVlIGlzIG5vdCB6ZXJvXG4gICAgICAgIGlmICghZXF1YWxTY2FsYXIobm9kZS52YWx1ZSwgMCkpIHtcbiAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayhub2RlLmtleSwgbm9kZS52YWx1ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZXh0cmFjdCBuZXh0IG5vZGUsIHNhdmUgaXRcblxuXG4gICAgICBub2RlID0gaGVhcC5leHRyYWN0TWluaW11bSgpO1xuXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH0gLy8gcmVpbnNlcnQgYWxsIG5vZGVzIGluIGhlYXBcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gY3VycmVudCBub2RlXG4gICAgICB2YXIgbiA9IG5vZGVzW2ldOyAvLyBpbnNlcnQgbm9kZSBpbiBoZWFwXG5cbiAgICAgIG5vZGUgPSBoZWFwLmluc2VydChuLmtleSwgbi52YWx1ZSk7IC8vIHVwZGF0ZSB2YWx1ZXNcblxuICAgICAgdmFsdWVzW25vZGUua2V5XSA9IG5vZGU7XG4gICAgfVxuICB9O1xuXG4gIFNwYS5wcm90b3R5cGUuc3dhcCA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgLy8gbm9kZSBAIGkgYW5kIGpcbiAgICB2YXIgbm9kZWkgPSB0aGlzLl92YWx1ZXNbaV07XG4gICAgdmFyIG5vZGVqID0gdGhpcy5fdmFsdWVzW2pdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIGluc2VydCBpbmRlY2VzXG5cbiAgICBpZiAoIW5vZGVpICYmIG5vZGVqKSB7XG4gICAgICAvLyBpbnNlcnQgaW4gaGVhcFxuICAgICAgbm9kZWkgPSB0aGlzLl9oZWFwLmluc2VydChpLCBub2Rlai52YWx1ZSk7IC8vIHJlbW92ZSBmcm9tIGhlYXBcblxuICAgICAgdGhpcy5faGVhcC5yZW1vdmUobm9kZWopOyAvLyBzZXQgdmFsdWVzXG5cblxuICAgICAgdGhpcy5fdmFsdWVzW2ldID0gbm9kZWk7XG4gICAgICB0aGlzLl92YWx1ZXNbal0gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChub2RlaSAmJiAhbm9kZWopIHtcbiAgICAgIC8vIGluc2VydCBpbiBoZWFwXG4gICAgICBub2RlaiA9IHRoaXMuX2hlYXAuaW5zZXJ0KGosIG5vZGVpLnZhbHVlKTsgLy8gcmVtb3ZlIGZyb20gaGVhcFxuXG4gICAgICB0aGlzLl9oZWFwLnJlbW92ZShub2RlaSk7IC8vIHNldCB2YWx1ZXNcblxuXG4gICAgICB0aGlzLl92YWx1ZXNbal0gPSBub2RlajtcbiAgICAgIHRoaXMuX3ZhbHVlc1tpXSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKG5vZGVpICYmIG5vZGVqKSB7XG4gICAgICAvLyBzd2FwIHZhbHVlc1xuICAgICAgdmFyIHYgPSBub2RlaS52YWx1ZTtcbiAgICAgIG5vZGVpLnZhbHVlID0gbm9kZWoudmFsdWU7XG4gICAgICBub2Rlai52YWx1ZSA9IHY7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTcGE7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFDbGFzcyA9IGNyZWF0ZVNwYUNsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ1NwYXJzZU1hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhcicsICdNYXRyaXgnXTtcbnZhciBjcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBNYXRyaXggPSBfcmVmLk1hdHJpeDtcblxuICAvKipcbiAgICogU3BhcnNlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbi4gVGhpcyB0eXBlIGltcGxlbWVudHMgYSBDb21wcmVzc2VkIENvbHVtbiBTdG9yYWdlIGZvcm1hdFxuICAgKiBmb3Igc3BhcnNlIG1hdHJpY2VzLlxuICAgKiBAY2xhc3MgU3BhcnNlTWF0cml4XG4gICAqL1xuICBmdW5jdGlvbiBTcGFyc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3BhcnNlTWF0cml4KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YXR5cGUgJiYgISgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGF0eXBlOiAnICsgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShkYXRhKSkge1xuICAgICAgLy8gY3JlYXRlIGZyb20gbWF0cml4XG4gICAgICBfY3JlYXRlRnJvbU1hdHJpeCh0aGlzLCBkYXRhLCBkYXRhdHlwZSk7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5pbmRleCkgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLnB0cikgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLnNpemUpKSB7XG4gICAgICAvLyBpbml0aWFsaXplIGZpZWxkc1xuICAgICAgdGhpcy5fdmFsdWVzID0gZGF0YS52YWx1ZXM7XG4gICAgICB0aGlzLl9pbmRleCA9IGRhdGEuaW5kZXg7XG4gICAgICB0aGlzLl9wdHIgPSBkYXRhLnB0cjtcbiAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemU7XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IGRhdGEuZGF0YXR5cGU7XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQXJyYXkpKGRhdGEpKSB7XG4gICAgICAvLyBjcmVhdGUgZnJvbSBhcnJheVxuICAgICAgX2NyZWF0ZUZyb21BcnJheSh0aGlzLCBkYXRhLCBkYXRhdHlwZSk7XG4gICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAvLyB1bnN1cHBvcnRlZCB0eXBlXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCcgKyAoMCwgX2lzLnR5cGVPZikoZGF0YSkgKyAnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub3RoaW5nIHByb3ZpZGVkXG4gICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuX2luZGV4ID0gW107XG4gICAgICB0aGlzLl9wdHIgPSBbMF07XG4gICAgICB0aGlzLl9zaXplID0gWzAsIDBdO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRnJvbU1hdHJpeChtYXRyaXgsIHNvdXJjZSwgZGF0YXR5cGUpIHtcbiAgICAvLyBjaGVjayBtYXRyaXggdHlwZVxuICAgIGlmIChzb3VyY2UudHlwZSA9PT0gJ1NwYXJzZU1hdHJpeCcpIHtcbiAgICAgIC8vIGNsb25lIGFycmF5c1xuICAgICAgbWF0cml4Ll92YWx1ZXMgPSBzb3VyY2UuX3ZhbHVlcyA/ICgwLCBfb2JqZWN0LmNsb25lKShzb3VyY2UuX3ZhbHVlcykgOiB1bmRlZmluZWQ7XG4gICAgICBtYXRyaXguX2luZGV4ID0gKDAsIF9vYmplY3QuY2xvbmUpKHNvdXJjZS5faW5kZXgpO1xuICAgICAgbWF0cml4Ll9wdHIgPSAoMCwgX29iamVjdC5jbG9uZSkoc291cmNlLl9wdHIpO1xuICAgICAgbWF0cml4Ll9zaXplID0gKDAsIF9vYmplY3QuY2xvbmUpKHNvdXJjZS5fc2l6ZSk7XG4gICAgICBtYXRyaXguX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgc291cmNlLl9kYXRhdHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYnVpbGQgZnJvbSBtYXRyaXggZGF0YVxuICAgICAgX2NyZWF0ZUZyb21BcnJheShtYXRyaXgsIHNvdXJjZS52YWx1ZU9mKCksIGRhdGF0eXBlIHx8IHNvdXJjZS5fZGF0YXR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVGcm9tQXJyYXkobWF0cml4LCBkYXRhLCBkYXRhdHlwZSkge1xuICAgIC8vIGluaXRpYWxpemUgZmllbGRzXG4gICAgbWF0cml4Ll92YWx1ZXMgPSBbXTtcbiAgICBtYXRyaXguX2luZGV4ID0gW107XG4gICAgbWF0cml4Ll9wdHIgPSBbXTtcbiAgICBtYXRyaXguX2RhdGF0eXBlID0gZGF0YXR5cGU7IC8vIGRpc2NvdmVyIHJvd3MgJiBjb2x1bW5zLCBkbyBub3QgdXNlIG1hdGguc2l6ZSgpIHRvIGF2b2lkIGxvb3BpbmcgYXJyYXkgdHdpY2VcblxuICAgIHZhciByb3dzID0gZGF0YS5sZW5ndGg7XG4gICAgdmFyIGNvbHVtbnMgPSAwOyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkYXRhdHlwZSwgZGF0YXR5cGUpXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkYXRhdHlwZSwgZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGRhdGF0eXBlKTtcbiAgICB9IC8vIGNoZWNrIHdlIGhhdmUgcm93cyAoZW1wdHkgYXJyYXkpXG5cblxuICAgIGlmIChyb3dzID4gMCkge1xuICAgICAgLy8gY29sdW1uIGluZGV4XG4gICAgICB2YXIgaiA9IDA7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgLy8gc3RvcmUgcG9pbnRlciB0byB2YWx1ZXMgaW5kZXhcbiAgICAgICAgbWF0cml4Ll9wdHIucHVzaChtYXRyaXguX2luZGV4Lmxlbmd0aCk7IC8vIGxvb3Agcm93c1xuXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyBjdXJyZW50IHJvd1xuICAgICAgICAgIHZhciByb3cgPSBkYXRhW2ldOyAvLyBjaGVjayByb3cgaXMgYW4gYXJyYXlcblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHJvdykpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjb2x1bW5zIGlmIG5lZWRlZCAob25seSBvbiBmaXJzdCBjb2x1bW4pXG4gICAgICAgICAgICBpZiAoaiA9PT0gMCAmJiBjb2x1bW5zIDwgcm93Lmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb2x1bW5zID0gcm93Lmxlbmd0aDtcbiAgICAgICAgICAgIH0gLy8gY2hlY2sgcm93IGhhcyBjb2x1bW5cblxuXG4gICAgICAgICAgICBpZiAoaiA8IHJvdy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgICAgICAgdmFyIHYgPSByb3dbal07IC8vIGNoZWNrIHZhbHVlICE9IDBcblxuICAgICAgICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RvcmUgdmFsdWVcbiAgICAgICAgICAgICAgICBtYXRyaXguX3ZhbHVlcy5wdXNoKHYpOyAvLyBpbmRleFxuXG5cbiAgICAgICAgICAgICAgICBtYXRyaXguX2luZGV4LnB1c2goaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlIGNvbHVtbnMgaWYgbmVlZGVkIChvbmx5IG9uIGZpcnN0IGNvbHVtbilcbiAgICAgICAgICAgIGlmIChqID09PSAwICYmIGNvbHVtbnMgPCAxKSB7XG4gICAgICAgICAgICAgIGNvbHVtbnMgPSAxO1xuICAgICAgICAgICAgfSAvLyBjaGVjayB2YWx1ZSAhPSAwIChyb3cgaXMgYSBzY2FsYXIpXG5cblxuICAgICAgICAgICAgaWYgKCFlcShyb3csIHplcm8pKSB7XG4gICAgICAgICAgICAgIC8vIHN0b3JlIHZhbHVlXG4gICAgICAgICAgICAgIG1hdHJpeC5fdmFsdWVzLnB1c2gocm93KTsgLy8gaW5kZXhcblxuXG4gICAgICAgICAgICAgIG1hdHJpeC5faW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaW5jcmVtZW50IGluZGV4XG5cblxuICAgICAgICBqKys7XG4gICAgICB9IHdoaWxlIChqIDwgY29sdW1ucyk7XG4gICAgfSAvLyBzdG9yZSBudW1iZXIgb2YgdmFsdWVzIGluIHB0clxuXG5cbiAgICBtYXRyaXguX3B0ci5wdXNoKG1hdHJpeC5faW5kZXgubGVuZ3RoKTsgLy8gc2l6ZVxuXG5cbiAgICBtYXRyaXguX3NpemUgPSBbcm93cywgY29sdW1uc107XG4gIH1cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IE1hdHJpeCgpO1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNwYXJzZU1hdHJpeFxuICAgKi9cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZVNwYXJzZU1hdHJpeCA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50eXBlID0gJ1NwYXJzZU1hdHJpeCc7XG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuaXNTcGFyc2VNYXRyaXggPSB0cnVlO1xuICAvKipcbiAgICogR2V0IHRoZSBtYXRyaXggdHlwZVxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgY29uc3QgbWF0cml4VHlwZSA9IG1hdHJpeC5nZXREYXRhVHlwZSgpICAvLyByZXRyaWV2ZXMgdGhlIG1hdHJpeCB0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7c3RyaW5nfSAgIHR5cGUgaW5mb3JtYXRpb247IGlmIG11bHRpcGxlIHR5cGVzIGFyZSBmb3VuZCBmcm9tIHRoZSBNYXRyaXgsIGl0IHdpbGwgcmV0dXJuIFwibWl4ZWRcIlxuICAgKi9cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldERhdGFUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKHRoaXMuX3ZhbHVlcywgX2lzLnR5cGVPZik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0b3JhZ2UgZm9ybWF0IHVzZWQgYnkgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBmb3JtYXQgPSBtYXRyaXguc3RvcmFnZSgpICAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICBUaGUgc3RvcmFnZSBmb3JtYXQuXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zdG9yYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnc3BhcnNlJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIGRhdGF0eXBlLlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZGF0YXR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGF0eXBlO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNwYXJzZU1hdHJpeFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWF0cml4IGRlbnNpdHkuXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZGVuc2l0eSA9IG1hdHJpeC5kZW5zaXR5KCkgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgbWF0cml4IGRlbnNpdHlcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgICAgICBUaGUgbWF0cml4IGRlbnNpdHkuXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5kZW5zaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHJvd3MgJiBjb2x1bW5zXG4gICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gY2FsY3VsYXRlIGRlbnNpdHlcblxuICAgIHJldHVybiByb3dzICE9PSAwICYmIGNvbHVtbnMgIT09IDAgPyB0aGlzLl9pbmRleC5sZW5ndGggLyAocm93cyAqIGNvbHVtbnMpIDogMDtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0gW3JlcGxhY2VtZW50XVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeFxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc3Vic2V0IG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpO1xuICAgIH0gLy8gY2hlY2sgYXJndW1lbnRzXG5cblxuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2dldHN1YnNldCh0aGlzLCBpbmRleCk7XG4gICAgICAvLyBpbnRlbnRpb25hbCBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSAyOlxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gX3NldHN1YnNldCh0aGlzLCBpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cycpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBfZ2V0c3Vic2V0KG1hdHJpeCwgaWR4KSB7XG4gICAgLy8gY2hlY2sgaWR4XG4gICAgaWYgKCEoMCwgX2lzLmlzSW5kZXgpKGlkeCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTY2FsYXIgPSBpZHguaXNTY2FsYXIoKTtcblxuICAgIGlmIChpc1NjYWxhcikge1xuICAgICAgLy8gcmV0dXJuIGEgc2NhbGFyXG4gICAgICByZXR1cm4gbWF0cml4LmdldChpZHgubWluKCkpO1xuICAgIH0gLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG5cbiAgICB2YXIgc2l6ZSA9IGlkeC5zaXplKCk7XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IG1hdHJpeC5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3Ioc2l6ZS5sZW5ndGgsIG1hdHJpeC5fc2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gdmFyc1xuXG5cbiAgICB2YXIgaSwgaWksIGssIGtrOyAvLyB2YWxpZGF0ZSBpZiBhbnkgb2YgdGhlIHJhbmdlcyBpbiB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlXG5cbiAgICB2YXIgbWluID0gaWR4Lm1pbigpO1xuICAgIHZhciBtYXggPSBpZHgubWF4KCk7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IG1hdHJpeC5fc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKG1pbltpXSwgbWF0cml4Ll9zaXplW2ldKTtcbiAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkobWF4W2ldLCBtYXRyaXguX3NpemVbaV0pO1xuICAgIH0gLy8gbWF0cml4IGFycmF5c1xuXG5cbiAgICB2YXIgbXZhbHVlcyA9IG1hdHJpeC5fdmFsdWVzO1xuICAgIHZhciBtaW5kZXggPSBtYXRyaXguX2luZGV4O1xuICAgIHZhciBtcHRyID0gbWF0cml4Ll9wdHI7IC8vIHJvd3MgJiBjb2x1bW5zIGRpbWVuc2lvbnMgZm9yIHJlc3VsdCBtYXRyaXhcblxuICAgIHZhciByb3dzID0gaWR4LmRpbWVuc2lvbigwKTtcbiAgICB2YXIgY29sdW1ucyA9IGlkeC5kaW1lbnNpb24oMSk7IC8vIHdvcmtzcGFjZSAmIHBlcm11dGF0aW9uIHZlY3RvclxuXG4gICAgdmFyIHcgPSBbXTtcbiAgICB2YXIgcHYgPSBbXTsgLy8gbG9vcCByb3dzIGluIHJlc3VsdGluZyBtYXRyaXhcblxuICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbiAoaSwgcikge1xuICAgICAgLy8gdXBkYXRlIHBlcm11dGF0aW9uIHZlY3RvclxuICAgICAgcHZbaV0gPSByWzBdOyAvLyBtYXJrIGkgaW4gd29ya3NwYWNlXG5cbiAgICAgIHdbaV0gPSB0cnVlO1xuICAgIH0pOyAvLyByZXN1bHQgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHZhbHVlcyA9IG12YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGxvb3AgY29sdW1ucyBpbiByZXN1bHQgbWF0cml4XG5cbiAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGopIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIHB0ci5wdXNoKGluZGV4Lmxlbmd0aCk7IC8vIGxvb3AgdmFsdWVzIGluIGNvbHVtbiBqXG5cbiAgICAgIGZvciAoayA9IG1wdHJbal0sIGtrID0gbXB0cltqICsgMV07IGsgPCBrazsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gbWluZGV4W2tdOyAvLyBjaGVjayByb3cgaXMgaW4gcmVzdWx0IG1hdHJpeFxuXG4gICAgICAgIGlmICh3W2ldID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgIGluZGV4LnB1c2gocHZbaV0pOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChtdmFsdWVzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gdXBkYXRlIHB0clxuXG4gICAgcHRyLnB1c2goaW5kZXgubGVuZ3RoKTsgLy8gcmV0dXJuIG1hdHJpeFxuXG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwdHI6IHB0cixcbiAgICAgIHNpemU6IHNpemUsXG4gICAgICBkYXRhdHlwZTogbWF0cml4Ll9kYXRhdHlwZVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NldHN1YnNldChtYXRyaXgsIGluZGV4LCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIGNoZWNrIGluZGV4XG4gICAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfSAvLyBnZXQgaW5kZXggc2l6ZSBhbmQgY2hlY2sgd2hldGhlciB0aGUgaW5kZXggY29udGFpbnMgYSBzaW5nbGUgdmFsdWVcblxuXG4gICAgdmFyIGlTaXplID0gaW5kZXguc2l6ZSgpO1xuICAgIHZhciBpc1NjYWxhciA9IGluZGV4LmlzU2NhbGFyKCk7IC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3VibWF0cml4LCBhbmQgY29udmVydCBpdCBpbnRvIGFuIEFycmF5IGlmIG5lZWRlZFxuXG4gICAgdmFyIHNTaXplO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHN1Ym1hdHJpeCkpIHtcbiAgICAgIC8vIHN1Ym1hdHJpeCBzaXplXG4gICAgICBzU2l6ZSA9IHN1Ym1hdHJpeC5zaXplKCk7IC8vIHVzZSBhcnJheSByZXByZXNlbnRhdGlvblxuXG4gICAgICBzdWJtYXRyaXggPSBzdWJtYXRyaXgudG9BcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQgc3VibWF0cml4IHNpemUgKGFycmF5LCBzY2FsYXIpXG4gICAgICBzU2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKShzdWJtYXRyaXgpO1xuICAgIH0gLy8gY2hlY2sgaW5kZXggaXMgYSBzY2FsYXJcblxuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyB2ZXJpZnkgc3VibWF0cml4IGlzIGEgc2NhbGFyXG4gICAgICBpZiAoc1NpemUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciBleHBlY3RlZCcpO1xuICAgICAgfSAvLyBzZXQgdmFsdWVcblxuXG4gICAgICBtYXRyaXguc2V0KGluZGV4Lm1pbigpLCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMsIGluZGV4IHNpemUgbXVzdCBiZSBvbmUgb3IgdHdvIGRpbWVuc2lvbnNcbiAgICAgIGlmIChpU2l6ZS5sZW5ndGggIT09IDEgJiYgaVNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaVNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoLCAnPCcpO1xuICAgICAgfSAvLyBjaGVjayBzdWJtYXRyaXggYW5kIGluZGV4IGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uc1xuXG5cbiAgICAgIGlmIChzU2l6ZS5sZW5ndGggPCBpU2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBtaXNzaW5nIG91dGVyIGRpbWVuc2lvbnNcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgb3V0ZXIgPSAwO1xuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSAmJiBzU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIG91dGVyKys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IC8vIHVuc3F1ZWV6ZSBib3RoIG91dGVyIGFuZCBpbm5lciBkaW1lbnNpb25zXG5cblxuICAgICAgICBzdWJtYXRyaXggPSAoMCwgX2FycmF5LnVuc3F1ZWV6ZSkoc3VibWF0cml4LCBpU2l6ZS5sZW5ndGgsIG91dGVyLCBzU2l6ZSk7XG4gICAgICB9IC8vIGNoZWNrIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCBtYXRjaGVzIHRoZSBpbmRleCBzaXplXG5cblxuICAgICAgaWYgKCEoMCwgX29iamVjdC5kZWVwU3RyaWN0RXF1YWwpKGlTaXplLCBzU2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZSwgc1NpemUsICc+Jyk7XG4gICAgICB9IC8vIG9mZnNldHNcblxuXG4gICAgICB2YXIgeDAgPSBpbmRleC5taW4oKVswXTtcbiAgICAgIHZhciB5MCA9IGluZGV4Lm1pbigpWzFdOyAvLyBzdWJtYXRyaXggcm93cyBhbmQgY29sdW1uc1xuXG4gICAgICB2YXIgbSA9IHNTaXplWzBdO1xuICAgICAgdmFyIG4gPSBzU2l6ZVsxXTsgLy8gbG9vcCBzdWJtYXRyaXhcblxuICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBtOyB4KyspIHtcbiAgICAgICAgLy8gbG9vcCBjb2x1bW5zXG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgbjsgeSsrKSB7XG4gICAgICAgICAgLy8gdmFsdWUgYXQgaSwgalxuICAgICAgICAgIHZhciB2ID0gc3VibWF0cml4W3hdW3ldOyAvLyBpbnZva2Ugc2V0ICh6ZXJvIHZhbHVlIHdpbGwgcmVtb3ZlIGVudHJ5IGZyb20gbWF0cml4KVxuXG4gICAgICAgICAgbWF0cml4LnNldChbeCArIHgwLCB5ICsgeTBdLCB2LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcmV0dXJuIHsqfSB2YWx1ZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKGluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXgubGVuZ3RoICE9PSB0aGlzLl9zaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpbmRleC5sZW5ndGgsIHRoaXMuX3NpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIGl0IGlzIGEgcGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCF0aGlzLl92YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBnZXQgb24gYSBQYXR0ZXJuIG9ubHkgbWF0cml4Jyk7XG4gICAgfSAvLyByb3cgYW5kIGNvbHVtblxuXG5cbiAgICB2YXIgaSA9IGluZGV4WzBdO1xuICAgIHZhciBqID0gaW5kZXhbMV07IC8vIGNoZWNrIGksIGogYXJlIHZhbGlkXG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGksIHRoaXMuX3NpemVbMF0pO1xuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaiwgdGhpcy5fc2l6ZVsxXSk7IC8vIGZpbmQgdmFsdWUgaW5kZXhcblxuICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoaSwgdGhpcy5fcHRyW2pdLCB0aGlzLl9wdHJbaiArIDFdLCB0aGlzLl9pbmRleCk7IC8vIGNoZWNrIGsgaXMgcHJpb3IgdG8gbmV4dCBjb2x1bW4gayBhbmQgaXQgaXMgaW4gdGhlIGNvcnJlY3Qgcm93XG5cblxuICAgIGlmIChrIDwgdGhpcy5fcHRyW2ogKyAxXSAmJiB0aGlzLl9pbmRleFtrXSA9PT0gaSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlc1trXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcGFyYW0geyp9IHZcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBzZXQgdG8gemVyby5cbiAgICogQHJldHVybiB7U3BhcnNlTWF0cml4fSBzZWxmXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoaW5kZXgsIHYsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4Lmxlbmd0aCAhPT0gdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayBpdCBpcyBhIHBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc2V0IG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpO1xuICAgIH0gLy8gcm93IGFuZCBjb2x1bW5cblxuXG4gICAgdmFyIGkgPSBpbmRleFswXTtcbiAgICB2YXIgaiA9IGluZGV4WzFdOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDtcblxuICAgIGlmICgoMCwgX2lzLmlzU3RyaW5nKSh0aGlzLl9kYXRhdHlwZSkpIHtcbiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKVxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbdGhpcy5fZGF0YXR5cGUsIHRoaXMuX2RhdGF0eXBlXSkgfHwgZXF1YWxTY2FsYXI7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCB0aGlzLl9kYXRhdHlwZSk7XG4gICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlc2l6ZSBtYXRyaXhcblxuXG4gICAgaWYgKGkgPiByb3dzIC0gMSB8fCBqID4gY29sdW1ucyAtIDEpIHtcbiAgICAgIC8vIHJlc2l6ZSBtYXRyaXhcbiAgICAgIF9yZXNpemUodGhpcywgTWF0aC5tYXgoaSArIDEsIHJvd3MpLCBNYXRoLm1heChqICsgMSwgY29sdW1ucyksIGRlZmF1bHRWYWx1ZSk7IC8vIHVwZGF0ZSByb3dzICYgY29sdW1uc1xuXG5cbiAgICAgIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgICAgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07XG4gICAgfSAvLyBjaGVjayBpLCBqIGFyZSB2YWxpZFxuXG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGksIHJvd3MpO1xuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaiwgY29sdW1ucyk7IC8vIGZpbmQgdmFsdWUgaW5kZXhcblxuICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoaSwgdGhpcy5fcHRyW2pdLCB0aGlzLl9wdHJbaiArIDFdLCB0aGlzLl9pbmRleCk7IC8vIGNoZWNrIGsgaXMgcHJpb3IgdG8gbmV4dCBjb2x1bW4gayBhbmQgaXQgaXMgaW4gdGhlIGNvcnJlY3Qgcm93XG5cblxuICAgIGlmIChrIDwgdGhpcy5fcHRyW2ogKyAxXSAmJiB0aGlzLl9pbmRleFtrXSA9PT0gaSkge1xuICAgICAgLy8gY2hlY2sgdmFsdWUgIT0gMFxuICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAvLyB1cGRhdGUgdmFsdWVcbiAgICAgICAgdGhpcy5fdmFsdWVzW2tdID0gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBmcm9tIG1hdHJpeFxuICAgICAgICBfcmVtb3ZlKGssIGosIHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0cik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluc2VydCB2YWx1ZSBAIChpLCBqKVxuICAgICAgX2luc2VydChrLCBpLCBqLCB2LCB0aGlzLl92YWx1ZXMsIHRoaXMuX2luZGV4LCB0aGlzLl9wdHIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGZ1bmN0aW9uIF9nZXRWYWx1ZUluZGV4KGksIHRvcCwgYm90dG9tLCBpbmRleCkge1xuICAgIC8vIGNoZWNrIHJvdyBpcyBvbiB0aGUgYm90dG9tIHNpZGVcbiAgICBpZiAoYm90dG9tIC0gdG9wID09PSAwKSB7XG4gICAgICByZXR1cm4gYm90dG9tO1xuICAgIH0gLy8gbG9vcCByb3dzIFt0b3AsIGJvdHRvbVtcblxuXG4gICAgZm9yICh2YXIgciA9IHRvcDsgciA8IGJvdHRvbTsgcisrKSB7XG4gICAgICAvLyBjaGVjayB3ZSBmb3VuZCB2YWx1ZSBpbmRleFxuICAgICAgaWYgKGluZGV4W3JdID09PSBpKSB7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuICAgIH0gLy8gd2UgZGlkIG5vdCBmaW5kIHJvd1xuXG5cbiAgICByZXR1cm4gdG9wO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JlbW92ZShrLCBqLCB2YWx1ZXMsIGluZGV4LCBwdHIpIHtcbiAgICAvLyByZW1vdmUgdmFsdWUgQCBrXG4gICAgdmFsdWVzLnNwbGljZShrLCAxKTtcbiAgICBpbmRleC5zcGxpY2UoaywgMSk7IC8vIHVwZGF0ZSBwb2ludGVyc1xuXG4gICAgZm9yICh2YXIgeCA9IGogKyAxOyB4IDwgcHRyLmxlbmd0aDsgeCsrKSB7XG4gICAgICBwdHJbeF0tLTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfaW5zZXJ0KGssIGksIGosIHYsIHZhbHVlcywgaW5kZXgsIHB0cikge1xuICAgIC8vIGluc2VydCB2YWx1ZVxuICAgIHZhbHVlcy5zcGxpY2UoaywgMCwgdik7IC8vIHVwZGF0ZSByb3cgZm9yIGtcblxuICAgIGluZGV4LnNwbGljZShrLCAwLCBpKTsgLy8gdXBkYXRlIGNvbHVtbiBwb2ludGVyc1xuXG4gICAgZm9yICh2YXIgeCA9IGogKyAxOyB4IDwgcHRyLmxlbmd0aDsgeCsrKSB7XG4gICAgICBwdHJbeF0rKztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlc2l6ZSB0aGUgbWF0cml4IHRvIHRoZSBnaXZlbiBzaXplLiBSZXR1cm5zIGEgY29weSBvZiB0aGUgbWF0cml4IHdoZW5cbiAgICogYGNvcHk9dHJ1ZWAsIG90aGVyd2lzZSByZXR1cm4gdGhlIG1hdHJpeCBpdHNlbGYgKHJlc2l6ZSBpbiBwbGFjZSkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF0cml4IGVsZW1lbnRzIHdpbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2l6ZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeFxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSwgY29weSkge1xuICAgIC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9ucyBtYXRyaXggYXJlIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gY2hlY2sgc2l6ZXNcblxuXG4gICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG4gICAgfSk7IC8vIG1hdHJpeCB0byByZXNpemVcblxuICAgIHZhciBtID0gY29weSA/IHRoaXMuY2xvbmUoKSA6IHRoaXM7IC8vIHJlc2l6ZSBtYXRyaXhcblxuICAgIHJldHVybiBfcmVzaXplKG0sIHNpemVbMF0sIHNpemVbMV0sIGRlZmF1bHRWYWx1ZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3Jlc2l6ZShtYXRyaXgsIHJvd3MsIGNvbHVtbnMsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIHZhbHVlIHRvIGluc2VydCBhdCB0aGUgdGltZSBvZiBncm93aW5nIG1hdHJpeFxuICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCAwOyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNTdHJpbmcpKG1hdHJpeC5fZGF0YXR5cGUpKSB7XG4gICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSlcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW21hdHJpeC5fZGF0YXR5cGUsIG1hdHJpeC5fZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIG1hdHJpeC5fZGF0YXR5cGUpOyAvLyBjb252ZXJ0IHZhbHVlIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHZhbHVlID0gdHlwZWQuY29udmVydCh2YWx1ZSwgbWF0cml4Ll9kYXRhdHlwZSk7XG4gICAgfSAvLyBzaG91bGQgd2UgaW5zZXJ0IHRoZSB2YWx1ZT9cblxuXG4gICAgdmFyIGlucyA9ICFlcSh2YWx1ZSwgemVybyk7IC8vIG9sZCBjb2x1bW5zIGFuZCByb3dzXG5cbiAgICB2YXIgciA9IG1hdHJpeC5fc2l6ZVswXTtcbiAgICB2YXIgYyA9IG1hdHJpeC5fc2l6ZVsxXTtcbiAgICB2YXIgaSwgaiwgazsgLy8gY2hlY2sgd2UgbmVlZCB0byBpbmNyZWFzZSBjb2x1bW5zXG5cbiAgICBpZiAoY29sdW1ucyA+IGMpIHtcbiAgICAgIC8vIGxvb3AgbmV3IGNvbHVtbnNcbiAgICAgIGZvciAoaiA9IGM7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtblxuICAgICAgICBtYXRyaXguX3B0cltqXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDsgLy8gY2hlY2sgd2UgbmVlZCB0byBpbnNlcnQgbWF0cml4Ll92YWx1ZXNcblxuICAgICAgICBpZiAoaW5zKSB7XG4gICAgICAgICAgLy8gbG9vcCByb3dzXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHI7IGkrKykge1xuICAgICAgICAgICAgLy8gYWRkIG5ldyBtYXRyaXguX3ZhbHVlc1xuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMucHVzaCh2YWx1ZSk7IC8vIHVwZGF0ZSBtYXRyaXguX2luZGV4XG5cblxuICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5wdXNoKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBzdG9yZSBudW1iZXIgb2YgbWF0cml4Ll92YWx1ZXMgaW4gbWF0cml4Ll9wdHJcblxuXG4gICAgICBtYXRyaXguX3B0cltjb2x1bW5zXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbnMgPCBjKSB7XG4gICAgICAvLyB0cnVuY2F0ZSBtYXRyaXguX3B0clxuICAgICAgbWF0cml4Ll9wdHIuc3BsaWNlKGNvbHVtbnMgKyAxLCBjIC0gY29sdW1ucyk7IC8vIHRydW5jYXRlIG1hdHJpeC5fdmFsdWVzIGFuZCBtYXRyaXguX2luZGV4XG5cblxuICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKG1hdHJpeC5fcHRyW2NvbHVtbnNdLCBtYXRyaXguX3ZhbHVlcy5sZW5ndGgpO1xuXG4gICAgICBtYXRyaXguX2luZGV4LnNwbGljZShtYXRyaXguX3B0cltjb2x1bW5zXSwgbWF0cml4Ll9pbmRleC5sZW5ndGgpO1xuICAgIH0gLy8gdXBkYXRlIGNvbHVtbnNcblxuXG4gICAgYyA9IGNvbHVtbnM7IC8vIGNoZWNrIHdlIG5lZWQgdG8gaW5jcmVhc2Ugcm93c1xuXG4gICAgaWYgKHJvd3MgPiByKSB7XG4gICAgICAvLyBjaGVjayB3ZSBoYXZlIHRvIGluc2VydCB2YWx1ZXNcbiAgICAgIGlmIChpbnMpIHtcbiAgICAgICAgLy8gaW5zZXJ0c1xuICAgICAgICB2YXIgbiA9IDA7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjOyBqKyspIHtcbiAgICAgICAgICAvLyB1cGRhdGUgbWF0cml4Ll9wdHIgZm9yIGN1cnJlbnQgY29sdW1uXG4gICAgICAgICAgbWF0cml4Ll9wdHJbal0gPSBtYXRyaXguX3B0cltqXSArIG47IC8vIHdoZXJlIHRvIGluc2VydCBtYXRyaXguX3ZhbHVlc1xuXG4gICAgICAgICAgayA9IG1hdHJpeC5fcHRyW2ogKyAxXSArIG47IC8vIHBvaW50ZXJcblxuICAgICAgICAgIHZhciBwID0gMDsgLy8gbG9vcCBuZXcgcm93cywgaW5pdGlhbGl6ZSBwb2ludGVyXG5cbiAgICAgICAgICBmb3IgKGkgPSByOyBpIDwgcm93czsgaSsrLCBwKyspIHtcbiAgICAgICAgICAgIC8vIGFkZCB2YWx1ZVxuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKGsgKyBwLCAwLCB2YWx1ZSk7IC8vIHVwZGF0ZSBtYXRyaXguX2luZGV4XG5cblxuICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5zcGxpY2UoayArIHAsIDAsIGkpOyAvLyBpbmNyZW1lbnQgaW5zZXJ0c1xuXG5cbiAgICAgICAgICAgIG4rKztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gc3RvcmUgbnVtYmVyIG9mIG1hdHJpeC5fdmFsdWVzIGluIG1hdHJpeC5fcHRyXG5cblxuICAgICAgICBtYXRyaXguX3B0cltjXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJvd3MgPCByKSB7XG4gICAgICAvLyBkZWxldGVzXG4gICAgICB2YXIgZCA9IDA7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgYzsgaisrKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBtYXRyaXguX3B0ciBmb3IgY3VycmVudCBjb2x1bW5cbiAgICAgICAgbWF0cml4Ll9wdHJbal0gPSBtYXRyaXguX3B0cltqXSAtIGQ7IC8vIHdoZXJlIG1hdHJpeC5fdmFsdWVzIHN0YXJ0IGZvciBuZXh0IGNvbHVtblxuXG4gICAgICAgIHZhciBrMCA9IG1hdHJpeC5fcHRyW2pdO1xuICAgICAgICB2YXIgazEgPSBtYXRyaXguX3B0cltqICsgMV0gLSBkOyAvLyBsb29wIG1hdHJpeC5faW5kZXhcblxuICAgICAgICBmb3IgKGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gbWF0cml4Ll9pbmRleFtrXTsgLy8gY2hlY2sgd2UgbmVlZCB0byBkZWxldGUgdmFsdWUgYW5kIG1hdHJpeC5faW5kZXhcblxuICAgICAgICAgIGlmIChpID4gcm93cyAtIDEpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZVxuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKGssIDEpOyAvLyByZW1vdmUgaXRlbSBmcm9tIG1hdHJpeC5faW5kZXhcblxuXG4gICAgICAgICAgICBtYXRyaXguX2luZGV4LnNwbGljZShrLCAxKTsgLy8gaW5jcmVhc2UgZGVsZXRlc1xuXG5cbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtblxuXG5cbiAgICAgIG1hdHJpeC5fcHRyW2pdID0gbWF0cml4Ll92YWx1ZXMubGVuZ3RoO1xuICAgIH0gLy8gdXBkYXRlIG1hdHJpeC5fc2l6ZVxuXG5cbiAgICBtYXRyaXguX3NpemVbMF0gPSByb3dzO1xuICAgIG1hdHJpeC5fc2l6ZVsxXSA9IGNvbHVtbnM7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogTk9URTogVGhpcyBtaWdodCBiZSBiZXR0ZXIgc3VpdGVkIHRvIGNvcHkgYnkgZGVmYXVsdCwgaW5zdGVhZCBvZiBtb2RpZnlpbmdcbiAgICogICAgICAgaW4gcGxhY2UuIEZvciBub3csIGl0IG9wZXJhdGVzIGluIHBsYWNlIHRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGhcbiAgICogICAgICAgcmVzaXplKCkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2hhcGVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaGFwZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKHNpemUsIGNvcHkpIHtcbiAgICAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoc2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwYXJzZSBtYXRyaWNlcyBjYW4gb25seSBiZSByZXNoYXBlZCBpbiB0d28gZGltZW5zaW9ucycpO1xuICAgIH0gLy8gY2hlY2sgc2l6ZXNcblxuXG4gICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG4gICAgfSk7IC8vIG0gKiBuIG11c3Qgbm90IGNoYW5nZVxuXG4gICAgaWYgKHRoaXMuX3NpemVbMF0gKiB0aGlzLl9zaXplWzFdICE9PSBzaXplWzBdICogc2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNoYXBpbmcgc3BhcnNlIG1hdHJpeCB3aWxsIHJlc3VsdCBpbiB0aGUgd3JvbmcgbnVtYmVyIG9mIGVsZW1lbnRzJyk7XG4gICAgfSAvLyBtYXRyaXggdG8gcmVzaGFwZVxuXG5cbiAgICB2YXIgbSA9IGNvcHkgPyB0aGlzLmNsb25lKCkgOiB0aGlzOyAvLyByZXR1cm4gdW5jaGFuZ2VkIGlmIHRoZSBzYW1lIHNoYXBlXG5cbiAgICBpZiAodGhpcy5fc2l6ZVswXSA9PT0gc2l6ZVswXSAmJiB0aGlzLl9zaXplWzFdID09PSBzaXplWzFdKSB7XG4gICAgICByZXR1cm4gbTtcbiAgICB9IC8vIENvbnZlcnQgdG8gQ09PIGZvcm1hdCAoZ2VuZXJhdGUgYSBjb2x1bW4gaW5kZXgpXG5cblxuICAgIHZhciBjb2xJbmRleCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLl9wdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbS5fcHRyW2kgKyAxXSAtIG0uX3B0cltpXTsgaisrKSB7XG4gICAgICAgIGNvbEluZGV4LnB1c2goaSk7XG4gICAgICB9XG4gICAgfSAvLyBDbG9uZSB0aGUgdmFsdWVzIGFycmF5XG5cblxuICAgIHZhciB2YWx1ZXMgPSBtLl92YWx1ZXMuc2xpY2UoKTsgLy8gQ2xvbmUgdGhlIHJvdyBpbmRleCBhcnJheVxuXG5cbiAgICB2YXIgcm93SW5kZXggPSBtLl9pbmRleC5zbGljZSgpOyAvLyBUcmFuc2Zvcm0gdGhlIChyb3csIGNvbHVtbikgaW5kaWNlc1xuXG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbS5faW5kZXgubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgcjEgPSByb3dJbmRleFtfaV07XG4gICAgICB2YXIgYzEgPSBjb2xJbmRleFtfaV07XG4gICAgICB2YXIgZmxhdCA9IHIxICogbS5fc2l6ZVsxXSArIGMxO1xuICAgICAgY29sSW5kZXhbX2ldID0gZmxhdCAlIHNpemVbMV07XG4gICAgICByb3dJbmRleFtfaV0gPSBNYXRoLmZsb29yKGZsYXQgLyBzaXplWzFdKTtcbiAgICB9IC8vIE5vdyByZXNoYXBpbmcgaXMgc3VwcG9zZWQgdG8gcHJlc2VydmUgdGhlIHJvdy1tYWpvciBvcmRlciwgQlVUIHRoZXNlIHNwYXJzZSBtYXRyaWNlcyBhcmUgc3RvcmVkXG4gICAgLy8gaW4gY29sdW1uLW1ham9yIG9yZGVyLCBzbyB3ZSBoYXZlIHRvIHJlb3JkZXIgdGhlIHZhbHVlIGFycmF5IG5vdy4gT25lIG9wdGlvbiBpcyB0byB1c2UgYSBtdWx0aXNvcnQsXG4gICAgLy8gc29ydGluZyBzZXZlcmFsIGFycmF5cyBiYXNlZCBvbiBzb21lIG90aGVyIGFycmF5LlxuICAgIC8vIE9SLCB3ZSBjb3VsZCBlYXNpbHkganVzdDpcbiAgICAvLyAxLiBSZW1vdmUgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXRyaXhcblxuXG4gICAgbS5fdmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgbS5faW5kZXgubGVuZ3RoID0gMDtcbiAgICBtLl9wdHIubGVuZ3RoID0gc2l6ZVsxXSArIDE7XG4gICAgbS5fc2l6ZSA9IHNpemUuc2xpY2UoKTtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG0uX3B0ci5sZW5ndGg7IF9pMisrKSB7XG4gICAgICBtLl9wdHJbX2kyXSA9IDA7XG4gICAgfSAvLyAyLiBSZS1pbnNlcnQgYWxsIGVsZW1lbnRzIGluIHRoZSBwcm9wZXIgb3JkZXIgKHNpbXBsaWZpZWQgY29kZSBmcm9tIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc2V0KVxuICAgIC8vIFRoaXMgc3RlcCBpcyBwcm9iYWJseSB0aGUgbW9zdCB0aW1lLWNvbnN1bWluZ1xuXG5cbiAgICBmb3IgKHZhciBoID0gMDsgaCA8IHZhbHVlcy5sZW5ndGg7IGgrKykge1xuICAgICAgdmFyIF9pMyA9IHJvd0luZGV4W2hdO1xuICAgICAgdmFyIF9qID0gY29sSW5kZXhbaF07XG4gICAgICB2YXIgdiA9IHZhbHVlc1toXTtcblxuICAgICAgdmFyIGsgPSBfZ2V0VmFsdWVJbmRleChfaTMsIG0uX3B0cltfal0sIG0uX3B0cltfaiArIDFdLCBtLl9pbmRleCk7XG5cbiAgICAgIF9pbnNlcnQoaywgX2kzLCBfaiwgdiwgbS5fdmFsdWVzLCBtLl9pbmRleCwgbS5fcHRyKTtcbiAgICB9IC8vIFRoZSB2YWx1ZSBpbmRpY2VzIGFyZSBpbnNlcnRlZCBvdXQgb2Ygb3JkZXIsIGJ1dCBhcHBhcmVudGx5IHRoYXQncy4uLiBzdGlsbCBPSz9cblxuXG4gICAgcmV0dXJuIG07XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7U3BhcnNlTWF0cml4fSBjbG9uZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG0gPSBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdGhpcy5fdmFsdWVzID8gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3ZhbHVlcykgOiB1bmRlZmluZWQsXG4gICAgICBpbmRleDogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2luZGV4KSxcbiAgICAgIHB0cjogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3B0ciksXG4gICAgICBzaXplOiAoMCwgX29iamVjdC5jbG9uZSkodGhpcy5fc2l6ZSksXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplLnNsaWNlKDApOyAvLyBjb3B5IHRoZSBBcnJheVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwWmVyb3NdIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igbm9uLXplcm8gdmFsdWVzIG9ubHkuXG4gICAqXG4gICAqIEByZXR1cm4ge1NwYXJzZU1hdHJpeH0gbWF0cml4XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHNraXBaZXJvcykge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgcGF0dGVybiBtYXRyaXhcbiAgICBpZiAoIXRoaXMuX3ZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIG1hcCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTtcbiAgICB9IC8vIG1hdHJpeCBpbnN0YW5jZVxuXG5cbiAgICB2YXIgbWUgPSB0aGlzOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBpbnZva2UgY2FsbGJhY2tcblxuICAgIHZhciBpbnZva2UgPSBmdW5jdGlvbiBpbnZva2UodiwgaSwgaikge1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrXG4gICAgICByZXR1cm4gY2FsbGJhY2sodiwgW2ksIGpdLCBtZSk7XG4gICAgfTsgLy8gaW52b2tlIF9tYXBcblxuXG4gICAgcmV0dXJuIF9tYXAodGhpcywgMCwgcm93cyAtIDEsIDAsIGNvbHVtbnMgLSAxLCBpbnZva2UsIHNraXBaZXJvcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWF0cml4IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uIHRoZSBpbnRlcnZhbFxuICAgKiBbbWluUm93Li5tYXhSb3csIG1pbkNvbHVtbi4ubWF4Q29sdW1uXS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfbWFwKG1hdHJpeCwgbWluUm93LCBtYXhSb3csIG1pbkNvbHVtbiwgbWF4Q29sdW1uLCBjYWxsYmFjaywgc2tpcFplcm9zKSB7XG4gICAgLy8gcmVzdWx0IGFycmF5c1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7XG5cbiAgICBpZiAoKDAsIF9pcy5pc1N0cmluZykobWF0cml4Ll9kYXRhdHlwZSkpIHtcbiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKVxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbbWF0cml4Ll9kYXRhdHlwZSwgbWF0cml4Ll9kYXRhdHlwZV0pIHx8IGVxdWFsU2NhbGFyOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgbWF0cml4Ll9kYXRhdHlwZSk7XG4gICAgfSAvLyBpbnZva2UgY2FsbGJhY2tcblxuXG4gICAgdmFyIGludm9rZSA9IGZ1bmN0aW9uIGludm9rZSh2LCB4LCB5KSB7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tcbiAgICAgIHYgPSBjYWxsYmFjayh2LCB4LCB5KTsgLy8gY2hlY2sgdmFsdWUgIT0gMFxuXG4gICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgIC8vIHN0b3JlIHZhbHVlXG4gICAgICAgIHZhbHVlcy5wdXNoKHYpOyAvLyBpbmRleFxuXG4gICAgICAgIGluZGV4LnB1c2goeCk7XG4gICAgICB9XG4gICAgfTsgLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAodmFyIGogPSBtaW5Db2x1bW47IGogPD0gbWF4Q29sdW1uOyBqKyspIHtcbiAgICAgIC8vIHN0b3JlIHBvaW50ZXIgdG8gdmFsdWVzIGluZGV4XG4gICAgICBwdHIucHVzaCh2YWx1ZXMubGVuZ3RoKTsgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuXG4gICAgICB2YXIgazAgPSBtYXRyaXguX3B0cltqXTtcbiAgICAgIHZhciBrMSA9IG1hdHJpeC5fcHRyW2ogKyAxXTtcblxuICAgICAgaWYgKHNraXBaZXJvcykge1xuICAgICAgICAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbXG4gICAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3cgaW5kZXhcbiAgICAgICAgICB2YXIgaSA9IG1hdHJpeC5faW5kZXhba107IC8vIGNoZWNrIGkgaXMgaW4gcmFuZ2VcblxuICAgICAgICAgIGlmIChpID49IG1pblJvdyAmJiBpIDw9IG1heFJvdykge1xuICAgICAgICAgICAgLy8gdmFsdWUgQCBrXG4gICAgICAgICAgICBpbnZva2UobWF0cml4Ll92YWx1ZXNba10sIGkgLSBtaW5Sb3csIGogLSBtaW5Db2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgY2FjaGUgaG9sZGluZyBhbGwgZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgdmFyIF92YWx1ZXMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBfayA9IGswOyBfayA8IGsxOyBfaysrKSB7XG4gICAgICAgICAgdmFyIF9pNCA9IG1hdHJpeC5faW5kZXhbX2tdO1xuICAgICAgICAgIF92YWx1ZXNbX2k0XSA9IG1hdHJpeC5fdmFsdWVzW19rXTtcbiAgICAgICAgfSAvLyBsb29wIG92ZXIgYWxsIHJvd3MgKGluZGV4ZXMgY2FuIGJlIHVub3JkZXJlZCBzbyB3ZSBjYW4ndCB1c2UgdGhhdCksXG4gICAgICAgIC8vIGFuZCBlaXRoZXIgcmVhZCB0aGUgdmFsdWUgb3IgemVyb1xuXG5cbiAgICAgICAgZm9yICh2YXIgX2k1ID0gbWluUm93OyBfaTUgPD0gbWF4Um93OyBfaTUrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IF9pNSBpbiBfdmFsdWVzID8gX3ZhbHVlc1tfaTVdIDogMDtcbiAgICAgICAgICBpbnZva2UodmFsdWUsIF9pNSAtIG1pblJvdywgaiAtIG1pbkNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHN0b3JlIG51bWJlciBvZiB2YWx1ZXMgaW4gcHRyXG5cblxuICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwdHI6IHB0cixcbiAgICAgIHNpemU6IFttYXhSb3cgLSBtaW5Sb3cgKyAxLCBtYXhDb2x1bW4gLSBtaW5Db2x1bW4gKyAxXVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcFplcm9zXSBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vbi16ZXJvIHZhbHVlcyBvbmx5LlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgc2tpcFplcm9zKSB7XG4gICAgLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeFxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgZm9yRWFjaCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTtcbiAgICB9IC8vIG1hdHJpeCBpbnN0YW5jZVxuXG5cbiAgICB2YXIgbWUgPSB0aGlzOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICB2YXIgazAgPSB0aGlzLl9wdHJbal07XG4gICAgICB2YXIgazEgPSB0aGlzLl9wdHJbaiArIDFdO1xuXG4gICAgICBpZiAoc2tpcFplcm9zKSB7XG4gICAgICAgIC8vIGxvb3AgayB3aXRoaW4gW2swLCBrMVtcbiAgICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgIC8vIHJvdyBpbmRleFxuICAgICAgICAgIHZhciBpID0gdGhpcy5faW5kZXhba107IC8vIHZhbHVlIEAga1xuXG4gICAgICAgICAgY2FsbGJhY2sodGhpcy5fdmFsdWVzW2tdLCBbaSwgal0sIG1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgY2FjaGUgaG9sZGluZyBhbGwgZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgdmFyIHZhbHVlcyA9IHt9O1xuXG4gICAgICAgIGZvciAodmFyIF9rMiA9IGswOyBfazIgPCBrMTsgX2syKyspIHtcbiAgICAgICAgICB2YXIgX2k2ID0gdGhpcy5faW5kZXhbX2syXTtcbiAgICAgICAgICB2YWx1ZXNbX2k2XSA9IHRoaXMuX3ZhbHVlc1tfazJdO1xuICAgICAgICB9IC8vIGxvb3Agb3ZlciBhbGwgcm93cyAoaW5kZXhlcyBjYW4gYmUgdW5vcmRlcmVkIHNvIHdlIGNhbid0IHVzZSB0aGF0KSxcbiAgICAgICAgLy8gYW5kIGVpdGhlciByZWFkIHRoZSB2YWx1ZSBvciB6ZXJvXG5cblxuICAgICAgICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCByb3dzOyBfaTcrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IF9pNyBpbiB2YWx1ZXMgPyB2YWx1ZXNbX2k3XSA6IDA7XG4gICAgICAgICAgY2FsbGJhY2sodmFsdWUsIFtfaTcsIGpdLCBtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIFNwYXJzZU1hdHJpeFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90b0FycmF5KHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0ciwgdGhpcy5fc2l6ZSwgdHJ1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgU3BhcnNlTWF0cml4OiBhIHR3byBkaW1lbnNpb25zIGFycmF5XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3RvQXJyYXkodGhpcy5fdmFsdWVzLCB0aGlzLl9pbmRleCwgdGhpcy5fcHRyLCB0aGlzLl9zaXplLCBmYWxzZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3RvQXJyYXkodmFsdWVzLCBpbmRleCwgcHRyLCBzaXplLCBjb3B5KSB7XG4gICAgLy8gcm93cyBhbmQgY29sdW1uc1xuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIGEgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGo7IC8vIGluaXRpYWxpemUgYXJyYXlcblxuICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGFbaV0gPSBbXTtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBhW2ldW2pdID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICB2YXIgazEgPSBwdHJbaiArIDFdOyAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbXG5cbiAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgIGkgPSBpbmRleFtrXTsgLy8gc2V0IHZhbHVlICh1c2Ugb25lIGZvciBwYXR0ZXJuIG1hdHJpeClcblxuICAgICAgICBhW2ldW2pdID0gdmFsdWVzID8gY29weSA/ICgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZXNba10pIDogdmFsdWVzW2tdIDogMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXgsIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gcm93cyBhbmQgY29sdW1uc1xuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIGRlbnNpdHlcblxuICAgIHZhciBkZW5zaXR5ID0gdGhpcy5kZW5zaXR5KCk7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgc3RyID0gJ1NwYXJzZSBNYXRyaXggWycgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHJvd3MsIG9wdGlvbnMpICsgJyB4ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKGNvbHVtbnMsIG9wdGlvbnMpICsgJ10gZGVuc2l0eTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoZGVuc2l0eSwgb3B0aW9ucykgKyAnXFxuJzsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuICAgICAgdmFyIGswID0gdGhpcy5fcHRyW2pdO1xuICAgICAgdmFyIGsxID0gdGhpcy5fcHRyW2ogKyAxXTsgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuXG4gICAgICBmb3IgKHZhciBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvdyBpbmRleFxuICAgICAgICB2YXIgaSA9IHRoaXMuX2luZGV4W2tdOyAvLyBhcHBlbmQgdmFsdWVcblxuICAgICAgICBzdHIgKz0gJ1xcbiAgICAoJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoaSwgb3B0aW9ucykgKyAnLCAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShqLCBvcHRpb25zKSArICcpID09PiAnICsgKHRoaXMuX3ZhbHVlcyA/ICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy5fdmFsdWVzW2tdLCBvcHRpb25zKSA6ICdYJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLnRvQXJyYXkoKSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdTcGFyc2VNYXRyaXgnLFxuICAgICAgdmFsdWVzOiB0aGlzLl92YWx1ZXMsXG4gICAgICBpbmRleDogdGhpcy5faW5kZXgsXG4gICAgICBwdHI6IHRoaXMuX3B0cixcbiAgICAgIHNpemU6IHRoaXMuX3NpemUsXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBrdGggTWF0cml4IGRpYWdvbmFsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbaz0wXSAgICAgVGhlIGt0aCBkaWFnb25hbCB3aGVyZSB0aGUgdmVjdG9yIHdpbGwgcmV0cmlldmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggdmVjdG9yIHdpdGggdGhlIGRpYWdvbmFsIHZhbHVlcy5cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmRpYWdvbmFsID0gZnVuY3Rpb24gKGspIHtcbiAgICAvLyB2YWxpZGF0ZSBrIGlmIGFueVxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGtTdXBlciA9IGsgPiAwID8gayA6IDA7XG4gICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIG51bWJlciBkaWFnb25hbCB2YWx1ZXNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyBkaWFnb25hbCBhcnJheXNcblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGluaXRpYWwgcHRyIHZhbHVlXG5cbiAgICBwdHJbMF0gPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSBrU3VwZXI7IGogPCBjb2x1bW5zICYmIHZhbHVlcy5sZW5ndGggPCBuOyBqKyspIHtcbiAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgIHZhciBrMCA9IHRoaXMuX3B0cltqXTtcbiAgICAgIHZhciBrMSA9IHRoaXMuX3B0cltqICsgMV07IC8vIGxvb3AgeCB3aXRoaW4gW2swLCBrMVtcblxuICAgICAgZm9yICh2YXIgeCA9IGswOyB4IDwgazE7IHgrKykge1xuICAgICAgICAvLyByb3cgaW5kZXhcbiAgICAgICAgdmFyIGkgPSB0aGlzLl9pbmRleFt4XTsgLy8gY2hlY2sgcm93XG5cbiAgICAgICAgaWYgKGkgPT09IGogLSBrU3VwZXIgKyBrU3ViKSB7XG4gICAgICAgICAgLy8gdmFsdWUgb24gdGhpcyBjb2x1bW5cbiAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLl92YWx1ZXNbeF0pOyAvLyBzdG9yZSByb3dcblxuICAgICAgICAgIGluZGV4W3ZhbHVlcy5sZW5ndGggLSAxXSA9IGkgLSBrU3ViOyAvLyBleGl0IGxvb3BcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBjbG9zZSBwdHJcblxuXG4gICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgcHRyOiBwdHIsXG4gICAgICBzaXplOiBbbiwgMV1cbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbWF0cml4IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiU3BhcnNlTWF0cml4XCIsIFwidmFsdWVzXCI6IFtdLCBcImluZGV4XCI6IFtdLCBcInB0clwiOiBbXSwgXCJzaXplXCI6IFtdfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1NwYXJzZU1hdHJpeH1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXguZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGpzb24pO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHNpemUgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggc2l6ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeCB9IHZhbHVlICAgVGhlIHZhbHVlcyBmb3IgdGhlIGRpYWdvbmFsLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2s9MF0gICAgICAgICBUaGUga3RoIGRpYWdvbmFsIHdoZXJlIHRoZSB2ZWN0b3Igd2lsbCBiZSBmaWxsZWQgaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBub24tZGlhZ29uYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0gICAgICAgICAgICAgICAgVGhlIE1hdHJpeCBkYXRhdHlwZSwgdmFsdWVzIG11c3QgYmUgb2YgdGhpcyBkYXRhdHlwZS5cbiAgICpcbiAgICogQHJldHVybnMge1NwYXJzZU1hdHJpeH1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXguZGlhZ29uYWwgPSBmdW5jdGlvbiAoc2l6ZSwgdmFsdWUsIGssIGRlZmF1bHRWYWx1ZSwgZGF0YXR5cGUpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoc2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkLCBzaXplIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25zIG1hdHJpeCBhcmUgc3VwcG9ydGVkJyk7XG4gICAgfSAvLyBtYXAgc2l6ZSAmIHZhbGlkYXRlXG5cblxuICAgIHNpemUgPSBzaXplLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgLy8gY2hlY2sgaXQgaXMgYSBiaWcgbnVtYmVyXG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikocykpIHtcbiAgICAgICAgLy8gY29udmVydCBpdFxuICAgICAgICBzID0gcy50b051bWJlcigpO1xuICAgICAgfSAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKHMpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHMpIHx8IHMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2l6ZSB2YWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcztcbiAgICB9KTsgLy8gdmFsaWRhdGUgayBpZiBhbnlcblxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfSAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7XG5cbiAgICBpZiAoKDAsIF9pcy5pc1N0cmluZykoZGF0YXR5cGUpKSB7XG4gICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSlcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2RhdGF0eXBlLCBkYXRhdHlwZV0pIHx8IGVxdWFsU2NhbGFyOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwO1xuICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIG51bWJlciBvZiBub24temVybyBpdGVtc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzIC0ga1N1YiwgY29sdW1ucyAtIGtTdXBlcik7IC8vIHZhbHVlIGV4dHJhY3Rpb24gZnVuY3Rpb25cblxuICAgIHZhciBfdmFsdWU7IC8vIGNoZWNrIHZhbHVlXG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgLy8gdmFsaWRhdGUgYXJyYXlcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IG4pIHtcbiAgICAgICAgLy8gbnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBtdXN0IGJlIG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGFycmF5IGxlbmd0aCcpO1xuICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb25cblxuXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpXG4gICAgICAgIHJldHVybiB2YWx1ZVtpXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzTWF0cml4KSh2YWx1ZSkpIHtcbiAgICAgIC8vIG1hdHJpeCBzaXplXG4gICAgICB2YXIgbXMgPSB2YWx1ZS5zaXplKCk7IC8vIHZhbGlkYXRlIG1hdHJpeFxuXG4gICAgICBpZiAobXMubGVuZ3RoICE9PSAxIHx8IG1zWzBdICE9PSBuKSB7XG4gICAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gYXJyYXkgbXVzdCBiZSBuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggbGVuZ3RoJyk7XG4gICAgICB9IC8vIGRlZmluZSBmdW5jdGlvblxuXG5cbiAgICAgIF92YWx1ZSA9IGZ1bmN0aW9uIF92YWx1ZShpKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBAIGlcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldChbaV0pO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmaW5lIGZ1bmN0aW9uXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH0gLy8gY3JlYXRlIGFycmF5c1xuXG5cbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgdmFyIGluZGV4ID0gW107XG4gICAgdmFyIHB0ciA9IFtdOyAvLyBsb29wIGl0ZW1zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gbnVtYmVyIG9mIHJvd3Mgd2l0aCB2YWx1ZVxuICAgICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIGRpYWdvbmFsIGluZGV4XG5cbiAgICAgIHZhciBpID0gaiAtIGtTdXBlcjsgLy8gY2hlY2sgd2UgbmVlZCB0byBzZXQgZGlhZ29uYWwgdmFsdWVcblxuICAgICAgaWYgKGkgPj0gMCAmJiBpIDwgbikge1xuICAgICAgICAvLyBnZXQgdmFsdWUgQCBpXG4gICAgICAgIHZhciB2ID0gX3ZhbHVlKGkpOyAvLyBjaGVjayBmb3IgemVyb1xuXG5cbiAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAgIC8vIGNvbHVtblxuICAgICAgICAgIGluZGV4LnB1c2goaSArIGtTdWIpOyAvLyBhZGQgdmFsdWVcblxuICAgICAgICAgIHZhbHVlcy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBsYXN0IHZhbHVlIHNob3VsZCBiZSBudW1iZXIgb2YgdmFsdWVzXG5cblxuICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyBjcmVhdGUgU3BhcnNlTWF0cml4XG5cbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHB0cjogcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBNYXRyaXguXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgICAgICAgTWF0cml4IHJvdyBpbmRleCAxXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqICAgICAgIE1hdHJpeCByb3cgaW5kZXggMlxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICBUaGUgbWF0cml4IHJlZmVyZW5jZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc3dhcFJvd3MgPSBmdW5jdGlvbiAoaSwgaikge1xuICAgIC8vIGNoZWNrIGluZGV4XG4gICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShpKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShpKSB8fCAhKDAsIF9pcy5pc051bWJlcikoaikgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm93IGluZGV4IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICB9IC8vIGNoZWNrIGRpbWVuc2lvbnNcblxuXG4gICAgaWYgKHRoaXMuX3NpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTtcbiAgICB9IC8vIHZhbGlkYXRlIGluZGV4XG5cblxuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaSwgdGhpcy5fc2l6ZVswXSk7XG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShqLCB0aGlzLl9zaXplWzBdKTsgLy8gc3dhcCByb3dzXG5cbiAgICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzKGksIGosIHRoaXMuX3NpemVbMV0sIHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0cik7IC8vIHJldHVybiBjdXJyZW50IGluc3RhbmNlXG5cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogTG9vcCByb3dzIHdpdGggZGF0YSBpbiBjb2x1bW4gai5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGogICAgICAgICAgICBDb2x1bW5cbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzICAgICAgICBNYXRyaXggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ICAgICAgICAgTWF0cml4IHJvdyBpbmRlY2VzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHB0ciAgICAgICAgICAgTWF0cml4IGNvbHVtbiBwb2ludGVyc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgZm9yIGV2ZXJ5IHJvdyBpbiBjb2x1bW4galxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyA9IGZ1bmN0aW9uIChqLCB2YWx1ZXMsIGluZGV4LCBwdHIsIGNhbGxiYWNrKSB7XG4gICAgLy8gaW5kZWNlcyBmb3IgY29sdW1uIGpcbiAgICB2YXIgazAgPSBwdHJbal07XG4gICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcFxuXG4gICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayhpbmRleFtrXSwgdmFsdWVzW2tdKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgeCBhbmQgeSBpbiBTcGFyc2UgTWF0cml4IGRhdGEgc3RydWN0dXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggICAgICAgICBNYXRyaXggcm93IGluZGV4IDFcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgICAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnMgICBOdW1iZXIgb2YgY29sdW1ucyBpbiBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzICAgICBNYXRyaXggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ICAgICAgTWF0cml4IHJvdyBpbmRlY2VzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHB0ciAgICAgICAgTWF0cml4IGNvbHVtbiBwb2ludGVyc1xuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5fc3dhcFJvd3MgPSBmdW5jdGlvbiAoeCwgeSwgY29sdW1ucywgdmFsdWVzLCBpbmRleCwgcHRyKSB7XG4gICAgLy8gbG9vcCBjb2x1bW5zXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgIHZhciBrMCA9IHB0cltqXTtcbiAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGZpbmQgdmFsdWUgaW5kZXggQCB4XG5cbiAgICAgIHZhciBreCA9IF9nZXRWYWx1ZUluZGV4KHgsIGswLCBrMSwgaW5kZXgpOyAvLyBmaW5kIHZhbHVlIGluZGV4IEAgeFxuXG5cbiAgICAgIHZhciBreSA9IF9nZXRWYWx1ZUluZGV4KHksIGswLCBrMSwgaW5kZXgpOyAvLyBjaGVjayBib3RoIHJvd3MgZXhpc3QgaW4gbWF0cml4XG5cblxuICAgICAgaWYgKGt4IDwgazEgJiYga3kgPCBrMSAmJiBpbmRleFtreF0gPT09IHggJiYgaW5kZXhba3ldID09PSB5KSB7XG4gICAgICAgIC8vIHN3YXAgdmFsdWVzIChjaGVjayBmb3IgcGF0dGVybiBtYXRyaXgpXG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICB2YXIgdiA9IHZhbHVlc1treF07XG4gICAgICAgICAgdmFsdWVzW2t4XSA9IHZhbHVlc1treV07XG4gICAgICAgICAgdmFsdWVzW2t5XSA9IHY7XG4gICAgICAgIH0gLy8gbmV4dCBjb2x1bW5cblxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBjaGVjayB4IHJvdyBleGlzdCAmIG5vIHkgcm93XG5cblxuICAgICAgaWYgKGt4IDwgazEgJiYgaW5kZXhba3hdID09PSB4ICYmIChreSA+PSBrMSB8fCBpbmRleFtreV0gIT09IHkpKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgeCAoY2hlY2sgZm9yIHBhdHRlcm4gbWF0cml4KVxuICAgICAgICB2YXIgdnggPSB2YWx1ZXMgPyB2YWx1ZXNba3hdIDogdW5kZWZpbmVkOyAvLyBpbnNlcnQgdmFsdWUgQCB5XG5cbiAgICAgICAgaW5kZXguc3BsaWNlKGt5LCAwLCB5KTtcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgdmFsdWVzLnNwbGljZShreSwgMCwgdngpO1xuICAgICAgICB9IC8vIHJlbW92ZSB2YWx1ZSBAIHggKGFkanVzdCBhcnJheSBpbmRleCBpZiBuZWVkZWQpXG5cblxuICAgICAgICBpbmRleC5zcGxpY2Uoa3kgPD0ga3ggPyBreCArIDEgOiBreCwgMSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3kgPD0ga3ggPyBreCArIDEgOiBreCwgMSk7XG4gICAgICAgIH0gLy8gbmV4dCBjb2x1bW5cblxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBjaGVjayB5IHJvdyBleGlzdCAmIG5vIHggcm93XG5cblxuICAgICAgaWYgKGt5IDwgazEgJiYgaW5kZXhba3ldID09PSB5ICYmIChreCA+PSBrMSB8fCBpbmRleFtreF0gIT09IHgpKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgeSAoY2hlY2sgZm9yIHBhdHRlcm4gbWF0cml4KVxuICAgICAgICB2YXIgdnkgPSB2YWx1ZXMgPyB2YWx1ZXNba3ldIDogdW5kZWZpbmVkOyAvLyBpbnNlcnQgdmFsdWUgQCB4XG5cbiAgICAgICAgaW5kZXguc3BsaWNlKGt4LCAwLCB4KTtcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgdmFsdWVzLnNwbGljZShreCwgMCwgdnkpO1xuICAgICAgICB9IC8vIHJlbW92ZSB2YWx1ZSBAIHkgKGFkanVzdCBhcnJheSBpbmRleCBpZiBuZWVkZWQpXG5cblxuICAgICAgICBpbmRleC5zcGxpY2Uoa3ggPD0ga3kgPyBreSArIDEgOiBreSwgMSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3ggPD0ga3kgPyBreSArIDEgOiBreSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNwYXJzZU1hdHJpeDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzID0gY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnaW5kZXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnXTtcbnZhciBjcmVhdGVJbmRleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleC4gQW4gSW5kZXggY2FuIHN0b3JlIHJhbmdlcyBoYXZpbmcgc3RhcnQsIHN0ZXAsIGFuZCBlbmRcbiAgICogZm9yIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqIE1hdHJpeC5nZXQsIE1hdHJpeC5zZXQsIGFuZCBtYXRoLnN1YnNldCBhY2NlcHQgYW4gSW5kZXggYXMgaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaW5kZXgocmFuZ2UxLCByYW5nZTIsIC4uLilcbiAgICpcbiAgICogV2hlcmUgZWFjaCByYW5nZSBjYW4gYmUgYW55IG9mOlxuICAgKlxuICAgKiAtIEEgbnVtYmVyXG4gICAqIC0gQSBzdHJpbmcgZm9yIGdldHRpbmcvc2V0dGluZyBhbiBvYmplY3QgcHJvcGVydHlcbiAgICogLSBBbiBpbnN0YW5jZSBvZiBgUmFuZ2VgXG4gICAqIC0gQSBvbmUtZGltZW5zaW9uYWwgQXJyYXkgb3IgYSBNYXRyaXggd2l0aCBudW1iZXJzXG4gICAqXG4gICAqIEluZGV4ZXMgbXVzdCBiZSB6ZXJvLWJhc2VkLCBpbnRlZ2VyIG51bWJlcnMuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBiID0gWzEsIDIsIDMsIDQsIDVdXG4gICAqICAgIG1hdGguc3Vic2V0KGIsIG1hdGguaW5kZXgoWzEsIDIsIDNdKSkgICAgIC8vIHJldHVybnMgWzIsIDMsIDRdXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBhLnN1YnNldChtYXRoLmluZGV4KDAsIDEpKSAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgY29tcGxleCwgbWF0cml4LCBudW1iZXIsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0gey4uLip9IHJhbmdlcyAgIFplcm8gb3IgbW9yZSByYW5nZXMgb3IgbnVtYmVycy5cbiAgICogQHJldHVybiB7SW5kZXh9ICAgICAgICBSZXR1cm5zIHRoZSBjcmVhdGVkIGluZGV4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcuLi5udW1iZXIgfCBzdHJpbmcgfCBCaWdOdW1iZXIgfCBSYW5nZSB8IEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyU3RyaW5nQmlnTnVtYmVyUmFuZ2VBcnJheU1hdHJpeChhcmdzKSB7XG4gICAgICB2YXIgcmFuZ2VzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoYXJnKSkge1xuICAgICAgICAgIHJldHVybiBhcmcudG9OdW1iZXIoKTsgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gTnVtYmVyXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKGFyZykpIHtcbiAgICAgICAgICByZXR1cm4gYXJnLm1hcChmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gTnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gKDAsIF9pcy5pc0JpZ051bWJlcikoZWxlbSkgPyBlbGVtLnRvTnVtYmVyKCkgOiBlbGVtO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBJbmRleCgpO1xuICAgICAgSW5kZXguYXBwbHkocmVzLCByYW5nZXMpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4ID0gY3JlYXRlSW5kZXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hdHJpeCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ21hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdNYXRyaXgnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIE1hdHJpeCA9IF9yZWYuTWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1hdHJpeC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguTWF0cml4YCBvYmplY3QgZnJvbVxuICAgKiBhbiBgQXJyYXlgLiBBIE1hdHJpeCBoYXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSBpbiB0aGVcbiAgICogbWF0cml4LCBsaWtlIGdldHRpbmcgdGhlIHNpemUgYW5kIGdldHRpbmcgb3Igc2V0dGluZyB2YWx1ZXMgaW4gdGhlIG1hdHJpeC5cbiAgICogU3VwcG9ydGVkIHN0b3JhZ2UgZm9ybWF0cyBhcmUgJ2RlbnNlJyBhbmQgJ3NwYXJzZScuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5tYXRyaXgoKSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVzIGFuIGVtcHR5IG1hdHJpeCB1c2luZyBkZWZhdWx0IHN0b3JhZ2UgZm9ybWF0IChkZW5zZSkuXG4gICAqICAgIG1hdGgubWF0cml4KGRhdGEpICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YSB1c2luZyBkZWZhdWx0IHN0b3JhZ2UgZm9ybWF0IChkZW5zZSkuXG4gICAqICAgIG1hdGgubWF0cml4KCdkZW5zZScpICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhbiBlbXB0eSBtYXRyaXggdXNpbmcgdGhlIGdpdmVuIHN0b3JhZ2UgZm9ybWF0LlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnZGVuc2UnKSAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEgdXNpbmcgdGhlIGdpdmVuIHN0b3JhZ2UgZm9ybWF0LlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnc3BhcnNlJykgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnc3BhcnNlJywgJ251bWJlcicpIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLCBudW1iZXIgZGF0YSB0eXBlLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbGV0IG0gPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBtLnNpemUoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFsyLCAyXVxuICAgKiAgICBtLnJlc2l6ZShbMywgMl0sIDUpXG4gICAqICAgIG0udmFsdWVPZigpICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXkgW1sxLCAyXSwgWzMsIDRdLCBbNSwgNV1dXG4gICAqICAgIG0uZ2V0KFsxLCAwXSkgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBudW1iZXIsIHN0cmluZywgdW5pdCwgc3BhcnNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtkYXRhXSAgICBBIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XSAgICAgICAgICBUaGUgTWF0cml4IHN0b3JhZ2UgZm9ybWF0XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gVGhlIGNyZWF0ZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoW10pO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShbXSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIHN0cmluZyc6IGZ1bmN0aW9uIHN0cmluZ1N0cmluZyhmb3JtYXQsIGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShbXSwgZm9ybWF0LCBkYXRhdHlwZSk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoZGF0YSkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoZGF0YSk7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeChkYXRhKSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShkYXRhLCBkYXRhLnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IF9jcmVhdGUsXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcsIHN0cmluZyc6IF9jcmVhdGVcbiAgfSk7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgTWF0cml4IHdpdGggZ2l2ZW4gc3RvcmFnZSBmb3JtYXRcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV1cbiAgICogQHJldHVybnMge01hdHJpeH0gUmV0dXJucyBhIG5ldyBNYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2NyZWF0ZShkYXRhLCBmb3JtYXQsIGRhdGF0eXBlKSB7XG4gICAgLy8gZ2V0IHN0b3JhZ2UgZm9ybWF0IGNvbnN0cnVjdG9yXG4gICAgaWYgKGZvcm1hdCA9PT0gJ2RlbnNlJyB8fCBmb3JtYXQgPT09ICdkZWZhdWx0JyB8fCBmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gJ3NwYXJzZScpIHtcbiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIG1hdHJpeCB0eXBlICcgKyBKU09OLnN0cmluZ2lmeShmb3JtYXQpICsgJy4nKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hdHJpeCA9IGNyZWF0ZU1hdHJpeDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BhcnNlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3BhcnNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ1NwYXJzZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNwYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgU3BhcnNlIE1hdHJpeC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguTWF0cml4YCBvYmplY3QgZnJvbVxuICAgKiBhbiBgQXJyYXlgLiBBIE1hdHJpeCBoYXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSBpbiB0aGVcbiAgICogbWF0cml4LCBsaWtlIGdldHRpbmcgdGhlIHNpemUgYW5kIGdldHRpbmcgb3Igc2V0dGluZyB2YWx1ZXMgaW4gdGhlIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNwYXJzZSgpICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhbiBlbXB0eSBzcGFyc2UgbWF0cml4LlxuICAgKiAgICBtYXRoLnNwYXJzZShkYXRhKSAgICAgICAgICAgLy8gY3JlYXRlcyBhIHNwYXJzZSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEuXG4gICAqICAgIG1hdGguc3BhcnNlKGRhdGEsICdudW1iZXInKSAvLyBjcmVhdGVzIGEgc3BhcnNlIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YSwgbnVtYmVyIGRhdGF0eXBlLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbGV0IG0gPSBtYXRoLnNwYXJzZShbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBtLnNpemUoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFsyLCAyXVxuICAgKiAgICBtLnJlc2l6ZShbMywgMl0sIDUpXG4gICAqICAgIG0udmFsdWVPZigpICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXkgW1sxLCAyXSwgWzMsIDRdLCBbNSwgNV1dXG4gICAqICAgIG0uZ2V0KFsxLCAwXSkgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBudW1iZXIsIHN0cmluZywgdW5pdCwgbWF0cml4XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtkYXRhXSAgICBBIHR3byBkaW1lbnNpb25hbCBhcnJheVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IFRoZSBjcmVhdGVkIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KFtdKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChbXSwgZGF0YXR5cGUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZGF0YSkge1xuICAgICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoZGF0YSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TWF0cml4U3RyaW5nKGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFyc2UgPSBjcmVhdGVTcGFyc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTAxID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wMSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoRGlqLCBTaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5OWiB0aW1lcyAobnVtYmVyIG9mIG5vbnplcm8gaXRlbXMgaW4gU3BhcnNlTWF0cml4KS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKERpaiwgU2lqKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgRGlqICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGRlbnNlTWF0cml4ICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoRClcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgc3BhcnNlTWF0cml4ICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoUylcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoRGlqLFNpaikgb3BlcmF0aW9uIHRvIGludm9rZSwgd2hlcmUgRGlqID0gRGVuc2VNYXRyaXgoaSxqKSBhbmQgU2lqID0gU3BhcnNlTWF0cml4KGksailcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKFNpaixEaWopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMShkZW5zZU1hdHJpeCwgc3BhcnNlTWF0cml4LCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGRlbnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBkZW5zZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gZGVuc2VNYXRyaXguX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBzcGFyc2VNYXRyaXguX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gc3BhcnNlTWF0cml4Ll9pbmRleDtcbiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyO1xuICAgIHZhciBic2l6ZSA9IHNwYXJzZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gc3BhcnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBEZW5zZSBNYXRyaXggYW5kIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCcpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIHZhciBkdCA9IHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0ID8gYWR0IDogdW5kZWZpbmVkOyAvLyBjYWxsYmFjayBmdW5jdGlvblxuXG4gICAgdmFyIGNmID0gZHQgPyB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSkgOiBjYWxsYmFjazsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGo7IC8vIHJlc3VsdCAoRGVuc2VNYXRyaXgpXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gaW5pdGlhbGl6ZSBjXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBjZGF0YVtpXSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnMgaW4gYlxuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gY29sdW1uIG1hcmtcbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBiaW5kZXhba107IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB4W2ldID0gaW52ZXJzZSA/IGNmKGJ2YWx1ZXNba10sIGFkYXRhW2ldW2pdKSA6IGNmKGFkYXRhW2ldW2pdLCBidmFsdWVzW2tdKTsgLy8gbWFyayBpIGFzIHVwZGF0ZWRcblxuICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgIH0gLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBjaGVjayByb3cgaXMgaW4gd29ya3NwYWNlXG4gICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gY1tpXVtqXSB3YXMgYWxyZWFkeSBjYWxjdWxhdGVkXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSB4W2ldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGl0ZW0gZG9lcyBub3QgZXhpc3QgaW4gU1xuICAgICAgICAgIGNkYXRhW2ldW2pdID0gYWRhdGFbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGRlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDEgPSBjcmVhdGVBbGdvcml0aG0wMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTAyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihEaWosIFNpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTk5aIHRpbWVzIChudW1iZXIgb2Ygbm9uemVybyBpdGVtcyBpbiBTcGFyc2VNYXRyaXgpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoRGlqLCBTaWopICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICAwICAgICAgICAgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgZGVuc2VNYXRyaXggICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChEKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzcGFyc2VNYXRyaXggICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihEaWosU2lqKSBvcGVyYXRpb24gdG8gaW52b2tlLCB3aGVyZSBEaWogPSBEZW5zZU1hdHJpeChpLGopIGFuZCBTaWogPSBTcGFyc2VNYXRyaXgoaSxqKVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoU2lqLERpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDIoZGVuc2VNYXRyaXgsIHNwYXJzZU1hdHJpeCwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBkZW5zZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gZGVuc2VNYXRyaXguX2RhdGE7XG4gICAgdmFyIGFzaXplID0gZGVuc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGFkdCA9IGRlbnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gc3BhcnNlTWF0cml4Ll92YWx1ZXM7XG4gICAgdmFyIGJpbmRleCA9IHNwYXJzZU1hdHJpeC5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBzcGFyc2VNYXRyaXguX3B0cjtcbiAgICB2YXIgYnNpemUgPSBzcGFyc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGJkdCA9IHNwYXJzZU1hdHJpeC5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghYnZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgKFNwYXJzZU1hdHJpeClcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gbG9vcCBjb2x1bW5zIGluIGJcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgQyhpLGopXG5cbiAgICAgICAgdmFyIGNpaiA9IGludmVyc2UgPyBjZihidmFsdWVzW2tdLCBhZGF0YVtpXVtqXSkgOiBjZihhZGF0YVtpXVtqXSwgYnZhbHVlc1trXSk7IC8vIGNoZWNrIGZvciBub256ZXJvXG5cbiAgICAgICAgaWYgKCFlcShjaWosIHplcm8pKSB7XG4gICAgICAgICAgLy8gcHVzaCBpICYgdlxuICAgICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgICAgIGN2YWx1ZXMucHVzaChjaWopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBzcGFyc2VNYXRyaXguY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wMiA9IGNyZWF0ZUFsZ29yaXRobTAyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wMyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTAzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihEaWosIFNpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTSpOIHRpbWVzLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoRGlqLCBTaWopICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICBmKERpaiwgMCkgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgZGVuc2VNYXRyaXggICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChEKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzcGFyc2VNYXRyaXggICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChDKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihEaWosU2lqKSBvcGVyYXRpb24gdG8gaW52b2tlLCB3aGVyZSBEaWogPSBEZW5zZU1hdHJpeChpLGopIGFuZCBTaWogPSBTcGFyc2VNYXRyaXgoaSxqKVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoU2lqLERpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc0Nzc1NzFcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wMyhkZW5zZU1hdHJpeCwgc3BhcnNlTWF0cml4LCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGRlbnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBkZW5zZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gZGVuc2VNYXRyaXguX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBzcGFyc2VNYXRyaXguX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gc3BhcnNlTWF0cml4Ll9pbmRleDtcbiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyO1xuICAgIHZhciBic2l6ZSA9IHNwYXJzZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gc3BhcnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBEZW5zZSBNYXRyaXggYW5kIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCcpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCAoRGVuc2VNYXRyaXgpXG5cblxuICAgIHZhciBjZGF0YSA9IFtdOyAvLyBpbml0aWFsaXplIGRlbnNlIG1hdHJpeFxuXG4gICAgZm9yICh2YXIgeiA9IDA7IHogPCByb3dzOyB6KyspIHtcbiAgICAgIC8vIGluaXRpYWxpemUgcm93XG4gICAgICBjZGF0YVt6XSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnMgaW4gYlxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbiBtYXJrXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaSA9IGJpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHhbaV0gPSBpbnZlcnNlID8gY2YoYnZhbHVlc1trXSwgYWRhdGFbaV1bal0pIDogY2YoYWRhdGFbaV1bal0sIGJ2YWx1ZXNba10pO1xuICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgIH0gLy8gcHJvY2VzcyB3b3Jrc3BhY2VcblxuXG4gICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHJvd3M7IHkrKykge1xuICAgICAgICAvLyBjaGVjayB3ZSBoYXZlIGEgY2FsY3VsYXRlZCB2YWx1ZSBmb3IgY3VycmVudCByb3dcbiAgICAgICAgaWYgKHdbeV0gPT09IG1hcmspIHtcbiAgICAgICAgICAvLyB1c2UgY2FsY3VsYXRlZCB2YWx1ZVxuICAgICAgICAgIGNkYXRhW3ldW2pdID0geFt5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjYWxjdWxhdGUgdmFsdWVcbiAgICAgICAgICBjZGF0YVt5XVtqXSA9IGludmVyc2UgPyBjZih6ZXJvLCBhZGF0YVt5XVtqXSkgOiBjZihhZGF0YVt5XVtqXSwgemVybyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGRlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDMgPSBjcmVhdGVBbGdvcml0aG0wMzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wNCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTA0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggQSBhbmQgU3BhcnNlTWF0cml4IEIgbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWosIEJpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTUFYKE5OWkEsIE5OWkIpIHRpbWVzXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihBaWosIEJpaikgIDsgQShpLGopICE9PSAwICYmIEIoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKQgIEEoaSxqKSAgICAgICA7IEEoaSxqKSAhPT0gMFxuICAgKiAgICAgICAgICDilJQgIEIoaSxqKSAgICAgICA7IEIoaSxqKSAhPT0gMFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA0KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VcblxuICAgIHZhciB4YSA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciB4YiA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHdhID0gW107XG4gICAgdmFyIHdiID0gW107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMCwgazE7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW5zIG1hcmtcblxuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gbG9vcCBBKDosailcblxuICAgICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBhaW5kZXhba107IC8vIHVwZGF0ZSBjXG5cbiAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB3YVtpXSA9IG1hcms7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAoeGEpIHtcbiAgICAgICAgICB4YVtpXSA9IGF2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbG9vcCBCKDosailcblxuXG4gICAgICBmb3IgKGswID0gYnB0cltqXSwgazEgPSBicHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGJpbmRleFtrXTsgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiBBXG5cbiAgICAgICAgaWYgKHdhW2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHJlY29yZCBpbiB4YSBAIGlcbiAgICAgICAgICBpZiAoeGEpIHtcbiAgICAgICAgICAgIC8vIGludm9rZSBjYWxsYmFja1xuICAgICAgICAgICAgdmFyIHYgPSBjZih4YVtpXSwgYnZhbHVlc1trXSk7IC8vIGNoZWNrIGZvciB6ZXJvXG5cbiAgICAgICAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHdvcmtzcGFjZVxuICAgICAgICAgICAgICB4YVtpXSA9IHY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyByZW1vdmUgbWFyayAoaW5kZXggd2lsbCBiZSByZW1vdmVkIGxhdGVyKVxuICAgICAgICAgICAgICB3YVtpXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSBjXG4gICAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICAgIHdiW2ldID0gbWFyazsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlc1xuXG4gICAgICAgICAgaWYgKHhiKSB7XG4gICAgICAgICAgICB4YltpXSA9IGJ2YWx1ZXNba107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXMgKG5vbiBwYXR0ZXJuIG1hdHJpeClcblxuXG4gICAgICBpZiAoeGEgJiYgeGIpIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBmaXJzdCBpbmRleCBpbiBqXG4gICAgICAgIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gY2luZGV4W2tdOyAvLyBjaGVjayB3b3Jrc3BhY2UgaGFzIHZhbHVlIEAgaVxuXG4gICAgICAgICAgaWYgKHdhW2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBwdXNoIHZhbHVlIChBaWogIT0gMCB8fCAoQWlqICE9IDAgJiYgQmlqICE9IDApKVxuICAgICAgICAgICAgY3ZhbHVlc1trXSA9IHhhW2ldOyAvLyBpbmNyZW1lbnQgcG9pbnRlclxuXG4gICAgICAgICAgICBrKys7XG4gICAgICAgICAgfSBlbHNlIGlmICh3YltpXSA9PT0gbWFyaykge1xuICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZSAoYmlqICE9IDApXG4gICAgICAgICAgICBjdmFsdWVzW2tdID0geGJbaV07IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGluZGV4IEAga1xuICAgICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBjcHRyXG5cblxuICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNCA9IGNyZWF0ZUFsZ29yaXRobTA0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTA1JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNQVgoTk5aQSwgTk5aQikgdGltZXNcbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgfHwgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA1KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VzXG5cbiAgICB2YXIgeGEgPSBjdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIHhiID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHdhID0gW107XG4gICAgdmFyIHdiID0gW107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbnMgbWFya1xuXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyBsb29wIHZhbHVlcyBBKDosailcblxuICAgICAgZm9yIChrID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXTsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBhaW5kZXhba107IC8vIHB1c2ggaW5kZXhcblxuICAgICAgICBjaW5kZXgucHVzaChpKTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHdhW2ldID0gbWFyazsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlc1xuXG4gICAgICAgIGlmICh4YSkge1xuICAgICAgICAgIHhhW2ldID0gYXZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBsb29wIHZhbHVlcyBCKDosailcblxuXG4gICAgICBmb3IgKGsgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGJpbmRleFtrXTsgLy8gY2hlY2sgcm93IGV4aXN0ZWQgaW4gQVxuXG4gICAgICAgIGlmICh3YVtpXSAhPT0gbWFyaykge1xuICAgICAgICAgIC8vIHB1c2ggaW5kZXhcbiAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgfSAvLyB1cGRhdGUgd29ya3NwYWNlXG5cblxuICAgICAgICB3YltpXSA9IG1hcms7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAoeGIpIHtcbiAgICAgICAgICB4YltpXSA9IGJ2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KVxuXG5cbiAgICAgIGlmIChjdmFsdWVzKSB7XG4gICAgICAgIC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuICAgICAgICBrID0gY3B0cltqXTsgLy8gbG9vcCBpbmRleCBpbiBqXG5cbiAgICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGNpbmRleFtrXTsgLy8gbWFya3NcblxuICAgICAgICAgIHZhciB3YWkgPSB3YVtpXTtcbiAgICAgICAgICB2YXIgd2JpID0gd2JbaV07IC8vIGNoZWNrIEFpaiBvciBCaWogYXJlIG5vbnplcm9cblxuICAgICAgICAgIGlmICh3YWkgPT09IG1hcmsgfHwgd2JpID09PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBtYXRyaXggdmFsdWVzIEAgaSxqXG4gICAgICAgICAgICB2YXIgdmEgPSB3YWkgPT09IG1hcmsgPyB4YVtpXSA6IHplcm87XG4gICAgICAgICAgICB2YXIgdmIgPSB3YmkgPT09IG1hcmsgPyB4YltpXSA6IHplcm87IC8vIENpalxuXG4gICAgICAgICAgICB2YXIgdmMgPSBjZih2YSwgdmIpOyAvLyBjaGVjayBmb3IgemVyb1xuXG4gICAgICAgICAgICBpZiAoIWVxKHZjLCB6ZXJvKSkge1xuICAgICAgICAgICAgICAvLyBwdXNoIHZhbHVlXG4gICAgICAgICAgICAgIGN2YWx1ZXMucHVzaCh2Yyk7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDUgPSBjcmVhdGVBbGdvcml0aG0wNTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDYgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDYnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wNiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIFNwYXJzZU1hdHJpeCBCIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIChBbnogVSBCbnopIHRpbWVzLCB3aGVyZSBBbnogYW5kIEJueiBhcmUgdGhlIG5vbnplcm8gZWxlbWVudHMgaW4gYm90aCBtYXRyaWNlcy5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgJiYgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA2KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyB2YWxpZGF0ZSBkaW1lbnNpb25zXG5cbiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gY2hlY2sgcm93cyAmIGNvbHVtbnNcblxuXG4gICAgaWYgKGFzaXplWzBdICE9PSBic2l6ZVswXSB8fCBhc2l6ZVsxXSAhPT0gYnNpemVbMV0pIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgnICsgYXNpemUgKyAnKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgnICsgYnNpemUgKyAnKScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBhdmFsdWVzICYmIGJ2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gd29ya3NwYWNlc1xuXG4gICAgdmFyIHggPSBjdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHZhbHVlIGluIGEgZ2l2ZW4gcm93IGhhcyBiZWVuIHVwZGF0ZWRcblxuICAgIHZhciB1ID0gW107IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyW2pdID0gY2luZGV4Lmxlbmd0aDsgLy8gY29sdW1ucyBtYXJrXG5cbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHNjYXR0ZXIgdGhlIHZhbHVlcyBvZiBBKDosaikgaW50byB3b3Jrc3BhY2VcblxuICAgICAgKDAsIF9jb2xsZWN0aW9uLnNjYXR0ZXIpKGEsIGosIHcsIHgsIHUsIG1hcmssIGNpbmRleCwgY2YpOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQig6LGopIGludG8gd29ya3NwYWNlXG5cbiAgICAgICgwLCBfY29sbGVjdGlvbi5zY2F0dGVyKShiLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGNmKTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KVxuXG4gICAgICBpZiAoeCkge1xuICAgICAgICAvLyBpbml0aWFsaXplIGZpcnN0IGluZGV4IGluIGpcbiAgICAgICAgdmFyIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICB2YXIgaSA9IGNpbmRleFtrXTsgLy8gY2hlY2sgZnVuY3Rpb24gd2FzIGludm9rZWQgb24gY3VycmVudCByb3cgKEFpaiAhPTAgJiYgQmlqICE9IDApXG5cbiAgICAgICAgICBpZiAodVtpXSA9PT0gbWFyaykge1xuICAgICAgICAgICAgLy8gdmFsdWUgQCBpXG4gICAgICAgICAgICB2YXIgdiA9IHhbaV07IC8vIGNoZWNrIGZvciB6ZXJvIHZhbHVlXG5cbiAgICAgICAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZVxuICAgICAgICAgICAgICBjdmFsdWVzLnB1c2godik7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBAIGksIGRvIG5vdCBpbmNyZW1lbnQgcG9pbnRlclxuICAgICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuICAgICAgICB2YXIgcCA9IGNwdHJbal07IC8vIGxvb3AgaW5kZXggaW4galxuXG4gICAgICAgIHdoaWxlIChwIDwgY2luZGV4Lmxlbmd0aCkge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIHZhciByID0gY2luZGV4W3BdOyAvLyBjaGVjayBmdW5jdGlvbiB3YXMgaW52b2tlZCBvbiBjdXJyZW50IHJvdyAoQWlqICE9MCAmJiBCaWogIT0gMClcblxuICAgICAgICAgIGlmICh1W3JdICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdmFsdWUgQCBpLCBkbyBub3QgaW5jcmVtZW50IHBvaW50ZXJcbiAgICAgICAgICAgIGNpbmRleC5zcGxpY2UocCwgMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICBwKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDYgPSBjcmVhdGVBbGdvcml0aG0wNjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDcgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wNyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTA3ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggQSBhbmQgU3BhcnNlTWF0cml4IEIgaXRlbXMgKHplcm8gYW5kIG5vbnplcm8pIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqIEMoaSxqKSA9IGYoQWlqLCBCaWopXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjAyOTRcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wNyhhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciBpLCBqOyAvLyByZXN1bHQgYXJyYXlzXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gaW5pdGlhbGl6ZSBjXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBjZGF0YVtpXSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlc1xuXG5cbiAgICB2YXIgeGEgPSBbXTtcbiAgICB2YXIgeGIgPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3YSA9IFtdO1xuICAgIHZhciB3YiA9IFtdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbnMgbWFya1xuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gc2NhdHRlciB0aGUgdmFsdWVzIG9mIEEoOixqKSBpbnRvIHdvcmtzcGFjZVxuXG4gICAgICBfc2NhdHRlcihhLCBqLCB3YSwgeGEsIG1hcmspOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQig6LGopIGludG8gd29ya3NwYWNlXG5cblxuICAgICAgX3NjYXR0ZXIoYiwgaiwgd2IsIHhiLCBtYXJrKTsgLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBtYXRyaXggdmFsdWVzIEAgaSxqXG4gICAgICAgIHZhciB2YSA9IHdhW2ldID09PSBtYXJrID8geGFbaV0gOiB6ZXJvO1xuICAgICAgICB2YXIgdmIgPSB3YltpXSA9PT0gbWFyayA/IHhiW2ldIDogemVybzsgLy8gaW52b2tlIGNhbGxiYWNrXG5cbiAgICAgICAgY2RhdGFbaV1bal0gPSBjZih2YSwgdmIpO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3NjYXR0ZXIobSwgaiwgdywgeCwgbWFyaykge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgZm9yICh2YXIgayA9IHB0cltqXSwgazEgPSBwdHJbaiArIDFdOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gcm93XG4gICAgICB2YXIgaSA9IGluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgIHdbaV0gPSBtYXJrO1xuICAgICAgeFtpXSA9IHZhbHVlc1trXTtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNyA9IGNyZWF0ZUFsZ29yaXRobTA3OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wOCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTA4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNQVgoTk5aQSwgTk5aQikgdGltZXNcbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgJiYgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpCAgQShpLGopICAgICAgIDsgQShpLGopICE9PSAwXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDgoYSwgYiwgY2FsbGJhY2spIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFhdmFsdWVzIHx8ICFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBQYXR0ZXJuIFNwYXJzZSBNYXRyaWNlcycpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGssIGswLCBrMSwgaTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW5zIG1hcmtcblxuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gbG9vcCB2YWx1ZXMgaW4gYVxuXG4gICAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGFpbmRleFtrXTsgLy8gbWFyayB3b3Jrc3BhY2VcblxuICAgICAgICB3W2ldID0gbWFyazsgLy8gc2V0IHZhbHVlXG5cbiAgICAgICAgeFtpXSA9IGF2YWx1ZXNba107IC8vIGFkZCBpbmRleFxuXG4gICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgfSAvLyBsb29wIHZhbHVlcyBpbiBiXG5cblxuICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBiaW5kZXhba107IC8vIGNoZWNrIHZhbHVlIGV4aXN0cyBpbiB3b3Jrc3BhY2VcblxuICAgICAgICBpZiAod1tpXSA9PT0gbWFyaykge1xuICAgICAgICAgIC8vIGV2YWx1YXRlIGNhbGxiYWNrXG4gICAgICAgICAgeFtpXSA9IGNmKHhbaV0sIGJ2YWx1ZXNba10pO1xuICAgICAgICB9XG4gICAgICB9IC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuXG5cbiAgICAgIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gY2luZGV4W2tdOyAvLyB2YWx1ZSBAIGlcblxuICAgICAgICB2YXIgdiA9IHhbaV07IC8vIGNoZWNrIGZvciB6ZXJvIHZhbHVlXG5cbiAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAgIC8vIHB1c2ggdmFsdWVcbiAgICAgICAgICBjdmFsdWVzLnB1c2godik7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICBrKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIGNwdHJcblxuXG4gICAgY3B0cltjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA4ID0gY3JlYXRlQWxnb3JpdGhtMDg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA5ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wOSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5aQSB0aW1lcywgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gQS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDkoYSwgYiwgY2FsbGJhY2spIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgYXJyYXlzXG5cblxuICAgIHZhciBjdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHdvcmtzcGFjZXNcblxuICAgIHZhciB4ID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGosIGssIGswLCBrMTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbiBtYXJrXG5cbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgaWYgKHgpIHtcbiAgICAgICAgLy8gbG9vcCBCKDosailcbiAgICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgICAgICB4W2ldID0gYnZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBsb29wIEEoOixqKVxuXG5cbiAgICAgIGZvciAoazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gYWluZGV4W2tdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgaWYgKHgpIHtcbiAgICAgICAgICAvLyBiIHZhbHVlIEAgaSxqXG4gICAgICAgICAgdmFyIHZiID0gd1tpXSA9PT0gbWFyayA/IHhbaV0gOiB6ZXJvOyAvLyBpbnZva2UgZlxuXG4gICAgICAgICAgdmFyIHZjID0gY2YoYXZhbHVlc1trXSwgdmIpOyAvLyBjaGVjayB6ZXJvIHZhbHVlXG5cbiAgICAgICAgICBpZiAoIWVxKHZjLCB6ZXJvKSkge1xuICAgICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHB1c2ggdmFsdWVcblxuICAgICAgICAgICAgY3ZhbHVlcy5wdXNoKHZjKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDkgPSBjcmVhdGVBbGdvcml0aG0wOTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTEwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggUyBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKFNpaiwgYikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTlogdGltZXMgKG51bWJlciBvZiBub256ZXJvIGl0ZW1zIGluIFMpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoU2lqLCBiKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgYiAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge1NjYWxhcn0gICBiICAgICAgICAgICAgICAgICBUaGUgU2NhbGFyIHZhbHVlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihiLFNpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyNjgxM1xuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTEwKHMsIGIsIGNhbGxiYWNrLCBpbnZlcnNlKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IHMuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gcy5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBzLl9wdHI7XG4gICAgdmFyIGFzaXplID0gcy5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gcy5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuICAgIGlmICghYXZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cml4IGFuZCBTY2FsYXIgdmFsdWUnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gd29ya3NwYWNlc1xuXG4gICAgdmFyIHggPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbnMgbWFya1xuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gdmFsdWVzIGluIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgciA9IGFpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHhbcl0gPSBhdmFsdWVzW2tdO1xuICAgICAgICB3W3JdID0gbWFyaztcbiAgICAgIH0gLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBDIG9uIGZpcnN0IGNvbHVtblxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIC8vIGNyZWF0ZSByb3cgYXJyYXlcbiAgICAgICAgICBjZGF0YVtpXSA9IFtdO1xuICAgICAgICB9IC8vIGNoZWNrIHNwYXJzZSBtYXRyaXggaGFzIGEgdmFsdWUgQCBpLGpcblxuXG4gICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrLCB1cGRhdGUgQ1xuICAgICAgICAgIGNkYXRhW2ldW2pdID0gaW52ZXJzZSA/IGNmKGIsIHhbaV0pIDogY2YoeFtpXSwgYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGVuc2UgbWF0cml4IHZhbHVlIEAgaSwgalxuICAgICAgICAgIGNkYXRhW2ldW2pdID0gYjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTAgPSBjcmVhdGVBbGdvcml0aG0xMDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTEgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTExID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggUyBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKFNpaiwgYikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTlogdGltZXMgKG51bWJlciBvZiBub256ZXJvIGl0ZW1zIGluIFMpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoU2lqLCBiKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge1NjYWxhcn0gICBiICAgICAgICAgICAgICAgICBUaGUgU2NhbGFyIHZhbHVlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihiLFNpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjY4MTNcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xMShzLCBiLCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGF2YWx1ZXMgPSBzLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IHMuX2luZGV4O1xuICAgIHZhciBhcHRyID0gcy5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IHMuX3NpemU7XG4gICAgdmFyIGFkdCA9IHMuX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIG9uIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCBhbmQgU2NhbGFyIHZhbHVlJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IFtdO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBpbml0aWFsaXplIHB0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIHZhbHVlcyBpbiBqXG5cbiAgICAgIGZvciAodmFyIGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgdmFyIGkgPSBhaW5kZXhba107IC8vIGludm9rZSBjYWxsYmFja1xuXG4gICAgICAgIHZhciB2ID0gaW52ZXJzZSA/IGNmKGIsIGF2YWx1ZXNba10pIDogY2YoYXZhbHVlc1trXSwgYik7IC8vIGNoZWNrIHZhbHVlIGlzIHplcm9cblxuICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleCAmIHZhbHVlXG4gICAgICAgICAgY2luZGV4LnB1c2goaSk7XG4gICAgICAgICAgY3ZhbHVlcy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIHMuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMSA9IGNyZWF0ZUFsZ29yaXRobTExOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTEyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlQWxnb3JpdGhtMTIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBTIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoU2lqLCBiKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihTaWosIGIpICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICBmKDAsIGIpICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIHMgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKFMpXG4gICAqIEBwYXJhbSB7U2NhbGFyfSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTY2FsYXIgdmFsdWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoQWlqLGIpIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKGIsU2lqKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBEZW5zZU1hdHJpeCAoQylcbiAgICpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjI2ODEzXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMTIocywgYiwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gcy5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBzLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IHMuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBzLl9zaXplO1xuICAgIHZhciBhZHQgPSBzLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeFxuXG4gICAgaWYgKCFhdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBQYXR0ZXJuIFNwYXJzZSBNYXRyaXggYW5kIFNjYWxhciB2YWx1ZScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gY29udmVydCBiIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIGIgPSB0eXBlZC5jb252ZXJ0KGIsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgYXJyYXlzXG5cblxuICAgIHZhciBjZGF0YSA9IFtdOyAvLyB3b3Jrc3BhY2VzXG5cbiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gY29sdW1ucyBtYXJrXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyB2YWx1ZXMgaW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciByID0gYWluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgeFtyXSA9IGF2YWx1ZXNba107XG4gICAgICAgIHdbcl0gPSBtYXJrO1xuICAgICAgfSAvLyBsb29wIHJvd3NcblxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBpbml0aWFsaXplIEMgb24gZmlyc3QgY29sdW1uXG4gICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgLy8gY3JlYXRlIHJvdyBhcnJheVxuICAgICAgICAgIGNkYXRhW2ldID0gW107XG4gICAgICAgIH0gLy8gY2hlY2sgc3BhcnNlIG1hdHJpeCBoYXMgYSB2YWx1ZSBAIGksalxuXG5cbiAgICAgICAgaWYgKHdbaV0gPT09IG1hcmspIHtcbiAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2ssIHVwZGF0ZSBDXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSBpbnZlcnNlID8gY2YoYiwgeFtpXSkgOiBjZih4W2ldLCBiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkZW5zZSBtYXRyaXggdmFsdWUgQCBpLCBqXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSBpbnZlcnNlID8gY2YoYiwgMCkgOiBjZigwLCBiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTIgPSBjcmVhdGVBbGdvcml0aG0xMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTEzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBEZW5zZU1hdHJpeCBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWouLnosIEJpai4ueikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTXhOIHRpbWVzLlxuICAgKlxuICAgKiBDKGksaiwuLi56KSA9IGYoQWlqLi56LCBCaWouLnopXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWouLnosQmlqLi56KSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2NTg2NThcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xMyhhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBhcnJheXNcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIGMgYXJyYXlzXG5cbiAgICB2YXIgY3NpemUgPSBbXTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIHZhbGlkYXRlIGVhY2ggb25lIG9mIHRoZSBkaW1lbnNpb24gc2l6ZXNcblxuXG4gICAgZm9yICh2YXIgcyA9IDA7IHMgPCBhc2l6ZS5sZW5ndGg7IHMrKykge1xuICAgICAgLy8gbXVzdCBtYXRjaFxuICAgICAgaWYgKGFzaXplW3NdICE9PSBic2l6ZVtzXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICAgIH0gLy8gdXBkYXRlIGRpbWVuc2lvbiBpbiBjXG5cblxuICAgICAgY3NpemVbc10gPSBhc2l6ZVtzXTtcbiAgICB9IC8vIGRhdGF0eXBlXG5cblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcG9wdWxhdGUgY2RhdGEsIGl0ZXJhdGUgdGhyb3VnaCBkaW1lbnNpb25zXG5cblxuICAgIHZhciBjZGF0YSA9IGNzaXplLmxlbmd0aCA+IDAgPyBfaXRlcmF0ZShjZiwgMCwgY3NpemUsIGNzaXplWzBdLCBhZGF0YSwgYmRhdGEpIDogW107IC8vIGMgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjZGF0YSxcbiAgICAgIHNpemU6IGNzaXplLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07IC8vIHJlY3Vyc2l2ZSBmdW5jdGlvblxuXG4gIGZ1bmN0aW9uIF9pdGVyYXRlKGYsIGxldmVsLCBzLCBuLCBhdiwgYnYpIHtcbiAgICAvLyBpbml0aWFsaXplIGFycmF5IGZvciB0aGlzIGxldmVsXG4gICAgdmFyIGN2ID0gW107IC8vIGNoZWNrIHdlIHJlYWNoIHRoZSBsYXN0IGxldmVsXG5cbiAgICBpZiAobGV2ZWwgPT09IHMubGVuZ3RoIC0gMSkge1xuICAgICAgLy8gbG9vcCBhcnJheXMgaW4gbGFzdCBsZXZlbFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrIGFuZCBzdG9yZSB2YWx1ZVxuICAgICAgICBjdltpXSA9IGYoYXZbaV0sIGJ2W2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaXRlcmF0ZSBjdXJyZW50IGxldmVsXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAvLyBpdGVyYXRlIG5leHQgbGV2ZWxcbiAgICAgICAgY3Zbal0gPSBfaXRlcmF0ZShmLCBsZXZlbCArIDEsIHMsIHNbbGV2ZWwgKyAxXSwgYXZbal0sIGJ2W2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3Y7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xNCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMTQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0xNCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgRGVuc2VNYXRyaXggaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLi56LCBiKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqIEMoaSxqLC4uLnopID0gZihBaWouLnosIGIpXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtTY2FsYXJ9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNjYWxhciB2YWx1ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWouLnosYikgb3BlcmF0aW9uIHRvIGludm9rZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoYixBaWouLnopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2NTkwNDJcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xNChhLCBiLCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcG9wdWxhdGUgY2RhdGEsIGl0ZXJhdGUgdGhyb3VnaCBkaW1lbnNpb25zXG5cblxuICAgIHZhciBjZGF0YSA9IGFzaXplLmxlbmd0aCA+IDAgPyBfaXRlcmF0ZShjZiwgMCwgYXNpemUsIGFzaXplWzBdLCBhZGF0YSwgYiwgaW52ZXJzZSkgOiBbXTsgLy8gYyBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogKDAsIF9vYmplY3QuY2xvbmUpKGFzaXplKSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9OyAvLyByZWN1cnNpdmUgZnVuY3Rpb25cblxuICBmdW5jdGlvbiBfaXRlcmF0ZShmLCBsZXZlbCwgcywgbiwgYXYsIGJ2LCBpbnZlcnNlKSB7XG4gICAgLy8gaW5pdGlhbGl6ZSBhcnJheSBmb3IgdGhpcyBsZXZlbFxuICAgIHZhciBjdiA9IFtdOyAvLyBjaGVjayB3ZSByZWFjaCB0aGUgbGFzdCBsZXZlbFxuXG4gICAgaWYgKGxldmVsID09PSBzLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vIGxvb3AgYXJyYXlzIGluIGxhc3QgbGV2ZWxcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIC8vIGludm9rZSBjYWxsYmFjayBhbmQgc3RvcmUgdmFsdWVcbiAgICAgICAgY3ZbaV0gPSBpbnZlcnNlID8gZihidiwgYXZbaV0pIDogZihhdltpXSwgYnYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpdGVyYXRlIGN1cnJlbnQgbGV2ZWxcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIC8vIGl0ZXJhdGUgbmV4dCBsZXZlbFxuICAgICAgICBjdltqXSA9IF9pdGVyYXRlKGYsIGxldmVsICsgMSwgcywgc1tsZXZlbCArIDFdLCBhdltqXSwgYnYsIGludmVyc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdjtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU51bWJlciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdudW1iZXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBudW1iZXIgb3IgY29udmVydCBhIHN0cmluZywgYm9vbGVhbiwgb3IgdW5pdCB0byBhIG51bWJlci5cbiAgICogV2hlbiB2YWx1ZSBpcyBhIG1hdHJpeCwgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIG51bWJlci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm51bWJlcih2YWx1ZSlcbiAgICogICAgbWF0aC5udW1iZXIodW5pdCwgdmFsdWVsZXNzVW5pdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubnVtYmVyKDIpICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICogICAgbWF0aC5udW1iZXIoJzcuMicpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNy4yXG4gICAqICAgIG1hdGgubnVtYmVyKHRydWUpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC5udW1iZXIoW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlXSkgLy8gcmV0dXJucyBbMSwgMCwgMSwgMV1cbiAgICogICAgbWF0aC5udW1iZXIobWF0aC51bml0KCc1MmNtJyksICdtJykgICAgLy8gcmV0dXJucyAwLjUyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IEFycmF5IHwgTWF0cml4IHwgVW5pdCB8IG51bGx9IFt2YWx1ZV0gIFZhbHVlIHRvIGJlIGNvbnZlcnRlZFxuICAgKiBAcGFyYW0ge1VuaXQgfCBzdHJpbmd9IFt2YWx1ZWxlc3NVbml0XSBBIHZhbHVlbGVzcyB1bml0LCB1c2VkIHRvIGNvbnZlcnQgYSB1bml0IHRvIGEgbnVtYmVyXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgY3JlYXRlZCBudW1iZXJcbiAgICovXG4gIHZhciBudW1iZXIgPSB0eXBlZCgnbnVtYmVyJywge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIGlmICh4ID09PSAnTmFOJykgcmV0dXJuIE5hTjtcbiAgICAgIHZhciBudW0gPSBOdW1iZXIoeCk7XG5cbiAgICAgIGlmIChpc05hTihudW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignU3RyaW5nIFwiJyArIHggKyAnXCIgaXMgbm8gdmFsaWQgbnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudW07XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50b051bWJlcigpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnZhbHVlT2YoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWNvbmQgYXJndW1lbnQgd2l0aCB2YWx1ZWxlc3MgdW5pdCBleHBlY3RlZCcpO1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgJ1VuaXQsIHN0cmluZyB8IFVuaXQnOiBmdW5jdGlvbiBVbml0U3RyaW5nVW5pdCh1bml0LCB2YWx1ZWxlc3NVbml0KSB7XG4gICAgICByZXR1cm4gdW5pdC50b051bWJlcih2YWx1ZWxlc3NVbml0KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbnVtYmVyKTtcbiAgICB9XG4gIH0pOyAvLyByZXZpdmVyIGZ1bmN0aW9uIHRvIHBhcnNlIGEgSlNPTiBvYmplY3QgbGlrZTpcbiAgLy9cbiAgLy8gICAgIHtcIm1hdGhqc1wiOlwibnVtYmVyXCIsXCJ2YWx1ZVwiOlwiMi4zXCJ9XG4gIC8vXG4gIC8vIGludG8gYSBudW1iZXIgMi4zXG5cbiAgbnVtYmVyLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChqc29uLnZhbHVlKTtcbiAgfTtcblxuICByZXR1cm4gbnVtYmVyO1xufSk7XG5leHBvcnRzLmNyZWF0ZU51bWJlciA9IGNyZWF0ZU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzdWx0U2V0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUmVzdWx0U2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbXTtcbnZhciBjcmVhdGVSZXN1bHRTZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBBIFJlc3VsdFNldCBjb250YWlucyBhIGxpc3Qgb3IgcmVzdWx0c1xuICAgKiBAY2xhc3MgUmVzdWx0U2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IGVudHJpZXNcbiAgICogQGNvbnN0cnVjdG9yIFJlc3VsdFNldFxuICAgKi9cbiAgZnVuY3Rpb24gUmVzdWx0U2V0KGVudHJpZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzdWx0U2V0KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLmVudHJpZXMgPSBlbnRyaWVzIHx8IFtdO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudHlwZSA9ICdSZXN1bHRTZXQnO1xuICBSZXN1bHRTZXQucHJvdG90eXBlLmlzUmVzdWx0U2V0ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFycmF5IHdpdGggcmVzdWx0cyBob2xkIGJ5IHRoaXMgUmVzdWx0U2V0XG4gICAqIEBtZW1iZXJvZiBSZXN1bHRTZXRcbiAgICogQHJldHVybnMge0FycmF5fSBlbnRyaWVzXG4gICAqL1xuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RyaW5naWZpZWQgcmVzdWx0cyBvZiB0aGUgUmVzdWx0U2V0XG4gICAqIEBtZW1iZXJvZiBSZXN1bHRTZXRcbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyaW5nXG4gICAqL1xuXG5cbiAgUmVzdWx0U2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ1snICsgdGhpcy5lbnRyaWVzLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBSZXN1bHRTZXRcbiAgICogQG1lbWJlcm9mIFJlc3VsdFNldFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJlc3VsdFNldFwiLCBcImVudHJpZXNcIjogWy4uLl19YFxuICAgKi9cblxuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdSZXN1bHRTZXQnLFxuICAgICAgZW50cmllczogdGhpcy5lbnRyaWVzXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgUmVzdWx0U2V0IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgUmVzdWx0U2V0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUmVzdWx0U2V0XCIsIFwiZW50cmllc1wiOiBbLi4uXX1gXG4gICAqIEByZXR1cm4ge1Jlc3VsdFNldH1cbiAgICovXG5cblxuICBSZXN1bHRTZXQuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUmVzdWx0U2V0KGpzb24uZW50cmllcyk7XG4gIH07XG5cbiAgcmV0dXJuIFJlc3VsdFNldDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc3VsdFNldCA9IGNyZWF0ZVJlc3VsdFNldDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RyaW5nID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnc3RyaW5nJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlU3RyaW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgc3RyaW5nIG9yIGNvbnZlcnQgYW55IG9iamVjdCBpbnRvIGEgc3RyaW5nLlxuICAgKiBFbGVtZW50cyBvZiBBcnJheXMgYW5kIE1hdHJpY2VzIGFyZSBwcm9jZXNzZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3RyaW5nKHZhbHVlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdHJpbmcoNC4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgc3RyaW5nICc0LjInXG4gICAqICAgIG1hdGguc3RyaW5nKG1hdGguY29tcGxleCgzLCAyKSAvLyByZXR1cm5zIHN0cmluZyAnMyArIDJpJ1xuICAgKlxuICAgKiAgICBjb25zdCB1ID0gbWF0aC51bml0KDUsICdrbScpXG4gICAqICAgIG1hdGguc3RyaW5nKHUudG8oJ20nKSkgICAgICAgICAvLyByZXR1cm5zIHN0cmluZyAnNTAwMCBtJ1xuICAgKlxuICAgKiAgICBtYXRoLnN0cmluZyhbdHJ1ZSwgZmFsc2VdKSAgICAgLy8gcmV0dXJucyBbJ3RydWUnLCAnZmFsc2UnXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBjb21wbGV4LCBpbmRleCwgbWF0cml4LCBudW1iZXIsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHsqIHwgQXJyYXkgfCBNYXRyaXggfCBudWxsfSBbdmFsdWVdICBBIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmdcbiAgICogQHJldHVybiB7c3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBjcmVhdGVkIHN0cmluZ1xuICAgKi9cbiAgdmFyIHN0cmluZyA9IHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIG51bWJlcjogX251bWJlci5mb3JtYXQsXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfSxcbiAgICBcImJvb2xlYW5cIjogZnVuY3Rpb24gYm9vbGVhbih4KSB7XG4gICAgICByZXR1cm4geCArICcnO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHN0cmluZyk7XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHgpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdHJpbmc7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3RyaW5nID0gY3JlYXRlU3RyaW5nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0Q2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2NvbnN0YW50c1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG52YXIgbmFtZSA9ICdVbml0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJz9vbicsICdjb25maWcnLCAnYWRkU2NhbGFyJywgJ3N1YnRyYWN0JywgJ211bHRpcGx5U2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdwb3cnLCAnYWJzJywgJ2ZpeCcsICdyb3VuZCcsICdlcXVhbCcsICdpc051bWVyaWMnLCAnZm9ybWF0JywgJ251bWJlcicsICdDb21wbGV4JywgJ0JpZ051bWJlcicsICdGcmFjdGlvbiddO1xudmFyIGNyZWF0ZVVuaXRDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBvbiA9IF9yZWYub24sXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgZml4ID0gX3JlZi5maXgsXG4gICAgICByb3VuZCA9IF9yZWYucm91bmQsXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYyxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxuICAgICAgbnVtYmVyID0gX3JlZi5udW1iZXIsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgX0ZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcbiAgdmFyIHRvTnVtYmVyID0gbnVtYmVyO1xuICAvKipcbiAgICogQSB1bml0IGNhbiBiZSBjb25zdHJ1Y3RlZCBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gICAqXG4gICAqICAgICBjb25zdCBhID0gbmV3IFVuaXQodmFsdWUsIG5hbWUpXG4gICAqICAgICBjb25zdCBiID0gbmV3IFVuaXQobnVsbCwgbmFtZSlcbiAgICogICAgIGNvbnN0IGMgPSBVbml0LnBhcnNlKHN0cilcbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIGNvbnN0IGEgPSBuZXcgVW5pdCg1LCAnY20nKSAgICAgICAgICAgICAgIC8vIDUwIG1tXG4gICAqICAgICBjb25zdCBiID0gVW5pdC5wYXJzZSgnMjMga2cnKSAgICAgICAgICAgICAvLyAyMyBrZ1xuICAgKiAgICAgY29uc3QgYyA9IG1hdGguaW4oYSwgbmV3IFVuaXQobnVsbCwgJ20nKSAgLy8gMC4wNSBtXG4gICAqICAgICBjb25zdCBkID0gbmV3IFVuaXQoOS44MSwgXCJtL3NeMlwiKSAgICAgICAgIC8vIDkuODEgbS9zXjJcbiAgICpcbiAgICogQGNsYXNzIFVuaXRcbiAgICogQGNvbnN0cnVjdG9yIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBib29sZWFufSBbdmFsdWVdICBBIHZhbHVlIGxpa2UgNS4yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gICBBIHVuaXQgbmFtZSBsaWtlIFwiY21cIiBvciBcImluY2hcIiwgb3IgYSBkZXJpdmVkIHVuaXQgb2YgdGhlIGZvcm06IFwidTFbXmV4MV0gW3UyW15leDJdIC4uLl0gWy8gdTNbXmV4M10gW3U0W15leDRdXV1cIiwgc3VjaCBhcyBcImtnIG1eMi9zXjJcIiwgd2hlcmUgZWFjaCB1bml0IGFwcGVhcmluZyBhZnRlciB0aGUgZm9yd2FyZCBzbGFzaCBpcyB0YWtlbiB0byBiZSBpbiB0aGUgZGVub21pbmF0b3IuIFwia2cgbV4yIHNeLTJcIiBpcyBhIHN5bm9ueW0gYW5kIGlzIGFsc28gYWNjZXB0YWJsZS4gQW55IG9mIHRoZSB1bml0cyBjYW4gaW5jbHVkZSBhIHByZWZpeC5cbiAgICovXG5cbiAgZnVuY3Rpb24gVW5pdCh2YWx1ZSwgbmFtZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVbml0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGlzTnVtZXJpYyh2YWx1ZSkgfHwgKDAsIF9pcy5pc0NvbXBsZXgpKHZhbHVlKSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IHBhcmFtZXRlciBpbiBVbml0IGNvbnN0cnVjdG9yIG11c3QgYmUgbnVtYmVyLCBCaWdOdW1iZXIsIEZyYWN0aW9uLCBDb21wbGV4LCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZSA9PT0gJycpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTZWNvbmQgcGFyYW1ldGVyIGluIFVuaXQgY29uc3RydWN0b3IgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciB1ID0gVW5pdC5wYXJzZShuYW1lKTtcbiAgICAgIHRoaXMudW5pdHMgPSB1LnVuaXRzO1xuICAgICAgdGhpcy5kaW1lbnNpb25zID0gdS5kaW1lbnNpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVuaXRzID0gW3tcbiAgICAgICAgdW5pdDogVU5JVF9OT05FLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkUsXG4gICAgICAgIC8vIGxpbmsgdG8gYSBsaXN0IHdpdGggc3VwcG9ydGVkIHByZWZpeGVzXG4gICAgICAgIHBvd2VyOiAwXG4gICAgICB9XTtcbiAgICAgIHRoaXMuZGltZW5zaW9ucyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmRpbWVuc2lvbnNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKHZhbHVlKSA6IG51bGw7XG4gICAgdGhpcy5maXhQcmVmaXggPSBmYWxzZTsgLy8gaWYgdHJ1ZSwgZnVuY3Rpb24gZm9ybWF0IHdpbGwgbm90IHNlYXJjaCBmb3IgdGhlXG4gICAgLy8gYmVzdCBwcmVmaXggYnV0IGxlYXZlIGl0IGFzIGluaXRpYWxseSBwcm92aWRlZC5cbiAgICAvLyBmaXhQcmVmaXggaXMgc2V0IHRydWUgYnkgdGhlIG1ldGhvZCBVbml0LnRvXG4gICAgLy8gVGhlIGp1c3RpZmljYXRpb24gYmVoaW5kIHRoaXMgaXMgdGhhdCBpZiB0aGUgY29uc3RydWN0b3IgaXMgZXhwbGljaXRseSBjYWxsZWQsXG4gICAgLy8gdGhlIGNhbGxlciB3aXNoZXMgdGhlIHVuaXRzIHRvIGJlIHJldHVybmVkIGV4YWN0bHkgYXMgaGUgc3VwcGxpZWQuXG5cbiAgICB0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudHlwZSA9ICdVbml0JztcbiAgVW5pdC5wcm90b3R5cGUuaXNVbml0ID0gdHJ1ZTsgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIFVuaXQgcGFyc2VyXG5cbiAgdmFyIHRleHQsIGluZGV4LCBjO1xuXG4gIGZ1bmN0aW9uIHNraXBXaGl0ZXNwYWNlKCkge1xuICAgIHdoaWxlIChjID09PSAnICcgfHwgYyA9PT0gJ1xcdCcpIHtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc0RpZ2l0RG90KGMpIHtcbiAgICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgYyA9PT0gJy4nO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNEaWdpdChjKSB7XG4gICAgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICBpbmRleCsrO1xuICAgIGMgPSB0ZXh0LmNoYXJBdChpbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnQob2xkSW5kZXgpIHtcbiAgICBpbmRleCA9IG9sZEluZGV4O1xuICAgIGMgPSB0ZXh0LmNoYXJBdChpbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU51bWJlcigpIHtcbiAgICB2YXIgbnVtYmVyID0gJyc7XG4gICAgdmFyIG9sZEluZGV4ID0gaW5kZXg7XG5cbiAgICBpZiAoYyA9PT0gJysnKSB7XG4gICAgICBuZXh0KCk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnLScpIHtcbiAgICAgIG51bWJlciArPSBjO1xuICAgICAgbmV4dCgpO1xuICAgIH1cblxuICAgIGlmICghaXNEaWdpdERvdChjKSkge1xuICAgICAgLy8gYSArIG9yIC0gbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRpZ2l0XG4gICAgICByZXZlcnQob2xkSW5kZXgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBnZXQgbnVtYmVyLCBjYW4gaGF2ZSBhIHNpbmdsZSBkb3RcblxuXG4gICAgaWYgKGMgPT09ICcuJykge1xuICAgICAgbnVtYmVyICs9IGM7XG4gICAgICBuZXh0KCk7XG5cbiAgICAgIGlmICghaXNEaWdpdChjKSkge1xuICAgICAgICAvLyB0aGlzIGlzIG5vIGxlZ2FsIG51bWJlciwgaXQgaXMganVzdCBhIGRvdFxuICAgICAgICByZXZlcnQob2xkSW5kZXgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGlzRGlnaXQoYykpIHtcbiAgICAgICAgbnVtYmVyICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGMgPT09ICcuJykge1xuICAgICAgICBudW1iZXIgKz0gYztcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChpc0RpZ2l0KGMpKSB7XG4gICAgICBudW1iZXIgKz0gYztcbiAgICAgIG5leHQoKTtcbiAgICB9IC8vIGNoZWNrIGZvciBleHBvbmVudGlhbCBub3RhdGlvbiBsaWtlIFwiMi4zZS00XCIgb3IgXCIxLjIzZTUwXCJcblxuXG4gICAgaWYgKGMgPT09ICdFJyB8fCBjID09PSAnZScpIHtcbiAgICAgIC8vIFRoZSBncmFtbWFyIGJyYW5jaGVzIGhlcmUuIFRoaXMgY291bGQgZWl0aGVyIGJlIHBhcnQgb2YgYW4gZXhwb25lbnQgb3IgdGhlIHN0YXJ0IG9mIGEgdW5pdCB0aGF0IGJlZ2lucyB3aXRoIHRoZSBsZXR0ZXIgZSwgc3VjaCBhcyBcIjRleGFieXRlc1wiXG4gICAgICB2YXIgdGVudGF0aXZlTnVtYmVyID0gJyc7XG4gICAgICB2YXIgdGVudGF0aXZlSW5kZXggPSBpbmRleDtcbiAgICAgIHRlbnRhdGl2ZU51bWJlciArPSBjO1xuICAgICAgbmV4dCgpO1xuXG4gICAgICBpZiAoYyA9PT0gJysnIHx8IGMgPT09ICctJykge1xuICAgICAgICB0ZW50YXRpdmVOdW1iZXIgKz0gYztcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSAvLyBTY2llbnRpZmljIG5vdGF0aW9uIE1VU1QgYmUgZm9sbG93ZWQgYnkgYW4gZXhwb25lbnQgKG90aGVyd2lzZSB3ZSBhc3N1bWUgaXQgaXMgbm90IHNjaWVudGlmaWMgbm90YXRpb24pXG5cblxuICAgICAgaWYgKCFpc0RpZ2l0KGMpKSB7XG4gICAgICAgIC8vIFRoZSBlIG9yIEUgbXVzdCBiZWxvbmcgdG8gc29tZXRoaW5nIGVsc2UsIHNvIHJldHVybiB0aGUgbnVtYmVyIHdpdGhvdXQgdGhlIGUgb3IgRS5cbiAgICAgICAgcmV2ZXJ0KHRlbnRhdGl2ZUluZGV4KTtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgIH0gLy8gV2UgY2FuIG5vdyBzYWZlbHkgc2F5IHRoYXQgdGhpcyBpcyBzY2llbnRpZmljIG5vdGF0aW9uLlxuXG5cbiAgICAgIG51bWJlciA9IG51bWJlciArIHRlbnRhdGl2ZU51bWJlcjtcblxuICAgICAgd2hpbGUgKGlzRGlnaXQoYykpIHtcbiAgICAgICAgbnVtYmVyICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VVbml0KCkge1xuICAgIHZhciB1bml0TmFtZSA9ICcnOyAvLyBBbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvbmx5OyBtYXRjaGVzIFthLXpBLVowLTldXG5cbiAgICB2YXIgY29kZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICB3aGlsZSAoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3IHx8IGNvZGUgPj0gNjUgJiYgY29kZSA8PSA5MCB8fCBjb2RlID49IDk3ICYmIGNvZGUgPD0gMTIyKSB7XG4gICAgICB1bml0TmFtZSArPSBjO1xuICAgICAgbmV4dCgpO1xuICAgICAgY29kZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7XG4gICAgfSAvLyBNdXN0IGJlZ2luIHdpdGggW2EtekEtWl1cblxuXG4gICAgY29kZSA9IHVuaXROYW1lLmNoYXJDb2RlQXQoMCk7XG5cbiAgICBpZiAoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDkwIHx8IGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMjIpIHtcbiAgICAgIHJldHVybiB1bml0TmFtZSB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNoYXJhY3Rlcih0b0ZpbmQpIHtcbiAgICBpZiAoYyA9PT0gdG9GaW5kKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm4gdG9GaW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSB1bml0LiBUaGUgdmFsdWUgb2YgdGhlIHVuaXQgaXMgcGFyc2VkIGFzIG51bWJlcixcbiAgICogQmlnTnVtYmVyLCBvciBGcmFjdGlvbiBkZXBlbmRpbmcgb24gdGhlIG1hdGguanMgY29uZmlnIHNldHRpbmcgYG51bWJlcmAuXG4gICAqXG4gICAqIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdW5pdCBvclxuICAgKiBjYW5ub3QgYmUgcGFyc2VkLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyICAgICAgICBBIHN0cmluZyBsaWtlIFwiNS4yIGluY2hcIiwgXCI0ZTIgY20vc14yXCJcbiAgICogQHJldHVybiB7VW5pdH0gdW5pdFxuICAgKi9cblxuXG4gIFVuaXQucGFyc2UgPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGV4dCA9IHN0cjtcbiAgICBpbmRleCA9IC0xO1xuICAgIGMgPSAnJztcblxuICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgaW4gVW5pdC5wYXJzZSwgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgdmFyIHVuaXQgPSBuZXcgVW5pdCgpO1xuICAgIHVuaXQudW5pdHMgPSBbXTtcbiAgICB2YXIgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7XG4gICAgdmFyIGV4cGVjdGluZ1VuaXQgPSBmYWxzZTsgLy8gQSB1bml0IHNob3VsZCBmb2xsb3cgdGhpcyBwYXR0ZXJuOlxuICAgIC8vIFtudW1iZXJdIC4uLlsgWyovXSB1bml0W15udW1iZXJdIF1cbiAgICAvLyB1bml0W15udW1iZXJdIC4uLiBbIFsqL10gdW5pdFtebnVtYmVyXSBdXG4gICAgLy8gUnVsZXM6XG4gICAgLy8gbnVtYmVyIGlzIGFueSBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gICAgLy8gdW5pdCBpcyBhbnkgYWxwaGFudW1lcmljIHN0cmluZyBiZWdpbm5pbmcgd2l0aCBhbiBhbHBoYS4gVW5pdHMgd2l0aCBuYW1lcyBsaWtlIGUzIHNob3VsZCBiZSBhdm9pZGVkIGJlY2F1c2UgdGhleSBsb29rIGxpa2UgdGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIVxuICAgIC8vIFRoZSBzdHJpbmcgbWF5IG9wdGlvbmFsbHkgYmVnaW4gd2l0aCBhIG51bWJlci5cbiAgICAvLyBFYWNoIHVuaXQgbWF5IG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgXm51bWJlci5cbiAgICAvLyBXaGl0ZXNwYWNlIG9yIGEgZm9yd2FyZCBzbGFzaCBpcyByZWNvbW1lbmRlZCBiZXR3ZWVuIGNvbnNlY3V0aXZlIHVuaXRzLCBhbHRob3VnaCB0aGUgZm9sbG93aW5nIHRlY2huaWNhbGx5IGlzIHBhcnNlYWJsZTpcbiAgICAvLyAgIDJtXjJrZy9zXjJcbiAgICAvLyBpdCBpcyBub3QgZ29vZCBmb3JtLiBJZiBhIHVuaXQgc3RhcnRzIHdpdGggZSwgdGhlbiBpdCBjb3VsZCBiZSBjb25mdXNlZCBhcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlcjpcbiAgICAvLyAgIDRlcmdcblxuICAgIG5leHQoKTtcbiAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBPcHRpb25hbCBudW1iZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmdcblxuICAgIHZhciB2YWx1ZVN0ciA9IHBhcnNlTnVtYmVyKCk7XG4gICAgdmFyIHZhbHVlID0gbnVsbDtcblxuICAgIGlmICh2YWx1ZVN0cikge1xuICAgICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IF9CaWdOdW1iZXIodmFsdWVTdHIpO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcubnVtYmVyID09PSAnRnJhY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gbm90IGFsbCBudW1iZXJzIGNhbiBiZSB0dXJuZWQgaW4gRnJhY3Rpb25zLCBmb3IgZXhhbXBsZSB2ZXJ5IHNtYWxsIG51bWJlcnMgbm90XG4gICAgICAgICAgdmFsdWUgPSBuZXcgX0ZyYWN0aW9uKHZhbHVlU3RyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlU3RyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZVN0cik7XG4gICAgICB9XG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7IC8vIFdoaXRlc3BhY2UgaXMgbm90IHJlcXVpcmVkIGhlcmVcbiAgICAgIC8vIGhhbmRsZSBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbiByaWdodCBhZnRlciB0aGUgdmFsdWUsIGxpa2UgJzEvcydcblxuICAgICAgaWYgKHBhcnNlQ2hhcmFjdGVyKCcqJykpIHtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7XG4gICAgICAgIGV4cGVjdGluZ1VuaXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUNoYXJhY3RlcignLycpKSB7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAtMTtcbiAgICAgICAgZXhwZWN0aW5nVW5pdCA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBTdGFjayB0byBrZWVwIHRyYWNrIG9mIHBvd2VyTXVsdGlwbGllcnMgYXBwbGllZCB0byBlYWNoIHBhcmVudGhlc2VzIGdyb3VwXG5cblxuICAgIHZhciBwb3dlck11bHRpcGxpZXJTdGFjayA9IFtdOyAvLyBSdW5uaW5nIHByb2R1Y3Qgb2YgYWxsIGVsZW1lbnRzIGluIHBvd2VyTXVsdGlwbGllclN0YWNrXG5cbiAgICB2YXIgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0ID0gMTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBDaGVjayBmb3IgYW5kIGNvbnN1bWUgb3BlbmluZyBwYXJlbnRoZXNlcywgcHVzaGluZyBwb3dlck11bHRpcGxpZXJDdXJyZW50IHRvIHRoZSBzdGFja1xuICAgICAgLy8gQSAnKCcgd2lsbCBhbHdheXMgYXBwZWFyIGRpcmVjdGx5IGJlZm9yZSBhIHVuaXQuXG5cbiAgICAgIHdoaWxlIChjID09PSAnKCcpIHtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2sucHVzaChwb3dlck11bHRpcGxpZXJDdXJyZW50KTtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0ICo9IHBvd2VyTXVsdGlwbGllckN1cnJlbnQ7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICB9IC8vIElzIHRoZXJlIHNvbWV0aGluZyBoZXJlP1xuXG5cbiAgICAgIHZhciB1U3RyID0gdm9pZCAwO1xuXG4gICAgICBpZiAoYykge1xuICAgICAgICB2YXIgb2xkQyA9IGM7XG4gICAgICAgIHVTdHIgPSBwYXJzZVVuaXQoKTtcblxuICAgICAgICBpZiAodVN0ciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5leHBlY3RlZCBcIicgKyBvbGRDICsgJ1wiIGluIFwiJyArIHRleHQgKyAnXCIgYXQgaW5kZXggJyArIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBFbmQgb2YgaW5wdXQuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBWZXJpZnkgdGhlIHVuaXQgZXhpc3RzIGFuZCBnZXQgdGhlIHByZWZpeCAoaWYgYW55KVxuXG5cbiAgICAgIHZhciByZXMgPSBfZmluZFVuaXQodVN0cik7XG5cbiAgICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVW5pdCBub3QgZm91bmQuXG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5pdCBcIicgKyB1U3RyICsgJ1wiIG5vdCBmb3VuZC4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvd2VyID0gcG93ZXJNdWx0aXBsaWVyQ3VycmVudCAqIHBvd2VyTXVsdGlwbGllclN0YWNrUHJvZHVjdDsgLy8gSXMgdGhlcmUgYSBcIl4gbnVtYmVyXCI/XG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICAgIGlmIChwYXJzZUNoYXJhY3RlcignXicpKSB7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICAgIHZhciBwID0gcGFyc2VOdW1iZXIoKTtcblxuICAgICAgICBpZiAocCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIE5vIHZhbGlkIG51bWJlciBmb3VuZCBmb3IgdGhlIHBvd2VyIVxuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW4gXCInICsgc3RyICsgJ1wiLCBcIl5cIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwb3dlciAqPSBwO1xuICAgICAgfSAvLyBBZGQgdGhlIHVuaXQgdG8gdGhlIGxpc3RcblxuXG4gICAgICB1bml0LnVuaXRzLnB1c2goe1xuICAgICAgICB1bml0OiByZXMudW5pdCxcbiAgICAgICAgcHJlZml4OiByZXMucHJlZml4LFxuICAgICAgICBwb3dlcjogcG93ZXJcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1bml0LmRpbWVuc2lvbnNbaV0gKz0gKHJlcy51bml0LmRpbWVuc2lvbnNbaV0gfHwgMCkgKiBwb3dlcjtcbiAgICAgIH0gLy8gQ2hlY2sgZm9yIGFuZCBjb25zdW1lIGNsb3NpbmcgcGFyZW50aGVzZXMsIHBvcHBpbmcgZnJvbSB0aGUgc3RhY2suXG4gICAgICAvLyBBICcpJyB3aWxsIGFsd2F5cyBmb2xsb3cgYSB1bml0LlxuXG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICAgIHdoaWxlIChjID09PSAnKScpIHtcbiAgICAgICAgaWYgKHBvd2VyTXVsdGlwbGllclN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkIFwiKVwiIGluIFwiJyArIHRleHQgKyAnXCIgYXQgaW5kZXggJyArIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0IC89IHBvd2VyTXVsdGlwbGllclN0YWNrLnBvcCgpO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICB9IC8vIFwiKlwiIGFuZCBcIi9cIiBzaG91bGQgbWVhbiB3ZSBhcmUgZXhwZWN0aW5nIHNvbWV0aGluZyB0byBjb21lIG5leHQuXG4gICAgICAvLyBJcyB0aGVyZSBhIGZvcndhcmQgc2xhc2g/IElmIHNvLCBuZWdhdGUgcG93ZXJNdWx0aXBsaWVyQ3VycmVudC4gVGhlIG5leHQgdW5pdCBvciBwYXJlbiBncm91cCBpcyBpbiB0aGUgZGVub21pbmF0b3IuXG5cblxuICAgICAgZXhwZWN0aW5nVW5pdCA9IGZhbHNlO1xuXG4gICAgICBpZiAocGFyc2VDaGFyYWN0ZXIoJyonKSkge1xuICAgICAgICAvLyBleHBsaWNpdCBtdWx0aXBsaWNhdGlvblxuICAgICAgICBwb3dlck11bHRpcGxpZXJDdXJyZW50ID0gMTtcbiAgICAgICAgZXhwZWN0aW5nVW5pdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlQ2hhcmFjdGVyKCcvJykpIHtcbiAgICAgICAgLy8gZGl2aXNpb25cbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IC0xO1xuICAgICAgICBleHBlY3RpbmdVbml0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxO1xuICAgICAgfSAvLyBSZXBsYWNlIHRoZSB1bml0IGludG8gdGhlIGF1dG8gdW5pdCBzeXN0ZW1cblxuXG4gICAgICBpZiAocmVzLnVuaXQuYmFzZSkge1xuICAgICAgICB2YXIgYmFzZURpbSA9IHJlcy51bml0LmJhc2Uua2V5O1xuICAgICAgICBVTklUX1NZU1RFTVMuYXV0b1tiYXNlRGltXSA9IHtcbiAgICAgICAgICB1bml0OiByZXMudW5pdCxcbiAgICAgICAgICBwcmVmaXg6IHJlcy5wcmVmaXhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IC8vIEhhcyB0aGUgc3RyaW5nIGJlZW4gZW50aXJlbHkgY29uc3VtZWQ/XG5cblxuICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICBpZiAoYykge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb3VsZCBub3QgcGFyc2U6IFwiJyArIHN0ciArICdcIicpO1xuICAgIH0gLy8gSXMgdGhlcmUgYSB0cmFpbGluZyBzbGFzaD9cblxuXG4gICAgaWYgKGV4cGVjdGluZ1VuaXQpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVHJhaWxpbmcgY2hhcmFjdGVyczogXCInICsgc3RyICsgJ1wiJyk7XG4gICAgfSAvLyBJcyB0aGUgcGFyZW50aGVzZXMgc3RhY2sgZW1wdHk/XG5cblxuICAgIGlmIChwb3dlck11bHRpcGxpZXJTdGFjay5sZW5ndGggIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkIFwiKFwiIGluIFwiJyArIHRleHQgKyAnXCInKTtcbiAgICB9IC8vIEFyZSB0aGVyZSBhbnkgdW5pdHMgYXQgYWxsP1xuXG5cbiAgICBpZiAodW5pdC51bml0cy5sZW5ndGggPT09IDAgJiYgIW9wdGlvbnMuYWxsb3dOb1VuaXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1wiJyArIHN0ciArICdcIiBjb250YWlucyBubyB1bml0cycpO1xuICAgIH1cblxuICAgIHVuaXQudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdW5pdC5fbm9ybWFsaXplKHZhbHVlKSA6IG51bGw7XG4gICAgcmV0dXJuIHVuaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoaXMgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtVbml0fSBSZXR1cm5zIGEgY2xvbmVkIHZlcnNpb24gb2YgdGhlIHVuaXRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdW5pdCA9IG5ldyBVbml0KCk7XG4gICAgdW5pdC5maXhQcmVmaXggPSB0aGlzLmZpeFByZWZpeDtcbiAgICB1bml0LnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IHRoaXMuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uO1xuICAgIHVuaXQudmFsdWUgPSAoMCwgX29iamVjdC5jbG9uZSkodGhpcy52YWx1ZSk7XG4gICAgdW5pdC5kaW1lbnNpb25zID0gdGhpcy5kaW1lbnNpb25zLnNsaWNlKDApO1xuICAgIHVuaXQudW5pdHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdW5pdC51bml0c1tpXSA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBwIGluIHRoaXMudW5pdHNbaV0pIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnVuaXRzW2ldLCBwKSkge1xuICAgICAgICAgIHVuaXQudW5pdHNbaV1bcF0gPSB0aGlzLnVuaXRzW2ldW3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgdW5pdCBpcyBkZXJpdmVkIChzdWNoIGFzIG0vcywgb3IgY21eMiwgYnV0IG5vdCBOKVxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB1bml0IGlzIGRlcml2ZWRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5faXNEZXJpdmVkID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVuaXRzLmxlbmd0aCA+IDEgfHwgTWF0aC5hYnModGhpcy51bml0c1swXS5wb3dlciAtIDEuMCkgPiAxZS0xNTtcbiAgfTtcbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBhIHZhbHVlLCBiYXNlZCBvbiBpdHMgY3VycmVudGx5IHNldCB1bml0KHMpXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFufSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW59IG5vcm1hbGl6ZWQgdmFsdWVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5fbm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIHVuaXRWYWx1ZSwgdW5pdE9mZnNldCwgdW5pdFBvd2VyLCB1bml0UHJlZml4VmFsdWU7XG4gICAgdmFyIGNvbnZlcnQ7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faXNEZXJpdmVkKCkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBkZXJpdmVkIHVuaXQsIHNvIGRvIG5vdCBhcHBseSBvZmZzZXRzLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIHdpdGggSiBrZ14tMSBkZWdDXi0xIHlvdSB3b3VsZCBOT1Qgd2FudCB0byBhcHBseSB0aGUgb2Zmc2V0LlxuICAgICAgdmFyIHJlcyA9IHZhbHVlO1xuICAgICAgY29udmVydCA9IFVuaXQuX2dldE51bWJlckNvbnZlcnRlcigoMCwgX2lzLnR5cGVPZikodmFsdWUpKTsgLy8gY29udmVydCB0byBGcmFjdGlvbiBvciBCaWdOdW1iZXIgaWYgbmVlZGVkXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1bml0VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0udW5pdC52YWx1ZSk7XG4gICAgICAgIHVuaXRQcmVmaXhWYWx1ZSA9IGNvbnZlcnQodGhpcy51bml0c1tpXS5wcmVmaXgudmFsdWUpO1xuICAgICAgICB1bml0UG93ZXIgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0ucG93ZXIpO1xuICAgICAgICByZXMgPSBtdWx0aXBseVNjYWxhcihyZXMsIHBvdyhtdWx0aXBseVNjYWxhcih1bml0VmFsdWUsIHVuaXRQcmVmaXhWYWx1ZSksIHVuaXRQb3dlcikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc2luZ2xlIHVuaXQgb2YgcG93ZXIgMSwgbGlrZSBrZyBvciBkZWdDXG4gICAgICBjb252ZXJ0ID0gVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyKCgwLCBfaXMudHlwZU9mKSh2YWx1ZSkpOyAvLyBjb252ZXJ0IHRvIEZyYWN0aW9uIG9yIEJpZ051bWJlciBpZiBuZWVkZWRcblxuICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzWzBdLnVuaXQudmFsdWUpO1xuICAgICAgdW5pdE9mZnNldCA9IGNvbnZlcnQodGhpcy51bml0c1swXS51bml0Lm9mZnNldCk7XG4gICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0ucHJlZml4LnZhbHVlKTtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihhZGRTY2FsYXIodmFsdWUsIHVuaXRPZmZzZXQpLCBtdWx0aXBseVNjYWxhcih1bml0VmFsdWUsIHVuaXRQcmVmaXhWYWx1ZSkpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIERlbm9ybWFsaXplIGEgdmFsdWUsIGJhc2VkIG9uIGl0cyBjdXJyZW50bHkgc2V0IHVuaXQocylcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlZml4VmFsdWVdICAgIE9wdGlvbmFsIHByZWZpeCB2YWx1ZSB0byBiZSB1c2VkIChpZ25vcmVkIGlmIHRoaXMgaXMgYSBkZXJpdmVkIHVuaXQpXG4gICAqIEByZXR1cm4ge251bWJlcn0gZGVub3JtYWxpemVkIHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuX2Rlbm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlLCBwcmVmaXhWYWx1ZSkge1xuICAgIHZhciB1bml0VmFsdWUsIHVuaXRPZmZzZXQsIHVuaXRQb3dlciwgdW5pdFByZWZpeFZhbHVlO1xuICAgIHZhciBjb252ZXJ0O1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy51bml0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzRGVyaXZlZCgpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgZGVyaXZlZCB1bml0LCBzbyBkbyBub3QgYXBwbHkgb2Zmc2V0cy5cbiAgICAgIC8vIEZvciBleGFtcGxlLCB3aXRoIEoga2deLTEgZGVnQ14tMSB5b3Ugd291bGQgTk9UIHdhbnQgdG8gYXBwbHkgdGhlIG9mZnNldC5cbiAgICAgIC8vIEFsc28sIHByZWZpeFZhbHVlIGlzIGlnbm9yZWQtLWJ1dCB3ZSB3aWxsIHN0aWxsIHVzZSB0aGUgcHJlZml4IHZhbHVlIHN0b3JlZCBpbiBlYWNoIHVuaXQsIHNpbmNlIGtnIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBnIHVubGVzcyB0aGUgdXNlciBkZWNpZGVzIG90aGVyd2lzZS5cbiAgICAgIHZhciByZXMgPSB2YWx1ZTtcbiAgICAgIGNvbnZlcnQgPSBVbml0Ll9nZXROdW1iZXJDb252ZXJ0ZXIoKDAsIF9pcy50eXBlT2YpKHZhbHVlKSk7IC8vIGNvbnZlcnQgdG8gRnJhY3Rpb24gb3IgQmlnTnVtYmVyIGlmIG5lZWRlZFxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnVuaXQudmFsdWUpO1xuICAgICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0ucHJlZml4LnZhbHVlKTtcbiAgICAgICAgdW5pdFBvd2VyID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnBvd2VyKTtcbiAgICAgICAgcmVzID0gZGl2aWRlU2NhbGFyKHJlcywgcG93KG11bHRpcGx5U2NhbGFyKHVuaXRWYWx1ZSwgdW5pdFByZWZpeFZhbHVlKSwgdW5pdFBvd2VyKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBzaW5nbGUgdW5pdCBvZiBwb3dlciAxLCBsaWtlIGtnIG9yIGRlZ0NcbiAgICAgIGNvbnZlcnQgPSBVbml0Ll9nZXROdW1iZXJDb252ZXJ0ZXIoKDAsIF9pcy50eXBlT2YpKHZhbHVlKSk7IC8vIGNvbnZlcnQgdG8gRnJhY3Rpb24gb3IgQmlnTnVtYmVyIGlmIG5lZWRlZFxuXG4gICAgICB1bml0VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC52YWx1ZSk7XG4gICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0ucHJlZml4LnZhbHVlKTtcbiAgICAgIHVuaXRPZmZzZXQgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC5vZmZzZXQpO1xuXG4gICAgICBpZiAocHJlZml4VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcmVmaXhWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3VidHJhY3QoZGl2aWRlU2NhbGFyKGRpdmlkZVNjYWxhcih2YWx1ZSwgdW5pdFZhbHVlKSwgdW5pdFByZWZpeFZhbHVlKSwgdW5pdE9mZnNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3VidHJhY3QoZGl2aWRlU2NhbGFyKGRpdmlkZVNjYWxhcih2YWx1ZSwgdW5pdFZhbHVlKSwgcHJlZml4VmFsdWUpLCB1bml0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBGaW5kIGEgdW5pdCBmcm9tIGEgc3RyaW5nXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICAgIEEgc3RyaW5nIGxpa2UgJ2NtJyBvciAnaW5jaCdcbiAgICogQHJldHVybnMge09iamVjdCB8IG51bGx9IHJlc3VsdCAgV2hlbiBmb3VuZCwgYW4gb2JqZWN0IHdpdGggZmllbGRzIHVuaXQgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCBpcyByZXR1cm5lZC4gRWxzZSwgbnVsbCBpcyByZXR1cm5lZC5cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfZmluZFVuaXQoc3RyKSB7XG4gICAgLy8gRmlyc3QsIG1hdGNoIHVuaXRzIG5hbWVzIGV4YWN0bHkuIEZvciBleGFtcGxlLCBhIHVzZXIgY291bGQgZGVmaW5lICdtbScgYXMgMTBeLTQgbSwgd2hpY2ggaXMgc2lsbHksIGJ1dCB0aGVuIHdlIHdvdWxkIHdhbnQgJ21tJyB0byBtYXRjaCB0aGUgdXNlci1kZWZpbmVkIHVuaXQuXG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShVTklUUywgc3RyKSkge1xuICAgICAgdmFyIHVuaXQgPSBVTklUU1tzdHJdO1xuICAgICAgdmFyIHByZWZpeCA9IHVuaXQucHJlZml4ZXNbJyddO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdW5pdDogdW5pdCxcbiAgICAgICAgcHJlZml4OiBwcmVmaXhcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX25hbWUgaW4gVU5JVFMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVFMsIF9uYW1lKSkge1xuICAgICAgICBpZiAoKDAsIF9zdHJpbmcuZW5kc1dpdGgpKHN0ciwgX25hbWUpKSB7XG4gICAgICAgICAgdmFyIF91bml0ID0gVU5JVFNbX25hbWVdO1xuICAgICAgICAgIHZhciBwcmVmaXhMZW4gPSBzdHIubGVuZ3RoIC0gX25hbWUubGVuZ3RoO1xuICAgICAgICAgIHZhciBwcmVmaXhOYW1lID0gc3RyLnN1YnN0cmluZygwLCBwcmVmaXhMZW4pO1xuXG4gICAgICAgICAgdmFyIF9wcmVmaXggPSAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoX3VuaXQucHJlZml4ZXMsIHByZWZpeE5hbWUpID8gX3VuaXQucHJlZml4ZXNbcHJlZml4TmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoX3ByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBzdG9yZSB1bml0LCBwcmVmaXgsIGFuZCB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdW5pdDogX3VuaXQsXG4gICAgICAgICAgICAgIHByZWZpeDogX3ByZWZpeFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogVGVzdCBpZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBpcyBhIHVuaXQuXG4gICAqIFRoZSB1bml0IGNhbiBoYXZlIGEgcHJlZml4IGJ1dCBjYW5ub3QgaGF2ZSBhIHZhbHVlLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgIEEgc3RyaW5nIHRvIGJlIHRlc3RlZCB3aGV0aGVyIGl0IGlzIGEgdmFsdWUgbGVzcyB1bml0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB1bml0IGNhbiBoYXZlIHByZWZpeCwgbGlrZSBcImNtXCJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gICAgICB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB1bml0XG4gICAqL1xuXG5cbiAgVW5pdC5pc1ZhbHVlbGVzc1VuaXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiBfZmluZFVuaXQobmFtZSkgIT09IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBjaGVjayBpZiB0aGlzIHVuaXQgaGFzIGdpdmVuIGJhc2UgdW5pdFxuICAgKiBJZiB0aGlzIHVuaXQgaXMgYSBkZXJpdmVkIHVuaXQsIHRoaXMgd2lsbCBBTFdBWVMgcmV0dXJuIGZhbHNlLCBzaW5jZSBieSBkZWZpbml0aW9uIGJhc2UgdW5pdHMgYXJlIG5vdCBkZXJpdmVkLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge0JBU0VfVU5JVFMgfCBzdHJpbmcgfCB1bmRlZmluZWR9IGJhc2VcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5oYXNCYXNlID0gZnVuY3Rpb24gKGJhc2UpIHtcbiAgICBpZiAodHlwZW9mIGJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBiYXNlID0gQkFTRV9VTklUU1tiYXNlXTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIEFsbCBkaW1lbnNpb25zIG11c3QgYmUgdGhlIHNhbWVcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChNYXRoLmFicygodGhpcy5kaW1lbnNpb25zW2ldIHx8IDApIC0gKGJhc2UuZGltZW5zaW9uc1tpXSB8fCAwKSkgPiAxZS0xMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIHVuaXQgaGFzIGEgYmFzZSBvciBiYXNlcyBlcXVhbCB0byBhbm90aGVyIGJhc2Ugb3IgYmFzZXNcbiAgICogRm9yIGRlcml2ZWQgdW5pdHMsIHRoZSBleHBvbmVudCBvbiBlYWNoIGJhc2UgYWxzbyBtdXN0IG1hdGNoXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7VW5pdH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlcXVhbCBiYXNlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZXF1YWxCYXNlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgLy8gQWxsIGRpbWVuc2lvbnMgbXVzdCBiZSB0aGUgc2FtZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoKHRoaXMuZGltZW5zaW9uc1tpXSB8fCAwKSAtIChvdGhlci5kaW1lbnNpb25zW2ldIHx8IDApKSA+IDFlLTEyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgdW5pdCBlcXVhbHMgYW5vdGhlciB1bml0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7VW5pdH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBib3RoIHVuaXRzIGFyZSBlcXVhbFxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmVxdWFsQmFzZShvdGhlcikgJiYgZXF1YWwodGhpcy52YWx1ZSwgb3RoZXIudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogTXVsdGlwbHkgdGhpcyB1bml0IHdpdGggYW5vdGhlciBvbmVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtVbml0fSBvdGhlclxuICAgKiBAcmV0dXJuIHtVbml0fSBwcm9kdWN0IG9mIHRoaXMgdW5pdCBhbmQgdGhlIG90aGVyIHVuaXRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHZhciByZXMgPSB0aGlzLmNsb25lKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRGltZW5zaW9ucyBhcnJheXMgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLiBEZWZhdWx0IHRvIDAuXG4gICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgKyAob3RoZXIuZGltZW5zaW9uc1tpXSB8fCAwKTtcbiAgICB9IC8vIEFwcGVuZCBvdGhlcidzIHVuaXRzIGxpc3Qgb250byByZXNcblxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG90aGVyLnVuaXRzLmxlbmd0aDsgX2krKykge1xuICAgICAgLy8gTWFrZSBhIGRlZXAgY29weVxuICAgICAgdmFyIGludmVydGVkID0ge307XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBvdGhlci51bml0c1tfaV0pIHtcbiAgICAgICAgaW52ZXJ0ZWRba2V5XSA9IG90aGVyLnVuaXRzW19pXVtrZXldO1xuICAgICAgfVxuXG4gICAgICByZXMudW5pdHMucHVzaChpbnZlcnRlZCk7XG4gICAgfSAvLyBJZiBhdCBsZWFzdCBvbmUgb3BlcmFuZCBoYXMgYSB2YWx1ZSwgdGhlbiB0aGUgcmVzdWx0IHNob3VsZCBhbHNvIGhhdmUgYSB2YWx1ZVxuXG5cbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gbnVsbCB8fCBvdGhlci52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHZhbFRoaXMgPSB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKDEpIDogdGhpcy52YWx1ZTtcbiAgICAgIHZhciB2YWxPdGhlciA9IG90aGVyLnZhbHVlID09PSBudWxsID8gb3RoZXIuX25vcm1hbGl6ZSgxKSA6IG90aGVyLnZhbHVlO1xuICAgICAgcmVzLnZhbHVlID0gbXVsdGlwbHlTY2FsYXIodmFsVGhpcywgdmFsT3RoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHJlcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSBmYWxzZTtcbiAgICByZXR1cm4gZ2V0TnVtZXJpY0lmVW5pdGxlc3MocmVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIERpdmlkZSB0aGlzIHVuaXQgYnkgYW5vdGhlciBvbmVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtVbml0fSBvdGhlclxuICAgKiBAcmV0dXJuIHtVbml0fSByZXN1bHQgb2YgZGl2aWRpbmcgdGhpcyB1bml0IGJ5IHRoZSBvdGhlciB1bml0XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZGl2aWRlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMuY2xvbmUoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBEaW1lbnNpb25zIGFycmF5cyBtYXkgYmUgb2YgZGlmZmVyZW50IGxlbmd0aHMuIERlZmF1bHQgdG8gMC5cbiAgICAgIHJlcy5kaW1lbnNpb25zW2ldID0gKHRoaXMuZGltZW5zaW9uc1tpXSB8fCAwKSAtIChvdGhlci5kaW1lbnNpb25zW2ldIHx8IDApO1xuICAgIH0gLy8gSW52ZXJ0IGFuZCBhcHBlbmQgb3RoZXIncyB1bml0cyBsaXN0IG9udG8gcmVzXG5cblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG90aGVyLnVuaXRzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIC8vIE1ha2UgYSBkZWVwIGNvcHlcbiAgICAgIHZhciBpbnZlcnRlZCA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gb3RoZXIudW5pdHNbX2kyXSkge1xuICAgICAgICBpbnZlcnRlZFtrZXldID0gb3RoZXIudW5pdHNbX2kyXVtrZXldO1xuICAgICAgfVxuXG4gICAgICBpbnZlcnRlZC5wb3dlciA9IC1pbnZlcnRlZC5wb3dlcjtcbiAgICAgIHJlcy51bml0cy5wdXNoKGludmVydGVkKTtcbiAgICB9IC8vIElmIGF0IGxlYXN0IG9uZSBvcGVyYW5kIGhhcyBhIHZhbHVlLCB0aGUgcmVzdWx0IHNob3VsZCBoYXZlIGEgdmFsdWVcblxuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09IG51bGwgfHwgb3RoZXIudmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHZhciB2YWxUaGlzID0gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IHRoaXMuX25vcm1hbGl6ZSgxKSA6IHRoaXMudmFsdWU7XG4gICAgICB2YXIgdmFsT3RoZXIgPSBvdGhlci52YWx1ZSA9PT0gbnVsbCA/IG90aGVyLl9ub3JtYWxpemUoMSkgOiBvdGhlci52YWx1ZTtcbiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcih2YWxUaGlzLCB2YWxPdGhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiBnZXROdW1lcmljSWZVbml0bGVzcyhyZXMpO1xuICB9O1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwb3dlciBvZiBhIHVuaXRcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlcn0gcFxuICAgKiBAcmV0dXJucyB7VW5pdH0gICAgICBUaGUgcmVzdWx0OiB0aGlzXnBcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiAocCkge1xuICAgIHZhciByZXMgPSB0aGlzLmNsb25lKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRGltZW5zaW9ucyBhcnJheXMgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLiBEZWZhdWx0IHRvIDAuXG4gICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgKiBwO1xuICAgIH0gLy8gQWRqdXN0IHRoZSBwb3dlciBvZiBlYWNoIHVuaXQgaW4gdGhlIGxpc3RcblxuXG4gICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgcmVzLnVuaXRzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgIHJlcy51bml0c1tfaTNdLnBvd2VyICo9IHA7XG4gICAgfVxuXG4gICAgaWYgKHJlcy52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmVzLnZhbHVlID0gcG93KHJlcy52YWx1ZSwgcCk7IC8vIG9ubHkgYWxsb3cgbnVtZXJpYyBvdXRwdXQsIHdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIGEgQ29tcGxleCBudW1iZXJcbiAgICAgIC8vIGlmICghaXNOdW1lcmljKHJlcy52YWx1ZSkpIHtcbiAgICAgIC8vICByZXMudmFsdWUgPSBOYU5cbiAgICAgIC8vIH1cbiAgICAgIC8vIFVwZGF0ZTogQ29tcGxleCBzdXBwb3J0ZWQgbm93XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiBnZXROdW1lcmljSWZVbml0bGVzcyhyZXMpO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMgdW5pdCBpZiBpdCBpcyBkaW1lbnNpb25sZXNzLCBoYXMgYSB2YWx1ZSwgYW5kIGNvbmZpZy5wcmVkaWN0YWJsZSA9PSBmYWxzZTsgb3IgdGhlIG9yaWdpbmFsIHVuaXQgb3RoZXJ3aXNlXG4gICAqIEBwYXJhbSB7VW5pdH0gdW5pdFxuICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBVbml0fSAgVGhlIG51bWVyaWMgdmFsdWUgb2YgdGhlIHVuaXQgaWYgY29uZGl0aW9ucyBhcmUgbWV0LCBvciB0aGUgb3JpZ2luYWwgdW5pdCBvdGhlcndpc2VcbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXROdW1lcmljSWZVbml0bGVzcyh1bml0KSB7XG4gICAgaWYgKHVuaXQuZXF1YWxCYXNlKEJBU0VfVU5JVFMuTk9ORSkgJiYgdW5pdC52YWx1ZSAhPT0gbnVsbCAmJiAhY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICByZXR1cm4gdW5pdC52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuaXQ7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge251bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyfSB4XG4gICAqIEByZXR1cm5zIHtVbml0fSAgICAgIFRoZSByZXN1bHQ6IHx4fCwgYWJzb2x1dGUgdmFsdWUgb2YgeFxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGdpdmVzIGNvcnJlY3QsIGJ1dCB1bmV4cGVjdGVkLCByZXN1bHRzIGZvciB1bml0cyB3aXRoIGFuIG9mZnNldC5cbiAgICAvLyBGb3IgZXhhbXBsZSwgYWJzKC0yODMuMTUgZGVnQykgPSAtMjYzLjE1IGRlZ0MgISEhXG4gICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTtcbiAgICByZXQudmFsdWUgPSByZXQudmFsdWUgIT09IG51bGwgPyBhYnMocmV0LnZhbHVlKSA6IG51bGw7XG5cbiAgICBmb3IgKHZhciBpIGluIHJldC51bml0cykge1xuICAgICAgaWYgKHJldC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQScgfHwgcmV0LnVuaXRzW2ldLnVuaXQubmFtZSA9PT0gJ1ZBUicpIHtcbiAgICAgICAgcmV0LnVuaXRzW2ldLnVuaXQgPSBVTklUUy5XO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSB1bml0IHRvIGEgc3BlY2lmaWMgdW5pdCBuYW1lLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuaXR9IHZhbHVlbGVzc1VuaXQgICBBIHVuaXQgd2l0aG91dCB2YWx1ZS4gQ2FuIGhhdmUgcHJlZml4LCBsaWtlIFwiY21cIlxuICAgKiBAcmV0dXJucyB7VW5pdH0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSB1bml0IHdpdGggYSBmaXhlZCBwcmVmaXggYW5kIHVuaXQuXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG8gPSBmdW5jdGlvbiAodmFsdWVsZXNzVW5pdCkge1xuICAgIHZhciBvdGhlcjtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKDEpIDogdGhpcy52YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWVsZXNzVW5pdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIG90aGVyID0gbmV3IFVuaXQobnVsbCwgdmFsdWVsZXNzVW5pdClcbiAgICAgIG90aGVyID0gVW5pdC5wYXJzZSh2YWx1ZWxlc3NVbml0KTtcblxuICAgICAgaWYgKCF0aGlzLmVxdWFsQmFzZShvdGhlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5pdHMgZG8gbm90IG1hdGNoICgnXCIuY29uY2F0KG90aGVyLnRvU3RyaW5nKCksIFwiJyAhPSAnXCIpLmNvbmNhdCh0aGlzLnRvU3RyaW5nKCksIFwiJylcIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3RoZXIudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCB0byBhIHVuaXQgd2l0aCBhIHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIG90aGVyLnZhbHVlID0gKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKTtcbiAgICAgIG90aGVyLmZpeFByZWZpeCA9IHRydWU7XG4gICAgICBvdGhlci5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0cnVlO1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc1VuaXQpKHZhbHVlbGVzc1VuaXQpKSB7XG4gICAgICBpZiAoIXRoaXMuZXF1YWxCYXNlKHZhbHVlbGVzc1VuaXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaXRzIGRvIG5vdCBtYXRjaCAoJ1wiLmNvbmNhdCh2YWx1ZWxlc3NVbml0LnRvU3RyaW5nKCksIFwiJyAhPSAnXCIpLmNvbmNhdCh0aGlzLnRvU3RyaW5nKCksIFwiJylcIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVsZXNzVW5pdC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHRvIGEgdW5pdCB3aXRoIGEgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgb3RoZXIgPSB2YWx1ZWxlc3NVbml0LmNsb25lKCk7XG4gICAgICBvdGhlci52YWx1ZSA9ICgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSk7XG4gICAgICBvdGhlci5maXhQcmVmaXggPSB0cnVlO1xuICAgICAgb3RoZXIuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uID0gdHJ1ZTtcbiAgICAgIHJldHVybiBvdGhlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgb3IgVW5pdCBleHBlY3RlZCBhcyBwYXJhbWV0ZXInKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSB1bml0IHdoZW4gcmVwcmVzZW50ZWQgd2l0aCBnaXZlbiB2YWx1ZWxlc3MgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuaXR9IHZhbHVlbGVzc1VuaXQgICAgRm9yIGV4YW1wbGUgJ2NtJyBvciAnaW5jaCdcbiAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSB1bml0IHZhbHVlIGFzIG51bWJlci5cbiAgICovXG4gIC8vIFRPRE86IGRlcHJlY2F0ZSBVbml0LnRvTnVtYmVyPyBJdCdzIGFsd2F5cyBiZXR0ZXIgdG8gdXNlIHRvTnVtZXJpY1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsdWVsZXNzVW5pdCkge1xuICAgIHJldHVybiB0b051bWJlcih0aGlzLnRvTnVtZXJpYyh2YWx1ZWxlc3NVbml0KSk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSB1bml0IGluIHRoZSBvcmlnaW5hbCBudW1lcmljIHR5cGVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVbml0fSB2YWx1ZWxlc3NVbml0ICAgIEZvciBleGFtcGxlICdjbScgb3IgJ2luY2gnXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9ufSBSZXR1cm5zIHRoZSB1bml0IHZhbHVlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9OdW1lcmljID0gZnVuY3Rpb24gKHZhbHVlbGVzc1VuaXQpIHtcbiAgICB2YXIgb3RoZXI7XG5cbiAgICBpZiAodmFsdWVsZXNzVW5pdCkge1xuICAgICAgLy8gQWxsb3cgZ2V0dGluZyB0aGUgbnVtZXJpYyB2YWx1ZSB3aXRob3V0IGNvbnZlcnRpbmcgdG8gYSBkaWZmZXJlbnQgdW5pdFxuICAgICAgb3RoZXIgPSB0aGlzLnRvKHZhbHVlbGVzc1VuaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdGhlciA9IHRoaXMuY2xvbmUoKTtcbiAgICB9XG5cbiAgICBpZiAob3RoZXIuX2lzRGVyaXZlZCgpIHx8IG90aGVyLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG90aGVyLl9kZW5vcm1hbGl6ZShvdGhlci52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvdGhlci5fZGVub3JtYWxpemUob3RoZXIudmFsdWUsIG90aGVyLnVuaXRzWzBdLnByZWZpeC52YWx1ZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0LlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0KCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiVW5pdFwiLCBcInZhbHVlXCI6IDIsIFwidW5pdFwiOiBcImNtXCIsIFwiZml4UHJlZml4XCI6IGZhbHNlfWBcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1VuaXQnLFxuICAgICAgdmFsdWU6IHRoaXMuX2Rlbm9ybWFsaXplKHRoaXMudmFsdWUpLFxuICAgICAgdW5pdDogdGhpcy5mb3JtYXRVbml0cygpLFxuICAgICAgZml4UHJlZml4OiB0aGlzLmZpeFByZWZpeFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIFVuaXQgZnJvbSBhIEpTT04gb2JqZWN0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiVW5pdFwiLCBcInZhbHVlXCI6IDIsIFwidW5pdFwiOiBcImNtXCIsIFwiZml4UHJlZml4XCI6IGZhbHNlfWBcbiAgICogQHJldHVybiB7VW5pdH1cbiAgICovXG5cblxuICBVbml0LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICB2YXIgdW5pdCA9IG5ldyBVbml0KGpzb24udmFsdWUsIGpzb24udW5pdCk7XG4gICAgdW5pdC5maXhQcmVmaXggPSBqc29uLmZpeFByZWZpeCB8fCBmYWxzZTtcbiAgICByZXR1cm4gdW5pdDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnZhbHVlT2YgPSBVbml0LnByb3RvdHlwZS50b1N0cmluZztcbiAgLyoqXG4gICAqIFNpbXBsaWZ5IHRoaXMgVW5pdCdzIHVuaXQgbGlzdCBhbmQgcmV0dXJuIGEgbmV3IFVuaXQgd2l0aCB0aGUgc2ltcGxpZmllZCBsaXN0LlxuICAgKiBUaGUgcmV0dXJuZWQgVW5pdCB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBcImJlc3RcIiB1bml0cyBmb3IgZm9ybWF0dGluZy5cbiAgICovXG5cbiAgVW5pdC5wcm90b3R5cGUuc2ltcGxpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIgcHJvcG9zZWRVbml0TGlzdCA9IFtdOyAvLyBTZWFyY2ggZm9yIGEgbWF0Y2hpbmcgYmFzZVxuXG4gICAgdmFyIG1hdGNoaW5nQmFzZTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50VW5pdFN5c3RlbSkge1xuICAgICAgaWYgKHJldC5oYXNCYXNlKEJBU0VfVU5JVFNba2V5XSkpIHtcbiAgICAgICAgbWF0Y2hpbmdCYXNlID0ga2V5O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2hpbmdCYXNlID09PSAnTk9ORScpIHtcbiAgICAgIHJldC51bml0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWF0Y2hpbmdVbml0O1xuXG4gICAgICBpZiAobWF0Y2hpbmdCYXNlKSB7XG4gICAgICAgIC8vIERvZXMgdGhlIHVuaXQgc3lzdGVtIGhhdmUgYSBtYXRjaGluZyB1bml0P1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGN1cnJlbnRVbml0U3lzdGVtLCBtYXRjaGluZ0Jhc2UpKSB7XG4gICAgICAgICAgbWF0Y2hpbmdVbml0ID0gY3VycmVudFVuaXRTeXN0ZW1bbWF0Y2hpbmdCYXNlXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hpbmdVbml0KSB7XG4gICAgICAgIHJldC51bml0cyA9IFt7XG4gICAgICAgICAgdW5pdDogbWF0Y2hpbmdVbml0LnVuaXQsXG4gICAgICAgICAgcHJlZml4OiBtYXRjaGluZ1VuaXQucHJlZml4LFxuICAgICAgICAgIHBvd2VyOiAxLjBcbiAgICAgICAgfV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNdWx0aXBsZSB1bml0cyBvciB1bml0cyB3aXRoIHBvd2VycyBhcmUgZm9ybWF0dGVkIGxpa2UgdGhpczpcbiAgICAgICAgLy8gNSAoa2cgbV4yKSAvIChzXjMgbW9sKVxuICAgICAgICAvLyBCdWlsZCBhbiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBiYXNlIHVuaXRzIG9mIHRoZSBjdXJyZW50IHVuaXQgc3lzdGVtXG4gICAgICAgIHZhciBtaXNzaW5nQmFzZURpbSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGJhc2VEaW0gPSBCQVNFX0RJTUVOU0lPTlNbaV07XG5cbiAgICAgICAgICBpZiAoTWF0aC5hYnMocmV0LmRpbWVuc2lvbnNbaV0gfHwgMCkgPiAxZS0xMikge1xuICAgICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShjdXJyZW50VW5pdFN5c3RlbSwgYmFzZURpbSkpIHtcbiAgICAgICAgICAgICAgcHJvcG9zZWRVbml0TGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB1bml0OiBjdXJyZW50VW5pdFN5c3RlbVtiYXNlRGltXS51bml0LFxuICAgICAgICAgICAgICAgIHByZWZpeDogY3VycmVudFVuaXRTeXN0ZW1bYmFzZURpbV0ucHJlZml4LFxuICAgICAgICAgICAgICAgIHBvd2VyOiByZXQuZGltZW5zaW9uc1tpXSB8fCAwXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWlzc2luZ0Jhc2VEaW0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBJcyB0aGUgcHJvcG9zZWQgdW5pdCBsaXN0IFwic2ltcGxlclwiIHRoYW4gdGhlIGV4aXN0aW5nIG9uZT9cblxuXG4gICAgICAgIGlmIChwcm9wb3NlZFVuaXRMaXN0Lmxlbmd0aCA8IHJldC51bml0cy5sZW5ndGggJiYgIW1pc3NpbmdCYXNlRGltKSB7XG4gICAgICAgICAgLy8gUmVwbGFjZSB0aGlzIHVuaXQgbGlzdCB3aXRoIHRoZSBwcm9wb3NlZCBsaXN0XG4gICAgICAgICAgcmV0LnVuaXRzID0gcHJvcG9zZWRVbml0TGlzdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IFVuaXQgaW4gdGhlIFNJIHN5c3RlbSB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIHRoaXMgb25lXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9TSSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmV0ID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBwcm9wb3NlZFVuaXRMaXN0ID0gW107IC8vIE11bHRpcGxlIHVuaXRzIG9yIHVuaXRzIHdpdGggcG93ZXJzIGFyZSBmb3JtYXR0ZWQgbGlrZSB0aGlzOlxuICAgIC8vIDUgKGtnIG1eMikgLyAoc14zIG1vbClcbiAgICAvLyBCdWlsZCBhbiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBiYXNlIHVuaXRzIG9mIHRoZSBTSSB1bml0IHN5c3RlbVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBiYXNlRGltID0gQkFTRV9ESU1FTlNJT05TW2ldO1xuXG4gICAgICBpZiAoTWF0aC5hYnMocmV0LmRpbWVuc2lvbnNbaV0gfHwgMCkgPiAxZS0xMikge1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRfU1lTVEVNUy5zaSwgYmFzZURpbSkpIHtcbiAgICAgICAgICBwcm9wb3NlZFVuaXRMaXN0LnB1c2goe1xuICAgICAgICAgICAgdW5pdDogVU5JVF9TWVNURU1TLnNpW2Jhc2VEaW1dLnVuaXQsXG4gICAgICAgICAgICBwcmVmaXg6IFVOSVRfU1lTVEVNUy5zaVtiYXNlRGltXS5wcmVmaXgsXG4gICAgICAgICAgICBwb3dlcjogcmV0LmRpbWVuc2lvbnNbaV0gfHwgMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4cHJlc3MgY3VzdG9tIHVuaXQgJyArIGJhc2VEaW0gKyAnIGluIFNJIHVuaXRzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlcGxhY2UgdGhpcyB1bml0IGxpc3Qgd2l0aCB0aGUgcHJvcG9zZWQgbGlzdFxuXG5cbiAgICByZXQudW5pdHMgPSBwcm9wb3NlZFVuaXRMaXN0O1xuICAgIHJldC5maXhQcmVmaXggPSB0cnVlO1xuICAgIHJldC5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0cnVlO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXRzIG9mIHRoaXMgVW5pdCwgd2l0aG91dCB0aGUgdmFsdWUuIFRoZSB1bml0IGxpc3QgaXMgZm9ybWF0dGVkIGFzLWlzIHdpdGhvdXQgZmlyc3QgYmVpbmcgc2ltcGxpZmllZC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmZvcm1hdFVuaXRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdHJOdW0gPSAnJztcbiAgICB2YXIgc3RyRGVuID0gJyc7XG4gICAgdmFyIG5OdW0gPSAwO1xuICAgIHZhciBuRGVuID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMudW5pdHNbaV0ucG93ZXIgPiAwKSB7XG4gICAgICAgIG5OdW0rKztcbiAgICAgICAgc3RyTnVtICs9ICcgJyArIHRoaXMudW5pdHNbaV0ucHJlZml4Lm5hbWUgKyB0aGlzLnVuaXRzW2ldLnVuaXQubmFtZTtcblxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy51bml0c1tpXS5wb3dlciAtIDEuMCkgPiAxZS0xNSkge1xuICAgICAgICAgIHN0ck51bSArPSAnXicgKyB0aGlzLnVuaXRzW2ldLnBvd2VyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHNbaV0ucG93ZXIgPCAwKSB7XG4gICAgICAgIG5EZW4rKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobkRlbiA+IDApIHtcbiAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IHRoaXMudW5pdHMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgICBpZiAodGhpcy51bml0c1tfaTRdLnBvd2VyIDwgMCkge1xuICAgICAgICAgIGlmIChuTnVtID4gMCkge1xuICAgICAgICAgICAgc3RyRGVuICs9ICcgJyArIHRoaXMudW5pdHNbX2k0XS5wcmVmaXgubmFtZSArIHRoaXMudW5pdHNbX2k0XS51bml0Lm5hbWU7XG5cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzW19pNF0ucG93ZXIgKyAxLjApID4gMWUtMTUpIHtcbiAgICAgICAgICAgICAgc3RyRGVuICs9ICdeJyArIC10aGlzLnVuaXRzW19pNF0ucG93ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0ckRlbiArPSAnICcgKyB0aGlzLnVuaXRzW19pNF0ucHJlZml4Lm5hbWUgKyB0aGlzLnVuaXRzW19pNF0udW5pdC5uYW1lO1xuICAgICAgICAgICAgc3RyRGVuICs9ICdeJyArIHRoaXMudW5pdHNbX2k0XS5wb3dlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlbW92ZSBsZWFkaW5nIFwiIFwiXG5cblxuICAgIHN0ck51bSA9IHN0ck51bS5zdWJzdHIoMSk7XG4gICAgc3RyRGVuID0gc3RyRGVuLnN1YnN0cigxKTsgLy8gQWRkIHBhcmFucyBmb3IgYmV0dGVyIGNvcHkvcGFzdGUgYmFjayBpbnRvIGV2YWx1YXRlLCBmb3IgZXhhbXBsZSwgb3IgZm9yIGJldHRlciBwcmV0dHkgcHJpbnQgZm9ybWF0dGluZ1xuXG4gICAgaWYgKG5OdW0gPiAxICYmIG5EZW4gPiAwKSB7XG4gICAgICBzdHJOdW0gPSAnKCcgKyBzdHJOdW0gKyAnKSc7XG4gICAgfVxuXG4gICAgaWYgKG5EZW4gPiAxICYmIG5OdW0gPiAwKSB7XG4gICAgICBzdHJEZW4gPSAnKCcgKyBzdHJEZW4gKyAnKSc7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHN0ck51bTtcblxuICAgIGlmIChuTnVtID4gMCAmJiBuRGVuID4gMCkge1xuICAgICAgc3RyICs9ICcgLyAnO1xuICAgIH1cblxuICAgIHN0ciArPSBzdHJEZW47XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgVW5pdCwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAvLyBTaW1wbGZ5IHRoZSB1bml0IGxpc3QsIHVubGVzcyBpdCBpcyB2YWx1ZWxlc3Mgb3Igd2FzIGNyZWF0ZWQgZGlyZWN0bHkgaW4gdGhlXG4gICAgLy8gY29uc3RydWN0b3Igb3IgYXMgdGhlIHJlc3VsdCBvZiB0byBvciB0b1NJXG4gICAgdmFyIHNpbXAgPSB0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiB8fCB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5jbG9uZSgpIDogdGhpcy5zaW1wbGlmeSgpOyAvLyBBcHBseSBzb21lIGN1c3RvbSBsb2dpYyBmb3IgaGFuZGxpbmcgVkEgYW5kIFZBUi4gVGhlIGdvYWwgaXMgdG8gZXhwcmVzcyB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYXMgYSByZWFsIHZhbHVlLCBpZiBwb3NzaWJsZS4gT3RoZXJ3aXNlLCB1c2UgYSByZWFsLXZhbHVlZCB1bml0IGluc3RlYWQgb2YgYSBjb21wbGV4LXZhbHVlZCBvbmUuXG5cbiAgICB2YXIgaXNJbWFnaW5hcnkgPSBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygc2ltcC52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2ltcC52YWx1ZSAhPT0gbnVsbCAmJiAoMCwgX2lzLmlzQ29tcGxleCkoc2ltcC52YWx1ZSkpIHtcbiAgICAgIC8vIFRPRE86IE1ha2UgdGhpcyBiZXR0ZXIsIGZvciBleGFtcGxlLCB1c2UgcmVsYXRpdmUgbWFnbml0dWRlIG9mIHJlIGFuZCBpbSByYXRoZXIgdGhhbiBhYnNvbHV0ZVxuICAgICAgaXNJbWFnaW5hcnkgPSBNYXRoLmFicyhzaW1wLnZhbHVlLnJlKSA8IDFlLTE0O1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gc2ltcC51bml0cykge1xuICAgICAgaWYgKHNpbXAudW5pdHNbaV0udW5pdCkge1xuICAgICAgICBpZiAoc2ltcC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQScgJiYgaXNJbWFnaW5hcnkpIHtcbiAgICAgICAgICBzaW1wLnVuaXRzW2ldLnVuaXQgPSBVTklUUy5WQVI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2ltcC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQVInICYmICFpc0ltYWdpbmFyeSkge1xuICAgICAgICAgIHNpbXAudW5pdHNbaV0udW5pdCA9IFVOSVRTLlZBO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBOb3cgYXBwbHkgdGhlIGJlc3QgcHJlZml4XG4gICAgLy8gVW5pdHMgbXVzdCBoYXZlIG9ubHkgb25lIHVuaXQgYW5kIG5vdCBoYXZlIHRoZSBmaXhQcmVmaXggZmxhZyBzZXRcblxuXG4gICAgaWYgKHNpbXAudW5pdHMubGVuZ3RoID09PSAxICYmICFzaW1wLmZpeFByZWZpeCkge1xuICAgICAgLy8gVW5pdHMgbXVzdCBoYXZlIGludGVnZXIgcG93ZXJzLCBvdGhlcndpc2UgdGhlIHByZWZpeCB3aWxsIGNoYW5nZSB0aGVcbiAgICAgIC8vIG91dHB1dHRlZCB2YWx1ZSBieSBub3QtYW4taW50ZWdlci1wb3dlci1vZi10ZW5cbiAgICAgIGlmIChNYXRoLmFicyhzaW1wLnVuaXRzWzBdLnBvd2VyIC0gTWF0aC5yb3VuZChzaW1wLnVuaXRzWzBdLnBvd2VyKSkgPCAxZS0xNCkge1xuICAgICAgICAvLyBBcHBseSB0aGUgYmVzdCBwcmVmaXhcbiAgICAgICAgc2ltcC51bml0c1swXS5wcmVmaXggPSBzaW1wLl9iZXN0UHJlZml4KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gc2ltcC5fZGVub3JtYWxpemUoc2ltcC52YWx1ZSk7XG5cbiAgICB2YXIgc3RyID0gc2ltcC52YWx1ZSAhPT0gbnVsbCA/IGZvcm1hdCh2YWx1ZSwgb3B0aW9ucyB8fCB7fSkgOiAnJztcbiAgICB2YXIgdW5pdFN0ciA9IHNpbXAuZm9ybWF0VW5pdHMoKTtcblxuICAgIGlmIChzaW1wLnZhbHVlICYmICgwLCBfaXMuaXNDb21wbGV4KShzaW1wLnZhbHVlKSkge1xuICAgICAgc3RyID0gJygnICsgc3RyICsgJyknOyAvLyBTdXJyb3VuZCBjb21wbGV4IHZhbHVlcyB3aXRoICggKSB0byBlbmFibGUgYmV0dGVyIHBhcnNpbmdcbiAgICB9XG5cbiAgICBpZiAodW5pdFN0ci5sZW5ndGggPiAwICYmIHN0ci5sZW5ndGggPiAwKSB7XG4gICAgICBzdHIgKz0gJyAnO1xuICAgIH1cblxuICAgIHN0ciArPSB1bml0U3RyO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGJlc3QgcHJlZml4IHVzaW5nIGN1cnJlbnQgdmFsdWUuXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IHByZWZpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLl9iZXN0UHJlZml4ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVuaXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBjb21wdXRlIHRoZSBiZXN0IHByZWZpeCBmb3Igc2luZ2xlIHVuaXRzIHdpdGggaW50ZWdlciBwb3dlcnMsIGxpa2Uga2csIHNeMiwgTl4tMSwgYW5kIHNvIGZvcnRoIScpO1xuICAgIH1cblxuICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzWzBdLnBvd2VyIC0gTWF0aC5yb3VuZCh0aGlzLnVuaXRzWzBdLnBvd2VyKSkgPj0gMWUtMTQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgY29tcHV0ZSB0aGUgYmVzdCBwcmVmaXggZm9yIHNpbmdsZSB1bml0cyB3aXRoIGludGVnZXIgcG93ZXJzLCBsaWtlIGtnLCBzXjIsIE5eLTEsIGFuZCBzbyBmb3J0aCEnKTtcbiAgICB9IC8vIGZpbmQgdGhlIGJlc3QgcHJlZml4IHZhbHVlIChyZXN1bHRpbmcgaW4gdGhlIHZhbHVlIG9mIHdoaWNoXG4gICAgLy8gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBsb2cxMCBpcyBjbG9zZXN0IHRvIHplcm8sXG4gICAgLy8gdGhvdWdoIHdpdGggYSBsaXR0bGUgb2Zmc2V0IG9mIDEuMiBmb3IgbmljZXIgdmFsdWVzOiB5b3UgZ2V0IGFcbiAgICAvLyBzZXF1ZW5jZSAxbW0gMTAwbW0gNTAwbW0gMC42bSAxbSAxMG0gMTAwbSA1MDBtIDAuNmttIDFrbSAuLi5cbiAgICAvLyBOb3RlOiB0aGUgdW5pdHMgdmFsdWUgY2FuIGJlIGFueSBudW1lcmljIHR5cGUsIGJ1dCB0byBmaW5kIHRoZSBiZXN0XG4gICAgLy8gcHJlZml4IGl0J3MgZW5vdWdoIHRvIHdvcmsgd2l0aCBsaW1pdGVkIHByZWNpc2lvbiBvZiBhIHJlZ3VsYXIgbnVtYmVyXG4gICAgLy8gVXBkYXRlOiB1c2luZyBtYXRoanMgYWJzIHNpbmNlIHdlIGFsc28gYWxsb3cgY29tcGxleCBudW1iZXJzXG5cblxuICAgIHZhciBhYnNWYWx1ZSA9IHRoaXMudmFsdWUgIT09IG51bGwgPyBhYnModGhpcy52YWx1ZSkgOiAwO1xuICAgIHZhciBhYnNVbml0VmFsdWUgPSBhYnModGhpcy51bml0c1swXS51bml0LnZhbHVlKTtcbiAgICB2YXIgYmVzdFByZWZpeCA9IHRoaXMudW5pdHNbMF0ucHJlZml4O1xuXG4gICAgaWYgKGFic1ZhbHVlID09PSAwKSB7XG4gICAgICByZXR1cm4gYmVzdFByZWZpeDtcbiAgICB9XG5cbiAgICB2YXIgcG93ZXIgPSB0aGlzLnVuaXRzWzBdLnBvd2VyO1xuICAgIHZhciBiZXN0RGlmZiA9IE1hdGgubG9nKGFic1ZhbHVlIC8gTWF0aC5wb3coYmVzdFByZWZpeC52YWx1ZSAqIGFic1VuaXRWYWx1ZSwgcG93ZXIpKSAvIE1hdGguTE4xMCAtIDEuMjtcbiAgICBpZiAoYmVzdERpZmYgPiAtMi4yMDAwMDEgJiYgYmVzdERpZmYgPCAxLjgwMDAwMSkgcmV0dXJuIGJlc3RQcmVmaXg7IC8vIEFsbG93IHRoZSBvcmlnaW5hbCBwcmVmaXhcblxuICAgIGJlc3REaWZmID0gTWF0aC5hYnMoYmVzdERpZmYpO1xuICAgIHZhciBwcmVmaXhlcyA9IHRoaXMudW5pdHNbMF0udW5pdC5wcmVmaXhlcztcblxuICAgIGZvciAodmFyIHAgaW4gcHJlZml4ZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkocHJlZml4ZXMsIHApKSB7XG4gICAgICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1twXTtcblxuICAgICAgICBpZiAocHJlZml4LnNjaWVudGlmaWMpIHtcbiAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKE1hdGgubG9nKGFic1ZhbHVlIC8gTWF0aC5wb3cocHJlZml4LnZhbHVlICogYWJzVW5pdFZhbHVlLCBwb3dlcikpIC8gTWF0aC5MTjEwIC0gMS4yKTtcblxuICAgICAgICAgIGlmIChkaWZmIDwgYmVzdERpZmYgfHwgZGlmZiA9PT0gYmVzdERpZmYgJiYgcHJlZml4Lm5hbWUubGVuZ3RoIDwgYmVzdFByZWZpeC5uYW1lLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gY2hvb3NlIHRoZSBwcmVmaXggd2l0aCB0aGUgc21hbGxlc3QgZGlmZiwgb3IgaWYgZXF1YWwsIGNob29zZSB0aGUgb25lXG4gICAgICAgICAgICAvLyB3aXRoIHRoZSBzaG9ydGVzdCBuYW1lIChjYW4gaGFwcGVuIHdpdGggU0hPUlRMT05HIGZvciBleGFtcGxlKVxuICAgICAgICAgICAgYmVzdFByZWZpeCA9IHByZWZpeDtcbiAgICAgICAgICAgIGJlc3REaWZmID0gZGlmZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmVzdFByZWZpeDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoaXMgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydHNdIEFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdmFsdWVsZXNzIHVuaXRzLlxuICAgKlxuICAgKiAgIEV4YW1wbGU6XG4gICAqXG4gICAqICAgY29uc3QgdSA9IG5ldyBVbml0KDEsICdtJylcbiAgICogICB1LnNwbGl0VW5pdChbJ2ZlZXQnLCAnaW5jaCddKVxuICAgKiAgICAgWyAzIGZlZXQsIDMuMzcwMDc4NzQwMTU3NSBpbmNoIF1cbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHVuaXRzLlxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnNwbGl0VW5pdCA9IGZ1bmN0aW9uIChwYXJ0cykge1xuICAgIHZhciB4ID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciByZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIENvbnZlcnQgeCB0byB0aGUgcmVxdWVzdGVkIHVuaXRcbiAgICAgIHggPSB4LnRvKHBhcnRzW2ldKTtcbiAgICAgIGlmIChpID09PSBwYXJ0cy5sZW5ndGggLSAxKSBicmVhazsgLy8gR2V0IHRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMgdW5pdFxuXG4gICAgICB2YXIgeE51bWVyaWMgPSB4LnRvTnVtZXJpYygpOyAvLyBDaGVjayB0byBzZWUgaWYgeE51bWVyaWMgaXMgbmVhcmx5IGVxdWFsIHRvIGFuIGludGVnZXIsXG4gICAgICAvLyBzaW5jZSBmaXggY2FuIGluY29ycmVjdGx5IHJvdW5kIGRvd24gaWYgdGhlcmUgaXMgcm91bmQtb2ZmIGVycm9yXG5cbiAgICAgIHZhciB4Um91bmRlZCA9IHJvdW5kKHhOdW1lcmljKTtcbiAgICAgIHZhciB4Rml4ZWQgPSB2b2lkIDA7XG4gICAgICB2YXIgaXNOZWFybHlFcXVhbCA9IGVxdWFsKHhSb3VuZGVkLCB4TnVtZXJpYyk7XG5cbiAgICAgIGlmIChpc05lYXJseUVxdWFsKSB7XG4gICAgICAgIHhGaXhlZCA9IHhSb3VuZGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeEZpeGVkID0gZml4KHgudG9OdW1lcmljKCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgeSA9IG5ldyBVbml0KHhGaXhlZCwgcGFydHNbaV0udG9TdHJpbmcoKSk7XG4gICAgICByZXQucHVzaCh5KTtcbiAgICAgIHggPSBzdWJ0cmFjdCh4LCB5KTtcbiAgICB9IC8vIFRoaXMgbGl0dGxlIGJpdCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgcmVtYWluZGVyIHNob3VsZCBiZSAwIGJ1dCBpcyBhIGxpdHRsZSBiaXQgb2ZmLlxuICAgIC8vIEJ1dCBpbnN0ZWFkIG9mIGNvbXBhcmluZyB4LCB0aGUgcmVtYWluZGVyLCB3aXRoIHplcm8tLXdlIHdpbGwgY29tcGFyZSB0aGUgc3VtIG9mXG4gICAgLy8gYWxsIHRoZSBwYXJ0cyBzbyBmYXIgd2l0aCB0aGUgb3JpZ2luYWwgdmFsdWUuIElmIHRoZXkgYXJlIG5lYXJseSBlcXVhbCxcbiAgICAvLyB3ZSBzZXQgdGhlIHJlbWFpbmRlciB0byAwLlxuXG5cbiAgICB2YXIgdGVzdFN1bSA9IDA7XG5cbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCByZXQubGVuZ3RoOyBfaTUrKykge1xuICAgICAgdGVzdFN1bSA9IGFkZFNjYWxhcih0ZXN0U3VtLCByZXRbX2k1XS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGVxdWFsKHRlc3RTdW0sIHRoaXMudmFsdWUpKSB7XG4gICAgICB4LnZhbHVlID0gMDtcbiAgICB9XG5cbiAgICByZXQucHVzaCh4KTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIHZhciBQUkVGSVhFUyA9IHtcbiAgICBOT05FOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIFNIT1JUOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkYToge1xuICAgICAgICBuYW1lOiAnZGEnLFxuICAgICAgICB2YWx1ZTogMWUxLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGg6IHtcbiAgICAgICAgbmFtZTogJ2gnLFxuICAgICAgICB2YWx1ZTogMWUyLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGs6IHtcbiAgICAgICAgbmFtZTogJ2snLFxuICAgICAgICB2YWx1ZTogMWUzLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTToge1xuICAgICAgICBuYW1lOiAnTScsXG4gICAgICAgIHZhbHVlOiAxZTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBHOiB7XG4gICAgICAgIG5hbWU6ICdHJyxcbiAgICAgICAgdmFsdWU6IDFlOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFQ6IHtcbiAgICAgICAgbmFtZTogJ1QnLFxuICAgICAgICB2YWx1ZTogMWUxMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFA6IHtcbiAgICAgICAgbmFtZTogJ1AnLFxuICAgICAgICB2YWx1ZTogMWUxNSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEU6IHtcbiAgICAgICAgbmFtZTogJ0UnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFo6IHtcbiAgICAgICAgbmFtZTogJ1onLFxuICAgICAgICB2YWx1ZTogMWUyMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFk6IHtcbiAgICAgICAgbmFtZTogJ1knLFxuICAgICAgICB2YWx1ZTogMWUyNCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGQ6IHtcbiAgICAgICAgbmFtZTogJ2QnLFxuICAgICAgICB2YWx1ZTogMWUtMSxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBjOiB7XG4gICAgICAgIG5hbWU6ICdjJyxcbiAgICAgICAgdmFsdWU6IDFlLTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbToge1xuICAgICAgICBuYW1lOiAnbScsXG4gICAgICAgIHZhbHVlOiAxZS0zLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdToge1xuICAgICAgICBuYW1lOiAndScsXG4gICAgICAgIHZhbHVlOiAxZS02LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbjoge1xuICAgICAgICBuYW1lOiAnbicsXG4gICAgICAgIHZhbHVlOiAxZS05LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcDoge1xuICAgICAgICBuYW1lOiAncCcsXG4gICAgICAgIHZhbHVlOiAxZS0xMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGY6IHtcbiAgICAgICAgbmFtZTogJ2YnLFxuICAgICAgICB2YWx1ZTogMWUtMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBhOiB7XG4gICAgICAgIG5hbWU6ICdhJyxcbiAgICAgICAgdmFsdWU6IDFlLTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgejoge1xuICAgICAgICBuYW1lOiAneicsXG4gICAgICAgIHZhbHVlOiAxZS0yMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHk6IHtcbiAgICAgICAgbmFtZTogJ3knLFxuICAgICAgICB2YWx1ZTogMWUtMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIExPTkc6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGRlY2E6IHtcbiAgICAgICAgbmFtZTogJ2RlY2EnLFxuICAgICAgICB2YWx1ZTogMWUxLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGhlY3RvOiB7XG4gICAgICAgIG5hbWU6ICdoZWN0bycsXG4gICAgICAgIHZhbHVlOiAxZTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAga2lsbzoge1xuICAgICAgICBuYW1lOiAna2lsbycsXG4gICAgICAgIHZhbHVlOiAxZTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtZWdhOiB7XG4gICAgICAgIG5hbWU6ICdtZWdhJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpZ2E6IHtcbiAgICAgICAgbmFtZTogJ2dpZ2EnLFxuICAgICAgICB2YWx1ZTogMWU5LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdGVyYToge1xuICAgICAgICBuYW1lOiAndGVyYScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGV0YToge1xuICAgICAgICBuYW1lOiAncGV0YScsXG4gICAgICAgIHZhbHVlOiAxZTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZXhhOiB7XG4gICAgICAgIG5hbWU6ICdleGEnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHpldHRhOiB7XG4gICAgICAgIG5hbWU6ICd6ZXR0YScsXG4gICAgICAgIHZhbHVlOiAxZTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW90dGE6IHtcbiAgICAgICAgbmFtZTogJ3lvdHRhJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkZWNpOiB7XG4gICAgICAgIG5hbWU6ICdkZWNpJyxcbiAgICAgICAgdmFsdWU6IDFlLTEsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgY2VudGk6IHtcbiAgICAgICAgbmFtZTogJ2NlbnRpJyxcbiAgICAgICAgdmFsdWU6IDFlLTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbWlsbGk6IHtcbiAgICAgICAgbmFtZTogJ21pbGxpJyxcbiAgICAgICAgdmFsdWU6IDFlLTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtaWNybzoge1xuICAgICAgICBuYW1lOiAnbWljcm8nLFxuICAgICAgICB2YWx1ZTogMWUtNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG5hbm86IHtcbiAgICAgICAgbmFtZTogJ25hbm8nLFxuICAgICAgICB2YWx1ZTogMWUtOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBpY286IHtcbiAgICAgICAgbmFtZTogJ3BpY28nLFxuICAgICAgICB2YWx1ZTogMWUtMTIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBmZW10bzoge1xuICAgICAgICBuYW1lOiAnZmVtdG8nLFxuICAgICAgICB2YWx1ZTogMWUtMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBhdHRvOiB7XG4gICAgICAgIG5hbWU6ICdhdHRvJyxcbiAgICAgICAgdmFsdWU6IDFlLTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgemVwdG86IHtcbiAgICAgICAgbmFtZTogJ3plcHRvJyxcbiAgICAgICAgdmFsdWU6IDFlLTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW9jdG86IHtcbiAgICAgICAgbmFtZTogJ3lvY3RvJyxcbiAgICAgICAgdmFsdWU6IDFlLTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBTUVVBUkVEOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkYToge1xuICAgICAgICBuYW1lOiAnZGEnLFxuICAgICAgICB2YWx1ZTogMWUyLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGg6IHtcbiAgICAgICAgbmFtZTogJ2gnLFxuICAgICAgICB2YWx1ZTogMWU0LFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGs6IHtcbiAgICAgICAgbmFtZTogJ2snLFxuICAgICAgICB2YWx1ZTogMWU2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTToge1xuICAgICAgICBuYW1lOiAnTScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRzoge1xuICAgICAgICBuYW1lOiAnRycsXG4gICAgICAgIHZhbHVlOiAxZTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgVDoge1xuICAgICAgICBuYW1lOiAnVCcsXG4gICAgICAgIHZhbHVlOiAxZTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgUDoge1xuICAgICAgICBuYW1lOiAnUCcsXG4gICAgICAgIHZhbHVlOiAxZTMwLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRToge1xuICAgICAgICBuYW1lOiAnRScsXG4gICAgICAgIHZhbHVlOiAxZTM2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWjoge1xuICAgICAgICBuYW1lOiAnWicsXG4gICAgICAgIHZhbHVlOiAxZTQyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWToge1xuICAgICAgICBuYW1lOiAnWScsXG4gICAgICAgIHZhbHVlOiAxZTQ4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZDoge1xuICAgICAgICBuYW1lOiAnZCcsXG4gICAgICAgIHZhbHVlOiAxZS0yLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGM6IHtcbiAgICAgICAgbmFtZTogJ2MnLFxuICAgICAgICB2YWx1ZTogMWUtNCxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBtOiB7XG4gICAgICAgIG5hbWU6ICdtJyxcbiAgICAgICAgdmFsdWU6IDFlLTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB1OiB7XG4gICAgICAgIG5hbWU6ICd1JyxcbiAgICAgICAgdmFsdWU6IDFlLTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbjoge1xuICAgICAgICBuYW1lOiAnbicsXG4gICAgICAgIHZhbHVlOiAxZS0xOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHA6IHtcbiAgICAgICAgbmFtZTogJ3AnLFxuICAgICAgICB2YWx1ZTogMWUtMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBmOiB7XG4gICAgICAgIG5hbWU6ICdmJyxcbiAgICAgICAgdmFsdWU6IDFlLTMwLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgYToge1xuICAgICAgICBuYW1lOiAnYScsXG4gICAgICAgIHZhbHVlOiAxZS0zNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHo6IHtcbiAgICAgICAgbmFtZTogJ3onLFxuICAgICAgICB2YWx1ZTogMWUtNDIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB5OiB7XG4gICAgICAgIG5hbWU6ICd5JyxcbiAgICAgICAgdmFsdWU6IDFlLTQ4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBDVUJJQzoge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGE6IHtcbiAgICAgICAgbmFtZTogJ2RhJyxcbiAgICAgICAgdmFsdWU6IDFlMyxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBoOiB7XG4gICAgICAgIG5hbWU6ICdoJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBrOiB7XG4gICAgICAgIG5hbWU6ICdrJyxcbiAgICAgICAgdmFsdWU6IDFlOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE06IHtcbiAgICAgICAgbmFtZTogJ00nLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEc6IHtcbiAgICAgICAgbmFtZTogJ0cnLFxuICAgICAgICB2YWx1ZTogMWUyNyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFQ6IHtcbiAgICAgICAgbmFtZTogJ1QnLFxuICAgICAgICB2YWx1ZTogMWUzNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFA6IHtcbiAgICAgICAgbmFtZTogJ1AnLFxuICAgICAgICB2YWx1ZTogMWU0NSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEU6IHtcbiAgICAgICAgbmFtZTogJ0UnLFxuICAgICAgICB2YWx1ZTogMWU1NCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFo6IHtcbiAgICAgICAgbmFtZTogJ1onLFxuICAgICAgICB2YWx1ZTogMWU2MyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFk6IHtcbiAgICAgICAgbmFtZTogJ1knLFxuICAgICAgICB2YWx1ZTogMWU3MixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGQ6IHtcbiAgICAgICAgbmFtZTogJ2QnLFxuICAgICAgICB2YWx1ZTogMWUtMyxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBjOiB7XG4gICAgICAgIG5hbWU6ICdjJyxcbiAgICAgICAgdmFsdWU6IDFlLTYsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbToge1xuICAgICAgICBuYW1lOiAnbScsXG4gICAgICAgIHZhbHVlOiAxZS05LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdToge1xuICAgICAgICBuYW1lOiAndScsXG4gICAgICAgIHZhbHVlOiAxZS0xOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG46IHtcbiAgICAgICAgbmFtZTogJ24nLFxuICAgICAgICB2YWx1ZTogMWUtMjcsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBwOiB7XG4gICAgICAgIG5hbWU6ICdwJyxcbiAgICAgICAgdmFsdWU6IDFlLTM2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZjoge1xuICAgICAgICBuYW1lOiAnZicsXG4gICAgICAgIHZhbHVlOiAxZS00NSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGE6IHtcbiAgICAgICAgbmFtZTogJ2EnLFxuICAgICAgICB2YWx1ZTogMWUtNTQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB6OiB7XG4gICAgICAgIG5hbWU6ICd6JyxcbiAgICAgICAgdmFsdWU6IDFlLTYzLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeToge1xuICAgICAgICBuYW1lOiAneScsXG4gICAgICAgIHZhbHVlOiAxZS03MixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgQklOQVJZX1NIT1JUX1NJOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBrOiB7XG4gICAgICAgIG5hbWU6ICdrJyxcbiAgICAgICAgdmFsdWU6IDFlMyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE06IHtcbiAgICAgICAgbmFtZTogJ00nLFxuICAgICAgICB2YWx1ZTogMWU2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRzoge1xuICAgICAgICBuYW1lOiAnRycsXG4gICAgICAgIHZhbHVlOiAxZTksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBUOiB7XG4gICAgICAgIG5hbWU6ICdUJyxcbiAgICAgICAgdmFsdWU6IDFlMTIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBQOiB7XG4gICAgICAgIG5hbWU6ICdQJyxcbiAgICAgICAgdmFsdWU6IDFlMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBFOiB7XG4gICAgICAgIG5hbWU6ICdFJyxcbiAgICAgICAgdmFsdWU6IDFlMTgsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBaOiB7XG4gICAgICAgIG5hbWU6ICdaJyxcbiAgICAgICAgdmFsdWU6IDFlMjEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBZOiB7XG4gICAgICAgIG5hbWU6ICdZJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJJTkFSWV9TSE9SVF9JRUM6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEtpOiB7XG4gICAgICAgIG5hbWU6ICdLaScsXG4gICAgICAgIHZhbHVlOiAxMDI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTWk6IHtcbiAgICAgICAgbmFtZTogJ01pJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDIpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgR2k6IHtcbiAgICAgICAgbmFtZTogJ0dpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDMpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgVGk6IHtcbiAgICAgICAgbmFtZTogJ1RpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDQpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgUGk6IHtcbiAgICAgICAgbmFtZTogJ1BpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDUpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRWk6IHtcbiAgICAgICAgbmFtZTogJ0VpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDYpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWmk6IHtcbiAgICAgICAgbmFtZTogJ1ppJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDcpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWWk6IHtcbiAgICAgICAgbmFtZTogJ1lpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDgpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBCSU5BUllfTE9OR19TSToge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAga2lsbzoge1xuICAgICAgICBuYW1lOiAna2lsbycsXG4gICAgICAgIHZhbHVlOiAxZTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtZWdhOiB7XG4gICAgICAgIG5hbWU6ICdtZWdhJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpZ2E6IHtcbiAgICAgICAgbmFtZTogJ2dpZ2EnLFxuICAgICAgICB2YWx1ZTogMWU5LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdGVyYToge1xuICAgICAgICBuYW1lOiAndGVyYScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGV0YToge1xuICAgICAgICBuYW1lOiAncGV0YScsXG4gICAgICAgIHZhbHVlOiAxZTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZXhhOiB7XG4gICAgICAgIG5hbWU6ICdleGEnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHpldHRhOiB7XG4gICAgICAgIG5hbWU6ICd6ZXR0YScsXG4gICAgICAgIHZhbHVlOiAxZTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW90dGE6IHtcbiAgICAgICAgbmFtZTogJ3lvdHRhJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJJTkFSWV9MT05HX0lFQzoge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAga2liaToge1xuICAgICAgICBuYW1lOiAna2liaScsXG4gICAgICAgIHZhbHVlOiAxMDI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbWViaToge1xuICAgICAgICBuYW1lOiAnbWViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCAyKSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpYmk6IHtcbiAgICAgICAgbmFtZTogJ2dpYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgMyksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB0ZWJpOiB7XG4gICAgICAgIG5hbWU6ICd0ZWJpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDQpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGViaToge1xuICAgICAgICBuYW1lOiAncGViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA1KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGV4aToge1xuICAgICAgICBuYW1lOiAnZXhpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDYpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgemViaToge1xuICAgICAgICBuYW1lOiAnemViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA3KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHlvYmk6IHtcbiAgICAgICAgbmFtZTogJ3lvYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgOCksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJUVToge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTU06IHtcbiAgICAgICAgbmFtZTogJ01NJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgUFJFRklYRVMuU0hPUlRMT05HID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLlNIT1JULCBQUkVGSVhFUy5MT05HKTtcbiAgUFJFRklYRVMuQklOQVJZX1NIT1JUID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLkJJTkFSWV9TSE9SVF9TSSwgUFJFRklYRVMuQklOQVJZX1NIT1JUX0lFQyk7XG4gIFBSRUZJWEVTLkJJTkFSWV9MT05HID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLkJJTkFSWV9MT05HX1NJLCBQUkVGSVhFUy5CSU5BUllfTE9OR19JRUMpO1xuICAvKiBJbnRlcm5hbGx5LCBlYWNoIHVuaXQgaXMgcmVwcmVzZW50ZWQgYnkgYSB2YWx1ZSBhbmQgYSBkaW1lbnNpb24gYXJyYXkuIFRoZSBlbGVtZW50cyBvZiB0aGUgZGltZW5zaW9ucyBhcnJheSBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzpcbiAgICogSW5kZXggIERpbWVuc2lvblxuICAgKiAtLS0tLSAgLS0tLS0tLS0tXG4gICAqICAgMCAgICBMZW5ndGhcbiAgICogICAxICAgIE1hc3NcbiAgICogICAyICAgIFRpbWVcbiAgICogICAzICAgIEN1cnJlbnRcbiAgICogICA0ICAgIFRlbXBlcmF0dXJlXG4gICAqICAgNSAgICBMdW1pbm91cyBpbnRlbnNpdHlcbiAgICogICA2ICAgIEFtb3VudCBvZiBzdWJzdGFuY2VcbiAgICogICA3ICAgIEFuZ2xlXG4gICAqICAgOCAgICBCaXQgKGRpZ2l0YWwpXG4gICAqIEZvciBleGFtcGxlLCB0aGUgdW5pdCBcIjI5OC4xNSBLXCIgaXMgYSBwdXJlIHRlbXBlcmF0dXJlIGFuZCB3b3VsZCBoYXZlIGEgdmFsdWUgb2YgMjk4LjE1IGFuZCBhIGRpbWVuc2lvbiBhcnJheSBvZiBbMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMF0uIFRoZSB1bml0IFwiMSBjYWwgLyAoZ20gwrBDKVwiIGNhbiBiZSB3cml0dGVuIGluIHRlcm1zIG9mIHRoZSA5IGZ1bmRhbWVudGFsIGRpbWVuc2lvbnMgYXMgW2xlbmd0aF4yXSAvIChbdGltZV4yXSAqIFt0ZW1wZXJhdHVyZV0pLCBhbmQgd291bGQgYSB2YWx1ZSBvZiAoYWZ0ZXIgY29udmVyc2lvbiB0byBTSSkgNDE4NC4wIGFuZCBhIGRpbWVuc2lvbnMgYXJyYXkgb2YgWzIsIDAsIC0yLCAwLCAtMSwgMCwgMCwgMCwgMF0uXG4gICAqXG4gICAqL1xuXG4gIHZhciBCQVNFX0RJTUVOU0lPTlMgPSBbJ01BU1MnLCAnTEVOR1RIJywgJ1RJTUUnLCAnQ1VSUkVOVCcsICdURU1QRVJBVFVSRScsICdMVU1JTk9VU19JTlRFTlNJVFknLCAnQU1PVU5UX09GX1NVQlNUQU5DRScsICdBTkdMRScsICdCSVQnXTtcbiAgdmFyIEJBU0VfVU5JVFMgPSB7XG4gICAgTk9ORToge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBNQVNTOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIExFTkdUSDoge1xuICAgICAgZGltZW5zaW9uczogWzAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBUSU1FOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIENVUlJFTlQ6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgVEVNUEVSQVRVUkU6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgTFVNSU5PVVNfSU5URU5TSVRZOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEFNT1VOVF9PRl9TVUJTVEFOQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwXVxuICAgIH0sXG4gICAgRk9SQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAxLCAtMiwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFNVUkZBQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgVk9MVU1FOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVORVJHWToge1xuICAgICAgZGltZW5zaW9uczogWzEsIDIsIC0yLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgUE9XRVI6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMywgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFBSRVNTVVJFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgLTEsIC0yLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfQ0hBUkdFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX0NBUEFDSVRBTkNFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbLTEsIC0yLCA0LCAyLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfUE9URU5USUFMOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMiwgLTMsIC0xLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfUkVTSVNUQU5DRToge1xuICAgICAgZGltZW5zaW9uczogWzEsIDIsIC0zLCAtMiwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX0lORFVDVEFOQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMiwgLTIsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBFTEVDVFJJQ19DT05EVUNUQU5DRToge1xuICAgICAgZGltZW5zaW9uczogWy0xLCAtMiwgMywgMiwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIE1BR05FVElDX0ZMVVg6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMiwgLTEsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBNQUdORVRJQ19GTFVYX0RFTlNJVFk6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAwLCAtMiwgLTEsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBGUkVRVUVOQ1k6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAtMSwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEFOR0xFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICB9LFxuICAgIEJJVDoge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDFdXG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGtleSBpbiBCQVNFX1VOSVRTKSB7XG4gICAgQkFTRV9VTklUU1trZXldLmtleSA9IGtleTtcbiAgfVxuXG4gIHZhciBCQVNFX1VOSVRfTk9ORSA9IHt9O1xuICB2YXIgVU5JVF9OT05FID0ge1xuICAgIG5hbWU6ICcnLFxuICAgIGJhc2U6IEJBU0VfVU5JVF9OT05FLFxuICAgIHZhbHVlOiAxLFxuICAgIG9mZnNldDogMCxcbiAgICBkaW1lbnNpb25zOiBCQVNFX0RJTUVOU0lPTlMubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9KVxuICB9O1xuICB2YXIgVU5JVFMgPSB7XG4gICAgLy8gbGVuZ3RoXG4gICAgbWV0ZXI6IHtcbiAgICAgIG5hbWU6ICdtZXRlcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGluY2g6IHtcbiAgICAgIG5hbWU6ICdpbmNoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMjU0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBmb290OiB7XG4gICAgICBuYW1lOiAnZm9vdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMzA0OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgeWFyZDoge1xuICAgICAgbmFtZTogJ3lhcmQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjkxNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pbGU6IHtcbiAgICAgIG5hbWU6ICdtaWxlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTYwOS4zNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGxpbms6IHtcbiAgICAgIG5hbWU6ICdsaW5rJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4yMDExNjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHJvZDoge1xuICAgICAgbmFtZTogJ3JvZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDUuMDI5MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2hhaW46IHtcbiAgICAgIG5hbWU6ICdjaGFpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDIwLjExNjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGFuZ3N0cm9tOiB7XG4gICAgICBuYW1lOiAnYW5nc3Ryb20nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxZS0xMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbToge1xuICAgICAgbmFtZTogJ20nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgXCJpblwiOiB7XG4gICAgICBuYW1lOiAnaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAyNTQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGZ0OiB7XG4gICAgICBuYW1lOiAnZnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjMwNDgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHlkOiB7XG4gICAgICBuYW1lOiAneWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjkxNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pOiB7XG4gICAgICBuYW1lOiAnbWknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxNjA5LjM0NCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbGk6IHtcbiAgICAgIG5hbWU6ICdsaScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMjAxMTY4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICByZDoge1xuICAgICAgbmFtZTogJ3JkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNS4wMjkyMTAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGNoOiB7XG4gICAgICBuYW1lOiAnY2gnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyMC4xMTY4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaWw6IHtcbiAgICAgIG5hbWU6ICdtaWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAyNTQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDEvMTAwMCBpbmNoXG4gICAgLy8gU3VyZmFjZVxuICAgIG0yOiB7XG4gICAgICBuYW1lOiAnbTInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNRVUFSRUQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc3Fpbjoge1xuICAgICAgbmFtZTogJ3NxaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA2NDUxNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNjQ1LjE2IG1tMlxuICAgIHNxZnQ6IHtcbiAgICAgIG5hbWU6ICdzcWZ0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDkyOTAzMDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDAuMDkyOTAzMDQgbTJcbiAgICBzcXlkOiB7XG4gICAgICBuYW1lOiAnc3F5ZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjgzNjEyNzM2LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjgzNjEyNzM2IG0yXG4gICAgc3FtaToge1xuICAgICAgbmFtZTogJ3NxbWknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMjU4OTk4OC4xMTAzMzYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIuNTg5OTg4MTEwMzM2IGttMlxuICAgIHNxcmQ6IHtcbiAgICAgIG5hbWU6ICdzcXJkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDI1LjI5Mjk1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyNS4yOTI5NSBtMlxuICAgIHNxY2g6IHtcbiAgICAgIG5hbWU6ICdzcWNoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQwNC42ODczLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA0MDQuNjg3MyBtMlxuICAgIHNxbWlsOiB7XG4gICAgICBuYW1lOiAnc3FtaWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNi40NTE2ZS0xMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNi40NTE2ICogMTBeLTEwIG0yXG4gICAgYWNyZToge1xuICAgICAgbmFtZTogJ2FjcmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDA0Ni44NixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNDA0Ni44NiBtMlxuICAgIGhlY3RhcmU6IHtcbiAgICAgIG5hbWU6ICdoZWN0YXJlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEwMDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMDAwMCBtMlxuICAgIC8vIFZvbHVtZVxuICAgIG0zOiB7XG4gICAgICBuYW1lOiAnbTMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuQ1VCSUMsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgTDoge1xuICAgICAgbmFtZTogJ0wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGxpdHJlXG4gICAgbDoge1xuICAgICAgbmFtZTogJ2wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGxpdHJlXG4gICAgbGl0cmU6IHtcbiAgICAgIG5hbWU6ICdsaXRyZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDAuMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjdWluOiB7XG4gICAgICBuYW1lOiAnY3VpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEuNjM4NzA2NGUtNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMS42Mzg3MDY0ZS01IG0zXG4gICAgY3VmdDoge1xuICAgICAgbmFtZTogJ2N1ZnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAyODMxNjg0NjU5MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjguMzE2IDg0NiA1OTIgTFxuICAgIGN1eWQ6IHtcbiAgICAgIG5hbWU6ICdjdXlkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC43NjQ1NTQ4NTc5ODQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDc2NC41NTQgODU3IDk4NCBMXG4gICAgdGVhc3Bvb246IHtcbiAgICAgIG5hbWU6ICd0ZWFzcG9vbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMDA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA1IG1MXG4gICAgdGFibGVzcG9vbjoge1xuICAgICAgbmFtZTogJ3RhYmxlc3Bvb24nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAxNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTUgbUxcbiAgICAvLyB7bmFtZTogJ2N1cCcsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMDAwMjQwLCBvZmZzZXQ6IDB9LCAvLyAyNDAgbUwgIC8vIG5vdCBwb3NzaWJsZSwgd2UgaGF2ZSBhbHJlYWR5IGFub3RoZXIgY3VwXG4gICAgZHJvcDoge1xuICAgICAgbmFtZTogJ2Ryb3AnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA1ZS04LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjA1IG1MID0gNWUtOCBtM1xuICAgIGd0dDoge1xuICAgICAgbmFtZTogJ2d0dCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDVlLTgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDAuMDUgbUwgPSA1ZS04IG0zXG4gICAgLy8gTGlxdWlkIHZvbHVtZVxuICAgIG1pbmltOiB7XG4gICAgICBuYW1lOiAnbWluaW0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAwMDA2MTYxMTUyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjA2MTYxMTUyIG1MXG4gICAgZmx1aWRkcmFtOiB7XG4gICAgICBuYW1lOiAnZmx1aWRkcmFtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMDM2OTY2OTExLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjY5NjY5MSBtTFxuICAgIGZsdWlkb3VuY2U6IHtcbiAgICAgIG5hbWU6ICdmbHVpZG91bmNlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMjk1NzM1MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjkuNTczNTMgbUxcbiAgICBnaWxsOiB7XG4gICAgICBuYW1lOiAnZ2lsbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMTE4Mjk0MSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTE4LjI5NDEgbUxcbiAgICBjYzoge1xuICAgICAgbmFtZTogJ2NjJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMWUtNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMWUtNiBMXG4gICAgY3VwOiB7XG4gICAgICBuYW1lOiAnY3VwJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAyMzY1ODgyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyMzYuNTg4MiBtTFxuICAgIHBpbnQ6IHtcbiAgICAgIG5hbWU6ICdwaW50JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA0NzMxNzY1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA0NzMuMTc2NSBtTFxuICAgIHF1YXJ0OiB7XG4gICAgICBuYW1lOiAncXVhcnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDk0NjM1MjksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDk0Ni4zNTI5IG1MXG4gICAgZ2FsbG9uOiB7XG4gICAgICBuYW1lOiAnZ2FsbG9uJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDM3ODU0MTIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDMuNzg1NDEyIExcbiAgICBiZWVyYmFycmVsOiB7XG4gICAgICBuYW1lOiAnYmVlcmJhcnJlbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMTE3MzQ3OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTE3LjM0NzggTFxuICAgIG9pbGJhcnJlbDoge1xuICAgICAgbmFtZTogJ29pbGJhcnJlbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMTU4OTg3MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTU4Ljk4NzMgTFxuICAgIGhvZ3NoZWFkOiB7XG4gICAgICBuYW1lOiAnaG9nc2hlYWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjIzODQ4MTAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIzOC40ODEwIExcbiAgICAvLyB7bmFtZTogJ21pbicsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMDAwMDAwMDYxNjExNTIsIG9mZnNldDogMH0sIC8vIDAuMDYxNjExNTIgbUwgLy8gbWluIGlzIGFscmVhZHkgaW4gdXNlIGFzIG1pbnV0ZVxuICAgIGZsZHI6IHtcbiAgICAgIG5hbWU6ICdmbGRyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMDM2OTY2OTExLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjY5NjY5MSBtTFxuICAgIGZsb3o6IHtcbiAgICAgIG5hbWU6ICdmbG96JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMjk1NzM1MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjkuNTczNTMgbUxcbiAgICBnaToge1xuICAgICAgbmFtZTogJ2dpJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAxMTgyOTQxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMTguMjk0MSBtTFxuICAgIGNwOiB7XG4gICAgICBuYW1lOiAnY3AnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDIzNjU4ODIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIzNi41ODgyIG1MXG4gICAgcHQ6IHtcbiAgICAgIG5hbWU6ICdwdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwNDczMTc2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNDczLjE3NjUgbUxcbiAgICBxdDoge1xuICAgICAgbmFtZTogJ3F0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA5NDYzNTI5LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA5NDYuMzUyOSBtTFxuICAgIGdhbDoge1xuICAgICAgbmFtZTogJ2dhbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAzNzg1NDEyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjc4NTQxMiBMXG4gICAgYmJsOiB7XG4gICAgICBuYW1lOiAnYmJsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4xMTczNDc4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMTcuMzQ3OCBMXG4gICAgb2JsOiB7XG4gICAgICBuYW1lOiAnb2JsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4xNTg5ODczLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxNTguOTg3MyBMXG4gICAgLy8ge25hbWU6ICdob2dzaGVhZCcsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMjM4NDgxMCwgb2Zmc2V0OiAwfSwgLy8gMjM4LjQ4MTAgTCAvLyBUT0RPOiBoaD9cbiAgICAvLyBNYXNzXG4gICAgZzoge1xuICAgICAgbmFtZTogJ2cnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDAuMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBncmFtOiB7XG4gICAgICBuYW1lOiAnZ3JhbScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAwLjAwMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgdG9uOiB7XG4gICAgICBuYW1lOiAndG9uJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiA5MDcuMTg0NzQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHQ6IHtcbiAgICAgIG5hbWU6ICd0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxMDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICB0b25uZToge1xuICAgICAgbmFtZTogJ3Rvbm5lJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEwMDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGdyYWluOiB7XG4gICAgICBuYW1lOiAnZ3JhaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjQuNzk4OTFlLTYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRyYW06IHtcbiAgICAgIG5hbWU6ICdkcmFtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEuNzcxODQ1MTk1MzEyNWUtMyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgb3VuY2U6IHtcbiAgICAgIG5hbWU6ICdvdW5jZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyOC4zNDk1MjMxMjVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHBvdW5kbWFzczoge1xuICAgICAgbmFtZTogJ3BvdW5kbWFzcycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA0NTMuNTkyMzdlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGh1bmRyZWR3ZWlnaHQ6IHtcbiAgICAgIG5hbWU6ICdodW5kcmVkd2VpZ2h0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQ1LjM1OTIzNyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc3RpY2s6IHtcbiAgICAgIG5hbWU6ICdzdGljaycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMTVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHN0b25lOiB7XG4gICAgICBuYW1lOiAnc3RvbmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNi4zNTAyOTMxOCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZ3I6IHtcbiAgICAgIG5hbWU6ICdncicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA2NC43OTg5MWUtNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHI6IHtcbiAgICAgIG5hbWU6ICdkcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxLjc3MTg0NTE5NTMxMjVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG96OiB7XG4gICAgICBuYW1lOiAnb3onLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMjguMzQ5NTIzMTI1ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBsYm06IHtcbiAgICAgIG5hbWU6ICdsYm0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDUzLjU5MjM3ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjd3Q6IHtcbiAgICAgIG5hbWU6ICdjd3QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDUuMzU5MjM3LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBUaW1lXG4gICAgczoge1xuICAgICAgbmFtZTogJ3MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pbjoge1xuICAgICAgbmFtZTogJ21pbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA2MCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgaDoge1xuICAgICAgbmFtZTogJ2gnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzYwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc2Vjb25kOiB7XG4gICAgICBuYW1lOiAnc2Vjb25kJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHNlYzoge1xuICAgICAgbmFtZTogJ3NlYycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaW51dGU6IHtcbiAgICAgIG5hbWU6ICdtaW51dGUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGhvdXI6IHtcbiAgICAgIG5hbWU6ICdob3VyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDM2MDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRheToge1xuICAgICAgbmFtZTogJ2RheScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA4NjQwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgbmFtZTogJ3dlZWsnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNyAqIDg2NDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtb250aDoge1xuICAgICAgbmFtZTogJ21vbnRoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDI2Mjk4MDAsXG4gICAgICAvLyAxLzEydGggb2YgSnVsaWFuIHllYXJcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgeWVhcjoge1xuICAgICAgbmFtZTogJ3llYXInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAsXG4gICAgICAvLyBKdWxpYW4geWVhclxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBkZWNhZGU6IHtcbiAgICAgIG5hbWU6ICdkZWNhZGUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAwLFxuICAgICAgLy8gSnVsaWFuIGRlY2FkZVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjZW50dXJ5OiB7XG4gICAgICBuYW1lOiAnY2VudHVyeScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAzMTU1NzYwMDAwLFxuICAgICAgLy8gSnVsaWFuIGNlbnR1cnlcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbWlsbGVubml1bToge1xuICAgICAgbmFtZTogJ21pbGxlbm5pdW0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAwMDAsXG4gICAgICAvLyBKdWxpYW4gbWlsbGVubml1bVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBGcmVxdWVuY3lcbiAgICBoZXJ0ejoge1xuICAgICAgbmFtZTogJ0hlcnR6JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRlJFUVVFTkNZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMCxcbiAgICAgIHJlY2lwcm9jYWw6IHRydWVcbiAgICB9LFxuICAgIEh6OiB7XG4gICAgICBuYW1lOiAnSHonLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GUkVRVUVOQ1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMCxcbiAgICAgIHJlY2lwcm9jYWw6IHRydWVcbiAgICB9LFxuICAgIC8vIEFuZ2xlXG4gICAgcmFkOiB7XG4gICAgICBuYW1lOiAncmFkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgcmFkaWFuOiB7XG4gICAgICBuYW1lOiAncmFkaWFuJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBkZWcgPSByYWQgLyAoMipwaSkgKiAzNjAgPSByYWQgLyAwLjAxNzQ1MzI5MjUxOTk0MzI5NTc2OTIzNjkwNzY4NDg4OFxuICAgIGRlZzoge1xuICAgICAgbmFtZTogJ2RlZycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRlZ3JlZToge1xuICAgICAgbmFtZTogJ2RlZ3JlZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gZ3JhZCA9IHJhZCAvICgyKnBpKSAqIDQwMCAgPSByYWQgLyAwLjAxNTcwNzk2MzI2Nzk0ODk2NjE5MjMxMzIxNjkxNjM5OVxuICAgIGdyYWQ6IHtcbiAgICAgIG5hbWU6ICdncmFkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZ3JhZGlhbjoge1xuICAgICAgbmFtZTogJ2dyYWRpYW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGN5Y2xlID0gcmFkIC8gKDIqcGkpID0gcmFkIC8gNi4yODMxODUzMDcxNzk1ODY0NzY5MjUyODY3NjY1NzkzXG4gICAgY3ljbGU6IHtcbiAgICAgIG5hbWU6ICdjeWNsZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gYXJjc2VjID0gcmFkIC8gKDM2MDAgKiAoMzYwIC8gMiAqIHBpKSkgPSByYWQgLyAwLjAwMDAwNDg0ODEzNjgxMTA5NTM1OTkzNTg5OTE0MTAyMzU3OTVcbiAgICBhcmNzZWM6IHtcbiAgICAgIG5hbWU6ICdhcmNzZWMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGFyY21pbiA9IHJhZCAvICg2MCAqICgzNjAgLyAyICogcGkpKSA9IHJhZCAvIDAuMDAwMjkwODg4MjA4NjY1NzIxNTk2MTUzOTQ4NDYxNDE0NzdcbiAgICBhcmNtaW46IHtcbiAgICAgIG5hbWU6ICdhcmNtaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIEVsZWN0cmljIGN1cnJlbnRcbiAgICBBOiB7XG4gICAgICBuYW1lOiAnQScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkNVUlJFTlQsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgYW1wZXJlOiB7XG4gICAgICBuYW1lOiAnYW1wZXJlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQ1VSUkVOVCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIFRlbXBlcmF0dXJlXG4gICAgLy8gSyhDKSA9IMKwQyArIDI3My4xNVxuICAgIC8vIEsoRikgPSAowrBGICsgNDU5LjY3KSAvIDEuOFxuICAgIC8vIEsoUikgPSDCsFIgLyAxLjhcbiAgICBLOiB7XG4gICAgICBuYW1lOiAnSycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZGVnQzoge1xuICAgICAgbmFtZTogJ2RlZ0MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDI3My4xNVxuICAgIH0sXG4gICAgZGVnRjoge1xuICAgICAgbmFtZTogJ2RlZ0YnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDQ1OS42N1xuICAgIH0sXG4gICAgZGVnUjoge1xuICAgICAgbmFtZTogJ2RlZ1InLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGtlbHZpbjoge1xuICAgICAgbmFtZTogJ2tlbHZpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2Vsc2l1czoge1xuICAgICAgbmFtZTogJ2NlbHNpdXMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDI3My4xNVxuICAgIH0sXG4gICAgZmFocmVuaGVpdDoge1xuICAgICAgbmFtZTogJ2ZhaHJlbmhlaXQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDQ1OS42N1xuICAgIH0sXG4gICAgcmFua2luZToge1xuICAgICAgbmFtZTogJ3JhbmtpbmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGFtb3VudCBvZiBzdWJzdGFuY2VcbiAgICBtb2w6IHtcbiAgICAgIG5hbWU6ICdtb2wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTU9VTlRfT0ZfU1VCU1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1vbGU6IHtcbiAgICAgIG5hbWU6ICdtb2xlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU1PVU5UX09GX1NVQlNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGx1bWlub3VzIGludGVuc2l0eVxuICAgIGNkOiB7XG4gICAgICBuYW1lOiAnY2QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MVU1JTk9VU19JTlRFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2FuZGVsYToge1xuICAgICAgbmFtZTogJ2NhbmRlbGEnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MVU1JTk9VU19JTlRFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBUT0RPOiB1bml0cyBTVEVSQURJQU5cbiAgICAvLyB7bmFtZTogJ3NyJywgYmFzZTogQkFTRV9VTklUUy5TVEVSQURJQU4sIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLCB2YWx1ZTogMSwgb2Zmc2V0OiAwfSxcbiAgICAvLyB7bmFtZTogJ3N0ZXJhZGlhbicsIGJhc2U6IEJBU0VfVU5JVFMuU1RFUkFESUFOLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDEsIG9mZnNldDogMH0sXG4gICAgLy8gRm9yY2VcbiAgICBOOiB7XG4gICAgICBuYW1lOiAnTicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG5ld3Rvbjoge1xuICAgICAgbmFtZTogJ25ld3RvbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHluOiB7XG4gICAgICBuYW1lOiAnZHluJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRk9SQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDAwMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHluZToge1xuICAgICAgbmFtZTogJ2R5bmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDAuMDAwMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGxiZjoge1xuICAgICAgbmFtZTogJ2xiZicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNC40NDgyMjE2MTUyNjA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBwb3VuZGZvcmNlOiB7XG4gICAgICBuYW1lOiAncG91bmRmb3JjZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNC40NDgyMjE2MTUyNjA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBraXA6IHtcbiAgICAgIG5hbWU6ICdraXAnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDQ0NDguMjIxNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRW5lcmd5XG4gICAgSjoge1xuICAgICAgbmFtZTogJ0onLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgam91bGU6IHtcbiAgICAgIG5hbWU6ICdqb3VsZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBlcmc6IHtcbiAgICAgIG5hbWU6ICdlcmcnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxZS03LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBXaDoge1xuICAgICAgbmFtZTogJ1doJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRU5FUkdZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDM2MDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEJUVToge1xuICAgICAgbmFtZTogJ0JUVScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5CVFUsXG4gICAgICB2YWx1ZTogMTA1NS4wNTU4NTI2MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZVY6IHtcbiAgICAgIG5hbWU6ICdlVicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLjYwMjE3NjU2NWUtMTksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGVsZWN0cm9udm9sdDoge1xuICAgICAgbmFtZTogJ2VsZWN0cm9udm9sdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEuNjAyMTc2NTY1ZS0xOSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gUG93ZXJcbiAgICBXOiB7XG4gICAgICBuYW1lOiAnVycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHdhdHQ6IHtcbiAgICAgIG5hbWU6ICd3YXR0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUE9XRVIsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBocDoge1xuICAgICAgbmFtZTogJ2hwJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUE9XRVIsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA3NDUuNjk5ODcxNTM4NixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWNhbCBwb3dlciB1bml0c1xuICAgIFZBUjoge1xuICAgICAgbmFtZTogJ1ZBUicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IENvbXBsZXguSSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgVkE6IHtcbiAgICAgIG5hbWU6ICdWQScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIFByZXNzdXJlXG4gICAgUGE6IHtcbiAgICAgIG5hbWU6ICdQYScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHBzaToge1xuICAgICAgbmFtZTogJ3BzaScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjg5NC43NTcyOTI3NjQ1OSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgYXRtOiB7XG4gICAgICBuYW1lOiAnYXRtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUFJFU1NVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMDEzMjUsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGJhcjoge1xuICAgICAgbmFtZTogJ2JhcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JUTE9ORyxcbiAgICAgIHZhbHVlOiAxMDAwMDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHRvcnI6IHtcbiAgICAgIG5hbWU6ICd0b3JyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUFJFU1NVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMzMuMzIyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtbUhnOiB7XG4gICAgICBuYW1lOiAnbW1IZycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTMzLjMyMixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbW1IMk86IHtcbiAgICAgIG5hbWU6ICdtbUgyTycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogOS44MDY2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY21IMk86IHtcbiAgICAgIG5hbWU6ICdjbUgyTycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogOTguMDY2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgY2hhcmdlXG4gICAgY291bG9tYjoge1xuICAgICAgbmFtZTogJ2NvdWxvbWInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DSEFSR0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBDOiB7XG4gICAgICBuYW1lOiAnQycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0NIQVJHRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBFbGVjdHJpYyBjYXBhY2l0YW5jZVxuICAgIGZhcmFkOiB7XG4gICAgICBuYW1lOiAnZmFyYWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DQVBBQ0lUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEY6IHtcbiAgICAgIG5hbWU6ICdGJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ0FQQUNJVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgcG90ZW50aWFsXG4gICAgdm9sdDoge1xuICAgICAgbmFtZTogJ3ZvbHQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19QT1RFTlRJQUwsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBWOiB7XG4gICAgICBuYW1lOiAnVicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1BPVEVOVElBTCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBFbGVjdHJpYyByZXNpc3RhbmNlXG4gICAgb2htOiB7XG4gICAgICBuYW1lOiAnb2htJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfUkVTSVNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVExPTkcsXG4gICAgICAvLyBCb3RoIE1vaG0gYW5kIG1lZ2FvaG0gYXJlIGFjY2VwdGFibGVcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcblxuICAgIC8qXG4gICAgICogVW5pY29kZSBicmVha3MgaW4gYnJvd3NlcnMgaWYgY2hhcnNldCBpcyBub3Qgc3BlY2lmaWVkXG4gICAgzqk6IHtcbiAgICAgIG5hbWU6ICfOqScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1JFU0lTVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgKi9cbiAgICAvLyBFbGVjdHJpYyBpbmR1Y3RhbmNlXG4gICAgaGVucnk6IHtcbiAgICAgIG5hbWU6ICdoZW5yeScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0lORFVDVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBIOiB7XG4gICAgICBuYW1lOiAnSCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0lORFVDVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgY29uZHVjdGFuY2VcbiAgICBzaWVtZW5zOiB7XG4gICAgICBuYW1lOiAnc2llbWVucycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0NPTkRVQ1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgUzoge1xuICAgICAgbmFtZTogJ1MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DT05EVUNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBNYWduZXRpYyBmbHV4XG4gICAgd2ViZXI6IHtcbiAgICAgIG5hbWU6ICd3ZWJlcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BR05FVElDX0ZMVVgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBXYjoge1xuICAgICAgbmFtZTogJ1diJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBNYWduZXRpYyBmbHV4IGRlbnNpdHlcbiAgICB0ZXNsYToge1xuICAgICAgbmFtZTogJ3Rlc2xhJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWF9ERU5TSVRZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgVDoge1xuICAgICAgbmFtZTogJ1QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQUdORVRJQ19GTFVYX0RFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gQmluYXJ5XG4gICAgYjoge1xuICAgICAgbmFtZTogJ2InLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5CSVQsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuQklOQVJZX1NIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGJpdHM6IHtcbiAgICAgIG5hbWU6ICdiaXRzJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEI6IHtcbiAgICAgIG5hbWU6ICdCJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9TSE9SVCxcbiAgICAgIHZhbHVlOiA4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBieXRlczoge1xuICAgICAgbmFtZTogJ2J5dGVzJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9MT05HLFxuICAgICAgdmFsdWU6IDgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9XG4gIH07IC8vIGFsaWFzZXMgKGZvcm1lcmx5IHBsdXJhbHMpXG5cbiAgdmFyIEFMSUFTRVMgPSB7XG4gICAgbWV0ZXJzOiAnbWV0ZXInLFxuICAgIGluY2hlczogJ2luY2gnLFxuICAgIGZlZXQ6ICdmb290JyxcbiAgICB5YXJkczogJ3lhcmQnLFxuICAgIG1pbGVzOiAnbWlsZScsXG4gICAgbGlua3M6ICdsaW5rJyxcbiAgICByb2RzOiAncm9kJyxcbiAgICBjaGFpbnM6ICdjaGFpbicsXG4gICAgYW5nc3Ryb21zOiAnYW5nc3Ryb20nLFxuICAgIGx0OiAnbCcsXG4gICAgbGl0cmVzOiAnbGl0cmUnLFxuICAgIGxpdGVyOiAnbGl0cmUnLFxuICAgIGxpdGVyczogJ2xpdHJlJyxcbiAgICB0ZWFzcG9vbnM6ICd0ZWFzcG9vbicsXG4gICAgdGFibGVzcG9vbnM6ICd0YWJsZXNwb29uJyxcbiAgICBtaW5pbXM6ICdtaW5pbScsXG4gICAgZmx1aWRkcmFtczogJ2ZsdWlkZHJhbScsXG4gICAgZmx1aWRvdW5jZXM6ICdmbHVpZG91bmNlJyxcbiAgICBnaWxsczogJ2dpbGwnLFxuICAgIGN1cHM6ICdjdXAnLFxuICAgIHBpbnRzOiAncGludCcsXG4gICAgcXVhcnRzOiAncXVhcnQnLFxuICAgIGdhbGxvbnM6ICdnYWxsb24nLFxuICAgIGJlZXJiYXJyZWxzOiAnYmVlcmJhcnJlbCcsXG4gICAgb2lsYmFycmVsczogJ29pbGJhcnJlbCcsXG4gICAgaG9nc2hlYWRzOiAnaG9nc2hlYWQnLFxuICAgIGd0dHM6ICdndHQnLFxuICAgIGdyYW1zOiAnZ3JhbScsXG4gICAgdG9uczogJ3RvbicsXG4gICAgdG9ubmVzOiAndG9ubmUnLFxuICAgIGdyYWluczogJ2dyYWluJyxcbiAgICBkcmFtczogJ2RyYW0nLFxuICAgIG91bmNlczogJ291bmNlJyxcbiAgICBwb3VuZG1hc3NlczogJ3BvdW5kbWFzcycsXG4gICAgaHVuZHJlZHdlaWdodHM6ICdodW5kcmVkd2VpZ2h0JyxcbiAgICBzdGlja3M6ICdzdGljaycsXG4gICAgbGI6ICdsYm0nLFxuICAgIGxiczogJ2xibScsXG4gICAga2lwczogJ2tpcCcsXG4gICAgYWNyZXM6ICdhY3JlJyxcbiAgICBoZWN0YXJlczogJ2hlY3RhcmUnLFxuICAgIHNxZmVldDogJ3NxZnQnLFxuICAgIHNxeWFyZDogJ3NxeWQnLFxuICAgIHNxbWlsZTogJ3NxbWknLFxuICAgIHNxbWlsZXM6ICdzcW1pJyxcbiAgICBtbWhnOiAnbW1IZycsXG4gICAgbW1oMm86ICdtbUgyTycsXG4gICAgY21oMm86ICdjbUgyTycsXG4gICAgc2Vjb25kczogJ3NlY29uZCcsXG4gICAgc2VjczogJ3NlY29uZCcsXG4gICAgbWludXRlczogJ21pbnV0ZScsXG4gICAgbWluczogJ21pbnV0ZScsXG4gICAgaG91cnM6ICdob3VyJyxcbiAgICBocjogJ2hvdXInLFxuICAgIGhyczogJ2hvdXInLFxuICAgIGRheXM6ICdkYXknLFxuICAgIHdlZWtzOiAnd2VlaycsXG4gICAgbW9udGhzOiAnbW9udGgnLFxuICAgIHllYXJzOiAneWVhcicsXG4gICAgZGVjYWRlczogJ2RlY2FkZScsXG4gICAgY2VudHVyaWVzOiAnY2VudHVyeScsXG4gICAgbWlsbGVubmlhOiAnbWlsbGVubml1bScsXG4gICAgaGVydHo6ICdoZXJ0eicsXG4gICAgcmFkaWFuczogJ3JhZGlhbicsXG4gICAgZGVncmVlczogJ2RlZ3JlZScsXG4gICAgZ3JhZGlhbnM6ICdncmFkaWFuJyxcbiAgICBjeWNsZXM6ICdjeWNsZScsXG4gICAgYXJjc2Vjb25kOiAnYXJjc2VjJyxcbiAgICBhcmNzZWNvbmRzOiAnYXJjc2VjJyxcbiAgICBhcmNtaW51dGU6ICdhcmNtaW4nLFxuICAgIGFyY21pbnV0ZXM6ICdhcmNtaW4nLFxuICAgIEJUVXM6ICdCVFUnLFxuICAgIHdhdHRzOiAnd2F0dCcsXG4gICAgam91bGVzOiAnam91bGUnLFxuICAgIGFtcGVyZXM6ICdhbXBlcmUnLFxuICAgIGNvdWxvbWJzOiAnY291bG9tYicsXG4gICAgdm9sdHM6ICd2b2x0JyxcbiAgICBvaG1zOiAnb2htJyxcbiAgICBmYXJhZHM6ICdmYXJhZCcsXG4gICAgd2ViZXJzOiAnd2ViZXInLFxuICAgIHRlc2xhczogJ3Rlc2xhJyxcbiAgICBlbGVjdHJvbnZvbHRzOiAnZWxlY3Ryb252b2x0JyxcbiAgICBtb2xlczogJ21vbGUnLFxuICAgIGJpdDogJ2JpdHMnLFxuICAgIFwiYnl0ZVwiOiAnYnl0ZXMnXG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlcyBmb3IgdGhlIGFuZ2xlIHVuaXRzLlxuICAgKiBWYWx1ZSBpcyBjYWxjdWxhdGVkIGFzIG51bWJlciBvciBCaWdOdW1iZXIgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSB7e251bWJlcjogJ251bWJlcicgfCAnQmlnTnVtYmVyJ319IGNvbmZpZ1xuICAgKi9cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVBbmdsZVZhbHVlcyhjb25maWcpIHtcbiAgICBpZiAoY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicpIHtcbiAgICAgIHZhciBwaSA9ICgwLCBfY29uc3RhbnRzLmNyZWF0ZUJpZ051bWJlclBpKShfQmlnTnVtYmVyKTtcbiAgICAgIFVOSVRTLnJhZC52YWx1ZSA9IG5ldyBfQmlnTnVtYmVyKDEpO1xuICAgICAgVU5JVFMuZGVnLnZhbHVlID0gcGkuZGl2KDE4MCk7IC8vIDIgKiBwaSAvIDM2MFxuXG4gICAgICBVTklUUy5ncmFkLnZhbHVlID0gcGkuZGl2KDIwMCk7IC8vIDIgKiBwaSAvIDQwMFxuXG4gICAgICBVTklUUy5jeWNsZS52YWx1ZSA9IHBpLnRpbWVzKDIpOyAvLyAyICogcGlcblxuICAgICAgVU5JVFMuYXJjc2VjLnZhbHVlID0gcGkuZGl2KDY0ODAwMCk7IC8vIDIgKiBwaSAvIDM2MCAvIDM2MDBcblxuICAgICAgVU5JVFMuYXJjbWluLnZhbHVlID0gcGkuZGl2KDEwODAwKTsgLy8gMiAqIHBpIC8gMzYwIC8gNjBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbnVtYmVyXG4gICAgICBVTklUUy5yYWQudmFsdWUgPSAxO1xuICAgICAgVU5JVFMuZGVnLnZhbHVlID0gTWF0aC5QSSAvIDE4MDsgLy8gMiAqIHBpIC8gMzYwXG5cbiAgICAgIFVOSVRTLmdyYWQudmFsdWUgPSBNYXRoLlBJIC8gMjAwOyAvLyAyICogcGkgLyA0MDBcblxuICAgICAgVU5JVFMuY3ljbGUudmFsdWUgPSBNYXRoLlBJICogMjsgLy8gMiAqIHBpXG5cbiAgICAgIFVOSVRTLmFyY3NlYy52YWx1ZSA9IE1hdGguUEkgLyA2NDgwMDA7IC8vIDIgKiBwaSAvIDM2MCAvIDM2MDBcblxuICAgICAgVU5JVFMuYXJjbWluLnZhbHVlID0gTWF0aC5QSSAvIDEwODAwOyAvLyAyICogcGkgLyAzNjAgLyA2MFxuICAgIH0gLy8gY29weSB0byB0aGUgZnVsbCBuYW1lcyBvZiB0aGUgYW5nbGVzXG5cblxuICAgIFVOSVRTLnJhZGlhbi52YWx1ZSA9IFVOSVRTLnJhZC52YWx1ZTtcbiAgICBVTklUUy5kZWdyZWUudmFsdWUgPSBVTklUUy5kZWcudmFsdWU7XG4gICAgVU5JVFMuZ3JhZGlhbi52YWx1ZSA9IFVOSVRTLmdyYWQudmFsdWU7XG4gIH0gLy8gYXBwbHkgdGhlIGFuZ2xlIHZhbHVlcyBub3dcblxuXG4gIGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKGNvbmZpZyk7XG5cbiAgaWYgKG9uKSB7XG4gICAgLy8gcmVjYWxjdWxhdGUgdGhlIHZhbHVlcyBvbiBjaGFuZ2Ugb2YgY29uZmlndXJhdGlvblxuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIubnVtYmVyICE9PSBwcmV2Lm51bWJlcikge1xuICAgICAgICBjYWxjdWxhdGVBbmdsZVZhbHVlcyhjdXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQSB1bml0IHN5c3RlbSBpcyBhIHNldCBvZiBkaW1lbnNpb25hbGx5IGluZGVwZW5kZW50IGJhc2UgdW5pdHMgcGx1cyBhIHNldCBvZiBkZXJpdmVkIHVuaXRzLCBmb3JtZWQgYnkgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIG9mIHRoZSBiYXNlIHVuaXRzLCB0aGF0IGFyZSBieSBjb252ZW50aW9uIHVzZWQgd2l0aCB0aGUgdW5pdCBzeXN0ZW0uXG4gICAqIEEgdXNlciBwZXJoYXBzIGNvdWxkIGlzc3VlIGEgY29tbWFuZCB0byBzZWxlY3QgYSBwcmVmZXJyZWQgdW5pdCBzeXN0ZW0sIG9yIHVzZSB0aGUgZGVmYXVsdCAoc2VlIGJlbG93KS5cbiAgICogQXV0byB1bml0IHN5c3RlbTogVGhlIGRlZmF1bHQgdW5pdCBzeXN0ZW0gaXMgdXBkYXRlZCBvbiB0aGUgZmx5IGFueXRpbWUgYSB1bml0IGlzIHBhcnNlZC4gVGhlIGNvcnJlc3BvbmRpbmcgdW5pdCBpbiB0aGUgZGVmYXVsdCB1bml0IHN5c3RlbSBpcyB1cGRhdGVkLCBzbyB0aGF0IGFuc3dlcnMgYXJlIGdpdmVuIGluIHRoZSBzYW1lIHVuaXRzIHRoZSB1c2VyIHN1cHBsaWVzLlxuICAgKi9cblxuXG4gIHZhciBVTklUX1NZU1RFTVMgPSB7XG4gICAgc2k6IHtcbiAgICAgIC8vIEJhc2UgdW5pdHNcbiAgICAgIE5PTkU6IHtcbiAgICAgICAgdW5pdDogVU5JVF9OT05FLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gICAgICB9LFxuICAgICAgTEVOR1RIOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLm0sXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgTUFTUzoge1xuICAgICAgICB1bml0OiBVTklUUy5nLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JULmtcbiAgICAgIH0sXG4gICAgICBUSU1FOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLnMsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgQ1VSUkVOVDoge1xuICAgICAgICB1bml0OiBVTklUUy5BLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIFRFTVBFUkFUVVJFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkssXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgTFVNSU5PVVNfSU5URU5TSVRZOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLmNkLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEFNT1VOVF9PRl9TVUJTVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMubW9sLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEFOR0xFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLnJhZCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBCSVQ6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuYml0cyxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICAvLyBEZXJpdmVkIHVuaXRzXG4gICAgICBGT1JDRToge1xuICAgICAgICB1bml0OiBVTklUUy5OLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEVORVJHWToge1xuICAgICAgICB1bml0OiBVTklUUy5KLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIFBPV0VSOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLlcsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgUFJFU1NVUkU6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuUGEsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ0hBUkdFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkMsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ0FQQUNJVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuRixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19QT1RFTlRJQUw6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuVixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19SRVNJU1RBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLm9obSxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19JTkRVQ1RBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkgsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ09ORFVDVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuUyxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBNQUdORVRJQ19GTFVYOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLldiLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIE1BR05FVElDX0ZMVVhfREVOU0lUWToge1xuICAgICAgICB1bml0OiBVTklUUy5ULFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEZSRVFVRU5DWToge1xuICAgICAgICB1bml0OiBVTklUUy5IeixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIENsb25lIHRvIGNyZWF0ZSB0aGUgb3RoZXIgdW5pdCBzeXN0ZW1zXG5cbiAgVU5JVF9TWVNURU1TLmNncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoVU5JVF9TWVNURU1TLnNpKSk7XG4gIFVOSVRfU1lTVEVNUy5jZ3MuTEVOR1RIID0ge1xuICAgIHVuaXQ6IFVOSVRTLm0sXG4gICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVC5jXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuTUFTUyA9IHtcbiAgICB1bml0OiBVTklUUy5nLFxuICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuRk9SQ0UgPSB7XG4gICAgdW5pdDogVU5JVFMuZHluLFxuICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuRU5FUkdZID0ge1xuICAgIHVuaXQ6IFVOSVRTLmVyZyxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07IC8vIHRoZXJlIGFyZSB3aG9sbHkgNCB1bmlxdWUgY2dzIHN5c3RlbXMgZm9yIGVsZWN0cmljaXR5IGFuZCBtYWduZXRpc20sXG4gIC8vIHNvIGxldCdzIG5vdCB3b3JyeSBhYm91dCBpdCB1bmxlc3Mgc29tZWJvZHkgY29tcGxhaW5zXG5cbiAgVU5JVF9TWVNURU1TLnVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShVTklUX1NZU1RFTVMuc2kpKTtcbiAgVU5JVF9TWVNURU1TLnVzLkxFTkdUSCA9IHtcbiAgICB1bml0OiBVTklUUy5mdCxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5NQVNTID0ge1xuICAgIHVuaXQ6IFVOSVRTLmxibSxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5URU1QRVJBVFVSRSA9IHtcbiAgICB1bml0OiBVTklUUy5kZWdGLFxuICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ11cbiAgfTtcbiAgVU5JVF9TWVNURU1TLnVzLkZPUkNFID0ge1xuICAgIHVuaXQ6IFVOSVRTLmxiZixcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5FTkVSR1kgPSB7XG4gICAgdW5pdDogVU5JVFMuQlRVLFxuICAgIHByZWZpeDogUFJFRklYRVMuQlRVWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuUE9XRVIgPSB7XG4gICAgdW5pdDogVU5JVFMuaHAsXG4gICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuUFJFU1NVUkUgPSB7XG4gICAgdW5pdDogVU5JVFMucHNpLFxuICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ11cbiAgfTsgLy8gQWRkIGFkZGl0aW9uYWwgdW5pdCBzeXN0ZW1zIGhlcmUuXG4gIC8vIENob29zZSBhIHVuaXQgc3lzdGVtIHRvIHNlZWQgdGhlIGF1dG8gdW5pdCBzeXN0ZW0uXG5cbiAgVU5JVF9TWVNURU1TLmF1dG8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFVOSVRfU1lTVEVNUy5zaSkpOyAvLyBTZXQgdGhlIGN1cnJlbnQgdW5pdCBzeXN0ZW1cblxuICB2YXIgY3VycmVudFVuaXRTeXN0ZW0gPSBVTklUX1NZU1RFTVMuYXV0bztcbiAgLyoqXG4gICAqIFNldCBhIHVuaXQgc3lzdGVtIGZvciBmb3JtYXR0aW5nIGRlcml2ZWQgdW5pdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gVGhlIG5hbWUgb2YgdGhlIHVuaXQgc3lzdGVtLlxuICAgKi9cblxuICBVbml0LnNldFVuaXRTeXN0ZW0gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVF9TWVNURU1TLCBuYW1lKSkge1xuICAgICAgY3VycmVudFVuaXRTeXN0ZW0gPSBVTklUX1NZU1RFTVNbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5pdCBzeXN0ZW0gJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0LiBDaG9pY2VzIGFyZTogJyArIE9iamVjdC5rZXlzKFVOSVRfU1lTVEVNUykuam9pbignLCAnKSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHVuaXQgc3lzdGVtLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IHVuaXQgc3lzdGVtLlxuICAgKi9cblxuXG4gIFVuaXQuZ2V0VW5pdFN5c3RlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfa2V5IGluIFVOSVRfU1lTVEVNUykge1xuICAgICAgaWYgKFVOSVRfU1lTVEVNU1tfa2V5XSA9PT0gY3VycmVudFVuaXRTeXN0ZW0pIHtcbiAgICAgICAgcmV0dXJuIF9rZXk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ29udmVydGVycyB0byBjb252ZXJ0IGZyb20gbnVtYmVyIHRvIGFuIG90aGVyIG51bWVyaWMgdHlwZSBsaWtlIEJpZ051bWJlclxuICAgKiBvciBGcmFjdGlvblxuICAgKi9cblxuXG4gIFVuaXQudHlwZUNvbnZlcnRlcnMgPSB7XG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHggKyAnJyk7IC8vIHN0cmluZ2lmeSB0byBwcmV2ZW50IGNvbnN0cnVjdG9yIGVycm9yXG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBfRnJhY3Rpb24oeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHJpZ2h0IGNvbnZlcnRvciBmdW5jdGlvbiBjb3JyZXNwb25kaW5nIHdpdGggdGhlIHR5cGVcbiAgICogb2YgcHJvdmlkZWQgZXhhbXBsZVZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAgIEEgc3RyaW5nICdudW1iZXInLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2YgYW4gdW5rbm93biB0eXBlLFxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG5cbiAgVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAoIVVuaXQudHlwZUNvbnZlcnRlcnNbdHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgXCInICsgdHlwZSArICdcIicpO1xuICAgIH1cblxuICAgIHJldHVybiBVbml0LnR5cGVDb252ZXJ0ZXJzW3R5cGVdO1xuICB9OyAvLyBBZGQgZGltZW5zaW9ucyB0byBlYWNoIGJ1aWx0LWluIHVuaXRcblxuXG4gIGZvciAodmFyIF9rZXkyIGluIFVOSVRTKSB7XG4gICAgdmFyIHVuaXQgPSBVTklUU1tfa2V5Ml07XG4gICAgdW5pdC5kaW1lbnNpb25zID0gdW5pdC5iYXNlLmRpbWVuc2lvbnM7XG4gIH0gLy8gQ3JlYXRlIGFsaWFzZXNcblxuXG4gIGZvciAodmFyIF9uYW1lMiBpbiBBTElBU0VTKSB7XG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShBTElBU0VTLCBfbmFtZTIpKSB7XG4gICAgICB2YXIgX3VuaXQyID0gVU5JVFNbQUxJQVNFU1tfbmFtZTJdXTtcbiAgICAgIHZhciBhbGlhcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5MyBpbiBfdW5pdDIpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShfdW5pdDIsIF9rZXkzKSkge1xuICAgICAgICAgIGFsaWFzW19rZXkzXSA9IF91bml0Mltfa2V5M107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWxpYXMubmFtZSA9IF9uYW1lMjtcbiAgICAgIFVOSVRTW19uYW1lMl0gPSBhbGlhcztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnRVbml0TmFtZUlzVmFsaWQobmFtZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIF9jID0gbmFtZS5jaGFyQXQoaSk7XG5cbiAgICAgIHZhciBpc1ZhbGlkQWxwaGEgPSBmdW5jdGlvbiBpc1ZhbGlkQWxwaGEocCkge1xuICAgICAgICByZXR1cm4gL15bYS16QS1aXSQvLnRlc3QocCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX2lzRGlnaXQgPSBmdW5jdGlvbiBfaXNEaWdpdChjKSB7XG4gICAgICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JztcbiAgICAgIH07XG5cbiAgICAgIGlmIChpID09PSAwICYmICFpc1ZhbGlkQWxwaGEoX2MpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bml0IG5hbWUgKG11c3QgYmVnaW4gd2l0aCBhbHBoYSBjaGFyYWN0ZXIpOiBcIicgKyBuYW1lICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpID4gMCAmJiAhKGlzVmFsaWRBbHBoYShfYykgfHwgX2lzRGlnaXQoX2MpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5pdCBuYW1lIChvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkKTogXCInICsgbmFtZSArICdcIicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgY3JlYXRlVW5pdFNpbmdsZS5cbiAgICogRXhhbXBsZTpcbiAgICogIGNyZWF0ZVVuaXQoe1xuICAgKiAgICBmb286IHsgfSxcbiAgICogICAgYmFyOiB7XG4gICAqICAgICAgZGVmaW5pdGlvbjogJ2tnL2ZvbycsXG4gICAqICAgICAgYWxpYXNlczogWydiYScsICdiYXJyJywgJ2JhcnMnXSxcbiAgICogICAgICBvZmZzZXQ6IDIwMFxuICAgKiAgICB9LFxuICAgKiAgICBiYXo6ICc0IGJhcidcbiAgICogIH0sXG4gICAqICB7XG4gICAqICAgIG92ZXJyaWRlOiB0cnVlXG4gICAqICB9KVxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgICAgT2JqZWN0IG1hcC4gRWFjaCBrZXkgYmVjb21lcyBhIHVuaXQgd2hpY2ggaXMgZGVmaW5lZCBieSBpdHMgdmFsdWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuXG5cbiAgVW5pdC5jcmVhdGVVbml0ID0gZnVuY3Rpb24gKG9iaiwgb3B0aW9ucykge1xuICAgIGlmIChfdHlwZW9mKG9iaikgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY3JlYXRlVW5pdCBleHBlY3RzIGZpcnN0IHBhcmFtZXRlciB0byBiZSBvZiB0eXBlICdPYmplY3QnXCIpO1xuICAgIH0gLy8gUmVtb3ZlIGFsbCB1bml0cyBhbmQgYWxpYXNlcyB3ZSBhcmUgb3ZlcnJpZGluZ1xuXG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICBmb3IgKHZhciBfa2V5NCBpbiBvYmopIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvYmosIF9rZXk0KSkge1xuICAgICAgICAgIFVuaXQuZGVsZXRlVW5pdChfa2V5NCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqW19rZXk0XS5hbGlhc2VzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpbX2tleTRdLmFsaWFzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIFVuaXQuZGVsZXRlVW5pdChvYmpbX2tleTRdLmFsaWFzZXNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVE9ETzogdHJhdmVyc2UgbXVsdGlwbGUgdGltZXMgdW50aWwgYWxsIHVuaXRzIGhhdmUgYmVlbiBhZGRlZFxuXG5cbiAgICB2YXIgbGFzdFVuaXQ7XG5cbiAgICBmb3IgKHZhciBfa2V5NSBpbiBvYmopIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob2JqLCBfa2V5NSkpIHtcbiAgICAgICAgbGFzdFVuaXQgPSBVbml0LmNyZWF0ZVVuaXRTaW5nbGUoX2tleTUsIG9ialtfa2V5NV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsYXN0VW5pdDtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHVzZXItZGVmaW5lZCB1bml0IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBVbml0IHR5cGUuXG4gICAqIEV4YW1wbGU6XG4gICAqICBjcmVhdGVVbml0U2luZ2xlKCdrbm90JywgJzAuNTE0NDQ0NDQ0IG0vcycpXG4gICAqICBjcmVhdGVVbml0U2luZ2xlKCdhY3JlJywgbmV3IFVuaXQoNDM1NjAsICdmdF4yJykpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgVGhlIG5hbWUgb2YgdGhlIG5ldyB1bml0LiBNdXN0IGJlIHVuaXF1ZS4gRXhhbXBsZTogJ2tub3QnXG4gICAqIEBwYXJhbSB7c3RyaW5nLCBVbml0LCBPYmplY3R9IGRlZmluaXRpb24gICAgICBEZWZpbml0aW9uIG9mIHRoZSB1bml0IGluIHRlcm1zXG4gICAqIG9mIGV4aXN0aW5nIHVuaXRzLiBGb3IgZXhhbXBsZSwgJzAuNTE0NDQ0NDQ0IG0gLyBzJy4gQ2FuIGJlIGEgVW5pdCwgYSBzdHJpbmcsXG4gICAqIG9yIGFuIE9iamVjdC4gSWYgYW4gT2JqZWN0LCBtYXkgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqICAgLSBkZWZpbml0aW9uIHtzdHJpbmd8VW5pdH0gVGhlIGRlZmluaXRpb24gb2YgdGhpcyB1bml0LlxuICAgKiAgIC0gcHJlZml4ZXMge3N0cmluZ30gXCJub25lXCIsIFwic2hvcnRcIiwgXCJsb25nXCIsIFwiYmluYXJ5X3Nob3J0XCIsIG9yIFwiYmluYXJ5X2xvbmdcIi5cbiAgICogICAgIFRoZSBkZWZhdWx0IGlzIFwibm9uZVwiLlxuICAgKiAgIC0gYWxpYXNlcyB7QXJyYXl9IEFycmF5IG9mIHN0cmluZ3MuIEV4YW1wbGU6IFsna25vdHMnLCAna3QnLCAna3RzJ11cbiAgICogICAtIG9mZnNldCB7TnVtZXJpY30gQW4gb2Zmc2V0IHRvIGFwcGx5IHdoZW4gY29udmVydGluZyBmcm9tIHRoZSB1bml0LiBGb3JcbiAgICogICAgIGV4YW1wbGUsIHRoZSBvZmZzZXQgZm9yIGNlbHNpdXMgaXMgMjczLjE1IGFuZCB0aGUgb2Zmc2V0IGZvciBmYXJoZW5oZWl0XG4gICAqICAgICBpcyA0NTkuNjcuIERlZmF1bHQgaXMgMC5cbiAgICogICAtIGJhc2VOYW1lIHtzdHJpbmd9IElmIHRoZSB1bml0J3MgZGltZW5zaW9uIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgYW55IG90aGVyXG4gICAqICAgICBiYXNlIHVuaXQsIHRoZSBuYW1lIG9mIHRoZSBuZXdseSBjcmVhdGUgYmFzZSB1bml0LiBPdGhlcndpc2UsIHRoaXMgcHJvcGVydHlcbiAgICogICAgIGhhcyBubyBlZmZlY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICAgKG9wdGlvbmFsKSBBbiBvYmplY3QgY29udGFpbmluZyBhbnkgb2YgdGhlIGZvbGxvd2luZ1xuICAgKiBwcm9wZXJ0aWVzOlxuICAgKiAgIC0gb3ZlcnJpZGUge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyB1bml0IHNob3VsZCBiZSBhbGxvd2VkIHRvIG92ZXJyaWRlIGV4aXN0aW5nXG4gICAqICAgICB1bml0cy5cbiAgICpcbiAgICogQHJldHVybiB7VW5pdH1cbiAgICovXG5cblxuICBVbml0LmNyZWF0ZVVuaXRTaW5nbGUgPSBmdW5jdGlvbiAobmFtZSwgb2JqLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgb2JqID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNyZWF0ZVVuaXRTaW5nbGUgZXhwZWN0cyBmaXJzdCBwYXJhbWV0ZXIgdG8gYmUgb2YgdHlwZSAnc3RyaW5nJ1wiKTtcbiAgICB9IC8vIENoZWNrIGNvbGxpc2lvbnMgd2l0aCBleGlzdGluZyB1bml0c1xuXG5cbiAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRTLCBuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIHVuaXQgXCInICsgbmFtZSArICdcIjogYSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJyk7XG4gICAgfSAvLyBUT0RPOiBWYWxpZGF0ZSBuYW1lIGZvciBjb2xsaXNpb25zIHdpdGggb3RoZXIgYnVpbHQtaW4gZnVuY3Rpb25zIChsaWtlIGFicyBvciBjb3MsIGZvciBleGFtcGxlKSwgYW5kIGZvciBhY2NlcHRhYmxlIHZhcmlhYmxlIG5hbWVzLiBGb3IgZXhhbXBsZSwgJzQyJyBpcyBwcm9iYWJseSBub3QgYSB2YWxpZCB1bml0LiBOb3IgaXMgJyUnLCBzaW5jZSBpdCBpcyBhbHNvIGFuIG9wZXJhdG9yLlxuXG5cbiAgICBhc3NlcnRVbml0TmFtZUlzVmFsaWQobmFtZSk7XG4gICAgdmFyIGRlZlVuaXQgPSBudWxsOyAvLyBUaGUgVW5pdCBmcm9tIHdoaWNoIHRoZSBuZXcgdW5pdCB3aWxsIGJlIGNyZWF0ZWQuXG5cbiAgICB2YXIgYWxpYXNlcyA9IFtdO1xuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciBkZWZpbml0aW9uO1xuICAgIHZhciBwcmVmaXhlcztcbiAgICB2YXIgYmFzZU5hbWU7XG5cbiAgICBpZiAob2JqICYmIG9iai50eXBlID09PSAnVW5pdCcpIHtcbiAgICAgIGRlZlVuaXQgPSBvYmouY2xvbmUoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAob2JqICE9PSAnJykge1xuICAgICAgICBkZWZpbml0aW9uID0gb2JqO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX3R5cGVvZihvYmopID09PSAnb2JqZWN0Jykge1xuICAgICAgZGVmaW5pdGlvbiA9IG9iai5kZWZpbml0aW9uO1xuICAgICAgcHJlZml4ZXMgPSBvYmoucHJlZml4ZXM7XG4gICAgICBvZmZzZXQgPSBvYmoub2Zmc2V0O1xuICAgICAgYmFzZU5hbWUgPSBvYmouYmFzZU5hbWU7XG5cbiAgICAgIGlmIChvYmouYWxpYXNlcykge1xuICAgICAgICBhbGlhc2VzID0gb2JqLmFsaWFzZXMudmFsdWVPZigpOyAvLyBhbGlhc2VzIGNvdWxkIGJlIGEgTWF0cml4LCBzbyBjb252ZXJ0IHRvIEFycmF5XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgdW5pdCBcIicgKyBuYW1lICsgJ1wiIGZyb20gXCInICsgb2JqLnRvU3RyaW5nKCkgKyAnXCI6IGV4cGVjdGluZyBcInN0cmluZ1wiIG9yIFwiVW5pdFwiIG9yIFwiT2JqZWN0XCInKTtcbiAgICB9XG5cbiAgICBpZiAoYWxpYXNlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVFMsIGFsaWFzZXNbaV0pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGFsaWFzIFwiJyArIGFsaWFzZXNbaV0gKyAnXCI6IGEgdW5pdCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb24gJiYgdHlwZW9mIGRlZmluaXRpb24gPT09ICdzdHJpbmcnICYmICFkZWZVbml0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBkZWZVbml0ID0gVW5pdC5wYXJzZShkZWZpbml0aW9uLCB7XG4gICAgICAgICAgYWxsb3dOb1VuaXRzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgZXgubWVzc2FnZSA9ICdDb3VsZCBub3QgY3JlYXRlIHVuaXQgXCInICsgbmFtZSArICdcIiBmcm9tIFwiJyArIGRlZmluaXRpb24gKyAnXCI6ICcgKyBleC5tZXNzYWdlO1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi50eXBlID09PSAnVW5pdCcpIHtcbiAgICAgIGRlZlVuaXQgPSBkZWZpbml0aW9uLmNsb25lKCk7XG4gICAgfVxuXG4gICAgYWxpYXNlcyA9IGFsaWFzZXMgfHwgW107XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBpZiAocHJlZml4ZXMgJiYgcHJlZml4ZXMudG9VcHBlckNhc2UpIHtcbiAgICAgIHByZWZpeGVzID0gUFJFRklYRVNbcHJlZml4ZXMudG9VcHBlckNhc2UoKV0gfHwgUFJFRklYRVMuTk9ORTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZXMgPSBQUkVGSVhFUy5OT05FO1xuICAgIH0gLy8gSWYgZGVmVW5pdCBpcyBudWxsLCBpdCBpcyBiZWNhdXNlIHRoZSB1c2VyIGRpZCBub3RcbiAgICAvLyBzcGVjaWZ5IGEgZGVmaW50aW9uLiBTbyBjcmVhdGUgYSBuZXcgYmFzZSBkaW1lbnNpb24uXG5cblxuICAgIHZhciBuZXdVbml0ID0ge307XG5cbiAgICBpZiAoIWRlZlVuaXQpIHtcbiAgICAgIC8vIEFkZCBhIG5ldyBiYXNlIGRpbWVuc2lvblxuICAgICAgYmFzZU5hbWUgPSBiYXNlTmFtZSB8fCBuYW1lICsgJ19TVFVGRic7IC8vIGZvbyAtLT4gZm9vX1NUVUZGLCBvciB0aGUgZXNzZW5jZSBvZiBmb29cblxuICAgICAgaWYgKEJBU0VfRElNRU5TSU9OUy5pbmRleE9mKGJhc2VOYW1lKSA+PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBuZXcgYmFzZSB1bml0IFwiJyArIG5hbWUgKyAnXCI6IGEgYmFzZSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzIChhbmQgY2Fubm90IGJlIG92ZXJyaWRkZW4pJyk7XG4gICAgICB9XG5cbiAgICAgIEJBU0VfRElNRU5TSU9OUy5wdXNoKGJhc2VOYW1lKTsgLy8gUHVzaCAwIG9udG8gZXhpc3RpbmcgYmFzZSB1bml0c1xuXG4gICAgICBmb3IgKHZhciBiIGluIEJBU0VfVU5JVFMpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShCQVNFX1VOSVRTLCBiKSkge1xuICAgICAgICAgIEJBU0VfVU5JVFNbYl0uZGltZW5zaW9uc1tCQVNFX0RJTUVOU0lPTlMubGVuZ3RoIC0gMV0gPSAwO1xuICAgICAgICB9XG4gICAgICB9IC8vIEFkZCB0aGUgbmV3IGJhc2UgdW5pdFxuXG5cbiAgICAgIHZhciBuZXdCYXNlVW5pdCA9IHtcbiAgICAgICAgZGltZW5zaW9uczogW11cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IF9pNisrKSB7XG4gICAgICAgIG5ld0Jhc2VVbml0LmRpbWVuc2lvbnNbX2k2XSA9IDA7XG4gICAgICB9XG5cbiAgICAgIG5ld0Jhc2VVbml0LmRpbWVuc2lvbnNbQkFTRV9ESU1FTlNJT05TLmxlbmd0aCAtIDFdID0gMTtcbiAgICAgIG5ld0Jhc2VVbml0LmtleSA9IGJhc2VOYW1lO1xuICAgICAgQkFTRV9VTklUU1tiYXNlTmFtZV0gPSBuZXdCYXNlVW5pdDtcbiAgICAgIG5ld1VuaXQgPSB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBkaW1lbnNpb25zOiBCQVNFX1VOSVRTW2Jhc2VOYW1lXS5kaW1lbnNpb25zLnNsaWNlKDApLFxuICAgICAgICBwcmVmaXhlczogcHJlZml4ZXMsXG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBiYXNlOiBCQVNFX1VOSVRTW2Jhc2VOYW1lXVxuICAgICAgfTtcbiAgICAgIGN1cnJlbnRVbml0U3lzdGVtW2Jhc2VOYW1lXSA9IHtcbiAgICAgICAgdW5pdDogbmV3VW5pdCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VW5pdCA9IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IGRlZlVuaXQudmFsdWUsXG4gICAgICAgIGRpbWVuc2lvbnM6IGRlZlVuaXQuZGltZW5zaW9ucy5zbGljZSgwKSxcbiAgICAgICAgcHJlZml4ZXM6IHByZWZpeGVzLFxuICAgICAgICBvZmZzZXQ6IG9mZnNldFxuICAgICAgfTsgLy8gQ3JlYXRlIGEgbmV3IGJhc2UgaWYgbm8gbWF0Y2hpbmcgYmFzZSBleGlzdHNcblxuICAgICAgdmFyIGFueU1hdGNoID0gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIF9pNyBpbiBCQVNFX1VOSVRTKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoQkFTRV9VTklUUywgX2k3KSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IHRydWU7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKChuZXdVbml0LmRpbWVuc2lvbnNbal0gfHwgMCkgLSAoQkFTRV9VTklUU1tfaTddLmRpbWVuc2lvbnNbal0gfHwgMCkpID4gMWUtMTIpIHtcbiAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBhbnlNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBuZXdVbml0LmJhc2UgPSBCQVNFX1VOSVRTW19pN107XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhbnlNYXRjaCkge1xuICAgICAgICBiYXNlTmFtZSA9IGJhc2VOYW1lIHx8IG5hbWUgKyAnX1NUVUZGJzsgLy8gZm9vIC0tPiBmb29fU1RVRkYsIG9yIHRoZSBlc3NlbmNlIG9mIGZvb1xuICAgICAgICAvLyBBZGQgdGhlIG5ldyBiYXNlIHVuaXRcblxuICAgICAgICB2YXIgX25ld0Jhc2VVbml0ID0ge1xuICAgICAgICAgIGRpbWVuc2lvbnM6IGRlZlVuaXQuZGltZW5zaW9ucy5zbGljZSgwKVxuICAgICAgICB9O1xuICAgICAgICBfbmV3QmFzZVVuaXQua2V5ID0gYmFzZU5hbWU7XG4gICAgICAgIEJBU0VfVU5JVFNbYmFzZU5hbWVdID0gX25ld0Jhc2VVbml0O1xuICAgICAgICBjdXJyZW50VW5pdFN5c3RlbVtiYXNlTmFtZV0gPSB7XG4gICAgICAgICAgdW5pdDogbmV3VW5pdCxcbiAgICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gICAgICAgIH07XG4gICAgICAgIG5ld1VuaXQuYmFzZSA9IEJBU0VfVU5JVFNbYmFzZU5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIFVuaXQuVU5JVFNbbmFtZV0gPSBuZXdVbml0O1xuXG4gICAgZm9yICh2YXIgX2k4ID0gMDsgX2k4IDwgYWxpYXNlcy5sZW5ndGg7IF9pOCsrKSB7XG4gICAgICB2YXIgYWxpYXNOYW1lID0gYWxpYXNlc1tfaThdO1xuICAgICAgdmFyIF9hbGlhcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5NiBpbiBuZXdVbml0KSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobmV3VW5pdCwgX2tleTYpKSB7XG4gICAgICAgICAgX2FsaWFzW19rZXk2XSA9IG5ld1VuaXRbX2tleTZdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9hbGlhcy5uYW1lID0gYWxpYXNOYW1lO1xuICAgICAgVW5pdC5VTklUU1thbGlhc05hbWVdID0gX2FsaWFzO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVW5pdChudWxsLCBuYW1lKTtcbiAgfTtcblxuICBVbml0LmRlbGV0ZVVuaXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGRlbGV0ZSBVbml0LlVOSVRTW25hbWVdO1xuICB9OyAvLyBleHBvc2UgYXJyYXlzIHdpdGggcHJlZml4ZXMsIGRpbWVuc2lvbnMsIHVuaXRzLCBzeXN0ZW1zXG5cblxuICBVbml0LlBSRUZJWEVTID0gUFJFRklYRVM7XG4gIFVuaXQuQkFTRV9ESU1FTlNJT05TID0gQkFTRV9ESU1FTlNJT05TO1xuICBVbml0LkJBU0VfVU5JVFMgPSBCQVNFX1VOSVRTO1xuICBVbml0LlVOSVRfU1lTVEVNUyA9IFVOSVRfU1lTVEVNUztcbiAgVW5pdC5VTklUUyA9IFVOSVRTO1xuICByZXR1cm4gVW5pdDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuaXRDbGFzcyA9IGNyZWF0ZVVuaXRDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3JlYXRlVW5pdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2NyZWF0ZVVuaXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnVW5pdCddO1xudmFyIGNyZWF0ZUNyZWF0ZVVuaXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgVW5pdCA9IF9yZWYuVW5pdDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KHtcbiAgICogICAgICAgYmFzZVVuaXQxOiB7XG4gICAqICAgICAgICAgYWxpYXNlczogW3N0cmluZywgLi4uXVxuICAgKiAgICAgICAgIHByZWZpeGVzOiBvYmplY3RcbiAgICogICAgICAgfSxcbiAgICogICAgICAgdW5pdDI6IHtcbiAgICogICAgICAgICBkZWZpbml0aW9uOiBzdHJpbmcsXG4gICAqICAgICAgICAgYWxpYXNlczogW3N0cmluZywgLi4uXVxuICAgKiAgICAgICAgIHByZWZpeGVzOiBvYmplY3QsXG4gICAqICAgICAgICAgb2Zmc2V0OiBudW1iZXJcbiAgICogICAgICAgfSxcbiAgICogICAgICAgdW5pdDM6IHN0cmluZyAgICAvLyBTaG9ydGN1dFxuICAgKiAgICAgfSlcbiAgICpcbiAgICogICAgIC8vIEFub3RoZXIgc2hvcnRjdXQ6XG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoc3RyaW5nLCB1bml0IDogc3RyaW5nLCBbb2JqZWN0XSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoJ2ZvbycpXG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoJ2tub3QnLCB7ZGVmaW5pdGlvbjogJzAuNTE0NDQ0NDQ0IG0vcycsIGFsaWFzZXM6IFsna25vdHMnLCAna3QnLCAna3RzJ119KVxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KCdtcGgnLCAnMSBtaWxlL2hvdXInKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgIFRoZSBuYW1lIG9mIHRoZSBuZXcgdW5pdC4gTXVzdCBiZSB1bmlxdWUuIEV4YW1wbGU6ICdrbm90J1xuICAgKiBAcGFyYW0ge3N0cmluZywgVW5pdH0gZGVmaW5pdGlvbiAgICAgIERlZmluaXRpb24gb2YgdGhlIHVuaXQgaW4gdGVybXMgb2YgZXhpc3RpbmcgdW5pdHMuIEZvciBleGFtcGxlLCAnMC41MTQ0NDQ0NDQgbSAvIHMnLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgIChvcHRpb25hbCkgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYW55IG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogICAgIC0gYHByZWZpeGVzIHtzdHJpbmd9YCBcIm5vbmVcIiwgXCJzaG9ydFwiLCBcImxvbmdcIiwgXCJiaW5hcnlfc2hvcnRcIiwgb3IgXCJiaW5hcnlfbG9uZ1wiLiBUaGUgZGVmYXVsdCBpcyBcIm5vbmVcIi5cbiAgICogICAgIC0gYGFsaWFzZXMge0FycmF5fWAgQXJyYXkgb2Ygc3RyaW5ncy4gRXhhbXBsZTogWydrbm90cycsICdrdCcsICdrdHMnXVxuICAgKiAgICAgLSBgb2Zmc2V0IHtOdW1lcmljfWAgQW4gb2Zmc2V0IHRvIGFwcGx5IHdoZW4gY29udmVydGluZyBmcm9tIHRoZSB1bml0LiBGb3IgZXhhbXBsZSwgdGhlIG9mZnNldCBmb3IgY2Vsc2l1cyBpcyAyNzMuMTUuIERlZmF1bHQgaXMgMC5cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICB1bml0XG4gICAqXG4gICAqIEByZXR1cm4ge1VuaXR9IFRoZSBuZXcgdW5pdFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBHZW5lcmFsIGZ1bmN0aW9uIHNpZ25hdHVyZS4gRmlyc3QgcGFyYW1ldGVyIGlzIGFuIG9iamVjdCB3aGVyZSBlYWNoIHByb3BlcnR5IGlzIHRoZSBkZWZpbml0aW9uIG9mIGEgbmV3IHVuaXQuIFRoZSBvYmplY3Qga2V5cyBhcmUgdGhlIHVuaXQgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBkZWZpbml0aW9ucy4gVGhlIHZhbHVlcyBjYW4gYmUgb2JqZWN0cywgc3RyaW5ncywgb3IgVW5pdHMuIElmIGEgcHJvcGVydHkgaXMgYW4gZW1wdHkgb2JqZWN0IG9yIGFuIGVtcHR5IHN0cmluZywgYSBuZXcgYmFzZSB1bml0IGlzIGNyZWF0ZWQuIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBvcHRpb25zLlxuICAgICdPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE9iamVjdE9iamVjdChvYmosIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCBvcHRpb25zKTtcbiAgICB9LFxuICAgIC8vIFNhbWUgYXMgYWJvdmUgYnV0IHdpdGhvdXQgdGhlIG9wdGlvbnMuXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3Qob2JqKSB7XG4gICAgICByZXR1cm4gVW5pdC5jcmVhdGVVbml0KG9iaiwge30pO1xuICAgIH0sXG4gICAgLy8gU2hvcnRjdXQgbWV0aG9kIGZvciBjcmVhdGluZyBvbmUgdW5pdC5cbiAgICAnc3RyaW5nLCBVbml0IHwgc3RyaW5nIHwgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdVbml0U3RyaW5nT2JqZWN0T2JqZWN0KG5hbWUsIGRlZiwgb3B0aW9ucykge1xuICAgICAgdmFyIG9iaiA9IHt9O1xuICAgICAgb2JqW25hbWVdID0gZGVmO1xuICAgICAgcmV0dXJuIFVuaXQuY3JlYXRlVW5pdChvYmosIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgLy8gU2FtZSBhcyBhYm92ZSBidXQgd2l0aG91dCB0aGUgb3B0aW9ucy5cbiAgICAnc3RyaW5nLCBVbml0IHwgc3RyaW5nIHwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nVW5pdFN0cmluZ09iamVjdChuYW1lLCBkZWYpIHtcbiAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgIG9ialtuYW1lXSA9IGRlZjtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCB7fSk7XG4gICAgfSxcbiAgICAvLyBXaXRob3V0IGEgZGVmaW5pdGlvbiwgY3JlYXRlcyBhIGJhc2UgdW5pdC5cbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhuYW1lKSB7XG4gICAgICB2YXIgb2JqID0ge307XG4gICAgICBvYmpbbmFtZV0gPSB7fTtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCB7fSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDcmVhdGVVbml0ID0gY3JlYXRlQ3JlYXRlVW5pdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BsaXRVbml0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3BsaXRVbml0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlU3BsaXRVbml0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogU3BsaXQgYSB1bml0IGluIGFuIGFycmF5IG9mIHVuaXRzIHdob3NlIHN1bSBpcyBlcXVhbCB0byB0aGUgb3JpZ2luYWwgdW5pdC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc3BsaXRVbml0KHVuaXQ6IFVuaXQsIHBhcnRzOiBBcnJheS48VW5pdD4pXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgICBtYXRoLnNwbGl0VW5pdChuZXcgVW5pdCgxLCAnbScpLCBbJ2ZlZXQnLCAnaW5jaCddKVxuICAgKiAgICAgLy8gWyAzIGZlZXQsIDMuMzcwMDc4NzQwMTU3NSBpbmNoIF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0c10gQW4gYXJyYXkgb2Ygc3RyaW5ncyBvciB2YWx1ZWxlc3MgdW5pdHMuXG4gICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiB1bml0cy5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ1VuaXQsIEFycmF5JzogZnVuY3Rpb24gVW5pdEFycmF5KHVuaXQsIHBhcnRzKSB7XG4gICAgICByZXR1cm4gdW5pdC5zcGxpdFVuaXQocGFydHMpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3BsaXRVbml0ID0gY3JlYXRlU3BsaXRVbml0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RnVuY3Rpb24gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAndW5pdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdVbml0J107IC8vIFRoaXMgZnVuY3Rpb24gaXMgbmFtZWQgY3JlYXRlVW5pdEZ1bmN0aW9uIHRvIHByZXZlbnQgYSBuYW1pbmcgY29uZmxpY3Qgd2l0aCBjcmVhdGVVbml0XG5cbnZhciBjcmVhdGVVbml0RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgVW5pdCA9IF9yZWYuVW5pdDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgdW5pdC4gRGVwZW5kaW5nIG9uIHRoZSBwYXNzZWQgYXJndW1lbnRzLCB0aGUgZnVuY3Rpb25cbiAgICogd2lsbCBjcmVhdGUgYW5kIHJldHVybiBhIG5ldyBtYXRoLlVuaXQgb2JqZWN0LlxuICAgKiBXaGVuIGEgbWF0cml4IGlzIHByb3ZpZGVkLCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdW5pdHMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudW5pdCh1bml0IDogc3RyaW5nKVxuICAgKiAgICAgbWF0aC51bml0KHZhbHVlIDogbnVtYmVyLCB1bml0IDogc3RyaW5nKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCg1LCAnY20nKSAgICAvLyByZXR1cm5zIFVuaXQgNTAgbW1cbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnMjMga2cnKSAgICAvLyByZXR1cm5zIFVuaXQgMjMga2dcbiAgICogICAgYS50bygnbScpICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMC4wNSBtXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIG51bWJlciwgc3RyaW5nLCBjcmVhdGVVbml0XG4gICAqXG4gICAqIEBwYXJhbSB7KiB8IEFycmF5IHwgTWF0cml4fSBhcmdzICAgQSBudW1iZXIgYW5kIHVuaXQuXG4gICAqIEByZXR1cm4ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGNyZWF0ZWQgdW5pdFxuICAgKi9cbiAgdmFyIHVuaXQgPSB0eXBlZChuYW1lLCB7XG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgaWYgKFVuaXQuaXNWYWx1ZWxlc3NVbml0KHgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVW5pdChudWxsLCB4KTsgLy8gYSBwdXJlIHVuaXRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFVuaXQucGFyc2UoeCwge1xuICAgICAgICBhbGxvd05vVW5pdHM6IHRydWVcbiAgICAgIH0pOyAvLyBhIHVuaXQgd2l0aCB2YWx1ZSwgbGlrZSAnNWNtJ1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRnJhY3Rpb25Db21wbGV4U3RyaW5nKHZhbHVlLCB1bml0KSB7XG4gICAgICByZXR1cm4gbmV3IFVuaXQodmFsdWUsIHVuaXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB1bml0KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdW5pdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RnVuY3Rpb24gPSBjcmVhdGVVbml0RnVuY3Rpb247IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlID0gZXhwb3J0cy5jcmVhdGVQbGFuY2tDaGFyZ2UgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja1RpbWUgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja01hc3MgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja0xlbmd0aCA9IGV4cG9ydHMuY3JlYXRlR3Jhdml0eSA9IGV4cG9ydHMuY3JlYXRlTW9sYXJNYXNzQzEyID0gZXhwb3J0cy5jcmVhdGVNb2xhck1hc3MgPSBleHBvcnRzLmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQgPSBleHBvcnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubiA9IGV4cG9ydHMuY3JlYXRlU2Vjb25kUmFkaWF0aW9uID0gZXhwb3J0cy5jcmVhdGVTYWNrdXJUZXRyb2RlID0gZXhwb3J0cy5jcmVhdGVNb2xhclZvbHVtZSA9IGV4cG9ydHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCA9IGV4cG9ydHMuY3JlYXRlR2FzQ29uc3RhbnQgPSBleHBvcnRzLmNyZWF0ZUxvc2NobWlkdCA9IGV4cG9ydHMuY3JlYXRlRmlyc3RSYWRpYXRpb24gPSBleHBvcnRzLmNyZWF0ZUZhcmFkYXkgPSBleHBvcnRzLmNyZWF0ZUJvbHR6bWFubiA9IGV4cG9ydHMuY3JlYXRlQXZvZ2Fkcm8gPSBleHBvcnRzLmNyZWF0ZUF0b21pY01hc3MgPSBleHBvcnRzLmNyZWF0ZUVmaW1vdkZhY3RvciA9IGV4cG9ydHMuY3JlYXRlV2Vha01peGluZ0FuZ2xlID0gZXhwb3J0cy5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uID0gZXhwb3J0cy5jcmVhdGVSeWRiZXJnID0gZXhwb3J0cy5jcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IGV4cG9ydHMuY3JlYXRlTmV1dHJvbk1hc3MgPSBleHBvcnRzLmNyZWF0ZURldXRlcm9uTWFzcyA9IGV4cG9ydHMuY3JlYXRlUHJvdG9uTWFzcyA9IGV4cG9ydHMuY3JlYXRlSGFydHJlZUVuZXJneSA9IGV4cG9ydHMuY3JlYXRlRmluZVN0cnVjdHVyZSA9IGV4cG9ydHMuY3JlYXRlRmVybWlDb3VwbGluZyA9IGV4cG9ydHMuY3JlYXRlRWxlY3Ryb25NYXNzID0gZXhwb3J0cy5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IGV4cG9ydHMuY3JlYXRlQm9oclJhZGl1cyA9IGV4cG9ydHMuY3JlYXRlSm9zZXBoc29uID0gZXhwb3J0cy5jcmVhdGVLbGl0emluZyA9IGV4cG9ydHMuY3JlYXRlTnVjbGVhck1hZ25ldG9uID0gZXhwb3J0cy5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gZXhwb3J0cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW0gPSBleHBvcnRzLmNyZWF0ZUJvaHJNYWduZXRvbiA9IGV4cG9ydHMuY3JlYXRlRWxlbWVudGFyeUNoYXJnZSA9IGV4cG9ydHMuY3JlYXRlQ291bG9tYiA9IGV4cG9ydHMuY3JlYXRlVmFjdXVtSW1wZWRhbmNlID0gZXhwb3J0cy5jcmVhdGVFbGVjdHJpY0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVSZWR1Y2VkUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVTcGVlZE9mTGlnaHQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG4vLyBTb3VyY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BoeXNpY2FsX2NvbnN0YW50XG4vLyBVbml2ZXJzYWwgY29uc3RhbnRzXG52YXIgY3JlYXRlU3BlZWRPZkxpZ2h0ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3NwZWVkT2ZMaWdodCcsICcyOTk3OTI0NTgnLCAnbSBzXi0xJyk7XG5leHBvcnRzLmNyZWF0ZVNwZWVkT2ZMaWdodCA9IGNyZWF0ZVNwZWVkT2ZMaWdodDtcbnZhciBjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2dyYXZpdGF0aW9uQ29uc3RhbnQnLCAnNi42NzQzMGUtMTEnLCAnbV4zIGtnXi0xIHNeLTInKTtcbmV4cG9ydHMuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCA9IGNyZWF0ZUdyYXZpdGF0aW9uQ29uc3RhbnQ7XG52YXIgY3JlYXRlUGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrQ29uc3RhbnQnLCAnNi42MjYwNzAxNWUtMzQnLCAnSiBzJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja0NvbnN0YW50ID0gY3JlYXRlUGxhbmNrQ29uc3RhbnQ7XG52YXIgY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3JlZHVjZWRQbGFuY2tDb25zdGFudCcsICcxLjA1NDU3MTgxNzY0NjE1NjVlLTM0JywgJ0ogcycpOyAvLyBFbGVjdHJvbWFnbmV0aWMgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50O1xudmFyIGNyZWF0ZU1hZ25ldGljQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbWFnbmV0aWNDb25zdGFudCcsICcxLjI1NjYzNzA2MjEyZS02JywgJ04gQV4tMicpO1xuZXhwb3J0cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50ID0gY3JlYXRlTWFnbmV0aWNDb25zdGFudDtcbnZhciBjcmVhdGVFbGVjdHJpY0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2VsZWN0cmljQ29uc3RhbnQnLCAnOC44NTQxODc4MTI4ZS0xMicsICdGIG1eLTEnKTtcbmV4cG9ydHMuY3JlYXRlRWxlY3RyaWNDb25zdGFudCA9IGNyZWF0ZUVsZWN0cmljQ29uc3RhbnQ7XG52YXIgY3JlYXRlVmFjdXVtSW1wZWRhbmNlID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3ZhY3V1bUltcGVkYW5jZScsICczNzYuNzMwMzEzNjY3JywgJ29obScpO1xuZXhwb3J0cy5jcmVhdGVWYWN1dW1JbXBlZGFuY2UgPSBjcmVhdGVWYWN1dW1JbXBlZGFuY2U7XG52YXIgY3JlYXRlQ291bG9tYiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdjb3Vsb21iJywgJzguOTg3NTUxNzkyMjYxMTcxZTknLCAnTiBtXjIgQ14tMicpO1xuZXhwb3J0cy5jcmVhdGVDb3Vsb21iID0gY3JlYXRlQ291bG9tYjtcbnZhciBjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2VsZW1lbnRhcnlDaGFyZ2UnLCAnMS42MDIxNzY2MzRlLTE5JywgJ0MnKTtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudGFyeUNoYXJnZSA9IGNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2U7XG52YXIgY3JlYXRlQm9ock1hZ25ldG9uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2JvaHJNYWduZXRvbicsICc5LjI3NDAxMDA3ODNlLTI0JywgJ0ogVF4tMScpO1xuZXhwb3J0cy5jcmVhdGVCb2hyTWFnbmV0b24gPSBjcmVhdGVCb2hyTWFnbmV0b247XG52YXIgY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2NvbmR1Y3RhbmNlUXVhbnR1bScsICc3Ljc0ODA5MTcyOTg2MzY0OWUtNScsICdTJyk7XG5leHBvcnRzLmNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2ludmVyc2VDb25kdWN0YW5jZVF1YW50dW0nLCAnMTI5MDYuNDAzNzI5NjUyMjU3JywgJ29obScpO1xuZXhwb3J0cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBjcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21hZ25ldGljRmx1eFF1YW50dW0nLCAnMi4wNjc4MzM4NDg0NjE5Mjk1ZS0xNScsICdXYicpO1xuZXhwb3J0cy5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bTtcbnZhciBjcmVhdGVOdWNsZWFyTWFnbmV0b24gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbnVjbGVhck1hZ25ldG9uJywgJzUuMDUwNzgzNzQ2MWUtMjcnLCAnSiBUXi0xJyk7XG5leHBvcnRzLmNyZWF0ZU51Y2xlYXJNYWduZXRvbiA9IGNyZWF0ZU51Y2xlYXJNYWduZXRvbjtcbnZhciBjcmVhdGVLbGl0emluZyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdrbGl0emluZycsICcyNTgxMi44MDc0NTkzMDQ1MTMnLCAnb2htJyk7XG5leHBvcnRzLmNyZWF0ZUtsaXR6aW5nID0gY3JlYXRlS2xpdHppbmc7XG52YXIgY3JlYXRlSm9zZXBoc29uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2pvc2VwaHNvbicsICc0LjgzNTk3ODQ4NDE2OTgzNmUxNCBIeiBWJywgJ0h6IFZeLTEnKTsgLy8gVE9ETzogc3VwcG9ydCBmb3IgSHogbmVlZGVkXG4vLyBBdG9taWMgYW5kIG51Y2xlYXIgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlSm9zZXBoc29uID0gY3JlYXRlSm9zZXBoc29uO1xudmFyIGNyZWF0ZUJvaHJSYWRpdXMgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnYm9oclJhZGl1cycsICc1LjI5MTc3MjEwOTAzZS0xMScsICdtJyk7XG5leHBvcnRzLmNyZWF0ZUJvaHJSYWRpdXMgPSBjcmVhdGVCb2hyUmFkaXVzO1xudmFyIGNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzJywgJzIuODE3OTQwMzI2MmUtMTUnLCAnbScpO1xuZXhwb3J0cy5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IGNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzO1xudmFyIGNyZWF0ZUVsZWN0cm9uTWFzcyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdlbGVjdHJvbk1hc3MnLCAnOS4xMDkzODM3MDE1ZS0zMScsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVFbGVjdHJvbk1hc3MgPSBjcmVhdGVFbGVjdHJvbk1hc3M7XG52YXIgY3JlYXRlRmVybWlDb3VwbGluZyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdmZXJtaUNvdXBsaW5nJywgJzEuMTY2Mzc4N2UtNScsICdHZVZeLTInKTtcbmV4cG9ydHMuY3JlYXRlRmVybWlDb3VwbGluZyA9IGNyZWF0ZUZlcm1pQ291cGxpbmc7XG52YXIgY3JlYXRlRmluZVN0cnVjdHVyZSA9IG51bWJlckZhY3RvcnkoJ2ZpbmVTdHJ1Y3R1cmUnLCA3LjI5NzM1MjU2OTNlLTMpO1xuZXhwb3J0cy5jcmVhdGVGaW5lU3RydWN0dXJlID0gY3JlYXRlRmluZVN0cnVjdHVyZTtcbnZhciBjcmVhdGVIYXJ0cmVlRW5lcmd5ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2hhcnRyZWVFbmVyZ3knLCAnNC4zNTk3NDQ3MjIyMDcxZS0xOCcsICdKJyk7XG5leHBvcnRzLmNyZWF0ZUhhcnRyZWVFbmVyZ3kgPSBjcmVhdGVIYXJ0cmVlRW5lcmd5O1xudmFyIGNyZWF0ZVByb3Rvbk1hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncHJvdG9uTWFzcycsICcxLjY3MjYyMTkyMzY5ZS0yNycsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVQcm90b25NYXNzID0gY3JlYXRlUHJvdG9uTWFzcztcbnZhciBjcmVhdGVEZXV0ZXJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnZGV1dGVyb25NYXNzJywgJzMuMzQzNTgzMDkyNmUtMjcnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlRGV1dGVyb25NYXNzID0gY3JlYXRlRGV1dGVyb25NYXNzO1xudmFyIGNyZWF0ZU5ldXRyb25NYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ25ldXRyb25NYXNzJywgJzEuNjc0OTI3MTYxM2UtMjcnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlTmV1dHJvbk1hc3MgPSBjcmVhdGVOZXV0cm9uTWFzcztcbnZhciBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdxdWFudHVtT2ZDaXJjdWxhdGlvbicsICczLjYzNjk0NzU1MTZlLTQnLCAnbV4yIHNeLTEnKTtcbmV4cG9ydHMuY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24gPSBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbjtcbnZhciBjcmVhdGVSeWRiZXJnID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3J5ZGJlcmcnLCAnMTA5NzM3MzEuNTY4MTYwJywgJ21eLTEnKTtcbmV4cG9ydHMuY3JlYXRlUnlkYmVyZyA9IGNyZWF0ZVJ5ZGJlcmc7XG52YXIgY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCd0aG9tc29uQ3Jvc3NTZWN0aW9uJywgJzYuNjUyNDU4NzMyMWUtMjknLCAnbV4yJyk7XG5leHBvcnRzLmNyZWF0ZVRob21zb25Dcm9zc1NlY3Rpb24gPSBjcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uO1xudmFyIGNyZWF0ZVdlYWtNaXhpbmdBbmdsZSA9IG51bWJlckZhY3RvcnkoJ3dlYWtNaXhpbmdBbmdsZScsIDAuMjIyOTApO1xuZXhwb3J0cy5jcmVhdGVXZWFrTWl4aW5nQW5nbGUgPSBjcmVhdGVXZWFrTWl4aW5nQW5nbGU7XG52YXIgY3JlYXRlRWZpbW92RmFjdG9yID0gbnVtYmVyRmFjdG9yeSgnZWZpbW92RmFjdG9yJywgMjIuNyk7IC8vIFBoeXNpY28tY2hlbWljYWwgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlRWZpbW92RmFjdG9yID0gY3JlYXRlRWZpbW92RmFjdG9yO1xudmFyIGNyZWF0ZUF0b21pY01hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnYXRvbWljTWFzcycsICcxLjY2MDUzOTA2NjYwZS0yNycsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVBdG9taWNNYXNzID0gY3JlYXRlQXRvbWljTWFzcztcbnZhciBjcmVhdGVBdm9nYWRybyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdhdm9nYWRybycsICc2LjAyMjE0MDc2ZTIzJywgJ21vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVBdm9nYWRybyA9IGNyZWF0ZUF2b2dhZHJvO1xudmFyIGNyZWF0ZUJvbHR6bWFubiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdib2x0em1hbm4nLCAnMS4zODA2NDllLTIzJywgJ0ogS14tMScpO1xuZXhwb3J0cy5jcmVhdGVCb2x0em1hbm4gPSBjcmVhdGVCb2x0em1hbm47XG52YXIgY3JlYXRlRmFyYWRheSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdmYXJhZGF5JywgJzk2NDg1LjMzMjEyMzMxMDAxJywgJ0MgbW9sXi0xJyk7XG5leHBvcnRzLmNyZWF0ZUZhcmFkYXkgPSBjcmVhdGVGYXJhZGF5O1xudmFyIGNyZWF0ZUZpcnN0UmFkaWF0aW9uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2ZpcnN0UmFkaWF0aW9uJywgJzMuNzQxNzcxODUyMTkyNzU3M2UtMTYnLCAnVyBtXjInKTsgLy8gZXhwb3J0IGNvbnN0IGNyZWF0ZVNwZWN0cmFsUmFkaWFuY2UgPSAvKiAjX19QVVJFX18gKi8gdW5pdEZhY3RvcnkoJ3NwZWN0cmFsUmFkaWFuY2UnLCAnMS4xOTEwNDI5NzIzOTcxODgxZS0xNicsICdXIG1eMiBzcl4tMScpIC8vIFRPRE8gc3BlY3RyYWxSYWRpYW5jZVxuXG5leHBvcnRzLmNyZWF0ZUZpcnN0UmFkaWF0aW9uID0gY3JlYXRlRmlyc3RSYWRpYXRpb247XG52YXIgY3JlYXRlTG9zY2htaWR0ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2xvc2NobWlkdCcsICcyLjY4Njc4MDExMTc5ODQ0NGUyNScsICdtXi0zJyk7XG5leHBvcnRzLmNyZWF0ZUxvc2NobWlkdCA9IGNyZWF0ZUxvc2NobWlkdDtcbnZhciBjcmVhdGVHYXNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdnYXNDb25zdGFudCcsICc4LjMxNDQ2MjYxODE1MzI0JywgJ0ogS14tMSBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlR2FzQ29uc3RhbnQgPSBjcmVhdGVHYXNDb25zdGFudDtcbnZhciBjcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyUGxhbmNrQ29uc3RhbnQnLCAnMy45OTAzMTI3MTI4OTM0MzFlLTEwJywgJ0ogcyBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCA9IGNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQ7XG52YXIgY3JlYXRlTW9sYXJWb2x1bWUgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbW9sYXJWb2x1bWUnLCAnMC4wMjI0MTM5Njk1NDUwMTQxMzcnLCAnbV4zIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhclZvbHVtZSA9IGNyZWF0ZU1vbGFyVm9sdW1lO1xudmFyIGNyZWF0ZVNhY2t1clRldHJvZGUgPSBudW1iZXJGYWN0b3J5KCdzYWNrdXJUZXRyb2RlJywgLTEuMTY0ODcwNTIzNTgpO1xuZXhwb3J0cy5jcmVhdGVTYWNrdXJUZXRyb2RlID0gY3JlYXRlU2Fja3VyVGV0cm9kZTtcbnZhciBjcmVhdGVTZWNvbmRSYWRpYXRpb24gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnc2Vjb25kUmFkaWF0aW9uJywgJzAuMDE0Mzg3NzY4Nzc1MDM5MzM3JywgJ20gSycpO1xuZXhwb3J0cy5jcmVhdGVTZWNvbmRSYWRpYXRpb24gPSBjcmVhdGVTZWNvbmRSYWRpYXRpb247XG52YXIgY3JlYXRlU3RlZmFuQm9sdHptYW5uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3N0ZWZhbkJvbHR6bWFubicsICc1LjY3MDM3NDQxOTE4NDQzZS04JywgJ1cgbV4tMiBLXi00Jyk7XG5leHBvcnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubiA9IGNyZWF0ZVN0ZWZhbkJvbHR6bWFubjtcbnZhciBjcmVhdGVXaWVuRGlzcGxhY2VtZW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3dpZW5EaXNwbGFjZW1lbnQnLCAnMi44OTc3NzE5NTVlLTMnLCAnbSBLJyk7IC8vIEFkb3B0ZWQgdmFsdWVzXG5cbmV4cG9ydHMuY3JlYXRlV2llbkRpc3BsYWNlbWVudCA9IGNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQ7XG52YXIgY3JlYXRlTW9sYXJNYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyTWFzcycsICcwLjk5OTk5OTk5OTY1ZS0zJywgJ2tnIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhck1hc3MgPSBjcmVhdGVNb2xhck1hc3M7XG52YXIgY3JlYXRlTW9sYXJNYXNzQzEyID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyTWFzc0MxMicsICcxMS45OTk5OTk5OTU4ZS0zJywgJ2tnIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhck1hc3NDMTIgPSBjcmVhdGVNb2xhck1hc3NDMTI7XG52YXIgY3JlYXRlR3Jhdml0eSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdncmF2aXR5JywgJzkuODA2NjUnLCAnbSBzXi0yJyk7IC8vIGF0bSBpcyBkZWZpbmVkIGluIFVuaXQuanNcbi8vIE5hdHVyYWwgdW5pdHNcblxuZXhwb3J0cy5jcmVhdGVHcmF2aXR5ID0gY3JlYXRlR3Jhdml0eTtcbnZhciBjcmVhdGVQbGFuY2tMZW5ndGggPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrTGVuZ3RoJywgJzEuNjE2MjU1ZS0zNScsICdtJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja0xlbmd0aCA9IGNyZWF0ZVBsYW5ja0xlbmd0aDtcbnZhciBjcmVhdGVQbGFuY2tNYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3BsYW5ja01hc3MnLCAnMi4xNzY0MzVlLTgnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlUGxhbmNrTWFzcyA9IGNyZWF0ZVBsYW5ja01hc3M7XG52YXIgY3JlYXRlUGxhbmNrVGltZSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdwbGFuY2tUaW1lJywgJzUuMzkxMjQ1ZS00NCcsICdzJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RpbWUgPSBjcmVhdGVQbGFuY2tUaW1lO1xudmFyIGNyZWF0ZVBsYW5ja0NoYXJnZSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdwbGFuY2tDaGFyZ2UnLCAnMS44NzU1NDYwMzc3OGUtMTgnLCAnQycpO1xuZXhwb3J0cy5jcmVhdGVQbGFuY2tDaGFyZ2UgPSBjcmVhdGVQbGFuY2tDaGFyZ2U7XG52YXIgY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrVGVtcGVyYXR1cmUnLCAnMS40MTY3ODVlKzMyJywgJ0snKTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIHBoeXNpY2FsIGNvbnN0YW50LFxuLy8gYSBVbml0IHdpdGggZWl0aGVyIGEgbnVtYmVyIHZhbHVlIG9yIGEgQmlnTnVtYmVyIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvblxuXG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlID0gY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmU7XG5cbmZ1bmN0aW9uIHVuaXRGYWN0b3J5KG5hbWUsIHZhbHVlU3RyLCB1bml0U3RyKSB7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICdVbml0JywgJ0JpZ051bWJlciddO1xuICByZXR1cm4gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICAgIFVuaXQgPSBfcmVmLlVuaXQsXG4gICAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gcGFyc2UgaW50byBudW1iZXIgb3IgQmlnTnVtYmVyLlxuICAgIC8vIFdlIGRvIG5vdCBwYXJzZSBpbnRvIEZyYWN0aW9ucyBhcyB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZTogd2Ugd291bGQgbG9zZSBwcmVjaXNpb24gb2YgdGhlIHZhbHVlc1xuICAgIC8vIFRoZXJlZm9yZSB3ZSBkb250IHVzZSBVbml0LnBhcnNlKClcbiAgICB2YXIgdmFsdWUgPSBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIodmFsdWVTdHIpIDogcGFyc2VGbG9hdCh2YWx1ZVN0cik7XG4gICAgdmFyIHVuaXQgPSBuZXcgVW5pdCh2YWx1ZSwgdW5pdFN0cik7XG4gICAgdW5pdC5maXhQcmVmaXggPSB0cnVlO1xuICAgIHJldHVybiB1bml0O1xuICB9KTtcbn0gLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG51bWVyaWMgY29uc3RhbnQsXG4vLyBlaXRoZXIgYSBudW1iZXIgb3IgQmlnTnVtYmVyIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvblxuXG5cbmZ1bmN0aW9uIG51bWJlckZhY3RvcnkobmFtZSwgdmFsdWUpIHtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ0JpZ051bWJlciddO1xuICByZXR1cm4gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgICAgQmlnTnVtYmVyID0gX3JlZjIuQmlnTnVtYmVyO1xuICAgIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIodmFsdWUpIDogdmFsdWU7XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hcnJheVNpemUgPSBhcnJheVNpemU7XG5leHBvcnRzLnZhbGlkYXRlID0gdmFsaWRhdGU7XG5leHBvcnRzLnZhbGlkYXRlSW5kZXggPSB2YWxpZGF0ZUluZGV4O1xuZXhwb3J0cy5yZXNpemUgPSByZXNpemU7XG5leHBvcnRzLnJlc2hhcGUgPSByZXNoYXBlO1xuZXhwb3J0cy5zcXVlZXplID0gc3F1ZWV6ZTtcbmV4cG9ydHMudW5zcXVlZXplID0gdW5zcXVlZXplO1xuZXhwb3J0cy5mbGF0dGVuID0gZmxhdHRlbjtcbmV4cG9ydHMubWFwID0gbWFwO1xuZXhwb3J0cy5mb3JFYWNoID0gZm9yRWFjaDtcbmV4cG9ydHMuZmlsdGVyID0gZmlsdGVyO1xuZXhwb3J0cy5maWx0ZXJSZWdFeHAgPSBmaWx0ZXJSZWdFeHA7XG5leHBvcnRzLmpvaW4gPSBqb2luO1xuZXhwb3J0cy5pZGVudGlmeSA9IGlkZW50aWZ5O1xuZXhwb3J0cy5nZW5lcmFsaXplID0gZ2VuZXJhbGl6ZTtcbmV4cG9ydHMuZ2V0QXJyYXlEYXRhVHlwZSA9IGdldEFycmF5RGF0YVR5cGU7XG5leHBvcnRzLmxhc3QgPSBsYXN0O1xuZXhwb3J0cy5pbml0aWFsID0gaW5pdGlhbDtcbmV4cG9ydHMuY29udGFpbnMgPSBjb250YWlucztcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9udW1iZXJcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi9zdHJpbmdcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LlxuICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHNpemUgb2YgdGhlIGZpcnN0IGVudHJ5LCBpdCBkb2VzIG5vdCB2YWxpZGF0ZVxuICogd2hldGhlciBhbGwgZGltZW5zaW9ucyBtYXRjaC4gKHVzZSBmdW5jdGlvbiBgdmFsaWRhdGVgIGZvciB0aGF0KVxuICogQHBhcmFtIHtBcnJheX0geFxuICogQFJldHVybiB7TnVtYmVyW119IHNpemVcbiAqL1xuZnVuY3Rpb24gYXJyYXlTaXplKHgpIHtcbiAgdmFyIHMgPSBbXTtcblxuICB3aGlsZSAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHMucHVzaCh4Lmxlbmd0aCk7XG4gICAgeCA9IHhbMF07XG4gIH1cblxuICByZXR1cm4gcztcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgdmFsaWRhdGUgd2hldGhlciBlYWNoIGVsZW1lbnQgaW4gYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogaGFzIGEgc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBzaXplIGFycmF5LlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgQXJyYXkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcGFyYW0ge251bWJlcltdfSBzaXplICBBcnJheSB3aXRoIHRoZSBzaXplIG9mIGVhY2ggZGltZW5zaW9uXG4gKiBAcGFyYW0ge251bWJlcn0gZGltICAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEB0aHJvd3MgRGltZW5zaW9uRXJyb3JcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfdmFsaWRhdGUoYXJyYXksIHNpemUsIGRpbSkge1xuICB2YXIgaTtcbiAgdmFyIGxlbiA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAobGVuICE9PSBzaXplW2RpbV0pIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGxlbiwgc2l6ZVtkaW1dKTtcbiAgfVxuXG4gIGlmIChkaW0gPCBzaXplLmxlbmd0aCAtIDEpIHtcbiAgICAvLyByZWN1cnNpdmVseSB2YWxpZGF0ZSBlYWNoIGNoaWxkIGFycmF5XG4gICAgdmFyIGRpbU5leHQgPSBkaW0gKyAxO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBhcnJheVtpXTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHNpemUubGVuZ3RoIC0gMSwgc2l6ZS5sZW5ndGgsICc8Jyk7XG4gICAgICB9XG5cbiAgICAgIF92YWxpZGF0ZShhcnJheVtpXSwgc2l6ZSwgZGltTmV4dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGxhc3QgZGltZW5zaW9uLiBub25lIG9mIHRoZSBjaGlsZHMgbWF5IGJlIGFuIGFycmF5XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheVtpXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCArIDEsIHNpemUubGVuZ3RoLCAnPicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBWYWxpZGF0ZSB3aGV0aGVyIGVhY2ggZWxlbWVudCBpbiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IGhhc1xuICogYSBzaXplIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIHNpemUgYXJyYXkuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICBBcnJheSB0byBiZSB2YWxpZGF0ZWRcbiAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgIEFycmF5IHdpdGggdGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb25cbiAqIEB0aHJvd3MgRGltZW5zaW9uRXJyb3JcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlKGFycmF5LCBzaXplKSB7XG4gIHZhciBpc1NjYWxhciA9IHNpemUubGVuZ3RoID09PSAwO1xuXG4gIGlmIChpc1NjYWxhcikge1xuICAgIC8vIHNjYWxhclxuICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5KSkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhcnJheS5sZW5ndGgsIDApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBhcnJheVxuICAgIF92YWxpZGF0ZShhcnJheSwgc2l6ZSwgMCk7XG4gIH1cbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGluZGV4IGlzIGFuIGludGVnZXIgbnVtYmVyIHdpdGggaW5kZXggPj0gMCBhbmQgaW5kZXggPCBsZW5ndGhcbiAqIHdoZW4gbGVuZ3RoIGlzIHByb3ZpZGVkXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggICAgWmVyby1iYXNlZCBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIExlbmd0aCBvZiB0aGUgYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5kZXgoaW5kZXgsIGxlbmd0aCkge1xuICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGluZGV4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShpbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBtdXN0IGJlIGFuIGludGVnZXIgKHZhbHVlOiAnICsgaW5kZXggKyAnKScpO1xuICB9XG5cbiAgaWYgKGluZGV4IDwgMCB8fCB0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJyAmJiBpbmRleCA+PSBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihpbmRleCwgbGVuZ3RoKTtcbiAgfVxufVxuLyoqXG4gKiBSZXNpemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheS4gVGhlIHJlc2l6ZWQgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgIEFycmF5IHRvIGJlIHJlc2l6ZWRcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemUgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvblxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICBWYWx1ZSB0byBiZSBmaWxsZWQgaW4gaW4gbmV3IGVudHJpZXMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm8gYnkgZGVmYXVsdC4gU3BlY2lmeSBmb3IgZXhhbXBsZSBgbnVsbGAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNsZWFybHkgc2VlIGVudHJpZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LlxuICogQHJldHVybiB7QXJyYXl9IGFycmF5ICAgICAgICAgVGhlIHJlc2l6ZWQgYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHJlc2l6ZShhcnJheSwgc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBzY2FsYXJzLCBoYXZpbmcgc2l6ZT1bXSA/XG4gIC8vIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudHNcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSB8fCAhQXJyYXkuaXNBcnJheShzaXplKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2l6ZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc2l6aW5nIHRvIHNjYWxhciBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH0gLy8gY2hlY2sgd2hldGhlciBzaXplIGNvbnRhaW5zIHBvc2l0aXZlIGludGVnZXJzXG5cblxuICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgIH1cbiAgfSk7IC8vIHJlY3Vyc2l2ZWx5IHJlc2l6ZSB0aGUgYXJyYXlcblxuICB2YXIgX2RlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogMDtcblxuICBfcmVzaXplKGFycmF5LCBzaXplLCAwLCBfZGVmYXVsdFZhbHVlKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHJlc2l6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgIEFycmF5IHRvIGJlIHJlc2l6ZWRcbiAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvblxuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICBDdXJyZW50IGRpbWVuc2lvblxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICBWYWx1ZSB0byBiZSBmaWxsZWQgaW4gaW4gbmV3IGVudHJpZXMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9yZXNpemUoYXJyYXksIHNpemUsIGRpbSwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciBpO1xuICB2YXIgZWxlbTtcbiAgdmFyIG9sZExlbiA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG5ld0xlbiA9IHNpemVbZGltXTtcbiAgdmFyIG1pbkxlbiA9IE1hdGgubWluKG9sZExlbiwgbmV3TGVuKTsgLy8gYXBwbHkgbmV3IGxlbmd0aFxuXG4gIGFycmF5Lmxlbmd0aCA9IG5ld0xlbjtcblxuICBpZiAoZGltIDwgc2l6ZS5sZW5ndGggLSAxKSB7XG4gICAgLy8gbm9uLWxhc3QgZGltZW5zaW9uXG4gICAgdmFyIGRpbU5leHQgPSBkaW0gKyAxOyAvLyByZXNpemUgZXhpc3RpbmcgY2hpbGQgYXJyYXlzXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbWluTGVuOyBpKyspIHtcbiAgICAgIC8vIHJlc2l6ZSBjaGlsZCBhcnJheVxuICAgICAgZWxlbSA9IGFycmF5W2ldO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbSkpIHtcbiAgICAgICAgZWxlbSA9IFtlbGVtXTsgLy8gYWRkIGEgZGltZW5zaW9uXG5cbiAgICAgICAgYXJyYXlbaV0gPSBlbGVtO1xuICAgICAgfVxuXG4gICAgICBfcmVzaXplKGVsZW0sIHNpemUsIGRpbU5leHQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSAvLyBjcmVhdGUgbmV3IGNoaWxkIGFycmF5c1xuXG5cbiAgICBmb3IgKGkgPSBtaW5MZW47IGkgPCBuZXdMZW47IGkrKykge1xuICAgICAgLy8gZ2V0IGNoaWxkIGFycmF5XG4gICAgICBlbGVtID0gW107XG4gICAgICBhcnJheVtpXSA9IGVsZW07IC8vIHJlc2l6ZSBuZXcgY2hpbGQgYXJyYXlcblxuICAgICAgX3Jlc2l6ZShlbGVtLCBzaXplLCBkaW1OZXh0LCBkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBsYXN0IGRpbWVuc2lvblxuICAgIC8vIHJlbW92ZSBkaW1lbnNpb25zIG9mIGV4aXN0aW5nIHZhbHVlc1xuICAgIGZvciAoaSA9IDA7IGkgPCBtaW5MZW47IGkrKykge1xuICAgICAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJyYXlbaV0pKSB7XG4gICAgICAgIGFycmF5W2ldID0gYXJyYXlbaV1bMF07XG4gICAgICB9XG4gICAgfSAvLyBmaWxsIG5ldyBlbGVtZW50cyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlXG5cblxuICAgIGZvciAoaSA9IG1pbkxlbjsgaSA8IG5ld0xlbjsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogUmUtc2hhcGUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSB0byBmaXQgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgICAgQXJyYXkgdG8gYmUgcmVzaGFwZWRcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemVzICBMaXN0IG9mIHNpemVzIGZvciBlYWNoIGRpbWVuc2lvblxuICogQHJldHVybnMge0FycmF5fSAgICAgICAgICAgICAgIEFycmF5IHdob3NlIGRhdGEgaGFzIGJlZW4gZm9ybWF0dGVkIHRvIGZpdCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgZGltZW5zaW9uc1xuICpcbiAqIEB0aHJvd3Mge0RpbWVuc2lvbkVycm9yfSAgICAgICBJZiB0aGUgcHJvZHVjdCBvZiB0aGUgbmV3IGRpbWVuc2lvbiBzaXplcyBkb2VzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGVxdWFsIHRoYXQgb2YgdGhlIG9sZCBvbmVzXG4gKi9cblxuXG5mdW5jdGlvbiByZXNoYXBlKGFycmF5LCBzaXplcykge1xuICB2YXIgZmxhdEFycmF5ID0gZmxhdHRlbihhcnJheSk7XG4gIHZhciBuZXdBcnJheTtcblxuICBmdW5jdGlvbiBwcm9kdWN0KGFycikge1xuICAgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXJyKSB7XG4gICAgICByZXR1cm4gcHJldiAqIGN1cnI7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpIHx8ICFBcnJheS5pc0FycmF5KHNpemVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2l6ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcigwLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgfVxuXG4gIHZhciB0b3RhbFNpemUgPSAxO1xuXG4gIGZvciAodmFyIHNpemVJbmRleCA9IDA7IHNpemVJbmRleCA8IHNpemVzLmxlbmd0aDsgc2l6ZUluZGV4KyspIHtcbiAgICB0b3RhbFNpemUgKj0gc2l6ZXNbc2l6ZUluZGV4XTtcbiAgfVxuXG4gIGlmIChmbGF0QXJyYXkubGVuZ3RoICE9PSB0b3RhbFNpemUpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHByb2R1Y3Qoc2l6ZXMpLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbmV3QXJyYXkgPSBfcmVzaGFwZShmbGF0QXJyYXksIHNpemVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHByb2R1Y3Qoc2l6ZXMpLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgICB9XG5cbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIG5ld0FycmF5O1xufVxuLyoqXG4gKiBJdGVyYXRpdmVseSByZS1zaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgICAgICAgICBBcnJheSB0byBiZSByZXNoYXBlZFxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gc2l6ZXMgIExpc3Qgb2Ygc2l6ZXMgZm9yIGVhY2ggZGltZW5zaW9uXG4gKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICAgICAgQXJyYXkgd2hvc2UgZGF0YSBoYXMgYmVlbiBmb3JtYXR0ZWQgdG8gZml0IHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gKi9cblxuXG5mdW5jdGlvbiBfcmVzaGFwZShhcnJheSwgc2l6ZXMpIHtcbiAgLy8gdGVzdGluZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGVsZW1lbnRzIGZvciB0aGUgcmVxdWVzdGVkIHNoYXBlXG4gIHZhciB0bXBBcnJheSA9IGFycmF5O1xuICB2YXIgdG1wQXJyYXkyOyAvLyBmb3IgZWFjaCBkaW1lbnNpb25zIHN0YXJ0aW5nIGJ5IHRoZSBsYXN0IG9uZSBhbmQgaWdub3JpbmcgdGhlIGZpcnN0IG9uZVxuXG4gIGZvciAodmFyIHNpemVJbmRleCA9IHNpemVzLmxlbmd0aCAtIDE7IHNpemVJbmRleCA+IDA7IHNpemVJbmRleC0tKSB7XG4gICAgdmFyIHNpemUgPSBzaXplc1tzaXplSW5kZXhdO1xuICAgIHRtcEFycmF5MiA9IFtdOyAvLyBhZ2dyZWdhdGUgdGhlIGVsZW1lbnRzIG9mIHRoZSBjdXJyZW50IHRtcEFycmF5IGluIGVsZW1lbnRzIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZVxuXG4gICAgdmFyIGxlbmd0aCA9IHRtcEFycmF5Lmxlbmd0aCAvIHNpemU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB0bXBBcnJheTIucHVzaCh0bXBBcnJheS5zbGljZShpICogc2l6ZSwgKGkgKyAxKSAqIHNpemUpKTtcbiAgICB9IC8vIHNldCBpdCBhcyB0aGUgbmV3IHRtcEFycmF5IGZvciB0aGUgbmV4dCBsb29wIHR1cm4gb3IgZm9yIHJldHVyblxuXG5cbiAgICB0bXBBcnJheSA9IHRtcEFycmF5MjtcbiAgfVxuXG4gIHJldHVybiB0bXBBcnJheTtcbn1cbi8qKlxuICogU3F1ZWV6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gW3NpemVdXG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldHVybnMgdGhlIGFycmF5IGl0c2VsZlxuICovXG5cblxuZnVuY3Rpb24gc3F1ZWV6ZShhcnJheSwgc2l6ZSkge1xuICB2YXIgcyA9IHNpemUgfHwgYXJyYXlTaXplKGFycmF5KTsgLy8gc3F1ZWV6ZSBvdXRlciBkaW1lbnNpb25zXG5cbiAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJyYXkpICYmIGFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgIGFycmF5ID0gYXJyYXlbMF07XG4gICAgcy5zaGlmdCgpO1xuICB9IC8vIGZpbmQgdGhlIGZpcnN0IGRpbWVuc2lvbiB0byBiZSBzcXVlZXplZFxuXG5cbiAgdmFyIGRpbXMgPSBzLmxlbmd0aDtcblxuICB3aGlsZSAoc1tkaW1zIC0gMV0gPT09IDEpIHtcbiAgICBkaW1zLS07XG4gIH0gLy8gc3F1ZWV6ZSBpbm5lciBkaW1lbnNpb25zXG5cblxuICBpZiAoZGltcyA8IHMubGVuZ3RoKSB7XG4gICAgYXJyYXkgPSBfc3F1ZWV6ZShhcnJheSwgZGltcywgMCk7XG4gICAgcy5sZW5ndGggPSBkaW1zO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBzcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gZGltcyBSZXF1aXJlZCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtBcnJheSB8ICp9IFJldHVybnMgdGhlIHNxdWVlemVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3NxdWVlemUoYXJyYXksIGRpbXMsIGRpbSkge1xuICB2YXIgaSwgaWk7XG5cbiAgaWYgKGRpbSA8IGRpbXMpIHtcbiAgICB2YXIgbmV4dCA9IGRpbSArIDE7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gX3NxdWVlemUoYXJyYXlbaV0sIGRpbXMsIG5leHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICAgIGFycmF5ID0gYXJyYXlbMF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuLyoqXG4gKiBVbnNxdWVlemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheTogYWRkIGRpbWVuc2lvbnMgd2hlbiBtaXNzaW5nXG4gKlxuICogUGFyYW10ZXIgYHNpemVgIHdpbGwgYmUgbXV0YXRlZCB0byBtYXRjaCB0aGUgbmV3LCB1bnF1ZWV6ZWQgbWF0cml4IHNpemUuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zICAgICAgIERlc2lyZWQgbnVtYmVyIG9mIGRpbWVuc2lvbnMgb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gW291dGVyXSAgICBOdW1iZXIgb2Ygb3V0ZXIgZGltZW5zaW9ucyB0byBiZSBhZGRlZFxuICogQHBhcmFtIHtBcnJheX0gW3NpemVdIEN1cnJlbnQgc2l6ZSBvZiBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheX0gcmV0dXJucyB0aGUgYXJyYXkgaXRzZWxmXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gdW5zcXVlZXplKGFycmF5LCBkaW1zLCBvdXRlciwgc2l6ZSkge1xuICB2YXIgcyA9IHNpemUgfHwgYXJyYXlTaXplKGFycmF5KTsgLy8gdW5zcXVlZXplIG91dGVyIGRpbWVuc2lvbnNcblxuICBpZiAob3V0ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG91dGVyOyBpKyspIHtcbiAgICAgIGFycmF5ID0gW2FycmF5XTtcbiAgICAgIHMudW5zaGlmdCgxKTtcbiAgICB9XG4gIH0gLy8gdW5zcXVlZXplIGlubmVyIGRpbWVuc2lvbnNcblxuXG4gIGFycmF5ID0gX3Vuc3F1ZWV6ZShhcnJheSwgZGltcywgMCk7XG5cbiAgd2hpbGUgKHMubGVuZ3RoIDwgZGltcykge1xuICAgIHMucHVzaCgxKTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgdW5zcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gZGltcyBSZXF1aXJlZCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtBcnJheSB8ICp9IFJldHVybnMgdGhlIHNxdWVlemVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3Vuc3F1ZWV6ZShhcnJheSwgZGltcywgZGltKSB7XG4gIHZhciBpLCBpaTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICB2YXIgbmV4dCA9IGRpbSArIDE7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gX3Vuc3F1ZWV6ZShhcnJheVtpXSwgZGltcywgbmV4dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGQgPSBkaW07IGQgPCBkaW1zOyBkKyspIHtcbiAgICAgIGFycmF5ID0gW2FycmF5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSwgcHV0IGFsbCBlbGVtZW50cyBpbiBhIG9uZSBkaW1lbnNpb25hbFxuICogYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgQSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICBUaGUgZmxhdHRlbmVkIGFycmF5ICgxIGRpbWVuc2lvbmFsKVxuICovXG5cblxuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgLy8gaWYgbm90IGFuIGFycmF5LCByZXR1cm4gYXMgaXNcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICB2YXIgZmxhdCA9IFtdO1xuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGNhbGxiYWNrKTsgLy8gdHJhdmVyc2UgdGhyb3VnaCBzdWItYXJyYXlzIHJlY3Vyc2l2ZWx5XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYXQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsYXQ7XG59XG4vKipcbiAqIEEgc2FmZSBtYXBcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5cblxuZnVuY3Rpb24gbWFwKGFycmF5LCBjYWxsYmFjaykge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGFycmF5LCBjYWxsYmFjayk7XG59XG4vKipcbiAqIEEgc2FmZSBmb3JFYWNoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuXG5cbmZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJyYXksIGNhbGxiYWNrKTtcbn1cbi8qKlxuICogQSBzYWZlIGZpbHRlclxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cblxuXG5mdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGlmIChhcnJheVNpemUoYXJyYXkpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gIH1cblxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFycmF5LCBjYWxsYmFjayk7XG59XG4vKipcbiAqIEZpbHRlciB2YWx1ZXMgaW4gYSBjYWxsYmFjayBnaXZlbiBhIHJlZ3VsYXIgZXhwcmVzc2lvblxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7UmVnRXhwfSByZWdleHBcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBhcnJheVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbHRlclJlZ0V4cChhcnJheSwgcmVnZXhwKSB7XG4gIGlmIChhcnJheVNpemUoYXJyYXkpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gIH1cblxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFycmF5LCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICByZXR1cm4gcmVnZXhwLnRlc3QoZW50cnkpO1xuICB9KTtcbn1cbi8qKlxuICogQSBzYWZlIGpvaW5cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gKi9cblxuXG5mdW5jdGlvbiBqb2luKGFycmF5LCBzZXBhcmF0b3IpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJyYXksIHNlcGFyYXRvcik7XG59XG4vKipcbiAqIEFzc2lnbiBhIG51bWVyaWMgaWRlbnRpZmllciB0byBldmVyeSBlbGVtZW50IG9mIGEgc29ydGVkIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhICBBbiBhcnJheVxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgYW5kIGl0cyBpZGVudGlmaWVyXG4gKi9cblxuXG5mdW5jdGlvbiBpZGVudGlmeShhKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGlucHV0IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoYS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIHZhciBiID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIGJbMF0gPSB7XG4gICAgdmFsdWU6IGFbMF0sXG4gICAgaWRlbnRpZmllcjogMFxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhW2ldID09PSBhW2kgLSAxXSkge1xuICAgICAgY291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cblxuICAgIGIucHVzaCh7XG4gICAgICB2YWx1ZTogYVtpXSxcbiAgICAgIGlkZW50aWZpZXI6IGNvdW50XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cbi8qKlxuICogUmVtb3ZlIHRoZSBudW1lcmljIGlkZW50aWZpZXIgZnJvbSB0aGUgZWxlbWVudHNcbiAqIEBwYXJhbSB7YXJyYXl9IGEgIEFuIGFycmF5XG4gKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgb2YgdmFsdWVzIHdpdGhvdXQgaWRlbnRpZmllcnNcbiAqL1xuXG5cbmZ1bmN0aW9uIGdlbmVyYWxpemUoYSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBpbnB1dCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYiA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGIucHVzaChhW2ldLnZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBDaGVjayB0aGUgZGF0YXR5cGUgb2YgYSBnaXZlbiBvYmplY3RcbiAqIFRoaXMgaXMgYSBsb3cgbGV2ZWwgaW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGJ5XG4gKiBwYXJlbnQgTWF0cml4IGNsYXNzZXMgc3VjaCBhcyBTcGFyc2VNYXRyaXggb3IgRGVuc2VNYXRyaXhcbiAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHZhbGlkYXRlIEFycmF5IE1hdHJpeCBzaGFwZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHR5cGVPZiAgIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHVzZSB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSB2YWx1ZVxuICogQHJldHVybiBzdHJpbmdcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEFycmF5RGF0YVR5cGUoYXJyYXksIHR5cGVPZikge1xuICB2YXIgdHlwZTsgLy8gdG8gaG9sZCB0eXBlIGluZm9cblxuICB2YXIgbGVuZ3RoID0gMDsgLy8gdG8gaG9sZCBsZW5ndGggdmFsdWUgdG8gZW5zdXJlIGl0IGhhcyBjb25zaXN0ZW50IHNpemVzXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGl0ZW0pOyAvLyBTYXZpbmcgdGhlIHRhcmdldCBtYXRyaXggcm93IHNpemVcblxuICAgIGlmIChpID09PSAwICYmIGlzQXJyYXkpIHtcbiAgICAgIGxlbmd0aCA9IGl0ZW0ubGVuZ3RoO1xuICAgIH0gLy8gSWYgdGhlIGN1cnJlbnQgaXRlbSBpcyBhbiBhcnJheSBidXQgdGhlIGxlbmd0aCBkb2VzIG5vdCBlcXVhbCB0aGUgdGFyZ2V0VmVjdG9yU2l6ZVxuXG5cbiAgICBpZiAoaXNBcnJheSAmJiBpdGVtLmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHZhciBpdGVtVHlwZSA9IGlzQXJyYXkgPyBnZXRBcnJheURhdGFUeXBlKGl0ZW0sIHR5cGVPZikgLy8gcmVjdXJzZSBpbnRvIGEgbmVzdGVkIGFycmF5XG4gICAgOiB0eXBlT2YoaXRlbSk7XG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eXBlID0gaXRlbVR5cGU7IC8vIGZpcnN0IGl0ZW1cbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IGl0ZW1UeXBlKSB7XG4gICAgICByZXR1cm4gJ21peGVkJztcbiAgICB9IGVsc2Ugey8vIHdlJ3JlIGdvb2QsIGV2ZXJ5dGhpbmcgaGFzIHRoZSBzYW1lIHR5cGUgc28gZmFyXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbGFzdCBpdGVtIGZyb20gYW4gYXJyYXlcbiAqIEBwYXJhbSBhcnJheVxuICogQHJldHVybnMgeyp9XG4gKi9cblxuXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbn1cbi8qKlxuICogR2V0IGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhcnJheS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LnNsaWNlKDAsIGFycmF5Lmxlbmd0aCAtIDEpO1xufVxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgb3Igc3RyaW5nIGNvbnRhaW5zIGFuIGl0ZW1cbiAqIEBwYXJhbSB7QXJyYXkgfCBzdHJpbmd9IGFycmF5XG4gKiBAcGFyYW0geyp9IGl0ZW1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZEJpZ051bWJlciA9IGJpdEFuZEJpZ051bWJlcjtcbmV4cG9ydHMuYml0Tm90QmlnTnVtYmVyID0gYml0Tm90QmlnTnVtYmVyO1xuZXhwb3J0cy5iaXRPckJpZ051bWJlciA9IGJpdE9yQmlnTnVtYmVyO1xuZXhwb3J0cy5iaXR3aXNlID0gYml0d2lzZTtcbmV4cG9ydHMuYml0WG9yID0gYml0WG9yO1xuZXhwb3J0cy5sZWZ0U2hpZnRCaWdOdW1iZXIgPSBsZWZ0U2hpZnRCaWdOdW1iZXI7XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlciA9IHJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlcjtcblxuLyoqXG4gKiBCaXR3aXNlIGFuZCBmb3IgQmlnbnVtYmVyc1xuICpcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIE4gJiAgbiA9ICBOXG4gKiAgIG4gJiAgMCA9ICAwXG4gKiAgIG4gJiAtMSA9ICBuXG4gKiAgIG4gJiAgbiA9ICBuXG4gKiAgIEkgJiAgSSA9ICBJXG4gKiAgLUkgJiAtSSA9IC1JXG4gKiAgIEkgJiAtSSA9ICAwXG4gKiAgIEkgJiAgbiA9ICBuXG4gKiAgIEkgJiAtbiA9ICBJXG4gKiAgLUkgJiAgbiA9ICAwXG4gKiAgLUkgJiAtbiA9IC1JXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgJiBgeWAsIGlzIGZ1bGx5IHByZWNpc2VcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJpdEFuZEJpZ051bWJlcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRBbmQnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpIHx8IHkuZXEoLTEpIHx8IHguZXEoeSkpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGlmICh5LmlzWmVybygpIHx8IHguZXEoLTEpKSB7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICBpZiAoIXguaXNGaW5pdGUoKSB8fCAheS5pc0Zpbml0ZSgpKSB7XG4gICAgaWYgKCF4LmlzRmluaXRlKCkgJiYgIXkuaXNGaW5pdGUoKSkge1xuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpID09PSB5LmlzTmVnYXRpdmUoKSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgfVxuXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcbiAgICAgIGlmICh5LmlzTmVnYXRpdmUoKSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cblxuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geTtcbiAgICB9XG5cbiAgICBpZiAoIXkuaXNGaW5pdGUoKSkge1xuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiB5O1xuICAgICAgfVxuXG4gICAgICBpZiAoeS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiaXR3aXNlKHgsIHksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiBiO1xuICB9KTtcbn1cbi8qKlxuICogQml0d2lzZSBub3RcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiB+YHhgLCBmdWxseSBwcmVjaXNlXG4gKlxuICovXG5cblxuZnVuY3Rpb24gYml0Tm90QmlnTnVtYmVyKHgpIHtcbiAgaWYgKHguaXNGaW5pdGUoKSAmJiAheC5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXROb3QnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuICB2YXIgcHJldlByZWMgPSBCaWdOdW1iZXIucHJlY2lzaW9uO1xuICBCaWdOdW1iZXIuY29uZmlnKHtcbiAgICBwcmVjaXNpb246IDFFOVxuICB9KTtcbiAgdmFyIHJlc3VsdCA9IHgucGx1cyhuZXcgQmlnTnVtYmVyKDEpKTtcbiAgcmVzdWx0LnMgPSAtcmVzdWx0LnMgfHwgbnVsbDtcbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiBwcmV2UHJlY1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQml0d2lzZSBPUiBmb3IgQmlnTnVtYmVyc1xuICpcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIE4gfCAgbiA9ICBOXG4gKiAgIG4gfCAgMCA9ICBuXG4gKiAgIG4gfCAtMSA9IC0xXG4gKiAgIG4gfCAgbiA9ICBuXG4gKiAgIEkgfCAgSSA9ICBJXG4gKiAgLUkgfCAtSSA9IC1JXG4gKiAgIEkgfCAtbiA9IC0xXG4gKiAgIEkgfCAtSSA9IC0xXG4gKiAgIEkgfCAgbiA9ICBJXG4gKiAgLUkgfCAgbiA9IC1JXG4gKiAgLUkgfCAtbiA9IC1uXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgfCBgeWAsIGZ1bGx5IHByZWNpc2VcbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdE9yQmlnTnVtYmVyKHgsIHkpIHtcbiAgaWYgKHguaXNGaW5pdGUoKSAmJiAheC5pc0ludGVnZXIoKSB8fCB5LmlzRmluaXRlKCkgJiYgIXkuaXNJbnRlZ2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdE9yJyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICB2YXIgbmVnT25lID0gbmV3IEJpZ051bWJlcigtMSk7XG5cbiAgaWYgKHguaXNaZXJvKCkgfHwgeS5lcShuZWdPbmUpIHx8IHguZXEoeSkpIHtcbiAgICByZXR1cm4geTtcbiAgfVxuXG4gIGlmICh5LmlzWmVybygpIHx8IHguZXEobmVnT25lKSkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgaWYgKCF4LmlzRmluaXRlKCkgfHwgIXkuaXNGaW5pdGUoKSkge1xuICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF4LmlzTmVnYXRpdmUoKSAmJiB5LmlzTmVnYXRpdmUoKSB8fCB4LmlzTmVnYXRpdmUoKSAmJiAheS5pc05lZ2F0aXZlKCkgJiYgIXkuaXNGaW5pdGUoKSkge1xuICAgICAgcmV0dXJuIG5lZ09uZTtcbiAgICB9XG5cbiAgICBpZiAoeC5pc05lZ2F0aXZlKCkgJiYgeS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgIHJldHVybiB4LmlzRmluaXRlKCkgPyB4IDogeTtcbiAgICB9XG5cbiAgICByZXR1cm4geC5pc0Zpbml0ZSgpID8geSA6IHg7XG4gIH1cblxuICByZXR1cm4gYml0d2lzZSh4LCB5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhIHwgYjtcbiAgfSk7XG59XG4vKipcbiAqIEFwcGxpZXMgYml0d2lzZSBmdW5jdGlvbiB0byBudW1iZXJzXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEBwYXJhbSB7ZnVuY3Rpb24gKGEsIGIpfSBmdW5jXG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9XG4gKi9cblxuXG5mdW5jdGlvbiBiaXR3aXNlKHgsIHksIGZ1bmMpIHtcbiAgdmFyIEJpZ051bWJlciA9IHguY29uc3RydWN0b3I7XG4gIHZhciB4Qml0cywgeUJpdHM7XG4gIHZhciB4U2lnbiA9ICsoeC5zIDwgMCk7XG4gIHZhciB5U2lnbiA9ICsoeS5zIDwgMCk7XG5cbiAgaWYgKHhTaWduKSB7XG4gICAgeEJpdHMgPSBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKGJpdE5vdEJpZ051bWJlcih4KSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhCaXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB4Qml0c1tpXSBePSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB4Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoeCk7XG4gIH1cblxuICBpZiAoeVNpZ24pIHtcbiAgICB5Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoYml0Tm90QmlnTnVtYmVyKHkpKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB5Qml0cy5sZW5ndGg7ICsrX2kpIHtcbiAgICAgIHlCaXRzW19pXSBePSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB5Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoeSk7XG4gIH1cblxuICB2YXIgbWluQml0cywgbWF4Qml0cywgbWluU2lnbjtcblxuICBpZiAoeEJpdHMubGVuZ3RoIDw9IHlCaXRzLmxlbmd0aCkge1xuICAgIG1pbkJpdHMgPSB4Qml0cztcbiAgICBtYXhCaXRzID0geUJpdHM7XG4gICAgbWluU2lnbiA9IHhTaWduO1xuICB9IGVsc2Uge1xuICAgIG1pbkJpdHMgPSB5Qml0cztcbiAgICBtYXhCaXRzID0geEJpdHM7XG4gICAgbWluU2lnbiA9IHlTaWduO1xuICB9XG5cbiAgdmFyIHNob3J0TGVuID0gbWluQml0cy5sZW5ndGg7XG4gIHZhciBsb25nTGVuID0gbWF4Qml0cy5sZW5ndGg7XG4gIHZhciBleHBGdW5jVmFsID0gZnVuYyh4U2lnbiwgeVNpZ24pIF4gMTtcbiAgdmFyIG91dFZhbCA9IG5ldyBCaWdOdW1iZXIoZXhwRnVuY1ZhbCBeIDEpO1xuICB2YXIgdHdvUG93ZXIgPSBuZXcgQmlnTnVtYmVyKDEpO1xuICB2YXIgdHdvID0gbmV3IEJpZ051bWJlcigyKTtcbiAgdmFyIHByZXZQcmVjID0gQmlnTnVtYmVyLnByZWNpc2lvbjtcbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiAxRTlcbiAgfSk7XG5cbiAgd2hpbGUgKHNob3J0TGVuID4gMCkge1xuICAgIGlmIChmdW5jKG1pbkJpdHNbLS1zaG9ydExlbl0sIG1heEJpdHNbLS1sb25nTGVuXSkgPT09IGV4cEZ1bmNWYWwpIHtcbiAgICAgIG91dFZhbCA9IG91dFZhbC5wbHVzKHR3b1Bvd2VyKTtcbiAgICB9XG5cbiAgICB0d29Qb3dlciA9IHR3b1Bvd2VyLnRpbWVzKHR3byk7XG4gIH1cblxuICB3aGlsZSAobG9uZ0xlbiA+IDApIHtcbiAgICBpZiAoZnVuYyhtaW5TaWduLCBtYXhCaXRzWy0tbG9uZ0xlbl0pID09PSBleHBGdW5jVmFsKSB7XG4gICAgICBvdXRWYWwgPSBvdXRWYWwucGx1cyh0d29Qb3dlcik7XG4gICAgfVxuXG4gICAgdHdvUG93ZXIgPSB0d29Qb3dlci50aW1lcyh0d28pO1xuICB9XG5cbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiBwcmV2UHJlY1xuICB9KTtcblxuICBpZiAoZXhwRnVuY1ZhbCA9PT0gMCkge1xuICAgIG91dFZhbC5zID0gLW91dFZhbC5zO1xuICB9XG5cbiAgcmV0dXJuIG91dFZhbDtcbn1cbi8qIEV4dHJhY3RlZCBmcm9tIGRlY2ltYWwuanMsIGFuZCBlZGl0ZWQgdG8gc3BlY2lhbGl6ZS4gKi9cblxuXG5mdW5jdGlvbiBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKHgpIHtcbiAgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgdmFyIGEgPSB4LmQ7IC8vIGFycmF5IHdpdGggZGlnaXRzXG5cbiAgdmFyIHIgPSBhWzBdICsgJyc7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHMgPSBhW2ldICsgJyc7XG5cbiAgICBmb3IgKHZhciB6ID0gNyAtIHMubGVuZ3RoOyB6LS07KSB7XG4gICAgICBzID0gJzAnICsgcztcbiAgICB9XG5cbiAgICByICs9IHM7XG4gIH1cblxuICB2YXIgaiA9IHIubGVuZ3RoO1xuXG4gIHdoaWxlIChyLmNoYXJBdChqKSA9PT0gJzAnKSB7XG4gICAgai0tO1xuICB9XG5cbiAgdmFyIHhlID0geC5lO1xuICB2YXIgc3RyID0gci5zbGljZSgwLCBqICsgMSB8fCAxKTtcbiAgdmFyIHN0ckwgPSBzdHIubGVuZ3RoO1xuXG4gIGlmICh4ZSA+IDApIHtcbiAgICBpZiAoKyt4ZSA+IHN0ckwpIHtcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcy5cbiAgICAgIHhlIC09IHN0ckw7XG5cbiAgICAgIHdoaWxlICh4ZS0tKSB7XG4gICAgICAgIHN0ciArPSAnMCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh4ZSA8IHN0ckwpIHtcbiAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCB4ZSkgKyAnLicgKyBzdHIuc2xpY2UoeGUpO1xuICAgIH1cbiAgfSAvLyBDb252ZXJ0IGZyb20gYmFzZSAxMCAoZGVjaW1hbCkgdG8gYmFzZSAyXG5cblxuICB2YXIgYXJyID0gWzBdO1xuXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHN0ci5sZW5ndGg7KSB7XG4gICAgdmFyIGFyckwgPSBhcnIubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGFyckwtLSkge1xuICAgICAgYXJyW2FyckxdICo9IDEwO1xuICAgIH1cblxuICAgIGFyclswXSArPSBwYXJzZUludChzdHIuY2hhckF0KF9pMisrKSk7IC8vIGNvbnZlcnQgdG8gaW50XG5cbiAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgYXJyLmxlbmd0aDsgKytfaikge1xuICAgICAgaWYgKGFycltfal0gPiAxKSB7XG4gICAgICAgIGlmIChhcnJbX2ogKyAxXSA9PT0gbnVsbCB8fCBhcnJbX2ogKyAxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXJyW19qICsgMV0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyW19qICsgMV0gKz0gYXJyW19qXSA+PiAxO1xuICAgICAgICBhcnJbX2pdICY9IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XG59XG4vKipcbiAqIEJpdHdpc2UgWE9SIGZvciBCaWdOdW1iZXJzXG4gKlxuICogU3BlY2lhbCBDYXNlczpcbiAqICAgTiBeICBuID0gIE5cbiAqICAgbiBeICAwID0gIG5cbiAqICAgbiBeICBuID0gIDBcbiAqICAgbiBeIC0xID0gfm5cbiAqICAgSSBeICBuID0gIElcbiAqICAgSSBeIC1uID0gLUlcbiAqICAgSSBeIC1JID0gLTFcbiAqICAtSSBeICBuID0gLUlcbiAqICAtSSBeIC1uID0gIElcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCBeIGB5YCwgZnVsbHkgcHJlY2lzZVxuICpcbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdFhvcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRYb3InKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICBpZiAoeS5pc1plcm8oKSkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgaWYgKHguZXEoeSkpIHtcbiAgICByZXR1cm4gbmV3IEJpZ051bWJlcigwKTtcbiAgfVxuXG4gIHZhciBuZWdPbmUgPSBuZXcgQmlnTnVtYmVyKC0xKTtcblxuICBpZiAoeC5lcShuZWdPbmUpKSB7XG4gICAgcmV0dXJuIGJpdE5vdEJpZ051bWJlcih5KTtcbiAgfVxuXG4gIGlmICh5LmVxKG5lZ09uZSkpIHtcbiAgICByZXR1cm4gYml0Tm90QmlnTnVtYmVyKHgpO1xuICB9XG5cbiAgaWYgKCF4LmlzRmluaXRlKCkgfHwgIXkuaXNGaW5pdGUoKSkge1xuICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF5LmlzRmluaXRlKCkpIHtcbiAgICAgIHJldHVybiBuZWdPbmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeC5pc05lZ2F0aXZlKCkgPT09IHkuaXNOZWdhdGl2ZSgpID8gSW5maW5pdHkgOiAtSW5maW5pdHkpO1xuICB9XG5cbiAgcmV0dXJuIGJpdHdpc2UoeCwgeSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYSBeIGI7XG4gIH0pO1xufVxuLyoqXG4gKiBCaXR3aXNlIGxlZnQgc2hpZnRcbiAqXG4gKiBTcGVjaWFsIENhc2VzOlxuICogIG4gPDwgLW4gPSBOXG4gKiAgbiA8PCAgTiA9IE5cbiAqICBOIDw8ICBuID0gTlxuICogIG4gPDwgIDAgPSBuXG4gKiAgMCA8PCAgbiA9IDBcbiAqICBJIDw8ICBJID0gTlxuICogIEkgPDwgIG4gPSBJXG4gKiAgbiA8PCAgSSA9IElcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCA8PCBgeWBcbiAqXG4gKi9cblxuXG5mdW5jdGlvbiBsZWZ0U2hpZnRCaWdOdW1iZXIoeCwgeSkge1xuICBpZiAoeC5pc0Zpbml0ZSgpICYmICF4LmlzSW50ZWdlcigpIHx8IHkuaXNGaW5pdGUoKSAmJiAheS5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbGVmdFNoaWZ0Jyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSB8fCB5LmlzTmVnYXRpdmUoKSAmJiAheS5pc1plcm8oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICBpZiAoeC5pc1plcm8oKSB8fCB5LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICBpZiAoIXguaXNGaW5pdGUoKSAmJiAheS5pc0Zpbml0ZSgpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfSAvLyBNYXRoLnBvdygyLCB5KSBpcyBmdWxseSBwcmVjaXNlIGZvciB5IDwgNTUsIGFuZCBmYXN0XG5cblxuICBpZiAoeS5sdCg1NSkpIHtcbiAgICByZXR1cm4geC50aW1lcyhNYXRoLnBvdygyLCB5LnRvTnVtYmVyKCkpICsgJycpO1xuICB9XG5cbiAgcmV0dXJuIHgudGltZXMobmV3IEJpZ051bWJlcigyKS5wb3coeSkpO1xufVxuLypcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIG4gPj4gLW4gPSAgTlxuICogICBuID4+ICBOID0gIE5cbiAqICAgTiA+PiAgbiA9ICBOXG4gKiAgIEkgPj4gIEkgPSAgTlxuICogICBuID4+ICAwID0gIG5cbiAqICAgSSA+PiAgbiA9ICBJXG4gKiAgLUkgPj4gIG4gPSAtSVxuICogIC1JID4+ICBJID0gLUlcbiAqICAgbiA+PiAgSSA9ICBJXG4gKiAgLW4gPj4gIEkgPSAtMVxuICogICAwID4+ICBuID0gIDBcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7QmlnTnVtYmVyfSBSZXN1bHQgb2YgYHhgID4+IGB5YFxuICpcbiAqL1xuXG5cbmZ1bmN0aW9uIHJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiByaWdodEFyaXRoU2hpZnQnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpIHx8IHkuaXNOZWdhdGl2ZSgpICYmICF5LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpIHx8IHkuaXNaZXJvKCkpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGlmICgheS5pc0Zpbml0ZSgpKSB7XG4gICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigtMSk7XG4gICAgfVxuXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gIH0gLy8gTWF0aC5wb3coMiwgeSkgaXMgZnVsbHkgcHJlY2lzZSBmb3IgeSA8IDU1LCBhbmQgZmFzdFxuXG5cbiAgaWYgKHkubHQoNTUpKSB7XG4gICAgcmV0dXJuIHguZGl2KE1hdGgucG93KDIsIHkudG9OdW1iZXIoKSkgKyAnJykuZmxvb3IoKTtcbiAgfVxuXG4gIHJldHVybiB4LmRpdihuZXcgQmlnTnVtYmVyKDIpLnBvdyh5KSkuZmxvb3IoKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyVGF1ID0gZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJQaSA9IGV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyUGhpID0gZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJFID0gdm9pZCAwO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uL2Z1bmN0aW9uXCIpO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIGVcbiAqL1xudmFyIGNyZWF0ZUJpZ051bWJlckUgPSAoMCwgX2Z1bmN0aW9uLm1lbW9pemUpKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMSkuZXhwKCk7XG59LCBoYXNoZXIpO1xuLyoqXG4gKiBDYWxjdWxhdGUgQmlnTnVtYmVyIGdvbGRlbiByYXRpbywgcGhpID0gKDErc3FydCg1KSkvMlxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHBoaVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyRSA9IGNyZWF0ZUJpZ051bWJlckU7XG52YXIgY3JlYXRlQmlnTnVtYmVyUGhpID0gKDAsIF9mdW5jdGlvbi5tZW1vaXplKShmdW5jdGlvbiAoQmlnTnVtYmVyKSB7XG4gIHJldHVybiBuZXcgQmlnTnVtYmVyKDEpLnBsdXMobmV3IEJpZ051bWJlcig1KS5zcXJ0KCkpLmRpdigyKTtcbn0sIGhhc2hlcik7XG4vKipcbiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgcGkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBCaWdOdW1iZXIgICBCaWdOdW1iZXIgY29uc3RydWN0b3JcbiAqIEByZXR1cm5zIHtCaWdOdW1iZXJ9IFJldHVybnMgcGlcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUJpZ051bWJlclBoaSA9IGNyZWF0ZUJpZ051bWJlclBoaTtcbnZhciBjcmVhdGVCaWdOdW1iZXJQaSA9ICgwLCBfZnVuY3Rpb24ubWVtb2l6ZSkoZnVuY3Rpb24gKEJpZ051bWJlcikge1xuICByZXR1cm4gQmlnTnVtYmVyLmFjb3MoLTEpO1xufSwgaGFzaGVyKTtcbi8qKlxuICogQ2FsY3VsYXRlIEJpZ051bWJlciB0YXUsIHRhdSA9IDIgKiBwaVxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRhdVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyUGkgPSBjcmVhdGVCaWdOdW1iZXJQaTtcbnZhciBjcmVhdGVCaWdOdW1iZXJUYXUgPSAoMCwgX2Z1bmN0aW9uLm1lbW9pemUpKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHtcbiAgcmV0dXJuIGNyZWF0ZUJpZ051bWJlclBpKEJpZ051bWJlcikudGltZXMoMik7XG59LCBoYXNoZXIpO1xuLyoqXG4gKiBDcmVhdGUgYSBoYXNoIGZvciBhIEJpZ051bWJlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gVGhlIGNyZWF0ZWQgaGFzIGlzXG4gKiB0aGUgY29uZmlndXJlZCBwcmVjaXNpb25cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgICAgICAgICBTdXBwb3NlZCB0byBjb250YWluIGEgc2luZ2xlIGVudHJ5IHdpdGhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIEJpZ051bWJlciBjb25zdHJ1Y3RvclxuICogQHJldHVybiB7bnVtYmVyfSBwcmVjaXNpb25cbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJUYXUgPSBjcmVhdGVCaWdOdW1iZXJUYXU7XG5cbmZ1bmN0aW9uIGhhc2hlcihhcmdzKSB7XG4gIHJldHVybiBhcmdzWzBdLnByZWNpc2lvbjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9ybWF0ID0gZm9ybWF0O1xuZXhwb3J0cy50b0VuZ2luZWVyaW5nID0gdG9FbmdpbmVlcmluZztcbmV4cG9ydHMudG9FeHBvbmVudGlhbCA9IHRvRXhwb25lbnRpYWw7XG5leHBvcnRzLnRvRml4ZWQgPSB0b0ZpeGVkO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi9vYmplY3RcIik7XG5cbi8qKlxuICogQ29udmVydCBhIEJpZ051bWJlciB0byBhIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKlxuICogU3ludGF4OlxuICpcbiAqICAgIGZvcm1hdCh2YWx1ZSlcbiAqICAgIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAqICAgIGZvcm1hdCh2YWx1ZSwgcHJlY2lzaW9uKVxuICogICAgZm9ybWF0KHZhbHVlLCBmbilcbiAqXG4gKiBXaGVyZTpcbiAqXG4gKiAgICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWRcbiAqICAgIHtPYmplY3R9IG9wdGlvbnMgQW4gb2JqZWN0IHdpdGggZm9ybWF0dGluZyBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbm90YXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBub3RhdGlvbi4gQ2hvb3NlIGZyb206XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQnICAgICAgICAgIEFsd2F5cyB1c2UgcmVndWxhciBudW1iZXIgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxMjMuNDAnIGFuZCAnMTQwMDAwMDAnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwb25lbnRpYWwnICAgIEFsd2F5cyB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxLjIzNGUrMicgYW5kICcxLjRlKzcnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgKGRlZmF1bHQpIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsb3dlcmAgYW5kIGB1cHBlcmAgYm91bmRzLCBhbmQgdXNlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudGlhbCBub3RhdGlvbiBlbHNld2hlcmUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvd2VyIGJvdW5kIGlzIGluY2x1ZGVkLCB1cHBlciBib3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBleGNsdWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycsIGFuZCAnYXV0bycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIHRvdGFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcmV0dXJuZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgaXMgdW5kZWZpbmVkIGJ5IGRlZmF1bHQuXG4gKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGxvd2VyRXhwICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSBsb3dlciBib3VuZGFyeVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGggYW4gZXhwb25lbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgbm90YXRpb249J2F1dG9gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIGAtM2AuXG4gKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHVwcGVyRXhwICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSB1cHBlciBib3VuZGFyeVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGggYW4gZXhwb25lbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgbm90YXRpb249J2F1dG9gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAqICAgIHtGdW5jdGlvbn0gZm4gICAgQSBjdXN0b20gZm9ybWF0dGluZyBmdW5jdGlvbi4gQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgIGJ1aWx0LWluIG5vdGF0aW9ucy4gRnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgd2l0aCBgdmFsdWVgIGFzXG4gKiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBhbmQgbXVzdCByZXR1cm4gYSBzdHJpbmcuIElzIHVzZWZ1bCBmb3IgZXhhbXBsZSB0b1xuICogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgYWxsIHZhbHVlcyBpbnNpZGUgYSBtYXRyaXggaW4gYSBwYXJ0aWN1bGFyIHdheS5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICBmb3JtYXQoNi40KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnNi40J1xuICogICAgZm9ybWF0KDEyNDAwMDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzEuMjRlNidcbiAqICAgIGZvcm1hdCgxLzMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcwLjMzMzMzMzMzMzMzMzMzMzMnXG4gKiAgICBmb3JtYXQoMS8zLCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMnXG4gKiAgICBmb3JtYXQoMjEzODUsIDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMjEwMDAnXG4gKiAgICBmb3JtYXQoMTJlOCwge25vdGF0aW9uOiAnZml4ZWQnfSkgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcxMjAwMDAwMDAwJ1xuICogICAgZm9ybWF0KDIuMywgICAge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDR9KSAgLy8gcmV0dXJucyAnMi4zMDAwJ1xuICogICAgZm9ybWF0KDUyLjgsICAge25vdGF0aW9uOiAnZXhwb25lbnRpYWwnfSkgICAgICAgICAgLy8gcmV0dXJucyAnNS4yOGUrMSdcbiAqICAgIGZvcm1hdCgxMjQwMCwgIHtub3RhdGlvbjogJ2VuZ2luZWVyaW5nJ30pICAgICAgICAgIC8vIHJldHVybnMgJzEyLjQwMGUrMydcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0IHwgRnVuY3Rpb24gfCBudW1iZXJ9IFtvcHRpb25zXVxuICogQHJldHVybiB7c3RyaW5nfSBzdHIgVGhlIGZvcm1hdHRlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBmb3JtYXQodmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gaGFuZGxlIGZvcm1hdCh2YWx1ZSwgZm4pXG4gICAgcmV0dXJuIG9wdGlvbnModmFsdWUpO1xuICB9IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzXG5cblxuICBpZiAoIXZhbHVlLmlzRmluaXRlKCkpIHtcbiAgICByZXR1cm4gdmFsdWUuaXNOYU4oKSA/ICdOYU4nIDogdmFsdWUuZ3QoMCkgPyAnSW5maW5pdHknIDogJy1JbmZpbml0eSc7XG4gIH0gLy8gZGVmYXVsdCB2YWx1ZXMgZm9yIG9wdGlvbnNcblxuXG4gIHZhciBub3RhdGlvbiA9ICdhdXRvJztcbiAgdmFyIHByZWNpc2lvbjtcblxuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gZGV0ZXJtaW5lIG5vdGF0aW9uIGZyb20gb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLm5vdGF0aW9uKSB7XG4gICAgICBub3RhdGlvbiA9IG9wdGlvbnMubm90YXRpb247XG4gICAgfSAvLyBkZXRlcm1pbmUgcHJlY2lzaW9uIGZyb20gb3B0aW9uc1xuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gICAgICBwcmVjaXNpb24gPSBvcHRpb25zO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmVjaXNpb24pIHtcbiAgICAgIHByZWNpc2lvbiA9IG9wdGlvbnMucHJlY2lzaW9uO1xuICAgIH1cbiAgfSAvLyBoYW5kbGUgdGhlIHZhcmlvdXMgbm90YXRpb25zXG5cblxuICBzd2l0Y2ggKG5vdGF0aW9uKSB7XG4gICAgY2FzZSAnZml4ZWQnOlxuICAgICAgcmV0dXJuIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbik7XG5cbiAgICBjYXNlICdleHBvbmVudGlhbCc6XG4gICAgICByZXR1cm4gdG9FeHBvbmVudGlhbCh2YWx1ZSwgcHJlY2lzaW9uKTtcblxuICAgIGNhc2UgJ2VuZ2luZWVyaW5nJzpcbiAgICAgIHJldHVybiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IGNsZWFuIHVwIHNvbWUgZGF5LiBEZXByZWNhdGVkIHNpbmNlOiAyMDE4LTAxLTI0XG4gICAgICAgIC8vIEBkZXByZWNhdGVkIHVwcGVyIGFuZCBsb3dlciBhcmUgcmVwbGFjZWQgd2l0aCB1cHBlckV4cCBhbmQgbG93ZXJFeHAgc2luY2UgdjQuMC4wXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhwb25lbnRpYWwgJiYgKG9wdGlvbnMuZXhwb25lbnRpYWwubG93ZXIgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdmFyIGZpeGVkT3B0aW9ucyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZpeGVkT3B0aW9ucy5leHBvbmVudGlhbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChvcHRpb25zLmV4cG9uZW50aWFsLmxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucy5sb3dlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlcikgLyBNYXRoLkxOMTApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucy51cHBlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC51cHBlcikgLyBNYXRoLkxOMTApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogRm9ybWF0dGluZyBvcHRpb25zIGV4cG9uZW50aWFsLmxvd2VyIGFuZCBleHBvbmVudGlhbC51cHBlciAnICsgJyhtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlKSAnICsgJ2FyZSByZXBsYWNlZCB3aXRoIGV4cG9uZW50aWFsLmxvd2VyRXhwIGFuZCBleHBvbmVudGlhbC51cHBlckV4cCAnICsgJyhtaW5pbXVtIGFuZCBtYXhpbXVtIGV4cG9uZW50KSBzaW5jZSB2ZXJzaW9uIDQuMC4wLiAnICsgJ1JlcGxhY2UgJyArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpICsgJyB3aXRoICcgKyBKU09OLnN0cmluZ2lmeShmaXhlZE9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCBmaXhlZE9wdGlvbnMpO1xuICAgICAgICB9IC8vIGRldGVybWluZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZm9yIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxuICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdXBwZXIgYW5kIGxvd2VyIHRvIGJlIEJpZ051bWJlcnMgdGhlbXNlbHZlc1xuXG5cbiAgICAgICAgdmFyIGxvd2VyRXhwID0gb3B0aW9ucyAmJiBvcHRpb25zLmxvd2VyRXhwICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvd2VyRXhwIDogLTM7XG4gICAgICAgIHZhciB1cHBlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy51cHBlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy51cHBlckV4cCA6IDU7IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2UgemVyb1xuXG4gICAgICAgIGlmICh2YWx1ZS5pc1plcm8oKSkgcmV0dXJuICcwJzsgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIG91dHB1dCBleHBvbmVudGlhbCBub3RhdGlvblxuXG4gICAgICAgIHZhciBzdHI7XG4gICAgICAgIHZhciByb3VuZGVkID0gdmFsdWUudG9TaWduaWZpY2FudERpZ2l0cyhwcmVjaXNpb24pO1xuICAgICAgICB2YXIgZXhwID0gcm91bmRlZC5lO1xuXG4gICAgICAgIGlmIChleHAgPj0gbG93ZXJFeHAgJiYgZXhwIDwgdXBwZXJFeHApIHtcbiAgICAgICAgICAvLyBub3JtYWwgbnVtYmVyIG5vdGF0aW9uXG4gICAgICAgICAgc3RyID0gcm91bmRlZC50b0ZpeGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZXhwb25lbnRpYWwgbm90YXRpb25cbiAgICAgICAgICBzdHIgPSB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pO1xuICAgICAgICB9IC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludFxuXG5cbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oKFxcLlxcZCo/KSgwKykpKCR8ZSkvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRpZ2l0cyA9IGFyZ3VtZW50c1syXTtcbiAgICAgICAgICB2YXIgZSA9IGFyZ3VtZW50c1s0XTtcbiAgICAgICAgICByZXR1cm4gZGlnaXRzICE9PSAnLicgPyBkaWdpdHMgKyBlIDogZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG5vdGF0aW9uIFwiJyArIG5vdGF0aW9uICsgJ1wiLiAnICsgJ0Nob29zZSBcImF1dG9cIiwgXCJleHBvbmVudGlhbFwiLCBvciBcImZpeGVkXCIuJyk7XG4gIH1cbn1cbi8qKlxuICogRm9ybWF0IGEgQmlnTnVtYmVyIGluIGVuZ2luZWVyaW5nIG5vdGF0aW9uLiBMaWtlICcxLjIzZSs2JywgJzIuM2UrMCcsICczLjUwMGUtMydcbiAqIEBwYXJhbSB7QmlnTnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb25dICAgICAgICBPcHRpb25hbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZmlndXJlcyB0byByZXR1cm4uXG4gKi9cblxuXG5mdW5jdGlvbiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pIHtcbiAgLy8gZmluZCBuZWFyZXN0IGxvd2VyIG11bHRpcGxlIG9mIDMgZm9yIGV4cG9uZW50XG4gIHZhciBlID0gdmFsdWUuZTtcbiAgdmFyIG5ld0V4cCA9IGUgJSAzID09PSAwID8gZSA6IGUgPCAwID8gZSAtIDMgLSBlICUgMyA6IGUgLSBlICUgMzsgLy8gZmluZCBkaWZmZXJlbmNlIGluIGV4cG9uZW50cywgYW5kIGNhbGN1bGF0ZSB0aGUgdmFsdWUgd2l0aG91dCBleHBvbmVudFxuXG4gIHZhciB2YWx1ZVdpdGhvdXRFeHAgPSB2YWx1ZS5tdWwoTWF0aC5wb3coMTAsIC1uZXdFeHApKTtcbiAgdmFyIHZhbHVlU3RyID0gdmFsdWVXaXRob3V0RXhwLnRvUHJlY2lzaW9uKHByZWNpc2lvbik7XG5cbiAgaWYgKHZhbHVlU3RyLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICB2YWx1ZVN0ciA9IHZhbHVlV2l0aG91dEV4cC50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlU3RyICsgJ2UnICsgKGUgPj0gMCA/ICcrJyA6ICcnKSArIG5ld0V4cC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgaW4gZXhwb25lbnRpYWwgbm90YXRpb24uIExpa2UgJzEuMjNlKzUnLCAnMi4zZSswJywgJzMuNTAwZS0zJ1xuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbl0gIE51bWJlciBvZiBkaWdpdHMgaW4gZm9ybWF0dGVkIG91dHB1dC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF4aW11bSBhdmFpbGFibGUgZGlnaXRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbikge1xuICBpZiAocHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbChwcmVjaXNpb24gLSAxKTsgLy8gTm90ZSB0aGUgb2Zmc2V0IG9mIG9uZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZS50b0V4cG9uZW50aWFsKCk7XG4gIH1cbn1cbi8qKlxuICogRm9ybWF0IGEgbnVtYmVyIHdpdGggZml4ZWQgbm90YXRpb24uXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPXVuZGVmaW5lZF0gT3B0aW9uYWwgbnVtYmVyIG9mIGRlY2ltYWxzIGFmdGVyIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsIHBvaW50LiBVbmRlZmluZWQgYnkgZGVmYXVsdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbikge1xuICByZXR1cm4gdmFsdWUudG9GaXhlZChwcmVjaXNpb24pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5uZWFybHlFcXVhbCA9IG5lYXJseUVxdWFsO1xuXG4vKipcbiAqIENvbXBhcmVzIHR3byBCaWdOdW1iZXJzLlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHggICAgICAgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHkgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbl0gIFRoZSBtYXhpbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlcHNpbG9uIGlzIHVuZGVmaW5lZCBvciBudWxsLCB0aGUgZnVuY3Rpb24gd2lsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWwuXG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSB0d28gbnVtYmVycyBhcmUgbmVhcmx5IGVxdWFsXG4gKi9cbmZ1bmN0aW9uIG5lYXJseUVxdWFsKHgsIHksIGVwc2lsb24pIHtcbiAgLy8gaWYgZXBzaWxvbiBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWxcbiAgaWYgKGVwc2lsb24gPT09IG51bGwgfHwgZXBzaWxvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHguZXEoeSk7XG4gIH0gLy8gdXNlIFwiPT1cIiBvcGVyYXRvciwgaGFuZGxlcyBpbmZpbml0aWVzXG5cblxuICBpZiAoeC5lcSh5KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5hTlxuXG5cbiAgaWYgKHguaXNOYU4oKSB8fCB5LmlzTmFOKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gYXQgdGhpcyBwb2ludCB4IGFuZCB5IHNob3VsZCBiZSBmaW5pdGVcblxuXG4gIGlmICh4LmlzRmluaXRlKCkgJiYgeS5pc0Zpbml0ZSgpKSB7XG4gICAgLy8gY2hlY2sgbnVtYmVycyBhcmUgdmVyeSBjbG9zZSwgbmVlZGVkIHdoZW4gY29tcGFyaW5nIG51bWJlcnMgbmVhciB6ZXJvXG4gICAgdmFyIGRpZmYgPSB4Lm1pbnVzKHkpLmFicygpO1xuXG4gICAgaWYgKGRpZmYuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgcmVsYXRpdmUgZXJyb3JcbiAgICAgIHZhciBtYXggPSB4LmNvbnN0cnVjdG9yLm1heCh4LmFicygpLCB5LmFicygpKTtcbiAgICAgIHJldHVybiBkaWZmLmx0ZShtYXgudGltZXMoZXBzaWxvbikpO1xuICAgIH1cbiAgfSAvLyBJbmZpbml0ZSBhbmQgTnVtYmVyIG9yIG5lZ2F0aXZlIEluZmluaXRlIGFuZCBwb3NpdGl2ZSBJbmZpbml0ZSBjYXNlc1xuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb250YWluc0NvbGxlY3Rpb25zID0gY29udGFpbnNDb2xsZWN0aW9ucztcbmV4cG9ydHMuZGVlcEZvckVhY2ggPSBkZWVwRm9yRWFjaDtcbmV4cG9ydHMuZGVlcE1hcCA9IGRlZXBNYXA7XG5leHBvcnRzLnJlZHVjZSA9IHJlZHVjZTtcbmV4cG9ydHMuc2NhdHRlciA9IHNjYXR0ZXI7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9JbmRleEVycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yL0luZGV4RXJyb3JcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheVwiKTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgY29udGFpbnMgY29sbGVjdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGFycmF5IGNvbnRhaW5zIG9uZSBvciBtdWx0aXBsZVxuICogICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25zIChBcnJheXMgb3IgTWF0cmljZXMpLiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNDb2xsZWN0aW9ucyhhcnJheSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCgwLCBfaXMuaXNDb2xsZWN0aW9uKShhcnJheVtpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgbG9vcCBvdmVyIGFsbCBlbGVtZW50cyBpbiBhIGdpdmVuIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBhbmQgaW52b2tlIHRoZSBjYWxsYmFjayBvbiBlYWNoIG9mIHRoZSBlbGVtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggb25lXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyOiB0aGUgY3VycmVudCBlbGVtZW50IGluIHRoZSBhcnJheVxuICovXG5cblxuZnVuY3Rpb24gZGVlcEZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIGlmICgoMCwgX2lzLmlzTWF0cml4KShhcnJheSkpIHtcbiAgICBhcnJheSA9IGFycmF5LnZhbHVlT2YoKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZGVlcEZvckVhY2godmFsdWUsIGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBFeGVjdXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBlbGVtZW50IHdpc2UgZm9yIGVhY2ggZWxlbWVudCBpbiBhcnJheSBhbmQgYW55XG4gKiBuZXN0ZWQgYXJyYXlcbiAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgcmVzdWx0c1xuICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHR3byBwYXJhbWV0ZXJzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTEgYW5kIHZhbHVlMiwgd2hpY2ggY29udGFpbiB0aGUgY3VycmVudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50IG9mIGJvdGggYXJyYXlzLlxuICogQHBhcmFtIHtib29sZWFufSBbc2tpcFplcm9zXSBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vbi16ZXJvIHZhbHVlcyBvbmx5LlxuICpcbiAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSByZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIGRlZXBNYXAoYXJyYXksIGNhbGxiYWNrLCBza2lwWmVyb3MpIHtcbiAgaWYgKGFycmF5ICYmIHR5cGVvZiBhcnJheS5tYXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIGFycmF5Lm1hcCB3aXRoIGEgZm9yIGxvb3AgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZVxuICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGNhbGxiYWNrLCBza2lwWmVyb3MpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjYWxsYmFjayhhcnJheSk7XG4gIH1cbn1cbi8qKlxuICogUmVkdWNlIGEgZ2l2ZW4gbWF0cml4IG9yIGFycmF5IHRvIGEgbmV3IG1hdHJpeCBvclxuICogYXJyYXkgd2l0aCBvbmUgbGVzcyBkaW1lbnNpb24sIGFwcGx5aW5nIHRoZSBnaXZlblxuICogY2FsbGJhY2sgaW4gdGhlIHNlbGVjdGVkIGRpbWVuc2lvbi5cbiAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IG1hdFxuICogQHBhcmFtIHtudW1iZXJ9IGRpbVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSByZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIHJlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spIHtcbiAgdmFyIHNpemUgPSBBcnJheS5pc0FycmF5KG1hdCkgPyAoMCwgX2FycmF5LmFycmF5U2l6ZSkobWF0KSA6IG1hdC5zaXplKCk7XG5cbiAgaWYgKGRpbSA8IDAgfHwgZGltID49IHNpemUubGVuZ3RoKSB7XG4gICAgLy8gVE9ETzogd291bGQgYmUgbW9yZSBjbGVhciB3aGVuIHRocm93aW5nIGEgRGltZW5zaW9uRXJyb3IgaGVyZVxuICAgIHRocm93IG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGRpbSwgc2l6ZS5sZW5ndGgpO1xuICB9XG5cbiAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKG1hdCkpIHtcbiAgICByZXR1cm4gbWF0LmNyZWF0ZShfcmVkdWNlKG1hdC52YWx1ZU9mKCksIGRpbSwgY2FsbGJhY2spKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX3JlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spO1xuICB9XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHJlZHVjZSBhIG1hdHJpeFxuICogQHBhcmFtIHtBcnJheX0gbWF0XG4gKiBAcGFyYW0ge251bWJlcn0gZGltXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfcmVkdWNlKG1hdCwgZGltLCBjYWxsYmFjaykge1xuICB2YXIgaSwgcmV0LCB2YWwsIHRyYW47XG5cbiAgaWYgKGRpbSA8PSAwKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG1hdFswXSkpIHtcbiAgICAgIHZhbCA9IG1hdFswXTtcblxuICAgICAgZm9yIChpID0gMTsgaSA8IG1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWwgPSBjYWxsYmFjayh2YWwsIG1hdFtpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW4gPSBfc3dpdGNoKG1hdCk7XG4gICAgICByZXQgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRyYW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gX3JlZHVjZSh0cmFuW2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2ldID0gX3JlZHVjZShtYXRbaV0sIGRpbSAtIDEsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4vKipcbiAqIFRyYW5zcG9zZSBhIG1hdHJpeFxuICogQHBhcmFtIHtBcnJheX0gbWF0XG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldFxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zd2l0Y2gobWF0KSB7XG4gIHZhciBJID0gbWF0Lmxlbmd0aDtcbiAgdmFyIEogPSBtYXRbMF0ubGVuZ3RoO1xuICB2YXIgaSwgajtcbiAgdmFyIHJldCA9IFtdO1xuXG4gIGZvciAoaiA9IDA7IGogPCBKOyBqKyspIHtcbiAgICB2YXIgdG1wID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgSTsgaSsrKSB7XG4gICAgICB0bXAucHVzaChtYXRbaV1bal0pO1xuICAgIH1cblxuICAgIHJldC5wdXNoKHRtcCk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufSAvLyBUT0RPOiBkb2N1bWVudCBmdW5jdGlvbiBzY2F0dGVyXG5cblxuZnVuY3Rpb24gc2NhdHRlcihhLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGYsIGludmVyc2UsIHVwZGF0ZSwgdmFsdWUpIHtcbiAgLy8gYSBhcnJheXNcbiAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgdmFyIGFwdHIgPSBhLl9wdHI7IC8vIHZhcnNcblxuICB2YXIgaywgazAsIGsxLCBpOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG1hdHJpeClcblxuICBpZiAoeCkge1xuICAgIC8vIHZhbHVlcyBpbiBqXG4gICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgIC8vIHJvd1xuICAgICAgaSA9IGFpbmRleFtrXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICBpZiAod1tpXSAhPT0gbWFyaykge1xuICAgICAgICAvLyBpIGlzIG5ldyBlbnRyeSBpbiBqXG4gICAgICAgIHdbaV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICBjaW5kZXgucHVzaChpKTsgLy8geChpKSA9IEEsIGNoZWNrIHdlIG5lZWQgdG8gY2FsbCBmdW5jdGlvbiB0aGlzIHRpbWVcblxuICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgLy8gY29weSB2YWx1ZSB0byB3b3Jrc3BhY2UgY2FsbGluZyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICAgIHhbaV0gPSBpbnZlcnNlID8gZihhdmFsdWVzW2tdLCB2YWx1ZSkgOiBmKHZhbHVlLCBhdmFsdWVzW2tdKTsgLy8gZnVuY3Rpb24gd2FzIGNhbGxlZCBvbiBjdXJyZW50IHJvd1xuXG4gICAgICAgICAgdVtpXSA9IG1hcms7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29weSB2YWx1ZSB0byB3b3Jrc3BhY2VcbiAgICAgICAgICB4W2ldID0gYXZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaSBleGlzdHMgaW4gQyBhbHJlYWR5XG4gICAgICAgIHhbaV0gPSBpbnZlcnNlID8gZihhdmFsdWVzW2tdLCB4W2ldKSA6IGYoeFtpXSwgYXZhbHVlc1trXSk7IC8vIGZ1bmN0aW9uIHdhcyBjYWxsZWQgb24gY3VycmVudCByb3dcblxuICAgICAgICB1W2ldID0gbWFyaztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gdmFsdWVzIGluIGpcbiAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gcm93XG4gICAgICBpID0gYWluZGV4W2tdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqXG5cbiAgICAgIGlmICh3W2ldICE9PSBtYXJrKSB7XG4gICAgICAgIC8vIGkgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgd1tpXSA9IG1hcms7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQ1xuXG4gICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaW5kaWNhdGUgZnVuY3Rpb24gd2FzIGNhbGxlZCBvbiBjdXJyZW50IHJvd1xuICAgICAgICB1W2ldID0gbWFyaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGxleEVxdWFscyA9IGNvbXBsZXhFcXVhbHM7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4vbnVtYmVyXCIpO1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0d28gY29tcGxleCB2YWx1ZXMgYXJlIGVxdWFsIHByb3ZpZGVkIGEgZ2l2ZW4gZXBzaWxvbi5cbiAqIERvZXMgbm90IHVzZSBvciBjaGFuZ2UgdGhlIGdsb2JhbCBDb21wbGV4LkVQU0lMT04gc2V0dGluZ1xuICogQHBhcmFtIHtDb21wbGV4fSB4XG4gKiBAcGFyYW0ge0NvbXBsZXh9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBlcHNpbG9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29tcGxleEVxdWFscyh4LCB5LCBlcHNpbG9uKSB7XG4gIHJldHVybiAoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeC5yZSwgeS5yZSwgZXBzaWxvbikgJiYgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHguaW0sIHkuaW0sIGVwc2lsb24pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRTYWZlUHJvcGVydHkgPSBnZXRTYWZlUHJvcGVydHk7XG5leHBvcnRzLnNldFNhZmVQcm9wZXJ0eSA9IHNldFNhZmVQcm9wZXJ0eTtcbmV4cG9ydHMuaXNTYWZlUHJvcGVydHkgPSBpc1NhZmVQcm9wZXJ0eTtcbmV4cG9ydHMudmFsaWRhdGVTYWZlTWV0aG9kID0gdmFsaWRhdGVTYWZlTWV0aG9kO1xuZXhwb3J0cy5pc1NhZmVNZXRob2QgPSBpc1NhZmVNZXRob2Q7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIEdldCBhIHByb3BlcnR5IG9mIGEgcGxhaW4gb2JqZWN0XG4gKiBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSB0aGUgb2JqZWN0IGlzIG5vdCBhIHBsYWluIG9iamVjdCBvciB0aGVcbiAqIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBvYmplY3QgaXRzZWxmXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcFxuICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgd2hlbiBzYWZlXG4gKi9cbmZ1bmN0aW9uIGdldFNhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApIHtcbiAgLy8gb25seSBhbGxvdyBnZXR0aW5nIHNhZmUgcHJvcGVydGllcyBvZiBhIHBsYWluIG9iamVjdFxuICBpZiAoaXNQbGFpbk9iamVjdChvYmplY3QpICYmIGlzU2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCkpIHtcbiAgICByZXR1cm4gb2JqZWN0W3Byb3BdO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmplY3RbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgaXNTYWZlTWV0aG9kKG9iamVjdCwgcHJvcCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgbWV0aG9kIFwiJyArIHByb3AgKyAnXCIgYXMgYSBwcm9wZXJ0eScpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG8gcHJvcGVydHkgXCInICsgcHJvcCArICdcIicpO1xufVxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSBvbiBhIHBsYWluIG9iamVjdC5cbiAqIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIHRoZSBvYmplY3QgaXMgbm90IGEgcGxhaW4gb2JqZWN0IG9yIHRoZVxuICogcHJvcGVydHkgd291bGQgb3ZlcnJpZGUgYW4gaW5oZXJpdGVkIHByb3BlcnR5IGxpa2UgLmNvbnN0cnVjdG9yIG9yIC50b1N0cmluZ1xuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHZhbHVlXG4gKi9cbi8vIFRPRE86IG1lcmdlIHRoaXMgZnVuY3Rpb24gaW50byBhY2Nlc3MuanM/XG5cblxuZnVuY3Rpb24gc2V0U2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCwgdmFsdWUpIHtcbiAgLy8gb25seSBhbGxvdyBzZXR0aW5nIHNhZmUgcHJvcGVydGllcyBvZiBhIHBsYWluIG9iamVjdFxuICBpZiAoaXNQbGFpbk9iamVjdChvYmplY3QpICYmIGlzU2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCkpIHtcbiAgICBvYmplY3RbcHJvcF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSBcIicgKyBwcm9wICsgJ1wiJyk7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIHByb3BlcnR5IGlzIHNhZmUgdG8gdXNlIGZvciBhbiBvYmplY3QuXG4gKiBGb3IgZXhhbXBsZSAudG9TdHJpbmcgYW5kIC5jb25zdHJ1Y3RvciBhcmUgbm90IHNhZmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBzYWZlXG4gKi9cblxuXG5mdW5jdGlvbiBpc1NhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApIHtcbiAgaWYgKCFvYmplY3QgfHwgX3R5cGVvZihvYmplY3QpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBTQUZFOiB3aGl0ZWxpc3RlZFxuICAvLyBlLmcgbGVuZ3RoXG5cblxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHNhZmVOYXRpdmVQcm9wZXJ0aWVzLCBwcm9wKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gT2JqZWN0IHByb3RvdHlwZVxuICAvLyBlLmcgY29uc3RydWN0b3JcblxuXG4gIGlmIChwcm9wIGluIE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAvLyAnaW4nIGlzIHVzZWQgaW5zdGVhZCBvZiBoYXNPd25Qcm9wZXJ0eSBmb3Igbm9kZWpzIHYwLjEwXG4gICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZVxuICAgIC8vIGhlcmUgYmVjYXVzZSBPYmplY3QucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVU5TQUZFOiBpbmhlcml0ZWQgZnJvbSBGdW5jdGlvbiBwcm90b3R5cGVcbiAgLy8gZS5nIGNhbGwsIGFwcGx5XG5cblxuICBpZiAocHJvcCBpbiBGdW5jdGlvbi5wcm90b3R5cGUpIHtcbiAgICAvLyAnaW4nIGlzIHVzZWQgaW5zdGVhZCBvZiBoYXNPd25Qcm9wZXJ0eSBmb3Igbm9kZWpzIHYwLjEwXG4gICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZVxuICAgIC8vIGhlcmUgYmVjYXVzZSBGdW5jdGlvbi5wcm90b3R5cGUgaXMgYSByb290IG9iamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBWYWxpZGF0ZSB3aGV0aGVyIGEgbWV0aG9kIGlzIHNhZmUuXG4gKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGF0J3Mgbm90IHRoZSBjYXNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICovXG4vLyBUT0RPOiBtZXJnZSB0aGlzIGZ1bmN0aW9uIGludG8gYXNzaWduLmpzP1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2FmZU1ldGhvZChvYmplY3QsIG1ldGhvZCkge1xuICBpZiAoIWlzU2FmZU1ldGhvZChvYmplY3QsIG1ldGhvZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBtZXRob2QgXCInICsgbWV0aG9kICsgJ1wiJyk7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIG1ldGhvZCBpcyBzYWZlLlxuICogVGhyb3dzIGFuIGVycm9yIHdoZW4gdGhhdCdzIG5vdCB0aGUgY2FzZSAoZm9yIGV4YW1wbGUgZm9yIGBjb25zdHJ1Y3RvcmApLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gc2FmZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cblxuXG5mdW5jdGlvbiBpc1NhZmVNZXRob2Qob2JqZWN0LCBtZXRob2QpIHtcbiAgaWYgKG9iamVjdCA9PT0gbnVsbCB8fCBvYmplY3QgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb2JqZWN0W21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVU5TQUZFOiBnaG9zdGVkXG4gIC8vIGUuZyBvdmVycmlkZGVuIHRvU3RyaW5nXG4gIC8vIE5vdGUgdGhhdCBJRTEwIGRvZXNuJ3Qgc3VwcG9ydCBfX3Byb3RvX18gYW5kIHdlIGNhbid0IGRvIHRoaXMgY2hlY2sgdGhlcmUuXG5cblxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9iamVjdCwgbWV0aG9kKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgbWV0aG9kIGluIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFNBRkU6IHdoaXRlbGlzdGVkXG4gIC8vIGUuZyB0b1N0cmluZ1xuXG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzYWZlTmF0aXZlTWV0aG9kcywgbWV0aG9kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gT2JqZWN0IHByb3RvdHlwZVxuICAvLyBlLmcgY29uc3RydWN0b3JcblxuXG4gIGlmIChtZXRob2QgaW4gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIC8vICdpbicgaXMgdXNlZCBpbnN0ZWFkIG9mIGhhc093blByb3BlcnR5IGZvciBub2RlanMgdjAuMTBcbiAgICAvLyB3aGljaCBpcyBpbmNvbnNpc3RlbnQgb24gcm9vdCBwcm90b3R5cGVzLiBJdCBpcyBzYWZlXG4gICAgLy8gaGVyZSBiZWNhdXNlIE9iamVjdC5wcm90b3R5cGUgaXMgYSByb290IG9iamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBVTlNBRkU6IGluaGVyaXRlZCBmcm9tIEZ1bmN0aW9uIHByb3RvdHlwZVxuICAvLyBlLmcgY2FsbCwgYXBwbHlcblxuXG4gIGlmIChtZXRob2QgaW4gRnVuY3Rpb24ucHJvdG90eXBlKSB7XG4gICAgLy8gJ2luJyBpcyB1c2VkIGluc3RlYWQgb2YgaGFzT3duUHJvcGVydHkgZm9yIG5vZGVqcyB2MC4xMFxuICAgIC8vIHdoaWNoIGlzIGluY29uc2lzdGVudCBvbiByb290IHByb3RvdHlwZXMuIEl0IGlzIHNhZmVcbiAgICAvLyBoZXJlIGJlY2F1c2UgRnVuY3Rpb24ucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuIF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufVxuXG52YXIgc2FmZU5hdGl2ZVByb3BlcnRpZXMgPSB7XG4gIGxlbmd0aDogdHJ1ZSxcbiAgbmFtZTogdHJ1ZVxufTtcbnZhciBzYWZlTmF0aXZlTWV0aG9kcyA9IHtcbiAgdG9TdHJpbmc6IHRydWUsXG4gIHZhbHVlT2Y6IHRydWUsXG4gIHRvTG9jYWxlU3RyaW5nOiB0cnVlXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taXhpbiA9IG1peGluO1xuXG52YXIgX3RpbnlFbWl0dGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwidGlueS1lbWl0dGVyXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qKlxuICogRXh0ZW5kIGdpdmVuIG9iamVjdCB3aXRoIGVtaXR0ZXIgZnVuY3Rpb25zIGBvbmAsIGBvZmZgLCBgb25jZWAsIGBlbWl0YFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7T2JqZWN0fSBvYmpcbiAqL1xuZnVuY3Rpb24gbWl4aW4ob2JqKSB7XG4gIC8vIGNyZWF0ZSBldmVudCBlbWl0dGVyXG4gIHZhciBlbWl0dGVyID0gbmV3IF90aW55RW1pdHRlcltcImRlZmF1bHRcIl0oKTsgLy8gYmluZCBtZXRob2RzIHRvIG9iaiAod2UgZG9uJ3Qgd2FudCB0byBleHBvc2UgdGhlIGVtaXR0ZXIuZSBBcnJheS4uLilcblxuICBvYmoub24gPSBlbWl0dGVyLm9uLmJpbmQoZW1pdHRlcik7XG4gIG9iai5vZmYgPSBlbWl0dGVyLm9mZi5iaW5kKGVtaXR0ZXIpO1xuICBvYmoub25jZSA9IGVtaXR0ZXIub25jZS5iaW5kKGVtaXR0ZXIpO1xuICBvYmouZW1pdCA9IGVtaXR0ZXIuZW1pdC5iaW5kKGVtaXR0ZXIpO1xuICByZXR1cm4gb2JqO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mYWN0b3J5ID0gZmFjdG9yeTtcbmV4cG9ydHMuc29ydEZhY3RvcmllcyA9IHNvcnRGYWN0b3JpZXM7XG5leHBvcnRzLmNyZWF0ZSA9IGNyZWF0ZTtcbmV4cG9ydHMuaXNGYWN0b3J5ID0gaXNGYWN0b3J5O1xuZXhwb3J0cy5hc3NlcnREZXBlbmRlbmNpZXMgPSBhc3NlcnREZXBlbmRlbmNpZXM7XG5leHBvcnRzLmlzT3B0aW9uYWxEZXBlbmRlbmN5ID0gaXNPcHRpb25hbERlcGVuZGVuY3k7XG5leHBvcnRzLnN0cmlwT3B0aW9uYWxOb3RhdGlvbiA9IHN0cmlwT3B0aW9uYWxOb3RhdGlvbjtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBmYWN0b3J5IGZ1bmN0aW9uLCB3aGljaCBjYW4gYmUgdXNlZCB0byBpbmplY3QgZGVwZW5kZW5jaWVzLlxuICpcbiAqIFRoZSBjcmVhdGVkIGZ1bmN0aW9ucyBhcmUgbWVtb2l6ZWQsIGEgY29uc2VjdXRpdmUgY2FsbCBvZiB0aGUgZmFjdG9yeVxuICogd2l0aCB0aGUgZXhhY3Qgc2FtZSBpbnB1dHMgd2lsbCByZXR1cm4gdGhlIHNhbWUgZnVuY3Rpb24gaW5zdGFuY2UuXG4gKiBUaGUgbWVtb2l6ZWQgY2FjaGUgaXMgZXhwb3NlZCBvbiBgZmFjdG9yeS5jYWNoZWAgYW5kIGNhbiBiZSBjbGVhcmVkXG4gKiBpZiBuZWVkZWQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgY29uc3QgbmFtZSA9ICdsb2cnXG4gKiAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZGl2aWRlU2NhbGFyJywgJ0NvbXBsZXgnXVxuICpcbiAqICAgICBleHBvcnQgY29uc3QgY3JlYXRlTG9nID0gZmFjdG9yeShuYW1lLCBkZXBlbmRlbmNpZXMsICh7IHR5cGVkLCBjb25maWcsIGRpdmlkZVNjYWxhciwgQ29tcGxleCB9KSA9PiB7XG4gKiAgICAgICAvLyAuLi4gY3JlYXRlIHRoZSBmdW5jdGlvbiBsb2cgaGVyZSBhbmQgcmV0dXJuIGl0XG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICBOYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZXBlbmRlbmNpZXMgVGhlIG5hbWVzIG9mIGFsbCByZXF1aXJlZCBkZXBlbmRlbmNpZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNyZWF0ZSAgICAgICBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2l0aCBhbiBvYmplY3Qgd2l0aCBhbGwgZGVwZW5kZW5jaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW21ldGFdICAgICAgICAgT3B0aW9uYWwgb2JqZWN0IHdpdGggbWV0YSBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXR0YWNoZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3JlYXRlZCBmYWN0b3J5IGZ1bmN0aW9uIGFzIHByb3BlcnR5IGBtZXRhYC5cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZmFjdG9yeShuYW1lLCBkZXBlbmRlbmNpZXMsIGNyZWF0ZSwgbWV0YSkge1xuICBmdW5jdGlvbiBhc3NlcnRBbmRDcmVhdGUoc2NvcGUpIHtcbiAgICAvLyB3ZSBvbmx5IHBhc3MgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmNpZXMgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb25cbiAgICAvLyB0byBwcmV2ZW50IGZ1bmN0aW9ucyB0byByZWx5IG9uIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgZXhwbGljaXRseVxuICAgIC8vIHJlcXVlc3RlZC5cbiAgICB2YXIgZGVwcyA9ICgwLCBfb2JqZWN0LnBpY2tTaGFsbG93KShzY29wZSwgZGVwZW5kZW5jaWVzLm1hcChzdHJpcE9wdGlvbmFsTm90YXRpb24pKTtcbiAgICBhc3NlcnREZXBlbmRlbmNpZXMobmFtZSwgZGVwZW5kZW5jaWVzLCBzY29wZSk7XG4gICAgcmV0dXJuIGNyZWF0ZShkZXBzKTtcbiAgfVxuXG4gIGFzc2VydEFuZENyZWF0ZS5pc0ZhY3RvcnkgPSB0cnVlO1xuICBhc3NlcnRBbmRDcmVhdGUuZm4gPSBuYW1lO1xuICBhc3NlcnRBbmRDcmVhdGUuZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLnNsaWNlKCkuc29ydCgpO1xuXG4gIGlmIChtZXRhKSB7XG4gICAgYXNzZXJ0QW5kQ3JlYXRlLm1ldGEgPSBtZXRhO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydEFuZENyZWF0ZTtcbn1cbi8qKlxuICogU29ydCBhbGwgZmFjdG9yaWVzIHN1Y2ggdGhhdCB3aGVuIGxvYWRpbmcgaW4gb3JkZXIsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJlc29sdmVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGZhY3Rvcmllc1xuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggdGhlIHNvcnRlZCBmYWN0b3JpZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBzb3J0RmFjdG9yaWVzKGZhY3Rvcmllcykge1xuICB2YXIgZmFjdG9yaWVzQnlOYW1lID0ge307XG4gIGZhY3Rvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgZmFjdG9yaWVzQnlOYW1lW2ZhY3RvcnkuZm5dID0gZmFjdG9yeTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gY29udGFpbnNEZXBlbmRlbmN5KGZhY3RvcnksIGRlcGVuZGVuY3kpIHtcbiAgICAvLyBUT0RPOiBkZXRlY3QgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgIGlmIChpc0ZhY3RvcnkoZmFjdG9yeSkpIHtcbiAgICAgIGlmICgoMCwgX2FycmF5LmNvbnRhaW5zKShmYWN0b3J5LmRlcGVuZGVuY2llcywgZGVwZW5kZW5jeS5mbiB8fCBkZXBlbmRlbmN5Lm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmFjdG9yeS5kZXBlbmRlbmNpZXMuc29tZShmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gY29udGFpbnNEZXBlbmRlbmN5KGZhY3Rvcmllc0J5TmFtZVtkXSwgZGVwZW5kZW5jeSk7XG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgc29ydGVkID0gW107XG5cbiAgZnVuY3Rpb24gYWRkRmFjdG9yeShmYWN0b3J5KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IHNvcnRlZC5sZW5ndGggJiYgIWNvbnRhaW5zRGVwZW5kZW5jeShzb3J0ZWRbaW5kZXhdLCBmYWN0b3J5KSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBzb3J0ZWQuc3BsaWNlKGluZGV4LCAwLCBmYWN0b3J5KTtcbiAgfSAvLyBzb3J0IHJlZ3VsYXIgZmFjdG9yeSBmdW5jdGlvbnNcblxuXG4gIGZhY3Rvcmllcy5maWx0ZXIoaXNGYWN0b3J5KS5mb3JFYWNoKGFkZEZhY3RvcnkpOyAvLyBzb3J0IGxlZ2FjeSBmYWN0b3J5IGZ1bmN0aW9ucyBBRlRFUiB0aGUgcmVndWxhciBmYWN0b3J5IGZ1bmN0aW9uc1xuXG4gIGZhY3Rvcmllcy5maWx0ZXIoZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gIWlzRmFjdG9yeShmYWN0b3J5KTtcbiAgfSkuZm9yRWFjaChhZGRGYWN0b3J5KTtcbiAgcmV0dXJuIHNvcnRlZDtcbn0gLy8gVE9ETzogY29tbWVudCBvciBjbGVhbnVwIGlmIHVudXNlZCBpbiB0aGUgZW5kXG5cblxuZnVuY3Rpb24gY3JlYXRlKGZhY3Rvcmllcykge1xuICB2YXIgc2NvcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBzb3J0RmFjdG9yaWVzKGZhY3RvcmllcykuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5KHNjb3BlKTtcbiAgfSk7XG4gIHJldHVybiBzY29wZTtcbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIGZhY3RvcnkuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBpdCBoYXNcbiAqIHByb3BlcnRpZXMgbmFtZSwgZGVwZW5kZW5jaWVzLCBhbmQgYSBmdW5jdGlvbiBjcmVhdGUuXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhY3Rvcnkob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouZm4gPT09ICdzdHJpbmcnICYmIEFycmF5LmlzQXJyYXkob2JqLmRlcGVuZGVuY2llcyk7XG59XG4vKipcbiAqIEFzc2VydCB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgb2YgYSBsaXN0IHdpdGggZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHByb3ZpZGVkIHNjb3BlLlxuICpcbiAqIFdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBtaXNzaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgTmFtZSBmb3IgdGhlIGZ1bmN0aW9uIHRvIGJlIGNyZWF0ZWQuIFVzZWQgdG8gZ2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVwZW5kZW5jaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gc2NvcGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGFzc2VydERlcGVuZGVuY2llcyhuYW1lLCBkZXBlbmRlbmNpZXMsIHNjb3BlKSB7XG4gIHZhciBhbGxEZWZpbmVkID0gZGVwZW5kZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgIHJldHVybiAhaXNPcHRpb25hbERlcGVuZGVuY3koZGVwZW5kZW5jeSk7XG4gIH0pIC8vIGZpbHRlciBvcHRpb25hbHNcbiAgLmV2ZXJ5KGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7XG4gICAgcmV0dXJuIHNjb3BlW2RlcGVuZGVuY3ldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGlmICghYWxsRGVmaW5lZCkge1xuICAgIHZhciBtaXNzaW5nRGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgICAgcmV0dXJuIHNjb3BlW2RlcGVuZGVuY3ldID09PSB1bmRlZmluZWQ7XG4gICAgfSk7IC8vIFRPRE86IGNyZWF0ZSBhIGN1c3RvbSBlcnJvciBjbGFzcyBmb3IgdGhpcywgYSBNYXRoanNFcnJvciBvciBzb21ldGhpbmcgbGlrZSB0aGF0XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGZ1bmN0aW9uIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiLCBcIikgKyBcInNvbWUgZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nOiBcIi5jb25jYXQobWlzc2luZ0RlcGVuZGVuY2llcy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQoZCwgXCJcXFwiXCIpO1xuICAgIH0pLmpvaW4oJywgJyksIFwiLlwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNPcHRpb25hbERlcGVuZGVuY3koZGVwZW5kZW5jeSkge1xuICByZXR1cm4gZGVwZW5kZW5jeSAmJiBkZXBlbmRlbmN5WzBdID09PSAnPyc7XG59XG5cbmZ1bmN0aW9uIHN0cmlwT3B0aW9uYWxOb3RhdGlvbihkZXBlbmRlbmN5KSB7XG4gIHJldHVybiBkZXBlbmRlbmN5ICYmIGRlcGVuZGVuY3lbMF0gPT09ICc/JyA/IGRlcGVuZGVuY3kuc2xpY2UoMSkgOiBkZXBlbmRlbmN5O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZW1vaXplID0gbWVtb2l6ZTtcbmV4cG9ydHMubWVtb2l6ZUNvbXBhcmUgPSBtZW1vaXplQ29tcGFyZTtcbmV4cG9ydHMubWF4QXJndW1lbnRDb3VudCA9IG1heEFyZ3VtZW50Q291bnQ7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLy8gZnVuY3Rpb24gdXRpbHNcblxuLyoqXG4gKiBNZW1vaXplIGEgZ2l2ZW4gZnVuY3Rpb24gYnkgY2FjaGluZyB0aGUgY29tcHV0ZWQgcmVzdWx0LlxuICogVGhlIGNhY2hlIG9mIGEgbWVtb2l6ZWQgZnVuY3Rpb24gY2FuIGJlIGNsZWFyZWQgYnkgZGVsZXRpbmcgdGhlIGBjYWNoZWBcbiAqIHByb3BlcnR5IG9mIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiB0byBiZSBtZW1vaXplZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBhIHB1cmUgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKGFyZ3M6IEFycmF5KX0gW2hhc2hlcl0gIEEgY3VzdG9tIGhhc2ggYnVpbGRlci5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXMgSlNPTi5zdHJpbmdpZnkgYnkgZGVmYXVsdC5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmbiwgaGFzaGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vaXplKCkge1xuICAgIGlmIChfdHlwZW9mKG1lbW9pemUuY2FjaGUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICB2YXIgaGFzaCA9IGhhc2hlciA/IGhhc2hlcihhcmdzKSA6IEpTT04uc3RyaW5naWZ5KGFyZ3MpO1xuXG4gICAgaWYgKCEoaGFzaCBpbiBtZW1vaXplLmNhY2hlKSkge1xuICAgICAgbWVtb2l6ZS5jYWNoZVtoYXNoXSA9IGZuLmFwcGx5KGZuLCBhcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVtb2l6ZS5jYWNoZVtoYXNoXTtcbiAgfTtcbn1cbi8qKlxuICogTWVtb2l6ZSBhIGdpdmVuIGZ1bmN0aW9uIGJ5IGNhY2hpbmcgYWxsIHJlc3VsdHMgYW5kIHRoZSBhcmd1bWVudHMsXG4gKiBhbmQgY29tcGFyaW5nIGFnYWluc3QgdGhlIGFyZ3VtZW50cyBvZiBwcmV2aW91cyByZXN1bHRzIGJlZm9yZVxuICogZXhlY3V0aW5nIGFnYWluLlxuICogVGhpcyBpcyBsZXNzIHBlcmZvcm1hbnQgdGhhbiBgbWVtb2l6ZWAgd2hpY2ggY2FsY3VsYXRlcyBhIGhhc2gsXG4gKiB3aGljaCBpcyB2ZXJ5IGZhc3QgdG8gY29tcGFyZS4gVXNlIGBtZW1vaXplQ29tcGFyZWAgb25seSB3aGVuIGl0IGlzXG4gKiBub3QgcG9zc2libGUgdG8gY3JlYXRlIGEgdW5pcXVlIHNlcmlhbGl6YWJsZSBoYXNoIGZyb20gdGhlIGZ1bmN0aW9uXG4gKiBhcmd1bWVudHMuXG4gKiBUaGUgaXNFcXVhbCBmdW5jdGlvbiBtdXN0IGNvbXBhcmUgdHdvIHNldHMgb2YgYXJndW1lbnRzXG4gKiBhbmQgcmV0dXJuIHRydWUgd2hlbiBlcXVhbCAoY2FuIGJlIGEgZGVlcCBlcXVhbGl0eSBjaGVjayBmb3IgZXhhbXBsZSkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtmdW5jdGlvbihhOiAqLCBiOiAqKSA6IGJvb2xlYW59IGlzRXF1YWxcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIG1lbW9pemVDb21wYXJlKGZuLCBpc0VxdWFsKSB7XG4gIHZhciBtZW1vaXplID0gZnVuY3Rpb24gbWVtb2l6ZSgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBtZW1vaXplLmNhY2hlLmxlbmd0aDsgYysrKSB7XG4gICAgICB2YXIgY2FjaGVkID0gbWVtb2l6ZS5jYWNoZVtjXTtcblxuICAgICAgaWYgKGlzRXF1YWwoYXJncywgY2FjaGVkLmFyZ3MpKSB7XG4gICAgICAgIC8vIFRPRE86IG1vdmUgdGhpcyBjYWNoZSBlbnRyeSB0byB0aGUgdG9wIHNvIHJlY2VudGx5IHVzZWQgZW50cmllcyBtb3ZlIHVwP1xuICAgICAgICByZXR1cm4gY2FjaGVkLnJlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzID0gZm4uYXBwbHkoZm4sIGFyZ3MpO1xuICAgIG1lbW9pemUuY2FjaGUudW5zaGlmdCh7XG4gICAgICBhcmdzOiBhcmdzLFxuICAgICAgcmVzOiByZXNcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIG1lbW9pemUuY2FjaGUgPSBbXTtcbiAgcmV0dXJuIG1lbW9pemU7XG59XG4vKipcbiAqIEZpbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBleHBlY3RlZCBieSBhIHR5cGVkIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gICBBIHR5cGVkIGZ1bmN0aW9uXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGV4cGVjdGVkIGFyZ3VtZW50cy5cbiAqICAgICAgICAgICAgICAgICAgUmV0dXJucyAtMSB3aGVuIG5vIHNpZ25hdHVyZXMgd2hlcmUgZm91bmQgb24gdGhlIGZ1bmN0aW9uLlxuICovXG5cblxuZnVuY3Rpb24gbWF4QXJndW1lbnRDb3VudChmbikge1xuICByZXR1cm4gT2JqZWN0LmtleXMoZm4uc2lnbmF0dXJlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uIChhcmdzLCBzaWduYXR1cmUpIHtcbiAgICB2YXIgY291bnQgPSAoc2lnbmF0dXJlLm1hdGNoKC8sL2cpIHx8IFtdKS5sZW5ndGggKyAxO1xuICAgIHJldHVybiBNYXRoLm1heChhcmdzLCBjb3VudCk7XG4gIH0sIC0xKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcbmV4cG9ydHMuaXNCaWdOdW1iZXIgPSBpc0JpZ051bWJlcjtcbmV4cG9ydHMuaXNDb21wbGV4ID0gaXNDb21wbGV4O1xuZXhwb3J0cy5pc0ZyYWN0aW9uID0gaXNGcmFjdGlvbjtcbmV4cG9ydHMuaXNVbml0ID0gaXNVbml0O1xuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuZXhwb3J0cy5pc01hdHJpeCA9IGlzTWF0cml4O1xuZXhwb3J0cy5pc0NvbGxlY3Rpb24gPSBpc0NvbGxlY3Rpb247XG5leHBvcnRzLmlzRGVuc2VNYXRyaXggPSBpc0RlbnNlTWF0cml4O1xuZXhwb3J0cy5pc1NwYXJzZU1hdHJpeCA9IGlzU3BhcnNlTWF0cml4O1xuZXhwb3J0cy5pc1JhbmdlID0gaXNSYW5nZTtcbmV4cG9ydHMuaXNJbmRleCA9IGlzSW5kZXg7XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcbmV4cG9ydHMuaXNSZXN1bHRTZXQgPSBpc1Jlc3VsdFNldDtcbmV4cG9ydHMuaXNIZWxwID0gaXNIZWxwO1xuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5leHBvcnRzLmlzQWNjZXNzb3JOb2RlID0gaXNBY2Nlc3Nvck5vZGU7XG5leHBvcnRzLmlzQXJyYXlOb2RlID0gaXNBcnJheU5vZGU7XG5leHBvcnRzLmlzQXNzaWdubWVudE5vZGUgPSBpc0Fzc2lnbm1lbnROb2RlO1xuZXhwb3J0cy5pc0Jsb2NrTm9kZSA9IGlzQmxvY2tOb2RlO1xuZXhwb3J0cy5pc0NvbmRpdGlvbmFsTm9kZSA9IGlzQ29uZGl0aW9uYWxOb2RlO1xuZXhwb3J0cy5pc0NvbnN0YW50Tm9kZSA9IGlzQ29uc3RhbnROb2RlO1xuZXhwb3J0cy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGU7XG5leHBvcnRzLmlzRnVuY3Rpb25Ob2RlID0gaXNGdW5jdGlvbk5vZGU7XG5leHBvcnRzLmlzSW5kZXhOb2RlID0gaXNJbmRleE5vZGU7XG5leHBvcnRzLmlzTm9kZSA9IGlzTm9kZTtcbmV4cG9ydHMuaXNPYmplY3ROb2RlID0gaXNPYmplY3ROb2RlO1xuZXhwb3J0cy5pc09wZXJhdG9yTm9kZSA9IGlzT3BlcmF0b3JOb2RlO1xuZXhwb3J0cy5pc1BhcmVudGhlc2lzTm9kZSA9IGlzUGFyZW50aGVzaXNOb2RlO1xuZXhwb3J0cy5pc1JhbmdlTm9kZSA9IGlzUmFuZ2VOb2RlO1xuZXhwb3J0cy5pc1N5bWJvbE5vZGUgPSBpc1N5bWJvbE5vZGU7XG5leHBvcnRzLmlzQ2hhaW4gPSBpc0NoYWluO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG5leHBvcnRzLmlzQXJyYXkgPSB2b2lkIDA7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLy8gdHlwZSBjaGVja3MgZm9yIGFsbCBrbm93biB0eXBlc1xuLy9cbi8vIG5vdGUgdGhhdDpcbi8vXG4vLyAtIGNoZWNrIGJ5IGR1Y2stdHlwaW5nIG9uIGEgcHJvcGVydHkgbGlrZSBgaXNVbml0YCwgaW5zdGVhZCBvZiBjaGVja2luZyBpbnN0YW5jZW9mLlxuLy8gICBpbnN0YW5jZW9mIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgdGhhdCB3b3VsZCBub3QgYWxsb3cgdG8gcGFzcyBkYXRhIGZyb21cbi8vICAgb25lIGluc3RhbmNlIG9mIG1hdGguanMgdG8gYW5vdGhlciBzaW5jZSBlYWNoIGhhcyBpdCdzIG93biBpbnN0YW5jZSBvZiBVbml0LlxuLy8gLSBjaGVjayB0aGUgYGlzVW5pdGAgcHJvcGVydHkgdmlhIHRoZSBjb25zdHJ1Y3Rvciwgc28gdGhlcmUgd2lsbCBiZSBub1xuLy8gICBtYXRjaGVzIGZvciBcImZha2VcIiBpbnN0YW5jZXMgbGlrZSBwbGFpbiBvYmplY3RzIHdpdGggYSBwcm9wZXJ0eSBgaXNVbml0YC5cbi8vICAgVGhhdCBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4vLyAtIEl0IG11c3Qgbm90IGJlIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSB0eXBlIGNoZWNrcyB1c2VkIGludGVybmFsbHksXG4vLyAgIGZvciBzZWN1cml0eSByZWFzb25zLCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBleHBvc2VkIGluIHRoZSBleHByZXNzaW9uXG4vLyAgIHBhcnNlci5cbmZ1bmN0aW9uIGlzTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNCaWdOdW1iZXIoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc0JpZ051bWJlciA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb21wbGV4KHgpIHtcbiAgcmV0dXJuIHggJiYgX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHgpLmlzQ29tcGxleCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNGcmFjdGlvbih4KSB7XG4gIHJldHVybiB4ICYmIF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih4KS5pc0ZyYWN0aW9uID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1VuaXQoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1VuaXQgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJztcbn1cblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNNYXRyaXgoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBjb2xsZWN0aW9uOiBhbiBBcnJheSBvciBNYXRyaXhcbiAqIEBwYXJhbSB7Kn0geFxuICogQHJldHVybnMge2Jvb2xlYW59IGlzQ29sbGVjdGlvblxuICovXG5cblxuZnVuY3Rpb24gaXNDb2xsZWN0aW9uKHgpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeCkgfHwgaXNNYXRyaXgoeCk7XG59XG5cbmZ1bmN0aW9uIGlzRGVuc2VNYXRyaXgoeCkge1xuICByZXR1cm4geCAmJiB4LmlzRGVuc2VNYXRyaXggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNNYXRyaXggPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU3BhcnNlTWF0cml4KHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc1NwYXJzZU1hdHJpeCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNSYW5nZSh4KSB7XG4gIHJldHVybiB4ICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzUmFuZ2UgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzSW5kZXgoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc0luZGV4ID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdib29sZWFuJztcbn1cblxuZnVuY3Rpb24gaXNSZXN1bHRTZXQoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1Jlc3VsdFNldCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNIZWxwKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNIZWxwID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUoeCkge1xuICByZXR1cm4geCBpbnN0YW5jZW9mIERhdGU7XG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHgpIHtcbiAgcmV0dXJuIHggaW5zdGFuY2VvZiBSZWdFeHA7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHgpIHtcbiAgcmV0dXJuICEhKHggJiYgX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0ICYmICFpc0NvbXBsZXgoeCkgJiYgIWlzRnJhY3Rpb24oeCkpO1xufVxuXG5mdW5jdGlvbiBpc051bGwoeCkge1xuICByZXR1cm4geCA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoeCkge1xuICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0FjY2Vzc29yTm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNBY2Nlc3Nvck5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNBcnJheU5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Fzc2lnbm1lbnROb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0Fzc2lnbm1lbnROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCbG9ja05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQmxvY2tOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb25kaXRpb25hbE5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQ29uZGl0aW9uYWxOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb25zdGFudE5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQ29uc3RhbnROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uTm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNGdW5jdGlvbk5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0luZGV4Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNJbmRleE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNPYmplY3ROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNPcGVyYXRvck5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzT3BlcmF0b3JOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNQYXJlbnRoZXNpc05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzUGFyZW50aGVzaXNOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNSYW5nZU5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzUmFuZ2VOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNTeW1ib2xOb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc1N5bWJvbE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0NoYWluKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNDaGFpbiA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHgpIHtcbiAgdmFyIHQgPSBfdHlwZW9mKHgpO1xuXG4gIGlmICh0ID09PSAnb2JqZWN0Jykge1xuICAgIC8vIEphdmFTY3JpcHQgdHlwZXNcbiAgICBpZiAoeCA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkgcmV0dXJuICdBcnJheSc7XG4gICAgaWYgKHggaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ0RhdGUnO1xuICAgIGlmICh4IGluc3RhbmNlb2YgUmVnRXhwKSByZXR1cm4gJ1JlZ0V4cCc7IC8vIG1hdGguanMgdHlwZXNcblxuICAgIGlmIChpc0JpZ051bWJlcih4KSkgcmV0dXJuICdCaWdOdW1iZXInO1xuICAgIGlmIChpc0NvbXBsZXgoeCkpIHJldHVybiAnQ29tcGxleCc7XG4gICAgaWYgKGlzRnJhY3Rpb24oeCkpIHJldHVybiAnRnJhY3Rpb24nO1xuICAgIGlmIChpc01hdHJpeCh4KSkgcmV0dXJuICdNYXRyaXgnO1xuICAgIGlmIChpc1VuaXQoeCkpIHJldHVybiAnVW5pdCc7XG4gICAgaWYgKGlzSW5kZXgoeCkpIHJldHVybiAnSW5kZXgnO1xuICAgIGlmIChpc1JhbmdlKHgpKSByZXR1cm4gJ1JhbmdlJztcbiAgICBpZiAoaXNSZXN1bHRTZXQoeCkpIHJldHVybiAnUmVzdWx0U2V0JztcbiAgICBpZiAoaXNOb2RlKHgpKSByZXR1cm4geC50eXBlO1xuICAgIGlmIChpc0NoYWluKHgpKSByZXR1cm4gJ0NoYWluJztcbiAgICBpZiAoaXNIZWxwKHgpKSByZXR1cm4gJ0hlbHAnO1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxuXG4gIGlmICh0ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gJ0Z1bmN0aW9uJztcbiAgcmV0dXJuIHQ7IC8vIGNhbiBiZSAnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJywgLi4uXG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVzY2FwZUxhdGV4ID0gZXNjYXBlTGF0ZXg7XG5leHBvcnRzLnRvU3ltYm9sID0gdG9TeW1ib2w7XG5leHBvcnRzLmRlZmF1bHRUZW1wbGF0ZSA9IGV4cG9ydHMubGF0ZXhGdW5jdGlvbnMgPSBleHBvcnRzLmxhdGV4T3BlcmF0b3JzID0gZXhwb3J0cy5sYXRleFN5bWJvbHMgPSB2b2lkIDA7XG5cbnZhciBfZXNjYXBlTGF0ZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJlc2NhcGUtbGF0ZXhcIikpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qIGVzbGludCBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmc6IFwib2ZmXCIgKi9cbnZhciBsYXRleFN5bWJvbHMgPSB7XG4gIC8vIEdSRUVLIExFVFRFUlNcbiAgQWxwaGE6ICdBJyxcbiAgYWxwaGE6ICdcXFxcYWxwaGEnLFxuICBCZXRhOiAnQicsXG4gIGJldGE6ICdcXFxcYmV0YScsXG4gIEdhbW1hOiAnXFxcXEdhbW1hJyxcbiAgZ2FtbWE6ICdcXFxcZ2FtbWEnLFxuICBEZWx0YTogJ1xcXFxEZWx0YScsXG4gIGRlbHRhOiAnXFxcXGRlbHRhJyxcbiAgRXBzaWxvbjogJ0UnLFxuICBlcHNpbG9uOiAnXFxcXGVwc2lsb24nLFxuICB2YXJlcHNpbG9uOiAnXFxcXHZhcmVwc2lsb24nLFxuICBaZXRhOiAnWicsXG4gIHpldGE6ICdcXFxcemV0YScsXG4gIEV0YTogJ0gnLFxuICBldGE6ICdcXFxcZXRhJyxcbiAgVGhldGE6ICdcXFxcVGhldGEnLFxuICB0aGV0YTogJ1xcXFx0aGV0YScsXG4gIHZhcnRoZXRhOiAnXFxcXHZhcnRoZXRhJyxcbiAgSW90YTogJ0knLFxuICBpb3RhOiAnXFxcXGlvdGEnLFxuICBLYXBwYTogJ0snLFxuICBrYXBwYTogJ1xcXFxrYXBwYScsXG4gIHZhcmthcHBhOiAnXFxcXHZhcmthcHBhJyxcbiAgTGFtYmRhOiAnXFxcXExhbWJkYScsXG4gIGxhbWJkYTogJ1xcXFxsYW1iZGEnLFxuICBNdTogJ00nLFxuICBtdTogJ1xcXFxtdScsXG4gIE51OiAnTicsXG4gIG51OiAnXFxcXG51JyxcbiAgWGk6ICdcXFxcWGknLFxuICB4aTogJ1xcXFx4aScsXG4gIE9taWNyb246ICdPJyxcbiAgb21pY3JvbjogJ28nLFxuICBQaTogJ1xcXFxQaScsXG4gIHBpOiAnXFxcXHBpJyxcbiAgdmFycGk6ICdcXFxcdmFycGknLFxuICBSaG86ICdQJyxcbiAgcmhvOiAnXFxcXHJobycsXG4gIHZhcnJobzogJ1xcXFx2YXJyaG8nLFxuICBTaWdtYTogJ1xcXFxTaWdtYScsXG4gIHNpZ21hOiAnXFxcXHNpZ21hJyxcbiAgdmFyc2lnbWE6ICdcXFxcdmFyc2lnbWEnLFxuICBUYXU6ICdUJyxcbiAgdGF1OiAnXFxcXHRhdScsXG4gIFVwc2lsb246IFwiXFxcXFVwc2lsb25cIixcbiAgdXBzaWxvbjogXCJcXFxcdXBzaWxvblwiLFxuICBQaGk6ICdcXFxcUGhpJyxcbiAgcGhpOiAnXFxcXHBoaScsXG4gIHZhcnBoaTogJ1xcXFx2YXJwaGknLFxuICBDaGk6ICdYJyxcbiAgY2hpOiAnXFxcXGNoaScsXG4gIFBzaTogJ1xcXFxQc2knLFxuICBwc2k6ICdcXFxccHNpJyxcbiAgT21lZ2E6ICdcXFxcT21lZ2EnLFxuICBvbWVnYTogJ1xcXFxvbWVnYScsXG4gIC8vIGxvZ2ljXG4gIFwidHJ1ZVwiOiAnXFxcXG1hdGhybXtUcnVlfScsXG4gIFwiZmFsc2VcIjogJ1xcXFxtYXRocm17RmFsc2V9JyxcbiAgLy8gb3RoZXJcbiAgaTogJ2knLFxuICAvLyBUT0RPIHVzZSBcXGkgPz9cbiAgaW5mOiAnXFxcXGluZnR5JyxcbiAgSW5mOiAnXFxcXGluZnR5JyxcbiAgaW5maW5pdHk6ICdcXFxcaW5mdHknLFxuICBJbmZpbml0eTogJ1xcXFxpbmZ0eScsXG4gIG9vOiAnXFxcXGluZnR5JyxcbiAgbGltOiAnXFxcXGxpbScsXG4gIHVuZGVmaW5lZDogJ1xcXFxtYXRoYmZ7P30nXG59O1xuZXhwb3J0cy5sYXRleFN5bWJvbHMgPSBsYXRleFN5bWJvbHM7XG52YXIgbGF0ZXhPcGVyYXRvcnMgPSB7XG4gIHRyYW5zcG9zZTogJ15cXFxcdG9wJyxcbiAgY3RyYW5zcG9zZTogJ15IJyxcbiAgZmFjdG9yaWFsOiAnIScsXG4gIHBvdzogJ14nLFxuICBkb3RQb3c6ICcuXlxcXFx3ZWRnZScsXG4gIC8vIFRPRE8gZmluZCBpZGVhbCBzb2x1dGlvblxuICB1bmFyeVBsdXM6ICcrJyxcbiAgdW5hcnlNaW51czogJy0nLFxuICBiaXROb3Q6ICdcXFxcficsXG4gIC8vIFRPRE8gZmluZCBpZGVhbCBzb2x1dGlvblxuICBub3Q6ICdcXFxcbmVnJyxcbiAgbXVsdGlwbHk6ICdcXFxcY2RvdCcsXG4gIGRpdmlkZTogJ1xcXFxmcmFjJyxcbiAgLy8gVE9ETyBob3cgdG8gaGFuZGxlIHRoYXQgcHJvcGVybHk/XG4gIGRvdE11bHRpcGx5OiAnLlxcXFxjZG90JyxcbiAgLy8gVE9ETyBmaW5kIGlkZWFsIHNvbHV0aW9uXG4gIGRvdERpdmlkZTogJy46JyxcbiAgLy8gVE9ETyBmaW5kIGlkZWFsIHNvbHV0aW9uXG4gIG1vZDogJ1xcXFxtb2QnLFxuICBhZGQ6ICcrJyxcbiAgc3VidHJhY3Q6ICctJyxcbiAgdG86ICdcXFxccmlnaHRhcnJvdycsXG4gIGxlZnRTaGlmdDogJzw8JyxcbiAgcmlnaHRBcml0aFNoaWZ0OiAnPj4nLFxuICByaWdodExvZ1NoaWZ0OiAnPj4+JyxcbiAgZXF1YWw6ICc9JyxcbiAgdW5lcXVhbDogJ1xcXFxuZXEnLFxuICBzbWFsbGVyOiAnPCcsXG4gIGxhcmdlcjogJz4nLFxuICBzbWFsbGVyRXE6ICdcXFxcbGVxJyxcbiAgbGFyZ2VyRXE6ICdcXFxcZ2VxJyxcbiAgYml0QW5kOiAnXFxcXCYnLFxuICBiaXRYb3I6IFwiXFxcXHVuZGVybGluZXt8fVwiLFxuICBiaXRPcjogJ3wnLFxuICBhbmQ6ICdcXFxcd2VkZ2UnLFxuICB4b3I6ICdcXFxcdmVlYmFyJyxcbiAgb3I6ICdcXFxcdmVlJ1xufTtcbmV4cG9ydHMubGF0ZXhPcGVyYXRvcnMgPSBsYXRleE9wZXJhdG9ycztcbnZhciBsYXRleEZ1bmN0aW9ucyA9IHtcbiAgLy8gYXJpdGhtZXRpY1xuICBhYnM6IHtcbiAgICAxOiAnXFxcXGxlZnR8JHthcmdzWzBdfVxcXFxyaWdodHwnXG4gIH0sXG4gIGFkZDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5hZGQsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgY2JydDoge1xuICAgIDE6ICdcXFxcc3FydFszXXske2FyZ3NbMF19fSdcbiAgfSxcbiAgY2VpbDoge1xuICAgIDE6ICdcXFxcbGVmdFxcXFxsY2VpbCR7YXJnc1swXX1cXFxccmlnaHRcXFxccmNlaWwnXG4gIH0sXG4gIGN1YmU6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCleMydcbiAgfSxcbiAgZGl2aWRlOiB7XG4gICAgMjogJ1xcXFxmcmFjeyR7YXJnc1swXX19eyR7YXJnc1sxXX19J1xuICB9LFxuICBkb3REaXZpZGU6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZG90RGl2aWRlLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGRvdE11bHRpcGx5OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmRvdE11bHRpcGx5LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGRvdFBvdzoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5kb3RQb3csIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgZXhwOiB7XG4gICAgMTogJ1xcXFxleHBcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgZXhwbTE6IFwiXFxcXGxlZnQoZVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5wb3csIFwieyR7YXJnc1swXX19LTFcXFxccmlnaHQpXCIpLFxuICBmaXg6IHtcbiAgICAxOiAnXFxcXG1hdGhybXske25hbWV9fVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBmbG9vcjoge1xuICAgIDE6ICdcXFxcbGVmdFxcXFxsZmxvb3Ike2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJmbG9vcidcbiAgfSxcbiAgZ2NkOiAnXFxcXGdjZFxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJyxcbiAgaHlwb3Q6ICdcXFxcaHlwb3RcXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KScsXG4gIGxvZzoge1xuICAgIDE6ICdcXFxcbG5cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gICAgMjogJ1xcXFxsb2dfeyR7YXJnc1sxXX19XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGxvZzEwOiB7XG4gICAgMTogJ1xcXFxsb2dfezEwfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBsb2cxcDoge1xuICAgIDE6ICdcXFxcbG5cXFxcbGVmdCgke2FyZ3NbMF19KzFcXFxccmlnaHQpJyxcbiAgICAyOiAnXFxcXGxvZ197JHthcmdzWzFdfX1cXFxcbGVmdCgke2FyZ3NbMF19KzFcXFxccmlnaHQpJ1xuICB9LFxuICBsb2cyOiAnXFxcXGxvZ197Mn1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gIG1vZDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5tb2QsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbXVsdGlwbHk6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMubXVsdGlwbHksIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbm9ybToge1xuICAgIDE6ICdcXFxcbGVmdFxcXFx8JHthcmdzWzBdfVxcXFxyaWdodFxcXFx8JyxcbiAgICAyOiB1bmRlZmluZWQgLy8gdXNlIGRlZmF1bHQgdGVtcGxhdGVcblxuICB9LFxuICBudGhSb290OiB7XG4gICAgMjogJ1xcXFxzcXJ0WyR7YXJnc1sxXX1deyR7YXJnc1swXX19J1xuICB9LFxuICBudGhSb290czoge1xuICAgIDI6ICdcXFxce3kgOiAkeV57YXJnc1sxXX0gPSB7JHthcmdzWzBdfX1cXFxcfSdcbiAgfSxcbiAgcG93OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5wb3csIFwieyR7YXJnc1sxXX19XCIpXG4gIH0sXG4gIHJvdW5kOiB7XG4gICAgMTogJ1xcXFxsZWZ0XFxcXGxmbG9vciR7YXJnc1swXX1cXFxccmlnaHRcXFxccmNlaWwnLFxuICAgIDI6IHVuZGVmaW5lZCAvLyB1c2UgZGVmYXVsdCB0ZW1wbGF0ZVxuXG4gIH0sXG4gIHNpZ246IHtcbiAgICAxOiAnXFxcXG1hdGhybXske25hbWV9fVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzcXJ0OiB7XG4gICAgMTogJ1xcXFxzcXJ0eyR7YXJnc1swXX19J1xuICB9LFxuICBzcXVhcmU6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCleMidcbiAgfSxcbiAgc3VidHJhY3Q6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc3VidHJhY3QsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgdW5hcnlNaW51czoge1xuICAgIDE6IFwiXCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnVuYXJ5TWludXMsIFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgdW5hcnlQbHVzOiB7XG4gICAgMTogXCJcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMudW5hcnlQbHVzLCBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIC8vIGJpdHdpc2VcbiAgYml0QW5kOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmJpdEFuZCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBiaXROb3Q6IHtcbiAgICAxOiBsYXRleE9wZXJhdG9ycy5iaXROb3QgKyAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGJpdE9yOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmJpdE9yLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGJpdFhvcjoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5iaXRYb3IsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbGVmdFNoaWZ0OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmxlZnRTaGlmdCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICByaWdodEFyaXRoU2hpZnQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucmlnaHRBcml0aFNoaWZ0LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHJpZ2h0TG9nU2hpZnQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucmlnaHRMb2dTaGlmdCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBjb21iaW5hdG9yaWNzXG4gIGJlbGxOdW1iZXJzOiB7XG4gICAgMTogJ1xcXFxtYXRocm17Qn1feyR7YXJnc1swXX19J1xuICB9LFxuICBjYXRhbGFuOiB7XG4gICAgMTogJ1xcXFxtYXRocm17Q31feyR7YXJnc1swXX19J1xuICB9LFxuICBzdGlybGluZ1MyOiB7XG4gICAgMjogJ1xcXFxtYXRocm17U31cXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gY29tcGxleFxuICBhcmc6IHtcbiAgICAxOiAnXFxcXGFyZ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb25qOiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXionXG4gIH0sXG4gIGltOiB7XG4gICAgMTogJ1xcXFxJbVxcXFxsZWZ0XFxcXGxicmFjZSR7YXJnc1swXX1cXFxccmlnaHRcXFxccmJyYWNlJ1xuICB9LFxuICByZToge1xuICAgIDE6ICdcXFxcUmVcXFxcbGVmdFxcXFxsYnJhY2Uke2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJicmFjZSdcbiAgfSxcbiAgLy8gbG9naWNhbFxuICBhbmQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuYW5kLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIG5vdDoge1xuICAgIDE6IGxhdGV4T3BlcmF0b3JzLm5vdCArICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgb3I6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMub3IsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgeG9yOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnhvciwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBtYXRyaXhcbiAgY3Jvc3M6IHtcbiAgICAyOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcXFxcdGltZXNcXFxcbGVmdCgke2FyZ3NbMV19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3RyYW5zcG9zZToge1xuICAgIDE6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuY3RyYW5zcG9zZSlcbiAgfSxcbiAgZGV0OiB7XG4gICAgMTogJ1xcXFxkZXRcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgZG90OiB7XG4gICAgMjogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxcY2RvdCR7YXJnc1sxXX1cXFxccmlnaHQpJ1xuICB9LFxuICBleHBtOiB7XG4gICAgMTogJ1xcXFxleHBcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgaW52OiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXnstMX0nXG4gIH0sXG4gIHNxcnRtOiB7XG4gICAgMTogXCJ7JHthcmdzWzBdfX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucG93LCBcIntcXFxcZnJhY3sxfXsyfX1cIilcbiAgfSxcbiAgdHJhY2U6IHtcbiAgICAxOiAnXFxcXG1hdGhybXt0cn1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgdHJhbnNwb3NlOiB7XG4gICAgMTogXCJcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy50cmFuc3Bvc2UpXG4gIH0sXG4gIC8vIHByb2JhYmlsaXR5XG4gIGNvbWJpbmF0aW9uczoge1xuICAgIDI6ICdcXFxcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX0nXG4gIH0sXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IHtcbiAgICAyOiAnXFxcXGxlZnQoXFxcXCFcXFxcIXtcXFxcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX19XFxcXCFcXFxcIVxcXFxyaWdodCknXG4gIH0sXG4gIGZhY3RvcmlhbDoge1xuICAgIDE6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZmFjdG9yaWFsKVxuICB9LFxuICBnYW1tYToge1xuICAgIDE6ICdcXFxcR2FtbWFcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gcmVsYXRpb25hbFxuICBlcXVhbDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5lcXVhbCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBsYXJnZXI6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMubGFyZ2VyLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGxhcmdlckVxOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmxhcmdlckVxLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHNtYWxsZXI6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc21hbGxlciwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBzbWFsbGVyRXE6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc21hbGxlckVxLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHVuZXF1YWw6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMudW5lcXVhbCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBzcGVjaWFsXG4gIGVyZjoge1xuICAgIDE6ICdlcmZcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gc3RhdGlzdGljc1xuICBtYXg6ICdcXFxcbWF4XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknLFxuICBtaW46ICdcXFxcbWluXFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknLFxuICB2YXJpYW5jZTogJ1xcXFxtYXRocm17VmFyfVxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJyxcbiAgLy8gdHJpZ29ub21ldHJ5XG4gIGFjb3M6IHtcbiAgICAxOiAnXFxcXGNvc157LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFjb3NoOiB7XG4gICAgMTogJ1xcXFxjb3NoXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYWNvdDoge1xuICAgIDE6ICdcXFxcY290XnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYWNvdGg6IHtcbiAgICAxOiAnXFxcXGNvdGheey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhY3NjOiB7XG4gICAgMTogJ1xcXFxjc2Neey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhY3NjaDoge1xuICAgIDE6ICdcXFxcbWF0aHJte2NzY2h9XnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXNlYzoge1xuICAgIDE6ICdcXFxcc2VjXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXNlY2g6IHtcbiAgICAxOiAnXFxcXG1hdGhybXtzZWNofV57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFzaW46IHtcbiAgICAxOiAnXFxcXHNpbl57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFzaW5oOiB7XG4gICAgMTogJ1xcXFxzaW5oXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbjoge1xuICAgIDE6ICdcXFxcdGFuXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbjI6IHtcbiAgICAyOiAnXFxcXG1hdGhybXthdGFuMn1cXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbmg6IHtcbiAgICAxOiAnXFxcXHRhbmheey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb3M6IHtcbiAgICAxOiAnXFxcXGNvc1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb3NoOiB7XG4gICAgMTogJ1xcXFxjb3NoXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvdDoge1xuICAgIDE6ICdcXFxcY290XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvdGg6IHtcbiAgICAxOiAnXFxcXGNvdGhcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3NjOiB7XG4gICAgMTogJ1xcXFxjc2NcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3NjaDoge1xuICAgIDE6ICdcXFxcbWF0aHJte2NzY2h9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNlYzoge1xuICAgIDE6ICdcXFxcc2VjXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNlY2g6IHtcbiAgICAxOiAnXFxcXG1hdGhybXtzZWNofVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzaW46IHtcbiAgICAxOiAnXFxcXHNpblxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzaW5oOiB7XG4gICAgMTogJ1xcXFxzaW5oXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHRhbjoge1xuICAgIDE6ICdcXFxcdGFuXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHRhbmg6IHtcbiAgICAxOiAnXFxcXHRhbmhcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gdW5pdFxuICB0bzoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy50bywgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyB1dGlsc1xuICBudW1lcmljOiBmdW5jdGlvbiBudW1lcmljKG5vZGUsIG9wdGlvbnMpIHtcbiAgICAvLyBOb3Qgc3VyZSBpZiB0aGlzIGlzIHN0cmljdGx5IHJpZ2h0IGJ1dCBzaG91bGQgd29yayBjb3JyZWN0bHkgZm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mIHVzZSBjYXNlcy5cbiAgICByZXR1cm4gbm9kZS5hcmdzWzBdLnRvVGV4KCk7XG4gIH0sXG4gIC8vIHR5cGVcbiAgbnVtYmVyOiB7XG4gICAgMDogJzAnLFxuICAgIDE6ICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gICAgMjogJ1xcXFxsZWZ0KFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJHthcmdzWzFdfVxcXFxyaWdodCknXG4gIH0sXG4gIHN0cmluZzoge1xuICAgIDA6ICdcXFxcbWF0aHR0e1wiXCJ9JyxcbiAgICAxOiAnXFxcXG1hdGhybXtzdHJpbmd9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGJpZ251bWJlcjoge1xuICAgIDA6ICcwJyxcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvbXBsZXg6IHtcbiAgICAwOiAnMCcsXG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJyxcbiAgICAyOiBcIlxcXFxsZWZ0KFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpK1wiLmNvbmNhdChsYXRleFN5bWJvbHMuaSwgXCJcXFxcY2RvdFxcXFxsZWZ0KCR7YXJnc1sxXX1cXFxccmlnaHQpXFxcXHJpZ2h0KVwiKVxuICB9LFxuICBtYXRyaXg6IHtcbiAgICAwOiAnXFxcXGJlZ2lue2JtYXRyaXh9XFxcXGVuZHtibWF0cml4fScsXG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJyxcbiAgICAyOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNwYXJzZToge1xuICAgIDA6ICdcXFxcYmVnaW57YnNwYXJzZX1cXFxcZW5ke2JzcGFyc2V9JyxcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHVuaXQ6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknLFxuICAgIDI6ICdcXFxcbGVmdChcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSR7YXJnc1sxXX1cXFxccmlnaHQpJ1xuICB9XG59O1xuZXhwb3J0cy5sYXRleEZ1bmN0aW9ucyA9IGxhdGV4RnVuY3Rpb25zO1xudmFyIGRlZmF1bHRUZW1wbGF0ZSA9ICdcXFxcbWF0aHJteyR7bmFtZX19XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknO1xuZXhwb3J0cy5kZWZhdWx0VGVtcGxhdGUgPSBkZWZhdWx0VGVtcGxhdGU7XG52YXIgbGF0ZXhVbml0cyA9IHtcbiAgZGVnOiAnXlxcXFxjaXJjJ1xufTtcblxuZnVuY3Rpb24gZXNjYXBlTGF0ZXgoc3RyaW5nKSB7XG4gIHJldHVybiAoMCwgX2VzY2FwZUxhdGV4W1wiZGVmYXVsdFwiXSkoc3RyaW5nLCB7XG4gICAgcHJlc2VydmVGb3JtYXR0aW5nOiB0cnVlXG4gIH0pO1xufSAvLyBAcGFyYW0ge3N0cmluZ30gbmFtZVxuLy8gQHBhcmFtIHtib29sZWFufSBpc1VuaXRcblxuXG5mdW5jdGlvbiB0b1N5bWJvbChuYW1lLCBpc1VuaXQpIHtcbiAgaXNVbml0ID0gdHlwZW9mIGlzVW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IGlzVW5pdDtcblxuICBpZiAoaXNVbml0KSB7XG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShsYXRleFVuaXRzLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIGxhdGV4VW5pdHNbbmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyBlc2NhcGVMYXRleChuYW1lKSArICd9JztcbiAgfVxuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobGF0ZXhTeW1ib2xzLCBuYW1lKSkge1xuICAgIHJldHVybiBsYXRleFN5bWJvbHNbbmFtZV07XG4gIH1cblxuICByZXR1cm4gZXNjYXBlTGF0ZXgobmFtZSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLndhcm5PbmNlID0gdm9pZCAwO1xuXG4vKipcbiAqIExvZyBhIGNvbnNvbGUud2FybiBtZXNzYWdlIG9ubHkgb25jZVxuICovXG52YXIgd2Fybk9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBtZXNzYWdlcyA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gd2Fybk9uY2UoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBtZXNzYWdlID0gYXJncy5qb2luKCcsICcpO1xuXG4gICAgaWYgKCFtZXNzYWdlc1ttZXNzYWdlXSkge1xuICAgICAgdmFyIF9jb25zb2xlO1xuXG4gICAgICBtZXNzYWdlc1ttZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgIChfY29uc29sZSA9IGNvbnNvbGUpLndhcm4uYXBwbHkoX2NvbnNvbGUsIFsnV2FybmluZzonXS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn0oKTtcblxuZXhwb3J0cy53YXJuT25jZSA9IHdhcm5PbmNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub0JpZ251bWJlciA9IG5vQmlnbnVtYmVyO1xuZXhwb3J0cy5ub0ZyYWN0aW9uID0gbm9GcmFjdGlvbjtcbmV4cG9ydHMubm9NYXRyaXggPSBub01hdHJpeDtcbmV4cG9ydHMubm9JbmRleCA9IG5vSW5kZXg7XG5leHBvcnRzLm5vU3Vic2V0ID0gbm9TdWJzZXQ7XG5cbmZ1bmN0aW9uIG5vQmlnbnVtYmVyKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiYmlnbnVtYmVyXCIgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlJyk7XG59XG5cbmZ1bmN0aW9uIG5vRnJhY3Rpb24oKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm8gXCJmcmFjdGlvblwiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpO1xufVxuXG5mdW5jdGlvbiBub01hdHJpeCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdObyBcIm1hdHJpeFwiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpO1xufVxuXG5mdW5jdGlvbiBub0luZGV4KCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiaW5kZXhcIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTtcbn1cblxuZnVuY3Rpb24gbm9TdWJzZXQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm8gXCJtYXRyaXhcIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNJbnRlZ2VyID0gaXNJbnRlZ2VyO1xuZXhwb3J0cy5mb3JtYXQgPSBmb3JtYXQ7XG5leHBvcnRzLnNwbGl0TnVtYmVyID0gc3BsaXROdW1iZXI7XG5leHBvcnRzLnRvRW5naW5lZXJpbmcgPSB0b0VuZ2luZWVyaW5nO1xuZXhwb3J0cy50b0ZpeGVkID0gdG9GaXhlZDtcbmV4cG9ydHMudG9FeHBvbmVudGlhbCA9IHRvRXhwb25lbnRpYWw7XG5leHBvcnRzLnRvUHJlY2lzaW9uID0gdG9QcmVjaXNpb247XG5leHBvcnRzLnJvdW5kRGlnaXRzID0gcm91bmREaWdpdHM7XG5leHBvcnRzLmRpZ2l0cyA9IGRpZ2l0cztcbmV4cG9ydHMubmVhcmx5RXF1YWwgPSBuZWFybHlFcXVhbDtcbmV4cG9ydHMudGFuaCA9IGV4cG9ydHMuc2luaCA9IGV4cG9ydHMuY29zaCA9IGV4cG9ydHMuYXRhbmggPSBleHBvcnRzLmFzaW5oID0gZXhwb3J0cy5hY29zaCA9IGV4cG9ydHMuREJMX0VQU0lMT04gPSBleHBvcnRzLmV4cG0xID0gZXhwb3J0cy5jYnJ0ID0gZXhwb3J0cy5sb2cxcCA9IGV4cG9ydHMubG9nMTAgPSBleHBvcnRzLmxvZzIgPSBleHBvcnRzLnNpZ24gPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4vb2JqZWN0XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4vaXNcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge3tzaWduOiAnKycgfCAnLScgfCAnJywgY29lZmZpY2llbnRzOiBudW1iZXJbXSwgZXhwb25lbnQ6IG51bWJlcn19IFNwbGl0VmFsdWVcbiAqL1xuXG4vKipcbiAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyIHwgYm9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGlzSW50ZWdlclxuICovXG5mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgPT09IE1hdGgucm91bmQodmFsdWUpIDogZmFsc2U7IC8vIE5vdGU6IHdlIHVzZSA9PSwgbm90ID09PSwgYXMgd2UgY2FuIGhhdmUgQm9vbGVhbnMgYXMgd2VsbFxufVxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHNpZ24gb2YgYSBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5cblxudmFyIHNpZ24gPSAvKiAjX19QVVJFX18gKi9NYXRoLnNpZ24gfHwgZnVuY3Rpb24gKHgpIHtcbiAgaWYgKHggPiAwKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoeCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgYmFzZS0yIGxvZ2FyaXRobSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLnNpZ24gPSBzaWduO1xuXG52YXIgbG9nMiA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMiB8fCBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMubG9nMiA9IGxvZzI7XG5cbnZhciBsb2cxMCA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMTAgfHwgZnVuY3Rpb24gbG9nMTAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMTA7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgbnVtYmVyICsgMVxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLmxvZzEwID0gbG9nMTA7XG5cbnZhciBsb2cxcCA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMXAgfHwgZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHggKyAxKTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSBjdWJpYyByb290IGZvciBhIG51bWJlclxuICpcbiAqIENvZGUgZnJvbSBlczYtc2hpbS5qczpcbiAqICAgaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9lczYtc2hpbS9ibG9iL21hc3Rlci9lczYtc2hpbS5qcyNMMTU2NC1MMTU3N1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjdWJpYyByb290IG9mIHhcbiAqL1xuXG5cbmV4cG9ydHMubG9nMXAgPSBsb2cxcDtcblxudmFyIGNicnQgPSAvKiAjX19QVVJFX18gKi9NYXRoLmNicnQgfHwgZnVuY3Rpb24gY2JydCh4KSB7XG4gIGlmICh4ID09PSAwKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICB2YXIgbmVnYXRlID0geCA8IDA7XG4gIHZhciByZXN1bHQ7XG5cbiAgaWYgKG5lZ2F0ZSkge1xuICAgIHggPSAteDtcbiAgfVxuXG4gIGlmIChpc0Zpbml0ZSh4KSkge1xuICAgIHJlc3VsdCA9IE1hdGguZXhwKE1hdGgubG9nKHgpIC8gMyk7IC8vIGZyb20gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3ViZV9yb290I051bWVyaWNhbF9tZXRob2RzXG5cbiAgICByZXN1bHQgPSAoeCAvIChyZXN1bHQgKiByZXN1bHQpICsgMiAqIHJlc3VsdCkgLyAzO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHg7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlID8gLXJlc3VsdCA6IHJlc3VsdDtcbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgZXhwb25lbnRpYXRpb24gbWludXMgMVxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm4ge251bWJlcn0gcmVzXG4gKi9cblxuXG5leHBvcnRzLmNicnQgPSBjYnJ0O1xuXG52YXIgZXhwbTEgPSAvKiAjX19QVVJFX18gKi9NYXRoLmV4cG0xIHx8IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuIHggPj0gMmUtNCB8fCB4IDw9IC0yZS00ID8gTWF0aC5leHAoeCkgLSAxIDogeCArIHggKiB4IC8gMiArIHggKiB4ICogeCAvIDY7XG59O1xuLyoqXG4gKiBDb252ZXJ0IGEgbnVtYmVyIHRvIGEgZm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBTeW50YXg6XG4gKlxuICogICAgZm9ybWF0KHZhbHVlKVxuICogICAgZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICogICAgZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pXG4gKiAgICBmb3JtYXQodmFsdWUsIGZuKVxuICpcbiAqIFdoZXJlOlxuICpcbiAqICAgIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxuICogICAge09iamVjdH0gb3B0aW9ucyBBbiBvYmplY3Qgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOlxuICogICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBub3RhdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG5vdGF0aW9uLiBDaG9vc2UgZnJvbTpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCcgICAgICAgICAgQWx3YXlzIHVzZSByZWd1bGFyIG51bWJlciBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40MCcgYW5kICcxNDAwMDAwMCdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdleHBvbmVudGlhbCcgICAgQWx3YXlzIHVzZSBleHBvbmVudGlhbCBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEuMjM0ZSsyJyBhbmQgJzEuNGUrNydcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycgICAgQWx3YXlzIHVzZSBlbmdpbmVlcmluZyBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40ZSswJyBhbmQgJzE0LjBlKzYnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgKGRlZmF1bHQpIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsb3dlckV4cGAgYW5kIGB1cHBlckV4cGAgYm91bmRzLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBleHBvbmVudGlhbCBub3RhdGlvbiBlbHNld2hlcmUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvd2VyIGJvdW5kIGlzIGluY2x1ZGVkLCB1cHBlciBib3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBleGNsdWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycsIGFuZCAnYXV0bycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIHRvdGFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcmV0dXJuZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgaXMgdW5kZWZpbmVkIGJ5IGRlZmF1bHQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCByb3VuZGluZyBhbnkgZGlnaXRzLlxuICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBsb3dlckV4cCAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgbG93ZXIgYm91bmRhcnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyBgLTNgLlxuICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB1cHBlckV4cCAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgdXBwZXIgYm91bmRhcnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyBgNWAuXG4gKiAgICB7RnVuY3Rpb259IGZuICAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24uIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZVxuICogICAgICAgICAgICAgICAgICAgICBidWlsdC1pbiBub3RhdGlvbnMuIEZ1bmN0aW9uIGBmbmAgaXMgY2FsbGVkIHdpdGggYHZhbHVlYCBhc1xuICogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgYW5kIG11c3QgcmV0dXJuIGEgc3RyaW5nLiBJcyB1c2VmdWwgZm9yIGV4YW1wbGUgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IGFsbCB2YWx1ZXMgaW5zaWRlIGEgbWF0cml4IGluIGEgcGFydGljdWxhciB3YXkuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgZm9ybWF0KDYuNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzYuNCdcbiAqICAgIGZvcm1hdCgxMjQwMDAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcxLjI0ZTYnXG4gKiAgICBmb3JtYXQoMS8zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMzMzMzMzMzMzMzMzMzJ1xuICogICAgZm9ybWF0KDEvMywgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzAuMzMzJ1xuICogICAgZm9ybWF0KDIxMzg1LCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzIxMDAwJ1xuICogICAgZm9ybWF0KDEyLjA3MSwge25vdGF0aW9uOiAnZml4ZWQnfSkgICAgICAgICAgICAgICAgLy8gJzEyJ1xuICogICAgZm9ybWF0KDIuMywgICAge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDJ9KSAgLy8gJzIuMzAnXG4gKiAgICBmb3JtYXQoNTIuOCwgICB7bm90YXRpb246ICdleHBvbmVudGlhbCd9KSAgICAgICAgICAvLyAnNS4yOGUrMSdcbiAqICAgIGZvcm1hdCgxMjM0NTY3OCwge25vdGF0aW9uOiAnZW5naW5lZXJpbmcnfSkgICAgICAgIC8vICcxMi4zNDU2NzhlKzYnXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge3N0cmluZ30gc3RyIFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAqL1xuXG5cbmV4cG9ydHMuZXhwbTEgPSBleHBtMTtcblxuZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGhhbmRsZSBmb3JtYXQodmFsdWUsIGZuKVxuICAgIHJldHVybiBvcHRpb25zKHZhbHVlKTtcbiAgfSAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlc1xuXG5cbiAgaWYgKHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIHJldHVybiAnSW5maW5pdHknO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gJy1JbmZpbml0eSc7XG4gIH0gZWxzZSBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuICdOYU4nO1xuICB9IC8vIGRlZmF1bHQgdmFsdWVzIGZvciBvcHRpb25zXG5cblxuICB2YXIgbm90YXRpb24gPSAnYXV0byc7XG4gIHZhciBwcmVjaXNpb247XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICAvLyBkZXRlcm1pbmUgbm90YXRpb24gZnJvbSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMubm90YXRpb24pIHtcbiAgICAgIG5vdGF0aW9uID0gb3B0aW9ucy5ub3RhdGlvbjtcbiAgICB9IC8vIGRldGVybWluZSBwcmVjaXNpb24gZnJvbSBvcHRpb25zXG5cblxuICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShvcHRpb25zKSkge1xuICAgICAgcHJlY2lzaW9uID0gb3B0aW9ucztcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKG9wdGlvbnMucHJlY2lzaW9uKSkge1xuICAgICAgcHJlY2lzaW9uID0gb3B0aW9ucy5wcmVjaXNpb247XG4gICAgfVxuICB9IC8vIGhhbmRsZSB0aGUgdmFyaW91cyBub3RhdGlvbnNcblxuXG4gIHN3aXRjaCAobm90YXRpb24pIHtcbiAgICBjYXNlICdmaXhlZCc6XG4gICAgICByZXR1cm4gdG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uKTtcblxuICAgIGNhc2UgJ2V4cG9uZW50aWFsJzpcbiAgICAgIHJldHVybiB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgY2FzZSAnZW5naW5lZXJpbmcnOlxuICAgICAgcmV0dXJuIHRvRW5naW5lZXJpbmcodmFsdWUsIHByZWNpc2lvbik7XG5cbiAgICBjYXNlICdhdXRvJzpcbiAgICAgIC8vIFRPRE86IGNsZWFuIHVwIHNvbWUgZGF5LiBEZXByZWNhdGVkIHNpbmNlOiAyMDE4LTAxLTI0XG4gICAgICAvLyBAZGVwcmVjYXRlZCB1cHBlciBhbmQgbG93ZXIgYXJlIHJlcGxhY2VkIHdpdGggdXBwZXJFeHAgYW5kIGxvd2VyRXhwIHNpbmNlIHY0LjAuMFxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leHBvbmVudGlhbCAmJiAob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlciAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuZXhwb25lbnRpYWwudXBwZXIgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdmFyIGZpeGVkT3B0aW9ucyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpeGVkT3B0aW9ucy5leHBvbmVudGlhbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZml4ZWRPcHRpb25zLmxvd2VyRXhwID0gTWF0aC5yb3VuZChNYXRoLmxvZyhvcHRpb25zLmV4cG9uZW50aWFsLmxvd2VyKSAvIE1hdGguTE4xMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC51cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZml4ZWRPcHRpb25zLnVwcGVyRXhwID0gTWF0aC5yb3VuZChNYXRoLmxvZyhvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyKSAvIE1hdGguTE4xMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6IEZvcm1hdHRpbmcgb3B0aW9ucyBleHBvbmVudGlhbC5sb3dlciBhbmQgZXhwb25lbnRpYWwudXBwZXIgJyArICcobWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSkgJyArICdhcmUgcmVwbGFjZWQgd2l0aCBleHBvbmVudGlhbC5sb3dlckV4cCBhbmQgZXhwb25lbnRpYWwudXBwZXJFeHAgJyArICcobWluaW11bSBhbmQgbWF4aW11bSBleHBvbmVudCkgc2luY2UgdmVyc2lvbiA0LjAuMC4gJyArICdSZXBsYWNlICcgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKSArICcgd2l0aCAnICsgSlNPTi5zdHJpbmdpZnkoZml4ZWRPcHRpb25zKSk7XG4gICAgICAgIHJldHVybiB0b1ByZWNpc2lvbih2YWx1ZSwgcHJlY2lzaW9uLCBmaXhlZE9wdGlvbnMpO1xuICAgICAgfSAvLyByZW1vdmUgdHJhaWxpbmcgemVyb3MgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRcblxuXG4gICAgICByZXR1cm4gdG9QcmVjaXNpb24odmFsdWUsIHByZWNpc2lvbiwgb3B0aW9ucyAmJiBvcHRpb25zKS5yZXBsYWNlKC8oKFxcLlxcZCo/KSgwKykpKCR8ZSkvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaWdpdHMgPSBhcmd1bWVudHNbMl07XG4gICAgICAgIHZhciBlID0gYXJndW1lbnRzWzRdO1xuICAgICAgICByZXR1cm4gZGlnaXRzICE9PSAnLicgPyBkaWdpdHMgKyBlIDogZTtcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub3RhdGlvbiBcIicgKyBub3RhdGlvbiArICdcIi4gJyArICdDaG9vc2UgXCJhdXRvXCIsIFwiZXhwb25lbnRpYWxcIiwgb3IgXCJmaXhlZFwiLicpO1xuICB9XG59XG4vKipcbiAqIFNwbGl0IGEgbnVtYmVyIGludG8gc2lnbiwgY29lZmZpY2llbnRzLCBhbmQgZXhwb25lbnRcbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7U3BsaXRWYWx1ZX1cbiAqICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHNpZ24sIGNvZWZmaWNpZW50cywgYW5kIGV4cG9uZW50XG4gKi9cblxuXG5mdW5jdGlvbiBzcGxpdE51bWJlcih2YWx1ZSkge1xuICAvLyBwYXJzZSB0aGUgaW5wdXQgdmFsdWVcbiAgdmFyIG1hdGNoID0gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eMCo/KC0/KShcXGQrXFwuP1xcZCopKGUoWystXT9cXGQrKSk/JC8pO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgbnVtYmVyICcgKyB2YWx1ZSk7XG4gIH1cblxuICB2YXIgc2lnbiA9IG1hdGNoWzFdO1xuICB2YXIgZGlnaXRzID0gbWF0Y2hbMl07XG4gIHZhciBleHBvbmVudCA9IHBhcnNlRmxvYXQobWF0Y2hbNF0gfHwgJzAnKTtcbiAgdmFyIGRvdCA9IGRpZ2l0cy5pbmRleE9mKCcuJyk7XG4gIGV4cG9uZW50ICs9IGRvdCAhPT0gLTEgPyBkb3QgLSAxIDogZGlnaXRzLmxlbmd0aCAtIDE7XG4gIHZhciBjb2VmZmljaWVudHMgPSBkaWdpdHMucmVwbGFjZSgnLicsICcnKSAvLyByZW1vdmUgdGhlIGRvdCAobXVzdCBiZSByZW1vdmVkIGJlZm9yZSByZW1vdmluZyBsZWFkaW5nIHplcm9zKVxuICAucmVwbGFjZSgvXjAqLywgZnVuY3Rpb24gKHplcm9zKSB7XG4gICAgLy8gcmVtb3ZlIGxlYWRpbmcgemVyb3MsIGFkZCB0aGVpciBjb3VudCB0byB0aGUgZXhwb25lbnRcbiAgICBleHBvbmVudCAtPSB6ZXJvcy5sZW5ndGg7XG4gICAgcmV0dXJuICcnO1xuICB9KS5yZXBsYWNlKC8wKiQvLCAnJykgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9zXG4gIC5zcGxpdCgnJykubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGQpO1xuICB9KTtcblxuICBpZiAoY29lZmZpY2llbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvZWZmaWNpZW50cy5wdXNoKDApO1xuICAgIGV4cG9uZW50Kys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNpZ246IHNpZ24sXG4gICAgY29lZmZpY2llbnRzOiBjb2VmZmljaWVudHMsXG4gICAgZXhwb25lbnQ6IGV4cG9uZW50XG4gIH07XG59XG4vKipcbiAqIEZvcm1hdCBhIG51bWJlciBpbiBlbmdpbmVlcmluZyBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNicsICcyLjNlKzAnLCAnMy41MDBlLTMnXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAgICAgICAgT3B0aW9uYWwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGZpZ3VyZXMgdG8gcmV0dXJuLlxuICovXG5cblxuZnVuY3Rpb24gdG9FbmdpbmVlcmluZyh2YWx1ZSwgcHJlY2lzaW9uKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgdmFyIHNwbGl0ID0gc3BsaXROdW1iZXIodmFsdWUpO1xuICB2YXIgcm91bmRlZCA9IHJvdW5kRGlnaXRzKHNwbGl0LCBwcmVjaXNpb24pO1xuICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7XG4gIHZhciBjID0gcm91bmRlZC5jb2VmZmljaWVudHM7IC8vIGZpbmQgbmVhcmVzdCBsb3dlciBtdWx0aXBsZSBvZiAzIGZvciBleHBvbmVudFxuXG4gIHZhciBuZXdFeHAgPSBlICUgMyA9PT0gMCA/IGUgOiBlIDwgMCA/IGUgLSAzIC0gZSAlIDMgOiBlIC0gZSAlIDM7XG5cbiAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKHByZWNpc2lvbikpIHtcbiAgICAvLyBhZGQgemVyb2VzIHRvIGdpdmUgY29ycmVjdCBzaWcgZmlnc1xuICAgIHdoaWxlIChwcmVjaXNpb24gPiBjLmxlbmd0aCB8fCBlIC0gbmV3RXhwICsgMSA+IGMubGVuZ3RoKSB7XG4gICAgICBjLnB1c2goMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGNvbmNhdGVuYXRlIGNvZWZmaWNpZW50cyB3aXRoIG5lY2Vzc2FyeSB6ZXJvc1xuICAgIC8vIGFkZCB6ZXJvcyBpZiBuZWNlc3NhcnkgKGZvciBleGFtcGxlOiAxZSs4IC0+IDEwMGUrNilcbiAgICB2YXIgbWlzc2luZ1plcm9zID0gTWF0aC5hYnMoZSAtIG5ld0V4cCkgLSAoYy5sZW5ndGggLSAxKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlzc2luZ1plcm9zOyBpKyspIHtcbiAgICAgIGMucHVzaCgwKTtcbiAgICB9XG4gIH0gLy8gZmluZCBkaWZmZXJlbmNlIGluIGV4cG9uZW50c1xuXG5cbiAgdmFyIGV4cERpZmYgPSBNYXRoLmFicyhlIC0gbmV3RXhwKTtcbiAgdmFyIGRlY2ltYWxJZHggPSAxOyAvLyBwdXNoIGRlY2ltYWwgaW5kZXggb3ZlciBieSBleHBEaWZmIHRpbWVzXG5cbiAgd2hpbGUgKGV4cERpZmYgPiAwKSB7XG4gICAgZGVjaW1hbElkeCsrO1xuICAgIGV4cERpZmYtLTtcbiAgfSAvLyBpZiBhbGwgY29lZmZpY2llbnQgdmFsdWVzIGFyZSB6ZXJvIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGFuZCBwcmVjaXNpb24gaXMgdW5zZXQsIGRvbid0IGFkZCBhIGRlY2ltYWwgdmFsdWUuXG4gIC8vIG90aGVyd2lzZSBjb25jYXQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29lZmZpY2llbnRzXG5cblxuICB2YXIgZGVjaW1hbHMgPSBjLnNsaWNlKGRlY2ltYWxJZHgpLmpvaW4oJycpO1xuICB2YXIgZGVjaW1hbFZhbCA9ICgwLCBfaXMuaXNOdW1iZXIpKHByZWNpc2lvbikgJiYgZGVjaW1hbHMubGVuZ3RoIHx8IGRlY2ltYWxzLm1hdGNoKC9bMS05XS8pID8gJy4nICsgZGVjaW1hbHMgOiAnJztcbiAgdmFyIHN0ciA9IGMuc2xpY2UoMCwgZGVjaW1hbElkeCkuam9pbignJykgKyBkZWNpbWFsVmFsICsgJ2UnICsgKGUgPj0gMCA/ICcrJyA6ICcnKSArIG5ld0V4cC50b1N0cmluZygpO1xuICByZXR1cm4gcm91bmRlZC5zaWduICsgc3RyO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgd2l0aCBmaXhlZCBub3RhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249dW5kZWZpbmVkXSAgT3B0aW9uYWwgbnVtYmVyIG9mIGRlY2ltYWxzIGFmdGVyIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCBwb2ludC4gbnVsbCBieSBkZWZhdWx0LlxuICovXG5cblxuZnVuY3Rpb24gdG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgdmFyIHNwbGl0VmFsdWUgPSBzcGxpdE51bWJlcih2YWx1ZSk7XG4gIHZhciByb3VuZGVkID0gdHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgPyByb3VuZERpZ2l0cyhzcGxpdFZhbHVlLCBzcGxpdFZhbHVlLmV4cG9uZW50ICsgMSArIHByZWNpc2lvbikgOiBzcGxpdFZhbHVlO1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzO1xuICB2YXIgcCA9IHJvdW5kZWQuZXhwb25lbnQgKyAxOyAvLyBleHBvbmVudCBtYXkgaGF2ZSBjaGFuZ2VkXG4gIC8vIGFwcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuICB2YXIgcHAgPSBwICsgKHByZWNpc2lvbiB8fCAwKTtcblxuICBpZiAoYy5sZW5ndGggPCBwcCkge1xuICAgIGMgPSBjLmNvbmNhdCh6ZXJvcyhwcCAtIGMubGVuZ3RoKSk7XG4gIH0gLy8gcHJlcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuXG4gIGlmIChwIDwgMCkge1xuICAgIGMgPSB6ZXJvcygtcCArIDEpLmNvbmNhdChjKTtcbiAgICBwID0gMTtcbiAgfSAvLyBpbnNlcnQgYSBkb3QgaWYgbmVlZGVkXG5cblxuICBpZiAocCA8IGMubGVuZ3RoKSB7XG4gICAgYy5zcGxpY2UocCwgMCwgcCA9PT0gMCA/ICcwLicgOiAnLicpO1xuICB9XG5cbiAgcmV0dXJuIHJvdW5kZWQuc2lnbiArIGMuam9pbignJyk7XG59XG4vKipcbiAqIEZvcm1hdCBhIG51bWJlciBpbiBleHBvbmVudGlhbCBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNScsICcyLjNlKzAnLCAnMy41MDBlLTMnXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAgTnVtYmVyIG9mIGRpZ2l0cyBpbiBmb3JtYXR0ZWQgb3V0cHV0LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSBkaWdpdHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbikge1xuICBpZiAoaXNOYU4odmFsdWUpIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfSAvLyByb3VuZCBpZiBuZWVkZWQsIGVsc2UgY3JlYXRlIGEgY2xvbmVcblxuXG4gIHZhciBzcGxpdCA9IHNwbGl0TnVtYmVyKHZhbHVlKTtcbiAgdmFyIHJvdW5kZWQgPSBwcmVjaXNpb24gPyByb3VuZERpZ2l0cyhzcGxpdCwgcHJlY2lzaW9uKSA6IHNwbGl0O1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzO1xuICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7IC8vIGFwcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuICBpZiAoYy5sZW5ndGggPCBwcmVjaXNpb24pIHtcbiAgICBjID0gYy5jb25jYXQoemVyb3MocHJlY2lzaW9uIC0gYy5sZW5ndGgpKTtcbiAgfSAvLyBmb3JtYXQgYXMgYEMuQ0NDZStFRUVgIG9yIGBDLkNDQ2UtRUVFYFxuXG5cbiAgdmFyIGZpcnN0ID0gYy5zaGlmdCgpO1xuICByZXR1cm4gcm91bmRlZC5zaWduICsgZmlyc3QgKyAoYy5sZW5ndGggPiAwID8gJy4nICsgYy5qb2luKCcnKSA6ICcnKSArICdlJyArIChlID49IDAgPyAnKycgOiAnJykgKyBlO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgd2l0aCBhIGNlcnRhaW4gcHJlY2lzaW9uXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPXVuZGVmaW5lZF0gT3B0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cy5cbiAqIEBwYXJhbSB7e2xvd2VyRXhwOiBudW1iZXIgfCB1bmRlZmluZWQsIHVwcGVyRXhwOiBudW1iZXIgfCB1bmRlZmluZWR9fSBbb3B0aW9uc11cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdDpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlckV4cCA9IC0zIChpbmNsKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyID0gKzUgKGV4Y2wpXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiB0b1ByZWNpc2lvbih2YWx1ZSwgcHJlY2lzaW9uLCBvcHRpb25zKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9IC8vIGRldGVybWluZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZm9yIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxuXG5cbiAgdmFyIGxvd2VyRXhwID0gb3B0aW9ucyAmJiBvcHRpb25zLmxvd2VyRXhwICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvd2VyRXhwIDogLTM7XG4gIHZhciB1cHBlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy51cHBlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy51cHBlckV4cCA6IDU7XG4gIHZhciBzcGxpdCA9IHNwbGl0TnVtYmVyKHZhbHVlKTtcbiAgdmFyIHJvdW5kZWQgPSBwcmVjaXNpb24gPyByb3VuZERpZ2l0cyhzcGxpdCwgcHJlY2lzaW9uKSA6IHNwbGl0O1xuXG4gIGlmIChyb3VuZGVkLmV4cG9uZW50IDwgbG93ZXJFeHAgfHwgcm91bmRlZC5leHBvbmVudCA+PSB1cHBlckV4cCkge1xuICAgIC8vIGV4cG9uZW50aWFsIG5vdGF0aW9uXG4gICAgcmV0dXJuIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGMgPSByb3VuZGVkLmNvZWZmaWNpZW50cztcbiAgICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7IC8vIGFwcGVuZCB0cmFpbGluZyB6ZXJvc1xuXG4gICAgaWYgKGMubGVuZ3RoIDwgcHJlY2lzaW9uKSB7XG4gICAgICBjID0gYy5jb25jYXQoemVyb3MocHJlY2lzaW9uIC0gYy5sZW5ndGgpKTtcbiAgICB9IC8vIGFwcGVuZCB0cmFpbGluZyB6ZXJvc1xuICAgIC8vIFRPRE86IHNpbXBsaWZ5IHRoZSBuZXh0IHN0YXRlbWVudFxuXG5cbiAgICBjID0gYy5jb25jYXQoemVyb3MoZSAtIGMubGVuZ3RoICsgMSArIChjLmxlbmd0aCA8IHByZWNpc2lvbiA/IHByZWNpc2lvbiAtIGMubGVuZ3RoIDogMCkpKTsgLy8gcHJlcGVuZCB6ZXJvc1xuXG4gICAgYyA9IHplcm9zKC1lKS5jb25jYXQoYyk7XG4gICAgdmFyIGRvdCA9IGUgPiAwID8gZSA6IDA7XG5cbiAgICBpZiAoZG90IDwgYy5sZW5ndGggLSAxKSB7XG4gICAgICBjLnNwbGljZShkb3QgKyAxLCAwLCAnLicpO1xuICAgIH1cblxuICAgIHJldHVybiByb3VuZGVkLnNpZ24gKyBjLmpvaW4oJycpO1xuICB9XG59XG4vKipcbiAqIFJvdW5kIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIGEgbnVtYmVyICpcbiAqIEBwYXJhbSB7U3BsaXRWYWx1ZX0gc3BsaXQgICAgICAgQSB2YWx1ZSBzcGxpdCB3aXRoIC5zcGxpdE51bWJlcih2YWx1ZSlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwcmVjaXNpb24gIEEgcG9zaXRpdmUgaW50ZWdlclxuICogQHJldHVybiB7U3BsaXRWYWx1ZX1cbiAqICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHNpZ24sIGNvZWZmaWNpZW50cywgYW5kIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgd2l0aCByb3VuZGVkIGRpZ2l0c1xuICovXG5cblxuZnVuY3Rpb24gcm91bmREaWdpdHMoc3BsaXQsIHByZWNpc2lvbikge1xuICAvLyBjcmVhdGUgYSBjbG9uZVxuICB2YXIgcm91bmRlZCA9IHtcbiAgICBzaWduOiBzcGxpdC5zaWduLFxuICAgIGNvZWZmaWNpZW50czogc3BsaXQuY29lZmZpY2llbnRzLFxuICAgIGV4cG9uZW50OiBzcGxpdC5leHBvbmVudFxuICB9O1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzOyAvLyBwcmVwZW5kIHplcm9zIGlmIG5lZWRlZFxuXG4gIHdoaWxlIChwcmVjaXNpb24gPD0gMCkge1xuICAgIGMudW5zaGlmdCgwKTtcbiAgICByb3VuZGVkLmV4cG9uZW50Kys7XG4gICAgcHJlY2lzaW9uKys7XG4gIH1cblxuICBpZiAoYy5sZW5ndGggPiBwcmVjaXNpb24pIHtcbiAgICB2YXIgcmVtb3ZlZCA9IGMuc3BsaWNlKHByZWNpc2lvbiwgYy5sZW5ndGggLSBwcmVjaXNpb24pO1xuXG4gICAgaWYgKHJlbW92ZWRbMF0gPj0gNSkge1xuICAgICAgdmFyIGkgPSBwcmVjaXNpb24gLSAxO1xuICAgICAgY1tpXSsrO1xuXG4gICAgICB3aGlsZSAoY1tpXSA9PT0gMTApIHtcbiAgICAgICAgYy5wb3AoKTtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIGMudW5zaGlmdCgwKTtcbiAgICAgICAgICByb3VuZGVkLmV4cG9uZW50Kys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaS0tO1xuICAgICAgICBjW2ldKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvdW5kZWQ7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBhcnJheSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cblxuZnVuY3Rpb24gemVyb3MobGVuZ3RoKSB7XG4gIHZhciBhcnIgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgYXJyLnB1c2goMCk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiBhIG51bWJlci5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgMi4zNCByZXR1cm5zIDNcbiAqICAgMC4wMDM0IHJldHVybnMgMlxuICogICAxMjAuNWUrMzAgcmV0dXJucyA0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGRpZ2l0cyAgIE51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcbiAqL1xuXG5cbmZ1bmN0aW9uIGRpZ2l0cyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbCgpLnJlcGxhY2UoL2UuKiQvLCAnJykgLy8gcmVtb3ZlIGV4cG9uZW50aWFsIG5vdGF0aW9uXG4gIC5yZXBsYWNlKC9eMFxcLj8wKnxcXC4vLCAnJykgLy8gcmVtb3ZlIGRlY2ltYWwgcG9pbnQgYW5kIGxlYWRpbmcgemVyb3NcbiAgLmxlbmd0aDtcbn1cbi8qKlxuICogTWluaW11bSBudW1iZXIgYWRkZWQgdG8gb25lIHRoYXQgbWFrZXMgdGhlIHJlc3VsdCBkaWZmZXJlbnQgdGhhbiBvbmVcbiAqL1xuXG5cbnZhciBEQkxfRVBTSUxPTiA9IE51bWJlci5FUFNJTE9OIHx8IDIuMjIwNDQ2MDQ5MjUwMzEzMDgwODQ3MjYzMzM2MTgxNkUtMTY7XG4vKipcbiAqIENvbXBhcmVzIHR3byBmbG9hdGluZyBwb2ludCBudW1iZXJzLlxuICogQHBhcmFtIHtudW1iZXJ9IHggICAgICAgICAgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtudW1iZXJ9IHkgICAgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbl0gIFRoZSBtYXhpbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlcHNpbG9uIGlzIHVuZGVmaW5lZCBvciBudWxsLCB0aGUgZnVuY3Rpb24gd2lsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWwuXG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSB0d28gbnVtYmVycyBhcmUgbmVhcmx5IGVxdWFsXG4qL1xuXG5leHBvcnRzLkRCTF9FUFNJTE9OID0gREJMX0VQU0lMT047XG5cbmZ1bmN0aW9uIG5lYXJseUVxdWFsKHgsIHksIGVwc2lsb24pIHtcbiAgLy8gaWYgZXBzaWxvbiBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWxcbiAgaWYgKGVwc2lsb24gPT09IG51bGwgfHwgZXBzaWxvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHggPT09IHk7XG4gIH1cblxuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5hTlxuXG5cbiAgaWYgKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIGF0IHRoaXMgcG9pbnQgeCBhbmQgeSBzaG91bGQgYmUgZmluaXRlXG5cblxuICBpZiAoaXNGaW5pdGUoeCkgJiYgaXNGaW5pdGUoeSkpIHtcbiAgICAvLyBjaGVjayBudW1iZXJzIGFyZSB2ZXJ5IGNsb3NlLCBuZWVkZWQgd2hlbiBjb21wYXJpbmcgbnVtYmVycyBuZWFyIHplcm9cbiAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHggLSB5KTtcblxuICAgIGlmIChkaWZmIDwgREJMX0VQU0lMT04pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgcmVsYXRpdmUgZXJyb3JcbiAgICAgIHJldHVybiBkaWZmIDw9IE1hdGgubWF4KE1hdGguYWJzKHgpLCBNYXRoLmFicyh5KSkgKiBlcHNpbG9uO1xuICAgIH1cbiAgfSAvLyBJbmZpbml0ZSBhbmQgTnVtYmVyIG9yIG5lZ2F0aXZlIEluZmluaXRlIGFuZCBwb3NpdGl2ZSBJbmZpbml0ZSBjYXNlc1xuXG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cblxudmFyIGFjb3NoID0gTWF0aC5hY29zaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4IC0gMSkgKyB4KTtcbn07XG5cbmV4cG9ydHMuYWNvc2ggPSBhY29zaDtcblxudmFyIGFzaW5oID0gTWF0aC5hc2luaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4ICsgMSkgKyB4KTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmN0YW5nZW50IG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cblxuZXhwb3J0cy5hc2luaCA9IGFzaW5oO1xuXG52YXIgYXRhbmggPSBNYXRoLmF0YW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLmF0YW5oID0gYXRhbmg7XG5cbnZhciBjb3NoID0gTWF0aC5jb3NoIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiAoTWF0aC5leHAoeCkgKyBNYXRoLmV4cCgteCkpIC8gMjtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMuY29zaCA9IGNvc2g7XG5cbnZhciBzaW5oID0gTWF0aC5zaW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiAoTWF0aC5leHAoeCkgLSBNYXRoLmV4cCgteCkpIC8gMjtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMuc2luaCA9IHNpbmg7XG5cbnZhciB0YW5oID0gTWF0aC50YW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBlID0gTWF0aC5leHAoMiAqIHgpO1xuICByZXR1cm4gKGUgLSAxKSAvIChlICsgMSk7XG59O1xuXG5leHBvcnRzLnRhbmggPSB0YW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbG9uZSA9IGNsb25lO1xuZXhwb3J0cy5tYXBPYmplY3QgPSBtYXBPYmplY3Q7XG5leHBvcnRzLmV4dGVuZCA9IGV4dGVuZDtcbmV4cG9ydHMuZGVlcEV4dGVuZCA9IGRlZXBFeHRlbmQ7XG5leHBvcnRzLmRlZXBTdHJpY3RFcXVhbCA9IGRlZXBTdHJpY3RFcXVhbDtcbmV4cG9ydHMuZGVlcEZsYXR0ZW4gPSBkZWVwRmxhdHRlbjtcbmV4cG9ydHMuY2FuRGVmaW5lUHJvcGVydHkgPSBjYW5EZWZpbmVQcm9wZXJ0eTtcbmV4cG9ydHMubGF6eSA9IGxhenk7XG5leHBvcnRzLnRyYXZlcnNlID0gdHJhdmVyc2U7XG5leHBvcnRzLmhhc093blByb3BlcnR5ID0gaGFzT3duUHJvcGVydHk7XG5leHBvcnRzLmlzTGVnYWN5RmFjdG9yeSA9IGlzTGVnYWN5RmFjdG9yeTtcbmV4cG9ydHMuZ2V0ID0gZ2V0O1xuZXhwb3J0cy5zZXQgPSBzZXQ7XG5leHBvcnRzLnBpY2sgPSBwaWNrO1xuZXhwb3J0cy5waWNrU2hhbGxvdyA9IHBpY2tTaGFsbG93O1xuZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENsb25lIGFuIG9iamVjdFxuICpcbiAqICAgICBjbG9uZSh4KVxuICpcbiAqIENhbiBjbG9uZSBhbnkgcHJpbWl0aXZlIHR5cGUsIGFycmF5LCBhbmQgb2JqZWN0LlxuICogSWYgeCBoYXMgYSBmdW5jdGlvbiBjbG9uZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgdG8gY2xvbmUgdGhlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0geyp9IHhcbiAqIEByZXR1cm4geyp9IGNsb25lXG4gKi9cbmZ1bmN0aW9uIGNsb25lKHgpIHtcbiAgdmFyIHR5cGUgPSBfdHlwZW9mKHgpOyAvLyBpbW11dGFibGUgcHJpbWl0aXZlIHR5cGVzXG5cblxuICBpZiAodHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHg7XG4gIH0gLy8gdXNlIGNsb25lIGZ1bmN0aW9uIG9mIHRoZSBvYmplY3Qgd2hlbiBhdmFpbGFibGVcblxuXG4gIGlmICh0eXBlb2YgeC5jbG9uZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB4LmNsb25lKCk7XG4gIH0gLy8gYXJyYXlcblxuXG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIHgubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGNsb25lKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh4IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIG5ldyBEYXRlKHgudmFsdWVPZigpKTtcbiAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHgpKSByZXR1cm4geDsgLy8gYmlnbnVtYmVycyBhcmUgaW1tdXRhYmxlXG5cbiAgaWYgKHggaW5zdGFuY2VvZiBSZWdFeHApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjbG9uZSAnICsgeCk7IC8vIFRPRE86IGNsb25lIGEgUmVnRXhwXG4gIC8vIG9iamVjdFxuXG4gIHJldHVybiBtYXBPYmplY3QoeCwgY2xvbmUpO1xufVxuLyoqXG4gKiBBcHBseSBtYXAgdG8gYWxsIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGggbWFwcGVkIHByb3BlcnRpZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIG1hcE9iamVjdChvYmplY3QsIGNhbGxiYWNrKSB7XG4gIHZhciBjbG9uZSA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqZWN0LCBrZXkpKSB7XG4gICAgICBjbG9uZVtrZXldID0gY2FsbGJhY2sob2JqZWN0W2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbG9uZTtcbn1cbi8qKlxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhXG4gKiBAcGFyYW0ge09iamVjdH0gYlxuICogQHJldHVybiB7T2JqZWN0fSBhXG4gKi9cblxuXG5mdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICBmb3IgKHZhciBwcm9wIGluIGIpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkoYiwgcHJvcCkpIHtcbiAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhO1xufVxuLyoqXG4gKiBEZWVwIGV4dGVuZCBhbiBvYmplY3QgYSB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiXG4gKiBAcGFyYW0ge09iamVjdH0gYVxuICogQHBhcmFtIHtPYmplY3R9IGJcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBkZWVwRXh0ZW5kKGEsIGIpIHtcbiAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXG4gIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQnKTtcbiAgfVxuXG4gIGZvciAodmFyIHByb3AgaW4gYikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShiLCBwcm9wKSkge1xuICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhW3Byb3BdID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYVtwcm9wXSAmJiBhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhO1xufVxuLyoqXG4gKiBEZWVwIHRlc3QgZXF1YWxpdHkgb2YgYWxsIGZpZWxkcyBpbiB0d28gcGFpcnMgb2YgYXJyYXlzIG9yIG9iamVjdHMuXG4gKiBDb21wYXJlcyB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBzdHJpY3RseSAoaWUuIDIgaXMgbm90IHRoZSBzYW1lIGFzICcyJykuXG4gKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBhXG4gKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlZXBTdHJpY3RFcXVhbChhLCBiKSB7XG4gIHZhciBwcm9wLCBpLCBsZW47XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKCFkZWVwU3RyaWN0RXF1YWwoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH0gZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGIpIHx8ICEoYiBpbnN0YW5jZW9mIE9iamVjdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHByb3AgaW4gYSkge1xuICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTVW5maWx0ZXJlZEZvckluTG9vcFxuICAgICAgaWYgKCEocHJvcCBpbiBiKSB8fCAhZGVlcFN0cmljdEVxdWFsKGFbcHJvcF0sIGJbcHJvcF0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHByb3AgaW4gYikge1xuICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTVW5maWx0ZXJlZEZvckluTG9vcFxuICAgICAgaWYgKCEocHJvcCBpbiBhKSB8fCAhZGVlcFN0cmljdEVxdWFsKGFbcHJvcF0sIGJbcHJvcF0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBmbGF0dGVuIGEgbmVzdGVkIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBuZXN0ZWRPYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgZmxhdHRlbmVkIG9iamVjdFxuICovXG5cblxuZnVuY3Rpb24gZGVlcEZsYXR0ZW4obmVzdGVkT2JqZWN0KSB7XG4gIHZhciBmbGF0dGVuZWRPYmplY3QgPSB7fTtcblxuICBfZGVlcEZsYXR0ZW4obmVzdGVkT2JqZWN0LCBmbGF0dGVuZWRPYmplY3QpO1xuXG4gIHJldHVybiBmbGF0dGVuZWRPYmplY3Q7XG59IC8vIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGRlZXBGbGF0dGVuXG5cblxuZnVuY3Rpb24gX2RlZXBGbGF0dGVuKG5lc3RlZE9iamVjdCwgZmxhdHRlbmVkT2JqZWN0KSB7XG4gIGZvciAodmFyIHByb3AgaW4gbmVzdGVkT2JqZWN0KSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KG5lc3RlZE9iamVjdCwgcHJvcCkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG5lc3RlZE9iamVjdFtwcm9wXTtcblxuICAgICAgaWYgKF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBfZGVlcEZsYXR0ZW4odmFsdWUsIGZsYXR0ZW5lZE9iamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbGF0dGVuZWRPYmplY3RbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgZW5naW5lIHN1cHBvcnRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiBzdXBwb3J0ZWRcbiAqL1xuXG5cbmZ1bmN0aW9uIGNhbkRlZmluZVByb3BlcnR5KCkge1xuICAvLyB0ZXN0IG5lZWRlZCBmb3IgYnJva2VuIElFOCBpbXBsZW1lbnRhdGlvblxuICB0cnkge1xuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3gnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge31cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogQXR0YWNoIGEgbGF6eSBsb2FkaW5nIHByb3BlcnR5IHRvIGEgY29uc3RhbnQuXG4gKiBUaGUgZ2l2ZW4gZnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBmaXJzdCByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAgICAgICAgIE9iamVjdCB3aGVyZSB0byBhZGQgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCAgICAgICAgICAgUHJvcGVydHkgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gdmFsdWVSZXNvbHZlciBGdW5jdGlvbiByZXR1cm5pbmcgdGhlIHByb3BlcnR5IHZhbHVlLiBDYWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGFyZ3VtZW50cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGxhenkob2JqZWN0LCBwcm9wLCB2YWx1ZVJlc29sdmVyKSB7XG4gIHZhciBfdW5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgdmFyIF92YWx1ZTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBpZiAoX3VuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgX3ZhbHVlID0gdmFsdWVSZXNvbHZlcigpO1xuICAgICAgICBfdW5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3ZhbHVlO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgX3VuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuLyoqXG4gKiBUcmF2ZXJzZSBhIHBhdGggaW50byBhbiBvYmplY3QuXG4gKiBXaGVuIGEgbmFtZXNwYWNlIGlzIG1pc3NpbmcsIGl0IHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gcGF0aCAgIEEgZG90IHNlcGFyYXRlZCBzdHJpbmcgbGlrZSAnbmFtZS5zcGFjZSdcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgb2JqZWN0IGF0IHRoZSBlbmQgb2YgdGhlIHBhdGhcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyYXZlcnNlKG9iamVjdCwgcGF0aCkge1xuICBpZiAocGF0aCAmJiB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHJhdmVyc2Uob2JqZWN0LCBwYXRoLnNwbGl0KCcuJykpO1xuICB9XG5cbiAgdmFyIG9iaiA9IG9iamVjdDtcblxuICBpZiAocGF0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG5cbiAgICAgIGlmICghKGtleSBpbiBvYmopKSB7XG4gICAgICAgIG9ialtrZXldID0ge307XG4gICAgICB9XG5cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG4vKipcbiAqIEEgc2FmZSBoYXNPd25Qcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5XG4gKi9cblxuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSB7XG4gIHJldHVybiBvYmplY3QgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBvYmplY3QgaXMgYSBmYWN0b3J5LiBhIGZhY3RvcnkgaGFzIGZpZWxkczpcbiAqXG4gKiAtIGZhY3Rvcnk6IGZ1bmN0aW9uICh0eXBlOiBPYmplY3QsIGNvbmZpZzogT2JqZWN0LCBsb2FkOiBmdW5jdGlvbiwgdHlwZWQ6IGZ1bmN0aW9uIFssIG1hdGg6IE9iamVjdF0pICAgKHJlcXVpcmVkKVxuICogLSBuYW1lOiBzdHJpbmcgKG9wdGlvbmFsKVxuICogLSBwYXRoOiBzdHJpbmcgICAgQSBkb3Qgc2VwYXJhdGVkIHBhdGggKG9wdGlvbmFsKVxuICogLSBtYXRoOiBib29sZWFuICAgSWYgdHJ1ZSAoZmFsc2UgYnkgZGVmYXVsdCksIHRoZSBtYXRoIG5hbWVzcGFjZSBpcyBwYXNzZWRcbiAqICAgICAgICAgICAgICAgICAgIGFzIGZpZnRoIGFyZ3VtZW50IG9mIHRoZSBmYWN0b3J5IGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSBvYmplY3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNMZWdhY3lGYWN0b3J5KG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3QuZmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogR2V0IGEgbmVzdGVkIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBwYXRoXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGlzUGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuIGdldChvYmplY3QsIHBhdGguc3BsaXQoJy4nKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmplY3RbcGF0aF07XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkID0gb2JqZWN0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuICAgIGNoaWxkID0gY2hpbGQgPyBjaGlsZFtrZXldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkO1xufVxuLyoqXG4gKiBTZXQgYSBuZXN0ZWQgcHJvcGVydHkgaW4gYW4gb2JqZWN0XG4gKiBNdXRhdGVzIHRoZSBvYmplY3QgaXRzZWxmXG4gKiBJZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IHBhdGhcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBzZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGlzUGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuIHNldChvYmplY3QsIHBhdGguc3BsaXQoJy4nKSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3RbcGF0aF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkID0gb2JqZWN0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpXTtcblxuICAgIGlmIChjaGlsZFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkW2tleV0gPSB7fTtcbiAgICB9XG5cbiAgICBjaGlsZCA9IGNoaWxkW2tleV07XG4gIH1cblxuICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxhc3RLZXkgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgY2hpbGRbbGFzdEtleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBvYmplY3QgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcGVydGllc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW3RyYW5zZm9ybV0gT3B0aW9uYWwgdmFsdWUgdG8gdHJhbnNmb3JtIGEgdmFsdWUgd2hlbiBwaWNraW5nIGl0XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBwaWNrKG9iamVjdCwgcHJvcGVydGllcywgdHJhbnNmb3JtKSB7XG4gIHZhciBjb3B5ID0ge307XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHByb3BlcnRpZXNbaV07XG4gICAgdmFyIHZhbHVlID0gZ2V0KG9iamVjdCwga2V5KTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXQoY29weSwga2V5LCB0cmFuc2Zvcm0gPyB0cmFuc2Zvcm0odmFsdWUsIGtleSkgOiB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvcHk7XG59XG4vKipcbiAqIFNoYWxsb3cgdmVyc2lvbiBvZiBwaWNrLCBjcmVhdGluZyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBvYmplY3QgcHJvcGVydGllc1xuICogYnV0IG5vdCBmb3IgbmVzdGVkIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BlcnRpZXNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIHBpY2tTaGFsbG93KG9iamVjdCwgcHJvcGVydGllcykge1xuICB2YXIgY29weSA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn0gLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHRlc3Qgd2hldGhlciBhIHN0cmluZyBjb250YWlucyBhIHBhdGggbGlrZSAndXNlci5uYW1lJ1xuXG5cbmZ1bmN0aW9uIGlzUGF0aChzdHIpIHtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKCcuJykgIT09IC0xO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBUT0RPOiByZW1vdmUgdGhlc2UgcG9seWZpbGxzIGFzIHNvb24gYXMgd2UgaGF2ZSBhIGJ1aWxkIHByb2Nlc3MgdGhhdCB0cmFuc3BpbGVzIHRoZSBjb2RlIHRvIEVTNVxuLy8gUG9seWZpbGwgZm9yIElFIDExIChOdW1iZXIuaXNGaW5pdGUgaXMgdXNlZCBpbiBgY29tcGxleC5qc2ApXG4vLyBzb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL051bWJlci9pc0Zpbml0ZVxuTnVtYmVyLmlzRmluaXRlID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSk7XG59OyAvLyBQb2x5ZmlsbCBmb3IgSUUgMTFcbi8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTnVtYmVyL2lzTmFOXG5cblxuTnVtYmVyLmlzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZHVjdCA9IHByb2R1Y3Q7XG5cbi8qKiBAcGFyYW0ge251bWJlcn0gaVxuICogIEBwYXJhbSB7bnVtYmVyfSBuXG4gKiAgQHJldHVybnMge251bWJlcn0gcHJvZHVjdCBvZiBpIHRvIG5cbiAqL1xuZnVuY3Rpb24gcHJvZHVjdChpLCBuKSB7XG4gIGlmIChuIDwgaSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKG4gPT09IGkpIHtcbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIHZhciBoYWxmID0gbiArIGkgPj4gMTsgLy8gZGl2aWRlIChuICsgaSkgYnkgMiBhbmQgdHJ1bmNhdGUgdG8gaW50ZWdlclxuXG4gIHJldHVybiBwcm9kdWN0KGksIGhhbGYpICogcHJvZHVjdChoYWxmICsgMSwgbik7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVuZHNXaXRoID0gZW5kc1dpdGg7XG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGU7XG5leHBvcnRzLmNvbXBhcmVUZXh0ID0gY29tcGFyZVRleHQ7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9udW1iZXJcIik7XG5cbnZhciBfZm9ybWF0dGVyID0gcmVxdWlyZShcIi4vYmlnbnVtYmVyL2Zvcm1hdHRlclwiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENoZWNrIGlmIGEgdGV4dCBlbmRzIHdpdGggYSBjZXJ0YWluIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHRleHQsIHNlYXJjaCkge1xuICB2YXIgc3RhcnQgPSB0ZXh0Lmxlbmd0aCAtIHNlYXJjaC5sZW5ndGg7XG4gIHZhciBlbmQgPSB0ZXh0Lmxlbmd0aDtcbiAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpID09PSBzZWFyY2g7XG59XG4vKipcbiAqIEZvcm1hdCBhIHZhbHVlIG9mIGFueSB0eXBlIGludG8gYSBzdHJpbmcuXG4gKlxuICogVXNhZ2U6XG4gKiAgICAgbWF0aC5mb3JtYXQodmFsdWUpXG4gKiAgICAgbWF0aC5mb3JtYXQodmFsdWUsIHByZWNpc2lvbilcbiAqXG4gKiBXaGVuIHZhbHVlIGlzIGEgZnVuY3Rpb246XG4gKlxuICogLSBXaGVuIHRoZSBmdW5jdGlvbiBoYXMgYSBwcm9wZXJ0eSBgc3ludGF4YCwgaXQgcmV0dXJucyB0aGlzXG4gKiAgIHN5bnRheCBkZXNjcmlwdGlvbi5cbiAqIC0gSW4gb3RoZXIgY2FzZXMsIGEgc3RyaW5nIGAnZnVuY3Rpb24nYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBXaGVuIGB2YWx1ZWAgaXMgYW4gT2JqZWN0OlxuICpcbiAqIC0gV2hlbiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgcHJvcGVydHkgYGZvcm1hdGAgYmVpbmcgYSBmdW5jdGlvbiwgdGhpc1xuICogICBmdW5jdGlvbiBpcyBpbnZva2VkIGFzIGB2YWx1ZS5mb3JtYXQob3B0aW9ucylgIGFuZCB0aGUgcmVzdWx0IGlzIHJldHVybmVkLlxuICogLSBXaGVuIHRoZSBvYmplY3QgaGFzIGl0cyBvd24gYHRvU3RyaW5nYCBtZXRob2QsIHRoaXMgbWV0aG9kIGlzIGludm9rZWRcbiAqICAgYW5kIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQuXG4gKiAtIEluIG90aGVyIGNhc2VzIHRoZSBmdW5jdGlvbiB3aWxsIGxvb3Agb3ZlciBhbGwgb2JqZWN0IHByb3BlcnRpZXMgYW5kXG4gKiAgIHJldHVybiBKU09OIG9iamVjdCBub3RhdGlvbiBsaWtlICd7XCJhXCI6IDIsIFwiYlwiOiAzfScuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqICAgICBtYXRoLmZvcm1hdCgyLzcpICAgICAgICAgICAgICAgIC8vICcwLjI4NTcxNDI4NTcxNDI4NTcnXG4gKiAgICAgbWF0aC5mb3JtYXQobWF0aC5waSwgMykgICAgICAgICAvLyAnMy4xNCdcbiAqICAgICBtYXRoLmZvcm1hdChuZXcgQ29tcGxleCgyLCAzKSkgIC8vICcyICsgM2knXG4gKiAgICAgbWF0aC5mb3JtYXQoJ2hlbGxvJykgICAgICAgICAgICAvLyAnXCJoZWxsb1wiJ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgICAgICAgICAgICAgVmFsdWUgdG8gYmUgc3RyaW5naWZpZWRcbiAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAoMCwgX251bWJlci5mb3JtYXQpKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKDAsIF9mb3JtYXR0ZXIuZm9ybWF0KSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH0gLy8gbm90ZTogd2UgdXNlIHVuc2FmZSBkdWNrLXR5cGluZyBoZXJlIHRvIGNoZWNrIGZvciBGcmFjdGlvbnMsIHRoaXMgaXNcbiAgLy8gb2sgaGVyZSBzaW5jZSB3ZSdyZSBvbmx5IGludm9raW5nIHRvU3RyaW5nIG9yIGNvbmNhdGVuYXRpbmcgaXRzIHZhbHVlc1xuXG5cbiAgaWYgKGxvb2tzTGlrZUZyYWN0aW9uKHZhbHVlKSkge1xuICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmZyYWN0aW9uICE9PSAnZGVjaW1hbCcpIHtcbiAgICAgIC8vIG91dHB1dCBhcyByYXRpbywgbGlrZSAnMS8zJ1xuICAgICAgcmV0dXJuIHZhbHVlLnMgKiB2YWx1ZS5uICsgJy8nICsgdmFsdWUuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IGFzIGRlY2ltYWwsIGxpa2UgJzAuKDMpJ1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdEFycmF5KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgoMCwgX2lzLmlzU3RyaW5nKSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJ1wiJyArIHZhbHVlICsgJ1wiJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWUuc3ludGF4ID8gU3RyaW5nKHZhbHVlLnN5bnRheCkgOiAnZnVuY3Rpb24nO1xuICB9XG5cbiAgaWYgKHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgIGlmICh0eXBlb2YgdmFsdWUuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZm9ybWF0KG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUudG9TdHJpbmcob3B0aW9ucykgIT09IHt9LnRvU3RyaW5nKCkpIHtcbiAgICAgIC8vIHRoaXMgb2JqZWN0IGhhcyBhIG5vbi1uYXRpdmUgdG9TdHJpbmcgbWV0aG9kLCB1c2UgdGhhdCBvbmVcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZyhvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVudHJpZXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuICdcIicgKyBrZXkgKyAnXCI6ICcgKyBmb3JtYXQodmFsdWVba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAneycgKyBlbnRyaWVzLmpvaW4oJywgJykgKyAnfSc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG4vKipcbiAqIFN0cmluZ2lmeSBhIHZhbHVlIGludG8gYSBzdHJpbmcgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3Rlcy5cbiAqIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyBpbnNpZGUgdGhlIHZhbHVlIGFyZSBlc2NhcGVkLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlKSB7XG4gIHZhciB0ZXh0ID0gU3RyaW5nKHZhbHVlKTtcbiAgdmFyIGVzY2FwZWQgPSAnJztcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgdGV4dC5sZW5ndGgpIHtcbiAgICB2YXIgYyA9IHRleHQuY2hhckF0KGkpO1xuXG4gICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgZXNjYXBlZCArPSBjO1xuICAgICAgaSsrO1xuICAgICAgYyA9IHRleHQuY2hhckF0KGkpO1xuXG4gICAgICBpZiAoYyA9PT0gJycgfHwgJ1wiXFxcXC9iZm5ydHUnLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgIGVzY2FwZWQgKz0gJ1xcXFwnOyAvLyBubyB2YWxpZCBlc2NhcGUgY2hhcmFjdGVyIC0+IGVzY2FwZSBpdFxuICAgICAgfVxuXG4gICAgICBlc2NhcGVkICs9IGM7XG4gICAgfSBlbHNlIGlmIChjID09PSAnXCInKSB7XG4gICAgICBlc2NhcGVkICs9ICdcXFxcXCInO1xuICAgIH0gZWxzZSB7XG4gICAgICBlc2NhcGVkICs9IGM7XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuICdcIicgKyBlc2NhcGVkICsgJ1wiJztcbn1cbi8qKlxuICogRXNjYXBlIHNwZWNpYWwgSFRNTCBjaGFyYWN0ZXJzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBlc2NhcGUodmFsdWUpIHtcbiAgdmFyIHRleHQgPSBTdHJpbmcodmFsdWUpO1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC8nL2csICcmIzM5OycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gIHJldHVybiB0ZXh0O1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBmb3JtYXQgYW4gbi1kaW1lbnNpb25hbCBtYXRyaXhcbiAqIEV4YW1wbGUgb3V0cHV0OiBcIltbMSwgMl0sIFszLCA0XV1cIlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gKi9cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShhcnJheSwgb3B0aW9ucykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICB2YXIgc3RyID0gJ1snO1xuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzdHIgKz0gJywgJztcbiAgICAgIH1cblxuICAgICAgc3RyICs9IGZvcm1hdEFycmF5KGFycmF5W2ldLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJ10nO1xuICAgIHJldHVybiBzdHI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZvcm1hdChhcnJheSwgb3B0aW9ucyk7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHZhbHVlIGxvb2tzIGxpa2UgYSBGcmFjdGlvbiAodW5zYWZlIGR1Y2stdHlwZSBjaGVjaylcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBsb29rc0xpa2VGcmFjdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS5zID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUubiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlLmQgPT09ICdudW1iZXInIHx8IGZhbHNlO1xufVxuLyoqXG4gKiBDb21wYXJlIHR3byBzdHJpbmdzXG4gKiBAcGFyYW0ge3N0cmluZ30geFxuICogQHBhcmFtIHtzdHJpbmd9IHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5mdW5jdGlvbiBjb21wYXJlVGV4dCh4LCB5KSB7XG4gIC8vIHdlIGRvbid0IHdhbnQgdG8gY29udmVydCBudW1iZXJzIHRvIHN0cmluZywgb25seSBhY2NlcHQgc3RyaW5nIGlucHV0XG4gIGlmICghKDAsIF9pcy5pc1N0cmluZykoeCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gY29tcGFyZVRleHQgJyArICcoZXhwZWN0ZWQ6IHN0cmluZyBvciBBcnJheSBvciBNYXRyaXgsIGFjdHVhbDogJyArICgwLCBfaXMudHlwZU9mKSh4KSArICcsIGluZGV4OiAwKScpO1xuICB9XG5cbiAgaWYgKCEoMCwgX2lzLmlzU3RyaW5nKSh5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBjb21wYXJlVGV4dCAnICsgJyhleHBlY3RlZDogc3RyaW5nIG9yIEFycmF5IG9yIE1hdHJpeCwgYWN0dWFsOiAnICsgKDAsIF9pcy50eXBlT2YpKHkpICsgJywgaW5kZXg6IDEpJyk7XG4gIH1cblxuICByZXR1cm4geCA9PT0geSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmVyc2lvbiA9IHZvaWQgMDtcbnZhciB2ZXJzaW9uID0gJzYuNi41JzsgLy8gTm90ZTogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdoZW4gYnVpbGRpbmcgbWF0aC5qcy5cbi8vIENoYW5nZXMgbWFkZSBpbiB0aGlzIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbi5cblxuZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2xpYi9lbnRyeS9tYWluQW55JylcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB3aWR0aCA9IDI1NjsvLyBlYWNoIFJDNCBvdXRwdXQgaXMgMCA8PSB4IDwgMjU2XHJcbnZhciBjaHVua3MgPSA2Oy8vIGF0IGxlYXN0IHNpeCBSQzQgb3V0cHV0cyBmb3IgZWFjaCBkb3VibGVcclxudmFyIGRpZ2l0cyA9IDUyOy8vIHRoZXJlIGFyZSA1MiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYSBkb3VibGVcclxudmFyIHBvb2wgPSBbXTsvLyBwb29sOiBlbnRyb3B5IHBvb2wgc3RhcnRzIGVtcHR5XHJcbnZhciBHTE9CQUwgPSB0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcclxuXHJcbi8vXHJcbi8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWxhdGVkIHRvIElFRUUgNzU0IGxpbWl0cy5cclxuLy9cclxudmFyIHN0YXJ0ZGVub20gPSBNYXRoLnBvdyh3aWR0aCwgY2h1bmtzKSxcclxuICAgIHNpZ25pZmljYW5jZSA9IE1hdGgucG93KDIsIGRpZ2l0cyksXHJcbiAgICBvdmVyZmxvdyA9IHNpZ25pZmljYW5jZSAqIDIsXHJcbiAgICBtYXNrID0gd2lkdGggLSAxO1xyXG5cclxuXHJcbnZhciBvbGRSYW5kb20gPSBNYXRoLnJhbmRvbTtcclxuXHJcbi8vXHJcbi8vIHNlZWRyYW5kb20oKVxyXG4vLyBUaGlzIGlzIHRoZSBzZWVkcmFuZG9tIGZ1bmN0aW9uIGRlc2NyaWJlZCBhYm92ZS5cclxuLy9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzZWVkLCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nbG9iYWwgPT09IHRydWUpIHtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gZmFsc2U7XHJcbiAgICBNYXRoLnJhbmRvbSA9IG1vZHVsZS5leHBvcnRzKHNlZWQsIG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSB0cnVlO1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tO1xyXG4gIH1cclxuICB2YXIgdXNlX2VudHJvcHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVudHJvcHkpIHx8IGZhbHNlO1xyXG4gIHZhciBrZXkgPSBbXTtcclxuXHJcbiAgLy8gRmxhdHRlbiB0aGUgc2VlZCBzdHJpbmcgb3IgYnVpbGQgb25lIGZyb20gbG9jYWwgZW50cm9weSBpZiBuZWVkZWQuXHJcbiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKFxyXG4gICAgdXNlX2VudHJvcHkgPyBbc2VlZCwgdG9zdHJpbmcocG9vbCldIDpcclxuICAgIDAgaW4gYXJndW1lbnRzID8gc2VlZCA6IGF1dG9zZWVkKCksIDMpLCBrZXkpO1xyXG5cclxuICAvLyBVc2UgdGhlIHNlZWQgdG8gaW5pdGlhbGl6ZSBhbiBBUkM0IGdlbmVyYXRvci5cclxuICB2YXIgYXJjNCA9IG5ldyBBUkM0KGtleSk7XHJcblxyXG4gIC8vIE1peCB0aGUgcmFuZG9tbmVzcyBpbnRvIGFjY3VtdWxhdGVkIGVudHJvcHkuXHJcbiAgbWl4a2V5KHRvc3RyaW5nKGFyYzQuUyksIHBvb2wpO1xyXG5cclxuICAvLyBPdmVycmlkZSBNYXRoLnJhbmRvbVxyXG5cclxuICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByYW5kb20gZG91YmxlIGluIFswLCAxKSB0aGF0IGNvbnRhaW5zXHJcbiAgLy8gcmFuZG9tbmVzcyBpbiBldmVyeSBiaXQgb2YgdGhlIG1hbnRpc3NhIG9mIHRoZSBJRUVFIDc1NCB2YWx1ZS5cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAgICAgICAgIC8vIENsb3N1cmUgdG8gcmV0dXJuIGEgcmFuZG9tIGRvdWJsZTpcclxuICAgIHZhciBuID0gYXJjNC5nKGNodW5rcyksICAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBudW1lcmF0b3IgbiA8IDIgXiA0OFxyXG4gICAgICAgIGQgPSBzdGFydGRlbm9tLCAgICAgICAgICAgICAgICAgLy8gICBhbmQgZGVub21pbmF0b3IgZCA9IDIgXiA0OC5cclxuICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG5vICdleHRyYSBsYXN0IGJ5dGUnLlxyXG4gICAgd2hpbGUgKG4gPCBzaWduaWZpY2FuY2UpIHsgICAgICAgICAgLy8gRmlsbCB1cCBhbGwgc2lnbmlmaWNhbnQgZGlnaXRzIGJ5XHJcbiAgICAgIG4gPSAobiArIHgpICogd2lkdGg7ICAgICAgICAgICAgICAvLyAgIHNoaWZ0aW5nIG51bWVyYXRvciBhbmRcclxuICAgICAgZCAqPSB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVub21pbmF0b3IgYW5kIGdlbmVyYXRpbmcgYVxyXG4gICAgICB4ID0gYXJjNC5nKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgbGVhc3Qtc2lnbmlmaWNhbnQtYnl0ZS5cclxuICAgIH1cclxuICAgIHdoaWxlIChuID49IG92ZXJmbG93KSB7ICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHJvdW5kaW5nIHVwLCBiZWZvcmUgYWRkaW5nXHJcbiAgICAgIG4gLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxhc3QgYnl0ZSwgc2hpZnQgZXZlcnl0aGluZ1xyXG4gICAgICBkIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICByaWdodCB1c2luZyBpbnRlZ2VyIE1hdGggdW50aWxcclxuICAgICAgeCA+Pj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2UgaGF2ZSBleGFjdGx5IHRoZSBkZXNpcmVkIGJpdHMuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG4gKyB4KSAvIGQ7ICAgICAgICAgICAgICAgICAvLyBGb3JtIHRoZSBudW1iZXIgd2l0aGluIFswLCAxKS5cclxuICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMucmVzZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgTWF0aC5yYW5kb20gPSBvbGRSYW5kb207XHJcbn07XHJcblxyXG4vL1xyXG4vLyBBUkM0XHJcbi8vXHJcbi8vIEFuIEFSQzQgaW1wbGVtZW50YXRpb24uICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBrZXkgaW4gdGhlIGZvcm0gb2ZcclxuLy8gYW4gYXJyYXkgb2YgYXQgbW9zdCAod2lkdGgpIGludGVnZXJzIHRoYXQgc2hvdWxkIGJlIDAgPD0geCA8ICh3aWR0aCkuXHJcbi8vXHJcbi8vIFRoZSBnKGNvdW50KSBtZXRob2QgcmV0dXJucyBhIHBzZXVkb3JhbmRvbSBpbnRlZ2VyIHRoYXQgY29uY2F0ZW5hdGVzXHJcbi8vIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBmcm9tIEFSQzQuICBJdHMgcmV0dXJuIHZhbHVlIGlzIGEgbnVtYmVyIHhcclxuLy8gdGhhdCBpcyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgKHdpZHRoIF4gY291bnQpLlxyXG4vL1xyXG4vKiogQGNvbnN0cnVjdG9yICovXHJcbmZ1bmN0aW9uIEFSQzQoa2V5KSB7XHJcbiAgdmFyIHQsIGtleWxlbiA9IGtleS5sZW5ndGgsXHJcbiAgICAgIG1lID0gdGhpcywgaSA9IDAsIGogPSBtZS5pID0gbWUuaiA9IDAsIHMgPSBtZS5TID0gW107XHJcblxyXG4gIC8vIFRoZSBlbXB0eSBrZXkgW10gaXMgdHJlYXRlZCBhcyBbMF0uXHJcbiAgaWYgKCFrZXlsZW4pIHsga2V5ID0gW2tleWxlbisrXTsgfVxyXG5cclxuICAvLyBTZXQgdXAgUyB1c2luZyB0aGUgc3RhbmRhcmQga2V5IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxyXG4gIHdoaWxlIChpIDwgd2lkdGgpIHtcclxuICAgIHNbaV0gPSBpKys7XHJcbiAgfVxyXG4gIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XHJcbiAgICBzW2ldID0gc1tqID0gbWFzayAmIChqICsga2V5W2kgJSBrZXlsZW5dICsgKHQgPSBzW2ldKSldO1xyXG4gICAgc1tqXSA9IHQ7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgXCJnXCIgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGFzIG9uZSBudW1iZXIuXHJcbiAgKG1lLmcgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgLy8gVXNpbmcgaW5zdGFuY2UgbWVtYmVycyBpbnN0ZWFkIG9mIGNsb3N1cmUgc3RhdGUgbmVhcmx5IGRvdWJsZXMgc3BlZWQuXHJcbiAgICB2YXIgdCwgciA9IDAsXHJcbiAgICAgICAgaSA9IG1lLmksIGogPSBtZS5qLCBzID0gbWUuUztcclxuICAgIHdoaWxlIChjb3VudC0tKSB7XHJcbiAgICAgIHQgPSBzW2kgPSBtYXNrICYgKGkgKyAxKV07XHJcbiAgICAgIHIgPSByICogd2lkdGggKyBzW21hc2sgJiAoKHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyB0KV0pICsgKHNbal0gPSB0KSldO1xyXG4gICAgfVxyXG4gICAgbWUuaSA9IGk7IG1lLmogPSBqO1xyXG4gICAgcmV0dXJuIHI7XHJcbiAgICAvLyBGb3Igcm9idXN0IHVucHJlZGljdGFiaWxpdHkgZGlzY2FyZCBhbiBpbml0aWFsIGJhdGNoIG9mIHZhbHVlcy5cclxuICAgIC8vIFNlZSBodHRwOi8vd3d3LnJzYS5jb20vcnNhbGFicy9ub2RlLmFzcD9pZD0yMDA5XHJcbiAgfSkod2lkdGgpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBmbGF0dGVuKClcclxuLy8gQ29udmVydHMgYW4gb2JqZWN0IHRyZWUgdG8gbmVzdGVkIGFycmF5cyBvZiBzdHJpbmdzLlxyXG4vL1xyXG5mdW5jdGlvbiBmbGF0dGVuKG9iaiwgZGVwdGgpIHtcclxuICB2YXIgcmVzdWx0ID0gW10sIHR5cCA9ICh0eXBlb2Ygb2JqKVswXSwgcHJvcDtcclxuICBpZiAoZGVwdGggJiYgdHlwID09ICdvJykge1xyXG4gICAgZm9yIChwcm9wIGluIG9iaikge1xyXG4gICAgICB0cnkgeyByZXN1bHQucHVzaChmbGF0dGVuKG9ialtwcm9wXSwgZGVwdGggLSAxKSk7IH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAocmVzdWx0Lmxlbmd0aCA/IHJlc3VsdCA6IHR5cCA9PSAncycgPyBvYmogOiBvYmogKyAnXFwwJyk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIG1peGtleSgpXHJcbi8vIE1peGVzIGEgc3RyaW5nIHNlZWQgaW50byBhIGtleSB0aGF0IGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBhbmRcclxuLy8gcmV0dXJucyBhIHNob3J0ZW5lZCBzdHJpbmcgc2VlZCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlc3VsdCBrZXkuXHJcbi8vXHJcbmZ1bmN0aW9uIG1peGtleShzZWVkLCBrZXkpIHtcclxuICB2YXIgc3RyaW5nc2VlZCA9IHNlZWQgKyAnJywgc21lYXIsIGogPSAwO1xyXG4gIHdoaWxlIChqIDwgc3RyaW5nc2VlZC5sZW5ndGgpIHtcclxuICAgIGtleVttYXNrICYgal0gPVxyXG4gICAgICBtYXNrICYgKChzbWVhciBePSBrZXlbbWFzayAmIGpdICogMTkpICsgc3RyaW5nc2VlZC5jaGFyQ29kZUF0KGorKykpO1xyXG4gIH1cclxuICByZXR1cm4gdG9zdHJpbmcoa2V5KTtcclxufVxyXG5cclxuLy9cclxuLy8gYXV0b3NlZWQoKVxyXG4vLyBSZXR1cm5zIGFuIG9iamVjdCBmb3IgYXV0b3NlZWRpbmcsIHVzaW5nIHdpbmRvdy5jcnlwdG8gaWYgYXZhaWxhYmxlLlxyXG4vL1xyXG4vKiogQHBhcmFtIHtVaW50OEFycmF5PX0gc2VlZCAqL1xyXG5mdW5jdGlvbiBhdXRvc2VlZChzZWVkKSB7XHJcbiAgdHJ5IHtcclxuICAgIEdMT0JBTC5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHNlZWQgPSBuZXcgVWludDhBcnJheSh3aWR0aCkpO1xyXG4gICAgcmV0dXJuIHRvc3RyaW5nKHNlZWQpO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBbK25ldyBEYXRlLCBHTE9CQUwsIEdMT0JBTC5uYXZpZ2F0b3IgJiYgR0xPQkFMLm5hdmlnYXRvci5wbHVnaW5zLFxyXG4gICAgICAgICAgICBHTE9CQUwuc2NyZWVuLCB0b3N0cmluZyhwb29sKV07XHJcbiAgfVxyXG59XHJcblxyXG4vL1xyXG4vLyB0b3N0cmluZygpXHJcbi8vIENvbnZlcnRzIGFuIGFycmF5IG9mIGNoYXJjb2RlcyB0byBhIHN0cmluZ1xyXG4vL1xyXG5mdW5jdGlvbiB0b3N0cmluZyhhKSB7XHJcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIFdoZW4gc2VlZHJhbmRvbS5qcyBpcyBsb2FkZWQsIHdlIGltbWVkaWF0ZWx5IG1peCBhIGZldyBiaXRzXHJcbi8vIGZyb20gdGhlIGJ1aWx0LWluIFJORyBpbnRvIHRoZSBlbnRyb3B5IHBvb2wuICBCZWNhdXNlIHdlIGRvXHJcbi8vIG5vdCB3YW50IHRvIGludGVmZXJlIHdpdGggZGV0ZXJtaW5zdGljIFBSTkcgc3RhdGUgbGF0ZXIsXHJcbi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBNYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyXHJcbi8vIGluaXRpYWxpemF0aW9uLlxyXG4vL1xyXG5taXhrZXkoTWF0aC5yYW5kb20oKSwgcG9vbCk7XHJcbiIsImZ1bmN0aW9uIEUgKCkge1xuICAvLyBLZWVwIHRoaXMgZW1wdHkgc28gaXQncyBlYXNpZXIgdG8gaW5oZXJpdCBmcm9tXG4gIC8vICh2aWEgaHR0cHM6Ly9naXRodWIuY29tL2xpcHNtYWNrIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0Y29yZ2FuL3RpbnktZW1pdHRlci9pc3N1ZXMvMylcbn1cblxuRS5wcm90b3R5cGUgPSB7XG4gIG9uOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGN0eCkge1xuICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7XG5cbiAgICAoZVtuYW1lXSB8fCAoZVtuYW1lXSA9IFtdKSkucHVzaCh7XG4gICAgICBmbjogY2FsbGJhY2ssXG4gICAgICBjdHg6IGN0eFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgb25jZTogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjdHgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgZnVuY3Rpb24gbGlzdGVuZXIgKCkge1xuICAgICAgc2VsZi5vZmYobmFtZSwgbGlzdGVuZXIpO1xuICAgICAgY2FsbGJhY2suYXBwbHkoY3R4LCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBsaXN0ZW5lci5fID0gY2FsbGJhY2tcbiAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBsaXN0ZW5lciwgY3R4KTtcbiAgfSxcblxuICBlbWl0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBkYXRhID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHZhciBldnRBcnIgPSAoKHRoaXMuZSB8fCAodGhpcy5lID0ge30pKVtuYW1lXSB8fCBbXSkuc2xpY2UoKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGxlbiA9IGV2dEFyci5sZW5ndGg7XG5cbiAgICBmb3IgKGk7IGkgPCBsZW47IGkrKykge1xuICAgICAgZXZ0QXJyW2ldLmZuLmFwcGx5KGV2dEFycltpXS5jdHgsIGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIG9mZjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGUgPSB0aGlzLmUgfHwgKHRoaXMuZSA9IHt9KTtcbiAgICB2YXIgZXZ0cyA9IGVbbmFtZV07XG4gICAgdmFyIGxpdmVFdmVudHMgPSBbXTtcblxuICAgIGlmIChldnRzICYmIGNhbGxiYWNrKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXZ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZXZ0c1tpXS5mbiAhPT0gY2FsbGJhY2sgJiYgZXZ0c1tpXS5mbi5fICE9PSBjYWxsYmFjaylcbiAgICAgICAgICBsaXZlRXZlbnRzLnB1c2goZXZ0c1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGV2ZW50IGZyb20gcXVldWUgdG8gcHJldmVudCBtZW1vcnkgbGVha1xuICAgIC8vIFN1Z2dlc3RlZCBieSBodHRwczovL2dpdGh1Yi5jb20vbGF6ZFxuICAgIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0Y29yZ2FuL3RpbnktZW1pdHRlci9jb21taXQvYzZlYmZhYTliYzk3M2IzM2QxMTBhODRhMzA3NzQyYjdjZjk0Yzk1MyNjb21taXRjb21tZW50LTUwMjQ5MTBcblxuICAgIChsaXZlRXZlbnRzLmxlbmd0aClcbiAgICAgID8gZVtuYW1lXSA9IGxpdmVFdmVudHNcbiAgICAgIDogZGVsZXRlIGVbbmFtZV07XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFO1xubW9kdWxlLmV4cG9ydHMuVGlueUVtaXR0ZXIgPSBFO1xuIiwiLyoqXG4gKiB0eXBlZC1mdW5jdGlvblxuICpcbiAqIFR5cGUgY2hlY2tpbmcgZm9yIEphdmFTY3JpcHQgZnVuY3Rpb25zXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy90eXBlZC1mdW5jdGlvblxuICovXG4ndXNlIHN0cmljdCc7XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgIGRlZmluZShbXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gT2xkTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XG4gICAgLy8gb25seSBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMsXG4gICAgLy8gbGlrZSBPbGROb2RlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgcm9vdC50eXBlZCA9IGZhY3RvcnkoKTtcbiAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gb2sgKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90T2sgKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuZGVmICgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHt7XG4gICAqICAgcGFyYW1zOiBQYXJhbVtdLFxuICAgKiAgIGZuOiBmdW5jdGlvblxuICAgKiB9fSBTaWduYXR1cmVcbiAgICpcbiAgICogQHR5cGVkZWYge3tcbiAgICogICB0eXBlczogVHlwZVtdLFxuICAgKiAgIHJlc3RQYXJhbTogYm9vbGVhblxuICAgKiB9fSBQYXJhbVxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIG5hbWU6IHN0cmluZyxcbiAgICogICB0eXBlSW5kZXg6IG51bWJlcixcbiAgICogICB0ZXN0OiBmdW5jdGlvbixcbiAgICogICBjb252ZXJzaW9uPzogQ29udmVyc2lvbkRlZixcbiAgICogICBjb252ZXJzaW9uSW5kZXg6IG51bWJlcixcbiAgICogfX0gVHlwZVxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIGZyb206IHN0cmluZyxcbiAgICogICB0bzogc3RyaW5nLFxuICAgKiAgIGNvbnZlcnQ6IGZ1bmN0aW9uICgqKSA6ICpcbiAgICogfX0gQ29udmVyc2lvbkRlZlxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIG5hbWU6IHN0cmluZyxcbiAgICogICB0ZXN0OiBmdW5jdGlvbigqKSA6IGJvb2xlYW5cbiAgICogfX0gVHlwZURlZlxuICAgKi9cblxuICAvLyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdHlwZWQtZnVuY3Rpb25cbiAgZnVuY3Rpb24gY3JlYXRlICgpIHtcbiAgICAvLyBkYXRhIHR5cGUgdGVzdHNcbiAgICB2YXIgX3R5cGVzID0gW1xuICAgICAgeyBuYW1lOiAnbnVtYmVyJywgICAgdGVzdDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyB9IH0sXG4gICAgICB7IG5hbWU6ICdzdHJpbmcnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnIH0gfSxcbiAgICAgIHsgbmFtZTogJ2Jvb2xlYW4nLCAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nIH0gfSxcbiAgICAgIHsgbmFtZTogJ0Z1bmN0aW9uJywgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJ30gfSxcbiAgICAgIHsgbmFtZTogJ0FycmF5JywgICAgIHRlc3Q6IEFycmF5LmlzQXJyYXkgfSxcbiAgICAgIHsgbmFtZTogJ0RhdGUnLCAgICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgRGF0ZSB9IH0sXG4gICAgICB7IG5hbWU6ICdSZWdFeHAnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCBpbnN0YW5jZW9mIFJlZ0V4cCB9IH0sXG4gICAgICB7IG5hbWU6ICdPYmplY3QnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwgJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0XG4gICAgICB9fSxcbiAgICAgIHsgbmFtZTogJ251bGwnLCAgICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ID09PSBudWxsIH0gfSxcbiAgICAgIHsgbmFtZTogJ3VuZGVmaW5lZCcsIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ID09PSB1bmRlZmluZWQgfSB9XG4gICAgXTtcblxuICAgIHZhciBhbnlUeXBlID0ge1xuICAgICAgbmFtZTogJ2FueScsXG4gICAgICB0ZXN0OiBva1xuICAgIH1cblxuICAgIC8vIHR5cGVzIHdoaWNoIG5lZWQgdG8gYmUgaWdub3JlZFxuICAgIHZhciBfaWdub3JlID0gW107XG5cbiAgICAvLyB0eXBlIGNvbnZlcnNpb25zXG4gICAgdmFyIF9jb252ZXJzaW9ucyA9IFtdO1xuXG4gICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBvYmplY3QsIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHR5cGVkIGZ1bmN0aW9uIGF0IHRoZSBlbmRcbiAgICB2YXIgdHlwZWQgPSB7XG4gICAgICB0eXBlczogX3R5cGVzLFxuICAgICAgY29udmVyc2lvbnM6IF9jb252ZXJzaW9ucyxcbiAgICAgIGlnbm9yZTogX2lnbm9yZVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIHRoZSB0ZXN0IGZ1bmN0aW9uIGZvciBhIHR5cGVcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZU5hbWVcbiAgICAgKiBAcmV0dXJuIHtUeXBlRGVmfSBSZXR1cm5zIHRoZSB0eXBlIGRlZmluaXRpb24gd2hlbiBmb3VuZCxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGEgVHlwZUVycm9yIG90aGVyd2lzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRUeXBlQnlOYW1lICh0eXBlTmFtZSkge1xuICAgICAgdmFyIGVudHJ5ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkubmFtZSA9PT0gdHlwZU5hbWU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVOYW1lID09PSAnYW55JykgeyAvLyBzcGVjaWFsIGJha2VkLWluIGNhc2UgJ2FueSdcbiAgICAgICAgcmV0dXJuIGFueVR5cGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBoaW50ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkubmFtZS50b0xvd2VyQ2FzZSgpID09PSB0eXBlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gdHlwZSBcIicgKyB0eXBlTmFtZSArICdcIicgK1xuICAgICAgICAgIChoaW50ID8gKCcuIERpZCB5b3UgbWVhbiBcIicgKyBoaW50Lm5hbWUgKyAnXCI/JykgOiAnJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIGluZGV4IG9mIGEgdHlwZSBkZWZpbml0aW9uLiBIYW5kbGVzIHNwZWNpYWwgY2FzZSAnYW55J1xuICAgICAqIEBwYXJhbSB7VHlwZURlZn0gdHlwZVxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kVHlwZUluZGV4KHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09PSBhbnlUeXBlKSB7XG4gICAgICAgIHJldHVybiA5OTk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlZC50eXBlcy5pbmRleE9mKHR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSB0eXBlIHRoYXQgbWF0Y2hlcyBhIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IHR5cGUgZm9yIHdoaWNoXG4gICAgICogICAgICAgICAgICAgICAgICB0aGUgdHlwZSB0ZXN0IG1hdGNoZXMgdGhlIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRUeXBlTmFtZSh2YWx1ZSkge1xuICAgICAgdmFyIGVudHJ5ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkudGVzdCh2YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeS5uYW1lO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBoYXMgdW5rbm93biB0eXBlLiBWYWx1ZTogJyArIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgc3BlY2lmaWMgc2lnbmF0dXJlIGZyb20gYSAoY29tcG9zZWQpIHR5cGVkIGZ1bmN0aW9uLCBmb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqICAgdHlwZWQuZmluZChmbiwgWydudW1iZXInLCAnc3RyaW5nJ10pXG4gICAgICogICB0eXBlZC5maW5kKGZuLCAnbnVtYmVyLCBzdHJpbmcnKVxuICAgICAqXG4gICAgICogRnVuY3Rpb24gZmluZCBvbmx5IG9ubHkgd29ya3MgZm9yIGV4YWN0IG1hdGNoZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgICAgICAgICAgICAgICAgICBBIHR5cGVkLWZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gc2lnbmF0dXJlICAgU2lnbmF0dXJlIHRvIGJlIGZvdW5kLCBjYW4gYmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcnJheSBvciBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcuXG4gICAgICogQHJldHVybiB7RnVuY3Rpb259ICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbWF0Y2hpbmcgc2lnbmF0dXJlLCBvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBhbiBlcnJvciB3aGVuIG5vIHNpZ25hdHVyZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZvdW5kLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmQgKGZuLCBzaWduYXR1cmUpIHtcbiAgICAgIGlmICghZm4uc2lnbmF0dXJlcykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbiBpcyBubyB0eXBlZC1mdW5jdGlvbicpO1xuICAgICAgfVxuXG4gICAgICAvLyBub3JtYWxpemUgaW5wdXRcbiAgICAgIHZhciBhcnI7XG4gICAgICBpZiAodHlwZW9mIHNpZ25hdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYXJyID0gc2lnbmF0dXJlLnNwbGl0KCcsJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJyW2ldID0gYXJyW2ldLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzaWduYXR1cmUpKSB7XG4gICAgICAgIGFyciA9IHNpZ25hdHVyZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgYXJyYXkgb3IgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHIgPSBhcnIuam9pbignLCcpO1xuXG4gICAgICAvLyBmaW5kIGFuIGV4YWN0IG1hdGNoXG4gICAgICB2YXIgbWF0Y2ggPSBmbi5zaWduYXR1cmVzW3N0cl07XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBleHRlbmQgZmluZCB0byBtYXRjaCBub24tZXhhY3Qgc2lnbmF0dXJlc1xuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTaWduYXR1cmUgbm90IGZvdW5kIChzaWduYXR1cmU6ICcgKyAoZm4ubmFtZSB8fCAndW5uYW1lZCcpICsgJygnICsgYXJyLmpvaW4oJywgJykgKyAnKSknKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgZ2l2ZW4gdmFsdWUgdG8gYW5vdGhlciBkYXRhIHR5cGUuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29udmVydCAodmFsdWUsIHR5cGUpIHtcbiAgICAgIHZhciBmcm9tID0gZmluZFR5cGVOYW1lKHZhbHVlKTtcblxuICAgICAgLy8gY2hlY2sgY29udmVyc2lvbiBpcyBuZWVkZWRcbiAgICAgIGlmICh0eXBlID09PSBmcm9tKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZC5jb252ZXJzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29udmVyc2lvbiA9IHR5cGVkLmNvbnZlcnNpb25zW2ldO1xuICAgICAgICBpZiAoY29udmVyc2lvbi5mcm9tID09PSBmcm9tICYmIGNvbnZlcnNpb24udG8gPT09IHR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gY29udmVyc2lvbi5jb252ZXJ0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGZyb20gJyArIGZyb20gKyAnIHRvICcgKyB0eXBlKTtcbiAgICB9XG4gICAgXG4gICAgLyoqXG4gICAgICogU3RyaW5naWZ5IHBhcmFtZXRlcnMgaW4gYSBub3JtYWxpemVkIHdheVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0cmluZ2lmeVBhcmFtcyAocGFyYW1zKSB7XG4gICAgICByZXR1cm4gcGFyYW1zXG4gICAgICAgICAgLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgICAgIHZhciB0eXBlTmFtZXMgPSBwYXJhbS50eXBlcy5tYXAoZ2V0VHlwZU5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gKHBhcmFtLnJlc3RQYXJhbSA/ICcuLi4nIDogJycpICsgdHlwZU5hbWVzLmpvaW4oJ3wnKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2UgYSBwYXJhbWV0ZXIsIGxpa2UgXCIuLi5udW1iZXIgfCBib29sZWFuXCJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1cbiAgICAgKiBAcGFyYW0ge0NvbnZlcnNpb25EZWZbXX0gY29udmVyc2lvbnNcbiAgICAgKiBAcmV0dXJuIHtQYXJhbX0gcGFyYW1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtIChwYXJhbSwgY29udmVyc2lvbnMpIHtcbiAgICAgIHZhciByZXN0UGFyYW0gPSBwYXJhbS5pbmRleE9mKCcuLi4nKSA9PT0gMDtcbiAgICAgIHZhciB0eXBlcyA9ICghcmVzdFBhcmFtKVxuICAgICAgICAgID8gcGFyYW1cbiAgICAgICAgICA6IChwYXJhbS5sZW5ndGggPiAzKVxuICAgICAgICAgICAgICA/IHBhcmFtLnNsaWNlKDMpXG4gICAgICAgICAgICAgIDogJ2FueSc7XG5cbiAgICAgIHZhciB0eXBlTmFtZXMgPSB0eXBlcy5zcGxpdCgnfCcpLm1hcCh0cmltKVxuICAgICAgICAgIC5maWx0ZXIobm90RW1wdHkpXG4gICAgICAgICAgLmZpbHRlcihub3RJZ25vcmUpO1xuXG4gICAgICB2YXIgbWF0Y2hpbmdDb252ZXJzaW9ucyA9IGZpbHRlckNvbnZlcnNpb25zKGNvbnZlcnNpb25zLCB0eXBlTmFtZXMpO1xuXG4gICAgICB2YXIgZXhhY3RUeXBlcyA9IHR5cGVOYW1lcy5tYXAoZnVuY3Rpb24gKHR5cGVOYW1lKSB7XG4gICAgICAgIHZhciB0eXBlID0gZmluZFR5cGVCeU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdHlwZU5hbWUsXG4gICAgICAgICAgdHlwZUluZGV4OiBmaW5kVHlwZUluZGV4KHR5cGUpLFxuICAgICAgICAgIHRlc3Q6IHR5cGUudGVzdCxcbiAgICAgICAgICBjb252ZXJzaW9uOiBudWxsLFxuICAgICAgICAgIGNvbnZlcnNpb25JbmRleDogLTFcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY29udmVydGlibGVUeXBlcyA9IG1hdGNoaW5nQ29udmVyc2lvbnMubWFwKGZ1bmN0aW9uIChjb252ZXJzaW9uKSB7XG4gICAgICAgIHZhciB0eXBlID0gZmluZFR5cGVCeU5hbWUoY29udmVyc2lvbi5mcm9tKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbnZlcnNpb24uZnJvbSxcbiAgICAgICAgICB0eXBlSW5kZXg6IGZpbmRUeXBlSW5kZXgodHlwZSksXG4gICAgICAgICAgdGVzdDogdHlwZS50ZXN0LFxuICAgICAgICAgIGNvbnZlcnNpb246IGNvbnZlcnNpb24sXG4gICAgICAgICAgY29udmVyc2lvbkluZGV4OiBjb252ZXJzaW9ucy5pbmRleE9mKGNvbnZlcnNpb24pXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZXM6IGV4YWN0VHlwZXMuY29uY2F0KGNvbnZlcnRpYmxlVHlwZXMpLFxuICAgICAgICByZXN0UGFyYW06IHJlc3RQYXJhbVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBhIHNpZ25hdHVyZSB3aXRoIGNvbW1hIHNlcGFyYXRlZCBwYXJhbWV0ZXJzLFxuICAgICAqIGxpa2UgXCJudW1iZXIgfCBib29sZWFuLCAuLi5zdHJpbmdcIlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmVcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmblxuICAgICAqIEBwYXJhbSB7Q29udmVyc2lvbkRlZltdfSBjb252ZXJzaW9uc1xuICAgICAqIEByZXR1cm4ge1NpZ25hdHVyZSB8IG51bGx9IHNpZ25hdHVyZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlIChzaWduYXR1cmUsIGZuLCBjb252ZXJzaW9ucykge1xuICAgICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgcGFyYW1zID0gc2lnbmF0dXJlXG4gICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcCh0cmltKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocGFyYW0sIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICB2YXIgcGFyc2VkUGFyYW0gPSBwYXJzZVBhcmFtKHBhcmFtLCBjb252ZXJzaW9ucyk7XG5cbiAgICAgICAgICAgICAgaWYgKHBhcnNlZFBhcmFtLnJlc3RQYXJhbSAmJiAoaW5kZXggIT09IGFycmF5Lmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdVbmV4cGVjdGVkIHJlc3QgcGFyYW1ldGVyIFwiJyArIHBhcmFtICsgJ1wiOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ29ubHkgYWxsb3dlZCBmb3IgdGhlIGxhc3QgcGFyYW1ldGVyJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUGFyYW07XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuc29tZShpc0ludmFsaWRQYXJhbSkpIHtcbiAgICAgICAgLy8gaW52YWxpZCBzaWduYXR1cmU6IGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgaGFzIG5vIHR5cGVzXG4gICAgICAgIC8vICh0aGV5IG1heSBoYXZlIGJlZW4gZmlsdGVyZWQpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgZm46IGZuXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhIHNldCBvZiBwYXJhbXMgY29udGFpbnMgYSByZXN0UGFyYW1cbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXN0IHBhcmFtZXRlciBpcyBhIHJlc3RQYXJhbVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc1Jlc3RQYXJhbShwYXJhbXMpIHtcbiAgICAgIHZhciBwYXJhbSA9IGxhc3QocGFyYW1zKVxuICAgICAgcmV0dXJuIHBhcmFtID8gcGFyYW0ucmVzdFBhcmFtIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGEgcGFyYW1ldGVyIGNvbnRhaW5zIGNvbnZlcnNpb25zXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgb2YgdGhlIHBhcmFtZXRlcnNcbiAgICAgKiAgICAgICAgICAgICAgICAgICBjb250YWlucyBhIGNvbnZlcnNpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzQ29udmVyc2lvbnMocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbS50eXBlcy5zb21lKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0eXBlLmNvbnZlcnNpb24gIT0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHR5cGUgdGVzdCBmb3IgYSBzaW5nbGUgcGFyYW1ldGVyLCB3aGljaCBjYW4gaGF2ZSBvbmUgb3IgbXVsdGlwbGVcbiAgICAgKiB0eXBlcy5cbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge2Z1bmN0aW9uKHg6ICopIDogYm9vbGVhbn0gUmV0dXJucyBhIHRlc3QgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlVGVzdChwYXJhbSkge1xuICAgICAgaWYgKCFwYXJhbSB8fCBwYXJhbS50eXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChwYXJhbS50eXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRUeXBlQnlOYW1lKHBhcmFtLnR5cGVzWzBdLm5hbWUpLnRlc3Q7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChwYXJhbS50eXBlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgdmFyIHRlc3QwID0gZmluZFR5cGVCeU5hbWUocGFyYW0udHlwZXNbMF0ubmFtZSkudGVzdDtcbiAgICAgICAgdmFyIHRlc3QxID0gZmluZFR5cGVCeU5hbWUocGFyYW0udHlwZXNbMV0ubmFtZSkudGVzdDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG9yKHgpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdDAoeCkgfHwgdGVzdDEoeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyBwYXJhbS50eXBlcy5sZW5ndGggPiAyXG4gICAgICAgIHZhciB0ZXN0cyA9IHBhcmFtLnR5cGVzLm1hcChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgIHJldHVybiBmaW5kVHlwZUJ5TmFtZSh0eXBlLm5hbWUpLnRlc3Q7XG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBvcih4KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRlc3RzW2ldKHgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0ZXN0IGZvciBhbGwgcGFyYW1ldGVycyBvZiBhIHNpZ25hdHVyZVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHJldHVybiB7ZnVuY3Rpb24oYXJnczogQXJyYXk8Kj4pIDogYm9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlVGVzdHMocGFyYW1zKSB7XG4gICAgICB2YXIgdGVzdHMsIHRlc3QwLCB0ZXN0MTtcblxuICAgICAgaWYgKGhhc1Jlc3RQYXJhbShwYXJhbXMpKSB7XG4gICAgICAgIC8vIHZhcmlhYmxlIGFyZ3VtZW50cyBsaWtlICcuLi5udW1iZXInXG4gICAgICAgIHRlc3RzID0gaW5pdGlhbChwYXJhbXMpLm1hcChjb21waWxlVGVzdCk7XG4gICAgICAgIHZhciB2YXJJbmRleCA9IHRlc3RzLmxlbmd0aDtcbiAgICAgICAgdmFyIGxhc3RUZXN0ID0gY29tcGlsZVRlc3QobGFzdChwYXJhbXMpKTtcbiAgICAgICAgdmFyIHRlc3RSZXN0UGFyYW0gPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSB2YXJJbmRleDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghbGFzdFRlc3QoYXJnc1tpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0ZXN0c1tpXShhcmdzW2ldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0ZXN0UmVzdFBhcmFtKGFyZ3MpICYmIChhcmdzLmxlbmd0aCA+PSB2YXJJbmRleCArIDEpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIG5vIHZhcmlhYmxlIGFyZ3VtZW50c1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGVzdDAgPSBjb21waWxlVGVzdChwYXJhbXNbMF0pO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVzdDAoYXJnc1swXSkgJiYgYXJncy5sZW5ndGggPT09IDE7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGVzdDAgPSBjb21waWxlVGVzdChwYXJhbXNbMF0pO1xuICAgICAgICAgIHRlc3QxID0gY29tcGlsZVRlc3QocGFyYW1zWzFdKTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRlc3QwKGFyZ3NbMF0pICYmIHRlc3QxKGFyZ3NbMV0pICYmIGFyZ3MubGVuZ3RoID09PSAyO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIGFyZ3VtZW50cy5sZW5ndGggPiAyXG4gICAgICAgICAgdGVzdHMgPSBwYXJhbXMubWFwKGNvbXBpbGVUZXN0KTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoIXRlc3RzW2ldKGFyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IHRlc3RzLmxlbmd0aDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgcGFyYW1ldGVyIGF0IGEgc3BlY2lmaWMgaW5kZXggb2YgYSBzaWduYXR1cmUuXG4gICAgICogSGFuZGxlcyByZXN0IHBhcmFtZXRlcnMuXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgICAqIEByZXR1cm4ge1BhcmFtIHwgbnVsbH0gUmV0dXJucyB0aGUgbWF0Y2hpbmcgcGFyYW1ldGVyIHdoZW4gZm91bmQsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBudWxsIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQYXJhbUF0SW5kZXgoc2lnbmF0dXJlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4IDwgc2lnbmF0dXJlLnBhcmFtcy5sZW5ndGhcbiAgICAgICAgICA/IHNpZ25hdHVyZS5wYXJhbXNbaW5kZXhdXG4gICAgICAgICAgOiBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcylcbiAgICAgICAgICAgICAgPyBsYXN0KHNpZ25hdHVyZS5wYXJhbXMpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgdHlwZSBuYW1lcyBvZiBhIHBhcmFtZXRlclxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlfSBzaWduYXR1cmVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVDb252ZXJzaW9uc1xuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBSZXR1cm5zIGFuIGFycmF5IHdpdGggdHlwZSBuYW1lc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEV4cGVjdGVkVHlwZU5hbWVzIChzaWduYXR1cmUsIGluZGV4LCBleGNsdWRlQ29udmVyc2lvbnMpIHtcbiAgICAgIHZhciBwYXJhbSA9IGdldFBhcmFtQXRJbmRleChzaWduYXR1cmUsIGluZGV4KTtcbiAgICAgIHZhciB0eXBlcyA9IHBhcmFtXG4gICAgICAgICAgPyBleGNsdWRlQ29udmVyc2lvbnNcbiAgICAgICAgICAgICAgICAgID8gcGFyYW0udHlwZXMuZmlsdGVyKGlzRXhhY3RUeXBlKVxuICAgICAgICAgICAgICAgICAgOiBwYXJhbS50eXBlc1xuICAgICAgICAgIDogW107XG5cbiAgICAgIHJldHVybiB0eXBlcy5tYXAoZ2V0VHlwZU5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSB0eXBlXG4gICAgICogQHBhcmFtIHtUeXBlfSB0eXBlXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0eXBlIG5hbWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRUeXBlTmFtZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZS5uYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhIHR5cGUgaXMgYW4gZXhhY3QgdHlwZSBvciBjb252ZXJzaW9uXG4gICAgICogQHBhcmFtIHtUeXBlfSB0eXBlXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0V4YWN0VHlwZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZS5jb252ZXJzaW9uID09PSBudWxsIHx8IHR5cGUuY29udmVyc2lvbiA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgZXJyb3IgbWVzc2FnZXM6IGNyZWF0ZSBhbiBhcnJheSB3aXRoXG4gICAgICogYWxsIGF2YWlsYWJsZSB0eXBlcyBvbiBhIHNwZWNpZmljIGFyZ3VtZW50IGluZGV4LlxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlW119IHNpZ25hdHVyZXNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gUmV0dXJucyBhbiBhcnJheSB3aXRoIGF2YWlsYWJsZSB0eXBlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lcmdlRXhwZWN0ZWRQYXJhbXMoc2lnbmF0dXJlcywgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlTmFtZXMgPSB1bmlxKGZsYXRNYXAoc2lnbmF0dXJlcywgZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gZ2V0RXhwZWN0ZWRUeXBlTmFtZXMoc2lnbmF0dXJlLCBpbmRleCwgZmFsc2UpO1xuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gKHR5cGVOYW1lcy5pbmRleE9mKCdhbnknKSAhPT0gLTEpID8gWydhbnknXSA6IHR5cGVOYW1lcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge2FycmF5LjwqPn0gYXJncyAgICAgICAgICBUaGUgYWN0dWFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmVbXX0gc2lnbmF0dXJlcyAgQSBsaXN0IHdpdGggYXZhaWxhYmxlIHNpZ25hdHVyZXNcbiAgICAgKiBAcmV0dXJuIHtUeXBlRXJyb3J9IFJldHVybnMgYSB0eXBlIGVycm9yIHdpdGggYWRkaXRpb25hbCBkYXRhXG4gICAgICogICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZCB0byBpdCBpbiB0aGUgcHJvcGVydHkgYGRhdGFgXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobmFtZSwgYXJncywgc2lnbmF0dXJlcykge1xuICAgICAgdmFyIGVyciwgZXhwZWN0ZWQ7XG4gICAgICB2YXIgX25hbWUgPSBuYW1lIHx8ICd1bm5hbWVkJztcblxuICAgICAgLy8gdGVzdCBmb3Igd3JvbmcgdHlwZSBhdCBzb21lIGluZGV4XG4gICAgICB2YXIgbWF0Y2hpbmdTaWduYXR1cmVzID0gc2lnbmF0dXJlcztcbiAgICAgIHZhciBpbmRleDtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBuZXh0TWF0Y2hpbmdEZWZzID0gbWF0Y2hpbmdTaWduYXR1cmVzLmZpbHRlcihmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgICAgdmFyIHRlc3QgPSBjb21waWxlVGVzdChnZXRQYXJhbUF0SW5kZXgoc2lnbmF0dXJlLCBpbmRleCkpO1xuICAgICAgICAgIHJldHVybiAoaW5kZXggPCBzaWduYXR1cmUucGFyYW1zLmxlbmd0aCB8fCBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcykpICYmXG4gICAgICAgICAgICAgIHRlc3QoYXJnc1tpbmRleF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobmV4dE1hdGNoaW5nRGVmcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBubyBtYXRjaGluZyBzaWduYXR1cmVzIGFueW1vcmUsIHRocm93IGVycm9yIFwid3JvbmcgdHlwZVwiXG4gICAgICAgICAgZXhwZWN0ZWQgPSBtZXJnZUV4cGVjdGVkUGFyYW1zKG1hdGNoaW5nU2lnbmF0dXJlcywgaW5kZXgpO1xuICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgYWN0dWFsVHlwZSA9IGZpbmRUeXBlTmFtZShhcmdzW2luZGV4XSk7XG5cbiAgICAgICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiAnICsgX25hbWUgK1xuICAgICAgICAgICAgICAgICcgKGV4cGVjdGVkOiAnICsgZXhwZWN0ZWQuam9pbignIG9yICcpICtcbiAgICAgICAgICAgICAgICAnLCBhY3R1YWw6ICcgKyBhY3R1YWxUeXBlICsgJywgaW5kZXg6ICcgKyBpbmRleCArICcpJyk7XG4gICAgICAgICAgICBlcnIuZGF0YSA9IHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6ICd3cm9uZ1R5cGUnLFxuICAgICAgICAgICAgICBmbjogX25hbWUsXG4gICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgYWN0dWFsOiBhY3R1YWxUeXBlLFxuICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIG1hdGNoaW5nU2lnbmF0dXJlcyA9IG5leHRNYXRjaGluZ0RlZnM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdGVzdCBmb3IgdG9vIGZldyBhcmd1bWVudHNcbiAgICAgIHZhciBsZW5ndGhzID0gbWF0Y2hpbmdTaWduYXR1cmVzLm1hcChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgIHJldHVybiBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcykgPyBJbmZpbml0eSA6IHNpZ25hdHVyZS5wYXJhbXMubGVuZ3RoO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCBNYXRoLm1pbi5hcHBseShudWxsLCBsZW5ndGhzKSkge1xuICAgICAgICBleHBlY3RlZCA9IG1lcmdlRXhwZWN0ZWRQYXJhbXMobWF0Y2hpbmdTaWduYXR1cmVzLCBpbmRleCk7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1RvbyBmZXcgYXJndW1lbnRzIGluIGZ1bmN0aW9uICcgKyBfbmFtZSArXG4gICAgICAgICAgICAnIChleHBlY3RlZDogJyArIGV4cGVjdGVkLmpvaW4oJyBvciAnKSArXG4gICAgICAgICAgICAnLCBpbmRleDogJyArIGFyZ3MubGVuZ3RoICsgJyknKTtcbiAgICAgICAgZXJyLmRhdGEgPSB7XG4gICAgICAgICAgY2F0ZWdvcnk6ICd0b29GZXdBcmdzJyxcbiAgICAgICAgICBmbjogX25hbWUsXG4gICAgICAgICAgaW5kZXg6IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgICB9XG5cbiAgICAgIC8vIHRlc3QgZm9yIHRvbyBtYW55IGFyZ3VtZW50c1xuICAgICAgdmFyIG1heExlbmd0aCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGxlbmd0aHMpO1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1RvbyBtYW55IGFyZ3VtZW50cyBpbiBmdW5jdGlvbiAnICsgX25hbWUgK1xuICAgICAgICAgICAgJyAoZXhwZWN0ZWQ6ICcgKyBtYXhMZW5ndGggKyAnLCBhY3R1YWw6ICcgKyBhcmdzLmxlbmd0aCArICcpJyk7XG4gICAgICAgIGVyci5kYXRhID0ge1xuICAgICAgICAgIGNhdGVnb3J5OiAndG9vTWFueUFyZ3MnLFxuICAgICAgICAgIGZuOiBfbmFtZSxcbiAgICAgICAgICBpbmRleDogYXJncy5sZW5ndGgsXG4gICAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IG1heExlbmd0aFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgICB9XG5cbiAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBvZiB0eXBlIFwiJyArIGFyZ3Muam9pbignLCAnKSArXG4gICAgICAgICAgJ1wiIGRvIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGRlZmluZWQgc2lnbmF0dXJlcyBvZiBmdW5jdGlvbiAnICsgX25hbWUgKyAnLicpO1xuICAgICAgZXJyLmRhdGEgPSB7XG4gICAgICAgIGNhdGVnb3J5OiAnbWlzbWF0Y2gnLFxuICAgICAgICBhY3R1YWw6IGFyZ3MubWFwKGZpbmRUeXBlTmFtZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgbG93ZXN0IGluZGV4IG9mIGFsbCBleGFjdCB0eXBlcyBvZiBhIHBhcmFtZXRlciAobm8gY29udmVyc2lvbnMpXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsb3dlc3QgdHlwZSBpbiB0eXBlZC50eXBlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldExvd2VzdFR5cGVJbmRleCAocGFyYW0pIHtcbiAgICAgIHZhciBtaW4gPSA5OTk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0udHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzRXhhY3RUeXBlKHBhcmFtLnR5cGVzW2ldKSkge1xuICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcGFyYW0udHlwZXNbaV0udHlwZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWluO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIGxvd2VzdCBpbmRleCBvZiB0aGUgY29udmVyc2lvbiBvZiBhbGwgdHlwZXMgb2YgdGhlIHBhcmFtZXRlclxuICAgICAqIGhhdmluZyBhIGNvbnZlcnNpb25cbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgbG93ZXN0IGluZGV4IG9mIHRoZSBjb252ZXJzaW9ucyBvZiB0aGlzIHR5cGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRMb3dlc3RDb252ZXJzaW9uSW5kZXggKHBhcmFtKSB7XG4gICAgICB2YXIgbWluID0gOTk5O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtLnR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFeGFjdFR5cGUocGFyYW0udHlwZXNbaV0pKSB7XG4gICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBwYXJhbS50eXBlc1tpXS5jb252ZXJzaW9uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtaW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSB0d28gcGFyYW1zXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW0xXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW0yXG4gICAgICogQHJldHVybiB7bnVtYmVyfSByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gcGFyYW0xIG11c3QgZ2V0IGEgbG93ZXJcbiAgICAgKiAgICAgICAgICAgICAgICAgIGluZGV4IHRoYW4gcGFyYW0yLCBhIHBvc2l0aXZlIG51bWJlciB3aGVuIHRoZSBvcHBvc2l0ZSxcbiAgICAgKiAgICAgICAgICAgICAgICAgIG9yIHplcm8gd2hlbiBib3RoIGFyZSBlcXVhbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVQYXJhbXMgKHBhcmFtMSwgcGFyYW0yKSB7XG4gICAgICB2YXIgYztcblxuICAgICAgLy8gY29tcGFyZSBoYXZpbmcgYSByZXN0IHBhcmFtZXRlciBvciBub3RcbiAgICAgIGMgPSBwYXJhbTEucmVzdFBhcmFtIC0gcGFyYW0yLnJlc3RQYXJhbTtcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIGhhdmluZyBjb252ZXJzaW9ucyBvciBub3RcbiAgICAgIGMgPSBoYXNDb252ZXJzaW9ucyhwYXJhbTEpIC0gaGFzQ29udmVyc2lvbnMocGFyYW0yKTtcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIHRoZSBpbmRleCBvZiB0aGUgdHlwZXNcbiAgICAgIGMgPSBnZXRMb3dlc3RUeXBlSW5kZXgocGFyYW0xKSAtIGdldExvd2VzdFR5cGVJbmRleChwYXJhbTIpO1xuICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXBhcmUgdGhlIGluZGV4IG9mIGFueSBjb252ZXJzaW9uXG4gICAgICByZXR1cm4gZ2V0TG93ZXN0Q29udmVyc2lvbkluZGV4KHBhcmFtMSkgLSBnZXRMb3dlc3RDb252ZXJzaW9uSW5kZXgocGFyYW0yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIHR3byBzaWduYXR1cmVzXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZTFcbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlMlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciB3aGVuIHBhcmFtMSBtdXN0IGdldCBhIGxvd2VyXG4gICAgICogICAgICAgICAgICAgICAgICBpbmRleCB0aGFuIHBhcmFtMiwgYSBwb3NpdGl2ZSBudW1iZXIgd2hlbiB0aGUgb3Bwb3NpdGUsXG4gICAgICogICAgICAgICAgICAgICAgICBvciB6ZXJvIHdoZW4gYm90aCBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYXJlU2lnbmF0dXJlcyAoc2lnbmF0dXJlMSwgc2lnbmF0dXJlMikge1xuICAgICAgdmFyIGxlbiA9IE1hdGgubWluKHNpZ25hdHVyZTEucGFyYW1zLmxlbmd0aCwgc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoKTtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIGM7XG5cbiAgICAgIC8vIGNvbXBhcmUgd2hldGhlciB0aGUgcGFyYW1zIGhhdmUgY29udmVyc2lvbnMgYXQgYWxsIG9yIG5vdFxuICAgICAgYyA9IHNpZ25hdHVyZTEucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpIC0gc2lnbmF0dXJlMi5wYXJhbXMuc29tZShoYXNDb252ZXJzaW9ucylcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBuZXh0IGNvbXBhcmUgd2hldGhlciB0aGUgcGFyYW1zIGhhdmUgY29udmVyc2lvbnMgb25lIGJ5IG9uZVxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGMgPSBoYXNDb252ZXJzaW9ucyhzaWduYXR1cmUxLnBhcmFtc1tpXSkgLSBoYXNDb252ZXJzaW9ucyhzaWduYXR1cmUyLnBhcmFtc1tpXSk7XG4gICAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY29tcGFyZSB0aGUgdHlwZXMgb2YgdGhlIHBhcmFtcyBvbmUgYnkgb25lXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYyA9IGNvbXBhcmVQYXJhbXMoc2lnbmF0dXJlMS5wYXJhbXNbaV0sIHNpZ25hdHVyZTIucGFyYW1zW2ldKTtcbiAgICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIHRoZSBudW1iZXIgb2YgcGFyYW1zXG4gICAgICByZXR1cm4gc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoIC0gc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJhbXMgY29udGFpbmluZyBhbGwgdHlwZXMgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIHRoZSBkZWZpbmVkIHR5cGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDb252ZXJzaW9uRGVmW119IGNvbnZlcnNpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gdHlwZU5hbWVzXG4gICAgICogQHJldHVybiB7Q29udmVyc2lvbkRlZltdfSBSZXR1cm5zIHRoZSBjb252ZXJzaW9ucyB0aGF0IGFyZSBhdmFpbGFibGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBldmVyeSB0eXBlIChpZiBhbnkpXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyQ29udmVyc2lvbnMoY29udmVyc2lvbnMsIHR5cGVOYW1lcykge1xuICAgICAgdmFyIG1hdGNoZXMgPSB7fTtcblxuICAgICAgY29udmVyc2lvbnMuZm9yRWFjaChmdW5jdGlvbiAoY29udmVyc2lvbikge1xuICAgICAgICBpZiAodHlwZU5hbWVzLmluZGV4T2YoY29udmVyc2lvbi5mcm9tKSA9PT0gLTEgJiZcbiAgICAgICAgICAgIHR5cGVOYW1lcy5pbmRleE9mKGNvbnZlcnNpb24udG8pICE9PSAtMSAmJlxuICAgICAgICAgICAgIW1hdGNoZXNbY29udmVyc2lvbi5mcm9tXSkge1xuICAgICAgICAgIG1hdGNoZXNbY29udmVyc2lvbi5mcm9tXSA9IGNvbnZlcnNpb247XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMobWF0Y2hlcykubWFwKGZ1bmN0aW9uIChmcm9tKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVzW2Zyb21dO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcHJvY2VzcyBhcmd1bWVudHMgYmVmb3JlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uOlxuICAgICAqIC0gaWYgbmVlZGVkIGNvbnZlcnQgdGhlIHBhcmFtZXRlcnNcbiAgICAgKiAtIGluIGNhc2Ugb2YgcmVzdCBwYXJhbWV0ZXJzLCBtb3ZlIHRoZSByZXN0IHBhcmFtZXRlcnMgaW50byBhbiBBcnJheVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZm5cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlQXJnc1ByZXByb2Nlc3NpbmcocGFyYW1zLCBmbikge1xuICAgICAgdmFyIGZuQ29udmVydCA9IGZuO1xuXG4gICAgICAvLyBUT0RPOiBjYW4gd2UgbWFrZSB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gc21hcnRlci9zaW1wbGVyP1xuXG4gICAgICBpZiAocGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpKSB7XG4gICAgICAgIHZhciByZXN0UGFyYW0gPSBoYXNSZXN0UGFyYW0ocGFyYW1zKTtcbiAgICAgICAgdmFyIGNvbXBpbGVkQ29udmVyc2lvbnMgPSBwYXJhbXMubWFwKGNvbXBpbGVBcmdDb252ZXJzaW9uKVxuXG4gICAgICAgIGZuQ29udmVydCA9IGZ1bmN0aW9uIGNvbnZlcnRBcmdzKCkge1xuICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgdmFyIGxhc3QgPSByZXN0UGFyYW0gPyBhcmd1bWVudHMubGVuZ3RoIC0gMSA6IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0OyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaV0gPSBjb21waWxlZENvbnZlcnNpb25zW2ldKGFyZ3VtZW50c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN0UGFyYW0pIHtcbiAgICAgICAgICAgIGFyZ3NbbGFzdF0gPSBhcmd1bWVudHNbbGFzdF0ubWFwKGNvbXBpbGVkQ29udmVyc2lvbnNbbGFzdF0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZm5QcmVwcm9jZXNzID0gZm5Db252ZXJ0O1xuICAgICAgaWYgKGhhc1Jlc3RQYXJhbShwYXJhbXMpKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSBwYXJhbXMubGVuZ3RoIC0gMTtcblxuICAgICAgICBmblByZXByb2Nlc3MgPSBmdW5jdGlvbiBwcmVwcm9jZXNzUmVzdFBhcmFtcyAoKSB7XG4gICAgICAgICAgcmV0dXJuIGZuQ29udmVydC5hcHBseShudWxsLFxuICAgICAgICAgICAgICBzbGljZShhcmd1bWVudHMsIDAsIG9mZnNldCkuY29uY2F0KFtzbGljZShhcmd1bWVudHMsIG9mZnNldCldKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuUHJlcHJvY2VzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21waWxlIGNvbnZlcnNpb24gZm9yIGEgcGFyYW1ldGVyIHRvIHRoZSByaWdodCB0eXBlXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyB0aGUgd3JhcHBlZCBmdW5jdGlvbiB0aGF0IHdpbGwgY29udmVydCBhcmd1bWVudHNcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBpbGVBcmdDb252ZXJzaW9uKHBhcmFtKSB7XG4gICAgICB2YXIgdGVzdDAsIHRlc3QxLCBjb252ZXJzaW9uMCwgY29udmVyc2lvbjE7XG4gICAgICB2YXIgdGVzdHMgPSBbXTtcbiAgICAgIHZhciBjb252ZXJzaW9ucyA9IFtdO1xuXG4gICAgICBwYXJhbS50eXBlcy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlLmNvbnZlcnNpb24pIHtcbiAgICAgICAgICB0ZXN0cy5wdXNoKGZpbmRUeXBlQnlOYW1lKHR5cGUuY29udmVyc2lvbi5mcm9tKS50ZXN0KTtcbiAgICAgICAgICBjb252ZXJzaW9ucy5wdXNoKHR5cGUuY29udmVyc2lvbi5jb252ZXJ0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGNyZWF0ZSBvcHRpbWl6ZWQgY29udmVyc2lvbiBmdW5jdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY29udmVyc2lvbnNcbiAgICAgIHN3aXRjaCAoY29udmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEFyZyhhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0ZXN0MCA9IHRlc3RzWzBdXG4gICAgICAgICAgY29udmVyc2lvbjAgPSBjb252ZXJzaW9uc1swXTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEFyZyhhcmcpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0MChhcmcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb252ZXJzaW9uMChhcmcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGVzdDAgPSB0ZXN0c1swXVxuICAgICAgICAgIHRlc3QxID0gdGVzdHNbMV1cbiAgICAgICAgICBjb252ZXJzaW9uMCA9IGNvbnZlcnNpb25zWzBdO1xuICAgICAgICAgIGNvbnZlcnNpb24xID0gY29udmVyc2lvbnNbMV07XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7XG4gICAgICAgICAgICBpZiAodGVzdDAoYXJnKSkge1xuICAgICAgICAgICAgICByZXR1cm4gY29udmVyc2lvbjAoYXJnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRlc3QxKGFyZykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb24xKGFyZylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnZlcnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0ZXN0c1tpXShhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb25zW2ldKGFyZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW4gYXJyYXkgd2l0aCBzaWduYXR1cmVzIGludG8gYSBtYXAgd2l0aCBzaWduYXR1cmVzLFxuICAgICAqIHdoZXJlIHNpZ25hdHVyZXMgd2l0aCB1bmlvbiB0eXBlcyBhcmUgc3BsaXQgaW50byBzZXBhcmF0ZSBzaWduYXR1cmVzXG4gICAgICpcbiAgICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGVyZSBhcmUgY29uZmxpY3RpbmcgdHlwZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlW119IHNpZ25hdHVyZXNcbiAgICAgKiBAcmV0dXJuIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24+fSAgUmV0dXJucyBhIG1hcCB3aXRoIHNpZ25hdHVyZXNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMga2V5IGFuZCB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhpcyBzaWduYXR1cmUgYXMgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlU2lnbmF0dXJlc01hcChzaWduYXR1cmVzKSB7XG4gICAgICB2YXIgc2lnbmF0dXJlc01hcCA9IHt9O1xuICAgICAgc2lnbmF0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYXR1cmUpIHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmUucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpKSB7XG4gICAgICAgICAgc3BsaXRQYXJhbXMoc2lnbmF0dXJlLnBhcmFtcywgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICBzaWduYXR1cmVzTWFwW3N0cmluZ2lmeVBhcmFtcyhwYXJhbXMpXSA9IHNpZ25hdHVyZS5mbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBzaWduYXR1cmVzTWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwbGl0IHBhcmFtcyB3aXRoIHVuaW9uIHR5cGVzIGluIHRvIHNlcGFyYXRlIHBhcmFtcy5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogICAgIHNwbGl0UGFyYW1zKFtbJ0FycmF5JywgJ09iamVjdCddLCBbJ3N0cmluZycsICdSZWdFeHAnXSlcbiAgICAgKiAgICAgLy8gcmV0dXJuczpcbiAgICAgKiAgICAgLy8gW1xuICAgICAqICAgICAvLyAgIFsnQXJyYXknLCAnc3RyaW5nJ10sXG4gICAgICogICAgIC8vICAgWydBcnJheScsICdSZWdFeHAnXSxcbiAgICAgKiAgICAgLy8gICBbJ09iamVjdCcsICdzdHJpbmcnXSxcbiAgICAgKiAgICAgLy8gICBbJ09iamVjdCcsICdSZWdFeHAnXVxuICAgICAqICAgICAvLyBdXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQ29udmVyc2lvblR5cGVzXG4gICAgICogQHJldHVybiB7UGFyYW1bXX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzcGxpdFBhcmFtcyhwYXJhbXMsIGlnbm9yZUNvbnZlcnNpb25UeXBlcykge1xuICAgICAgZnVuY3Rpb24gX3NwbGl0UGFyYW1zKHBhcmFtcywgaW5kZXgsIHR5cGVzKSB7XG4gICAgICAgIGlmIChpbmRleCA8IHBhcmFtcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJhbXNbaW5kZXhdXG4gICAgICAgICAgdmFyIGZpbHRlcmVkVHlwZXMgPSBpZ25vcmVDb252ZXJzaW9uVHlwZXNcbiAgICAgICAgICAgICAgPyBwYXJhbS50eXBlcy5maWx0ZXIoaXNFeGFjdFR5cGUpXG4gICAgICAgICAgICAgIDogcGFyYW0udHlwZXM7XG4gICAgICAgICAgdmFyIHR5cGVHcm91cHNcblxuICAgICAgICAgIGlmIChwYXJhbS5yZXN0UGFyYW0pIHtcbiAgICAgICAgICAgIC8vIHNwbGl0IHRoZSB0eXBlcyBvZiBhIHJlc3QgcGFyYW1ldGVyIGluIHR3bzpcbiAgICAgICAgICAgIC8vIG9uZSB3aXRoIG9ubHkgZXhhY3QgdHlwZXMsIGFuZCBvbmUgd2l0aCBleGFjdCB0eXBlcyBhbmQgY29udmVyc2lvbnNcbiAgICAgICAgICAgIHZhciBleGFjdFR5cGVzID0gZmlsdGVyZWRUeXBlcy5maWx0ZXIoaXNFeGFjdFR5cGUpXG4gICAgICAgICAgICB0eXBlR3JvdXBzID0gZXhhY3RUeXBlcy5sZW5ndGggPCBmaWx0ZXJlZFR5cGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gW2V4YWN0VHlwZXMsIGZpbHRlcmVkVHlwZXNdXG4gICAgICAgICAgICAgICAgOiBbZmlsdGVyZWRUeXBlc11cblxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNwbGl0IGFsbCB0aGUgdHlwZXMgb2YgYSByZWd1bGFyIHBhcmFtZXRlciBpbnRvIG9uZSB0eXBlIHBlciBncm91cFxuICAgICAgICAgICAgdHlwZUdyb3VwcyA9IGZpbHRlcmVkVHlwZXMubWFwKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbdHlwZV1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcmVjdXJzZSBvdmVyIHRoZSBncm91cHMgd2l0aCB0eXBlc1xuICAgICAgICAgIHJldHVybiBmbGF0TWFwKHR5cGVHcm91cHMsIGZ1bmN0aW9uICh0eXBlR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3BsaXRQYXJhbXMocGFyYW1zLCBpbmRleCArIDEsIHR5cGVzLmNvbmNhdChbdHlwZUdyb3VwXSkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXJzLiBOb3cgYnVpbGQgYSBuZXcgUGFyYW1cbiAgICAgICAgICB2YXIgc3BsaXR0ZWRQYXJhbXMgPSB0eXBlcy5tYXAoZnVuY3Rpb24gKHR5cGUsIHR5cGVJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZXM6IHR5cGUsXG4gICAgICAgICAgICAgIHJlc3RQYXJhbTogKHR5cGVJbmRleCA9PT0gcGFyYW1zLmxlbmd0aCAtIDEpICYmIGhhc1Jlc3RQYXJhbShwYXJhbXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gW3NwbGl0dGVkUGFyYW1zXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3NwbGl0UGFyYW1zKHBhcmFtcywgMCwgW10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciB0d28gc2lnbmF0dXJlcyBoYXZlIGEgY29uZmxpY3Rpbmcgc2lnbmF0dXJlXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZTFcbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlMlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBzaWduYXR1cmVzIGNvbmZsaWN0LCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzQ29uZmxpY3RpbmdQYXJhbXMoc2lnbmF0dXJlMSwgc2lnbmF0dXJlMikge1xuICAgICAgdmFyIGlpID0gTWF0aC5tYXgoc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoLCBzaWduYXR1cmUyLnBhcmFtcy5sZW5ndGgpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgdmFyIHR5cGVzTmFtZXMxID0gZ2V0RXhwZWN0ZWRUeXBlTmFtZXMoc2lnbmF0dXJlMSwgaSwgdHJ1ZSk7XG4gICAgICAgIHZhciB0eXBlc05hbWVzMiA9IGdldEV4cGVjdGVkVHlwZU5hbWVzKHNpZ25hdHVyZTIsIGksIHRydWUpO1xuXG4gICAgICAgIGlmICghaGFzT3ZlcmxhcCh0eXBlc05hbWVzMSwgdHlwZXNOYW1lczIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW4xID0gc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoO1xuICAgICAgdmFyIGxlbjIgPSBzaWduYXR1cmUyLnBhcmFtcy5sZW5ndGg7XG4gICAgICB2YXIgcmVzdFBhcmFtMSA9IGhhc1Jlc3RQYXJhbShzaWduYXR1cmUxLnBhcmFtcyk7XG4gICAgICB2YXIgcmVzdFBhcmFtMiA9IGhhc1Jlc3RQYXJhbShzaWduYXR1cmUyLnBhcmFtcyk7XG5cbiAgICAgIHJldHVybiByZXN0UGFyYW0xXG4gICAgICAgICAgPyByZXN0UGFyYW0yID8gKGxlbjEgPT09IGxlbjIpIDogKGxlbjIgPj0gbGVuMSlcbiAgICAgICAgICA6IHJlc3RQYXJhbTIgPyAobGVuMSA+PSBsZW4yKSAgOiAobGVuMSA9PT0gbGVuMilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0eXBlZCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lICAgICAgICAgICAgICAgVGhlIG5hbWUgZm9yIHRoZSB0eXBlZCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uPn0gc2lnbmF0dXJlc01hcFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggb25lIG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBzaWduYXR1cmVzIGFzIGtleSwgYW5kIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBhcyB2YWx1ZS5cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gIFJldHVybnMgdGhlIGNyZWF0ZWQgdHlwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlVHlwZWRGdW5jdGlvbihuYW1lLCBzaWduYXR1cmVzTWFwKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoc2lnbmF0dXJlc01hcCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignTm8gc2lnbmF0dXJlcyBwcm92aWRlZCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSB0aGUgc2lnbmF0dXJlcywgYW5kIGNoZWNrIGZvciBjb25mbGljdHNcbiAgICAgIHZhciBwYXJzZWRTaWduYXR1cmVzID0gW107XG4gICAgICBPYmplY3Qua2V5cyhzaWduYXR1cmVzTWFwKVxuICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlU2lnbmF0dXJlKHNpZ25hdHVyZSwgc2lnbmF0dXJlc01hcFtzaWduYXR1cmVdLCB0eXBlZC5jb252ZXJzaW9ucyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKG5vdE51bGwpXG4gICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHBhcnNlZFNpZ25hdHVyZSkge1xuICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGlzIHBhcmFtZXRlciBjb25mbGljdHMgd2l0aCBhbHJlYWR5IHBhcnNlZCBzaWduYXR1cmVzXG4gICAgICAgICAgICB2YXIgY29uZmxpY3RpbmdTaWduYXR1cmUgPSBmaW5kSW5BcnJheShwYXJzZWRTaWduYXR1cmVzLCBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFzQ29uZmxpY3RpbmdQYXJhbXMocywgcGFyc2VkU2lnbmF0dXJlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY29uZmxpY3RpbmdTaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29uZmxpY3Rpbmcgc2lnbmF0dXJlcyBcIicgK1xuICAgICAgICAgICAgICAgICAgc3RyaW5naWZ5UGFyYW1zKGNvbmZsaWN0aW5nU2lnbmF0dXJlLnBhcmFtcykgKyAnXCIgYW5kIFwiJyArXG4gICAgICAgICAgICAgICAgICBzdHJpbmdpZnlQYXJhbXMocGFyc2VkU2lnbmF0dXJlLnBhcmFtcykgKyAnXCIuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcnNlZFNpZ25hdHVyZXMucHVzaChwYXJzZWRTaWduYXR1cmUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAvLyBzcGxpdCBhbmQgZmlsdGVyIHRoZSB0eXBlcyBvZiB0aGUgc2lnbmF0dXJlcywgYW5kIHRoZW4gb3JkZXIgdGhlbVxuICAgICAgdmFyIHNpZ25hdHVyZXMgPSBmbGF0TWFwKHBhcnNlZFNpZ25hdHVyZXMsIGZ1bmN0aW9uIChwYXJzZWRTaWduYXR1cmUpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IHBhcnNlZFNpZ25hdHVyZSA/IHNwbGl0UGFyYW1zKHBhcnNlZFNpZ25hdHVyZS5wYXJhbXMsIGZhbHNlKSA6IFtdXG5cbiAgICAgICAgcmV0dXJuIHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIGZuOiBwYXJzZWRTaWduYXR1cmUuZm5cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pLmZpbHRlcihub3ROdWxsKTtcblxuICAgICAgc2lnbmF0dXJlcy5zb3J0KGNvbXBhcmVTaWduYXR1cmVzKTtcblxuICAgICAgLy8gd2UgY3JlYXRlIGEgaGlnaGx5IG9wdGltaXplZCBjaGVja3MgZm9yIHRoZSBmaXJzdCBjb3VwbGUgb2Ygc2lnbmF0dXJlcyB3aXRoIG1heCAyIGFyZ3VtZW50c1xuICAgICAgdmFyIG9rMCA9IHNpZ25hdHVyZXNbMF0gJiYgc2lnbmF0dXJlc1swXS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzBdLnBhcmFtcyk7XG4gICAgICB2YXIgb2sxID0gc2lnbmF0dXJlc1sxXSAmJiBzaWduYXR1cmVzWzFdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbMV0ucGFyYW1zKTtcbiAgICAgIHZhciBvazIgPSBzaWduYXR1cmVzWzJdICYmIHNpZ25hdHVyZXNbMl0ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1syXS5wYXJhbXMpO1xuICAgICAgdmFyIG9rMyA9IHNpZ25hdHVyZXNbM10gJiYgc2lnbmF0dXJlc1szXS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzNdLnBhcmFtcyk7XG4gICAgICB2YXIgb2s0ID0gc2lnbmF0dXJlc1s0XSAmJiBzaWduYXR1cmVzWzRdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbNF0ucGFyYW1zKTtcbiAgICAgIHZhciBvazUgPSBzaWduYXR1cmVzWzVdICYmIHNpZ25hdHVyZXNbNV0ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1s1XS5wYXJhbXMpO1xuICAgICAgdmFyIGFsbE9rID0gb2swICYmIG9rMSAmJiBvazIgJiYgb2szICYmIG9rNCAmJiBvazU7XG5cbiAgICAgIC8vIGNvbXBpbGUgdGhlIHRlc3RzXG4gICAgICB2YXIgdGVzdHMgPSBzaWduYXR1cmVzLm1hcChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgIHJldHVybiBjb21waWxlVGVzdHMoc2lnbmF0dXJlLnBhcmFtcyk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIHRlc3QwMCA9IG9rMCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMF0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QxMCA9IG9rMSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMV0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QyMCA9IG9rMiA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMl0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QzMCA9IG9rMyA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbM10ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3Q0MCA9IG9rNCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNF0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3Q1MCA9IG9rNSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNV0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuXG4gICAgICB2YXIgdGVzdDAxID0gb2swID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1swXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDExID0gb2sxID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1sxXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDIxID0gb2syID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1syXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDMxID0gb2szID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1szXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDQxID0gb2s0ID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1s0XS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDUxID0gb2s1ID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1s1XS5wYXJhbXNbMV0pIDogbm90T2s7XG5cbiAgICAgIC8vIGNvbXBpbGUgdGhlIGZ1bmN0aW9uc1xuICAgICAgdmFyIGZucyA9IHNpZ25hdHVyZXMubWFwKGZ1bmN0aW9uKHNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gY29tcGlsZUFyZ3NQcmVwcm9jZXNzaW5nKHNpZ25hdHVyZS5wYXJhbXMsIHNpZ25hdHVyZS5mbilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZm4wID0gb2swID8gZm5zWzBdIDogdW5kZWY7XG4gICAgICB2YXIgZm4xID0gb2sxID8gZm5zWzFdIDogdW5kZWY7XG4gICAgICB2YXIgZm4yID0gb2syID8gZm5zWzJdIDogdW5kZWY7XG4gICAgICB2YXIgZm4zID0gb2szID8gZm5zWzNdIDogdW5kZWY7XG4gICAgICB2YXIgZm40ID0gb2s0ID8gZm5zWzRdIDogdW5kZWY7XG4gICAgICB2YXIgZm41ID0gb2s1ID8gZm5zWzVdIDogdW5kZWY7XG5cbiAgICAgIHZhciBsZW4wID0gb2swID8gc2lnbmF0dXJlc1swXS5wYXJhbXMubGVuZ3RoIDogLTE7XG4gICAgICB2YXIgbGVuMSA9IG9rMSA/IHNpZ25hdHVyZXNbMV0ucGFyYW1zLmxlbmd0aCA6IC0xO1xuICAgICAgdmFyIGxlbjIgPSBvazIgPyBzaWduYXR1cmVzWzJdLnBhcmFtcy5sZW5ndGggOiAtMTtcbiAgICAgIHZhciBsZW4zID0gb2szID8gc2lnbmF0dXJlc1szXS5wYXJhbXMubGVuZ3RoIDogLTE7XG4gICAgICB2YXIgbGVuNCA9IG9rNCA/IHNpZ25hdHVyZXNbNF0ucGFyYW1zLmxlbmd0aCA6IC0xO1xuICAgICAgdmFyIGxlbjUgPSBvazUgPyBzaWduYXR1cmVzWzVdLnBhcmFtcy5sZW5ndGggOiAtMTtcblxuICAgICAgLy8gc2ltcGxlIGFuZCBnZW5lcmljLCBidXQgYWxzbyBzbG93XG4gICAgICB2YXIgaVN0YXJ0ID0gYWxsT2sgPyA2IDogMDtcbiAgICAgIHZhciBpRW5kID0gc2lnbmF0dXJlcy5sZW5ndGg7XG4gICAgICB2YXIgZ2VuZXJpYyA9IGZ1bmN0aW9uIGdlbmVyaWMoKSB7XG4gICAgICAgICd1c2Ugc3RyaWN0JztcblxuICAgICAgICBmb3IgKHZhciBpID0gaVN0YXJ0OyBpIDwgaUVuZDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRlc3RzW2ldKGFyZ3VtZW50cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmbnNbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihuYW1lLCBhcmd1bWVudHMsIHNpZ25hdHVyZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBjcmVhdGUgdGhlIHR5cGVkIGZ1bmN0aW9uXG4gICAgICAvLyBmYXN0LCBzcGVjaWFsaXplZCB2ZXJzaW9uLiBGYWxscyBiYWNrIHRvIHRoZSBzbG93ZXIsIGdlbmVyaWMgb25lIGlmIG5lZWRlZFxuICAgICAgdmFyIGZuID0gZnVuY3Rpb24gZm4oYXJnMCwgYXJnMSkge1xuICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjAgJiYgdGVzdDAwKGFyZzApICYmIHRlc3QwMShhcmcxKSkgeyByZXR1cm4gZm4wLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjEgJiYgdGVzdDEwKGFyZzApICYmIHRlc3QxMShhcmcxKSkgeyByZXR1cm4gZm4xLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjIgJiYgdGVzdDIwKGFyZzApICYmIHRlc3QyMShhcmcxKSkgeyByZXR1cm4gZm4yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjMgJiYgdGVzdDMwKGFyZzApICYmIHRlc3QzMShhcmcxKSkgeyByZXR1cm4gZm4zLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjQgJiYgdGVzdDQwKGFyZzApICYmIHRlc3Q0MShhcmcxKSkgeyByZXR1cm4gZm40LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjUgJiYgdGVzdDUwKGFyZzApICYmIHRlc3Q1MShhcmcxKSkgeyByZXR1cm4gZm41LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cblxuICAgICAgICByZXR1cm4gZ2VuZXJpYy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBhdHRhY2ggbmFtZSB0aGUgdHlwZWQgZnVuY3Rpb25cbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWU6IG5hbWV9KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gb2xkIGJyb3dzZXJzIGRvIG5vdCBzdXBwb3J0IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBhbmQgc29tZSBkb24ndCBzdXBwb3J0IHNldHRpbmcgdGhlIG5hbWUgcHJvcGVydHlcbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIG5hbWUgaXMgbm90IGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uaW5nLCBpdCdzIG1vc3RseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyxcbiAgICAgICAgLy8gc28gaXQncyBmaW5lIHRvIGhhdmUgdW5uYW1lZCBmdW5jdGlvbnMuXG4gICAgICB9XG5cbiAgICAgIC8vIGF0dGFjaCBzaWduYXR1cmVzIHRvIHRoZSBmdW5jdGlvblxuICAgICAgZm4uc2lnbmF0dXJlcyA9IGNyZWF0ZVNpZ25hdHVyZXNNYXAoc2lnbmF0dXJlcyk7XG5cbiAgICAgIHJldHVybiBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgYSB0eXBlIHNob3VsZCBiZSBOT1QgYmUgaWdub3JlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gbm90SWdub3JlKHR5cGVOYW1lKSB7XG4gICAgICByZXR1cm4gdHlwZWQuaWdub3JlLmluZGV4T2YodHlwZU5hbWUpID09PSAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0cmltIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci50cmltKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGEgc3RyaW5nIGlzIG5vdCBlbXB0eVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vdEVtcHR5KHN0cikge1xuICAgICAgcmV0dXJuICEhc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIG5vdCBzdHJpY3QgZXF1YWwgdG8gbnVsbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vdE51bGwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgYSBwYXJhbWV0ZXIgaGFzIG5vIHR5cGVzIGRlZmluZWRcbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNJbnZhbGlkUGFyYW0gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0udHlwZXMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgYnV0IHRoZSBsYXN0IGl0ZW1zIG9mIGFuIGFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHJldHVybiB7QXJyYXl9XG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdGlhbChhcnIpIHtcbiAgICAgIHJldHVybiBhcnIuc2xpY2UoMCwgYXJyLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgbGFzdCBpdGVtIG9mIGFuIGFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHJldHVybiB7Kn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXN0KGFycikge1xuICAgICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xpY2UgYW4gYXJyYXkgb3IgZnVuY3Rpb24gQXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBcnJheSB8IEFyZ3VtZW50cyB8IElBcmd1bWVudHN9IGFyclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kXVxuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsaWNlKGFyciwgc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyciwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGFuIGFycmF5IGNvbnRhaW5zIHNvbWUgaXRlbVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAgICogQHBhcmFtIHsqfSBpdGVtXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFycmF5IGNvbnRhaW5zIGl0ZW0sIGZhbHNlIGlmIG5vdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciB0d28gYXJyYXlzIGhhdmUgb3ZlcmxhcHBpbmcgaXRlbXNcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheTFcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheTJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgaXRlbSBleGlzdHMgaW4gYm90aCBhcnJheXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNPdmVybGFwKGFycmF5MSwgYXJyYXkyKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29udGFpbnMoYXJyYXkyLCBhcnJheTFbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgZmlyc3QgaXRlbSBmcm9tIGFuIGFycmF5IGZvciB3aGljaCB0ZXN0KGFycltpXSkgcmV0dXJucyB0cnVlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gdGVzdFxuICAgICAqIEByZXR1cm4geyogfCB1bmRlZmluZWR9IFJldHVybnMgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBvciB1bmRlZmluZWQgd2hlbiB0aGVyZSBpcyBubyBtYXRjaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRJbkFycmF5KGFyciwgdGVzdCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRlc3QoYXJyW2ldKSkge1xuICAgICAgICAgIHJldHVybiBhcnJbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIHVuaXF1ZSBpdGVtcyBvZiBhbiBhcnJheSB3aXRoIHN0cmluZ3NcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxKGFycikge1xuICAgICAgdmFyIGVudHJpZXMgPSB7fVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZW50cmllc1thcnJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnRyaWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGbGF0IG1hcCB0aGUgcmVzdWx0IGludm9raW5nIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGl0ZW0gaW4gYW4gYXJyYXkuXG4gICAgICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vc2FtZ2lsZXMvNzYyZWUzMzdkZmY0ODYyM2U3MjlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXAoYXJyLCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFyci5tYXAoY2FsbGJhY2spKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSB0aGUgZnVuY3Rpb24gbmFtZSBmcm9tIGEgc2V0IG9mIHR5cGVkIGZ1bmN0aW9ucyxcbiAgICAgKiBhbmQgY2hlY2sgd2hldGhlciB0aGUgbmFtZSBvZiBhbGwgZnVuY3Rpb25zIG1hdGNoIChpZiBnaXZlbilcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uW119IGZuc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE5hbWUgKGZucykge1xuICAgICAgdmFyIG5hbWUgPSAnJztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZuID0gZm5zW2ldO1xuXG4gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIG5hbWVzIGFyZSB0aGUgc2FtZSB3aGVuIGRlZmluZWRcbiAgICAgICAgaWYgKCh0eXBlb2YgZm4uc2lnbmF0dXJlcyA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZycpICYmIGZuLm5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICBuYW1lID0gZm4ubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAobmFtZSAhPT0gZm4ubmFtZSkge1xuICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignRnVuY3Rpb24gbmFtZXMgZG8gbm90IG1hdGNoIChleHBlY3RlZDogJyArIG5hbWUgKyAnLCBhY3R1YWw6ICcgKyBmbi5uYW1lICsgJyknKTtcbiAgICAgICAgICAgIGVyci5kYXRhID0ge1xuICAgICAgICAgICAgICBhY3R1YWw6IGZuLm5hbWUsXG4gICAgICAgICAgICAgIGV4cGVjdGVkOiBuYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBleHRyYWN0IGFuZCBtZXJnZSBhbGwgc2lnbmF0dXJlcyBvZiBhIGxpc3Qgd2l0aCB0eXBlZCBmdW5jdGlvbnNcbiAgICBmdW5jdGlvbiBleHRyYWN0U2lnbmF0dXJlcyhmbnMpIHtcbiAgICAgIHZhciBlcnI7XG4gICAgICB2YXIgc2lnbmF0dXJlc01hcCA9IHt9O1xuXG4gICAgICBmdW5jdGlvbiB2YWxpZGF0ZVVuaXF1ZShfc2lnbmF0dXJlLCBfZm4pIHtcbiAgICAgICAgaWYgKHNpZ25hdHVyZXNNYXAuaGFzT3duUHJvcGVydHkoX3NpZ25hdHVyZSkgJiYgX2ZuICE9PSBzaWduYXR1cmVzTWFwW19zaWduYXR1cmVdKSB7XG4gICAgICAgICAgZXJyID0gbmV3IEVycm9yKCdTaWduYXR1cmUgXCInICsgX3NpZ25hdHVyZSArICdcIiBpcyBkZWZpbmVkIHR3aWNlJyk7XG4gICAgICAgICAgZXJyLmRhdGEgPSB7c2lnbmF0dXJlOiBfc2lnbmF0dXJlfTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgLy8gZWxzZTogYm90aCBzaWduYXR1cmVzIHBvaW50IHRvIHRoZSBzYW1lIGZ1bmN0aW9uLCB0aGF0J3MgZmluZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmbiA9IGZuc1tpXTtcblxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBpcyBhIHR5cGVkLWZ1bmN0aW9uXG4gICAgICAgIGlmICh0eXBlb2YgZm4uc2lnbmF0dXJlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAvLyBtZXJnZSB0aGUgc2lnbmF0dXJlc1xuICAgICAgICAgIGZvciAodmFyIHNpZ25hdHVyZSBpbiBmbi5zaWduYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAoZm4uc2lnbmF0dXJlcy5oYXNPd25Qcm9wZXJ0eShzaWduYXR1cmUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlVW5pcXVlKHNpZ25hdHVyZSwgZm4uc2lnbmF0dXJlc1tzaWduYXR1cmVdKTtcbiAgICAgICAgICAgICAgc2lnbmF0dXJlc01hcFtzaWduYXR1cmVdID0gZm4uc2lnbmF0dXJlc1tzaWduYXR1cmVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgZm4uc2lnbmF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbGlkYXRlVW5pcXVlKGZuLnNpZ25hdHVyZSwgZm4pO1xuICAgICAgICAgIHNpZ25hdHVyZXNNYXBbZm4uc2lnbmF0dXJlXSA9IGZuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0Z1bmN0aW9uIGlzIG5vIHR5cGVkLWZ1bmN0aW9uIChpbmRleDogJyArIGkgKyAnKScpO1xuICAgICAgICAgIGVyci5kYXRhID0ge2luZGV4OiBpfTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNpZ25hdHVyZXNNYXA7XG4gICAgfVxuXG4gICAgdHlwZWQgPSBjcmVhdGVUeXBlZEZ1bmN0aW9uKCd0eXBlZCcsIHtcbiAgICAgICdzdHJpbmcsIE9iamVjdCc6IGNyZWF0ZVR5cGVkRnVuY3Rpb24sXG4gICAgICAnT2JqZWN0JzogZnVuY3Rpb24gKHNpZ25hdHVyZXNNYXApIHtcbiAgICAgICAgLy8gZmluZCBleGlzdGluZyBuYW1lXG4gICAgICAgIHZhciBmbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgc2lnbmF0dXJlIGluIHNpZ25hdHVyZXNNYXApIHtcbiAgICAgICAgICBpZiAoc2lnbmF0dXJlc01hcC5oYXNPd25Qcm9wZXJ0eShzaWduYXR1cmUpKSB7XG4gICAgICAgICAgICBmbnMucHVzaChzaWduYXR1cmVzTWFwW3NpZ25hdHVyZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoZm5zKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVkRnVuY3Rpb24obmFtZSwgc2lnbmF0dXJlc01hcCk7XG4gICAgICB9LFxuICAgICAgJy4uLkZ1bmN0aW9uJzogZnVuY3Rpb24gKGZucykge1xuICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWRGdW5jdGlvbihnZXROYW1lKGZucyksIGV4dHJhY3RTaWduYXR1cmVzKGZucykpO1xuICAgICAgfSxcbiAgICAgICdzdHJpbmcsIC4uLkZ1bmN0aW9uJzogZnVuY3Rpb24gKG5hbWUsIGZucykge1xuICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWRGdW5jdGlvbihuYW1lLCBleHRyYWN0U2lnbmF0dXJlcyhmbnMpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHR5cGVkLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICB0eXBlZC50eXBlcyA9IF90eXBlcztcbiAgICB0eXBlZC5jb252ZXJzaW9ucyA9IF9jb252ZXJzaW9ucztcbiAgICB0eXBlZC5pZ25vcmUgPSBfaWdub3JlO1xuICAgIHR5cGVkLmNvbnZlcnQgPSBjb252ZXJ0O1xuICAgIHR5cGVkLmZpbmQgPSBmaW5kO1xuXG4gICAgLyoqXG4gICAgICogYWRkIGEgdHlwZVxuICAgICAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgdGVzdDogZnVuY3Rpb259fSB0eXBlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYmVmb3JlT2JqZWN0VGVzdD10cnVlXVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0cnVlLCB0aGUgbmV3IHRlc3Qgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRlc3Qgd2l0aCBuYW1lICdPYmplY3QnIChpZiBhbnkpLCBzaW5jZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cyBmb3IgT2JqZWN0IG1hdGNoIEFycmF5IGFuZCBjbGFzc2VzIHRvby5cbiAgICAgKi9cbiAgICB0eXBlZC5hZGRUeXBlID0gZnVuY3Rpb24gKHR5cGUsIGJlZm9yZU9iamVjdFRlc3QpIHtcbiAgICAgIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZS5uYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZS50ZXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCB3aXRoIHByb3BlcnRpZXMge25hbWU6IHN0cmluZywgdGVzdDogZnVuY3Rpb259IGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChiZWZvcmVPYmplY3RUZXN0ICE9PSBmYWxzZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVkLnR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHR5cGVkLnR5cGVzW2ldLm5hbWUgPT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICB0eXBlZC50eXBlcy5zcGxpY2UoaSwgMCwgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHlwZWQudHlwZXMucHVzaCh0eXBlKTtcbiAgICB9O1xuXG4gICAgLy8gYWRkIGEgY29udmVyc2lvblxuICAgIHR5cGVkLmFkZENvbnZlcnNpb24gPSBmdW5jdGlvbiAoY29udmVyc2lvbikge1xuICAgICAgaWYgKCFjb252ZXJzaW9uXG4gICAgICAgICAgfHwgdHlwZW9mIGNvbnZlcnNpb24uZnJvbSAhPT0gJ3N0cmluZydcbiAgICAgICAgICB8fCB0eXBlb2YgY29udmVyc2lvbi50byAhPT0gJ3N0cmluZydcbiAgICAgICAgICB8fCB0eXBlb2YgY29udmVyc2lvbi5jb252ZXJ0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCB3aXRoIHByb3BlcnRpZXMge2Zyb206IHN0cmluZywgdG86IHN0cmluZywgY29udmVydDogZnVuY3Rpb259IGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHR5cGVkLmNvbnZlcnNpb25zLnB1c2goY29udmVyc2lvbik7XG4gICAgfTtcblxuICAgIHJldHVybiB0eXBlZDtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGUoKTtcbn0pKTsiXX0=
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUltcG9ydC5qcyIsImxpYi9xYXNtX2ltcG9ydC9RQVNNTGV4ZXIuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUxpc3RlbmVyLmpzIiwibGliL3Fhc21faW1wb3J0L1FBU01QYXJzZXIuanMiLCJsaWIvcXVhbnR1bS1jaXJjdWl0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9CdWZmZXJlZFRva2VuU3RyZWFtLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9DaGFyU3RyZWFtcy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvQ29tbW9uVG9rZW5GYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9Db21tb25Ub2tlblN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvRmlsZVN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvSW5wdXRTdHJlYW0uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L0ludGVydmFsU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9MTDFBbmFseXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvTGV4ZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvUGFyc2VyUnVsZUNvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1ByZWRpY3Rpb25Db250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SZWNvZ25pemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SdWxlQ29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvVG9rZW4uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTkRlc2VyaWFsaXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlNpbXVsYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlN0YXRlLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROVHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0xleGVyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vTGV4ZXJBY3Rpb24uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9MZXhlckFjdGlvbkV4ZWN1dG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUGFyc2VyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUHJlZGljdGlvbk1vZGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9TZW1hbnRpY0NvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9UcmFuc2l0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkEuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkFTZXJpYWxpemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9kZmEvREZBU3RhdGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yU3RyYXRlZ3kuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9ycy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9wb2x5ZmlsbHMvY29kZXBvaW50YXQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3BvbHlmaWxscy9mcm9tY29kZXBvaW50LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC90cmVlL1RyZWUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvVHJlZXMuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBsZXguanMvY29tcGxleC5qcyIsIm5vZGVfbW9kdWxlcy9kZWNpbWFsLmpzL2RlY2ltYWwuanMiLCJub2RlX21vZHVsZXMvZXNjYXBlLWxhdGV4L2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZnJhY3Rpb24uanMvZnJhY3Rpb24uanMiLCJub2RlX21vZHVsZXMvamF2YXNjcmlwdC1uYXR1cmFsLXNvcnQvbmF0dXJhbFNvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvY29yZS9mdW5jdGlvbi9jb25maWcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2RlcHJlY2F0ZWRJbXBvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2ltcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvZnVuY3Rpb24vdHlwZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9hbGxGYWN0b3JpZXNBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9jb25maWdSZWFkb25seS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290aC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzYy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE5vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0T3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdFhvci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmxvY2tOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvaHJSYWRpdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9vbGVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2F0YWxhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2JydC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29sdW1uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21waWxlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBvc2l0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdWxvbWIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N0cmFuc3Bvc2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N1YmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZEV2YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaWFnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXN0YW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RvdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3RNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFZmltb3ZGYWN0b3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VpZ3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cmljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cm9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlbWVudGFyeUNoYXJnZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbFRleHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXZhbHVhdGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbTEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V5ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmluZVN0cnVjdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlyc3RSYWRpYXRpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpeC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxvb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2hUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dhc0NvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHY2QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dldE1hdHJpeERhdGFUeXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXJ0cmVlRW5lcmd5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSHlwb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0kuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZmluaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS2xpdHppbmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tyb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMTBFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMT0cyRS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGNtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzFwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb2cyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb3NjaG1pZHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVkaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01pblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9kLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyTWFzc0MxMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTmV1dHJvbk1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdHMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPYmplY3ROb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGhpLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tUZW1wZXJhdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcmludC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvdG9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZG9tLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYXRpb25hbGl6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlcGxhY2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1J5ZGJlcmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQxXzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0TXVsdGlwbGljaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRQb3dlcnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U2l6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTb3J0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BlZWRPZkxpZ2h0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnRtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXVhcmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWVlemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0aXJsaW5nUzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdWJzZXRUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW5oLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYXUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RvLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcmFjZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHJhbnNwb3NlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlT2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuZXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYWN1dW1JbXBlZGFuY2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYXJpYW5jZVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmVyc2lvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYZ2NkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcHJlY2F0ZWRBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9pbXB1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvbWFpbkFueS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvdHlwZUNoZWNrcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Vycm9yL0FyZ3VtZW50c0Vycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXJyb3IvRGltZW5zaW9uRXJyb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lcnJvci9JbmRleEVycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9IZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvSW5maW5pdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE4xMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9MTjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE9HMTBFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL0xPRzJFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9TUVJUMV8yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL1NRUlQyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvZmFsc2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9udWxsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL3BoaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9waS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy90YXUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvdHJ1ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2JpZ251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9ib29sZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9tYXRyaXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3NwYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3VuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvcmUvaW1wb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29yZS90eXBlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2VtYmVkZGVkRG9jcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvZGVyaXZhdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9sdXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3FyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3NsdS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvdXNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY3ViZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3REaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RQb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2V4cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZmxvb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2djZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvaHlwb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xjbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL21vZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL25vcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlNaW51cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9iaXRBbmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdFhvci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL3JpZ2h0TG9nU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3Mvc3RpcmxpbmdTMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvYXJnLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9jb25qLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9pbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZXhwcmVzc2lvbi9oZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVUZXh0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9kZWVwRXF1YWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvdW5lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRDYXJ0ZXNpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXREaXN0aW5jdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRJbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0SXNTdWJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFNpemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRVbmlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NwZWNpYWwvZXJmLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9tYWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21heC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9taW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9zdGQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3N1bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91bml0cy90by5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2Nsb25lLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaGFzTnVtZXJpY1ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOYU4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc05lZ2F0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc1plcm8uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9udW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvdHlwZU9mLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vaGVscC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9rZXl3b3Jkcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9BY2Nlc3Nvck5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQXJyYXlOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Fzc2lnbm1lbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Db25kaXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQ29uc3RhbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0luZGV4Tm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL09iamVjdE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvT3BlcmF0b3JOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9SYW5nZU5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvUmVsYXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS91dGlscy9hY2Nlc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvdXRpbHMvYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9vcGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vY29sdW1uLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9tYXAudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWF4LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL21lYW4udHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3JhbmdlLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9zdGQudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vc3Vic2V0LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZmFjdG9yaWVzQW55LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL2x1cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9xci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9zbHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3JhdGlvbmFsaXplLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvcmVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS91dGlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3Vzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3V0aWxzL3NvbHZlVmFsaWRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzQW1kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NDb3VudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0Rmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzRXRyZWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0ZrZWVwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NGbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NJcHZlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTGVhZi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmsuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmtlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUGVybXV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUG9zdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUmVhY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nwc29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nxci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVGRmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVW5mbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkU2NhbGFyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jdWJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2RpdmlkZVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9leHAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2V4cG0xLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9maXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9nY2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sY20uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzFwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tdWx0aXBseVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3Bvdy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NpZ24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxdWFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3VidHJhY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5UGx1cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMveGdjZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvYml0QW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXROb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2JpdE9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXRYb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2xlZnRTaGlmdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVycy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY2F0YWxhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY29tcG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L2FyZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvY29uai5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvaW0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2FwcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9leHBtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2V5ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxcnRtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3V0aWwvcmFuZG9tTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvdXRpbC9zZWVkZWRSTkcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVOYXR1cmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxTY2FsYXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlckVxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC91bmVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXREaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRNdWx0aXBsaWNpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0U2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRTeW1EaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldFVuaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3BlY2lhbC9lcmYuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWRpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcHJvZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcXVhbnRpbGVTZXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL3N0ZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0cmluZy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdHJpbmcvcHJpbnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91bml0L3RvLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvY2xvbmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc051bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvaXNQcmltZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzWmVyby5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL251bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy90eXBlT2YuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9qc29uL3JlcGxhY2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvanNvbi9yZXZpdmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2FyaXRobWV0aWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci9jb21iaW5hdGlvbnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2xvZ2ljYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcHJvYmFiaWxpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcmVsYXRpb25hbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci90cmlnb25vbWV0cnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9CaWdOdW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9mdW5jdGlvbi9iaWdudW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2Jvb2xlYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2NoYWluL0NoYWluLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvY29tcGxleC9Db21wbGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9mcmFjdGlvbi9mdW5jdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0RlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvRmlib25hY2NpSGVhcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0ltbXV0YWJsZURlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4SW5kZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC9SYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L2Z1bmN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vbWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vc3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL3VuaXQvVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi9jcmVhdGVVbml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L2Z1bmN0aW9uL3NwbGl0VW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L3BoeXNpY2FsQ29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYXJyYXkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2JpZ251bWJlci9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvZm9ybWF0dGVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvY29sbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9jdXN0b21zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvZW1pdHRlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2ZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2lzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbGF0ZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9sb2cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9ub29wLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcG9seWZpbGxzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcHJvZHVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3ZlcnNpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL21haW4vZXM1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RpbnktZW1pdHRlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90eXBlZC1mdW5jdGlvbi90eXBlZC1mdW5jdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNudEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwM1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDanFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1bkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9yREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcHZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN3dKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVpRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2puQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5c0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6MkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDek1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6ckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25VQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzE1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNubkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2wzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdHpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzduQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2YkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25UQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3NkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RnREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzNEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3ZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25mQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbHJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25jQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBOzs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFBldGFyIEtvcnBvbmFpxIcgPHBldGFyLmtvcnBvbmFpY0BnbWFpbC5jb20+XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UsIGZvdW5kIGluXG4gKiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG52YXIgUUFTTUxleGVyID0gcmVxdWlyZSgnLi9RQVNNTGV4ZXInKTtcbnZhciBRQVNNUGFyc2VyID0gcmVxdWlyZSgnLi9RQVNNUGFyc2VyJyk7XG52YXIgUUFTTUxpc3RlbmVyID0gcmVxdWlyZSgnLi9RQVNNTGlzdGVuZXInKS5RQVNNTGlzdGVuZXI7XG5cbnZhciBFcnJvckxpc3RlbmVyID0gZnVuY3Rpb24oZXJyb3JzKSB7XG4gIGFudGxyNC5lcnJvci5FcnJvckxpc3RlbmVyLmNhbGwodGhpcyk7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuZXJyb3IuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvckxpc3RlbmVyO1xuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWMsIHN5bSwgbGluZSwgY29sLCBtc2csIGUpIHtcbiAgdGhpcy5lcnJvcnMucHVzaCh7XG4gIFx0bGluZTogbGluZSxcbiAgXHRjb2w6IGNvbCxcbiAgXHRtc2c6IG1zZ1xuICB9KTtcbn07XG5cbnZhciBRQ1FBU01MaXN0ZW5lciA9IGZ1bmN0aW9uKGNpcmN1aXQsIGNvbXBhdGliaWxpdHlNb2RlKSB7XG4gICAgdGhpcy5jaXJjdWl0ID0gY2lyY3VpdDtcbiAgICB0aGlzLnFyZWdNYXAgPSB7fTtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IHt9O1xuICAgIHRoaXMuY29tcGF0aWJpbGl0eU1vZGUgPSBjb21wYXRpYmlsaXR5TW9kZTtcblxuICAgIFFBU01MaXN0ZW5lci5jYWxsKHRoaXMpOyAvLyBpbmhlcml0IGRlZmF1bHQgbGlzdGVuZXJcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbnZhciBRQVNNSW1wb3J0ID0gZnVuY3Rpb24oY2lyY3VpdCwgaW5wdXQsIGVycm9yQ2FsbGJhY2ssIGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdHZhciBjaGFycyA9IG5ldyBhbnRscjQuSW5wdXRTdHJlYW0oaW5wdXQpO1xuXHR2YXIgbGV4ZXIgPSBuZXcgUUFTTUxleGVyLlFBU01MZXhlcihjaGFycyk7XG5cdHZhciB0b2tlbnMgID0gbmV3IGFudGxyNC5Db21tb25Ub2tlblN0cmVhbShsZXhlcik7XG5cdHZhciBwYXJzZXIgPSBuZXcgUUFTTVBhcnNlci5RQVNNUGFyc2VyKHRva2Vucyk7XG5cdHBhcnNlci5idWlsZFBhcnNlVHJlZXMgPSB0cnVlO1xuXG5cdHBhcnNlci5yZW1vdmVFcnJvckxpc3RlbmVycygpO1xuXHR2YXIgZXJyb3JzID0gW107XG5cdHZhciBlcnJvckxpc3RlbmVyID0gbmV3IEVycm9yTGlzdGVuZXIoZXJyb3JzKTtcblx0cGFyc2VyLmFkZEVycm9yTGlzdGVuZXIoZXJyb3JMaXN0ZW5lcik7XG5cblx0dmFyIHRyZWUgPSBwYXJzZXIubWFpbnByb2coKTsgICBcblx0dmFyIFFBU00gPSBuZXcgUUNRQVNNTGlzdGVuZXIoY2lyY3VpdCwgY29tcGF0aWJpbGl0eU1vZGUpO1xuXHRhbnRscjQudHJlZS5QYXJzZVRyZWVXYWxrZXIuREVGQVVMVC53YWxrKFFBU00sIHRyZWUpO1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhlcnJvcnMpO1xuXHR9XG59O1xuXG4gXG4vLyBpbmhlcml0IGRlZmF1bHQgbGlzdGVuZXJcblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUUFTTUxpc3RlbmVyLnByb3RvdHlwZSk7XG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQ1FBU01MaXN0ZW5lcjtcblxuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUubnVtUWJpdCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtID0gMDtcblx0Zm9yKHZhciByZWcgaW4gdGhpcy5xcmVnTWFwKSB7XG5cdFx0bnVtICs9IHRoaXMucXJlZ01hcFtyZWddO1xuXHR9XG5cdHJldHVybiBudW07XG59O1xuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUucXJlZ0Jhc2UgPSBmdW5jdGlvbihxcmVnKSB7XG5cdHZhciBiYXNlID0gMDtcblx0Zm9yKHZhciByZWcgaW4gdGhpcy5xcmVnTWFwKSB7XG5cdFx0aWYocmVnID09IHFyZWcpIHtcblx0XHRcdHJldHVybiBiYXNlO1xuXHRcdH1cblx0XHRiYXNlICs9IHRoaXMucXJlZ01hcFtyZWddO1xuXHR9XG5cdHJldHVybiBiYXNlO1xufTtcblxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLnFyZWdMZW4gPSBmdW5jdGlvbihyZWcpIHtcblx0cmV0dXJuIHRoaXMucXJlZ01hcFtyZWddIHx8IDA7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21haW5wcm9nLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyTWFpbnByb2cgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWFpbnByb2cuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0Ly8gY29uZGl0aW9uXG5cdHZhciBuYW1lID0gY3R4LmdldENoaWxkQ291bnQoKSA/IGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkgOiBcIlwiO1xuXHRpZihuYW1lID09IFwiaWZcIikge1xuXHRcdHRoaXMuY29uZGl0aW9uID0ge1xuXHRcdFx0Y3JlZzogY3R4LklEKCkuZ2V0VGV4dCgpLFxuXHRcdFx0dmFsdWU6IHBhcnNlSW50KGN0eC5JTlQoKS5nZXRUZXh0KCkpXG5cdFx0fVxuXHR9XG5cblx0Ly8gc3Vicm91dGluZSAoZ2F0ZSBkZWNsYXJhdGlvbilcblx0aWYoY3R4LmdhdGVkZWNsKCkpIHtcblx0XHR2YXIgZ2F0ZWRlY2wgPSBjdHguZ2F0ZWRlY2woKTtcblx0XHR2YXIgYXJncyA9IFtdO1xuXHRcdHZhciBwYXJhbXMgPSBbXTtcblxuXHRcdHZhciBjY291bnQgPSBnYXRlZGVjbC5nZXRDaGlsZENvdW50KCk7XG5cdFx0aWYoY2NvdW50ID4gMiAmJiBnYXRlZGVjbC5nZXRDaGlsZCgyKS5JRCkge1xuXHRcdFx0Ly8gbm8gcGFyYW1zXG5cdFx0XHRhcmdzID0gZ2F0ZWRlY2wuZ2V0Q2hpbGQoMikuSUQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoY2NvdW50ID4gMyAmJiBnYXRlZGVjbC5nZXRDaGlsZCgzKS5JRCkge1xuXHRcdFx0XHRwYXJhbXMgPSBnYXRlZGVjbC5nZXRDaGlsZCgzKS5JRCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYoY2NvdW50ID4gNSAmJiBnYXRlZGVjbC5nZXRDaGlsZCg1KS5JRCkge1xuXHRcdFx0XHQvLyBubyBwYXJhbXNcblx0XHRcdFx0YXJncyA9IGdhdGVkZWNsLmdldENoaWxkKDUpLklEKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMuY2lyY3VpdCk7XG5cdFx0dmFyIGN1c3RvbUdhdGUgPSBuZXcgcHJvdG8uY29uc3RydWN0b3IoYXJncy5sZW5ndGgpO1xuXHRcdHZhciBjdXN0b21HYXRlTmFtZSA9IGdhdGVkZWNsLklEKCkuZ2V0VGV4dCgpO1xuXHRcdHZhciBjdXN0b21HYXRlUmVncyA9IFtdO1xuXG5cdFx0YXJncy5tYXAoZnVuY3Rpb24ocmVnKSB7XG5cdFx0XHRjdXN0b21HYXRlUmVncy5wdXNoKHJlZy5nZXRUZXh0KCkpO1xuXHRcdH0pO1xuXG5cdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXIpIHtcblx0XHRcdHZhciBwYXJOYW1lID0gcGFyLmdldFRleHQoKTtcblx0XHRcdGN1c3RvbUdhdGUucGFyYW1zLnB1c2gocGFyTmFtZSk7XG5cdFx0fSk7XG5cblx0XHRpZihjdHguZ29wbGlzdCgpKSB7XG5cdFx0XHR2YXIgZ29wbGlzdCA9IGN0eC5nb3BsaXN0KCk7XG5cdFx0XHRnb3BsaXN0LnVvcCgpLm1hcChmdW5jdGlvbih1b3ApIHtcblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gdW9wLklEKCkgPyB1b3AuSUQoKS5nZXRUZXh0KCkgOiBcIlwiO1xuXHRcdFx0XHRpZihnYXRlTmFtZSkge1xuXHRcdFx0XHRcdHZhciBpZGxpc3QgPSB1b3AuYW55bGlzdCgpID8gdW9wLmFueWxpc3QoKS5pZGxpc3QoKSA6IG51bGw7XG5cdFx0XHRcdFx0dmFyIG1peGVkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLm1peGVkbGlzdCgpIDogbnVsbDtcblx0XHRcdFx0XHR2YXIgZXhwbGlzdCA9IHVvcC5leHBsaXN0KCk7XG5cblxuXHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkNYXCI6IGdhdGVOYW1lID0gXCJjeFwiOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJVXCI6IGdhdGVOYW1lID0gXCJ1M1wiOyBicmVhaztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZighc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdICYmICFzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0XHQvLyBmaW5kIGdhdGUgYnkgcWFzbSBuYW1lXG5cdFx0XHRcdFx0XHRmb3IodmFyIHRtcE5hbWUgaW4gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRtcERlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW3RtcE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gbmV3ZXIgdmVyc2lvbnMgb2YgcWlza2l0IGV4cG9ydHMgdG8gcWFzbSB3aXRoIGdhdGUgbmFtZXMgdW5kZWZpbmVkIGJ5IHFhc20gMi4wIGRlZmluaXRpb24uLi5cblx0XHRcdFx0XHRcdFx0aWYodG1wRGVmLmV4cG9ydEluZm8gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSB0bXBOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdFx0XHR2YXIgcGFyYW1zID0ge307XG5cdFx0XHRcdFx0aWYoZXhwbGlzdCAmJiBleHBsaXN0LmV4cCgpKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUxpc3QgPSBleHBsaXN0LmV4cCgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0Lm1hcChmdW5jdGlvbihwYXJhbUl0ZW0sIHBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IHBhcmFtSXRlbS5nZXRUZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmLmxlbmd0aCA+PSBwYXJhbUluZGV4ID8gcGFyYW1EZWZbcGFyYW1JbmRleF0gOiBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW3BhcmFtTmFtZV0gPSBwYXJhbVZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7IHBhcmFtczogcGFyYW1zIH07XG5cblxuXHRcdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXG5cdFx0XHRcdFx0aWYoaWRsaXN0KSB7XG5cdFx0XHRcdFx0XHR2YXIgY291bnQgPSBpZGxpc3QuSUQoKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR3aXJlcy5wdXNoKGN1c3RvbUdhdGVSZWdzLmluZGV4T2YoaWRsaXN0LklEKClbaV0uZ2V0VGV4dCgpKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobWl4ZWRsaXN0KSB7XG5cdFx0XHRcdFx0XHQvLyA/XG5cdFx0XHRcdFx0fVxuXG4vKlxuXHRcdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJ6XCI6IHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMucGFyYW1zICYmIG9wdGlvbnMucGFyYW1zLnBoaSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXMubGFtYmRhID0gb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cbiovXG5cdFx0XHRcdFx0dmFyIGV4dGVybmFsID0gc2VsZi5jaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihleHRlcm5hbCkge1xuXHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZS5yZWdpc3RlckdhdGUoZ2F0ZU5hbWUsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXh0ZXJuYWwpKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y3VzdG9tR2F0ZS5hZGRHYXRlKGdhdGVOYW1lLCAtMSwgd2lyZXMsIG9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLmNpcmN1aXQucmVnaXN0ZXJHYXRlKGN1c3RvbUdhdGVOYW1lLCBjdXN0b21HYXRlLnNhdmUoZmFsc2UpKTtcblx0fVxufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNzdGF0ZW1lbnQuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRWZXJzaW9uID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2RlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJEZWNsID0gZnVuY3Rpb24oY3R4KSB7XG5cdHN3aXRjaChjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSB7XG5cdFx0Y2FzZSBcInFyZWdcIjogdGhpcy5xcmVnTWFwW2N0eC5nZXRDaGlsZCgxKS5nZXRUZXh0KCldID0gcGFyc2VJbnQoY3R4LmdldENoaWxkKDMpLmdldFRleHQoKSk7IGJyZWFrO1xuXHRcdGNhc2UgXCJjcmVnXCI6IHRoaXMuY2lyY3VpdC5jcmVhdGVDcmVnKGN0eC5nZXRDaGlsZCgxKS5nZXRUZXh0KCksIHBhcnNlSW50KGN0eC5nZXRDaGlsZCgzKS5nZXRUZXh0KCkpKTsgYnJlYWs7XG5cdH1cdFxufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXREZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dhdGVkZWNsLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdhdGVkZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJHb3BsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclFvcCA9IGZ1bmN0aW9uKGN0eCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHZhciBjb25kaXRpb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZGl0aW9uKSk7XG5cdHRoaXMuY29uZGl0aW9uID0ge307XG5cblx0dmFyIG5hbWUgPSBjdHguZ2V0Q2hpbGRDb3VudCgpID8gY3R4LmdldENoaWxkKDApLmdldFRleHQoKSA6IFwiXCI7XG5cblx0aWYobmFtZSA9PSBcInJlc2V0XCIpIHtcblx0XHR2YXIgcXJlZyA9IFwiXCI7XG5cdFx0dmFyIHFiaXQgPSAtMTtcblx0XHR2YXIgY291bnQgPSBjdHguYXJndW1lbnQoKS5sZW5ndGg7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBjdHguYXJndW1lbnQoKVtpXTtcblx0XHRcdGlmKGkgPT0gMCkge1xuXHRcdFx0XHRxcmVnID0gYXJnLklEKCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHRxYml0ID0gYXJnLklOVCgpID8gcGFyc2VJbnQoYXJnLklOVCgpLmdldFRleHQoKSkgOiAtMTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihxcmVnKSB7XG5cdFx0XHR2YXIgbnVtQml0cyA9IHNlbGYucXJlZ0xlbihxcmVnKTtcblx0XHRcdGlmKHFiaXQgPCAwKSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGFyZ3VtZW50IGlzIGVudGlyZSByZWdpc3RlclxuXHRcdFx0XHQvL1xuXHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJyZXNldFwiLCAtMSwgeCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGJvdGggYXJndW1lbnRzIGFyZSBzaW5nbGUgYml0c1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcInJlc2V0XCIsIC0xLCBxYml0ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYobmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdHZhciBxcmVnID0gXCJcIjtcblx0XHR2YXIgcWJpdCA9IC0xO1xuXHRcdHZhciBjcmVnID0gXCJcIjtcblx0XHR2YXIgY2JpdCA9IC0xO1xuXHRcdHZhciBjb3VudCA9IGN0eC5hcmd1bWVudCgpLmxlbmd0aDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGN0eC5hcmd1bWVudCgpW2ldO1xuXHRcdFx0aWYoaSA9PSAwKSB7XG5cdFx0XHRcdHFyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdHFiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYoaSA9PSAxKSB7XG5cdFx0XHRcdGNyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdGNiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKHFyZWcgJiYgY3JlZykge1xuXHRcdFx0dmFyIG51bUJpdHMgPSBzZWxmLnFyZWdMZW4ocXJlZyk7XG5cdFx0XHRpZihxYml0IDwgMCAmJiBjYml0IDwgMCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyBib3RoIGFyZ3VtZW50cyBhcmUgZW50aXJlIHJlZ2lzdGVyc1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogeCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYocWJpdCA+PSAwICYmIGNiaXQgPj0gMCkge1xuXHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0Ly8gYm90aCBhcmd1bWVudHMgYXJlIHNpbmdsZSBiaXRzXG5cdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcIm1lYXN1cmVcIiwgLTEsIHFiaXQgKyBzZWxmLnFyZWdCYXNlKHFyZWcpLCB7IGNyZWc6IHsgbmFtZTogY3JlZywgYml0OiBjYml0IH0sIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZihxYml0ID49IDAgJiYgY2JpdCA8IDApIHtcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHQvLyBxYml0IGlzIHNpbmdsZSwgY3JlZyBpcyBlbnRpcmUgcmVnaXN0ZXJcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGYuY2lyY3VpdC5hZGRHYXRlKFwibWVhc3VyZVwiLCAtMSwgcWJpdCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY3JlZzogeyBuYW1lOiBjcmVnLCBiaXQ6IHggfSwgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdFx0Ly8gcWJpdCBpcyBlbnRpcmUgcmVnaXN0ZXIsIGNyZWcgaXMgc2luZ2xlIGJpdFxuXHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBudW1CaXRzOyB4KyspIHtcblx0XHRcdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogY2JpdCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XG5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgdW9wID0gY3R4LnVvcCgpO1xuXHRpZih1b3AgJiYgdW9wLklEKCkpIHtcblx0XHR2YXIgZ2F0ZU5hbWUgPSB1b3AuSUQoKS5nZXRUZXh0KCk7XG5cdFx0dmFyIGlkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLmlkbGlzdCgpIDogbnVsbDtcblx0XHR2YXIgbWl4ZWRsaXN0ID0gdW9wLmFueWxpc3QoKSA/IHVvcC5hbnlsaXN0KCkubWl4ZWRsaXN0KCkgOiBudWxsO1xuXHRcdHZhciBleHBsaXN0ID0gdW9wLmV4cGxpc3QoKTtcblxuXHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0Y2FzZSBcIkNYXCI6IGdhdGVOYW1lID0gXCJjeFwiOyBicmVhaztcblx0XHRcdGNhc2UgXCJVXCI6IGdhdGVOYW1lID0gXCJ1M1wiOyBicmVhaztcblx0XHR9XG5cblx0XHRpZighc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdICYmICFzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHQvLyBmaW5kIGdhdGUgYnkgcWFzbSBuYW1lXG5cdFx0XHRmb3IodmFyIHRtcE5hbWUgaW4gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0dmFyIHRtcERlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW3RtcE5hbWVdO1xuXHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gbmV3ZXIgdmVyc2lvbnMgb2YgcWlza2l0IGV4cG9ydHMgdG8gcWFzbSB3aXRoIGdhdGUgbmFtZXMgdW5kZWZpbmVkIGJ5IHFhc20gMi4wIGRlZmluaXRpb24uLi5cblx0XHRcdFx0aWYodG1wRGVmLmV4cG9ydEluZm8gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZU5hbWUgPSB0bXBOYW1lO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHBhcmFtcyA9IHt9O1xuXHRcdGlmKGV4cGxpc3QgJiYgZXhwbGlzdC5leHAoKSkge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRnYXRlRGVmID0gc2VsZi5jaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IGV4cGxpc3QuZXhwKCk7XG5cdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRwYXJhbUxpc3QubWFwKGZ1bmN0aW9uKHBhcmFtSXRlbSwgcGFyYW1JbmRleCkge1xuXHRcdFx0XHRcdHZhciBwYXJhbVZhbHVlID0gcGFyYW1JdGVtLmdldFRleHQoKTtcblx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWYubGVuZ3RoID49IHBhcmFtSW5kZXggPyBwYXJhbURlZltwYXJhbUluZGV4XSA6IFwiXCI7XG5cdFx0XHRcdFx0aWYocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgb3B0aW9ucyA9IHsgcGFyYW1zOiBwYXJhbXMsIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH07XG5cblx0XHRpZihpZGxpc3QpIHtcblx0XHRcdC8vXG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIGVudGlyZSByZWdpc3RlcnNcblx0XHRcdC8vICAgZXhhbXBsZTogY3ggcSxyO1xuXHRcdFx0Ly9cblx0XHRcdHZhciBudW1CaXRzID0gc2VsZi5xcmVnTGVuKGlkbGlzdC5JRCgpWzBdLmdldFRleHQoKSk7XG5cdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdHZhciBjb3VudCA9IGlkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRhcmdzLnB1c2goeyByZWc6IGlkbGlzdC5JRCgpW2ldLmdldFRleHQoKSwgYml0OiB4IH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHdpcmVzID0gW107XG5cdFx0XHRcdGFyZ3MubWFwKGZ1bmN0aW9uKGEpIHtcblx0XHRcdFx0XHR3aXJlcy5wdXNoKGEuYml0ICsgc2VsZi5xcmVnQmFzZShhLnJlZykpO1xuXHRcdFx0XHR9KTtcbi8qXG5cdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0c3dpdGNoKGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwicnpcIjoge1xuXHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnBhcmFtcyAmJiBvcHRpb25zLnBhcmFtcy5waGkpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtcy5sYW1iZGEgPSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG4qL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShnYXRlTmFtZSwgLTEsIHdpcmVzLCBvcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhcmd1bWVudHMgYXJlIHFiaXRzIG9yIG1peGVkXG5cdFx0aWYobWl4ZWRsaXN0KSB7XG5cdFx0XHRpZihtaXhlZGxpc3QuSUQoKS5sZW5ndGggIT0gbWl4ZWRsaXN0LklOVCgpLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBcblx0XHRcdFx0Ly8gVE9ETzogbWl4ZWQgcWJpdHMgYW5kIGVudGlyZSByZWdpc3RlcnNcblx0XHRcdFx0Ly8gICAgICAgZXhhbXBsZTogY3ggcSxyWzBdO1xuXHRcdFx0XHQvL1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gcWJpdHMsIGZvciBleGFtcGxlOiBjeCBxWzBdLHJbMF07XG5cdFx0XHRcdC8vXG5cdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdHZhciBjb3VudCA9IG1peGVkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRhcmdzLnB1c2goeyByZWc6IG1peGVkbGlzdC5JRCgpW2ldLmdldFRleHQoKSwgYml0OiBwYXJzZUludChtaXhlZGxpc3QuSU5UKClbaV0uZ2V0VGV4dCgpKSB9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXHRcdFx0XHRhcmdzLm1hcChmdW5jdGlvbihhKSB7XG5cdFx0XHRcdFx0d2lyZXMucHVzaChhLmJpdCArIHNlbGYucXJlZ0Jhc2UoYS5yZWcpKTtcblx0XHRcdFx0fSk7XG4vKlxuXHRcdFx0XHRpZighc2VsZi5jb21wYXRpYmlsaXR5TW9kZSkge1xuXHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcInJ6XCI6IHtcblx0XHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJhbXMgJiYgb3B0aW9ucy5wYXJhbXMucGhpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXMubGFtYmRhID0gb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuKi9cblx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgb3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0UW9wID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3VvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQW55bGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlcklkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdElkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtaXhlZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYXJndW1lbnQuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBcmd1bWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhcmd1bWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV4cGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXhwbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNleHAuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VW5hcnlvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRQVNNSW1wb3J0O1xuIiwiLy8gR2VuZXJhdGVkIGZyb20gUUFTTS5nNCBieSBBTlRMUiA0LjcuMVxuLy8ganNoaW50IGlnbm9yZTogc3RhcnRcbnZhciBhbnRscjQgPSByZXF1aXJlKCdhbnRscjQvaW5kZXgnKTtcblxuXG52YXIgc2VyaWFsaXplZEFUTiA9IFtcIlxcdTAwMDNcXHU2MDhiXFx1YTcyYVxcdTgxMzNcXHViOWVkXFx1NDE3Y1xcdTNiZTdcXHU3Nzg2XFx1NTk2NFwiLFxuICAgIFwiXFx1MDAwMi1cXHUwMTI0XFxiXFx1MDAwMVxcdTAwMDRcXHUwMDAyXFx0XFx1MDAwMlxcdTAwMDRcXHUwMDAzXFx0XFx1MDAwM1xcdTAwMDRcIixcbiAgICBcIlxcdTAwMDRcXHRcXHUwMDA0XFx1MDAwNFxcdTAwMDVcXHRcXHUwMDA1XFx1MDAwNFxcdTAwMDZcXHRcXHUwMDA2XFx1MDAwNFxcdTAwMDdcXHRcIixcbiAgICBcIlxcdTAwMDdcXHUwMDA0XFxiXFx0XFxiXFx1MDAwNFxcdFxcdFxcdFxcdTAwMDRcXG5cXHRcXG5cXHUwMDA0XFx1MDAwYlxcdFxcdTAwMGJcXHUwMDA0XCIsXG4gICAgXCJcXGZcXHRcXGZcXHUwMDA0XFxyXFx0XFxyXFx1MDAwNFxcdTAwMGVcXHRcXHUwMDBlXFx1MDAwNFxcdTAwMGZcXHRcXHUwMDBmXFx1MDAwNFxcdTAwMTBcIixcbiAgICBcIlxcdFxcdTAwMTBcXHUwMDA0XFx1MDAxMVxcdFxcdTAwMTFcXHUwMDA0XFx1MDAxMlxcdFxcdTAwMTJcXHUwMDA0XFx1MDAxM1xcdFxcdTAwMTNcIixcbiAgICBcIlxcdTAwMDRcXHUwMDE0XFx0XFx1MDAxNFxcdTAwMDRcXHUwMDE1XFx0XFx1MDAxNVxcdTAwMDRcXHUwMDE2XFx0XFx1MDAxNlxcdTAwMDRcXHUwMDE3XCIsXG4gICAgXCJcXHRcXHUwMDE3XFx1MDAwNFxcdTAwMThcXHRcXHUwMDE4XFx1MDAwNFxcdTAwMTlcXHRcXHUwMDE5XFx1MDAwNFxcdTAwMWFcXHRcXHUwMDFhXCIsXG4gICAgXCJcXHUwMDA0XFx1MDAxYlxcdFxcdTAwMWJcXHUwMDA0XFx1MDAxY1xcdFxcdTAwMWNcXHUwMDA0XFx1MDAxZFxcdFxcdTAwMWRcXHUwMDA0XFx1MDAxZVwiLFxuICAgIFwiXFx0XFx1MDAxZVxcdTAwMDRcXHUwMDFmXFx0XFx1MDAxZlxcdTAwMDQgXFx0IFxcdTAwMDQhXFx0IVxcdTAwMDRcXFwiXFx0XFxcIlxcdTAwMDQjXCIsXG4gICAgXCJcXHQjXFx1MDAwNCRcXHQkXFx1MDAwNCVcXHQlXFx1MDAwNCZcXHQmXFx1MDAwNFxcJ1xcdFxcJ1xcdTAwMDQoXFx0KFxcdTAwMDQpXFx0KVxcdTAwMDRcIixcbiAgICBcIipcXHQqXFx1MDAwNCtcXHQrXFx1MDAwNCxcXHQsXFx1MDAwM1xcdTAwMDJcXHUwMDAzXFx1MDAwMlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwNFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNVxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDZcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXCIsXG4gICAgXCJcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcIixcbiAgICBcIlxcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFxmXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDAzXFxmXFx1MDAwM1xcZlxcdTAwMDNcXHJcXHUwMDAzXFxyXFx1MDAwM1xcdTAwMGVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDExXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMVxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEzXFx1MDAwM1xcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1xcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxNVxcdTAwMDNcXHUwMDE1XFx1MDAwM1xcdTAwMTZcXHUwMDAzXFx1MDAxNlxcdTAwMDNcXHUwMDE2XFx1MDAwM1xcdTAwMTdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDE3XFx1MDAwM1xcdTAwMThcXHUwMDAzXFx1MDAxOFxcdTAwMDNcXHUwMDE5XFx1MDAwM1xcdTAwMTlcXHUwMDAzXFx1MDAxYVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMWFcXHUwMDAzXFx1MDAxYlxcdTAwMDNcXHUwMDFiXFx1MDAwM1xcdTAwMWNcXHUwMDAzXFx1MDAxY1xcdTAwMDNcXHUwMDFkXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxZFxcdTAwMDNcXHUwMDFkXFx1MDAwM1xcdTAwMWRcXHUwMDAzXFx1MDAxZVxcdTAwMDNcXHUwMDFlXFx1MDAwM1xcdTAwMWVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDFlXFx1MDAwM1xcdTAwMWZcXHUwMDAzXFx1MDAxZlxcdTAwMDNcXHUwMDFmXFx1MDAwM1xcdTAwMWZcXHUwMDAzIFxcdTAwMDNcIixcbiAgICBcIiBcXHUwMDAzIFxcdTAwMDMgXFx1MDAwMyFcXHUwMDAzIVxcdTAwMDMhXFx1MDAwM1xcXCJcXHUwMDAzXFxcIlxcdTAwMDNcXFwiXFx1MDAwM1xcXCJcIixcbiAgICBcIlxcdTAwMDNcXFwiXFx1MDAwMyNcXHUwMDAzI1xcdTAwMDMjXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDMkXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDNcIixcbiAgICBcIiRcXHUwMDAzJFxcdTAwMDUkXFx1MDBlMVxcbiRcXHUwMDAzJVxcdTAwMDMlXFx1MDAwMyVcXHUwMDA2JVxcdTAwZTZcXG4lXFxyJVxcdTAwMGVcIixcbiAgICBcIiVcXHUwMGU3XFx1MDAwMyZcXHUwMDAzJlxcdTAwMDMmXFx1MDAwNiZcXHUwMGVkXFxuJlxcciZcXHUwMDBlJlxcdTAwZWVcXHUwMDAzXFwnXCIsXG4gICAgXCJcXHUwMDA2XFwnXFx1MDBmMlxcblxcJ1xcclxcJ1xcdTAwMGVcXCdcXHUwMGYzXFx1MDAwMyhcXHUwMDAzKFxcdTAwMDcoXFx1MDBmOFxcbihcXGZcIixcbiAgICBcIihcXHUwMDBlKFxcdTAwZmJcXHUwMDBiKFxcdTAwMDMpXFx1MDAwNilcXHUwMGZlXFxuKVxccilcXHUwMDBlKVxcdTAwZmZcXHUwMDAzKVwiLFxuICAgIFwiXFx1MDAwMylcXHUwMDAzKlxcdTAwMDMqXFx1MDAwNipcXHUwMTA2XFxuKlxccipcXHUwMDBlKlxcdTAxMDdcXHUwMDAzKlxcdTAwMDMqXCIsXG4gICAgXCJcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDcrXFx1MDExMFxcbitcXGYrXFx1MDAwZStcXHUwMTEzXFx1MDAwYitcIixcbiAgICBcIlxcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzLFxcdTAwMDMsXFx1MDAwMyxcXHUwMDAzLFxcdTAwMDdcIixcbiAgICBcIixcXHUwMTFlXFxuLFxcZixcXHUwMDBlLFxcdTAxMjFcXHUwMDBiLFxcdTAwMDMsXFx1MDAwMyxcXHUwMDAzXFx1MDExMVxcdTAwMDItXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDVcXHUwMDA0XFx1MDAwN1xcdTAwMDVcXHRcXHUwMDA2XFx1MDAwYlxcdTAwMDdcXHJcXGJcXHUwMDBmXFx0XFx1MDAxMVwiLFxuICAgIFwiXFxuXFx1MDAxM1xcdTAwMGJcXHUwMDE1XFxmXFx1MDAxN1xcclxcdTAwMTlcXHUwMDBlXFx1MDAxYlxcdTAwMGZcXHUwMDFkXFx1MDAxMFxcdTAwMWZcIixcbiAgICBcIlxcdTAwMTEhXFx1MDAxMiNcXHUwMDEzJVxcdTAwMTRcXCdcXHUwMDE1KVxcdTAwMTYrXFx1MDAxNy1cXHUwMDE4L1xcdTAwMTkxXFx1MDAxYVwiLFxuICAgIFwiM1xcdTAwMWI1XFx1MDAxYzdcXHUwMDFkOVxcdTAwMWU7XFx1MDAxZj0gPyFBXFxcIkMjRSRHJUkmS1xcJ00oTylRKlMrVSxXLVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXG5cXHUwMDAzXFx1MDAwMjI7XFx1MDAwNFxcdTAwMDJHR2dnXFx1MDAwNFxcdTAwMDItLS8vXFx1MDAwM1xcdTAwMDJjXCIsXG4gICAgXCJ8XFx1MDAwNlxcdTAwMDIyO0NcXFxcYWFjfFxcdTAwMDVcXHUwMDAyXFx1MDAwYlxcZlxcdTAwMGVcXHUwMDBmXFxcIlxcXCJcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiLzAyO0NcXFxcYWFjfFxcdTAwMDRcXHUwMDAyXFxmXFxmXFx1MDAwZlxcdTAwMGZcXHUwMDAyXFx1MDEyZFxcdTAwMDJcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcclxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDExXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFmXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMiFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMiNcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyJVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFwnXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMilcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMitcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyLVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyL1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCIxXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDI1XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjlcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyO1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyPVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDI/XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJBXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMkNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMkVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiR1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAySVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyS1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJNXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJPXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyVVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDNZXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDVbXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDdcIixcbiAgICBcImJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx0ZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBiZlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxccmhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZmtcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDExblxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEzdlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE1XCIsXG4gICAgXCJcXHUwMDdmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTdcXHUwMDg3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTlcIixcbiAgICBcIlxcdTAwOGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYlxcdTAwOGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxZFwiLFxuICAgIFwiXFx1MDA5MFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFmXFx1MDA5NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIhXCIsXG4gICAgXCJcXHUwMDlhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiNcXHUwMDljXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiVcXHUwMGE0XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFwnXFx1MDBhN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIpXFx1MDBhZFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMitcXHUwMGFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMi1cXHUwMGIyXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyL1xcdTAwYjRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyMVxcdTAwYjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDIzXFx1MDBiOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDI1XFx1MDBiYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIjdcXHUwMGJjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjlcXHUwMGJlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjtcXHUwMGMyXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyPVxcdTAwYzZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyP1xcdTAwY2FcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJBXFx1MDBjZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJDXFx1MDBkMVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMkVcXHUwMGQ2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkdcXHUwMGUwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAySVxcdTAwZTJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyS1xcdTAwZTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJNXFx1MDBmMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJPXFx1MDBmNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJRXFx1MDBmZFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlNcXHUwMTAzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlVcXHUwMTBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyV1xcdTAxMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyWVpcXHUwMDA3XFx1MDA3ZlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJaXFx1MDAwNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJbXFxcXFxcdTAwMDdxXFx1MDAwMlxcdTAwMDJcXFxcXVxcdTAwMDdcIixcbiAgICBcInJcXHUwMDAyXFx1MDAwMl1eXFx1MDAwN2NcXHUwMDAyXFx1MDAwMl5fXFx1MDAwN3NcXHUwMDAyXFx1MDAwMl9gXFx1MDAwN3dcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyYGFcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyYVxcdTAwMDZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyYmNcXHUwMDA3PVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJjXFxiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmRlXFx1MDAwNypcXHUwMDAyXFx1MDAwMmVcXG5cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJmZ1xcdTAwMDcrXFx1MDAwMlxcdTAwMDJnXFxmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmhcIixcbiAgICBcImlcXHUwMDA3a1xcdTAwMDJcXHUwMDAyaWpcXHUwMDA3aFxcdTAwMDJcXHUwMDAyalxcdTAwMGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJrbFxcdTAwMDc/XFx1MDAwMlxcdTAwMDJsbVxcdTAwMDc/XFx1MDAwMlxcdTAwMDJtXFx1MDAxMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMm5vXFx1MDAwN2RcXHUwMDAyXFx1MDAwMm9wXFx1MDAwN2NcXHUwMDAyXFx1MDAwMnBxXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwicXJcXHUwMDA3dFxcdTAwMDJcXHUwMDAycnNcXHUwMDA3a1xcdTAwMDJcXHUwMDAyc3RcXHUwMDA3Z1xcdTAwMDJcXHUwMDAydHVcXHUwMDA3XCIsXG4gICAgXCJ0XFx1MDAwMlxcdTAwMDJ1XFx1MDAxMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ2d1xcdTAwMDdRXFx1MDAwMlxcdTAwMDJ3eFwiLFxuICAgIFwiXFx1MDAwN1JcXHUwMDAyXFx1MDAwMnh5XFx1MDAwN0dcXHUwMDAyXFx1MDAwMnl6XFx1MDAwN1BcXHUwMDAyXFx1MDAwMnp7XFx1MDAwN1wiLFxuICAgIFwiU1xcdTAwMDJcXHUwMDAye3xcXHUwMDA3Q1xcdTAwMDJcXHUwMDAyfH1cXHUwMDA3VVxcdTAwMDJcXHUwMDAyfX5cXHUwMDA3T1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJ+XFx1MDAxNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDdmXFx1MDA4MFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwODBcXHUwMDgxXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwODFcXHUwMDgyXFx1MDAwN2VcXHUwMDAyXFx1MDAwMlxcdTAwODJcIixcbiAgICBcIlxcdTAwODNcXHUwMDA3blxcdTAwMDJcXHUwMDAyXFx1MDA4M1xcdTAwODRcXHUwMDA3d1xcdTAwMDJcXHUwMDAyXFx1MDA4NFxcdTAwODVcIixcbiAgICBcIlxcdTAwMDdmXFx1MDAwMlxcdTAwMDJcXHUwMDg1XFx1MDA4NlxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDg2XFx1MDAxNlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODdcXHUwMDg4XFx1MDAwN3NcXHUwMDAyXFx1MDAwMlxcdTAwODhcXHUwMDg5XFx1MDAwN1wiLFxuICAgIFwidFxcdTAwMDJcXHUwMDAyXFx1MDA4OVxcdTAwOGFcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDA4YVxcdTAwOGJcXHUwMDA3aVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhiXFx1MDAxOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhjXFx1MDA4ZFxcdTAwMDddXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGRcXHUwMDFhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGVcXHUwMDhmXFx1MDAwN19cXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZlxcdTAwMWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA5MFxcdTAwOTFcXHUwMDA3ZVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDkxXFx1MDA5MlxcdTAwMDd0XFx1MDAwMlxcdTAwMDJcXHUwMDkyXFx1MDA5M1xcdTAwMDdnXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwOTNcXHUwMDk0XFx1MDAwN2lcXHUwMDAyXFx1MDAwMlxcdTAwOTRcXHUwMDFlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDA5NVxcdTAwOTZcXHUwMDA3aVxcdTAwMDJcXHUwMDAyXFx1MDA5NlxcdTAwOTdcXHUwMDA3Y1xcdTAwMDJcXHUwMDAyXFx1MDA5N1wiLFxuICAgIFwiXFx1MDA5OFxcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMDk4XFx1MDA5OVxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDk5IFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWFcXHUwMDliXFx1MDAwN31cXHUwMDAyXFx1MDAwMlxcdTAwOWJcXFwiXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDA5Y1xcdTAwOWRcXHUwMDA3b1xcdTAwMDJcXHUwMDAyXFx1MDA5ZFxcdTAwOWVcXHUwMDA3Z1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDllXFx1MDA5ZlxcdTAwMDdjXFx1MDAwMlxcdTAwMDJcXHUwMDlmXFx1MDBhMFxcdTAwMDd1XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYTBcXHUwMGExXFx1MDAwN3dcXHUwMDAyXFx1MDAwMlxcdTAwYTFcXHUwMGEyXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwYTJcIixcbiAgICBcIlxcdTAwYTNcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDBhMyRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhNFxcdTAwYTVcIixcbiAgICBcIlxcdTAwMDcvXFx1MDAwMlxcdTAwMDJcXHUwMGE1XFx1MDBhNlxcdTAwMDdAXFx1MDAwMlxcdTAwMDJcXHUwMGE2JlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwYTdcXHUwMGE4XFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwYThcXHUwMGE5XFx1MDAwN2dcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhOVxcdTAwYWFcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBhYVxcdTAwYWJcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGFiXFx1MDBhY1xcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMGFjKFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGFkXCIsXG4gICAgXCJcXHUwMGFlXFx1MDAwN1dcXHUwMDAyXFx1MDAwMlxcdTAwYWUqXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYWZcXHUwMGIwXCIsXG4gICAgXCJcXHUwMDA3RVxcdTAwMDJcXHUwMDAyXFx1MDBiMFxcdTAwYjFcXHUwMDA3WlxcdTAwMDJcXHUwMDAyXFx1MDBiMSxcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMGIyXFx1MDBiM1xcdTAwMDcuXFx1MDAwMlxcdTAwMDJcXHUwMGIzLlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjRcXHUwMGI1XFx1MDAwN2BcXHUwMDAyXFx1MDAwMlxcdTAwYjUwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBiNlxcdTAwYjdcXHUwMDA3LFxcdTAwMDJcXHUwMDAyXFx1MDBiNzJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiOFwiLFxuICAgIFwiXFx1MDBiOVxcdTAwMDcxXFx1MDAwMlxcdTAwMDJcXHUwMGI5NFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBiYlwiLFxuICAgIFwiXFx1MDAwNy1cXHUwMDAyXFx1MDAwMlxcdTAwYmI2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmNcXHUwMGJkXFx1MDAwN1wiLFxuICAgIFwiL1xcdTAwMDJcXHUwMDAyXFx1MDBiZDhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiZVxcdTAwYmZcXHUwMDA3dVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJmXFx1MDBjMFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcXHUwMGMwXFx1MDBjMVxcdTAwMDdwXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYzE6XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzJcXHUwMGMzXFx1MDAwN2VcXHUwMDAyXFx1MDAwMlxcdTAwYzNcIixcbiAgICBcIlxcdTAwYzRcXHUwMDA3cVxcdTAwMDJcXHUwMDAyXFx1MDBjNFxcdTAwYzVcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBjNTxcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM2XFx1MDBjN1xcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMGM3XFx1MDBjOFxcdTAwMDdcIixcbiAgICBcImNcXHUwMDAyXFx1MDAwMlxcdTAwYzhcXHUwMGM5XFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwYzk+XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjYVxcdTAwY2JcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDBjYlxcdTAwY2NcXHUwMDA3elxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGNjXFx1MDBjZFxcdTAwMDdyXFx1MDAwMlxcdTAwMDJcXHUwMGNkQFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGNlXCIsXG4gICAgXCJcXHUwMGNmXFx1MDAwN25cXHUwMDAyXFx1MDAwMlxcdTAwY2ZcXHUwMGQwXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwZDBCXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkMVxcdTAwZDJcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBkMlxcdTAwZDNcXHUwMDA3XCIsXG4gICAgXCJzXFx1MDAwMlxcdTAwMDJcXHUwMGQzXFx1MDBkNFxcdTAwMDd0XFx1MDAwMlxcdTAwMDJcXHUwMGQ0XFx1MDBkNVxcdTAwMDd2XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDVEXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZDZcXHUwMGQ3XFx1MDAwN3JcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkN1xcdTAwZDhcXHUwMDA3a1xcdTAwMDJcXHUwMDAyXFx1MDBkOEZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkOVwiLFxuICAgIFwiXFx1MDBkYVxcdTAwMDVJJVxcdTAwMDJcXHUwMGRhXFx1MDBkYlxcdTAwMDVLJlxcdTAwMDJcXHUwMGRiXFx1MDBlMVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwZGNcXHUwMGRkXFx1MDAwNU1cXCdcXHUwMDAyXFx1MDBkZFxcdTAwZGVcXHUwMDA1SyZcXHUwMDAyXFx1MDBkZVwiLFxuICAgIFwiXFx1MDBlMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRmXFx1MDBlMVxcdTAwMDVJJVxcdTAwMDJcXHUwMGUwXFx1MDBkOVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTBcXHUwMGRjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTBcXHUwMGRmXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMUhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMlxcdTAwZTNcIixcbiAgICBcIlxcdTAwMDVNXFwnXFx1MDAwMlxcdTAwZTNcXHUwMGU1XFx1MDAwNzBcXHUwMDAyXFx1MDAwMlxcdTAwZTRcXHUwMGU2XFx0XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGU1XFx1MDBlNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU2XFx1MDBlN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZTdcXHUwMGU1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTdcXHUwMGU4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBlOEpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlOVxcdTAwZWFcXHRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWFcXHUwMGVjXFx0XFx1MDAwNFxcdTAwMDJcXHUwMDAyXFx1MDBlYlxcdTAwZWRcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVjXCIsXG4gICAgXCJcXHUwMGViXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWRcXHUwMGVlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWVcIixcbiAgICBcIlxcdTAwZWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZVxcdTAwZWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZlwiLFxuICAgIFwiTFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYwXFx1MDBmMlxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjFcXHUwMGYwXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmMlxcdTAwZjNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmM1xcdTAwZjFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGY0TlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjVcXHUwMGY5XFx0XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDBmNlxcdTAwZjhcIixcbiAgICBcIlxcdFxcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwZjdcXHUwMGY2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjhcXHUwMGZiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZjdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZmFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZhUFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZiXFx1MDBmOVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmNcXHUwMGZlXFx0XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDBmZFxcdTAwZmNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZlXFx1MDBmZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZmXFx1MDBmZFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmZcXHUwMTAwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDBcXHUwMTAxXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMVxcdTAxMDJcXGIpXFx1MDAwMlxcdTAwMDJcXHUwMTAyUlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAxMDNcXHUwMTA1XFx1MDAwNyRcXHUwMDAyXFx1MDAwMlxcdTAxMDRcXHUwMTA2XFx0XFxiXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMDVcXHUwMTA0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDZcXHUwMTA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDEwN1xcdTAxMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwN1xcdTAxMDhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTA4XFx1MDEwOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XFx1MDEwYVxcdTAwMDckXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMGFUXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGJcXHUwMTBjXFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMGNcIixcbiAgICBcIlxcdTAxMGRcXHUwMDA3LFxcdTAwMDJcXHUwMDAyXFx1MDEwZFxcdTAxMTFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwZVwiLFxuICAgIFwiXFx1MDExMFxcdTAwMGJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBmXFx1MDEwZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEwXCIsXG4gICAgXCJcXHUwMTEzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcXHUwMTEyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcIixcbiAgICBcIlxcdTAxMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMlxcdTAxMTRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExM1wiLFxuICAgIFwiXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE0XFx1MDExNVxcdTAwMDcsXFx1MDAwMlxcdTAwMDJcXHUwMTE1XCIsXG4gICAgXCJcXHUwMTE2XFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMTZcXHUwMTE3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTdcIixcbiAgICBcIlxcdTAxMThcXGIrXFx1MDAwMlxcdTAwMDJcXHUwMTE4VlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE5XFx1MDExYVxcdTAwMDdcIixcbiAgICBcIjFcXHUwMDAyXFx1MDAwMlxcdTAxMWFcXHUwMTFiXFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMWJcXHUwMTFmXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDExY1xcdTAxMWVcXG5cXHRcXHUwMDAyXFx1MDAwMlxcdTAxMWRcXHUwMTFjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDExZVxcdTAxMjFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExZlxcdTAxMWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMTFmXFx1MDEyMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTIwXFx1MDEyMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAxMjFcXHUwMTFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjJcXHUwMTIzXFxiLFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTIzWFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGZcXHUwMDAyXFx1MDBlMFxcdTAwZTdcXHUwMGVlXFx1MDBmM1xcdTAwZjlcIixcbiAgICBcIlxcdTAwZmZcXHUwMTA3XFx1MDExMVxcdTAxMWZcXHUwMDAzXFxiXFx1MDAwMlxcdTAwMDJcIl0uam9pbihcIlwiKTtcblxuXG52YXIgYXRuID0gbmV3IGFudGxyNC5hdG4uQVRORGVzZXJpYWxpemVyKCkuZGVzZXJpYWxpemUoc2VyaWFsaXplZEFUTik7XG5cbnZhciBkZWNpc2lvbnNUb0RGQSA9IGF0bi5kZWNpc2lvblRvU3RhdGUubWFwKCBmdW5jdGlvbihkcywgaW5kZXgpIHsgcmV0dXJuIG5ldyBhbnRscjQuZGZhLkRGQShkcywgaW5kZXgpOyB9KTtcblxuZnVuY3Rpb24gUUFTTUxleGVyKGlucHV0KSB7XG5cdGFudGxyNC5MZXhlci5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB0aGlzLl9pbnRlcnAgPSBuZXcgYW50bHI0LmF0bi5MZXhlckFUTlNpbXVsYXRvcih0aGlzLCBhdG4sIGRlY2lzaW9uc1RvREZBLCBuZXcgYW50bHI0LlByZWRpY3Rpb25Db250ZXh0Q2FjaGUoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFBU01MZXhlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5MZXhlci5wcm90b3R5cGUpO1xuUUFTTUxleGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFFBU01MZXhlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFFBU01MZXhlci5wcm90b3R5cGUsIFwiYXRuXCIsIHtcbiAgICAgICAgZ2V0IDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0bjtcbiAgICAgICAgfVxufSk7XG5cblFBU01MZXhlci5FT0YgPSBhbnRscjQuVG9rZW4uRU9GO1xuUUFTTUxleGVyLlRfXzAgPSAxO1xuUUFTTUxleGVyLlRfXzEgPSAyO1xuUUFTTUxleGVyLlRfXzIgPSAzO1xuUUFTTUxleGVyLlRfXzMgPSA0O1xuUUFTTUxleGVyLlRfXzQgPSA1O1xuUUFTTUxleGVyLlRfXzUgPSA2O1xuUUFTTUxleGVyLlRfXzYgPSA3O1xuUUFTTUxleGVyLlRfXzcgPSA4O1xuUUFTTUxleGVyLlRfXzggPSA5O1xuUUFTTUxleGVyLlRfXzkgPSAxMDtcblFBU01MZXhlci5UX18xMCA9IDExO1xuUUFTTUxleGVyLlRfXzExID0gMTI7XG5RQVNNTGV4ZXIuVF9fMTIgPSAxMztcblFBU01MZXhlci5UX18xMyA9IDE0O1xuUUFTTUxleGVyLlRfXzE0ID0gMTU7XG5RQVNNTGV4ZXIuVF9fMTUgPSAxNjtcblFBU01MZXhlci5UX18xNiA9IDE3O1xuUUFTTUxleGVyLlRfXzE3ID0gMTg7XG5RQVNNTGV4ZXIuVF9fMTggPSAxOTtcblFBU01MZXhlci5UX18xOSA9IDIwO1xuUUFTTUxleGVyLlRfXzIwID0gMjE7XG5RQVNNTGV4ZXIuVF9fMjEgPSAyMjtcblFBU01MZXhlci5UX18yMiA9IDIzO1xuUUFTTUxleGVyLlRfXzIzID0gMjQ7XG5RQVNNTGV4ZXIuVF9fMjQgPSAyNTtcblFBU01MZXhlci5UX18yNSA9IDI2O1xuUUFTTUxleGVyLlRfXzI2ID0gMjc7XG5RQVNNTGV4ZXIuVF9fMjcgPSAyODtcblFBU01MZXhlci5UX18yOCA9IDI5O1xuUUFTTUxleGVyLlRfXzI5ID0gMzA7XG5RQVNNTGV4ZXIuVF9fMzAgPSAzMTtcblFBU01MZXhlci5UX18zMSA9IDMyO1xuUUFTTUxleGVyLlRfXzMyID0gMzM7XG5RQVNNTGV4ZXIuUEkgPSAzNDtcblFBU01MZXhlci5SRUFMID0gMzU7XG5RQVNNTGV4ZXIuU1VCUkVBTCA9IDM2O1xuUUFTTUxleGVyLkVYUFJFQUwgPSAzNztcblFBU01MZXhlci5JTlQgPSAzODtcblFBU01MZXhlci5JRCA9IDM5O1xuUUFTTUxleGVyLldTID0gNDA7XG5RQVNNTGV4ZXIuRklMRU5BTUUgPSA0MTtcblFBU01MZXhlci5DT01NRU5UID0gNDI7XG5RQVNNTGV4ZXIuTElORV9DT01NRU5UID0gNDM7XG5cblFBU01MZXhlci5wcm90b3R5cGUuY2hhbm5lbE5hbWVzID0gWyBcIkRFRkFVTFRfVE9LRU5fQ0hBTk5FTFwiLCBcIkhJRERFTlwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUubW9kZU5hbWVzID0gWyBcIkRFRkFVTFRfTU9ERVwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUubGl0ZXJhbE5hbWVzID0gWyBudWxsLCBcIid9J1wiLCBcIidvcGFxdWUnXCIsIFwiJzsnXCIsIFwiJygnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJyknXCIsIFwiJ2lmJ1wiLCBcIic9PSdcIiwgXCInYmFycmllcidcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInT1BFTlFBU00nXCIsIFwiJ2luY2x1ZGUnXCIsIFwiJ3FyZWcnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ1snXCIsIFwiJ10nXCIsIFwiJ2NyZWcnXCIsIFwiJ2dhdGUnXCIsIFwiJ3snXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ21lYXN1cmUnXCIsIFwiJy0+J1wiLCBcIidyZXNldCdcIiwgXCInVSdcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInQ1gnXCIsIFwiJywnXCIsIFwiJ14nXCIsIFwiJyonXCIsIFwiJy8nXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJysnXCIsIFwiJy0nXCIsIFwiJ3NpbidcIiwgXCInY29zJ1wiLCBcIid0YW4nXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ2V4cCdcIiwgXCInbG4nXCIsIFwiJ3NxcnQnXCIsIFwiJ3BpJ1wiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUuc3ltYm9saWNOYW1lcyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIlBJXCIsIFwiUkVBTFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIldTXCIsIFwiRklMRU5BTUVcIiwgXCJDT01NRU5UXCIsIFwiTElORV9DT01NRU5UXCIgXTtcblxuUUFTTUxleGVyLnByb3RvdHlwZS5ydWxlTmFtZXMgPSBbIFwiVF9fMFwiLCBcIlRfXzFcIiwgXCJUX18yXCIsIFwiVF9fM1wiLCBcIlRfXzRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX181XCIsIFwiVF9fNlwiLCBcIlRfXzdcIiwgXCJUX184XCIsIFwiVF9fOVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzEwXCIsIFwiVF9fMTFcIiwgXCJUX18xMlwiLCBcIlRfXzEzXCIsIFwiVF9fMTRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18xNVwiLCBcIlRfXzE2XCIsIFwiVF9fMTdcIiwgXCJUX18xOFwiLCBcIlRfXzE5XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVF9fMjBcIiwgXCJUX18yMVwiLCBcIlRfXzIyXCIsIFwiVF9fMjNcIiwgXCJUX18yNFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzI1XCIsIFwiVF9fMjZcIiwgXCJUX18yN1wiLCBcIlRfXzI4XCIsIFwiVF9fMjlcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18zMFwiLCBcIlRfXzMxXCIsIFwiVF9fMzJcIiwgXCJQSVwiLCBcIlJFQUxcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFwiV1NcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJGSUxFTkFNRVwiLCBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG5RQVNNTGV4ZXIucHJvdG90eXBlLmdyYW1tYXJGaWxlTmFtZSA9IFwiUUFTTS5nNFwiO1xuXG5cblxuZXhwb3J0cy5RQVNNTGV4ZXIgPSBRQVNNTGV4ZXI7XG5cbiIsIi8vIEdlbmVyYXRlZCBmcm9tIFFBU00uZzQgYnkgQU5UTFIgNC43LjFcbi8vIGpzaGludCBpZ25vcmU6IHN0YXJ0XG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG5cbi8vIFRoaXMgY2xhc3MgZGVmaW5lcyBhIGNvbXBsZXRlIGxpc3RlbmVyIGZvciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlci5cbmZ1bmN0aW9uIFFBU01MaXN0ZW5lcigpIHtcblx0YW50bHI0LnRyZWUuUGFyc2VUcmVlTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC50cmVlLlBhcnNlVHJlZUxpc3RlbmVyLnByb3RvdHlwZSk7XG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUUFTTUxpc3RlbmVyO1xuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNYWlucHJvZyA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjc3RhdGVtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0U3RhdGVtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3ZlcnNpb24uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpbmNsdWRlLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckluY2x1ZGUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaW5jbHVkZS5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEluY2x1ZGUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZmlsZW5hbWUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyRmlsZW5hbWUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZmlsZW5hbWUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRGaWxlbmFtZSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZGVjbC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdERlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRHYXRlZGVjbCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNnb3BsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ29wbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjcW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclFvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNxb3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRRb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRVb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYW55bGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FueWxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJJZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0SWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21peGVkbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0TWl4ZWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckFyZ3VtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cGxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXhwID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2F0b20uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQXRvbSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhdG9tLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXRvbSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1bmFyeW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuXG5leHBvcnRzLlFBU01MaXN0ZW5lciA9IFFBU01MaXN0ZW5lcjsiLCIvLyBHZW5lcmF0ZWQgZnJvbSBRQVNNLmc0IGJ5IEFOVExSIDQuNy4xXG4vLyBqc2hpbnQgaWdub3JlOiBzdGFydFxudmFyIGFudGxyNCA9IHJlcXVpcmUoJ2FudGxyNC9pbmRleCcpO1xudmFyIFFBU01MaXN0ZW5lciA9IHJlcXVpcmUoJy4vUUFTTUxpc3RlbmVyJykuUUFTTUxpc3RlbmVyO1xudmFyIGdyYW1tYXJGaWxlTmFtZSA9IFwiUUFTTS5nNFwiO1xuXG52YXIgc2VyaWFsaXplZEFUTiA9IFtcIlxcdTAwMDNcXHU2MDhiXFx1YTcyYVxcdTgxMzNcXHViOWVkXFx1NDE3Y1xcdTNiZTdcXHU3Nzg2XFx1NTk2NFwiLFxuICAgIFwiXFx1MDAwMy1cXHUwMTMwXFx1MDAwNFxcdTAwMDJcXHRcXHUwMDAyXFx1MDAwNFxcdTAwMDNcXHRcXHUwMDAzXFx1MDAwNFxcdTAwMDRcXHRcIixcbiAgICBcIlxcdTAwMDRcXHUwMDA0XFx1MDAwNVxcdFxcdTAwMDVcXHUwMDA0XFx1MDAwNlxcdFxcdTAwMDZcXHUwMDA0XFx1MDAwN1xcdFxcdTAwMDdcXHUwMDA0XCIsXG4gICAgXCJcXGJcXHRcXGJcXHUwMDA0XFx0XFx0XFx0XFx1MDAwNFxcblxcdFxcblxcdTAwMDRcXHUwMDBiXFx0XFx1MDAwYlxcdTAwMDRcXGZcXHRcXGZcXHUwMDA0XCIsXG4gICAgXCJcXHJcXHRcXHJcXHUwMDA0XFx1MDAwZVxcdFxcdTAwMGVcXHUwMDA0XFx1MDAwZlxcdFxcdTAwMGZcXHUwMDA0XFx1MDAxMFxcdFxcdTAwMTBcXHUwMDA0XCIsXG4gICAgXCJcXHUwMDExXFx0XFx1MDAxMVxcdTAwMDRcXHUwMDEyXFx0XFx1MDAxMlxcdTAwMDRcXHUwMDEzXFx0XFx1MDAxM1xcdTAwMDNcXHUwMDAyXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDdcXHUwMDAyKVxcblxcdTAwMDJcXGZcXHUwMDAyXFx1MDAwZVxcdTAwMDIsXFx1MDAwYlxcdTAwMDJcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDA1XFx1MDAwM1dcXG5cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA0XFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcIixcbiAgICBcIlxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA2XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDVcXHUwMDA3b1xcblxcdTAwMDdcIixcbiAgICBcIlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1wiLFxuICAgIFwiXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXCIsXG4gICAgXCJcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDVcXGJcXHUwMDg1XFxuXFxiXFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFwiLFxuICAgIFwiXFx1MDAwM1xcdFxcdTAwMDZcXHRcXHUwMDhjXFxuXFx0XFxyXFx0XFx1MDAwZVxcdFxcdTAwOGRcXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cIixcbiAgICBcIlxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwNVwiLFxuICAgIFwiXFxuXFx1MDA5YlxcblxcblxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDA1XFx1MDAwYlxcdTAwYmJcXG5cXHUwMDBiXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDA1XFxmXFx1MDBiZlwiLFxuICAgIFwiXFxuXFxmXFx1MDAwM1xcclxcdTAwMDNcXHJcXHUwMDA3XFxyXFx1MDBjM1xcblxcclxcZlxcclxcdTAwMGVcXHJcXHUwMGM2XFx1MDAwYlxcclxcdTAwMDNcIixcbiAgICBcIlxcclxcdTAwMDNcXHJcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDA3XFx1MDAwZVxcdTAwY2ZcXG5cXHUwMDBlXFxmXFx1MDAwZVxcdTAwMGVcXHUwMDBlXFx1MDBkMlxcdTAwMGJcXHUwMDBlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDBlXFx1MDBkYVxcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGRkXFx1MDAwYlxcdTAwMGVcXHUwMDAzXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDdcXHUwMDBlXCIsXG4gICAgXCJcXHUwMGU1XFxuXFx1MDAwZVxcZlxcdTAwMGVcXHUwMDBlXFx1MDAwZVxcdTAwZThcXHUwMDBiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwZVxcdTAwMDdcXHUwMDBlXFx1MDBlY1xcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGVmXFx1MDAwYlxcdTAwMGVcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwNVxcdTAwMGVcXHUwMGY1XFxuXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDVcIixcbiAgICBcIlxcdTAwMGZcXHUwMGZjXFxuXFx1MDAwZlxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDdcXHUwMDEwXCIsXG4gICAgXCJcXHUwMTAxXFxuXFx1MDAxMFxcZlxcdTAwMTBcXHUwMDBlXFx1MDAxMFxcdTAxMDRcXHUwMDBiXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMFxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMGFcXG5cXHUwMDExXFx1MDAwM1xcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwNVxcdTAwMTFcXHUwMTExXFxuXCIsXG4gICAgXCJcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMTlcXG5cXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMWNcXG5cXHUwMDExXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDdcXHUwMDExXFx1MDEyN1xcblxcdTAwMTFcXGZcXHUwMDExXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAxMVxcdTAxMmFcXHUwMDBiXFx1MDAxMVxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDJcXHUwMDAzIFxcdTAwMTRcXHUwMDAyXFx1MDAwNFxcdTAwMDZcXGJcXG5cXGZcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDEwXFx1MDAxMlxcdTAwMTRcXHUwMDE2XFx1MDAxOFxcdTAwMWFcXHUwMDFjXFx1MDAxZSBcXFwiJFxcdTAwMDJcXHUwMDA2XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMWNcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDFhXFx1MDAxYlxcdTAwMDRcXHUwMDAyJCUoKVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDFlI1xcdTAwMDJcXHUwMTQ0XFx1MDAwMiZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwNFZcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDA2WFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGJcXFxcXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFxuYFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGZuXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMGVcXHUwMDg0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxMFxcdTAwOGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxMlxcdTAwOWFcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE0XFx1MDBiYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE2XFx1MDBiZVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMThcXHUwMGM0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMWFcXHUwMGY0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxY1xcdTAwZmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxZVxcdTAxMDJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDIgXFx1MDExYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXFwiXFx1MDEyYlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMiRcXHUwMTJkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiYqXFx1MDAwNVxcdTAwMDZcXHUwMDA0XFx1MDAwMlwiLFxuICAgIFwiXFwnKVxcdTAwMDVcXHUwMDA0XFx1MDAwM1xcdTAwMDIoXFwnXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiksXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyKihcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyKitcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyK1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIsKlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDItV1xcdTAwMDVcXGZcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiLi9cXHUwMDA1XFx1MDAwZVxcYlxcdTAwMDIvMFxcdTAwMDVcXHUwMDEwXFx0XFx1MDAwMjAxXFx1MDAwN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiMVdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyMjNcXHUwMDA1XFx1MDAwZVxcYlxcdTAwMDIzNFxcdTAwMDdcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMjRXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjU2XFx1MDAwN1xcdTAwMDRcXHUwMDAyXFx1MDAwMjY3XFx1MDAwNylcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyNzhcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDI4OVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDI5V1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMjo7XFx1MDAwN1xcdTAwMDRcXHUwMDAyXFx1MDAwMjs8XFx1MDAwNylcXHUwMDAyXFx1MDAwMjw9XCIsXG4gICAgXCJcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyPT5cXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyPj9cXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcIixcbiAgICBcIj9AXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMkBXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkFCXFx1MDAwN1xcdTAwMDRcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyQkNcXHUwMDA3KVxcdTAwMDJcXHUwMDAyQ0RcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyREVcXHUwMDA1XFx1MDAxOFwiLFxuICAgIFwiXFxyXFx1MDAwMkVGXFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMkZHXFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyR0hcXHUwMDA3XFx1MDAwNVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJIV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJJV1xcdTAwMDVcXHUwMDEyXFxuXFx1MDAwMkpLXFx1MDAwN1wiLFxuICAgIFwiXFxiXFx1MDAwMlxcdTAwMDJLTFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJMTVxcdTAwMDcpXFx1MDAwMlxcdTAwMDJNTlxcdTAwMDdcIixcbiAgICBcIlxcdFxcdTAwMDJcXHUwMDAyTk9cXHUwMDA3KFxcdTAwMDJcXHUwMDAyT1BcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyUFdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDEyXFxuXFx1MDAwMlFSXFx1MDAwN1xcblxcdTAwMDJcXHUwMDAyUlNcXHUwMDA1XFx1MDAxNlxcZlxcdTAwMDJTVFxcdTAwMDdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlRXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlVXXFx1MDAwNVxcYlxcdTAwMDVcXHUwMDAyVi1cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJWLlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJWMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlY1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlY6XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlZBXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyVklcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVkpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVlFcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJWVVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJXXFx1MDAwNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlhZXFx1MDAwN1xcdTAwMGJcXHUwMDAyXFx1MDAwMllaXFx1MDAwNyVcXHUwMDAyXFx1MDAwMlpbXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyW1xcdTAwMDdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFxcXF1cXHUwMDA3XFxmXFx1MDAwMlxcdTAwMDJdXlxcdTAwMDVcIixcbiAgICBcIlxcblxcdTAwMDZcXHUwMDAyXl9cXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyX1xcdFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcImBhXFx1MDAwNytcXHUwMDAyXFx1MDAwMmFcXHUwMDBiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmJjXFx1MDAwN1xcclxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJjZFxcdTAwMDcpXFx1MDAwMlxcdTAwMDJkZVxcdTAwMDdcXHUwMDBlXFx1MDAwMlxcdTAwMDJlZlxcdTAwMDcoXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMmZnXFx1MDAwN1xcdTAwMGZcXHUwMDAyXFx1MDAwMmdvXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMmhpXFx1MDAwN1xcdTAwMTBcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyaWpcXHUwMDA3KVxcdTAwMDJcXHUwMDAyamtcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAya2xcXHUwMDA3XCIsXG4gICAgXCIoXFx1MDAwMlxcdTAwMDJsbVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJtb1xcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJuYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMm5oXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMm9cXHJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJwcVxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJxclxcdTAwMDcpXFx1MDAwMlxcdTAwMDJyc1xcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyc3RcXHUwMDA3XFx1MDAxMlxcdTAwMDJcXHUwMDAydFxcdTAwODVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAydXZcIixcbiAgICBcIlxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJ2d1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJ3eFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcInh5XFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMnl6XFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyentcXHUwMDA3XFx1MDAxMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJ7XFx1MDA4NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ8fVxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJ9flxcdTAwMDdcIixcbiAgICBcIilcXHUwMDAyXFx1MDAwMn5cXHUwMDdmXFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwN2ZcXHUwMDgwXFx1MDAwNVxcdTAwMThcIixcbiAgICBcIlxcclxcdTAwMDJcXHUwMDgwXFx1MDA4MVxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMDgxXFx1MDA4MlxcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyXFx1MDA4MlxcdTAwODNcXHUwMDA3XFx1MDAxMlxcdTAwMDJcXHUwMDAyXFx1MDA4M1xcdTAwODVcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDg0cFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDg0dVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwODR8XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODVcXHUwMDBmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4NlxcdTAwOGNcXHUwMDA1XFx1MDAxNFxcdTAwMGJcXHUwMDAyXFx1MDA4N1xcdTAwODhcXHUwMDA3XFxuXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwODhcXHUwMDg5XFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyXFx1MDA4OVxcdTAwOGFcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhhXFx1MDA4Y1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhiXFx1MDA4NlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGJcXHUwMDg3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGNcXHUwMDhkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZFxcdTAwOGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA4ZFxcdTAwOGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhlXFx1MDAxMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhmXFx1MDA5YlxcdTAwMDVcXHUwMDE0XFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTBcXHUwMDkxXFx1MDAwN1xcdTAwMTNcXHUwMDAyXFx1MDAwMlxcdTAwOTFcXHUwMDkyXFx1MDAwNVxcdTAwMWNcXHUwMDBmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5MlxcdTAwOTNcXHUwMDA3XFx1MDAxNFxcdTAwMDJcXHUwMDAyXFx1MDA5M1xcdTAwOTRcXHUwMDA1XFx1MDAxY1xcdTAwMGZcIixcbiAgICBcIlxcdTAwMDJcXHUwMDk0XFx1MDA5NVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJcXHUwMDk1XFx1MDA5YlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTZcXHUwMDk3XFx1MDAwN1xcdTAwMTVcXHUwMDAyXFx1MDAwMlxcdTAwOTdcXHUwMDk4XFx1MDAwNVxcdTAwMWNcXHUwMDBmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5OFxcdTAwOTlcXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDA5OVxcdTAwOWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDlhXFx1MDA4ZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDlhXFx1MDA5MFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOWFcXHUwMDk2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWJcXHUwMDEzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5Y1xcdTAwOWRcXHUwMDA3XFx1MDAxNlxcdTAwMDJcXHUwMDAyXFx1MDA5ZFxcdTAwOWVcXHUwMDA3XFx1MDAwNlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDllXFx1MDA5ZlxcdTAwMDVcXHUwMDFlXFx1MDAxMFxcdTAwMDJcXHUwMDlmXFx1MDBhMFxcdTAwMDdcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTBcXHUwMGExXFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTFcXHUwMGEyXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhMlxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhM1xcdTAwYTRcXHUwMDA3XFx1MDAxN1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGE0XFx1MDBhNVxcdTAwMDVcXHUwMDFjXFx1MDAwZlxcdTAwMDJcXHUwMGE1XFx1MDBhNlxcdTAwMDdcXHUwMDE4XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTZcXHUwMGE3XFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTdcXHUwMGE4XFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhOFxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhOVxcdTAwYWFcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFhXFx1MDBhYlxcdTAwMDVcXHUwMDE2XFxmXFx1MDAwMlxcdTAwYWJcXHUwMGFjXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhY1xcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhZFxcdTAwYWVcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFlXFx1MDBhZlxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcXHUwMGFmXFx1MDBiMFxcdTAwMDdcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjBcXHUwMGIxXFx1MDAwNVxcdTAwMTZcXGZcXHUwMDAyXFx1MDBiMVxcdTAwYjJcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGIyXFx1MDBiYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGIzXFx1MDBiNFxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjRcXHUwMGI1XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwYjVcXHUwMGI2XFx1MDAwNVxcdTAwMWVcXHUwMDEwXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiNlxcdTAwYjdcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDBiN1xcdTAwYjhcXHUwMDA1XFx1MDAxNlxcZlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjhcXHUwMGI5XFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAwYjlcXHUwMGJiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiYVxcdTAwOWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiYVxcdTAwYTNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJhXFx1MDBhOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBhZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmFcXHUwMGIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmJcXHUwMDE1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiY1xcdTAwYmZcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcXHUwMGJkXFx1MDBiZlxcdTAwMDVcXHUwMDFhXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmVcXHUwMGJjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmVcXHUwMGJkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiZlxcdTAwMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjMFxcdTAwYzFcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGMxXFx1MDBjM1xcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcXHUwMGMyXFx1MDBjMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzNcXHUwMGM2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzRcXHUwMGMyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjNFxcdTAwYzVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjNVxcdTAwYzdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGM2XFx1MDBjNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM3XFx1MDBjOFxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzhcXHUwMDE5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzlcXHUwMGNhXFx1MDAwNylcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjYVxcdTAwY2JcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBjYlxcdTAwY2NcXHUwMDA3KFxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGNjXFx1MDBjZFxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGNkXFx1MDBjZlxcdTAwMDdcXHUwMDE4XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwY2VcXHUwMGM5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwY2ZcXHUwMGQyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBkMFxcdTAwY2VcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkMFxcdTAwZDFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGQxXFx1MDBkM1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGQyXFx1MDBkMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDNcXHUwMGY1XFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZDRcXHUwMGQ1XFx1MDAwNylcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkNVxcdTAwZDZcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBkNlxcdTAwZDdcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGQ3XFx1MDBkOFxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGQ4XFx1MDBkYVxcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZDlcXHUwMGQ0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZGFcXHUwMGRkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkYlxcdTAwZDlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkYlxcdTAwZGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGRjXFx1MDBkZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRkXFx1MDBkYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZGVcXHUwMGRmXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZGZcXHUwMGUwXFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlMFxcdTAwZTFcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXFx1MDBlMVxcdTAwZjVcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGUyXFx1MDBlM1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGUzXFx1MDBlNVxcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTRcXHUwMGUyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTVcXHUwMGU4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlNlxcdTAwZTRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlNlxcdTAwZTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGU3XFx1MDBlOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU4XFx1MDBlNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTlcXHUwMGVhXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZWFcXHUwMGVjXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlYlxcdTAwZTZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlY1xcdTAwZWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGVkXFx1MDBlYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVkXFx1MDBlZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWVcXHUwMGYwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWZcXHUwMGVkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmMFxcdTAwZjFcXHUwMDA3KVxcdTAwMDJcXHUwMDAyXFx1MDBmMVxcdTAwZjJcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGYyXFx1MDBmM1xcdTAwMDcoXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmNVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZjRcXHUwMGQwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjRcXHUwMGRiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmNFxcdTAwZWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmNVxcdTAwMWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGY2XFx1MDBmY1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGY3XFx1MDBmOFxcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGY4XCIsXG4gICAgXCJcXHUwMGY5XFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMlxcdTAwZjlcXHUwMGZhXFx1MDAwNyhcXHUwMDAyXFx1MDAwMlxcdTAwZmFcIixcbiAgICBcIlxcdTAwZmNcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyXFx1MDBmYlxcdTAwZjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmYlwiLFxuICAgIFwiXFx1MDBmN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZjXFx1MDAxZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZkXCIsXG4gICAgXCJcXHUwMGZlXFx1MDAwNSBcXHUwMDExXFx1MDAwMlxcdTAwZmVcXHUwMGZmXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlxcdTAwZmZcIixcbiAgICBcIlxcdTAxMDFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMFxcdTAwZmRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMVwiLFxuICAgIFwiXFx1MDEwNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAyXFx1MDEwMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAyXCIsXG4gICAgXCJcXHUwMTAzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDNcXHUwMTA1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDRcIixcbiAgICBcIlxcdTAxMDJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwNVxcdTAxMDZcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDEwNlwiLFxuICAgIFwiXFx1MDAxZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA3XFx1MDEwOVxcYlxcdTAwMTFcXHUwMDAxXFx1MDAwMlxcdTAxMDhcIixcbiAgICBcIlxcdTAxMGFcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XFx1MDEwOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XCIsXG4gICAgXCJcXHUwMTBhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGFcXHUwMTBiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGJcIixcbiAgICBcIlxcdTAxMGNcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyXFx1MDEwY1xcdTAxMGRcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDEwZFwiLFxuICAgIFwiXFx1MDEwZVxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMTBlXFx1MDExY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBmXCIsXG4gICAgXCJcXHUwMTExXFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMFxcdTAxMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMFwiLFxuICAgIFwiXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTExXFx1MDExMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEyXCIsXG4gICAgXCJcXHUwMTEzXFx1MDAwNSRcXHUwMDEzXFx1MDAwMlxcdTAxMTNcXHUwMTE0XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAxMTRcIixcbiAgICBcIlxcdTAxMTVcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDExNVxcdTAxMTZcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDExNlwiLFxuICAgIFwiXFx1MDExY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE3XFx1MDExOVxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMThcIixcbiAgICBcIlxcdTAxMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOFxcdTAxMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOVwiLFxuICAgIFwiXFx1MDExYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTFhXFx1MDExY1xcdTAwMDVcXFwiXFx1MDAxMlxcdTAwMDJcXHUwMTFiXCIsXG4gICAgXCJcXHUwMTA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWJcXHUwMTEwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWJcIixcbiAgICBcIlxcdTAxMThcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExY1xcdTAxMjhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExZFwiLFxuICAgIFwiXFx1MDExZVxcZlxcYlxcdTAwMDJcXHUwMDAyXFx1MDExZVxcdTAxMWZcXHUwMDA3XFx1MDAxOVxcdTAwMDJcXHUwMDAyXFx1MDExZlxcdTAxMjdcIixcbiAgICBcIlxcdTAwMDUgXFx1MDAxMVxcdFxcdTAxMjBcXHUwMTIxXFxmXFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDEyMVxcdTAxMjJcXHRcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAxMjJcXHUwMTI3XFx1MDAwNSBcXHUwMDExXFxiXFx1MDEyM1xcdTAxMjRcXGZcXHUwMDA2XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMjRcXHUwMTI1XFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyNVxcdTAxMjdcXHUwMDA1IFxcdTAwMTFcXHUwMDA3XFx1MDEyNlwiLFxuICAgIFwiXFx1MDExZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI2XFx1MDEyMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI2XCIsXG4gICAgXCJcXHUwMTIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjdcXHUwMTJhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjhcIixcbiAgICBcIlxcdTAxMjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOFxcdTAxMjlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOVwiLFxuICAgIFwiIVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJhXFx1MDEyOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJiXCIsXG4gICAgXCJcXHUwMTJjXFx0XFx1MDAwNFxcdTAwMDJcXHUwMDAyXFx1MDEyYyNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyZFxcdTAxMmVcIixcbiAgICBcIlxcdFxcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAxMmUlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTkqVm5cXHUwMDg0XFx1MDA4YlwiLFxuICAgIFwiXFx1MDA4ZFxcdTAwOWFcXHUwMGJhXFx1MDBiZVxcdTAwYzRcXHUwMGQwXFx1MDBkYlxcdTAwZTZcXHUwMGVkXFx1MDBmNFxcdTAwZmJcXHUwMTAyXCIsXG4gICAgXCJcXHUwMTA5XFx1MDExMFxcdTAxMThcXHUwMTFiXFx1MDEyNlxcdTAxMjhcIl0uam9pbihcIlwiKTtcblxuXG52YXIgYXRuID0gbmV3IGFudGxyNC5hdG4uQVRORGVzZXJpYWxpemVyKCkuZGVzZXJpYWxpemUoc2VyaWFsaXplZEFUTik7XG5cbnZhciBkZWNpc2lvbnNUb0RGQSA9IGF0bi5kZWNpc2lvblRvU3RhdGUubWFwKCBmdW5jdGlvbihkcywgaW5kZXgpIHsgcmV0dXJuIG5ldyBhbnRscjQuZGZhLkRGQShkcywgaW5kZXgpOyB9KTtcblxudmFyIHNoYXJlZENvbnRleHRDYWNoZSA9IG5ldyBhbnRscjQuUHJlZGljdGlvbkNvbnRleHRDYWNoZSgpO1xuXG52YXIgbGl0ZXJhbE5hbWVzID0gWyBudWxsLCBcIid9J1wiLCBcIidvcGFxdWUnXCIsIFwiJzsnXCIsIFwiJygnXCIsIFwiJyknXCIsIFwiJ2lmJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJz09J1wiLCBcIidiYXJyaWVyJ1wiLCBcIidPUEVOUUFTTSdcIiwgXCInaW5jbHVkZSdcIiwgXCIncXJlZydcIiwgXG4gICAgICAgICAgICAgICAgICAgICBcIidbJ1wiLCBcIiddJ1wiLCBcIidjcmVnJ1wiLCBcIidnYXRlJ1wiLCBcIid7J1wiLCBcIidtZWFzdXJlJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJy0+J1wiLCBcIidyZXNldCdcIiwgXCInVSdcIiwgXCInQ1gnXCIsIFwiJywnXCIsIFwiJ14nXCIsIFwiJyonXCIsIFxuICAgICAgICAgICAgICAgICAgICAgXCInLydcIiwgXCInKydcIiwgXCInLSdcIiwgXCInc2luJ1wiLCBcIidjb3MnXCIsIFwiJ3RhbidcIiwgXCInZXhwJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJ2xuJ1wiLCBcIidzcXJ0J1wiLCBcIidwaSdcIiBdO1xuXG52YXIgc3ltYm9saWNOYW1lcyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXCJQSVwiLCBcIlJFQUxcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFwiV1NcIiwgXCJGSUxFTkFNRVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG52YXIgcnVsZU5hbWVzID0gIFsgXCJtYWlucHJvZ1wiLCBcInN0YXRlbWVudFwiLCBcInZlcnNpb25cIiwgXCJpbmNsdWRlXCIsIFwiZmlsZW5hbWVcIiwgXG4gICAgICAgICAgICAgICAgICAgXCJkZWNsXCIsIFwiZ2F0ZWRlY2xcIiwgXCJnb3BsaXN0XCIsIFwicW9wXCIsIFwidW9wXCIsIFwiYW55bGlzdFwiLCBcbiAgICAgICAgICAgICAgICAgICBcImlkbGlzdFwiLCBcIm1peGVkbGlzdFwiLCBcImFyZ3VtZW50XCIsIFwiZXhwbGlzdFwiLCBcImV4cFwiLCBcbiAgICAgICAgICAgICAgICAgICBcImF0b21cIiwgXCJ1bmFyeW9wXCIgXTtcblxuZnVuY3Rpb24gUUFTTVBhcnNlciAoaW5wdXQpIHtcblx0YW50bHI0LlBhcnNlci5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB0aGlzLl9pbnRlcnAgPSBuZXcgYW50bHI0LmF0bi5QYXJzZXJBVE5TaW11bGF0b3IodGhpcywgYXRuLCBkZWNpc2lvbnNUb0RGQSwgc2hhcmVkQ29udGV4dENhY2hlKTtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLmxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcztcbiAgICB0aGlzLnN5bWJvbGljTmFtZXMgPSBzeW1ib2xpY05hbWVzO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlci5wcm90b3R5cGUpO1xuUUFTTVBhcnNlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQVNNUGFyc2VyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUUFTTVBhcnNlci5wcm90b3R5cGUsIFwiYXRuXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGF0bjtcblx0fVxufSk7XG5cblFBU01QYXJzZXIuRU9GID0gYW50bHI0LlRva2VuLkVPRjtcblFBU01QYXJzZXIuVF9fMCA9IDE7XG5RQVNNUGFyc2VyLlRfXzEgPSAyO1xuUUFTTVBhcnNlci5UX18yID0gMztcblFBU01QYXJzZXIuVF9fMyA9IDQ7XG5RQVNNUGFyc2VyLlRfXzQgPSA1O1xuUUFTTVBhcnNlci5UX181ID0gNjtcblFBU01QYXJzZXIuVF9fNiA9IDc7XG5RQVNNUGFyc2VyLlRfXzcgPSA4O1xuUUFTTVBhcnNlci5UX184ID0gOTtcblFBU01QYXJzZXIuVF9fOSA9IDEwO1xuUUFTTVBhcnNlci5UX18xMCA9IDExO1xuUUFTTVBhcnNlci5UX18xMSA9IDEyO1xuUUFTTVBhcnNlci5UX18xMiA9IDEzO1xuUUFTTVBhcnNlci5UX18xMyA9IDE0O1xuUUFTTVBhcnNlci5UX18xNCA9IDE1O1xuUUFTTVBhcnNlci5UX18xNSA9IDE2O1xuUUFTTVBhcnNlci5UX18xNiA9IDE3O1xuUUFTTVBhcnNlci5UX18xNyA9IDE4O1xuUUFTTVBhcnNlci5UX18xOCA9IDE5O1xuUUFTTVBhcnNlci5UX18xOSA9IDIwO1xuUUFTTVBhcnNlci5UX18yMCA9IDIxO1xuUUFTTVBhcnNlci5UX18yMSA9IDIyO1xuUUFTTVBhcnNlci5UX18yMiA9IDIzO1xuUUFTTVBhcnNlci5UX18yMyA9IDI0O1xuUUFTTVBhcnNlci5UX18yNCA9IDI1O1xuUUFTTVBhcnNlci5UX18yNSA9IDI2O1xuUUFTTVBhcnNlci5UX18yNiA9IDI3O1xuUUFTTVBhcnNlci5UX18yNyA9IDI4O1xuUUFTTVBhcnNlci5UX18yOCA9IDI5O1xuUUFTTVBhcnNlci5UX18yOSA9IDMwO1xuUUFTTVBhcnNlci5UX18zMCA9IDMxO1xuUUFTTVBhcnNlci5UX18zMSA9IDMyO1xuUUFTTVBhcnNlci5UX18zMiA9IDMzO1xuUUFTTVBhcnNlci5QSSA9IDM0O1xuUUFTTVBhcnNlci5SRUFMID0gMzU7XG5RQVNNUGFyc2VyLlNVQlJFQUwgPSAzNjtcblFBU01QYXJzZXIuRVhQUkVBTCA9IDM3O1xuUUFTTVBhcnNlci5JTlQgPSAzODtcblFBU01QYXJzZXIuSUQgPSAzOTtcblFBU01QYXJzZXIuV1MgPSA0MDtcblFBU01QYXJzZXIuRklMRU5BTUUgPSA0MTtcblFBU01QYXJzZXIuQ09NTUVOVCA9IDQyO1xuUUFTTVBhcnNlci5MSU5FX0NPTU1FTlQgPSA0MztcblxuUUFTTVBhcnNlci5SVUxFX21haW5wcm9nID0gMDtcblFBU01QYXJzZXIuUlVMRV9zdGF0ZW1lbnQgPSAxO1xuUUFTTVBhcnNlci5SVUxFX3ZlcnNpb24gPSAyO1xuUUFTTVBhcnNlci5SVUxFX2luY2x1ZGUgPSAzO1xuUUFTTVBhcnNlci5SVUxFX2ZpbGVuYW1lID0gNDtcblFBU01QYXJzZXIuUlVMRV9kZWNsID0gNTtcblFBU01QYXJzZXIuUlVMRV9nYXRlZGVjbCA9IDY7XG5RQVNNUGFyc2VyLlJVTEVfZ29wbGlzdCA9IDc7XG5RQVNNUGFyc2VyLlJVTEVfcW9wID0gODtcblFBU01QYXJzZXIuUlVMRV91b3AgPSA5O1xuUUFTTVBhcnNlci5SVUxFX2FueWxpc3QgPSAxMDtcblFBU01QYXJzZXIuUlVMRV9pZGxpc3QgPSAxMTtcblFBU01QYXJzZXIuUlVMRV9taXhlZGxpc3QgPSAxMjtcblFBU01QYXJzZXIuUlVMRV9hcmd1bWVudCA9IDEzO1xuUUFTTVBhcnNlci5SVUxFX2V4cGxpc3QgPSAxNDtcblFBU01QYXJzZXIuUlVMRV9leHAgPSAxNTtcblFBU01QYXJzZXIuUlVMRV9hdG9tID0gMTY7XG5RQVNNUGFyc2VyLlJVTEVfdW5hcnlvcCA9IDE3O1xuXG5mdW5jdGlvbiBNYWlucHJvZ0NvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9tYWlucHJvZztcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFpbnByb2dDb250ZXh0O1xuXG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFZlcnNpb25Db250ZXh0LDApO1xufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5zdGF0ZW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoU3RhdGVtZW50Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChTdGF0ZW1lbnRDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbk1haW5wcm9nQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJNYWlucHJvZyh0aGlzKTtcblx0fVxufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRNYWlucHJvZyh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5NYWlucHJvZ0NvbnRleHQgPSBNYWlucHJvZ0NvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLm1haW5wcm9nID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgTWFpbnByb2dDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDAsIFFBU01QYXJzZXIuUlVMRV9tYWlucHJvZyk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMzY7XG4gICAgICAgIHRoaXMudmVyc2lvbigpO1xuICAgICAgICB0aGlzLnN0YXRlID0gNDA7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIHdoaWxlKCgoKF9sYSkgJiB+MHgxZikgPT0gMCAmJiAoKDEgPDwgX2xhKSAmICgoMSA8PCBRQVNNUGFyc2VyLlRfXzEpIHwgKDEgPDwgUUFTTVBhcnNlci5UX181KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fNykgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzkpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xMCkgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzEzKSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTQpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xNikgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzE4KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTkpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18yMCkpKSAhPT0gMCkgfHwgX2xhPT09UUFTTVBhcnNlci5JRCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDM3O1xuICAgICAgICAgICAgdGhpcy5zdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0MjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gU3RhdGVtZW50Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3N0YXRlbWVudDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGF0ZW1lbnRDb250ZXh0O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5kZWNsID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChEZWNsQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmdhdGVkZWNsID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChHYXRlZGVjbENvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5nb3BsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChHb3BsaXN0Q29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLklEID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JRCwgMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoSWRsaXN0Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLnFvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoUW9wQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFueWxpc3RDb250ZXh0LDApO1xufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuaW5jbHVkZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSW5jbHVkZUNvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclN0YXRlbWVudCh0aGlzKTtcblx0fVxufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0U3RhdGVtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlN0YXRlbWVudENvbnRleHQgPSBTdGF0ZW1lbnRDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5zdGF0ZW1lbnQgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBTdGF0ZW1lbnRDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDIsIFFBU01QYXJzZXIuUlVMRV9zdGF0ZW1lbnQpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxLHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0MztcbiAgICAgICAgICAgIHRoaXMuZGVjbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0NDtcbiAgICAgICAgICAgIHRoaXMuZ2F0ZWRlY2woKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0NTtcbiAgICAgICAgICAgIHRoaXMuZ29wbGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQ2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0ODtcbiAgICAgICAgICAgIHRoaXMuZ2F0ZWRlY2woKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18wKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDUzO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA1NDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDYwO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2MTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY2O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX180KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2ODtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDcpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDcxO1xuICAgICAgICAgICAgdGhpcy5xb3AoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgOCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzYpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklOVCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzg7XG4gICAgICAgICAgICB0aGlzLnFvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA5KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA3OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX183KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA4MDtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMTApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgzO1xuICAgICAgICAgICAgdGhpcy5pbmNsdWRlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gVmVyc2lvbkNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV92ZXJzaW9uO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJzaW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuVmVyc2lvbkNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVyc2lvbkNvbnRleHQ7XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5SRUFMID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5SRUFMLCAwKTtcbn07XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclZlcnNpb24odGhpcyk7XG5cdH1cbn07XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRWZXJzaW9uKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlZlcnNpb25Db250ZXh0ID0gVmVyc2lvbkNvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBWZXJzaW9uQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCA0LCBRQVNNUGFyc2VyLlJVTEVfdmVyc2lvbik7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDg2O1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fOCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4NztcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlJFQUwpO1xuICAgICAgICB0aGlzLnN0YXRlID0gODg7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBJbmNsdWRlQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2luY2x1ZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkluY2x1ZGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbmNsdWRlQ29udGV4dDtcblxuSW5jbHVkZUNvbnRleHQucHJvdG90eXBlLmZpbGVuYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChGaWxlbmFtZUNvbnRleHQsMCk7XG59O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJJbmNsdWRlKHRoaXMpO1xuXHR9XG59O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0SW5jbHVkZSh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5JbmNsdWRlQ29udGV4dCA9IEluY2x1ZGVDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5pbmNsdWRlID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgSW5jbHVkZUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgNiwgUUFTTVBhcnNlci5SVUxFX2luY2x1ZGUpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA5MDtcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzkpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTE7XG4gICAgICAgIHRoaXMuZmlsZW5hbWUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDkyO1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRmlsZW5hbWVDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZmlsZW5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkZpbGVuYW1lQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbGVuYW1lQ29udGV4dDtcblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5GSUxFTkFNRSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuRklMRU5BTUUsIDApO1xufTtcblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckZpbGVuYW1lKHRoaXMpO1xuXHR9XG59O1xuXG5GaWxlbmFtZUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEZpbGVuYW1lKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkZpbGVuYW1lQ29udGV4dCA9IEZpbGVuYW1lQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZmlsZW5hbWUgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBGaWxlbmFtZUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgOCwgUUFTTVBhcnNlci5SVUxFX2ZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTQ7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5GSUxFTkFNRSk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRGVjbENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9kZWNsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWNsQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRGVjbENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGVjbENvbnRleHQ7XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuRGVjbENvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckRlY2wodGhpcyk7XG5cdH1cbn07XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXREZWNsKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkRlY2xDb250ZXh0ID0gRGVjbENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmRlY2wgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBEZWNsQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAxMCwgUUFTTVBhcnNlci5SVUxFX2RlY2wpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMDg7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgc3dpdGNoKHRoaXMuX2lucHV0LkxBKDEpKSB7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xMDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDk3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA5ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTM6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTAzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTA3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gR2F0ZWRlY2xDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZ2F0ZWRlY2w7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkdhdGVkZWNsQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdhdGVkZWNsQ29udGV4dDtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoSWRsaXN0Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbkdhdGVkZWNsQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJHYXRlZGVjbCh0aGlzKTtcblx0fVxufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRHYXRlZGVjbCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5HYXRlZGVjbENvbnRleHQgPSBHYXRlZGVjbENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmdhdGVkZWNsID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgR2F0ZWRlY2xDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDEyLCBRQVNNUGFyc2VyLlJVTEVfZ2F0ZWRlY2wpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMzA7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMyx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExMjtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExNztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE5O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyMztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyNTtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyNztcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBHb3BsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2dvcGxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkdvcGxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5Hb3BsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHb3BsaXN0Q29udGV4dDtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLnVvcCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhVb3BDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFVvcENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhJZGxpc3RDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KElkbGlzdENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyR29wbGlzdCh0aGlzKTtcblx0fVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEdvcGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuR29wbGlzdENvbnRleHQgPSBHb3BsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZ29wbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEdvcGxpc3RDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE0LCBRQVNNUGFyc2VyLlJVTEVfZ29wbGlzdCk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMTM3OyBcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEzNztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHN3aXRjaCh0aGlzLl9pbnB1dC5MQSgxKSkge1xuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzE5OlxuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzIwOlxuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLklEOlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzI7XG4gICAgICAgICAgICAgICAgdGhpcy51b3AoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX183OlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzM7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzQ7XG4gICAgICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMTM1O1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGFudGxyNC5lcnJvci5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzk7IFxuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIH0gd2hpbGUoKCgoKF9sYSAtIDgpKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCAoX2xhIC0gOCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlRfXzcgLSA4KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5UX18xOSAtIDgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzIwIC0gOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuSUQgLSA4KSkpKSAhPT0gMCkpO1xuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIFFvcENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9xb3A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFvcENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcblFvcENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUW9wQ29udGV4dDtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChVb3BDb250ZXh0LDApO1xufTtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoQXJndW1lbnRDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFyZ3VtZW50Q29udGV4dCxpKTtcbiAgICB9XG59O1xuXG5Rb3BDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclFvcCh0aGlzKTtcblx0fVxufTtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0UW9wKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlFvcENvbnRleHQgPSBRb3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5xb3AgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBRb3BDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE2LCBRQVNNUGFyc2VyLlJVTEVfcW9wKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTUyO1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHN3aXRjaCh0aGlzLl9pbnB1dC5MQSgxKSkge1xuICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTk6XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18yMDpcbiAgICAgICAgY2FzZSBRQVNNUGFyc2VyLklEOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDE7XG4gICAgICAgICAgICB0aGlzLnVvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xNjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQyO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE2KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDM7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE3KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDU7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xODpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE4KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDk7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTUwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gVW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3VvcDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuVW9wQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuVW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVb3BDb250ZXh0O1xuXG5Vb3BDb250ZXh0LnByb3RvdHlwZS5leHBsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChFeHBsaXN0Q29udGV4dCwwKTtcbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmFyZ3VtZW50ID0gZnVuY3Rpb24oaSkge1xuICAgIGlmKGk9PT11bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IG51bGw7XG4gICAgfVxuICAgIGlmKGk9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHRzKEFyZ3VtZW50Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChBcmd1bWVudENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFueWxpc3RDb250ZXh0LDApO1xufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJVb3AodGhpcyk7XG5cdH1cbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdFVvcCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5Vb3BDb250ZXh0ID0gVW9wQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgVW9wQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAxOCwgUUFTTVBhcnNlci5SVUxFX3VvcCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCw3LHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTY7XG4gICAgICAgICAgICB0aGlzLmV4cGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTU4O1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTYxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjI7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTYzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjQ7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2ODtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTcxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTczO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3NDtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc5O1xuICAgICAgICAgICAgdGhpcy5leHBsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTgwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4MTtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4MjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBBbnlsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2FueWxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBbnlsaXN0Q29udGV4dDtcblxuQW55bGlzdENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSWRsaXN0Q29udGV4dCwwKTtcbn07XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZS5taXhlZGxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KE1peGVkbGlzdENvbnRleHQsMCk7XG59O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJBbnlsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0QW55bGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5BbnlsaXN0Q29udGV4dCA9IEFueWxpc3RDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5hbnlsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgQW55bGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjAsIFFBU01QYXJzZXIuUlVMRV9hbnlsaXN0KTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTg4O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBsYV8gPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDgsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NjtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NztcbiAgICAgICAgICAgIHRoaXMubWl4ZWRsaXN0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gSWRsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2lkbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJZGxpc3RDb250ZXh0O1xuXG5JZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKGkpIHtcblx0aWYoaT09PXVuZGVmaW5lZCkge1xuXHRcdGkgPSBudWxsO1xuXHR9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKFFBU01QYXJzZXIuSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIGkpO1xuICAgIH1cbn07XG5cblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJJZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbklkbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdElkbGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5JZGxpc3RDb250ZXh0ID0gSWRsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuaWRsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgSWRsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyMiwgUUFTTVBhcnNlci5SVUxFX2lkbGlzdCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsOSx0aGlzLl9jdHgpXG4gICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTA7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMTkxO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDksdGhpcy5fY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSAxOTc7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gTWl4ZWRsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX21peGVkbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNaXhlZGxpc3RDb250ZXh0O1xuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKGkpIHtcblx0aWYoaT09PXVuZGVmaW5lZCkge1xuXHRcdGkgPSBudWxsO1xuXHR9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKFFBU01QYXJzZXIuSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIGkpO1xuICAgIH1cbn07XG5cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oaSkge1xuXHRpZihpPT09dW5kZWZpbmVkKSB7XG5cdFx0aSA9IG51bGw7XG5cdH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbnMoUUFTTVBhcnNlci5JTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCBpKTtcbiAgICB9XG59O1xuXG5cbk1peGVkbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyTWl4ZWRsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRNaXhlZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuTWl4ZWRsaXN0Q29udGV4dCA9IE1peGVkbGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLm1peGVkbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IE1peGVkbGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjQsIFFBU01QYXJzZXIuUlVMRV9taXhlZGxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNDI7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTQsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwNjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMCx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjAyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjAzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwODtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTAsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwOTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxNztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMSx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjEzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjE0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxOTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTEsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIyMDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjIxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMzU7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTMsdGhpcy5fY3R4KVxuICAgICAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjI4O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMix0aGlzLl9jdHgpXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjI1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDEyLHRoaXMuX2N0eCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzNztcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTMsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjM5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIEFyZ3VtZW50Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2FyZ3VtZW50O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcmd1bWVudENvbnRleHQ7XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JTlQsIDApO1xufTtcblxuQXJndW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckFyZ3VtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEFyZ3VtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkFyZ3VtZW50Q29udGV4dCA9IEFyZ3VtZW50Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBBcmd1bWVudENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjYsIFFBU01QYXJzZXIuUlVMRV9hcmd1bWVudCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI0OTtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxNSx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRXhwbGlzdENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9leHBsaXN0O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FeHBsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRXhwbGlzdENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXhwbGlzdENvbnRleHQ7XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoRXhwQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChFeHBDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckV4cGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRFeHBsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkV4cGxpc3RDb250ZXh0ID0gRXhwbGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmV4cGxpc3QgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBFeHBsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyOCwgUUFTTVBhcnNlci5SVUxFX2V4cGxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNTY7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE2LHRoaXMuX2N0eClcbiAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI1MTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjUyO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI1ODtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE2LHRoaXMuX2N0eCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gMjU5O1xuICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBFeHBDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZXhwO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FeHBDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5FeHBDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEV4cENvbnRleHQ7XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmV4cCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhFeHBDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEV4cENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuRXhwQ29udGV4dC5wcm90b3R5cGUudW5hcnlvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoVW5hcnlvcENvbnRleHQsMCk7XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS5hdG9tID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChBdG9tQ29udGV4dCwwKTtcbn07XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyRXhwKHRoaXMpO1xuXHR9XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRFeHAodGhpcyk7XG5cdH1cbn07XG5cblxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbihfcCkge1xuXHRpZihfcD09PXVuZGVmaW5lZCkge1xuXHQgICAgX3AgPSAwO1xuXHR9XG4gICAgdmFyIF9wYXJlbnRjdHggPSB0aGlzLl9jdHg7XG4gICAgdmFyIF9wYXJlbnRTdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEV4cENvbnRleHQodGhpcywgdGhpcy5fY3R4LCBfcGFyZW50U3RhdGUpO1xuICAgIHZhciBfcHJldmN0eCA9IGxvY2FsY3R4O1xuICAgIHZhciBfc3RhcnRTdGF0ZSA9IDMwO1xuICAgIHRoaXMuZW50ZXJSZWN1cnNpb25SdWxlKGxvY2FsY3R4LCAzMCwgUUFTTVBhcnNlci5SVUxFX2V4cCwgX3ApO1xuICAgIHZhciBfbGEgPSAwOyAvLyBUb2tlbiB0eXBlXG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI4MTtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMCx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjM7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgIGlmKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjI7XG4gICAgICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI2NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjY7XG4gICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjcwO1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICBpZihfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjY5O1xuICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgIGlmKCEoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzI7XG4gICAgICAgICAgICB0aGlzLnVuYXJ5b3AoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc0O1xuICAgICAgICAgICAgdGhpcy5leHAoMCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3ODtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgaWYoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3NztcbiAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjgwO1xuICAgICAgICAgICAgdGhpcy5hdG9tKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N0eC5zdG9wID0gdGhpcy5faW5wdXQuTFQoLTEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjk0O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMix0aGlzLl9jdHgpXG4gICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuX3BhcnNlTGlzdGVuZXJzIT09bnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9wcmV2Y3R4ID0gbG9jYWxjdHg7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5MjtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMjEsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4MztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA2KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwKDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxjdHggPSBuZXcgRXhwQ29udGV4dCh0aGlzLCBfcGFyZW50Y3R4LCBfcGFyZW50U3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hOZXdSZWN1cnNpb25Db250ZXh0KGxvY2FsY3R4LCBfc3RhcnRTdGF0ZSwgUUFTTVBhcnNlci5SVUxFX2V4cCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODY7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKCB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbih0aGlzLCBcInRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA1KVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjg3O1xuICAgICAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzIzIHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4ODtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHAoNik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4OTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDQpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyOTA7XG4gICAgICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjkxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cCg1KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5NjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDIyLHRoaXMuX2N0eCk7XG4gICAgICAgIH1cblxuICAgIH0gY2F0Y2goIGVycm9yKSB7XG4gICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gZXJyb3I7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCBlcnJvcik7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIGVycm9yKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IGVycm9yO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5yb2xsUmVjdXJzaW9uQ29udGV4dHMoX3BhcmVudGN0eClcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gQXRvbUNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9hdG9tO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuQXRvbUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbUNvbnRleHQ7XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5JTlQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklOVCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuUkVBTCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuUkVBTCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuUEkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLlBJLCAwKTtcbn07XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyQXRvbSh0aGlzKTtcblx0fVxufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEF0b20odGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuQXRvbUNvbnRleHQgPSBBdG9tQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuYXRvbSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEF0b21Db250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDMyLCBRQVNNUGFyc2VyLlJVTEVfYXRvbSk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjk3O1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgaWYoISgoKCgoX2xhIC0gMzQpKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCAoX2xhIC0gMzQpKSAmICgoMSA8PCAoUUFTTVBhcnNlci5QSSAtIDM0KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5SRUFMIC0gMzQpKSB8ICgxIDw8IChRQVNNUGFyc2VyLklOVCAtIDM0KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5JRCAtIDM0KSkpKSAhPT0gMCkpKSB7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBVbmFyeW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3VuYXJ5b3A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblVuYXJ5b3BDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVbmFyeW9wQ29udGV4dDtcblxuXG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJVbmFyeW9wKHRoaXMpO1xuXHR9XG59O1xuXG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0VW5hcnlvcCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5VbmFyeW9wQ29udGV4dCA9IFVuYXJ5b3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS51bmFyeW9wID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgVW5hcnlvcENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMzQsIFFBU01QYXJzZXIuUlVMRV91bmFyeW9wKTtcbiAgICB2YXIgX2xhID0gMDsgLy8gVG9rZW4gdHlwZVxuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyOTk7XG4gICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICBpZighKCgoKChfbGEgLSAyOCkpICYgfjB4MWYpID09IDAgJiYgKCgxIDw8IChfbGEgLSAyOCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlRfXzI3IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzI4IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzI5IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMwIC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMxIC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMyIC0gMjgpKSkpICE9PSAwKSkpIHtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cblxuUUFTTVBhcnNlci5wcm90b3R5cGUuc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBydWxlSW5kZXgsIHByZWRJbmRleCkge1xuXHRzd2l0Y2gocnVsZUluZGV4KSB7XG5cdGNhc2UgMTU6XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBfc2VtcHJlZChsb2NhbGN0eCwgcHJlZEluZGV4KTtcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBcIk5vIHByZWRpY2F0ZSB3aXRoIGluZGV4OlwiICsgcnVsZUluZGV4O1xuICAgfVxufTtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZXhwX3NlbXByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcHJlZEluZGV4KSB7XG5cdHN3aXRjaChwcmVkSW5kZXgpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRyZXR1cm4gdGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpO1xuXHRcdGNhc2UgMTpcblx0XHRcdHJldHVybiB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNSk7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cmV0dXJuIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA0KTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgXCJObyBwcmVkaWNhdGUgd2l0aCBpbmRleDpcIiArIHByZWRJbmRleDtcblx0fVxufTtcblxuXG5leHBvcnRzLlFBU01QYXJzZXIgPSBRQVNNUGFyc2VyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgUGV0YXIgS29ycG9uYWnEhyA8cGV0YXIua29ycG9uYWljQGdtYWlsLmNvbT5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSwgZm91bmQgaW5cbiAqIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBtYXRoID0gcmVxdWlyZShcIm1hdGhqc1wiKTtcblxudmFyIFFBU01JbXBvcnQgPSByZXF1aXJlKFwiLi9xYXNtX2ltcG9ydC9RQVNNSW1wb3J0LmpzXCIpO1xuXG5cbnZhciBmb3JtYXRDb21wbGV4MiA9IGZ1bmN0aW9uKHJlLCBpbSwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgc3JlID0gZm9ybWF0RmxvYXQocmUsIG9wdGlvbnMpO1xuXG5cdHZhciBvcHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTtcblx0b3B0LnBsdXNDaGFyID0gXCIrXCI7XG5cdHZhciBzaW0gPSBmb3JtYXRGbG9hdChpbSwgb3B0KTtcblx0cmV0dXJuIHNyZSArIHNpbSArIChvcHRpb25zLmlvdGFDaGFyID8gb3B0aW9ucy5pb3RhQ2hhciA6IFwiaVwiKTtcbn07XG5cbnZhciBmb3JtYXRGbG9hdCA9IGZ1bmN0aW9uKGYsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0aWYob3B0aW9ucy5kZWNpbWFsUGxhY2VzKSB7XG5cdFx0ZiA9IG1hdGgucm91bmQoZiwgb3B0aW9ucy5kZWNpbWFsUGxhY2VzKTtcblx0fVxuXG5cdHZhciBzID0gZiArIFwiXCI7XG5cblx0aWYob3B0aW9ucy5maXhlZFdpZHRoKSB7XG5cdFx0cyA9IGYudG9GaXhlZChvcHRpb25zLmRlY2ltYWxQbGFjZXMgfHwgMTQpO1xuXHR9XG5cblx0dmFyIHBsdXNDaGFyID0gb3B0aW9ucy5wbHVzQ2hhcjtcblx0aWYob3B0aW9ucy5maXhlZFdpZHRoICYmICFwbHVzQ2hhcikge1xuXHRcdHBsdXNDaGFyID0gXCIgXCI7XG5cdH1cblxuXHRpZihwbHVzQ2hhciAmJiBmID49IDApIHtcblx0XHRzID0gcGx1c0NoYXIgKyBzO1xuXHR9XG5cblx0cmV0dXJuIHM7XG59O1xuXG52YXIgemVyb2VzTWF0cml4ID0gZnVuY3Rpb24obikge1xuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRtYXRyaXhbaV0gPSBbXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG5cdFx0XHRtYXRyaXhbaV1bal0gPSAwO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0cml4O1xufTtcblxudmFyIGlkZW50aXR5TWF0cml4ID0gZnVuY3Rpb24obikge1xuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRtYXRyaXhbaV0gPSBbXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG5cdFx0XHRtYXRyaXhbaV1bal0gPSBqID09IGkgPyAxIDogMDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdHJpeDtcbn07XG5cblxudmFyIG1ha2VDb250cm9sbGVkID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgbSA9IFUubGVuZ3RoO1xuXHR2YXIgQyA9IGlkZW50aXR5TWF0cml4KG0gKiAyKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtOyBpKyspIHtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG07IGorKykge1xuXHRcdFx0Q1tpICsgbV1baiArIG1dID0gVVtpXVtqXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIEM7XG59O1xuXG52YXIgdW5pcXVlQXJyYXkgPSBmdW5jdGlvbihhcnJheSkge1xuICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgc2VsZikge1xuXHRyZXR1cm4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG4gIH0pO1xufTtcblxudmFyIHF1Yml0TGV0dGVyID0gZnVuY3Rpb24obiwgbWF4KSB7XG5cdG1heE4gPSBtYXggfHwgKG4gKyAxKTtcblxuXHRpZihtYXhOID4gMCkge1xuXHRcdG1heE4gPSBtYXhOIC0gMTtcblx0fVxuXG5cdG1heExlbiA9IG1heE4udG9TdHJpbmcoMjYpLmxlbmd0aDtcblxuXHR2YXIgblN0ciA9IG4udG9TdHJpbmcoMjYpO1xuXHR3aGlsZShuU3RyLmxlbmd0aCA8IG1heExlbikge1xuXHRcdG5TdHIgPSBcIjBcIiArIG5TdHI7XG5cdH1cblxuXHR2YXIgcmVzID0gXCJcIjtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG5TdHIubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY29kZSA9IG5TdHIuY2hhckNvZGVBdChpKTtcblx0XHRyZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlIDwgOTcgPyBjb2RlICsgNDkgOiBjb2RlICsgMTApO1xuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cbnZhciBRdWFudHVtQ2lyY3VpdCA9IGZ1bmN0aW9uKG51bVF1Yml0cykge1xuXHR0aGlzLmJhc2ljR2F0ZXMgPSB7XG5cdFx0aWQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlNpbmdsZSBxdWJpdCBpZGVudGl0eSBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsIDBdLFxuXHRcdFx0XHRbMCwgMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJJRFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29tcGFjdFVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IHsgYWxwaGE6IFwiKENvbXBsZXgpIHsgLnJlYWwgPSAxLCAuaW1hZyA9IDAgfVwiLFxuXHRcdFx0XHRcdFx0XHRiZXRhOiBcIihDb21wbGV4KSB7LnJlYWwgPSAwLCAuaW1hZyA9IDB9XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiaWRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGF1bGkgWCAoUEkgcm90YXRpb24gb3ZlciBYLWF4aXMpIGFrYSBcXFwiTk9UXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzAsMV0sXG5cdFx0XHRcdFsxLDBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwYXVsaVhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQYXVsaSBZIChQSSByb3RhdGlvbiBvdmVyIFktYXhpcylcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMCxcIi1pXCJdLFxuXHRcdFx0XHRbXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHo6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBhdWxpIFogKFBJIHJvdGF0aW9uIG92ZXIgWi1heGlzKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkhhZGFtYXJkIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIxIC8gc3FydCgyKVwiLFwiMSAvIHNxcnQoMilcIl0sXG5cdFx0XHRcdFtcIjEgLyBzcXJ0KDIpXCIsXCItMSAvIHNxcnQoMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJIXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImhhZGFtYXJkXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3JuOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTcXVhcmUgcm9vdCBvZiBOT1RcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgc3JuOlxcbiAgICAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNSswLjVqLCAwLjUtMC41al0sIFswLjUtMC41aiwgMC41KzAuNWpdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlgqKigxLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMC41XCIsIFwiMC41XCJdLCBbXCIwLjVcIiwgXCItMC41XCJdXSxcblx0XHRcdFx0XHRcdFtbXCIwLjVcIiwgXCItMC41XCJdLFtcIjAuNVwiLCBcIjAuNVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInN4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdLFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1swLjUrMC41aiwgMC41LTAuNWpdLCBbMC41LTAuNWosIDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNybmRnOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJJbnZlcnNlIHNxdWFyZSByb290IG9mIE5PVFwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXSxcblx0XHRcdFx0W1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtYJiM4MjI0O1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5kZ1wiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBzcm5kZzpcXG4gICAgMC41LTAuNWksIDAuNSswLjVpXFxuICAgIDAuNSswLjVpLCAwLjUtMC41aVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3JuZGdcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNS0wLjVqLCAwLjUrMC41al0sIFswLjUrMC41aiwgMC41LTAuNWpdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlgqKigtMS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjAuNVwiLCBcIi0wLjVcIl0sIFtcIjAuNVwiLCBcIjAuNVwiXV0sXG5cdFx0XHRcdFx0XHRbW1wiMC41XCIsIFwiMC41XCJdLFtcIjAuNVwiLCBcIi0wLjVcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeGRnXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeGRnXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ2aVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdLFtcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1swLjUtMC41aiwgMC41KzAuNWpdLCBbMC41KzAuNWosIDAuNS0wLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHIyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIGFrYSBcXFwiUGhhc2UgUEkvMlxcXCJcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzJcIlxuXHRcdFx0fSxcblxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic0dhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzXCIsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJzXCIsIHBhcmFtczoge30gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwic1wiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyNDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpcyBha2EgXFxcIlBoYXNlIFBJLzRcXFwiXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMF0sXG5cdFx0XHRcdFswLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWiYjeDFENkQxOy80XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ0R2F0ZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidFwiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInRcIiwgcGFyYW1zOiB7fSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpewrxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cjg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBJLzggcm90YXRpb24gb3ZlciBaLWF4aXMgYWthIFxcXCJQaGFzZSBQSS84XFxcIlwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyA4KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvOFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOiBcIk1fUEkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS84XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvOFwiIH0gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpe4oWbXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwaGFzZXNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6IFwicGkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDBdLFswLFwiZXhwKGkgKiBwaSAvIDgpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMF0sWzAsbnAuZXhwKDFqICogbnAucGkgLyA4KV1dXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBYLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEgLyAyKVwiLCBcIi1pICogc2luKHRoZXRhIC8gMilcIl0sXG5cdFx0XHRcdFtcIi1pICogc2luKHRoZXRhIC8gMilcIiwgXCJjb3ModGhldGEgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJvdGF0ZVhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cnk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJvdGF0aW9uIGFyb3VuZCB0aGUgWS1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhIC8gMilcIiwgXCItMSAqIHNpbih0aGV0YSAvIDIpXCJdLFxuXHRcdFx0XHRbXCJzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUllcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicm90YXRlWVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJZXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBaLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcImNvcyhwaGkgLyAyKSAtIGkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImNvcyhwaGkgLyAyKSArIGkgKiBzaW4ocGhpIC8gMilcIl1cblx0XHRcdF0sXG5cblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1MToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiU2luZ2xlLXF1Yml0IHJvdGF0aW9uIGFib3V0IHRoZSBaIGF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIGxhbWJkYSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVTFcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUEhBU0VcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMF0sIFswLCBucC5leHAoMWoqcF9sYW1iZGEpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlc2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUEhcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHUyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTaW5nbGUtcXViaXQgcm90YXRpb24gYWJvdXQgdGhlIFgrWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiMSAvIHNxcnQoMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogMSAvIHNxcnQoMilcIl0sXG5cdFx0XHRcdFtcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlUyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInUyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHUyKCVwaGksICVsYW1iZGEpOlxcbiAgICAxL1NRUlQoMiksIC0xKkVYUChpKiVsYW1iZGEpKjEvU1FSVCgyKVxcbiAgICBFWFAoaSolcGhpKSoxL1NRUlQoMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKjEvU1FSVCgyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTJcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvcXVpbF9zcXJ0KDIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqMS9xdWlsX3NxcnQoMildLFtxdWlsX2V4cCgxaipwX3BoaSkqMS9xdWlsX3NxcnQoMikscXVpbF9leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvcXVpbF9zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLCBbbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiLWNvcyhsYW1iZGEpL3NxcnQoMilcIiwgXCItc2luKGxhbWJkYSkvc3FydCgyKVwiXV0sXG5cdFx0XHRcdFx0XHRcdCBbW1wiY29zKHBoaSkvc3FydCgyKVwiLCBcInNpbihwaGkpL3NxcnQoMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKS9zcXJ0KDIpXCIsIFwic2luKGxhbWJkYStwaGkpL3NxcnQoMilcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSwgW25wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRtYXRyaXg6IFtbXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiXSxbXCJleHAoaSAqIHBoaSkgKiAxIC8gc3FydCgyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiAxIC8gc3FydCgyKVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sIFtucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBoaVwiLCBsYW1iZGE6IFwibGFtYmRhXCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1Mzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiR2VuZXJpYyBzaW5nbGUtcXViaXQgcm90YXRpb24gZ2F0ZSB3aXRoIDMgRXVsZXIgYW5nbGVzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyBcImNvcyh0aGV0YS8yKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJVM1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHUzKCV0aGV0YSwgJXBoaSwgJWxhbWJkYSk6XFxuICAgIENPUygldGhldGEvMiksIC0xKkVYUChpKiVsYW1iZGEpKlNJTigldGhldGEvMilcXG4gICAgRVhQKGkqJXBoaSkqU0lOKCV0aGV0YS8yKSwgRVhQKGkqJWxhbWJkYSArIGkqJXBoaSkqQ09TKCV0aGV0YS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbcXVpbF9jb3MocF90aGV0YS8yKSwtcXVpbF9leHAoMWoqcF9sYW1iZGEpKnF1aWxfc2luKHBfdGhldGEvMildLFtxdWlsX2V4cCgxaipwX3BoaSkqcXVpbF9zaW4ocF90aGV0YS8yKSxxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqcXVpbF9jb3MocF90aGV0YS8yKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwidTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKSpzaW4odGhldGEvMilcIiwgXCItc2luKGxhbWJkYSkqc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKSpzaW4odGhldGEvMilcIiwgXCJzaW4ocGhpKSpzaW4odGhldGEvMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIiwgXCJzaW4obGFtYmRhK3BoaSkqY29zKHRoZXRhLzIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhLzIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sIFtucC5leHAoMWoqcF9waGkpKm5wLnNpbihwX3RoZXRhLzIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKm5wLmNvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFsgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgcjJgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic0dhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS80IHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgcjRgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyA0KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlRcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidEdhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIigtUEkvMikgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoLWkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUyYjODIyNDtcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCItTV9QSS8yXCIgfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twr1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRkYWdnZXI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR0ZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIigtUEkvNCkgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoLWkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVCYjODIyNDtcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCItTV9QSS80XCIgfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twrxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRkYWdnZXI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTd2FwcyB0aGUgc3RhdGUgb2YgdHdvIHF1Yml0cy5cIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wieFwiLFwieFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiU1dQXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN3YXBcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgc3dhcChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyKSB7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTIpO1xcblwiICtcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxuXCIgK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlN3YXBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN3YXBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3Jzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTcXVhcmUgcm9vdCBvZiBzd2FwXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCxcIjAuNSAqICgxICsgaSlcIixcIjAuNSAqICgxIC0gaSlcIiwwXSxcblx0XHRcdFx0WzAsXCIwLjUgKiAoMSAtIGkpXCIsXCIwLjUgKiAoMSArIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtTV1BcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHNyc3dhcDpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAwLjUrMC41aSwgMC41LTAuNWksIDBcXG4gICAgMCwgMC41LTAuNWksIDAuNSswLjVpLCAwXFxuICAgIDAsIDAsIDAsIDFcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQKiooMS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwwLjUgKiAoMSArIDFqKSwwLjUgKiAoMSAtIDFqKSwwXSxbMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNyc3dhcFwiLFxuXHRcdFx0XHRcdGZ1bmM6IFwidm9pZCBzcnN3YXAoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcTEsIGNvbnN0IGludCBxMikge1xcblwiICtcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVkocXViaXRzLCBxMiwgTV9QSS8yKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCBNX1BJLzE2KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVoocXViaXRzLCBxMSwgTV9QSS84KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCAtTV9QSS84KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVoocXViaXRzLCBxMiwgTV9QSS8xNik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVkocXViaXRzLCBxMiwgLU1fUEkvMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTEpO1xcbn1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0ZXF1aXZhbGVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaS8yXCIsIGxhbWJkYTogXCItMSpwaVwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCJwaVwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS80XCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjcqcGkvNFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS80XCIsIHBoaTogXCItMSpwaVwiLCBsYW1iZGE6IFwiLTEqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaVwiLCBsYW1iZGE6IFwicGkvMlwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCItMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiNypwaS80XCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpXCIsIGxhbWJkYTogXCJwaS8yXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIi0zKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMC41ICogKDEgLSAxaiksMC41ICogKDEgKyAxaiksMF0sWzAsMCwwLDFdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTUVJUU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0aXN3YXA6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlN3YXBzIHRoZSBzdGF0ZSBvZiB0d28gcXViaXRzLCBhcHBseWluZyBhIC1pIHBoYXNlIHRvIHExIHdoZW4gaXQgaXMgaW4gdGhlIDEgc3RhdGUgYW5kIGEgLWkgcGhhc2UgdG8gcTIgd2hlbiBpdCBpcyBpbiB0aGUgMCBzdGF0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCxcIjAraVwiLDBdLFxuXHRcdFx0XHRbMCxcIjAraVwiLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiaVNXUFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIklTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwiLTEqcGlcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGlcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjMqcGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCIwXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpXCIsIHBoaTogXCJwaS80XCIsIGxhbWJkYTogXCItMSpwaS80XCIgfSwgd2lyZXM6IFsxXX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjMqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIzKnBpLzJcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaVwiLCBwaGk6IFwicGkvNFwiLCBsYW1iZGE6IFwiLTEqcGkvNFwiIH0sIHdpcmVzOiBbMV19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJpc3dhcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eHk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlhZIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwgMCwgMCwgMF0sXG5cdFx0XHRcdFswLCBcImNvcyhwaGkgLyAyKVwiLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgXCJjb3MocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCAwLCAwLCAxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhZXCIsXG5cdFx0XHRcdFx0XCJwYXJhbXNcIjogW1xuXHRcdFx0XHRcdFx0XCJwaGlcIlxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIjMqcGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGhpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN6XCIsIHdpcmVzOiBbMSwgMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTMqcGkvNFwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3pcIiwgd2lyZXM6IFsxLCAwXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzRcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwieHlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgbnAuY29zKHBfcGhpLzIpLCAxaipucC5zaW4ocF9waGkvMiksIDBdLCBbMCwgMWoqbnAuc2luKHBfcGhpLzIpLCBucC5jb3MocF9waGkvMiksIDBdLCBbMCwgMCwgMCwgMV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieHlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLCAwLCAwLCAwXSxbMCwgXCJjb3MocGhpIC8gMilcIiwgXCJpICogc2luKHBoaSAvIDIpXCIsIDBdLFswLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgXCJjb3MocGhpIC8gMilcIiwgMF0sWzAsIDAsIDAsIDFdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgbnAuY29zKHBfcGhpLzIpLCAxaipucC5zaW4ocF9waGkvMiksIDBdLCBbMCwgMWoqbnAuc2luKHBfcGhpLzIpLCBucC5jb3MocF9waGkvMiksIDBdLCBbMCwgMCwgMCwgMV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBOT1QgKENOT1QpIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDFdLFxuXHRcdFx0XHRbMCwwLDEsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhcIixcblx0XHRcdFx0cm9vdDogXCJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDTk9UXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWROb3RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFkgZ2F0ZSAoY29udHJvbGxlZCByb3RhdGlvbiBvdmVyIFktYXhpcyBieSBQSSlcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLFwiLWlcIl0sXG5cdFx0XHRcdFswLDAsXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllcIixcblx0XHRcdFx0cm9vdDogXCJ5XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGF1bGlZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInlcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjeVwiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjeTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIDAsIC1pXFxuICAgIDAsIDAsIGksIDBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwwLC0xal0sWzAsMCwxaiwwXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3o6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgWiBnYXRlIChjb250cm9sbGVkIHJvdGF0aW9uIG92ZXIgWi1heGlzIGJ5IFBJKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJkb3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlpcIixcblx0XHRcdFx0cm9vdDogXCJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlRmxpcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NJR05cIlxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y2g6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgSGFkYW1hcmQgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIjEgLyBzcXJ0KDIpXCJdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIi0xIC8gc3FydCgyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiSFwiLFxuXHRcdFx0XHRyb290OiBcImhcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIjEvc3FydCgyKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImhcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjaFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY2g6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIDAuNzA3MTA2NzgxMTg2NTQ3NVxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIC0wLjcwNzEwNjc4MTE4NjU0NzVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNoXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwxL25wLnNxcnQoMiksMS9ucC5zcXJ0KDIpXSxbMCwwLDEvbnAuc3FydCgyKSwtMS9ucC5zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgSFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEvbnAuc3FydCgyKSwxL25wLnNxcnQoMildLFswLDAsMS9ucC5zcXJ0KDIpLC0xL25wLnNxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzcm46IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgc3F1YXJlIHJvb3Qgb2YgTk9UXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFswLDAsXCIwLjUtMC41aVwiLFwiMC41KzAuNWlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiLFxuXHRcdFx0XHRyb290OiBcInNyblwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiLTEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCItMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3JuXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNzcm46XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMCwgMCwgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3hcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCxcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXSxbMCwwLFwiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG1zOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJNw7hsbWVyLVPDuHJlbnNlbiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcIi1pKnNpbih0aGV0YSlcIl0sXG5cblx0XHRcdFx0WzAsIFwiY29zKHRoZXRhKVwiLCBcIi1pKnNpbih0aGV0YSlcIiwgMF0sXG5cblx0XHRcdFx0WzAsIFwiLWkqc2luKHRoZXRhKVwiLCBcImNvcyh0aGV0YSlcIiwgMF0sXG5cblx0XHRcdFx0W1wiLWkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiY2lyY2xlXCIsXCJjaXJjbGVcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgbXMoJXRoZXRhKTpcXG4gICAgQ09TKCV0aGV0YSksIDAsIDAsIC1pKlNJTigldGhldGEpXFxuICAgIDAsIENPUygldGhldGEpLCAtaSpTSU4oJXRoZXRhKSwgMFxcbiAgICAwLCAtaSpTSU4oJXRoZXRhKSwgQ09TKCV0aGV0YSksIDBcXG4gICAgLWkqU0lOKCV0aGV0YSksIDAsIDAsIENPUygldGhldGEpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJtc1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbcXVpbF9jb3MocF90aGV0YSksIDAsIDAsIC0xaipxdWlsX3NpbihwX3RoZXRhKV0sIFswLCBxdWlsX2NvcyhwX3RoZXRhKSwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipxdWlsX3NpbihwX3RoZXRhKSwgcXVpbF9jb3MocF90aGV0YSksIDBdLCBbLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwLCAwLCBxdWlsX2NvcyhwX3RoZXRhKV0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeHhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ4eFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1tucC5jb3MocF90aGV0YSksIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSldLCBbMCwgbnAuY29zKHBfdGhldGEpLCAtMWoqbnAuc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipucC5zaW4ocF90aGV0YSksIG5wLmNvcyhwX3RoZXRhKSwgMF0sIFstMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1tcImNvcyh0aGV0YSlcIiwgMCwgMCwgXCItaSpzaW4odGhldGEpXCJdLFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFtcIi1pKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhKSwgMCwgMCwgLTFqKm5wLnNpbihwX3RoZXRhKV0sIFswLCBucC5jb3MocF90aGV0YSksIC0xaipucC5zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKm5wLnNpbihwX3RoZXRhKSwgbnAuY29zKHBfdGhldGEpLCAwXSwgWy0xaipucC5zaW4ocF90aGV0YSksIDAsIDAsIG5wLmNvcyhwX3RoZXRhKV0gXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0XG5cdFx0eXk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIllZIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEpXCIsIDAsIDAsIFwiaSpzaW4odGhldGEpXCJdLFxuXG5cdFx0XHRcdFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFtcImkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiY2lyY2xlXCIsXCJjaXJjbGVcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInl5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgeXkoJXRoZXRhKTpcXG4gICAgQ09TKCV0aGV0YSksIDAsIDAsIGkqU0lOKCV0aGV0YSlcXG4gICAgMCwgQ09TKCV0aGV0YSksIC1pKlNJTigldGhldGEpLCAwXFxuICAgIDAsIC1pKlNJTigldGhldGEpLCBDT1MoJXRoZXRhKSwgMFxcbiAgICBpKlNJTigldGhldGEpLCAwLCAwLCBDT1MoJXRoZXRhKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5eVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbcXVpbF9jb3MocF90aGV0YSksIDAsIDAsIDFqKnF1aWxfc2luKHBfdGhldGEpXSwgWzAsIHF1aWxfY29zKHBfdGhldGEpLCAtMWoqcXVpbF9zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCBxdWlsX2NvcyhwX3RoZXRhKSwgMF0sIFsxaipxdWlsX3NpbihwX3RoZXRhKSwgMCwgMCwgcXVpbF9jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHQvL0BUT0RPIGFkZCBmdW5jdGlvblxuXHRcdFx0XHRcdGZ1bmM6IFwiVE9ET1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcImkqc2luKHRoZXRhKVwiXSxbMCwgXCJjb3ModGhldGEpXCIsIFwiLWkqc2luKHRoZXRhKVwiLCAwXSxbMCwgXCItaSpzaW4odGhldGEpXCIsIFwiY29zKHRoZXRhKVwiLCAwXSxbXCJpKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhKSwgMCwgMCwgMWoqbnAuc2luKHBfdGhldGEpXSwgWzAsIG5wLmNvcyhwX3RoZXRhKSwgLTFqKm5wLnNpbihwX3RoZXRhKSwgMF0sIFswLCAtMWoqbnAuc2luKHBfdGhldGEpLCBucC5jb3MocF90aGV0YSksIDBdLCBbMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5eVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnl5XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR6ejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGFyYW1ldHJpYyAyLXF1Yml0IHJvdGF0aW9uIGFib3V0IFpaXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyBcImV4cCgtaSAqIHRoZXRhIC8gMilcIiwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIFwiZXhwKGkgKiB0aGV0YSAvIDIpXCIsIDAsIDAgIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJleHAoaSAqIHRoZXRhIC8gMilcIiwgMCAgXSxcblx0XHRcdFx0WyAwLCAwLCAwLCBcImV4cCgtaSAqIHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImNpcmNsZVwiLFwiY2lyY2xlXCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaWlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ6elwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHp6KCV0aGV0YSk6XFxuICAgIEVYUCgtaSAqICV0aGV0YSAvIDIpLCAwLCAwLCAwXFxuICAgIDAsIEVYUChpICogJXRoZXRhIC8gMiksIDAsIDBcXG4gICAgMCwgMCwgRVhQKGkgKiAldGhldGEgLyAyKSwgMFxcbiAgICAwLCAwLCAwLCBFWFAoLWkgKiAldGhldGEgLyAyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwienpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIlsgWyBxdWlsX2V4cCgtMWogKiBwX3RoZXRhIC8gMiksIDAsIDAsIDAgXSwgWyAwLCBxdWlsX2V4cCgxaiAqIHBfdGhldGEgLyAyKSwgMCwgMF0sIFsgMCwgMCwgcXVpbF9leHAoMWogKiBwX3RoZXRhIC8gMiksIDAgXSwgWyAwLCAwLCAwLCBxdWlsX2V4cCgtMWogKiBwX3RoZXRhIC8gMikgXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwicnp6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyenpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyMjoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzJcIixcblx0XHRcdFx0cm9vdDogXCJyMlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiTV9QSS8yXCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDIpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3I0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzQgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvNFwiLFxuXHRcdFx0XHRyb290OiBcInI0XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS80XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDQpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3I4OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzggcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gOClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvOFwiLFxuXHRcdFx0XHRyb290OiBcInI4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzhcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvOFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7ihZtcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMCwgMCwgMF0sIFswLCAxLCAwLCAwXSwgWzAsIDAsIDEsIDBdLCBbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA4KV0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEsMF0sWzAsMCwwLFwiZXhwKGkgKiBwaSAvIDgpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaiAqIG5wLnBpIC8gOCldIF1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhcm91bmQgdGhlIFgtYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YSAvIDIpXCIsIFwiLWkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCItaSAqIHNpbih0aGV0YSAvIDIpXCIsIFwiY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWFwiLFxuXHRcdFx0XHRyb290OiBcInJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNyeCgldGhldGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLWkqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCAtaSpTSU4oJXRoZXRhLzIpLCBDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInJ4XCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHsgdGhldGE6IFwidGhldGFcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCIsXG5cdFx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3J4XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWyAxLCAwLCAwLCAwIF0sIFsgMCwgMSwgMCwgMCBdLCBbIDAsIDAsIHF1aWxfY29zKHBfdGhldGEgLyAyKSwgLTFqKnF1aWxfc2luKHBfdGhldGEgLyAyKSBdLCBbIDAsIDAsIC0xaipxdWlsX3NpbihwX3RoZXRhIC8gMiksIHF1aWxfY29zKHBfdGhldGEgLyAyKSBdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIjBcIiwgXCItc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCIwXCIsIFwiLXNpbih0aGV0YS8yKVwiXSwgW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBSeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGkvMlwiIH19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGkvMlwiIH19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLCBbIDAsIDEsIDAsIDAgXSwgWyAwLCAwLCBucC5jb3MocF90aGV0YSAvIDIpLCAtMWoqbnAuc2luKHBfdGhldGEgLyAyKSBdLCBbIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSAvIDIpLCBucC5jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyeToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhcm91bmQgdGhlIFktYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YSAvIDIpXCIsIFwiLTEgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUllcIixcblx0XHRcdFx0cm9vdDogXCJyeVwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjcnkoJXRoZXRhKTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIENPUygldGhldGEvMiksIC0xKlNJTigldGhldGEvMilcXG4gICAgMCwgMCwgU0lOKCV0aGV0YS8yKSwgQ09TKCV0aGV0YS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJyeVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhXCIgfSxcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgcXVpbF9jb3MocF90aGV0YSAvIDIpLCAtMSpxdWlsX3NpbihwX3RoZXRhIC8gMikgXSxbIDAsIDAsIHF1aWxfc2luKHBfdGhldGEgLyAyKSwgcXVpbF9jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXSwgW1wiLXNpbih0aGV0YS8yKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcInNpbih0aGV0YS8yKVwiLCBcIjBcIl0sIFtcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgUnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCItMSp0aGV0YSAvIDJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCItMSp0aGV0YSAvIDJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbIDEsIDAsIDAsIDAgXSxbIDAsIDEsIDAsIDAgXSxbIDAsIDAsIG5wLmNvcyhwX3RoZXRhIC8gMiksIC0xKm5wLnNpbihwX3RoZXRhIC8gMikgXSxbIDAsIDAsIG5wLnNpbihwX3RoZXRhIC8gMiksIG5wLmNvcyhwX3RoZXRhIC8gMikgXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3J6OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFyb3VuZCB0aGUgWi1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLCAwLCBcImNvcyhwaGkgLyAyKSAtIGkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCAwLCAwLCBcImNvcyhwaGkgLyAyKSArIGkgKiBzaW4ocGhpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiZG90XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWlwiLFxuXHRcdFx0XHRyb290OiBcInJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyelwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjcnooJXBoaSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCBDT1MoJXBoaSAvIDIpIC0gaSAqIFNJTiglcGhpIC8gMiksIDBcXG4gICAgMCwgMCwgMCwgQ09TKCVwaGkgLyAyKSArIGkgKiBTSU4oJXBoaSAvIDIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCBxdWlsX2NvcyhwX3BoaSAvIDIpIC0gMWogKiBxdWlsX3NpbihwX3BoaSAvIDIpLCAwXSwgWzAsIDAsIDAsIHF1aWxfY29zKHBfcGhpIC8gMikgKyAxaiAqIHF1aWxfc2luKHBfcGhpIC8gMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJyelwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7IHBoaTogXCJwaGlcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUm90YXRlWlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgbnAuY29zKHBfcGhpIC8gMikgLSAxaiAqIG5wLnNpbihwX3BoaSAvIDIpLCAwXSwgWzAsIDAsIDAsIG5wLmNvcyhwX3BoaSAvIDIpICsgMWogKiBucC5zaW4ocF9waGkgLyAyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN1MToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhYm91dCB0aGUgWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBsYW1iZGEpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiQ1UxXCIsXG5cdFx0XHRcdHJvb3Q6IFwidTFcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1BIQVNFXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWoqcF9sYW1iZGEpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaipwX2xhbWJkYSldXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJQSFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3UyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFib3V0IHRoZSBYK1ogYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcIjEgLyBzcXJ0KDIpXCIsIFwiLWV4cChpICogbGFtYmRhKSAqIDEgLyBzcXJ0KDIpXCIgXSxcblx0XHRcdFx0WyAwLCAwLCBcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNVMlwiLFxuXHRcdFx0XHRyb290OiBcInUyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjdTIoJXBoaSwgJWxhbWJkYSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAxL1NRUlQoMiksIC0xKkVYUChpKiVsYW1iZGEpKjEvU1FSVCgyKVxcbiAgICAwLCAwLCBFWFAoaSolcGhpKSoxL1NRUlQoMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKjEvU1FSVCgyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvcXVpbF9zcXJ0KDIpLCAtcXVpbF9leHAoMWoqcF9sYW1iZGEpKjEvcXVpbF9zcXJ0KDIpXSxbMCwgMCwgcXVpbF9leHAoMWoqcF9waGkpKjEvcXVpbF9zcXJ0KDIpLCBxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9xdWlsX3NxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdG1hdHJpeDogW1tbXCIxL3NxcnQoMilcIiwgXCIwXCJdLCBbXCItY29zKGxhbWJkYSkvc3FydCgyKVwiLCBcIi1zaW4obGFtYmRhKS9zcXJ0KDIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKS9zcXJ0KDIpXCIsIFwic2luKHBoaSkvc3FydCgyKVwiXSwgW1wiY29zKGxhbWJkYStwaGkpL3NxcnQoMilcIiwgXCJzaW4obGFtYmRhK3BoaSkvc3FydCgyKVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiIF0sWyAwLCAwLCBcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIgXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSxbMCwgMCwgbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN1Mzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBnYXRlIHdpdGggMyBFdWxlciBhbmdsZXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbIDEsIDAsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAxLCAwLCAwIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFxuXHRcdFx0XHRbIDAsIDAsIFwiZXhwKGkgKiBwaGkpICogc2luKHRoZXRhIC8gMilcIiwgXCJleHAoaSAqIGxhbWJkYSArIGkgKiBwaGkpICogY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNVM1wiLFxuXHRcdFx0XHRyb290OiBcInUzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGN1MygldGhldGEsICVwaGksICVsYW1iZGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLTEqRVhQKGkqJWxhbWJkYSkqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCBFWFAoaSolcGhpKSpTSU4oJXRoZXRhLzIpLCBFWFAoaSolbGFtYmRhICsgaSolcGhpKSpDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBxdWlsX2NvcyhwX3RoZXRhLzIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqcXVpbF9zaW4ocF90aGV0YS8yKV0sWzAsIDAsIHF1aWxfZXhwKDFqKnBfcGhpKSpxdWlsX3NpbihwX3RoZXRhLzIpLHF1aWxfZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpxdWlsX2NvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKSpzaW4odGhldGEvMilcIiwgXCItc2luKGxhbWJkYSkqc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKSpzaW4odGhldGEvMilcIiwgXCJzaW4ocGhpKSpzaW4odGhldGEvMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIiwgXCJzaW4obGFtYmRhK3BoaSkqY29zKHRoZXRhLzIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgbnAuY29zKHBfdGhldGEvMiksLW5wLmV4cCgxaipwX2xhbWJkYSkqbnAuc2luKHBfdGhldGEvMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKm5wLnNpbihwX3RoZXRhLzIpLG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFsgMCwgMCwgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjczoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgY3IyYClcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNcIixcblx0XHRcdFx0cm9vdDogXCJzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS8yXCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEsIDBdLFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDIpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3Q6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpcyAoc3lub255bSBmb3IgYGNyNGApXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJUXCIsXG5cdFx0XHRcdHJvb3Q6IFwidFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiTV9QSS80XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpewrxcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxLCAwXSxbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA0KV1dXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgKC1QSS8yKSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cCgtaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlMmIzgyMjQ7XCIsXG5cdFx0XHRcdHJvb3Q6IFwic2RnXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIi1NX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcIi0xKnBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpeLcK9XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgtMWogKiBucC5waSAvIDIpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN0ZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgKC1QSS80KSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cCgtaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlQmIzgyMjQ7XCIsXG5cdFx0XHRcdHJvb3Q6IFwidGRnXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIi1NX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcIi0xKnBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpeLcK8XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgtMWogKiBucC5waSAvIDQpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiVG9mZm9saSBha2EgXFxcIkNDTk9UXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDEsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDEsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDAsMV0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwxLDBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNDTk9UXCIsXG5cdFx0XHRcdHJvb3Q6IFwieFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDQ05PVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDWFwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY2N4XCIsXG5cdFx0XHRcdFx0ZnVuYzogXCJ2b2lkIGNjeChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyLCBjb25zdCBpbnQgcTMpIHtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTMsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTMsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTEpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTIsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDQ05PVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDTk9UXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjc3dhcDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBzd2FwIGFrYSBcXFwiRnJlZGtpblxcXCIgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcInhcIixcInhcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNXUFwiLFxuXHRcdFx0XHRyb290OiBcInN3YXBcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N3YXBcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgY3N3YXAoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcTEsIGNvbnN0IGludCBxMiwgY29uc3QgaW50IHEzKSB7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMywgcTIpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBoYWRhbWFyZChxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGhhZGFtYXJkKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMiwgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTMsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU3dhcFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLCBbMCwxLDAsMCwwLDAsMCwwXSwgWzAsMCwxLDAsMCwwLDAsMF0sIFswLDAsMCwxLDAsMCwwLDBdLCBbMCwwLDAsMCwxLDAsMCwwXSwgWzAsMCwwLDAsMCwwLDEsMF0sIFswLDAsMCwwLDAsMSwwLDBdLCBbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjc3Jzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHNxdWFyZSByb290IG9mIHN3YXBcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMSwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsXCIwLjUgKiAoMSArIGkpXCIsXCIwLjUgKiAoMSAtIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsXCIwLjUgKiAoMSAtIGkpXCIsXCIwLjUgKiAoMSArIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwwLDFdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7U1dQXCIsXG5cdFx0XHRcdHJvb3Q6IFwic3Jzd2FwXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3Jzd2FwXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcImNvbnRyb2xsZWRcIixcblx0XHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3Nyc3dhcFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY3Nyc3dhcDpcXG4gICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwXFxuICAgIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDBcXG4gICAgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMFxcbiAgICAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwXFxuICAgIDAsIDAsIDAsIDAsIDAsIDAuNSswLjVpLCAwLjUtMC41aSwgMFxcbiAgICAwLCAwLCAwLCAwLCAwLCAwLjUtMC41aSwgMC41KzAuNWksIDBcXG4gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3Nyc3dhcFwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMCwwLDAsMCwwXSxbMCwxLDAsMCwwLDAsMCwwXSxbMCwwLDEsMCwwLDAsMCwwXSxbMCwwLDAsMSwwLDAsMCwwXSxbMCwwLDAsMCwxLDAsMCwwXSxbMCwwLDAsMCwwLDAuNSAqICgxICsgMWopLDAuNSAqICgxIC0gMWopLDBdLFswLDAsMCwwLDAsMC41ICogKDEgLSAxaiksMC41ICogKDEgKyAxaiksMF0sWzAsMCwwLDAsMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLFswLDEsMCwwLDAsMCwwLDBdLFswLDAsMSwwLDAsMCwwLDBdLFswLDAsMCwxLDAsMCwwLDBdLFswLDAsMCwwLDEsMCwwLDBdLFswLDAsMCwwLDAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMCwwLDAsMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1FSVFNXQVBcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cmVzZXQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJlc2V0cyBxdWJpdFwiLFxuXHRcdFx0bWF0cml4OiBbXSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJTVFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSRVNFVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJlc2V0XCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyZXNldFwiLFxuXHRcdFx0XHRcdC8vQFRPRE8gYWRkIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZnVuYzogXCJUT0RPXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSZXNldFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bWVhc3VyZToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiTWVhc3VyZXMgcXViaXQgYW5kIHN0b3JlcyBjaGFuY2UgKDAgb3IgMSkgaW50byBjbGFzc2ljYWwgYml0XCIsXG5cdFx0XHRtYXRyaXg6IFtdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImdhdWdlXCJdLFxuXHRcdFx0XHRsYWJlbDogXCJcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiTUVBU1VSRVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1lYXN1cmVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwibWVhc3VyZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiTVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpcy5pbml0KG51bVF1Yml0cyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVmYXVsdEh5YnJpZE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHtcblx0XHRvcHRpbWl6ZXI6IFwiUG93ZWxsXCIsXG5cdFx0dG9sZXJhbmNlOiAwLjAwMSxcblx0XHRjb3N0RnVuY3Rpb246IHtcblx0XHRcdHB5dGhvbjogXCJcIixcblx0XHRcdGphdmFzY3JpcHQ6IFwiXCJcblx0XHR9XG5cdH07XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG51bVF1Yml0cywgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR0aGlzLm51bVF1Yml0cyA9IG51bVF1Yml0cyB8fCAxO1xuXHR0aGlzLmdhdGVzID0gW107XG5cdHRoaXMucGFydGl0aW9uTWFwID0gW107XG5cdHRoaXMucGFydGl0aW9uQ291bnQgPSAwO1xuXHR0aGlzLnBhcnRpdGlvbkluZm8gPSB7fTtcblxuXHR0aGlzLnBhcmFtcyA9IFtdO1xuXHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0cGFyYW1zOiB7fSxcblxuXHRcdGh5YnJpZDogZmFsc2UsXG5cdFx0aHlicmlkT3B0aW9uczogdGhpcy5kZWZhdWx0SHlicmlkT3B0aW9ucygpXG5cdH07XG5cblx0aWYoIW9wdGlvbnMua2VlcEN1c3RvbUdhdGVzKSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlcyA9IHt9O1xuXHR9XG5cblx0dGhpcy5jcmVncyA9IHt9O1xuXHR0aGlzLmNvbGxhcHNlZCA9IFtdO1xuXHR0aGlzLnByb2IgPSBbXTtcblx0dGhpcy5tZWFzdXJlUmVzZXRzUXViaXQgPSBmYWxzZTtcblx0dGhpcy5yZXZlcnNlQml0T3JkZXIgPSBmYWxzZTtcblxuXHR0aGlzLmNsZWFyKCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY2xlYXJHYXRlcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmdhdGVzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuY2xlYXJHYXRlcygpO1xuXHR0aGlzLmluaXRTdGF0ZSgpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzZXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuXHQvLyByZXNldCBzdGF0ZVxuXHR0aGlzLnN0YXRlID0ge307XG5cdHRoaXMuc3RhdGVCaXRzID0gMDtcblx0dGhpcy5wYXJ0aXRpb25DYWNoZSA9IHt9O1xuXG5cdC8vIHJlc2V0IGNyZWdzXG5cdGZvcih2YXIgY3JlZyBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDA7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0dGhpcy5jcmVnc1tjcmVnXS5wdXNoKDApO1xuXHRcdH1cblx0fVxuXG5cdC8vIHJlc2V0IG1lYXN1cmVtZW50XG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXG5cdC8vIHJlc2V0IHN0YXRpc3RpY3Ncblx0dGhpcy5zdGF0cyA9IHtcblx0XHRkdXJhdGlvbjogMFxuXHR9O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluaXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0dGhpcy5zdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZm9ybWF0Q29tcGxleCA9IGZ1bmN0aW9uKGNvbXBsZXgsIG9wdGlvbnMpIHtcblx0cmV0dXJuIGZvcm1hdENvbXBsZXgyKGNvbXBsZXgucmUsIGNvbXBsZXguaW0sIG9wdGlvbnMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm11bHRpcGx5U3F1YXJlTWF0cmljZXMgPSBmdW5jdGlvbihtMSwgbTIpIHtcblx0dmFyIGxlbiA9IG0xLmxlbmd0aDtcblxuXHR2YXIgYyA9IGxlbjtcblx0dmFyIGQgPSBsZW47XG5cdHZhciBrID0gbGVuO1xuXG5cdHZhciByZXMgPSBbXTtcblx0d2hpbGUoYy0tKSB7XG5cdFx0cmVzW2NdID0gW107XG5cdFx0ZCA9IGxlbjtcblx0XHR3aGlsZShkLS0pIHtcblx0XHRcdHJlc1tjXVtkXSA9IDA7XG5cdFx0XHRrID0gbGVuO1xuXHRcdFx0d2hpbGUoay0tKSB7XG5cdFx0XHRcdGlmKG0xW2NdW2tdICYmIG0yW2tdW2RdKSB7XG5cdFx0XHRcdFx0aWYocmVzW2NdW2RdKSB7XG5cdFx0XHRcdFx0XHRyZXNbY11bZF0gPSBtYXRoLmFkZChyZXNbY11bZF0sIG1hdGgubXVsdGlwbHkobTFbY11ba10sIG0yW2tdW2RdKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc1tjXVtkXSA9IG1hdGgubXVsdGlwbHkobTFbY11ba10sIG0yW2tdW2RdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0lkZW50aXR5TWF0cml4ID0gZnVuY3Rpb24obSwgcHJlY2lzaW9uKSB7XG5cdGlmKHR5cGVvZiBwcmVjaXNpb24gPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHByZWNpc2lvbiA9IDE0O1xuXHR9XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbS5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYobWF0aC5yb3VuZChtW2ldW2pdLCBwcmVjaXNpb24pICE9IChpID09IGogPyAxIDogMCkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzVW5pdGFyeU1hdHJpeCA9IGZ1bmN0aW9uKFUsIHByZWNpc2lvbikge1xuXHRyZXR1cm4gdGhpcy5pc0lkZW50aXR5TWF0cml4KG1hdGgubXVsdGlwbHkoVSwgbWF0aC5jdHJhbnNwb3NlKFUpKSwgcHJlY2lzaW9uKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzSGVybWl0aWFuTWF0cml4ID0gZnVuY3Rpb24oSCwgcHJlY2lzaW9uKSB7XG5cdHZhciBkaWZmID0gdGhpcy5tYXRyaXhEaWZmKEgsIG1hdGguY3RyYW5zcG9zZShIKSlcblxuXHRyZXR1cm4gZGlmZiA8PSBtYXRoLnBvdygxMCwgLTEgKiAocHJlY2lzaW9uIHx8IDE0KSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhEaWZmID0gZnVuY3Rpb24obWF0cml4MSwgbWF0cml4Mikge1xuXHR2YXIgdG90YWwgPSAwO1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgbWF0cml4MS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cxID0gbWF0cml4MVtyXTtcblx0XHR2YXIgcm93MiA9IG1hdHJpeDJbcl07XG5cdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdzEubGVuZ3RoOyBjKyspIHtcblx0XHRcdHZhciBpdGVtMSA9IHJvdzFbY107XG5cdFx0XHR2YXIgaXRlbTIgPSByb3cyW2NdO1xuXG5cdFx0XHR2YXIgaTEgPSAodHlwZW9mIGl0ZW0xID09IFwib2JqZWN0XCIpID8gaXRlbTEgOiBtYXRoLmNvbXBsZXgoaXRlbTEpO1xuXHRcdFx0dmFyIGkyID0gKHR5cGVvZiBpdGVtMiA9PSBcIm9iamVjdFwiKSA/IGl0ZW0yIDogbWF0aC5jb21wbGV4KGl0ZW0yKTtcblxuXHRcdFx0Ly8gZGlzdGFuY2UgaW4gdGhlIGNvbXBsZXggcGxhbmVcblx0XHRcdHZhciBkaXN0YW5jZSA9IG1hdGguYWJzKG1hdGguc3VidHJhY3QoaTEsIGkyKSk7XG5cblx0XHRcdHRvdGFsICs9IGRpc3RhbmNlO1xuXG5cdFx0XHRjb3VudCsrO1xuXHRcdH1cblx0fVxuXG5cdHZhciBkaWZmID0gY291bnQgPyAodG90YWwgLyBjb3VudCkgOiAwO1xuXG5cdHJldHVybiBkaWZmO1xufTtcblxuXG4vL1xuLy8gRXh0cmFjdCB2YXJpYWJsZXMgZnJvbSBleHByZXNzaW9uIHN0cmluZyBhbmQgcmV0dXJucyBvYmplY3Qgd2l0aCBleHByZXNzaW9uIHN0cmluZyBhbmQgYXJyYXkgb2YgdmFyaWFibGUgbmFtZXNcbi8vIE5vdGUgdGhhdCBzeW1ib2wgXCJqXCIgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gXCJpXCIgKGltYWdpbmFyeSB1bml0IHVzZWQgaW4gcHl0aG9uIGlzIFwialwiIGJ1dCB3ZSBuZWVkIFwiaVwiKVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wYXJzZU1hdGhTdHJpbmcgPSBmdW5jdGlvbihzdHIpIHtcblx0dmFyIHZhcmlhYmxlcyA9IFtdO1xuXG5cdC8vIGNvbnZlcnQgaW1hZ2luYXJ5IHVuaXQgXCJqXCIgdG8gXCJpXCJcblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdGlmKG5vZGUubmFtZSA9PSBcImpcIikge1xuXHRcdFx0XHRyZXR1cm4gXCJpXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHZhcmlhYmxlcy5pbmRleE9mKG5vZGUubmFtZSkgPCAwKSB7XG5cdFx0XHRcdHZhcmlhYmxlcy5wdXNoKG5vZGUubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBub2RlID0gbWF0aC5wYXJzZShzdHIucmVwbGFjZSgvW1xcdFxcblxccl0vZ20sIFwiXCIpKTtcblxuXHR2YXIgZXhwcmVzc2lvbiA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhwcmVzc2lvbjogZXhwcmVzc2lvbixcblx0XHR2YXJpYWJsZXM6IHZhcmlhYmxlcyxcblx0XHRub2RlOiBub2RlXG5cdH07XG59O1xuXG4vL1xuLy8gRXZhbHVhdGUgZXhwcmVzc2lvblxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ldmFsTWF0aFN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgdmFycykge1xuXHR2YXJzID0gdmFycyB8fCB7fTtcblxuXHR2YXIgcGFyc2VkID0gdGhpcy5wYXJzZU1hdGhTdHJpbmcoc3RyKTtcblxuXHR2YXIgcmVzID0gbWF0aC5ldmFsdWF0ZShwYXJzZWQuZXhwcmVzc2lvbiwgdmFycyk7XG5cdGlmKHJlcyBpbnN0YW5jZW9mIG1hdGguTWF0cml4KSB7XG5cdFx0cmV0dXJuIHJlcy50b0FycmF5KCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnNlTWF0cml4ID0gZnVuY3Rpb24oTSwgdmFycykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIEEgPSBudWxsO1xuXHRpZih0eXBlb2YgTSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0QSA9IHNlbGYuZXZhbE1hdGhTdHJpbmcoTSwgdmFycyk7XG5cdH0gZWxzZSB7XG5cdFx0QSA9IE07XG5cdH1cblxuXHR2YXIgcmVzID0gW107XG5cblx0QS5tYXAoZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0cmVzLnB1c2goW10pO1xuXHRcdFx0cm93Lm1hcChmdW5jdGlvbih2YWwsIGNvbEluZGV4KSB7XG5cdFx0XHRcdGlmKHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHJlc1tyb3dJbmRleF0ucHVzaChzZWxmLmV2YWxNYXRoU3RyaW5nKHZhbCwgdmFycykpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc1tyb3dJbmRleF0ucHVzaCh2YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYodHlwZW9mIHJvdyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHJlcy5wdXNoKHNlbGYuZXZhbE1hdGhTdHJpbmcocm93LCB2YXJzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXMucHVzaChyb3cpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhIYXNDb21wbGV4RWxlbWVudCA9IGZ1bmN0aW9uKE0pIHtcblx0Zm9yKHZhciByID0gMDsgciA8IE0ubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gTVtyXTtcblxuXHRcdGlmKHJvdyBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdHZhciBjZWxsID0gcm93W2NdO1xuXG5cdFx0XHRcdGlmKGNlbGwgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXggfHwgKCh0eXBlb2YgY2VsbCA9PSBcIm9iamVjdFwiKSAmJiAoKGNlbGwubWF0aGpzICYmIGNlbGwubWF0aGpzID09IFwiQ29tcGxleFwiKSB8fCAoY2VsbC50eXBlICYmIGNlbGwudHlwZSA9PSBcIkNvbXBsZXhcIikpKSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHJvdyBpbnN0YW5jZW9mIG1hdGguQ29tcGxleCB8fCAoKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikgJiYgKChyb3cubWF0aGpzICYmIHJvdy5tYXRoanMgPT0gXCJDb21wbGV4XCIpIHx8IChyb3cudHlwZSAmJiByb3cudHlwZSA9PSBcIkNvbXBsZXhcIikpKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuXG4vL1xuLy8gT3B0aW9uczoge1xuLy8gICAgIG1pbmlmeTogICAgICAgICBmYWxzZVxuLy9cdCAgIGZpeGVkV2lkdGg6ICAgICBmYWxzZVxuLy8gICAgIGRlY2ltYWxQbGFjZXM6ICAxNCxcbi8vICAgICBpb3RhQ2hhcjogICAgICAgXCJpXCJcbi8vIH1cbi8vXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc3RyaW5naWZ5TWF0cml4ID0gZnVuY3Rpb24oTSwgb3B0aW9ucykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0Ly8gbWF0aGpzIE1hdHJpeCB0byBhcnJheVxuXHR2YXIgQSA9IE0udG9BcnJheSA/IE0udG9BcnJheSgpIDogTTtcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZm9yY2VDb21wbGV4ID0gZmFsc2U7XG5cdGlmKG9wdGlvbnMuZml4ZWRXaWR0aCkge1xuXHRcdC8vIGZvcmNlQ29tcGxleCBpZiBtYXRyaXggaGFzIGF0IGxlYXN0IG9uZSBjb21wbGV4IGVsZW1lbnRcblx0XHRmb3JjZUNvbXBsZXggPSB0aGlzLm1hdHJpeEhhc0NvbXBsZXhFbGVtZW50KEEpO1xuXHR9XG5cblx0dmFyIHN0ciA9IFwiXCI7XG5cdHN0ciArPSBcIltcIjtcblx0QS5tYXAoZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuXHRcdGlmKHJvd0luZGV4ID4gMCkge1xuXHRcdFx0c3RyICs9IFwiLFwiO1xuXHRcdH1cblx0XHRpZighb3B0aW9ucy5taW5pZnkpIHtcblx0XHRcdHN0ciArPSBcIlxcbiAgXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0ciArPSBcIiBcIjtcblx0XHR9XG5cblx0XHRpZihyb3cgaW5zdGFuY2VvZiBBcnJheSkge1xuXHRcdFx0c3RyICs9IFwiW1wiO1xuXHRcdFx0cm93Lm1hcChmdW5jdGlvbihlbCwgZWxJbmRleCkge1xuXHRcdFx0XHRpZihlbEluZGV4ID4gMCkge1xuXHRcdFx0XHRcdHN0ciArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZWwgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXgpIHtcblx0XHRcdFx0XHRzdHIgKz0gc2VsZi5mb3JtYXRDb21wbGV4KGVsLCBvcHRpb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZigodHlwZW9mIGVsID09IFwib2JqZWN0XCIpICYmICgoZWwubWF0aGpzICYmIGVsLm1hdGhqcyA9PSBcIkNvbXBsZXhcIikgfHwgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSBcIkNvbXBsZXhcIikpKSB7XG5cdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0Q29tcGxleDIoZWwucmUsIGVsLmltLCBvcHRpb25zKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYodHlwZW9mIGVsID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gZXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0XHRzdHIgKz0gZWw7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZihmb3JjZUNvbXBsZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0Q29tcGxleDIoZWwsIDAsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHN0ciArPSBmb3JtYXRGbG9hdChlbCwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0c3RyICs9IFwiXVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZihyb3cgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXgpIHtcblx0XHRcdFx0c3RyICs9IHNlbGYuZm9ybWF0Q29tcGxleChyb3csIG9wdGlvbnMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYoKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikgJiYgKChyb3cubWF0aGpzICYmIHJvdy5tYXRoanMgPT0gXCJDb21wbGV4XCIpIHx8IChyb3cudHlwZSAmJiByb3cudHlwZSA9PSBcIkNvbXBsZXhcIikpKSB7XG5cdFx0XHRcdFx0c3RyICs9IGZvcm1hdENvbXBsZXgyKGVsLnJlLCBlbC5pbSwgb3B0aW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYodHlwZW9mIHJvdyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHQvLyBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHRzdHIgKz0gcm93O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihmb3JjZUNvbXBsZXgpIHtcblx0XHRcdFx0XHRcdFx0c3RyICs9IGZvcm1hdENvbXBsZXgyKHJvdywgMCwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0RmxvYXQocm93LCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRpZihBLmxlbmd0aCkge1xuXHRcdGlmKCFvcHRpb25zLm1pbmlmeSkge1xuXHRcdFx0c3RyICs9IFwiXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0ciArPSBcIiBcIjtcblx0XHR9XG5cdH1cblx0c3RyICs9IFwiXVwiO1xuXG5cdHJldHVybiBzdHI7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhSZSA9IGZ1bmN0aW9uKFUpIHtcblx0dmFyIHJlcyA9IFtdO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgVS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cgPSBVW3JdO1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0dmFyIG5ld1JvdyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdy5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRpZih0eXBlb2Ygcm93W2NdID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRuZXdSb3cucHVzaChyb3dbY10ucmUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1Jvdy5wdXNoKHJvd1tjXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlcy5wdXNoKG5ld1Jvdyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRuZXdSb3cucHVzaChyb3cucmUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Um93LnB1c2gocm93KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1hdHJpeEltID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgcmVzID0gW107XG5cdGZvcih2YXIgciA9IDA7IHIgPCBVLmxlbmd0aDsgcisrKSB7XG5cdFx0dmFyIHJvdyA9IFVbcl07XG5cdFx0aWYoQXJyYXkuaXNBcnJheShyb3cpKSB7XG5cdFx0XHR2YXIgbmV3Um93ID0gW107XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdGlmKHR5cGVvZiByb3dbY10gPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdG5ld1Jvdy5wdXNoKHJvd1tjXS5pbSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3Um93LnB1c2goMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlcy5wdXNoKG5ld1Jvdyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRuZXdSb3cucHVzaChyb3cuaW0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Um93LnB1c2goMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhBYnMgPSBmdW5jdGlvbihVKSB7XG5cdHZhciByZXMgPSBbXTtcblx0Zm9yKHZhciByID0gMDsgciA8IFUubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gVVtyXTtcblx0XHRpZihBcnJheS5pc0FycmF5KHJvdykpIHtcblx0XHRcdHZhciBuZXdSb3cgPSBbXTtcblx0XHRcdGZvcih2YXIgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0bmV3Um93LnB1c2gobWF0aC5hYnMocm93W2NdKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXMucHVzaChuZXdSb3cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXMucHVzaChtYXRoLmFicyhyb3cpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1hdHJpeEFyZyA9IGZ1bmN0aW9uKFUpIHtcblx0dmFyIHJlcyA9IFtdO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgVS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cgPSBVW3JdO1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0dmFyIG5ld1JvdyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdy5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRuZXdSb3cucHVzaChtYXRoLmFyZyhyb3dbY10pKTtcblx0XHRcdH1cblx0XHRcdHJlcy5wdXNoKG5ld1Jvdyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlcy5wdXNoKG1hdGguYXJnKHJvdykpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5cbi8vXG4vLyBjb21iaW5lTGlzdCBpcyBhcnJheSBvZiBvYmplY3RzOlxuLy9cbi8vIHtcbi8vICAgICBjaXJjdWl0OiA8UXVhbnR1bUNpcmN1aXQ+XG4vLyAgICAgd2lyZXM6IFswLCAxLCAyXSAvLyBhcnJheSBvZiBkZXN0aW5hdGlvbiBxdWJpdHMgKGZvciBlYWNoIHdpcmUgaW4gZ2l2ZW4gY2lyY3VpdClcbi8vIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zZXRDb21iaW5lZFN0YXRlID0gZnVuY3Rpb24oY29tYmluZUxpc3QpIHtcblx0dmFyIG5ld1N0YXRlID0ge307XG5cdHZhciBuZXdTdGF0ZUJpdHMgPSAwO1xuXHR2YXIgdG90YWxRdWJpdHMgPSAwO1xuXHRmb3IodmFyIGl0ZW1JbmRleCA9IDA7IGl0ZW1JbmRleCA8IGNvbWJpbmVMaXN0Lmxlbmd0aDsgaXRlbUluZGV4KyspIHtcblx0XHR2YXIgaXRlbSA9IGNvbWJpbmVMaXN0W2l0ZW1JbmRleF07XG5cdFx0Ly8gY2FsY3VsYXRlIG51bWJlciBvZiBxdWJpdHMgYmFzZWQgb24gd2lyZU1hcFxuXHRcdGl0ZW0ud2lyZXMubWFwKGZ1bmN0aW9uKGRlc3QpIHtcblx0XHRcdGlmKGRlc3QgKyAxID4gdG90YWxRdWJpdHMpIHtcblx0XHRcdFx0dG90YWxRdWJpdHMgPSBkZXN0ICsgMTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHZhciBiaXRNYXBzID0gW107XG5cdGZvcih2YXIgaXRlbUluZGV4ID0gMDsgaXRlbUluZGV4IDwgY29tYmluZUxpc3QubGVuZ3RoOyBpdGVtSW5kZXgrKykge1xuXHRcdHZhciBpdGVtID0gY29tYmluZUxpc3RbaXRlbUluZGV4XTtcblxuXHRcdHZhciBjbWFwID0gW107XG5cdFx0aXRlbS53aXJlcy5tYXAoZnVuY3Rpb24oZGVzdCwgc291cmNlKSB7XG5cdFx0XHRjbWFwLnB1c2goe1xuXHRcdFx0XHRhbmQ6IDEgPDwgKCh0b3RhbFF1Yml0cyAtIDEpIC0gZGVzdCksXG5cdFx0XHRcdG9yOiAxIDw8ICgoaXRlbS5jaXJjdWl0Lm51bVF1Yml0cyAtIDEpIC0gc291cmNlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRiaXRNYXBzLnB1c2goY21hcCk7XG5cdH1cblxuXHR2YXIgbjMgPSAxIDw8IHRvdGFsUXViaXRzO1xuXHRmb3IodmFyIGEzID0gMDsgYTMgPCBuMzsgYTMrKykge1xuXHRcdHZhciBzMyA9IG51bGw7XG5cdFx0Zm9yKHZhciBpdGVtSW5kZXggPSAwOyBpdGVtSW5kZXggPCBjb21iaW5lTGlzdC5sZW5ndGg7IGl0ZW1JbmRleCsrKSB7XG5cdFx0XHR2YXIgbWFwID0gYml0TWFwc1tpdGVtSW5kZXhdO1xuXG5cdFx0XHR2YXIgYTEgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IG1hcC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhMyAmIG1hcFtpXS5hbmQpIHtcblx0XHRcdFx0XHRhMSB8PSBtYXBbaV0ub3I7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGl0ZW0gPSBjb21iaW5lTGlzdFtpdGVtSW5kZXhdO1xuXHRcdFx0dmFyIHMxID0gaXRlbS5jaXJjdWl0LnN0YXRlW2ExXTtcblx0XHRcdGlmKHMxKSB7XG5cdFx0XHRcdGlmKHMzID09IG51bGwpIHtcblx0XHRcdFx0XHRzMyA9IHMxO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHMzID0gbWF0aC5tdWx0aXBseShzMSwgczMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzMyA9IG1hdGguY29tcGxleCgwLCAwKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihzMyAmJiAoczMucmUgfHwgczMuaW0pKSB7XG5cdFx0XHRuZXdTdGF0ZVthM10gPSBzMztcblx0XHRcdG5ld1N0YXRlQml0cyB8PSBhMztcblx0XHR9XG5cdH1cblxuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0Ly8gZXhwYW5kIGNpcmN1aXQgaWYgbmVlZGVkXG5cdGlmKHRoaXMubnVtUXViaXRzIDwgdG90YWxRdWJpdHMpIHtcblx0XHR0aGlzLm51bVF1Yml0cyA9IHRvdGFsUXViaXRzO1xuXG5cdFx0d2hpbGUodGhpcy5nYXRlcy5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0XHR9XG5cblx0XHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aGlsZSh0aGlzLmdhdGVzW2ldLmxlbmd0aCA8IG51bUNvbHMpIHtcblx0XHRcdFx0dGhpcy5nYXRlc1tpXS5wdXNoKG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcblx0dGhpcy5zdGF0ZUJpdHMgPSBuZXdTdGF0ZUJpdHM7XG5cblx0aWYodGhpcy5zdGF0ZUJpdHMgPT0gMCAmJiBPYmplY3Qua2V5cyh0aGlzLnN0YXRlKS5sZW5ndGggPT0gMCkge1xuXHRcdHRoaXMuc3RhdGVbXCIwXCJdID0gbWF0aC5jb21wbGV4KDEsIDApO1xuXHR9XG59O1xuXG4vL1xuLy8gQ29tYmluZXMgc3RhdGUgdmVjdG9ycyBvZiB0d28gZXZhbHVhdGVkIGNpcmN1aXRzIGFuZCBzdG9yZXMgcmVzdWx0aW5nIHZlY3RvciBpbnRvIHRoaXMuXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLl9zZXRDb21iaW5lZFN0YXRlID0gZnVuY3Rpb24oYzEsIGMyLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBxMSA9IGMxLm51bVF1Yml0cztcblx0dmFyIHEyID0gYzIubnVtUXViaXRzO1xuXG5cdC8vIGNyZWF0ZSB3aXJlTWFwIGlmIG5vdCBwcm92aWRlZFxuXHRpZighb3B0aW9ucy53aXJlTWFwKSB7XG5cdFx0b3B0aW9ucy53aXJlTWFwID0ge1xuXHRcdFx0YzE6IFtdLFxuXHRcdFx0YzI6IFtdXG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHExOyBpKyspIHtcblx0XHRcdG9wdGlvbnMud2lyZU1hcC5jMS5wdXNoKGkpO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBxMjsgaSsrKSB7XG5cdFx0XHRvcHRpb25zLndpcmVNYXAuYzIucHVzaChpICsgcTEpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgcXViaXRzIGJhc2VkIG9uIHdpcmVNYXBcblx0dmFyIHEzID0gMDtcblx0b3B0aW9ucy53aXJlTWFwLmMxLm1hcChmdW5jdGlvbihkZXN0KSB7XG5cdFx0aWYoZGVzdCArIDEgPiBxMykge1xuXHRcdFx0cTMgPSBkZXN0ICsgMTtcblx0XHR9XG5cdH0pO1xuXHRvcHRpb25zLndpcmVNYXAuYzIubWFwKGZ1bmN0aW9uKGRlc3QpIHtcblx0XHRpZihkZXN0ICsgMSA+IHEzKSB7XG5cdFx0XHRxMyA9IGRlc3QgKyAxO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gY3JlYXRlIGJpdCBtYXAgZm9yIGNpcmN1aXQgMVxuXHR2YXIgYzFtYXAgPSBbXTtcblx0b3B0aW9ucy53aXJlTWFwLmMxLm1hcChmdW5jdGlvbihkZXN0LCBzb3VyY2UpIHtcblx0XHRjMW1hcC5wdXNoKHsgYW5kOiAxIDw8ICgocTMgLSAxKSAtIGRlc3QpLCBvcjogMSA8PCAoKHExIC0gMSkgLSBzb3VyY2UpIH0pO1xuXHR9KTtcblxuXHQvLyBjcmVhdGUgYml0IG1hcCBmb3IgY2lyY3VpdCAyXG5cdHZhciBjMm1hcCA9IFtdO1xuXHRvcHRpb25zLndpcmVNYXAuYzIubWFwKGZ1bmN0aW9uKGRlc3QsIHNvdXJjZSkge1xuXHRcdGMybWFwLnB1c2goeyBhbmQ6IDEgPDwgKChxMyAtIDEpIC0gZGVzdCksIG9yOiAxIDw8ICgocTIgLSAxKSAtIHNvdXJjZSkgfSk7XG5cdH0pO1xuXG5cdHZhciB1bnVzZWQgPSAwO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgcTM7IGkrKykge1xuXHRcdGlmKG9wdGlvbnMud2lyZU1hcC5jMS5pbmRleE9mKGkpIDwgMCAmJiBvcHRpb25zLndpcmVNYXAuYzIuaW5kZXhPZihpKSA8IDApIHtcblx0XHRcdHVudXNlZCB8PSAxIDw8ICgocTMgLSAxKSAtIGkpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBuZXdTdGF0ZSA9IHt9O1xuXHR2YXIgbmV3U3RhdGVCaXRzID0gMDtcblxuXHR2YXIgbjMgPSAxIDw8IHEzO1xuXHRmb3IodmFyIGEzID0gMDsgYTMgPCBuMzsgYTMrKykge1xuXHRcdGlmKCEoYTMgJiB1bnVzZWQpKSB7XG5cdFx0XHR2YXIgYTEgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGMxbWFwLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGEzICYgYzFtYXBbaV0uYW5kKSBhMSB8PSBjMW1hcFtpXS5vcjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGEyID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjMm1hcC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhMyAmIGMybWFwW2ldLmFuZCkgYTIgfD0gYzJtYXBbaV0ub3I7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzMSA9IGMxLnN0YXRlW2ExXTtcblx0XHRcdGlmKHMxKSB7XG5cdFx0XHRcdHZhciBzMiA9IGMyLnN0YXRlW2EyXTtcblx0XHRcdFx0aWYoczIpIHtcblx0XHRcdFx0XHR2YXIgczMgPSBtYXRoLm11bHRpcGx5KHMxLCBzMik7XG5cdFx0XHRcdFx0aWYoczMucmUgfHwgczMuaW0pIHtcblx0XHRcdFx0XHRcdG5ld1N0YXRlW2EzXSA9IHMzO1xuXHRcdFx0XHRcdFx0bmV3U3RhdGVCaXRzIHw9IGEzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMucmVzZXRTdGF0ZSgpO1xuXHQvLyBleHBhbmQgY2lyY3VpdCBpZiBuZWVkZWRcblx0aWYodGhpcy5udW1RdWJpdHMgPCBxMykge1xuXHRcdHRoaXMubnVtUXViaXRzID0gcTM7XG5cblx0XHR3aGlsZSh0aGlzLmdhdGVzLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHRcdH1cblx0XHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aGlsZSh0aGlzLmdhdGVzW2ldLmxlbmd0aCA8IG51bUNvbHMpIHtcblx0XHRcdFx0dGhpcy5nYXRlc1tpXS5wdXNoKG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcblx0dGhpcy5zdGF0ZUJpdHMgPSBuZXdTdGF0ZUJpdHM7XG5cblx0aWYodGhpcy5zdGF0ZUJpdHMgPT0gMCAmJiBPYmplY3Qua2V5cyh0aGlzLnN0YXRlKS5sZW5ndGggPT0gMCkge1xuXHRcdHRoaXMuc3RhdGVbXCIwXCJdID0gbWF0aC5jb21wbGV4KDEsIDApO1xuXHR9XG59O1xuXG4vLyBBZGQgcXViaXRzIHByZXNlcnZpbmcgc3RhdGVcblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBlbmRRdWJpdHMgPSBmdW5jdGlvbihudW1RdWJpdHMpIHtcblx0dmFyIGMgPSBuZXcgUXVhbnR1bUNpcmN1aXQobnVtUXViaXRzKTtcblx0dGhpcy5fc2V0Q29tYmluZWRTdGF0ZSh0aGlzLCBjKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5udW1BbXBsaXR1ZGVzID0gZnVuY3Rpb24ob25seVBvc3NpYmxlKSB7XG5cdGlmKG9ubHlQb3NzaWJsZSkge1xuXHRcdHZhciBwb3NzaWJsZUNvdW50ID0gMDtcblx0XHRmb3IodmFyIGlzIGluIHRoaXMuc3RhdGUpIHtcblx0XHRcdHZhciBzdGF0ZSA9IG1hdGgucm91bmQodGhpcy5zdGF0ZVtpc10sIDE0KTtcblx0XHRcdGlmKHN0YXRlLnJlIHx8IHN0YXRlLmltKSB7XG5cdFx0XHRcdHBvc3NpYmxlQ291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHBvc3NpYmxlQ291bnQ7XG5cdH1cblxuXHRyZXR1cm4gbWF0aC5wb3coMiwgdGhpcy5udW1RdWJpdHMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm51bUNvbHMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuZ2F0ZXMubGVuZ3RoID8gdGhpcy5nYXRlc1swXS5sZW5ndGggOiAwO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm51bUdhdGVzID0gZnVuY3Rpb24oZGVjb21wb3NlKSB7XG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblx0aWYoZGVjb21wb3NlKSB7XG5cdFx0Y2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXHR9IGVsc2Uge1xuXHRcdGNpcmN1aXQgPSB0aGlzO1xuXHR9XG5cblx0dmFyIG51bUdhdGVzID0gMDtcblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0bnVtR2F0ZXMrKztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbnVtR2F0ZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaXNFbXB0eUNlbGwgPSBmdW5jdGlvbihjb2wsIHdpcmUpIHtcblx0aWYodGhpcy5nYXRlc1t3aXJlXSAmJiB0aGlzLmdhdGVzW3dpcmVdW2NvbF0pIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRmb3IodmFyIHcgPSAwOyB3IDwgdGhpcy5udW1RdWJpdHM7IHcrKykge1xuXHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sLCB3KTtcblx0XHRpZihnYXRlKSB7XG5cdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgfHwgKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykgfHwgKE1hdGgubWluLmFwcGx5KG51bGwsIGdhdGUud2lyZXMpIDwgd2lyZSAmJiBNYXRoLm1heC5hcHBseShudWxsLCBnYXRlLndpcmVzKSA+IHdpcmUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0VtcHR5UGxhY2UgPSBmdW5jdGlvbihjb2wsIHdpcmVzLCB1c2luZ0NyZWdzKSB7XG5cdHZhciBtaW5XaXJlID0gTWF0aC5taW4uYXBwbHkobnVsbCwgd2lyZXMpO1xuXHR2YXIgbWF4V2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHdpcmVzKTtcblxuXHRpZih1c2luZ0NyZWdzKSB7XG5cdFx0dmFyIG14ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHRcdGlmKG14ID4gbWF4V2lyZSkge1xuXHRcdFx0bWF4V2lyZSA9IG14O1xuXHRcdH1cblx0fVxuXG5cdHZhciBhbGxFbXB0eSA9IHRydWU7XG5cdGZvcih2YXIgd2lyZSA9IG1pbldpcmU7IHdpcmUgPD0gbWF4V2lyZTsgd2lyZSsrKSB7XG5cdFx0aWYoIXRoaXMuaXNFbXB0eUNlbGwoY29sLCB3aXJlKSkge1xuXHRcdFx0YWxsRW1wdHkgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhbGxFbXB0eTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5sYXN0Tm9uRW1wdHlQbGFjZSA9IGZ1bmN0aW9uKHdpcmVzLCB1c2luZ0NyZWdzKSB7XG5cdHZhciBjb2wgPSB0aGlzLm51bUNvbHMoKTtcblx0dmFyIGFsbEVtcHR5ID0gdHJ1ZTtcblxuXHR2YXIgbWluV2lyZSA9IE1hdGgubWluLmFwcGx5KG51bGwsIHdpcmVzKTtcblx0dmFyIG1heFdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCB3aXJlcyk7XG5cblx0aWYodXNpbmdDcmVncykge1xuXHRcdHZhciBteCA9IHRoaXMubnVtUXViaXRzIC0gMTtcblx0XHRpZihteCA+IG1heFdpcmUpIHtcblx0XHRcdG1heFdpcmUgPSBteDtcblx0XHR9XG5cdH1cblxuXHR3aGlsZShhbGxFbXB0eSAmJiBjb2wtLSkge1xuXHRcdGZvcih2YXIgd2lyZSA9IG1pbldpcmU7IHdpcmUgPD0gbWF4V2lyZTsgd2lyZSsrKSB7XG5cdFx0XHRpZighdGhpcy5pc0VtcHR5Q2VsbChjb2wsIHdpcmUpKSB7XG5cdFx0XHRcdGFsbEVtcHR5ID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2w7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5zZXJ0Q29sdW1uID0gZnVuY3Rpb24oY29sSW5kZXgpIHtcblx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubnVtUXViaXRzOyBpKyspIHtcblx0XHR0aGlzLmdhdGVzW2ldLnNwbGljZShjb2xJbmRleCB8fCAwLCAwLCBudWxsKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJhbmRvbVN0cmluZyA9IGZ1bmN0aW9uKGxlbikge1xuXHRsZW4gPSBsZW4gfHwgMTc7XG5cblx0dmFyIHRleHQgPSBcIlwiO1xuXHQvLyBsZXQgZmlyc3QgY2hhciB0byBiZSBsZXR0ZXJcblx0dmFyIGNoYXJzZXQgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblx0dGV4dCArPSBjaGFyc2V0LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyc2V0Lmxlbmd0aCkpO1xuXG5cdC8vIG90aGVyIGNoYXJzIGNhbiBiZSBsZXR0ZXJzIGFuZCBudW1iZXJzXG5cdGNoYXJzZXQgKz0gXCIwMTIzNDU2Nzg5XCI7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdHRleHQgKz0gY2hhcnNldC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnNldC5sZW5ndGgpKTtcblx0fVxuXG5cdHJldHVybiB0ZXh0O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYWRkR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lLCBjb2x1bW4sIHdpcmVzLCBvcHRpb25zKSB7XG5cdHZhciB3aXJlTGlzdCA9IFtdO1xuXHRpZihBcnJheS5pc0FycmF5KHdpcmVzKSkge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB3aXJlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2lyZUxpc3QucHVzaCh3aXJlc1tpXSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHdpcmVMaXN0LnB1c2god2lyZXMpO1xuXHR9XG5cblx0aWYoY29sdW1uIDwgMCkge1xuXHRcdGNvbHVtbiA9IHRoaXMubGFzdE5vbkVtcHR5UGxhY2Uod2lyZUxpc3QsIGdhdGVOYW1lID09IFwibWVhc3VyZVwiIHx8IChvcHRpb25zICYmIG9wdGlvbnMuY29uZGl0aW9uICYmIG9wdGlvbnMuY29uZGl0aW9uLmNyZWcpKSArIDE7XG5cdH1cblxuXHR2YXIgbnVtQ29ubmVjdG9ycyA9IHdpcmVMaXN0Lmxlbmd0aDtcblx0dmFyIGlkID0gdGhpcy5yYW5kb21TdHJpbmcoKTtcblx0Zm9yKHZhciBjb25uZWN0b3IgPSAwOyBjb25uZWN0b3IgPCBudW1Db25uZWN0b3JzOyBjb25uZWN0b3IrKykge1xuXHRcdHZhciB3aXJlID0gd2lyZUxpc3RbY29ubmVjdG9yXTtcblxuXHRcdGlmKCh3aXJlICsgMSkgPiB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5udW1RdWJpdHMgPSB3aXJlICsgMTtcblx0XHR9XG5cblx0XHR3aGlsZSh0aGlzLmdhdGVzLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHRcdH1cblxuXHRcdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdFx0aWYoKGNvbHVtbiArIDEpID4gbnVtQ29scykge1xuXHRcdFx0bnVtQ29scyA9IGNvbHVtbiArIDE7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdoaWxlKHRoaXMuZ2F0ZXNbaV0ubGVuZ3RoIDwgbnVtQ29scykge1xuXHRcdFx0XHR0aGlzLmdhdGVzW2ldLnB1c2gobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGdhdGUgPSB7XG5cdFx0XHRpZDogaWQsXG5cdFx0XHRuYW1lOiBnYXRlTmFtZSxcblx0XHRcdGNvbm5lY3RvcjogY29ubmVjdG9yLFxuXHRcdFx0b3B0aW9uczoge31cblx0XHR9XG5cblx0XHRpZihvcHRpb25zKSB7XG5cdFx0XHRnYXRlLm9wdGlvbnMgPSBvcHRpb25zO1xuXG5cdFx0XHQvLyBleHRlbmQgY3JlZyBpZiByZXF1aXJlZFxuXHRcdFx0aWYob3B0aW9ucy5jcmVnICYmIG9wdGlvbnMuY3JlZ1tcIm5hbWVcIl0gJiYgdHlwZW9mIG9wdGlvbnMuY3JlZ1tcImJpdFwiXSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdHZhciBjcmVnQml0ID0gcGFyc2VJbnQob3B0aW9ucy5jcmVnLmJpdCB8fCAwKTtcblx0XHRcdFx0aWYoaXNOYU4oY3JlZ0JpdCkpIHtcblx0XHRcdFx0XHRjcmVnQml0ID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZXhpc3RpbmdDcmVnID0gdGhpcy5jcmVnc1tvcHRpb25zLmNyZWcubmFtZV0gfHwgW107XG5cdFx0XHRcdHZhciBjdXJyZW50VmFsdWUgPSAoZXhpc3RpbmdDcmVnLmxlbmd0aCA+IGNyZWdCaXQpID8gZXhpc3RpbmdDcmVnW29wdGlvbnMuY3JlZy5iaXRdIDogMDtcblx0XHRcdFx0dGhpcy5zZXRDcmVnQml0KG9wdGlvbnMuY3JlZy5uYW1lLCBjcmVnQml0LCBjdXJyZW50VmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSA9IGdhdGU7XG5cdH1cblx0cmV0dXJuIGlkO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFwcGVuZEdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgd2lyZXMsIG9wdGlvbnMpIHtcblx0cmV0dXJuIHRoaXMuYWRkR2F0ZShnYXRlTmFtZSwgLTEsIHdpcmVzLCBvcHRpb25zKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluc2VydEdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgY29sdW1uLCB3aXJlcywgb3B0aW9ucykge1xuXHR2YXIgd2lyZUxpc3QgPSBbXTtcblx0aWYoQXJyYXkuaXNBcnJheSh3aXJlcykpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgd2lyZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdpcmVMaXN0LnB1c2god2lyZXNbaV0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR3aXJlTGlzdC5wdXNoKHdpcmVzKTtcblx0fVxuXG5cdGlmKGNvbHVtbiA8IDApIHtcblx0XHRjb2x1bW4gPSB0aGlzLmxhc3ROb25FbXB0eVBsYWNlKHdpcmVMaXN0LCAoISFnYXRlTmFtZSAmJiBnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikgfHwgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb25kaXRpb24gJiYgb3B0aW9ucy5jb25kaXRpb24uY3JlZykpICsgMTtcblx0fVxuXG5cdHZhciBzcGFjZUlzRW1wdHkgPSB0cnVlO1xuXHR2YXIgbnVtQ29ubmVjdG9ycyA9IHdpcmVMaXN0Lmxlbmd0aDtcblx0Zm9yKHZhciBjb25uZWN0b3IgPSAwOyBjb25uZWN0b3IgPCBudW1Db25uZWN0b3JzOyBjb25uZWN0b3IrKykge1xuXHRcdHZhciB3aXJlID0gd2lyZUxpc3RbY29ubmVjdG9yXTtcblxuXHRcdGlmKCh3aXJlICsgMSkgPiB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5udW1RdWJpdHMgPSB3aXJlICsgMTtcblx0XHR9XG5cblx0XHR3aGlsZSh0aGlzLmdhdGVzLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHRcdH1cblxuXHRcdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdFx0aWYoKGNvbHVtbiArIDEpID4gbnVtQ29scykge1xuXHRcdFx0bnVtQ29scyA9IGNvbHVtbiArIDE7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdoaWxlKHRoaXMuZ2F0ZXNbaV0ubGVuZ3RoIDwgbnVtQ29scykge1xuXHRcdFx0XHR0aGlzLmdhdGVzW2ldLnB1c2gobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoIXRoaXMuaXNFbXB0eVBsYWNlKGNvbHVtbiwgd2lyZUxpc3QsICghIWdhdGVOYW1lICYmIGdhdGVOYW1lID09IFwibWVhc3VyZVwiKSB8fCAob3B0aW9ucyAmJiBvcHRpb25zLmNvbmRpdGlvbiAmJiBvcHRpb25zLmNvbmRpdGlvbi5jcmVnKSkpIHtcblx0XHR0aGlzLmluc2VydENvbHVtbihjb2x1bW4pO1xuXHR9XG5cblx0dmFyIGlkID0gbnVsbDtcblx0aWYoZ2F0ZU5hbWUpIHtcblx0XHRpZCA9IHRoaXMuYWRkR2F0ZShnYXRlTmFtZSwgY29sdW1uLCB3aXJlTGlzdCwgb3B0aW9ucyk7XG5cdH1cblx0cmV0dXJuIGlkO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluc2VydFNwYWNlID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlcykge1xuXHRyZXR1cm4gdGhpcy5pbnNlcnRHYXRlKG51bGwsIGNvbHVtbiwgd2lyZXMsIG51bGwpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlR2F0ZUF0ID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlKSB7XG5cdGlmKCF0aGlzLmdhdGVzW3dpcmVdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdGlmKCFnYXRlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGlkID0gZ2F0ZS5pZDtcblxuXHR2YXIgbnVtV2lyZXMgPSB0aGlzLmdhdGVzLmxlbmd0aDtcblx0Zm9yKHZhciB3ID0gMDsgdyA8IG51bVdpcmVzOyB3KyspIHtcblx0XHR2YXIgY2VsbCA9IHRoaXMuZ2F0ZXNbd11bY29sdW1uXTtcblx0XHRpZihjZWxsICYmIGNlbGwuaWQgPT0gaWQpIHtcblx0XHRcdHRoaXMuZ2F0ZXNbd11bY29sdW1uXSA9IG51bGw7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlR2F0ZSA9IGZ1bmN0aW9uKGdhdGVJZCkge1xuXHR2YXIgZ2F0ZVBvcyA9IHRoaXMuZ2V0R2F0ZVBvc0J5SWQoZ2F0ZUlkKTtcblx0aWYoIWdhdGVQb3MgfHwgZ2F0ZVBvcy5jb2wgPCAwIHx8ICFnYXRlUG9zLndpcmVzLmxlbmd0aCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMucmVtb3ZlR2F0ZUF0KGdhdGVQb3MuY29sLCBnYXRlUG9zLndpcmVzWzBdKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFkZE1lYXN1cmUgPSBmdW5jdGlvbih3aXJlLCBjcmVnLCBjYml0KSB7XG5cdHRoaXMuYWRkR2F0ZShcIm1lYXN1cmVcIiwgLTEsIHdpcmUsIHsgY3JlZzogeyBuYW1lOiBjcmVnLCBiaXQ6IGNiaXQgfSB9KTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBlbmRDaXJjdWl0ID0gZnVuY3Rpb24oY2lyY3VpdCwgcGFjaykge1xuXHR2YXIgY29sT2Zmc2V0ID0gdGhpcy5udW1Db2xzKCk7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblxuXHRcdFx0XHRpZighdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0gJiYgY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3RlckdhdGUoZ2F0ZS5uYW1lLCBjaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hZGRHYXRlKGdhdGUubmFtZSwgY29sdW1uICsgY29sT2Zmc2V0LCBnYXRlLndpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuXG5cblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlVHJhaWxpbmdDb2x1bW5zID0gZnVuY3Rpb24oKSB7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gbnVtQ29scyAtIDE7IGNvbHVtbiA+PSAwOyBjb2x1bW4tLSkge1xuXHRcdHZhciBpc0VtcHR5Q29sID0gdHJ1ZTtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdGlzRW1wdHlDb2wgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoIWlzRW1wdHlDb2wpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dGhpcy5nYXRlc1t3aXJlXS5wb3AoKTtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVMZWFkaW5nQ29sdW1ucyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZW1wdHlDb3VudCA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHR2YXIgaXNFbXB0eUNvbCA9IHRydWU7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHRpc0VtcHR5Q29sID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKCFpc0VtcHR5Q29sKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRlbXB0eUNvdW50Kys7XG5cdH1cblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgZW1wdHlDb3VudDsgaSsrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHRoaXMuZ2F0ZXNbd2lyZV0uc2hpZnQoKTtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVUcmFpbGluZ1Jvd3MgPSBmdW5jdGlvbigpIHtcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciB3aXJlID0gdGhpcy5udW1RdWJpdHMgLSAxOyB3aXJlID49IDA7IHdpcmUtLSkge1xuXHRcdHZhciBpc0VtcHR5Um93ID0gdHJ1ZTtcblx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0aXNFbXB0eVJvdyA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZighaXNFbXB0eVJvdykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmdhdGVzLnBvcCgpO1xuXHRcdHRoaXMubnVtUXViaXRzLS07XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVRdWJpdCA9IGZ1bmN0aW9uKHdpcmUpIHtcblx0aWYoIXRoaXMuZ2F0ZXNbd2lyZV0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG51bUNvbHM7IGNvbCsrKSB7XG5cdFx0dGhpcy5yZW1vdmVHYXRlQXQoY29sLCB3aXJlKTtcblx0fVxuXG5cdGZvcih2YXIgdyA9IHdpcmUgKyAxOyB3IDwgdGhpcy5udW1RdWJpdHM7IHcrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQ29sczsgY29sKyspIHtcblx0XHRcdHRoaXMuZ2F0ZXNbdyAtIDFdW2NvbF0gPSB0aGlzLmdhdGVzW3ddW2NvbF07XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5nYXRlcy5wb3AoKTtcblx0dGhpcy5udW1RdWJpdHMtLTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmZsaXBWZXJ0aWNhbGx5ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucmVzZXRTdGF0ZSgpO1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdHZhciBsYXN0UXViaXQgPSB0aGlzLm51bVF1Yml0cyAtIDE7XG5cdGZvcih2YXIgdyA9IDA7IHcgPCB0aGlzLm51bVF1Yml0cyAvIDI7IHcrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQ29sczsgY29sKyspIHtcblx0XHRcdHZhciB0bXAgPSB0aGlzLmdhdGVzW3ddW2NvbF07XG5cdFx0XHR0aGlzLmdhdGVzW3ddW2NvbF0gPSB0aGlzLmdhdGVzW2xhc3RRdWJpdCAtIHddW2NvbF07XG5cdFx0XHR0aGlzLmdhdGVzW2xhc3RRdWJpdCAtIHddW2NvbF0gPSB0bXA7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZmxpcEhvcml6b250YWxseSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgbGFzdENvbCA9IG51bUNvbHMgLSAxO1xuXHRmb3IodmFyIHcgPSAwOyB3IDwgdGhpcy5udW1RdWJpdHM7IHcrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQ29scyAvIDI7IGNvbCsrKSB7XG5cdFx0XHR2YXIgdG1wID0gdGhpcy5nYXRlc1t3XVtjb2xdO1xuXHRcdFx0dGhpcy5nYXRlc1t3XVtjb2xdID0gdGhpcy5nYXRlc1t3XVtsYXN0Q29sIC0gY29sXTtcblx0XHRcdHRoaXMuZ2F0ZXNbd11bbGFzdENvbCAtIGNvbF0gPSB0bXA7XG5cdFx0fVxuXHR9XG59O1xuXG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtID0gZnVuY3Rpb24oVSwgcXViaXRzKSB7XG5cdHZhciBuZXdTdGF0ZSA9IHt9O1xuXHR2YXIgbmV3U3RhdGVCaXRzID0gMDtcblxuXHQvLyBjbG9uZSBsaXN0IG9mIHdpcmVzIHRvIGl0c2VsZiAocmVtb3ZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBhcnJheSlcblx0cXViaXRzID0gcXViaXRzLnNsaWNlKDApO1xuXG5cdC8vIHJldmVyc2UgYml0IG9yZGVyXG5cdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0Ly8gY29udmVydCBpbmRleCBmcm9tIDAtYmFzZWQgdG8gZW5kLWJhc2VkXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHF1Yml0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0cXViaXRzW2ldID0gKHRoaXMubnVtUXViaXRzIC0gMSkgLSBxdWJpdHNbaV07XG5cdFx0fVxuXHR9XG5cblx0cXViaXRzLnJldmVyc2UoKTtcblxuXHQvLyBsaXN0IG9mIHdpcmVzIG5vdCB1c2VkIGJ5IHRoaXMgZ2F0ZVxuXHR2YXIgdW51c2VkID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0aWYocXViaXRzLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHR1bnVzZWQucHVzaChpKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgdW51c2VkQ291bnQgPSB1bnVzZWQubGVuZ3RoO1xuXHR2YXIgdW51c2VkU3BhY2UgPSAoMSA8PCB1bnVzZWRDb3VudCk7XG5cblx0ZnVuY3Rpb24gZ2V0RWxNYXNrKGVsKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0cXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdGlmKGVsICYgKDEgPDwgaW5kZXgpKSB7XG5cdFx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldEluY01hc2soKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0cXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcyArIDE7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXROb3RNYXNrKCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHVudXNlZC5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHR2YXIgWkVSTyA9IG1hdGguY29tcGxleCgwLCAwKTtcblxuXHRmb3IodmFyIGVscm93ID0gMDsgZWxyb3cgPCBVLmxlbmd0aDsgZWxyb3crKykge1xuXG5cdFx0dmFyIHJvd21hc2sgPSBnZXRFbE1hc2soZWxyb3cpO1xuXG5cdFx0Zm9yKHZhciBlbGNvbCA9IDA7IGVsY29sIDwgVVtlbHJvd10ubGVuZ3RoOyBlbGNvbCsrKSB7XG5cblx0XHRcdHZhciBjb2xtYXNrID0gZ2V0RWxNYXNrKGVsY29sKTtcblxuXHRcdFx0aWYoKHRoaXMuc3RhdGVCaXRzICYgY29sbWFzaykgPT0gY29sbWFzaykge1xuXG5cdFx0XHRcdHZhciB1dmFsID0gVVtlbHJvd11bZWxjb2xdO1xuXHRcdFx0XHRpZih1dmFsKSB7XG5cdFx0XHRcdFx0dmFyIHJvdyA9IHJvd21hc2s7XG5cdFx0XHRcdFx0dmFyIGNvbCA9IGNvbG1hc2s7XG5cblx0XHRcdFx0XHR2YXIgY291bnRlciA9IHVudXNlZFNwYWNlO1xuXHRcdFx0XHRcdHZhciBjb3VudGVybWFzayA9IGdldEVsTWFzaygwKTtcblx0XHRcdFx0XHR2YXIgaW5jbWFzayA9IGdldEluY01hc2soKTtcblx0XHRcdFx0XHR2YXIgbm90bWFzayA9IGdldE5vdE1hc2soKTtcblx0XHRcdFx0XHR2YXIgdG9vdGhsZXNzID0gY291bnRlcm1hc2s7XG5cdFx0XHRcdFx0d2hpbGUoY291bnRlci0tKSB7XG5cdFx0XHRcdFx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlW2NvbF07XG5cdFx0XHRcdFx0XHRpZihzdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRyb3cgPSB0b290aGxlc3MgfCByb3dtYXNrO1xuXG5cdFx0XHRcdFx0XHRcdGlmKHV2YWwgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdG5ld1N0YXRlW3Jvd10gPSBtYXRoLmFkZChuZXdTdGF0ZVtyb3ddIHx8IFpFUk8sIHN0YXRlKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRuZXdTdGF0ZVtyb3ddID0gbWF0aC5hZGQobmV3U3RhdGVbcm93XSB8fCBaRVJPLCBtYXRoLm11bHRpcGx5KHV2YWwsIHN0YXRlKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bmV3U3RhdGVCaXRzIHw9IHJvdztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dG9vdGhsZXNzID0gKHRvb3RobGVzcyArIGluY21hc2spICYgbm90bWFzaztcblx0XHRcdFx0XHRcdGNvbCA9IHRvb3RobGVzcyB8IGNvbG1hc2s7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIHJlcGxhY2UgY3VycmVudCBzdGF0ZSB3aXRoIG5ldyBzdGF0ZVxuXHR0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG5cdHRoaXMuc3RhdGVCaXRzID0gbmV3U3RhdGVCaXRzO1xuXG5cdGlmKHRoaXMuc3RhdGVCaXRzID09IDAgJiYgT2JqZWN0LmtleXModGhpcy5zdGF0ZSkubGVuZ3RoID09IDApIHtcblx0XHR0aGlzLnN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcblx0fVxufTtcblxuLy9cbi8vIGBlbmRpYW5uZXNzYCBjYW4gYmU6XG4vLyAgICAgbnVsbCAtIHRoaXMgaXMgZGVmYXVsdCBhbmQgZGVwZW5kcyBvbiB0aGlzLnJldmVyc2VCaXRPcmRlclxuLy8gICAgIFwiYmlnXCIgLSBiaWcgZW5kaWFuIChsaWtlIFJpZ2V0dGkvcHlRdWlsKVxuLy8gICAgIFwibGl0dGxlXCIgLSBsaXR0bGUgZW5kaWFuIChsaWtlIElCTS9RaXNraXQpXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnRyYW5zZm9ybU1hdHJpeCA9IGZ1bmN0aW9uKHRvdGFsUXViaXRzLCBVLCB0YXJnZXRRdWJpdHMsIGVuZGlhbm5lc3MpIHtcblx0Ly8gY2xvbmUgbGlzdCBvZiB3aXJlcyB0byBpdHNlbGYgKHJlbW92ZSByZWZlcmVuY2UgdG8gb3JpZ2luYWwgYXJyYXkpXG5cdHRhcmdldFF1Yml0cyA9IHRhcmdldFF1Yml0cy5zbGljZSgwKTtcblxuXHR2YXIgcmV2ZXJzZUJpdHMgPSBmYWxzZTtcblx0aWYoIWVuZGlhbm5lc3MpIHtcblx0XHRyZXZlcnNlQml0cyA9ICF0aGlzLnJldmVyc2VCaXRPcmRlcjtcblx0fSBlbHNlIHtcblx0XHRyZXZlcnNlQml0cyA9IGVuZGlhbm5lc3MgPT0gXCJiaWdcIjtcblx0fVxuXG5cdC8vIHJldmVyc2UgYml0IG9yZGVyXG5cdGlmKHJldmVyc2VCaXRzKSB7XG5cdFx0Ly8gY29udmVydCBpbmRleCBmcm9tIDAtYmFzZWQgdG8gZW5kLWJhc2VkXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRhcmdldFF1Yml0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGFyZ2V0UXViaXRzW2ldID0gKHRvdGFsUXViaXRzIC0gMSkgLSB0YXJnZXRRdWJpdHNbaV07XG5cdFx0fVxuXHR9XG5cblx0dGFyZ2V0UXViaXRzLnJldmVyc2UoKTtcblxuXHQvLyBsaXN0IG9mIHdpcmVzIG5vdCB1c2VkIGJ5IHRoaXMgZ2F0ZVxuXHR2YXIgdW51c2VkID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0b3RhbFF1Yml0czsgaSsrKSB7XG5cdFx0aWYodGFyZ2V0UXViaXRzLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHR1bnVzZWQucHVzaChpKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgdW51c2VkQ291bnQgPSB1bnVzZWQubGVuZ3RoO1xuXHR2YXIgdW51c2VkU3BhY2UgPSAoMSA8PCB1bnVzZWRDb3VudCk7XG5cblx0ZnVuY3Rpb24gZ2V0RWxNYXNrKGVsKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0dGFyZ2V0UXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdGlmKGVsICYgKDEgPDwgaW5kZXgpKSB7XG5cdFx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldEluY01hc2soKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0dGFyZ2V0UXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcyArIDE7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXROb3RNYXNrKCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHVudXNlZC5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHR2YXIgVCA9IG1hdGguemVyb3MoWyAxIDw8IHRvdGFsUXViaXRzLCAxIDw8IHRvdGFsUXViaXRzIF0pO1xuXG5cdGZvcih2YXIgZWxyb3cgPSAwOyBlbHJvdyA8IFUubGVuZ3RoOyBlbHJvdysrKSB7XG5cblx0XHR2YXIgcm93bWFzayA9IGdldEVsTWFzayhlbHJvdyk7XG5cblx0XHRmb3IodmFyIGVsY29sID0gMDsgZWxjb2wgPCBVW2Vscm93XS5sZW5ndGg7IGVsY29sKyspIHtcblxuXHRcdFx0dmFyIGNvbG1hc2sgPSBnZXRFbE1hc2soZWxjb2wpO1xuXG5cdFx0XHR2YXIgdXZhbCA9IFVbZWxyb3ddW2VsY29sXTtcblx0XHRcdGlmKHV2YWwpIHtcblx0XHRcdFx0dmFyIHJvdyA9IHJvd21hc2s7XG5cdFx0XHRcdHZhciBjb2wgPSBjb2xtYXNrO1xuXG5cdFx0XHRcdHZhciBjb3VudGVyID0gdW51c2VkU3BhY2U7XG5cdFx0XHRcdHZhciBjb3VudGVybWFzayA9IGdldEVsTWFzaygwKTtcblx0XHRcdFx0dmFyIGluY21hc2sgPSBnZXRJbmNNYXNrKCk7XG5cdFx0XHRcdHZhciBub3RtYXNrID0gZ2V0Tm90TWFzaygpO1xuXHRcdFx0XHR2YXIgdG9vdGhsZXNzID0gY291bnRlcm1hc2s7XG5cdFx0XHRcdHdoaWxlKGNvdW50ZXItLSkge1xuXHRcdFx0XHRcdHJvdyA9IHRvb3RobGVzcyB8IHJvd21hc2s7XG5cblx0XHRcdFx0XHRUW3Jvd11bY29sXSA9IHV2YWw7XG5cblx0XHRcdFx0XHR0b290aGxlc3MgPSAodG9vdGhsZXNzICsgaW5jbWFzaykgJiBub3RtYXNrO1xuXHRcdFx0XHRcdGNvbCA9IHRvb3RobGVzcyB8IGNvbG1hc2s7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIFQ7XG59O1xuXG4vL1xuLy8gRnVuY3Rpb24gcmV0dXJucyB1bml0YXJ5IG9mIHRoZSB3aG9sZSBjaXJjdWl0XG4vL1xuLy8gYGVuZGlhbm5lc3NgIGNhbiBiZTpcbi8vICAgICBudWxsIC0gdGhpcyBpcyBkZWZhdWx0IGFuZCBkZXBlbmRzIG9uIHRoaXMucmV2ZXJzZUJpdE9yZGVyXG4vLyAgICAgXCJiaWdcIiAtIGJpZyBlbmRpYW4gKGxpa2UgUmlnZXR0aS9weVF1aWwpXG4vLyAgICAgXCJsaXR0bGVcIiAtIGxpdHRsZSBlbmRpYW4gKGxpa2UgSUJNL1Fpc2tpdClcbi8vXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY2lyY3VpdE1hdHJpeCA9IGZ1bmN0aW9uKGVuZGlhbm5lc3MpIHtcblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0aWYoZGVjb21wb3NlZC5nb3RDbGFzc2ljYWxDb250cm9sKCkpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgY29sID0gZGVjb21wb3NlZC5udW1Db2xzKCkgLSAxOyBjb2wgPj0gMDsgY29sLS0pIHtcblx0XHRmb3IodmFyIHdpcmUgPSBkZWNvbXBvc2VkLm51bVF1Yml0cyAtIDE7IHdpcmUgPj0gMDsgd2lyZS0tKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGNvbCwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBkZWNvbXBvc2VkLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiXCIpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgcmF3R2F0ZSA9IGRlY29tcG9zZWQuZ2V0UmF3R2F0ZShnYXRlRGVmLCBnYXRlLm9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0dmFyIFUgPSBkZWNvbXBvc2VkLnRyYW5zZm9ybU1hdHJpeChkZWNvbXBvc2VkLm51bVF1Yml0cywgcmF3R2F0ZSwgZ2F0ZS53aXJlcywgZW5kaWFubmVzcyk7XG5cblx0XHRcdFx0XHRpZighbWF0cml4IHx8ICFtYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRtYXRyaXggPSBVO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtYXRyaXggPSB0aGlzLm11bHRpcGx5U3F1YXJlTWF0cmljZXMobWF0cml4LCBVKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0cml4O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZWlnZW52YWx1ZXMyeDIgPSBmdW5jdGlvbihBKSB7XG5cdHZhciBNID0gdGhpcy5wYXJzZU1hdHJpeChBKTtcblxuXHR2YXIgZWlnZW4gPSBbMCwgMF07XG5cblx0dmFyIHggPSBtYXRoLmFkZChNWzBdWzBdLCBNWzFdWzFdKTtcblxuXHRlaWdlblswXSA9IG1hdGguZGl2aWRlKG1hdGguYWRkKHgsIG1hdGguc3FydCggbWF0aC5hZGQobWF0aC5tdWx0aXBseShtYXRoLm11bHRpcGx5KDQsIE1bMF1bMV0pLCBNWzFdWzBdKSwgbWF0aC5wb3coIG1hdGguc3VidHJhY3QoTVswXVswXSwgTVsxXVsxXSksIDIpKSkpLCAyKTtcblx0ZWlnZW5bMV0gPSBtYXRoLmRpdmlkZShtYXRoLnN1YnRyYWN0KHgsIG1hdGguc3FydCggbWF0aC5hZGQobWF0aC5tdWx0aXBseShtYXRoLm11bHRpcGx5KDQsIE1bMF1bMV0pLCBNWzFdWzBdKSwgbWF0aC5wb3coIG1hdGguc3VidHJhY3QoTVswXVswXSwgTVsxXVsxXSksIDIpKSkpLCAyKTtcblxuXHRyZXR1cm4gZWlnZW47XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0QmlwYXJ0aXRlU3RhdGUgPSBmdW5jdGlvbihxMSwgcTIpIHtcblx0dmFyIGJpcGFydGl0ZVN0YXRlID0ge307XG5cdHZhciBhbXBDb3VudCA9IDA7XG5cblx0ZnVuY3Rpb24gc3BlY1N1bUNvbXBsZXgoYSwgYikge1xuXHRcdHZhciByYXdTdW0gPSBtYXRoLmFkZChhLCBiKTtcblx0XHR2YXIgYXJnID0gcmF3U3VtLmFyZygpO1xuXHRcdHJldHVybiBtYXRoLmNvbXBsZXgoeyBhYnM6IG1hdGguc3FydChtYXRoLnBvdyhtYXRoLmFicyhhKSwgMikgKyBtYXRoLnBvdyhtYXRoLmFicyhiKSwgMikpLCBhcmc6IGFyZyB9KTtcblx0fVxuXG5cdGZvcih2YXIgaXMgaW4gdGhpcy5zdGF0ZSkge1xuXHRcdHZhciBpID0gcGFyc2VJbnQoaXMpO1xuXHRcdHZhciBpbmRleCA9IDA7XG5cdFx0dmFyIGJpdDEgPSAoaSAmICgxIDw8IHExKSkgPyAxIDogMDtcblx0XHR2YXIgYml0MiA9IChpICYgKDEgPDwgcTIpKSA/IDIgOiAwO1xuXG5cdFx0aW5kZXggfD0gYml0MTtcblx0XHRpbmRleCB8PSBiaXQyO1xuXG5cdFx0aWYodHlwZW9mIGJpcGFydGl0ZVN0YXRlW2luZGV4XSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRiaXBhcnRpdGVTdGF0ZVtpbmRleF0gPSBzcGVjU3VtQ29tcGxleChiaXBhcnRpdGVTdGF0ZVtpbmRleF0sIHRoaXMuc3RhdGVbaXNdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmlwYXJ0aXRlU3RhdGVbaW5kZXhdID0gdGhpcy5zdGF0ZVtpc107XG5cdFx0fVxuXG5cdFx0YW1wQ291bnQrKztcblx0fVxuXG5cdGlmKCFhbXBDb3VudCkge1xuXHRcdGJpcGFydGl0ZVN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcblx0fVxuXG5cdHJldHVybiBiaXBhcnRpdGVTdGF0ZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNoYW5jZU1hcCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblxuXHR2YXIgbWFwID0ge307XG5cdGZvcih2YXIgc291ciA9IDA7IHNvdXIgPCB0aGlzLm51bVF1Yml0czsgc291cisrKSB7XG5cdFx0Zm9yKHZhciBkZXN0ID0gMDsgZGVzdCA8IHRoaXMubnVtUXViaXRzOyBkZXN0KyspIHtcblx0XHRcdGlmKCFtYXBbc291cl0pIHtcblx0XHRcdFx0bWFwW3NvdXJdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZihkZXN0ID09IHNvdXIpIHtcblx0XHRcdFx0bWFwW3NvdXJdW2Rlc3RdID0gbnVsbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hcFtzb3VyXVtkZXN0XSA9IHt9O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgc291ciA9IDA7IHNvdXIgPCB0aGlzLm51bVF1Yml0czsgc291cisrKSB7XG5cdFx0Zm9yKHZhciBkZXN0ID0gc291ciArIDE7IGRlc3QgPCB0aGlzLm51bVF1Yml0czsgZGVzdCsrKSB7XG5cdFx0XHR2YXIgcmVkdWNlZFN0YXRlID0gdGhpcy5nZXRCaXBhcnRpdGVTdGF0ZShzb3VyLCBkZXN0KTtcblxuXHRcdFx0dmFyIGNpcmMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoMik7XG5cdFx0XHRjaXJjLnN0YXRlID0gcmVkdWNlZFN0YXRlO1xuXG5cdFx0XHR2YXIgcmFkaXVzID0gbWF0aC5hYnMoY2lyYy5hbmdsZXMoKVswXS5yYWRpdXMpO1xuXG5cdFx0XHR2YXIgY29uY3VyZW5jZSA9IG1hdGgucm91bmQoMSAtIG1hdGgucG93KHJhZGl1cywgMiksIDcpO1xuXG5cdFx0XHRtYXBbc291cl1bZGVzdF0uZW50YW5nbGVkID0gY29uY3VyZW5jZSA+IDA7XG5cdFx0XHRtYXBbc291cl1bZGVzdF0uY29uY3VyZW5jZSA9IGNvbmN1cmVuY2U7XG5cdFx0XHRtYXBbc291cl1bZGVzdF0uY29uY3VyZW5jZVBlcmNlbnQgPSBtYXRoLnJvdW5kKGNvbmN1cmVuY2UgKiAxMDAsIDIpO1xuXG5cblx0XHRcdG1hcFtkZXN0XVtzb3VyXS5lbnRhbmdsZWQgPSBjb25jdXJlbmNlID4gMDtcblx0XHRcdG1hcFtkZXN0XVtzb3VyXS5jb25jdXJlbmNlID0gY29uY3VyZW5jZTtcblx0XHRcdG1hcFtkZXN0XVtzb3VyXS5jb25jdXJlbmNlUGVyY2VudCA9IG1hdGgucm91bmQoY29uY3VyZW5jZSAqIDEwMCwgMik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hcDtcbn07XG5cblxuZnVuY3Rpb24gYmluU3RyKG4sIGxlbikge1xuXHR2YXIgYmluID0gbi50b1N0cmluZygyKTtcblx0d2hpbGUoYmluLmxlbmd0aCA8IGxlbikge1xuXHRcdGJpbiA9IFwiMFwiICsgYmluO1xuXHR9XG5cdHJldHVybiBiaW47XG59XG5cblxuZnVuY3Rpb24gcmV2ZXJzZUJpdHdpc2UobiwgbGVuKSB7XG5cdHJldHVybiBwYXJzZUludChiaW5TdHIobiwgbGVuKS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKSwgMik7XG59XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlc2V0UXViaXQgPSBmdW5jdGlvbih3aXJlLCB2YWx1ZSkge1xuXHR2YXIgVSA9IFtcblx0XHRbMCwgMF0sXG5cdFx0WzAsIDBdXG5cdF07XG5cblx0dmFyIGJpdCA9IG51bGw7XG5cdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0Yml0ID0gbWF0aC5wb3coMiwgKHRoaXMubnVtUXViaXRzIC0gMSkgLSB3aXJlKTtcblx0fSBlbHNlIHtcblx0XHRiaXQgPSBtYXRoLnBvdygyLCB3aXJlKTtcblx0fVxuXG5cdHZhciBwcm9iID0gMDtcblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cdFx0aWYodmFsdWUgPyAhIShpICYgYml0KSA6ICEoaSAmIGJpdCkpIHtcblx0XHRcdHByb2IgKz0gbWF0aC5wb3cobWF0aC5hYnModGhpcy5zdGF0ZVtpc10pLCAyKTtcblx0XHR9XG5cdH1cblxuXHRwcm9iID0gbWF0aC5yb3VuZChwcm9iLCAxNCk7XG5cblx0aWYocHJvYiA9PSAxKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYodmFsdWUpIHtcblx0XHRpZihwcm9iID09IDApIHtcblx0XHRcdFVbMV1bMF0gPSAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRVWzFdWzFdID0gbWF0aC5zcXJ0KDEgLyBwcm9iKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYocHJvYiA9PSAwKSB7XG5cdFx0XHRVWzBdWzFdID0gMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VVswXVswXSA9IG1hdGguc3FydCgxIC8gcHJvYik7XG5cdFx0fVxuXHR9O1xuXG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXHR0aGlzLmFwcGx5VHJhbnNmb3JtKFUsIFt3aXJlXSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBseUdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgY29sdW1uLCB3aXJlcywgb3B0aW9ucykge1xuXHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdGlmKCFvcHRpb25zLmNyZWcpIHtcblx0XHRcdHRocm93IFwiRXJyb3I6IFxcXCJtZWFzdXJlXFxcIiBnYXRlIHJlcXVpcmVzIGRlc3RpbmF0aW9uLlwiO1xuXHRcdH1cblxuXHRcdHZhciB2YWx1ZSA9IHRoaXMubWVhc3VyZSh3aXJlc1swXSwgb3B0aW9ucy5jcmVnLm5hbWUsIG9wdGlvbnMuY3JlZy5iaXQpO1xuXG5cdFx0dmFyIGRvUmVzZXQgPSB0aGlzLm1lYXN1cmVSZXNldHNRdWJpdDtcblx0XHRpZighZG9SZXNldCkge1xuXHRcdFx0Zm9yKHZhciBjb2wgPSBjb2x1bW47IGNvbCA8IHRoaXMubnVtQ29scygpOyBjb2wrKykge1xuXHRcdFx0XHR2YXIgZnJvbVJvdyA9IGNvbCA9PSBjb2x1bW4gPyB3aXJlc1swXSA6IDA7XG5cdFx0XHRcdGZvcih2YXIgcm93ID0gZnJvbVJvdzsgcm93IDwgdGhpcy5udW1RdWJpdHM7IHJvdysrKSB7XG5cdFx0XHRcdFx0dmFyIGcgPSB0aGlzLmdhdGVzW3Jvd11bY29sXTtcblx0XHRcdFx0XHRpZihnICYmIGcubmFtZSAhPSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdFx0ZG9SZXNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZG9SZXNldCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoZG9SZXNldCkge1xuXHRcdFx0dGhpcy5yZXNldFF1Yml0KHdpcmVzWzBdLCB2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZ2F0ZU5hbWUgPT0gXCJyZXNldFwiKSB7XG5cdFx0dGhpcy5yZXNldFF1Yml0KHdpcmVzWzBdLCAwKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgZ2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdGlmKCFnYXRlKSB7XG5cdFx0Y29uc29sZS5sb2coXCJVbmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZU5hbWUgKyBcIlxcXCIuXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciByYXdHYXRlID0gdGhpcy5nZXRSYXdHYXRlKGdhdGUsIG9wdGlvbnMpO1xuXG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXG5cdHRoaXMuYXBwbHlUcmFuc2Zvcm0ocmF3R2F0ZSwgd2lyZXMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldFJhd0dhdGUgPSBmdW5jdGlvbihnYXRlLCBnYXRlT3B0aW9ucywgZ2xvYmFsT3B0aW9ucykge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gZ2xvYmFsT3B0aW9ucyAmJiBnbG9iYWxPcHRpb25zLnBhcmFtcyA/IGdsb2JhbE9wdGlvbnMucGFyYW1zIDogKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9KTtcblxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnbG9iYWxQYXJhbXMpKTtcblx0Zm9yKHZhciBnbG9iYWxQYXJhbU5hbWUgaW4gZ2xvYmFsUGFyYW1zKSB7XG5cdFx0Z2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0fVxuXG5cdHZhciByYXdHYXRlID0gW107XG5cdGdhdGUubWF0cml4Lm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHR2YXIgcmF3R2F0ZVJvdyA9IFtdO1xuXHRcdHJvdy5tYXAoZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0aWYodHlwZW9mIGl0ZW0gPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHR2YXIgcGFyYW1zID0gZ2F0ZU9wdGlvbnMgPyBnYXRlT3B0aW9ucy5wYXJhbXMgfHwge30gOiB7fTtcblxuXHRcdFx0XHR2YXIgdmFycyA9IHt9O1xuXHRcdFx0XHRnYXRlLnBhcmFtcy5tYXAoZnVuY3Rpb24odmFyTmFtZSwgdmFySW5kZXgpIHtcblx0XHRcdFx0XHRpZihBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcblx0XHRcdFx0XHRcdC8vIERlcHJlY2F0ZWQuIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9ubHkuIFwicGFyYW1zXCIgc2hvdWxkIGJlIG9iamVjdCAtIG5vdCBhcnJheS5cblx0XHRcdFx0XHRcdHZhcnNbdmFyTmFtZV0gPSBwYXJhbXMubGVuZ3RoID4gdmFySW5kZXggPyBtYXRoLmV2YWx1YXRlKHBhcmFtc1t2YXJJbmRleF0sIGdsb2JhbFBhcmFtcykgOiBudWxsO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2YXJzW3Zhck5hbWVdID0gbWF0aC5ldmFsdWF0ZShwYXJhbXNbdmFyTmFtZV0sIGdsb2JhbFBhcmFtcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2YXIgZXYgPSBtYXRoLmV2YWx1YXRlKGl0ZW0sIHZhcnMpO1xuXHRcdFx0XHRyYXdHYXRlUm93LnB1c2goZXYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmF3R2F0ZVJvdy5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJhd0dhdGUucHVzaChyYXdHYXRlUm93KTtcblx0fSk7XG5cdHJldHVybiByYXdHYXRlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmZpbmRHbG9iYWxQYXJhbXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHJlcyA9IHtcblx0XHRnbG9iYWxQYXJhbXM6IFtdLFxuXHRcdGNlbGxzOiBbXVxuXHR9O1xuXG5cdHZhciBleHRyYWN0VmFyaWFibGVzID0gZnVuY3Rpb24ocykge1xuXHRcdHZhciB2YXJzID0gW107XG5cblx0XHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlICYmICFub2RlLmlzRnVuY3Rpb25Ob2RlICYmICFtYXRoW25vZGUubmFtZV0pIHtcblx0XHRcdFx0dmFycy5wdXNoKG5vZGUubmFtZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShzKTtcblx0XHRub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdHJldHVybiB2YXJzO1xuXHR9O1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0dmFyIGNlbGxBZGRlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGZvcih2YXIgZ2F0ZVBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtVmFsdWUgPSBnYXRlLm9wdGlvbnMucGFyYW1zW2dhdGVQYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYodHlwZW9mIGdhdGVQYXJhbVZhbHVlID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGdsb2JhbHMgPSBleHRyYWN0VmFyaWFibGVzKGdhdGVQYXJhbVZhbHVlKTtcblxuXHRcdFx0XHRcdFx0XHRpZihnbG9iYWxzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZyA9IDA7IGcgPCBnbG9iYWxzLmxlbmd0aDsgZysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihyZXMuZ2xvYmFsUGFyYW1zLmluZGV4T2YoZ2xvYmFsc1tnXSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcy5nbG9iYWxQYXJhbXMucHVzaChnbG9iYWxzW2ddKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZighY2VsbEFkZGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbWF4V2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGdhdGUud2lyZXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzLmNlbGxzLnB1c2goW2NvbHVtbiwgbWF4V2lyZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2VsbEFkZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdsb2JhbFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5maW5kR2xvYmFsUGFyYW1zKCkuZ2xvYmFsUGFyYW1zO1xuXHRyZXR1cm4gZ2xvYmFsUGFyYW1zO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdvdEdsb2JhbFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5nZXRHbG9iYWxQYXJhbXMoKTtcblxuXHRyZXR1cm4gZ2xvYmFsUGFyYW1zLmxlbmd0aCA+IDA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUudXBkYXRlR2xvYmFsUGFyYW1zID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucGFyYW1zID0gdGhpcy5nZXRHbG9iYWxQYXJhbXMoKTtcblxuXHR0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgfHwge307XG5cdHRoaXMub3B0aW9ucy5wYXJhbXMgPSB0aGlzLm9wdGlvbnMucGFyYW1zIHx8IHt9O1xuXG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblx0XHRpZih0eXBlb2YgdGhpcy5vcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRoaXMub3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSA9IDA7XG5cdFx0fVxuXHR9XG5cblx0Zm9yKHZhciBwYXJhbU5hbWUgaW4gdGhpcy5vcHRpb25zLnBhcmFtcykge1xuXHRcdGlmKHRoaXMucGFyYW1zLmluZGV4T2YocGFyYW1OYW1lKSA8IDApIHtcblx0XHRcdGRlbGV0ZSB0aGlzLm9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXMucGFyYW1zO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmRlY29tcG9zZSA9IGZ1bmN0aW9uKG9iaikge1xuXHRpZighb2JqLmdhdGVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHR0aGlzLnVwZGF0ZUdsb2JhbFBhcmFtcygpO1xuXG5cdGZ1bmN0aW9uIGluamVjdEFycmF5KGExLCBhMiwgcG9zKSB7XG5cdFx0cmV0dXJuIGExLnNsaWNlKCAwLCBwb3MgKS5jb25jYXQoIGEyICkuY29uY2F0KCBhMS5zbGljZSggcG9zICkgKTtcblx0fVxuXG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgb2JqLmdhdGVzWzBdLmxlbmd0aDsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgb2JqLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IG9iai5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwICYmICF0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHR2YXIgdG1wID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdHZhciBjdXN0b20gPSBvYmouY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoY3VzdG9tKSB7XG5cdFx0XHRcdFx0dG1wLmxvYWQoY3VzdG9tKTtcblx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHQvLyBjaXJjdWl0IHdpdGggcGFyYW1zXG5cdFx0XHRcdFx0aWYodG1wLnBhcmFtcy5sZW5ndGggJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbXMgPSBnYXRlLm9wdGlvbnMucGFyYW1zO1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBjYyA9IDA7IGNjIDwgdG1wLmdhdGVzWzBdLmxlbmd0aDsgY2MrKykge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCB0bXAubnVtUXViaXRzOyB3dysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdnID0gdG1wLmdhdGVzW3d3XVtjY107XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2cgJiYgZ2cuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdnLm9wdGlvbnMgJiYgZ2cub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkZXN0UGFyYW0gaW4gZ2cub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBwYXJzZSBwYXJhbSwgcmVwbGFjZSB2YXJpYWJsZSB3aXRoIGdsb2JhbCBwYXJhbSBhbmQgYXNzZW1ibGUgaXQgYmFja1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnZy5vcHRpb25zLnBhcmFtc1tkZXN0UGFyYW1dKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdHJhbnNmb3JtZWQgPSBub2RlLnRyYW5zZm9ybShmdW5jdGlvbiAobm9kZSwgcGF0aCwgcGFyZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSAmJiBnbG9iYWxQYXJhbXMuaGFzT3duUHJvcGVydHkobm9kZS5uYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbWF0aC5wYXJzZShcIihcIiArIGdsb2JhbFBhcmFtc1tub2RlLm5hbWVdICsgXCIpXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2cub3B0aW9ucy5wYXJhbXNbZGVzdFBhcmFtXSA9IHRyYW5zZm9ybWVkLnRvU3RyaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBjYyA9IDA7IGNjIDwgdG1wLmdhdGVzWzBdLmxlbmd0aDsgY2MrKykge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCB0bXAubnVtUXViaXRzOyB3dysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdnID0gdG1wLmdhdGVzW3d3XVtjY107XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGdnLm9wdGlvbnMgPSBnZy5vcHRpb25zIHx8IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2cub3B0aW9ucy5jb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdHZhciBkZWNvbXBvc2VkID0gdG1wLnNhdmUodHJ1ZSk7XG5cdFx0XHRcdFx0aWYoIWRlY29tcG9zZWQuZ2F0ZXNbMF0ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHRtcHEgPSAwOyB0bXBxIDwgZGVjb21wb3NlZC5nYXRlcy5sZW5ndGg7IHRtcHErKykge1xuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2VkLmdhdGVzW3RtcHFdLnB1c2gobnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGVtcHR5ID0gW107XG5cdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlY29tcG9zZWQuZ2F0ZXNbMF0ubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0XHRlbXB0eS5wdXNoKG51bGwpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIHNoaWZ0IGNvbHVtbnMgcmlnaHRcblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgb2JqLm51bVF1Yml0czsgdysrKSB7XG5cdFx0XHRcdFx0XHR2YXIgZyA9IG9iai5nYXRlc1t3XVtjb2x1bW5dO1xuXHRcdFx0XHRcdFx0aWYoZyAmJiBnLmlkID09IGdhdGUuaWQpIHtcblx0XHRcdFx0XHRcdFx0b2JqLmdhdGVzW3ddLnNwbGljZShjb2x1bW4sIDEpO1xuXHRcdFx0XHRcdFx0XHR2YXIgaW5zZXJ0R2F0ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVjb21wb3NlZC5nYXRlc1tnLmNvbm5lY3Rvcl0pKTtcblx0XHRcdFx0XHRcdFx0Ly8gdW5pcXVlIGlkXG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgdG1wcSA9IDA7IHRtcHEgPCBpbnNlcnRHYXRlLmxlbmd0aDsgdG1wcSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoaW5zZXJ0R2F0ZVt0bXBxXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aW5zZXJ0R2F0ZVt0bXBxXS5pZCA9IGluc2VydEdhdGVbdG1wcV0uaWQgKyBcIl9cIiArIGdhdGUuaWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG9iai5nYXRlc1t3XSA9IGluamVjdEFycmF5KG9iai5nYXRlc1t3XSwgaW5zZXJ0R2F0ZSwgY29sdW1uKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG9iai5nYXRlc1t3XSA9IGluamVjdEFycmF5KG9iai5nYXRlc1t3XSwgZW1wdHksIGNvbHVtbiArIDEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9iai5jdXN0b21HYXRlcyA9IHt9O1xuXG5cdHJldHVybiBvYmo7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVjb21wb3NlR2F0ZUF0ID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHQvLyBpZiB0aGVyZSBpcyBubyBnYXRlIC0gcmV0dXJuXG5cdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0aWYoIWdhdGUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBpZiBnYXRlIGlzIG5vdCBjb21wb3NpdGUgLSByZXR1cm5cblx0aWYoIXRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIGNvcHkgY2lyY3VpdFxuXHR2YXIgb2JqID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdG9iai5sb2FkKHRoaXMuc2F2ZSgpKTtcblxuXHQvLyByZW1vdmUgYWxsIGdhdGVzIGV4Y2VwdCB0aGlzXG5cdGZvcih2YXIgY29sID0gMDsgY29sIDwgb2JqLmdhdGVzWzBdLmxlbmd0aDsgY29sKyspIHtcblx0XHRmb3IodmFyIHJvdyA9IDA7IHJvdyA8IG9iai5udW1RdWJpdHM7IHJvdysrKSB7XG5cdFx0XHR2YXIgZyA9IG9iai5nYXRlc1tyb3ddW2NvbF07XG5cdFx0XHRpZihnICYmIGcuaWQgIT0gZ2F0ZS5pZCkge1xuXHRcdFx0XHRvYmoucmVtb3ZlR2F0ZUF0KGNvbCwgcm93KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgY2lyY3VpdFxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQob2JqLnNhdmUodHJ1ZSkpO1xuXHRjaXJjdWl0LnJlbW92ZUxlYWRpbmdDb2x1bW5zKCk7XG5cdGNpcmN1aXQucmVtb3ZlVHJhaWxpbmdDb2x1bW5zKCk7XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQuZ2F0ZXNbMF0ubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0dGhpcy5pbnNlcnRTcGFjZShjb2x1bW4gKyBpLCBnYXRlLndpcmVzKTtcblx0fVxuXHR0aGlzLnJlbW92ZUdhdGUoZ2F0ZS5pZCk7XG5cblx0dmFyIGRlc3RDb2wgPSBjb2x1bW47XG5cdGZvcih2YXIgY29sID0gMDsgY29sIDwgY2lyY3VpdC5nYXRlc1swXS5sZW5ndGg7IGNvbCsrKSB7XG5cdFx0dmFyIGdhdGVzID0gY2lyY3VpdC5nZXRHYXRlc0F0Q29sdW1uKGNvbCk7XG5cdFx0Z2F0ZXMubWFwKGZ1bmN0aW9uKGcpIHtcblx0XHRcdHNlbGYuYWRkR2F0ZShnLm5hbWUsIGRlc3RDb2wsIGcud2lyZXMsIGcub3B0aW9ucyk7XG5cdFx0fSk7XG5cdFx0ZGVzdENvbCsrO1xuXHR9XG5cblx0cmV0dXJuIGNpcmN1aXQ7XG59O1xuXG5cbi8vXG4vLyBDb252ZXJ0IHRoaXMgY2lyY3VpdCB0byBjdXN0b20gZ2F0ZVxuLy9cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNvbnZlcnRUb0N1c3RvbUdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgZGVjb21wb3NlLCBhZGRUb0NpcmN1aXQpIHtcblx0Ly8gcmVtb3ZlIG1lYXN1cmVtZW50IGFuZCBjbGFzc2ljYWwgY29udHJvbFxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHQvLyByZW1vdmUgbWVhc3VyZW1lbnRcblx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiKSB7XG5cdFx0XHRcdFx0dGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dID0gbnVsbDtcblx0XHRcdFx0XHRnYXRlID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSBjb25kaXRpb25zXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJlbW92ZSBjcmVnc1xuXHR0aGlzLmNyZWdzID0ge307XG5cblx0dmFyIHNvdXJjZSA9IHRoaXMuc2F2ZShkZWNvbXBvc2UpO1xuXHRpZihzb3VyY2Uub3B0aW9ucykge1xuXHRcdHNvdXJjZS5vcHRpb25zLmh5YnJpZCA9IGZhbHNlO1xuXHRcdGlmKHNvdXJjZS5vcHRpb25zLmh5YnJpZE9wdGlvbnMpIHtcblx0XHRcdGRlbGV0ZSBzb3VyY2Uub3B0aW9ucy5oeWJyaWRPcHRpb25zO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuY2xlYXIoKTtcblx0dGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV0gPSBzb3VyY2U7XG5cblx0aWYoYWRkVG9DaXJjdWl0KSB7XG5cdFx0dmFyIHdpcmVzID0gW107XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdHdpcmVzLnB1c2goaSk7XG5cdFx0fVxuXG5cdFx0dmFyIGdhdGVPcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXS5vcHRpb25zKSk7XG5cblx0XHR0aGlzLmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgZ2F0ZU9wdGlvbnMpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMucmVtb3ZlVHJhaWxpbmdSb3dzKCk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS52YWxpZEN1c3RvbUdhdGVOYW1lID0gZnVuY3Rpb24oYmFzZU5hbWUpIHtcblx0YmFzZU5hbWUgPSAoYmFzZU5hbWUgfHwgXCJzdWJcIikgKyBcIlwiO1xuXG5cdHZhciBjdXN0b21HYXRlTmFtZXMgPSBbXTtcblx0aWYodGhpcy5jdXN0b21HYXRlcykge1xuXHRcdGlmKCF0aGlzLmJhc2ljR2F0ZXNbYmFzZU5hbWVdKSB7XG5cdFx0XHRpZighdGhpcy5jdXN0b21HYXRlc1tiYXNlTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGJhc2VOYW1lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5iYXNpY0dhdGVzKSB7XG5cdFx0XHRjdXN0b21HYXRlTmFtZXMucHVzaChnYXRlTmFtZSk7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBnYXRlTmFtZSBpbiB0aGlzLmN1c3RvbUdhdGVzKSB7XG5cdFx0XHRjdXN0b21HYXRlTmFtZXMucHVzaChnYXRlTmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGluZGV4ID0gMDtcblx0dmFyIHZhbGlkTmFtZSA9IFwiXCI7XG5cdGRvIHtcblx0XHRpbmRleCsrO1xuXHRcdHZhbGlkTmFtZSA9IGJhc2VOYW1lICsgaW5kZXg7XG5cdH0gd2hpbGUoY3VzdG9tR2F0ZU5hbWVzLmluZGV4T2YodmFsaWROYW1lKSA+PSAwKTtcblxuXHRyZXR1cm4gdmFsaWROYW1lO1xufTtcblxuXG4vL1xuLy8gU3BsaXQgY2lyY3VpdCBpbnRvIGNvbXBvc2l0ZSBnYXRlcywgZWFjaCBvZiBcImJsb2NrU2l6ZVwiIHF1Yml0c1xuLy9cbi8vIE9wdGlvbnM6XG4vLyAgIHtcbi8vICAgICAgZmxleGlibGVCbG9ja1NpemU6IGJvb2wgLy8gQWxsb3cgbGFyZ2VyIGJsb2NrcyBmb3IgZ2F0ZXMgd2l0aCBtb3JlIHF1Yml0cyB0aGFuIGJsb2NrIHNpemVcbi8vICAgICAgdmVydGljYWxPbmx5OiBib29sIC8vIERvbid0IGV4dGVuZCBibG9ja3MgaG9yaXpvbnRhbGx5XG4vLyAgIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zcGxpdEludG9CbG9ja3MgPSBmdW5jdGlvbihibG9ja1NpemUsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGJsb2NrcyA9IFtdO1xuXHR2YXIgcHJldkNvbmRpdGlvbiA9IFwie31cIjtcblx0dmFyIHByZXZJc1VuaXRhcnkgPSB0cnVlO1xuXG5cdHZhciBjdXJyZW50QmxvY2sgPSBudWxsO1xuXG5cdHZhciBkZWNvbXBvc2VkID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGRlY29tcG9zZWQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdHZhciBudW1Db2xzID0gZGVjb21wb3NlZC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwICYmICFnYXRlLmFkZGVkVG9CbG9jaykge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHR2YXIgY3VycmVudENvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gSlNPTi5zdHJpbmdpZnkoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikgOiBcInt9XCI7XG5cdFx0XHRcdHZhciBjdXJyZW50SXNVbml0YXJ5ID0gZ2F0ZURlZiAmJiAhIShnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXG5cdFx0XHRcdHZhciBuZXdXaXJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3VycmVudEJsb2NrID8gY3VycmVudEJsb2NrLndpcmVzIDogW10pKTtcblx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od2lyZSkge1xuXHRcdFx0XHRcdGlmKG5ld1dpcmVzLmluZGV4T2Yod2lyZSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRuZXdXaXJlcy5wdXNoKHdpcmUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYoXG5cdFx0XHRcdFx0IWJsb2Nrcy5sZW5ndGggfHxcblx0XHRcdFx0XHQhKGN1cnJlbnRDb25kaXRpb24gPT0gcHJldkNvbmRpdGlvbikgfHxcblx0XHRcdFx0XHQhY3VycmVudElzVW5pdGFyeSB8fFxuXHRcdFx0XHRcdCFwcmV2SXNVbml0YXJ5IHx8XG5cdFx0XHRcdFx0IShuZXdXaXJlcy5sZW5ndGggPD0gYmxvY2tTaXplKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjdXJyZW50QmxvY2sgPSB7XG5cdFx0XHRcdFx0XHR3aXJlczogZ2F0ZS53aXJlcyxcblx0XHRcdFx0XHRcdGdhdGVzOiBbZ2F0ZV1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJsb2Nrcy5wdXNoKGN1cnJlbnRCbG9jayk7XG5cblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0Y3VycmVudEJsb2NrLmNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGN1cnJlbnRCbG9jay53aXJlcyA9IG5ld1dpcmVzO1xuXHRcdFx0XHRcdGN1cnJlbnRCbG9jay5nYXRlcy5wdXNoKGdhdGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od3cpIHtcblx0XHRcdFx0XHRkZWNvbXBvc2VkLmdhdGVzW3d3XVtjb2x1bW5dLmFkZGVkVG9CbG9jayA9IHRydWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHByZXZDb25kaXRpb24gPSBjdXJyZW50Q29uZGl0aW9uO1xuXHRcdFx0XHRwcmV2SXNVbml0YXJ5ID0gY3VycmVudElzVW5pdGFyeTtcblxuXHRcdFx0XHRpZighb3B0aW9ucy52ZXJ0aWNhbE9ubHkpIHtcblx0XHRcdFx0XHQvLyB0cnkgdG8gZXh0ZW5kIHRoZSBibG9jayBob3Jpem9udGFsbHlcblx0XHRcdFx0XHR2YXIgZXh0Q29sdW1uID0gY29sdW1uICsgMTtcblx0XHRcdFx0XHR2YXIgZXh0V2lyZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRCbG9jay53aXJlcykpO1xuXHRcdFx0XHRcdGV4dFdpcmVzLnNvcnQoKTtcblx0XHRcdFx0XHR3aGlsZShleHRDb2x1bW4gPCBudW1Db2xzICYmIGV4dFdpcmVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0ZXh0V2lyZSA9IGV4dFdpcmVzWzBdO1xuXG5cdFx0XHRcdFx0XHR3aGlsZShleHRXaXJlcy5sZW5ndGggJiYgZXh0V2lyZSA8PSBleHRXaXJlc1tleHRXaXJlcy5sZW5ndGggLSAxXSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZXh0R2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGV4dENvbHVtbiwgZXh0V2lyZSk7XG5cdFx0XHRcdFx0XHRcdGlmKGV4dEdhdGUgJiYgIWV4dEdhdGUuYWRkZWRUb0Jsb2NrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dEdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZXh0R2F0ZS5uYW1lXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0Q29uZGl0aW9uID0gZXh0R2F0ZS5vcHRpb25zICYmIGV4dEdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBKU09OLnN0cmluZ2lmeShleHRHYXRlLm9wdGlvbnMuY29uZGl0aW9uKSA6IFwie31cIjtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0SXNVbml0YXJ5ID0gZXh0R2F0ZURlZiAmJiAhIShleHRHYXRlRGVmLm1hdHJpeCAmJiBleHRHYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBnYXRlIGlzIHZhbGlkIGZvciBibG9ja1xuXHRcdFx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVWYWxpZCA9IGV4dElzVW5pdGFyeSAmJiAoZXh0Q29uZGl0aW9uID09IGN1cnJlbnRDb25kaXRpb24pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgYWxsIGdhdGUncyB3aXJlcyBhcmUgaW5zaWRlIGJsb2NrXG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVZhbGlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCBleHRHYXRlLndpcmVzLmxlbmd0aDsgd3crKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihleHRXaXJlcy5pbmRleE9mKGV4dEdhdGUud2lyZXNbd3ddKSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnYXRlVmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVWYWxpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gYWRkIGdhdGUgdG8gYmxvY2tcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRCbG9jay5nYXRlcy5wdXNoKGV4dEdhdGUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRleHRHYXRlLndpcmVzLm1hcChmdW5jdGlvbih3dykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2VkLmdhdGVzW3d3XVtleHRDb2x1bW5dLmFkZGVkVG9CbG9jayA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIGdhdGUncyB3aXJlcyBmcm9tIHNjYW5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWxpZEV4dFdpcmVzID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCBleHRXaXJlcy5sZW5ndGg7IHd3KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGV4dFcgPSBleHRXaXJlc1t3d107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGV4dEdhdGUud2lyZXMuaW5kZXhPZihleHRXKSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxpZEV4dFdpcmVzLnB1c2goZXh0Vyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGV4dFdpcmVzID0gdmFsaWRFeHRXaXJlcztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gZ290byBuZXh0IHZhbGlkIHdpcmVcblx0XHRcdFx0XHRcdFx0aWYoZXh0V2lyZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld0V4dFdpcmUgPSBleHRXaXJlc1tleHRXaXJlcy5sZW5ndGggLSAxXSArIDE7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IGV4dFdpcmVzLmxlbmd0aCAtIDE7IHd3ID49IDA7IHd3LS0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBleHRXID0gZXh0V2lyZXNbd3ddO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXh0VyA+IGV4dFdpcmUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmV3RXh0V2lyZSA9IGV4dFc7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGV4dFdpcmUgPSBuZXdFeHRXaXJlO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGV4dENvbHVtbisrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cblx0dmFyIGJsb2NrQ291bnRlciA9IDA7XG5cdGZvcih2YXIgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBibG9ja3MubGVuZ3RoOyBibG9ja0luZGV4KyspIHtcblx0XHR2YXIgYmxvY2sgPSBibG9ja3NbYmxvY2tJbmRleF07XG5cblx0XHR2YXIgaXNCbG9jayA9IGZhbHNlO1xuXHRcdGlmKGJsb2NrLndpcmVzLmxlbmd0aCA8PSBibG9ja1NpemUgfHwgISFvcHRpb25zLmZsZXhpYmxlQmxvY2tTaXplKSB7XG5cdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgYmxvY2suZ2F0ZXMubGVuZ3RoOyB4KyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSBibG9jay5nYXRlc1t4XTtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblxuXHRcdFx0XHRpZihnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRpc0Jsb2NrID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKGlzQmxvY2spIHtcblx0XHRcdGJsb2NrQ291bnRlcisrO1xuXG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0Zm9yKHZhciB4ID0gMDsgeCA8IGJsb2NrLmdhdGVzLmxlbmd0aDsgeCsrKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gYmxvY2suZ2F0ZXNbeF07XG5cblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdGRlbGV0ZSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVXBkYXRlIGdhdGUgd2lyZXNcblx0XHRcdFx0dmFyIHdpcmVzID0gW107XG5cdFx0XHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdFx0XHR3aXJlcy5wdXNoKGJsb2NrLndpcmVzLmluZGV4T2Yod2lyZSkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Z2F0ZS53aXJlcyA9IHdpcmVzO1xuXG5cdFx0XHRcdC8vIGFkZCBnYXRlIHRvIGN1c3RvbSBnYXRlXG5cdFx0XHRcdGN1c3RvbUdhdGUuYXBwZW5kR2F0ZShnYXRlLm5hbWUsIHdpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyByZWdpc3RlciBjdXN0b20gZ2F0ZVxuXHRcdFx0dmFyIGN1c3RvbUdhdGVOYW1lID0gXCJibG9ja1wiICsgYmxvY2tDb3VudGVyO1xuXHRcdFx0Y2lyY3VpdC5yZWdpc3RlckdhdGUoY3VzdG9tR2F0ZU5hbWUsIGN1c3RvbUdhdGUpO1xuXG5cdFx0XHQvLyBhZGQgY3VzdG9tIGdhdGUgdG8gY2lyY3VpdFxuXHRcdFx0dmFyIGN1c3RvbUdhdGVPcHRpb25zID0ge307XG5cdFx0XHRpZihibG9jay5jb25kaXRpb24pIHtcblx0XHRcdFx0Y3VzdG9tR2F0ZU9wdGlvbnMuY29uZGl0aW9uID0gYmxvY2suY29uZGl0aW9uO1xuXHRcdFx0fVxuXHRcdFx0Y2lyY3VpdC5hcHBlbmRHYXRlKGN1c3RvbUdhdGVOYW1lLCBibG9jay53aXJlcywgY3VzdG9tR2F0ZU9wdGlvbnMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAtLS1cblx0XHRcdC8vIGFkZCBvcmlnaW5hbCBnYXRlIChub24tdW5pdGFyeSBnYXRlcyBbYW5kIGdhdGVzIHdpdGggbW9yZSB0aGFuIGJsb2NrU2l6ZSB3aXJlcyBpZiBhbGxvd0ZsZXhpYmxlQmxvY2tTaXplID0gZmFsc2VdKVxuXHRcdFx0Ly8gLS0tXG5cdFx0XHRibG9jay5nYXRlcy5tYXAoZnVuY3Rpb24oZ2F0ZSkge1xuXHRcdFx0XHRjaXJjdWl0LmFwcGVuZEdhdGUoZ2F0ZS5uYW1lLCBnYXRlLndpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5sb2FkKGNpcmN1aXQuc2F2ZShmYWxzZSkpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUudXNlZEdhdGVzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblx0dmFyIHVzZWQgPSBbXTtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IGRlY29tcG9zZWQubnVtQ29scygpOyBjb2wrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdhdGVzW3dpcmVdW2NvbF07XG5cdFx0XHRpZihnYXRlICYmIHVzZWQuaW5kZXhPZihnYXRlLm5hbWUpIDwgMCkge1xuXHRcdFx0XHR2YXIgc2tpcEdhdGUgPSBmYWxzZTtcblxuXHRcdFx0XHRpZihvcHRpb25zLnVuaXRhcmllc09ubHkpIHtcblx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0aWYoIWJhc2ljR2F0ZSB8fCAhYmFzaWNHYXRlLm1hdHJpeCB8fCAhYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHNraXBHYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighc2tpcEdhdGUpIHtcblx0XHRcdFx0XHR1c2VkLnB1c2goZ2F0ZS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEN1c3RvbSBnYXRlc1xuXHRpZighb3B0aW9ucy5ub0N1c3RvbUdhdGVzKSB7XG5cdFx0Zm9yKHZhciBjdXN0b21HYXRlTmFtZSBpbiB0aGlzLmN1c3RvbUdhdGVzKSB7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHRoaXMuY3VzdG9tR2F0ZXNbY3VzdG9tR2F0ZU5hbWVdO1xuXG5cdFx0XHRpZih1c2VkLmluZGV4T2YoY3VzdG9tR2F0ZU5hbWUpIDwgMCkge1xuXHRcdFx0XHR1c2VkLnB1c2goY3VzdG9tR2F0ZU5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB1c2VkO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY291bnRPcHMgPSBmdW5jdGlvbihvYmosIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdG9wdGlvbnMuc2hhbGxvdyA9IG9wdGlvbnMuc2hhbGxvdyB8fCBmYWxzZTtcblxuXHRpZighb2JqKSB7XG5cdFx0b2JqID0gdGhpcztcblx0fVxuXG5cdHZhciBvcHMgPSB7fTtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IG9iai5nYXRlcy5sZW5ndGg7IHdpcmUrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgb2JqLmdhdGVzW3dpcmVdLmxlbmd0aDsgY29sKyspIHtcblx0XHRcdHZhciBnYXRlID0gb2JqLmdhdGVzW3dpcmVdW2NvbF07XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRpZihvcHNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0rKztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0gPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHRpZihvcHNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRvcHNbZ2F0ZS5uYW1lXSsrO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0gPSAxO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZighb3B0aW9ucy5zaGFsbG93KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBzdWJPcHMgPSB0aGlzLmNvdW50T3BzKGN1c3RvbUdhdGUsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRmb3Ioc3ViTmFtZSBpbiBzdWJPcHMpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihvcHNbc3ViTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wc1tzdWJOYW1lXSArPSBzdWJPcHNbc3ViTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wc1tzdWJOYW1lXSA9IHN1Yk9wc1tzdWJOYW1lXTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3BzO1xufTtcblxuXG4vL1xuLy8gUmV0dXJucyBhcnJheXMgb2YgcXViaXRzIHdoZXJlIGdhdGVzIGFyZSBwcmVzZW50XG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENvdXBsaW5nTWFwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY291cGxpbmdNYXAgPSBcIlwiO1xuXG5cdHZhciBkZWNvbXBvc2VkID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGRlY29tcG9zZWQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBkZWNvbXBvc2VkLm51bUNvbHMoKTsgY29sKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoY29sLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgc2tpcEdhdGUgPSBmYWxzZTtcblxuXHRcdFx0XHRpZihvcHRpb25zLnVuaXRhcmllc09ubHkpIHtcblx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0aWYoIWJhc2ljR2F0ZSB8fCAhYmFzaWNHYXRlLm1hdHJpeCB8fCAhYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHNraXBHYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighc2tpcEdhdGUpIHtcblx0XHRcdFx0XHR2YXIgd2lyZXNTdHIgPSBKU09OLnN0cmluZ2lmeShnYXRlLndpcmVzKTtcblx0XHRcdFx0XHRpZihjb3VwbGluZ01hcC5pbmRleE9mKHdpcmVzU3RyKSA8IDApIHtcblx0XHRcdFx0XHRcdGlmKGNvdXBsaW5nTWFwKSB7XG5cdFx0XHRcdFx0XHRcdGNvdXBsaW5nTWFwICs9IFwiLFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y291cGxpbmdNYXAgKz0gd2lyZXNTdHI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEpTT04ucGFyc2UoXCJbXCIgKyBjb3VwbGluZ01hcCArIFwiXVwiKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlRGVmID0gZnVuY3Rpb24obmFtZSkge1xuXHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tuYW1lXTtcblx0aWYoIWdhdGVEZWYpIHtcblx0XHRnYXRlRGVmID0gdGhpcy5jdXN0b21HYXRlc1tuYW1lXTtcblx0fVxuXHRyZXR1cm4gZ2F0ZURlZjtcbn07XG5cbi8vIC0tLVxuLy8gSW1wb3J0IGZyb20gUXViaXQgVG9hc3RlclxuLy8gLS0tXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW1wb3J0UmF3ID0gZnVuY3Rpb24oZGF0YSwgZXJyb3JDYWxsYmFjaykge1xuXHR2YXIgbnVtUXViaXRzID0gZGF0YSA/IChkYXRhLnF1Yml0cyB8fCAwKSA6IDA7XG5cblx0dGhpcy5pbml0KG51bVF1Yml0cyk7XG5cblx0aWYoIWRhdGEpIHtcblx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRlcnJvckNhbGxiYWNrKFtdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fVxuXG5cdC8vIGltcG9ydCBjbGFzc2ljYWwgcmVnaXN0ZXJzXG5cdGlmKGRhdGEuY3JlZ3MpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5jcmVncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGNyZWcgPSBkYXRhLmNyZWdzW2ldO1xuXG5cdFx0XHRpZighY3JlZy5uYW1lKSB7XG5cdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkNsYXNzaWNhbCByZWdpc3RlciBcIiArIGkgKyBcIiBkb2Vzbid0IGhhdmUgYSBcXFwibmFtZVxcXCIuXCI7XG5cdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuY3JlYXRlQ3JlZyhjcmVnLm5hbWUsIGNyZWcubGVuIHx8IDApO1xuXHRcdH1cblx0fVxuXG5cdC8vIGltcG9ydCBwcm9ncmFtXG5cdGlmKGRhdGEucHJvZ3JhbSkge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkYXRhLnByb2dyYW0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGF0YS5wcm9ncmFtW2ldO1xuXG5cdFx0XHQvLyBJbXBvcnQgZnJvbSBtYXRyaXggaXMgbm90IGltcGxlbWVudGVkIHlldCwgc28gYmVzdCB3ZSBoYXZlIGlzIGdhdGUgbmFtZVxuXHRcdFx0Ly8gQ2hlY2sgaWYgZ2F0ZSBoYXMgbmFtZVxuXHRcdFx0aWYoIWdhdGUubmFtZSkge1xuXHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJHYXRlIFwiICsgaSArIFwiIGRvZXNuJ3QgaGF2ZSBhIFxcXCJuYW1lXFxcIi4gTmFtZSBpcyBvcHRpb25hbCBhbmQgdGhpcyBpcyBPSyBmb3IgUXViaXRUb2FzdGVyIGJ1dCB3ZSBjYW5ub3QgaW1wb3J0IGdhdGUgZnJvbSBtYXRyaXguIE5vdCBpbXBsZW1lbnRlZCB5ZXQuXCI7XG5cdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGlmIGdhdGUgbmFtZSBleGlzdHMgaW4gdGhpcy5iYXNpY0dhdGVzXG5cdFx0XHR2YXIgYmFzaWNHYXRlID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIlVua25vd24gZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuIE5hbWUgaXMgb3B0aW9uYWwgYW5kIHRoaXMgaXMgT0sgZm9yIFF1Yml0VG9hc3RlciBidXQgd2UgY2Fubm90IGltcG9ydCBnYXRlIGZyb20gbWF0cml4LiBXZSBjYW4gaW1wb3J0IG9ubHkgZ2F0ZXMgYnkgbmFtZSBmcm9tIHNldCBvZiBrbm93biBnYXRlcy5cIjtcblx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXG5cdFx0XHR2YXIgd2lyZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdhdGUud2lyZXMgfHwgW10pKTtcblx0XHRcdHZhciBvcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnYXRlLm9wdGlvbnMgfHwge30pKTtcblxuXHRcdFx0Ly8gY2hlY2sgaWYgbnVtYmVyIG9mIHdpcmVzIGlzIGNvcnJlY3Rcblx0XHRcdHZhciBiYXNpY0dhdGVRdWJpdHMgPSBiYXNpY0dhdGUubWF0cml4ICYmIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoID8gbWF0aC5sb2cyKGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoKSA6IDE7XG5cdFx0XHRpZih3aXJlcy5sZW5ndGggIT0gYmFzaWNHYXRlUXViaXRzKSB7XG5cdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiIGhhcyBcIiArIHdpcmVzLmxlbmd0aCArIFwiIHdpcmVzIGJ1dCBzaG91bGQgaGF2ZSBcIiArIGJhc2ljR2F0ZVF1Yml0cyArIFwiIHdpcmVzLlwiO1xuXHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiBhbGwgcGFyYW1ldGVycyBhcmUgcHJlc2VudFxuXHRcdFx0aWYoYmFzaWNHYXRlLnBhcmFtcyAmJiBiYXNpY0dhdGUucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRpZighb3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJNaXNzaW5nIHBhcmFtZXRlcnMgZm9yIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLiBFeHBlY3RpbmcgXCIgKyBiYXNpY0dhdGUucGFyYW1zLmxlbmd0aCArIFwiIHBhcmFtZXRlcnMuXCI7XG5cdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgYmFzaWNHYXRlLnBhcmFtcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBiYXNpY0dhdGUucGFyYW1zW3BdO1xuXG5cdFx0XHRcdFx0aWYodHlwZW9mIG9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0gPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiTWlzc2luZyBwYXJhbWV0ZXIgXFxcIlwiICsgcGFyYW1OYW1lICsgXCJcXFwiIGZvciBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cIjtcblx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5hcHBlbmRHYXRlKGdhdGUubmFtZSwgd2lyZXMsIG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8vIFRoaXMgZXJyb3IgaGFuZGxpbmcgaXMgY3IqcCBidXQgbGV0J3MgYmUgY29uc2lzdGVudCB3aXRoIGltcG9ydFFBU00oKSBmb3Igbm93XG5cdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRlcnJvckNhbGxiYWNrKFtdKTtcblx0fVxufTtcblxuLy8gLS0tXG4vLyBFeHBvcnQgdG8gUXViaXQgVG9hc3RlclxuLy8gLS0tXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UmF3ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2xvYmFsUGFyYW1zKSk7XG5cdGZvcih2YXIgZ2xvYmFsUGFyYW1OYW1lIGluIGdsb2JhbFBhcmFtcykge1xuXHRcdGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdH1cblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHR2YXIgbnVtQ29scyA9IGRlY29tcG9zZWQubnVtQ29scygpO1xuXHR2YXIgc2VxdWVuY2UgPSBbXTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGd0ID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKCFndCkge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiVW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cIik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHJhd0dhdGUgPSBkZWNvbXBvc2VkLmdldFJhd0dhdGUoZ3QsIGdhdGUub3B0aW9ucyk7XG5cblx0XHRcdFx0dmFyIHJhd01hdHJpeCA9IFtdO1xuXHRcdFx0XHRyYXdHYXRlLm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdFx0XHR2YXIgcmF3Um93ID0gW107XG5cdFx0XHRcdFx0cm93Lm1hcChmdW5jdGlvbihjZWxsKSB7XG5cdFx0XHRcdFx0XHRjZWxsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZWxsKSk7XG5cdFx0XHRcdFx0XHRpZih0eXBlb2YgY2VsbCA9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGNlbGxbXCJtYXRoanNcIl0gJiYgdHlwZW9mIGNlbGxbXCJtYXRoanNcIl0gPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGNlbGxbXCJ0eXBlXCJdID0gY2VsbFtcIm1hdGhqc1wiXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBjZWxsLm1hdGhqcztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmF3Um93LnB1c2goY2VsbCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmF3TWF0cml4LnB1c2gocmF3Um93KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7fTtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdFx0b3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZS5vcHRpb25zKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihvcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdGZvcih2YXIgcGFyYW1OYW1lIGluIG9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShvcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdLCBnbG9iYWxQYXJhbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlcXVlbmNlLnB1c2goe1xuXHRcdFx0XHRcdG5hbWU6IGdhdGUubmFtZSxcblx0XHRcdFx0XHRtYXRyaXg6IHJhd01hdHJpeCxcblx0XHRcdFx0XHR3aXJlczogZ2F0ZS53aXJlcyxcblx0XHRcdFx0XHRvcHRpb25zOiBvcHRpb25zXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBjcmVncyA9IFtdO1xuXHRmb3IodmFyIGNyZWcgaW4gZGVjb21wb3NlZC5jcmVncykge1xuXHRcdGNyZWdzLnB1c2goe1xuXHRcdFx0bmFtZTogY3JlZyxcblx0XHRcdGxlbjogZGVjb21wb3NlZC5jcmVnc1tjcmVnXS5sZW5ndGggfHwgMFxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRxdWJpdHM6IGRlY29tcG9zZWQubnVtUXViaXRzLFxuXHRcdGNyZWdzOiBjcmVncyxcblx0XHRwcm9ncmFtOiBzZXF1ZW5jZVxuXHR9O1xufTtcblxuLy9cbi8vIFJldHVybnMgaW5wdXQgZmlsZSBmb3IgUXVhbnR1bSBHZW5lcmF0b3Jcbi8vXG4vLyBvcHRpb25zOiB7IFxuLy8gICAgIG5vVmVjdG9yczogYm9vbCAoZGVmYXVsdDogZmFsc2UpIC8vIHNldCB0cnVlIGZvciB0cmFuc3BpbGluZyB3aXRoIFwicmVwbGFjZV9ibG9ja3NcIiAmIFwicmVwbGFjZV9nYXRlc1wiIG1ldGhvZHMgdG8gYXZvaWQgZ2VuZXJhdGluZyAobGFyZ2UpIHZlY3RvcnNcbi8vICAgICBmcm9tTWF0cml4OiBib29sIChkZWZhdWx0OiBmYWxzZSkgLy8gZGlyZWN0bHkgc2VuZCBtYXRyaXggdG8gZ2VuZXJhdG9yIChpbnN0ZWFkIHZlY3RvcnMpXG4vLyAgICAgbnVtU2FtcGxlczogaW50IChkZWZhdWx0OiBhdXRvKSAvLyBudW1iZXIgb2YgcmFuZG9tIHZlY3RvcnNcbi8vICAgICB1c2VHYXRlczogYXJyYXkgb2Ygc3RyaW5nIChkZWZhdWx0OiBbXCJ1MywgXCJjeFwiXSkgLy8gZ2F0ZXMgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyByYW5kb20gdmVjdG9yc1xuLy8gfVxuLy9cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvR2VuZXJhdG9yID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgcWFzbSA9IHRoaXMuZXhwb3J0UUFTTShudWxsLCBmYWxzZSwgbnVsbCwgZmFsc2UsIHRydWUpO1xuXHR2YXIgdXNlZEdhdGVzID0gdGhpcy51c2VkR2F0ZXMoeyBub0N1c3RvbUdhdGVzOiB0cnVlLCB1bml0YXJpZXNPbmx5OiB0cnVlIH0pO1xuXHR2YXIgY291cGxpbmdNYXAgPSB0aGlzLmdldENvdXBsaW5nTWFwKHsgdW5pdGFyaWVzT25seTogdHJ1ZSB9KTtcblxuXHR2YXIgb3V0cHV0ID0ge1xuXHRcdHNvdXJjZTogeyBcblx0XHRcdGNpcmN1aXQ6IHsgXG5cdFx0XHRcdHFhc206IHFhc21cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cHJvYmxlbTogW10sXG5cblx0XHR0eXBlOiBcImNpcmN1aXRcIixcblxuXHRcdHNldHRpbmdzOiB7XG5cdFx0XHRhbGxvd2VkX2dhdGVzOiB1c2VkR2F0ZXMuam9pbihcIixcIiksXG5cdFx0XHRjb3VwbGluZ19tYXA6IGNvdXBsaW5nTWFwXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdGlmKG9wdGlvbnMuZnJvbU1hdHJpeCkge1xuXHRcdHZhciBtYXRyaXggPSBjaXJjdWl0LmNpcmN1aXRNYXRyaXgoKTtcblx0XHR2YXIgdW5pdGFyeSA9IFtdO1xuXG5cdFx0bWF0cml4Lm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdHJvdy5tYXAoZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdFx0aWYodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHR1bml0YXJ5LnB1c2goW3ZhbHVlLnJlLCB2YWx1ZS5pbV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaXRhcnkucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0b3V0cHV0LnByb2JsZW0ucHVzaCh7XG5cdFx0XHR1bml0YXJ5OiB1bml0YXJ5XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0aWYoIW9wdGlvbnMubm9WZWN0b3JzKSB7XG5cdFx0dmFyIHN0YXRlQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdFx0dmFyIG51bVNhbXBsZXMgPSBvcHRpb25zLm51bVNhbXBsZXMgfHwgKHRoaXMubnVtUXViaXRzIDwgMyA/IDggOiAodGhpcy5udW1RdWJpdHMgPCA1ID8gKCgxIDw8IHRoaXMubnVtUXViaXRzKSArIDEpIDogKHRoaXMubnVtUXViaXRzIDwgOSA/ICh0aGlzLm51bVF1Yml0cyAqIDQpIDogdGhpcy5udW1RdWJpdHMpKSk7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IG51bVNhbXBsZXMgKyAxOyBpKyspIHtcblxuXHRcdFx0dmFyIHNldCA9IHsgaW5wdXQ6IFtdLCBvdXRwdXQ6IFtdIH07XG5cblx0XHRcdHZhciBpbml0aWFsVmVjdG9yID0gW107XG5cblx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdHN0YXRlQ2lyY3VpdC5yYW5kb21DaXJjdWl0KHRoaXMubnVtUXViaXRzLCAyMCwgeyB1c2VHYXRlczogb3B0aW9ucy51c2VHYXRlcyB8fCBbXCJ1M1wiLCBcImN4XCJdLCBub0NsYXNzaWNDb250cm9sOiB0cnVlLCBub01lYXN1cmU6IHRydWUsIG5vUmVzZXQ6IHRydWUgfSk7XG5cdFx0XHRcdHN0YXRlQ2lyY3VpdC5ydW4oKTtcblxuXHRcdFx0XHRzdGF0ZUNpcmN1aXQuc3RhdGVBc0FycmF5KCkubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHRcdFx0c2V0LmlucHV0LnB1c2goWyBzdGF0ZS5hbXBsaXR1ZGUucmUsIHN0YXRlLmFtcGxpdHVkZS5pbSBdKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aW5pdGlhbFZlY3RvciA9IHN0YXRlQ2lyY3VpdC5zdGF0ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNpcmN1aXQuaW5pdFN0YXRlKCk7XG5cblx0XHRcdFx0Y2lyY3VpdC5zdGF0ZUFzQXJyYXkoKS5tYXAoZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdFx0XHRzZXQuaW5wdXQucHVzaChbIHN0YXRlLmFtcGxpdHVkZS5yZSwgc3RhdGUuYW1wbGl0dWRlLmltIF0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpbml0aWFsVmVjdG9yID0gY2lyY3VpdC5zdGF0ZTtcblx0XHRcdH1cblxuXHRcdFx0Y2lyY3VpdC5ydW4obnVsbCwgeyBpbml0aWFsU3RhdGU6IGluaXRpYWxWZWN0b3IgfSk7XG5cblx0XHRcdGNpcmN1aXQuc3RhdGVBc0FycmF5KCkubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHRcdHNldC5vdXRwdXQucHVzaChbIHN0YXRlLmFtcGxpdHVkZS5yZSwgc3RhdGUuYW1wbGl0dWRlLmltIF0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdG91dHB1dC5wcm9ibGVtLnB1c2goc2V0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdHJldHVybiBvdXRwdXQ7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24oZGVjb21wb3NlLCBsaWdodHdlaWdodCkge1xuXHR0aGlzLnVwZGF0ZUdsb2JhbFBhcmFtcygpO1xuXG5cdHZhciBkYXRhID0ge1xuXHRcdG51bVF1Yml0czogdGhpcy5udW1RdWJpdHMsXG5cdFx0cGFyYW1zOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucGFyYW1zKSksXG5cdFx0b3B0aW9uczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMpKSxcblx0XHRnYXRlczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdhdGVzKSksXG5cdFx0Y3VzdG9tR2F0ZXM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jdXN0b21HYXRlcykpLFxuXHRcdGNyZWdzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3JlZ3MpKVxuXHR9XG5cblx0dmFyIHJlcyA9IG51bGw7XG5cdGlmKGRlY29tcG9zZSkge1xuXHRcdHJlcyA9IHRoaXMuZGVjb21wb3NlKGRhdGEpO1xuXHR9IGVsc2Uge1xuXHRcdHJlcyA9IGRhdGE7XG5cdH1cblxuXHQvLyAtLS1cblx0Ly8gcmVtb3ZlIElkIGZyb20gZ2F0ZXM/XG5cdC8vIC0tLVxuXHRpZihsaWdodHdlaWdodCkge1xuXHRcdGlmKHJlcy5nYXRlcykge1xuXHRcdFx0cmVzLmdhdGVzLm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdFx0aWYocm93KSB7XG5cdFx0XHRcdFx0cm93Lm1hcChmdW5jdGlvbihjZWxsKSB7XG5cdFx0XHRcdFx0XHRpZihjZWxsICYmIGNlbGwuaWQpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGNlbGwuaWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmKHJlcy5jdXN0b21HYXRlcykge1xuXHRcdFx0Zm9yKHZhciBjdXN0b21HYXRlTmFtZSBpbiByZXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSByZXMuY3VzdG9tR2F0ZXNbY3VzdG9tR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZihjdXN0b21HYXRlICYmIGN1c3RvbUdhdGUuZ2F0ZXMpIHtcblx0XHRcdFx0XHRjdXN0b21HYXRlLmdhdGVzLm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdFx0XHRcdGlmKHJvdykge1xuXHRcdFx0XHRcdFx0XHRyb3cubWFwKGZ1bmN0aW9uKGNlbGwpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihjZWxsICYmIGNlbGwuaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBjZWxsLmlkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gLS0tXG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24ob2JqKSB7XG5cdHRoaXMubnVtUXViaXRzID0gb2JqLm51bVF1Yml0cyB8fCAxO1xuXHR0aGlzLmNsZWFyKCk7XG5cdHRoaXMucGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmoucGFyYW1zIHx8IFtdKSk7XG5cdHRoaXMub3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLm9wdGlvbnMgfHwge30pKTtcblx0dGhpcy5nYXRlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLmdhdGVzIHx8IFtdKSk7XG5cdHRoaXMuY3VzdG9tR2F0ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iai5jdXN0b21HYXRlcyB8fCB7fSkpO1xuXHR0aGlzLmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmouY3JlZ3MgfHwge30pKTtcblx0Ly8gZGVmYXVsdCBvcHRpb25zXG5cdHRoaXMub3B0aW9ucy5wYXJhbXMgPSB0aGlzLm9wdGlvbnMucGFyYW1zIHx8IHt9O1xuXHR0aGlzLm9wdGlvbnMuaHlicmlkID0gdGhpcy5vcHRpb25zLmh5YnJpZCB8fCBmYWxzZTtcblx0aWYoIXRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zKSB7XG5cdFx0dGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRIeWJyaWRPcHRpb25zKCk7XG5cdH1cbn07XG5cblxudmFyIGdlbmVyYXRlR3JheUNvZGUgPSBmdW5jdGlvbihudW1CaXRzKSB7XG5cdGlmKG51bUJpdHMgPD0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZW5lcmF0ZSB0aGUgZ3JheSBjb2RlIGZvciBsZXNzIHRoYW4gMSBiaXQuXCIpO1xuXHR9XG5cblx0dmFyIHJlc3VsdCA9IFswXTtcblx0Zm9yKGkgPSAwOyBpIDwgbnVtQml0czsgaSsrKSB7XG5cdFx0dmFyIHJldmVyc2VkID0gW10uY29uY2F0KHJlc3VsdCkucmV2ZXJzZSgpO1xuXHRcdHJldmVyc2VkLm1hcChmdW5jdGlvbih4KSB7XG5cdFx0XHRyZXN1bHQucHVzaCh4ICsgbWF0aC5wb3coMiwgaSkpO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIGdyYXkgPSBbXTtcblx0cmVzdWx0Lm1hcChmdW5jdGlvbihkZWMpIHtcblx0XHRncmF5LnB1c2goYmluU3RyKGRlYywgbnVtQml0cykpO1xuXHR9KTtcblxuXHRyZXR1cm4gZ3JheTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdyYXlDb2RlQ2hhaW4gPSBmdW5jdGlvbihudW1DdHJsUXViaXRzLCBnYXRlTmFtZSwgZ2F0ZU9wdGlvbnMpIHtcblxuXHRmdW5jdGlvbiBjb21wYXJlU3RyaW5ncyhzMSwgczIpIHtcblx0XHR2YXIgY29tcCA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzMS5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29tcC5wdXNoKHMxW2ldICE9IHMyW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXA7XG5cdH1cblxuXHRmdW5jdGlvbiBpbmRpY2VzT2ZDaGFyKHMsIGNoKSB7XG5cdFx0dmFyIGluZGljZXMgPSBbXTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoc1tpXSA9PSBjaCkge1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goaSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBpbmRpY2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gY291bnRDaGFyKHMsIGNoKSB7XG5cdFx0dmFyIGNvdW50ID0gMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoc1tpXSA9PSBjaCkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY291bnQ7XG5cdH1cblxuXHR2YXIgcUNvbnRyb2xzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRxQ29udHJvbHMucHVzaChpKTtcblx0fVxuXG5cdHZhciBxVGFyZ2V0ID0gbnVtQ3RybFF1Yml0cztcblx0dmFyIGdyYXlDb2RlID0gZ2VuZXJhdGVHcmF5Q29kZShudW1DdHJsUXViaXRzKTtcblx0dmFyIGxhc3RQYXR0ZXJuID0gbnVsbDtcblxuXHR2YXIgcnVsZXMgPSBbXTtcblx0Z3JheUNvZGUubWFwKGZ1bmN0aW9uKHBhdHRlcm4pIHtcblx0XHR2YXIgbG1Qb3MgPSBwYXR0ZXJuLmluZGV4T2YoXCIxXCIpO1xuXHRcdGlmKGxtUG9zID49IDApIHtcblx0XHRcdGlmKCFsYXN0UGF0dGVybikge1xuXHRcdFx0XHRsYXN0UGF0dGVybiA9IHBhdHRlcm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBjb21wID0gY29tcGFyZVN0cmluZ3MocGF0dGVybiwgbGFzdFBhdHRlcm4pO1xuXHRcdFx0dmFyIHBvcyA9IGNvbXAuaW5kZXhPZih0cnVlKTtcblx0XHRcdGlmKHBvcyA+PSAwKSB7XG5cdFx0XHRcdGlmKHBvcyAhPSBsbVBvcykge1xuXHRcdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogXCJjeFwiLCB3aXJlczogWyBxQ29udHJvbHNbcG9zXSwgcUNvbnRyb2xzW2xtUG9zXSBdLCBvcHRpb25zOiBudWxsIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBpbmRpY2VzID0gaW5kaWNlc09mQ2hhcihwYXR0ZXJuLCBcIjFcIik7XG5cdFx0XHRcdFx0Zm9yKHZhciBpZHggPSAxOyBpZHggPCBpbmRpY2VzLmxlbmd0aDsgaWR4KyspIHtcblx0XHRcdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogXCJjeFwiLCB3aXJlczogWyBxQ29udHJvbHNbaW5kaWNlc1tpZHhdXSwgcUNvbnRyb2xzW2xtUG9zXSBdLCBvcHRpb25zOiBudWxsIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZighKGNvdW50Q2hhcihwYXR0ZXJuLCBcIjFcIikgJSAyKSkge1xuXHRcdFx0XHQvLyBpbnZlcnNlXG5cdFx0XHRcdC8vICEhIVxuXHRcdFx0XHQvLyBXYXJuaW5nIC0gdGhpcyB3b3JrcyBvbmx5IHdpdGggZ2F0ZSB3aGljaCBpcyBvd24gaW52ZXJzZVxuXHRcdFx0XHQvLyBUT0RPOiBpbXBsZW1lbnQgcHJvcGVyIGludmVyc2UgZm9yIGFsbCBnYXRlc1xuXHRcdFx0XHQvLyAhISFcblx0XHRcdFx0dmFyIGludmVyc2VPcHRpb25zID0gbnVsbDtcblx0XHRcdFx0aWYoZ2F0ZU9wdGlvbnMpIHtcblx0XHRcdFx0XHRpbnZlcnNlT3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZU9wdGlvbnMpKTtcblx0XHRcdFx0XHRpZihpbnZlcnNlT3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdGZvcihrZXkgaW4gaW52ZXJzZU9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB2YWwgPSBpbnZlcnNlT3B0aW9ucy5wYXJhbXNba2V5XTtcblx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIHZhbCA9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsID0gMCAtIHZhbDtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2YWwgPSBcIi0oXCIgKyB2YWwgKyBcIilcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpbnZlcnNlT3B0aW9ucy5wYXJhbXNba2V5XSA9IHZhbDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cnVsZXMucHVzaCh7IGdhdGVOYW1lOiBnYXRlTmFtZSwgd2lyZXM6IFsgcUNvbnRyb2xzW2xtUG9zXSwgcVRhcmdldCBdLCBvcHRpb25zOiBpbnZlcnNlT3B0aW9ucyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogZ2F0ZU5hbWUsIHdpcmVzOiBbIHFDb250cm9sc1tsbVBvc10sIHFUYXJnZXQgXSwgb3B0aW9uczogZ2F0ZU9wdGlvbnMgfSk7XG5cdFx0XHR9XG5cdFx0XHRsYXN0UGF0dGVybiA9IHBhdHRlcm47XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gcnVsZXM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5NQ1UxQ2lyY3VpdCA9IGZ1bmN0aW9uKGN0cmxRdWJpdHMpIHtcblx0dmFyIG51bUN0cmxRdWJpdHMgPSAwO1xuXHR2YXIgaW52ZXJ0Q29udHJvbHMgPSBbXTtcblx0aWYodHlwZW9mIGN0cmxRdWJpdHMgPT0gXCJudW1iZXJcIikge1xuXHRcdG51bUN0cmxRdWJpdHMgPSBjdHJsUXViaXRzO1xuXHR9IGVsc2Uge1xuXHRcdG51bUN0cmxRdWJpdHMgPSBjdHJsUXViaXRzLmxlbmd0aCB8fCAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKCFjdHJsUXViaXRzW2ldIHx8ICh0eXBlb2YgY3RybFF1Yml0c1tpXSA9PSBcIm51bWJlclwiICYmIGN0cmxRdWJpdHNbaV0gPCAwKSkge1xuXHRcdFx0XHRpbnZlcnRDb250cm9scy5wdXNoKGkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgbXVsdGktY29udHJvbGxlZCBnYXRlIHdpdGggemVybyBjb250cm9sIHF1Yml0cy5cIik7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRYKGNpcmN1aXQsIHdpcmVzKSB7XG5cdFx0d2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdGNpcmN1aXQuYXBwZW5kR2F0ZShcInhcIiwgd2lyZSk7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgc2NhbGVkTGFtYmRhID0gXCJsYW1iZGEgLyBcIiArIG1hdGgucG93KDIsIG51bUN0cmxRdWJpdHMgLSAxKTtcblx0dmFyIGdhdGVPcHRpb25zID0geyBwYXJhbXM6IHsgbGFtYmRhOiBzY2FsZWRMYW1iZGEgfSB9O1xuXG5cdHZhciBxYyA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMSkge1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRxYy5hcHBlbmRHYXRlKFwiY3UxXCIsIFswLCAxXSwgZ2F0ZU9wdGlvbnMpO1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRyZXR1cm4gcWM7XG5cdH1cblxuXHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdHZhciBydWxlcyA9IHRoaXMuZ3JheUNvZGVDaGFpbihudW1DdHJsUXViaXRzLCBcImN1MVwiLCBnYXRlT3B0aW9ucyk7XG5cdHJ1bGVzLm1hcChmdW5jdGlvbihydWxlKSB7XG5cdFx0cWMuYXBwZW5kR2F0ZShydWxlLmdhdGVOYW1lLCBydWxlLndpcmVzLCBydWxlLm9wdGlvbnMpO1xuXHR9KTtcblx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXG5cdHJldHVybiBxYztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLk1DWENpcmN1aXQgPSBmdW5jdGlvbihjdHJsUXViaXRzKSB7XG5cdHZhciBudW1DdHJsUXViaXRzID0gMDtcblx0dmFyIGludmVydENvbnRyb2xzID0gW107XG5cdGlmKHR5cGVvZiBjdHJsUXViaXRzID09IFwibnVtYmVyXCIpIHtcblx0XHRudW1DdHJsUXViaXRzID0gY3RybFF1Yml0cztcblx0fSBlbHNlIHtcblx0XHRudW1DdHJsUXViaXRzID0gY3RybFF1Yml0cy5sZW5ndGggfHwgMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZighY3RybFF1Yml0c1tpXSB8fCAodHlwZW9mIGN0cmxRdWJpdHNbaV0gPT0gXCJudW1iZXJcIiAmJiBjdHJsUXViaXRzW2ldIDwgMCkpIHtcblx0XHRcdFx0aW52ZXJ0Q29udHJvbHMucHVzaChpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgcWMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0aWYobnVtQ3RybFF1Yml0cyA9PSAwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBtdWx0aS1jb250cm9sbGVkIGdhdGUgd2l0aCB6ZXJvIGNvbnRyb2wgcXViaXRzLlwiKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFgoY2lyY3VpdCwgd2lyZXMpIHtcblx0XHR3aXJlcy5tYXAoZnVuY3Rpb24od2lyZSkge1xuXHRcdFx0Y2lyY3VpdC5hcHBlbmRHYXRlKFwieFwiLCB3aXJlKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMSkge1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRxYy5hcHBlbmRHYXRlKFwiY3hcIiwgWzAsIDFdKTtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cmV0dXJuIHFjO1xuXHR9XG5cblx0aWYobnVtQ3RybFF1Yml0cyA9PSAyKSB7XG5cdFx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRcdHFjLmFwcGVuZEdhdGUoXCJjY3hcIiwgWzAsIDEsIDJdKTtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cmV0dXJuIHFjO1xuXHR9XG5cblx0dmFyIG1jdTEgPSBxYy5NQ1UxQ2lyY3VpdChudW1DdHJsUXViaXRzKTtcblx0dmFyIG1jdTFuYW1lID0gXCJtY3UxX1wiICsgbnVtQ3RybFF1Yml0cztcblx0dmFyIG1jdTF3aXJlcyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0cyArIDE7IGkrKykge1xuXHRcdG1jdTF3aXJlcy5wdXNoKGkpO1xuXHR9XG5cblx0cWMucmVnaXN0ZXJHYXRlKG1jdTFuYW1lLCBtY3UxKTtcblx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRxYy5hcHBlbmRHYXRlKFwiaFwiLCBudW1DdHJsUXViaXRzKTtcblx0cWMuYXBwZW5kR2F0ZShtY3UxbmFtZSwgbWN1MXdpcmVzLCB7IHBhcmFtczogeyBsYW1iZGE6IFwicGlcIiB9fSk7XG5cdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0cWMuYXBwZW5kR2F0ZShcImhcIiwgbnVtQ3RybFF1Yml0cyk7XG5cblx0cmV0dXJuIHFjO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVnaXN0ZXJHYXRlID0gZnVuY3Rpb24obmFtZSwgb2JqKSB7XG5cdGlmKG9iaiBpbnN0YW5jZW9mIFF1YW50dW1DaXJjdWl0KSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlc1tuYW1lXSA9IG9iai5zYXZlKCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlc1tuYW1lXSA9IG9iajtcblx0fVxuXG5cdGlmKHRoaXMuaXNNdWx0aUNvbnRyb2xsZWRHYXRlKG5hbWUpKSB7XG5cdFx0dmFyIG1jSW5mbyA9IHRoaXMuZGVjb2RlTXVsdGlDb250cm9sbGVkR2F0ZU5hbWUobmFtZSk7XG5cdFx0aWYobWNJbmZvLm51bUN0cmxRdWJpdHMgIT0gdGhpcy5jdXN0b21HYXRlc1tuYW1lXS5udW1RdWJpdHMgLSAxKSB7XG5cdFx0XHRtY0luZm8ubnVtQ3RybFF1Yml0cyA9IHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0ubnVtUXViaXRzIC0gMTtcblx0XHRcdHZhciBjdHJsUXViaXRzID0gW107XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbWNJbmZvLm51bUN0cmxRdWJpdHM7IGkrKykge1xuXHRcdFx0XHRjdHJsUXViaXRzLnB1c2godHlwZW9mIG1jSW5mby5jdHJsUXViaXRzW2ldID09IFwidW5kZWZpbmVkXCIgPyB0cnVlIDogbWNJbmZvLmN0cmxRdWJpdHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0bWNJbmZvLmN0cmxRdWJpdHMgPSBjdHJsUXViaXRzO1xuXHRcdH1cblxuXHRcdHZhciByb290R2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1ttY0luZm8ucm9vdE5hbWVdO1xuXHRcdGlmKHJvb3RHYXRlICYmIHJvb3RHYXRlLmRyYXdpbmdJbmZvICYmIHJvb3RHYXRlLmRyYXdpbmdJbmZvLmNvbm5lY3RvcnMpIHtcblx0XHRcdGlmKCF0aGlzLmN1c3RvbUdhdGVzW25hbWVdLmRyYXdpbmdJbmZvKSB7XG5cdFx0XHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0uZHJhd2luZ0luZm8gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGNvbm5lY3RvcnMgPSBbXTtcblx0XHRcdG1jSW5mby5jdHJsUXViaXRzLm1hcChmdW5jdGlvbihjdHJsUXViaXQpIHtcblx0XHRcdFx0aWYoY3RybFF1Yml0KSB7XG5cdFx0XHRcdFx0Y29ubmVjdG9ycy5wdXNoKFwiZG90XCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbm5lY3RvcnMucHVzaChcIm5kb3RcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29ubmVjdG9ycy5wdXNoKHJvb3RHYXRlLmRyYXdpbmdJbmZvLmNvbm5lY3RvcnNbcm9vdEdhdGUuZHJhd2luZ0luZm8uY29ubmVjdG9ycy5sZW5ndGggLSAxXSk7XG5cblx0XHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0uZHJhd2luZ0luZm8uY29ubmVjdG9ycyA9IGNvbm5lY3RvcnM7XG5cdFx0XHR0aGlzLmN1c3RvbUdhdGVzW25hbWVdLmRyYXdpbmdJbmZvLnJvb3QgPSByb290R2F0ZS5kcmF3aW5nSW5mby5yb290O1xuXHRcdH1cblx0fVxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVnaXN0ZXJNQ1hHYXRlID0gZnVuY3Rpb24oY3RybFF1Yml0cykge1xuXHR2YXIgZ2F0ZU5hbWUgPSB0aGlzLm11bHRpQ29udHJvbGxlZEdhdGVOYW1lKFwibWN4XCIsIGN0cmxRdWJpdHMpO1xuXHR0aGlzLnJlZ2lzdGVyR2F0ZShnYXRlTmFtZSwgdGhpcy5NQ1hDaXJjdWl0KGN0cmxRdWJpdHMpLnNhdmUodHJ1ZSkpO1xuXHRyZXR1cm4gZ2F0ZU5hbWU7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZWdpc3Rlck1DVTFHYXRlID0gZnVuY3Rpb24oY3RybFF1Yml0cykge1xuXHR2YXIgZ2F0ZU5hbWUgPSB0aGlzLm11bHRpQ29udHJvbGxlZEdhdGVOYW1lKFwibWN1MVwiLCBjdHJsUXViaXRzKTtcblx0dGhpcy5yZWdpc3RlckdhdGUoZ2F0ZU5hbWUsIHRoaXMuTUNVMUNpcmN1aXQoY3RybFF1Yml0cykuc2F2ZSh0cnVlKSk7XG5cdHJldHVybiBnYXRlTmFtZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlZ2lzdGVyTXVsdGlDb250cm9sbGVkR2F0ZSA9IGZ1bmN0aW9uKHJvb3ROYW1lLCBjdHJsUXViaXRzKSB7XG5cdHN3aXRjaChyb290TmFtZSkge1xuXHRcdGNhc2UgXCJjeFwiOiByZXR1cm4gdGhpcy5yZWdpc3Rlck1DWEdhdGUoY3RybFF1Yml0cyk7IGJyZWFrO1xuXHRcdGNhc2UgXCJjdTFcIjogcmV0dXJuIHRoaXMucmVnaXN0ZXJNQ1UxR2F0ZShjdHJsUXViaXRzKTsgYnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gXCJcIjtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRPclJlZ2lzdGVyTXVsdGlDb250cm9sbGVkRXF1aXZhbGVudCA9IGZ1bmN0aW9uKGdhdGVOYW1lLCBpbnZlcnNlQ29udHJvbCkge1xuXHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdGlmKGdhdGVEZWYpIHtcblx0XHRpZihnYXRlRGVmLmRyYXdpbmdJbmZvKSB7XG5cdFx0XHQvLyBCYXNpYyBnYXRlIHdpdGggbXVsdGktY29udHJvbGxlZC9pbnZlcnNlIGNvbnRyb2xsZWQgaW1wbGVtZW50YXRpb25cblx0XHRcdGlmKGdhdGVOYW1lID09IFwieFwiIHx8IGdhdGVOYW1lID09IFwidTFcIiB8fCBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gXCJ4XCIgfHwgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IFwidTFcIikge1xuXHRcdFx0XHRpZighdGhpcy5iYXNpY0dhdGVzW1wiY1wiICsgZ2F0ZU5hbWVdIHx8IGludmVyc2VDb250cm9sKSB7XG5cdFx0XHRcdFx0Ly8gY3JlYXRlIG11bHRpIGNvbnRyb2xsZWQgdmVyc2lvbiBhbmQgcmV0dXJuIGl0cyBuYW1lXG5cdFx0XHRcdFx0dmFyIHJvb3ROYW1lID0gXCJjXCIgKyAoZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290IHx8IGdhdGVOYW1lKTtcblx0XHRcdFx0XHR2YXIgbnVtQ3RybFF1Yml0cyA9IG1hdGgubG9nMihnYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXHRcdFx0XHRcdHZhciBjdHJsUXViaXRzID0gW107XG5cdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUN0cmxRdWJpdHMgLSAxOyBpKyspIHtcblx0XHRcdFx0XHRcdGN0cmxRdWJpdHMucHVzaCh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3RybFF1Yml0cy51bnNoaWZ0KCFpbnZlcnNlQ29udHJvbCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZWdpc3Rlck11bHRpQ29udHJvbGxlZEdhdGUocm9vdE5hbWUsIGN0cmxRdWJpdHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHRoZXJlIGlzIGJhc2ljIGdhdGUgd2l0aCBhZGRpdGlvbmFsIGNvbnRyb2xcblx0XHRcdFx0XHRyZXR1cm4gXCJjXCIgKyBnYXRlTmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEJhc2ljIGdhdGUgZm9yIHdoaWNoIHdlIGRvbid0IGhhdmUgbXVsdGktY29udHJvbGxlZCBvciBpbnZlcnNlIGNvbnRyb2xsZWQgaW1wbGVtZW50YXRpb25cblx0XHQvLyBidXQgbWF5YmUgd2UgaGF2ZSBiYXNpYyBnYXRlIHdpdGggYWRkaXRpb25hbCBjb250cm9sXG5cdFx0Zm9yKHZhciBnbiBpbiB0aGlzLmJhc2ljR2F0ZXMpIHtcblx0XHRcdHZhciB0bXBHYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2duXTtcblx0XHRcdGlmKHRtcEdhdGVEZWYgJiYgdG1wR2F0ZURlZi5kcmF3aW5nSW5mbyAmJiB0bXBHYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgJiYgdG1wR2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdGlmKCFpbnZlcnNlQ29udHJvbCkge1xuXHRcdFx0XHRcdC8vIHRoZXJlIGlzIGJhc2ljIGdhdGUgd2l0aCBhZGRpdGlvbmFsIGNvbnRyb2xcblx0XHRcdFx0XHRyZXR1cm4gZ247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRpZih0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXSkge1xuXHRcdHZhciBtY0luZm8gPSB0aGlzLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lKGdhdGVOYW1lKTtcblx0XHRpZighbWNJbmZvIHx8ICFtY0luZm8ubnVtQ3RybFF1Yml0cykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYobWNJbmZvLnJvb3ROYW1lID09IFwiY3hcIiB8fCBtY0luZm8ucm9vdE5hbWUgPT0gXCJjdTFcIikge1xuXHRcdFx0Ly8gY3JlYXRlIG11bHRpIGNvbnRyb2xsZWQgdmVyc2lvbiBhbmQgcmV0dXJuIGl0cyBuYW1lXG5cdFx0XHRtY0luZm8uY3RybFF1Yml0cy51bnNoaWZ0KCFpbnZlcnNlQ29udHJvbCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZWdpc3Rlck11bHRpQ29udHJvbGxlZEdhdGUobWNJbmZvLnJvb3ROYW1lLCBtY0luZm8uY3RybFF1Yml0cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZVVudXNlZE11bHRpQ29udHJvbGxlZEdhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHMgPSB0aGlzLmNvdW50T3BzKG51bGwsIHsgc2hhbGxvdzogZmFsc2UgfSk7XG5cblx0Zm9yKGdhdGVOYW1lIGluIHRoaXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRpZighb3BzW2dhdGVOYW1lXSkge1xuXHRcdFx0aWYodGhpcy5pc011bHRpQ29udHJvbGxlZEdhdGUoZ2F0ZU5hbWUpKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lID0gZnVuY3Rpb24oZ2F0ZU5hbWUpIHtcblx0aWYoIWdhdGVOYW1lKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgbWNJbmZvID0ge307XG5cdHZhciBzcGxpdHRlZCA9IGdhdGVOYW1lLnNwbGl0KFwiX1wiKTtcblxuXHQvLyBuYW1lXG5cdGlmKHNwbGl0dGVkLmxlbmd0aCA+IDApIHtcblx0XHRtY0luZm8ubmFtZSA9IHNwbGl0dGVkWzBdO1xuXHRcdG1jSW5mby5yb290TmFtZSA9IG1jSW5mby5uYW1lLnN1YnN0cmluZygxKTtcblx0fVxuXG5cdC8vIG51bUN0cmxRdWJpdHNcblx0aWYoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xuXHRcdHZhciBudW1DdHJsUXViaXRzID0gcGFyc2VJbnQoc3BsaXR0ZWRbMV0pO1xuXHRcdGlmKCFpc05hTihudW1DdHJsUXViaXRzKSkge1xuXHRcdFx0bWNJbmZvLm51bUN0cmxRdWJpdHMgPSBudW1DdHJsUXViaXRzO1xuXHRcdH1cblx0fVxuXG5cdC8vIGN0cmxRdWJpdHNcblx0aWYobWNJbmZvLm51bUN0cmxRdWJpdHMpIHtcblx0XHR2YXIgY3RybFF1Yml0cyA9IFtdO1xuXHRcdGlmKHNwbGl0dGVkLmxlbmd0aCA+IDIpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzcGxpdHRlZFsyXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihzcGxpdHRlZFsyXVtpXSA9PSBcIjBcIikge1xuXHRcdFx0XHRcdGN0cmxRdWJpdHMucHVzaChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoc3BsaXR0ZWRbMl1baV0gPT0gXCIxXCIpIHtcblx0XHRcdFx0XHRjdHJsUXViaXRzLnB1c2godHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZighY3RybFF1Yml0cy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRcdFx0Y3RybFF1Yml0cy5wdXNoKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRtY0luZm8uY3RybFF1Yml0cyA9IGN0cmxRdWJpdHM7XG5cdH1cblxuXHRyZXR1cm4gbWNJbmZvO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubXVsdGlDb250cm9sbGVkR2F0ZU5hbWUgPSBmdW5jdGlvbihuYW1lUHJlZml4LCBjdHJsUXViaXRzKSB7XG5cdHZhciBnYXRlTmFtZSA9IG5hbWVQcmVmaXggKyBcIl9cIjtcblx0aWYodHlwZW9mIGN0cmxRdWJpdHMgPT0gXCJudW1iZXJcIikge1xuXHRcdGdhdGVOYW1lICs9IGN0cmxRdWJpdHM7XG5cdH0gZWxzZSB7XG5cdFx0Z2F0ZU5hbWUgKz0gKGN0cmxRdWJpdHMubGVuZ3RoIHx8IDApO1xuXG5cdFx0dmFyIHdpcmVzID0gXCJcIjtcblx0XHRjdHJsUXViaXRzLm1hcChmdW5jdGlvbih3aXJlKSB7XG5cdFx0XHRpZighd2lyZSB8fCAodHlwZW9mIHdpcmUgPT0gXCJudW1iZXJcIiAmJiB3aXJlIDwgMCkpIHtcblx0XHRcdFx0d2lyZXMgKz0gXCIwXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aXJlcyArPSBcIjFcIjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZih3aXJlcy5pbmRleE9mKFwiMFwiKSA8IDApIHtcblx0XHRcdHdpcmVzID0gXCJcIjtcblx0XHR9XG5cdFx0aWYod2lyZXMpIHtcblx0XHRcdGdhdGVOYW1lICs9IFwiX1wiICsgd2lyZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBnYXRlTmFtZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzTXVsdGlDb250cm9sbGVkR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lKSB7XG5cdHZhciBtY0luZm8gPSB0aGlzLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lKGdhdGVOYW1lKTtcblx0cmV0dXJuICEhdGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV0gJiYgISFtY0luZm8gJiYgISFtY0luZm8ubnVtQ3RybFF1Yml0cztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzQ29udHJvbGxhYmxlR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lKSB7XG5cdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0aWYoZ2F0ZURlZikge1xuXHRcdGlmKGdhdGVEZWYuZHJhd2luZ0luZm8pIHtcblx0XHRcdGlmKGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCA9PSBcInhcIiB8fCBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gXCJ1MVwiKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IodmFyIGduIGluIHRoaXMuYmFzaWNHYXRlcykge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ25dO1xuXHRcdFx0aWYoZ2F0ZURlZiAmJiBnYXRlRGVmLmRyYXdpbmdJbmZvICYmIGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCAmJiBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXMuaXNNdWx0aUNvbnRyb2xsZWRHYXRlKGdhdGVOYW1lKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlUG9zQnlJZCA9IGZ1bmN0aW9uKGdhdGVJZCkge1xuXHR2YXIgY2lyY3VpdCA9IHRoaXM7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuaWQgPT0gZ2F0ZUlkKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0d2lyZXM6IGdhdGUud2lyZXMsXG5cdFx0XHRcdFx0Y29sOiBjb2x1bW5cblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHdpcmVzOiBbXSxcblx0XHRjb2w6IC0xXG5cdH07XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZUJ5SWQgPSBmdW5jdGlvbihnYXRlSWQpIHtcblx0dmFyIGNpcmN1aXQgPSB0aGlzO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmlkID09IGdhdGVJZCkge1xuXHRcdFx0XHRyZXR1cm4gZ2F0ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdhdGVCZWZvcmUgPSBmdW5jdGlvbihjb2x1bW4sIHdpcmUpIHtcblx0dmFyIGdhdGUgPSBudWxsO1xuXHR2YXIgY29sID0gY29sdW1uIC0gMTtcblx0d2hpbGUoY29sID49IDAgJiYgIWdhdGUpIHtcblx0XHRnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sLCB3aXJlKTtcblx0XHRjb2wtLTtcblx0fVxuXHRyZXR1cm4gZ2F0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlQXQgPSBmdW5jdGlvbihjb2x1bW4sIHdpcmUpIHtcblx0aWYoIXRoaXMuZ2F0ZXNbd2lyZV0gfHwgIXRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIGdhdGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSkpO1xuXHRpZighZ2F0ZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2F0ZS5jb2x1bW4gPSBjb2x1bW47XG5cdGdhdGUud2lyZXMgPSBbXTtcblxuXHR2YXIgaWQgPSBnYXRlLmlkO1xuXHR2YXIgbnVtV2lyZXMgPSB0aGlzLmdhdGVzLmxlbmd0aDtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IG51bVdpcmVzOyB3aXJlKyspIHtcblx0XHR2YXIgZyA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRpZihnICYmIGcuaWQgPT0gaWQpIHtcblx0XHRcdGdhdGUud2lyZXNbZy5jb25uZWN0b3JdID0gd2lyZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdhdGU7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZXNBdENvbHVtbiA9IGZ1bmN0aW9uKGNvbHVtbikge1xuXHR2YXIgZ2F0ZXMgPSBbXTtcblx0dmFyIG51bVdpcmVzID0gdGhpcy5nYXRlcy5sZW5ndGg7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBudW1XaXJlczsgd2lyZSsrKSB7XG5cdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0Z2F0ZXMucHVzaChnYXRlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdhdGVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENvbnRyb2xsYWJsZUdhdGVzQXRDb2x1bW4gPSBmdW5jdGlvbihjb2x1bW4pIHtcblx0dmFyIGdhdGVzID0gdGhpcy5nZXRHYXRlc0F0Q29sdW1uKGNvbHVtbik7XG5cdHZhciBjb250cm9sbGFibGVHYXRlcyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgZ2F0ZSA9IGdhdGVzW2ldO1xuXHRcdGlmKHRoaXMuaXNDb250cm9sbGFibGVHYXRlKGdhdGUubmFtZSkpIHtcblx0XHRcdGNvbnRyb2xsYWJsZUdhdGVzLnB1c2goZ2F0ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb250cm9sbGFibGVHYXRlcztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydEphdmFTY3JpcHQgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIGFzSnVweXRlcikge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXG5cdC8vIGRlY29tcG9zZVxuXHRpZihkZWNvbXBvc2UpIHtcblx0XHRjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2lyY3VpdCA9IHRoaXM7XG5cdH1cblxuXHR2YXIganMgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAyICYmIGNsaW5lWzBdICE9IFwiL1wiICYmIGNsaW5lWzFdICE9IFwiL1wiKSB7XG5cdFx0XHRcdGpzICs9IFwiLy8gXCI7XG5cdFx0XHR9XG5cdFx0XHRqcyArPSBjbGluZTtcblx0XHRcdGpzICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgaW5kZW50ID0gXCJcIjtcblx0dmFyIGNpcmN1aXRWYXIgPSBcIlwiO1xuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpbmRlbnQgPSBcIiAgICBcIjtcblx0XHRjaXJjdWl0VmFyID0gXCJjaXJjXCI7XG5cblx0XHRqcyArPSBcImNvbnN0IFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIFwiID0gZnVuY3Rpb24oKSB7XFxuXCI7XG5cblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnN0IFwiICsgY2lyY3VpdFZhciArIFwiID0gbmV3IFF1YW50dW1DaXJjdWl0KFwiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIik7XFxuXFxuXCI7XG5cdFx0aWYoY2lyY3VpdC5wYXJhbXMgJiYgY2lyY3VpdC5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIucGFyYW1zID0gXCIgKyBKU09OLnN0cmluZ2lmeShjaXJjdWl0LnBhcmFtcykgKyBcIlxcblxcblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpbmRlbnQgPSBcIlwiO1xuXHRcdGNpcmN1aXRWYXIgPSBcImNpcmN1aXRcIjtcblxuXHRcdGpzICs9IGluZGVudCArIFwiY29uc3QgUXVhbnR1bUNpcmN1aXQgPSByZXF1aXJlKFxcXCJxdWFudHVtLWNpcmN1aXRcXFwiKTtcXG5cXG5cIjtcblxuXHRcdGpzICs9IGluZGVudCArIFwiY29uc3QgXCIgKyBjaXJjdWl0VmFyICsgXCIgPSBuZXcgUXVhbnR1bUNpcmN1aXQoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiKTtcXG5cXG5cIjtcblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHZhciBjdXN0b21HYXRlc0FkZGVkID0gW107XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0anMgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRKYXZhU2NyaXB0KFwiXCIsIHRydWUsIHVzZWRHYXRlTmFtZSk7XG5cdFx0XHRcdFx0XHRjdXN0b21HYXRlc0FkZGVkLnB1c2godXNlZEdhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRjdXN0b21HYXRlc0FkZGVkLm1hcChmdW5jdGlvbihjdXN0b21HYXRlTmFtZSkge1xuXHRcdFx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIucmVnaXN0ZXJHYXRlKFxcXCJcIiArIGN1c3RvbUdhdGVOYW1lICsgXCJcXFwiLCBcIiArIGN1c3RvbUdhdGVOYW1lICsgXCIoKSk7XFxuXCI7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYoY3VzdG9tR2F0ZXNBZGRlZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGpzICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIGNyZWdDb3VudCA9IDA7XG5cdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5jcmVhdGVDcmVnKFxcXCJcIiArIGNyZWdOYW1lICsgXCJcXFwiLCBcIiArICh0aGlzLmNyZWdzW2NyZWdOYW1lXS5sZW5ndGggfHwgMSkgKyBcIik7XFxuXCI7XG5cdFx0Y3JlZ0NvdW50Kys7XG5cdH1cblx0aWYoY3JlZ0NvdW50ID4gMCkge1xuXHRcdGpzICs9IFwiXFxuXCI7XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cblx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLmFkZE1lYXN1cmUoXCIgKyB3aXJlICsgXCIsIFxcXCJcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIlxcXCIsIFwiICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCIpO1xcblwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5hcHBlbmRHYXRlKFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIlwiO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZS53aXJlcy5sZW5ndGggPT0gMSkge1xuXHRcdFx0XHRcdFx0anMgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0anMgKz0gZ2F0ZS53aXJlc1swXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0anMgKz0gXCIsIFtcIjtcblx0XHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKHcgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0anMgKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0anMgKz0gZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGpzICs9IFwiXVwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHRcdFx0dmFyIG9wdCA9IHt9O1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBvcHRLZXkgaW4gZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9uc1tvcHRLZXldKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9iaiA9IGdhdGUub3B0aW9uc1tvcHRLZXldO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBza2lwID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIG9iaiA9PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRza2lwID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZighc2tpcCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3B0W29wdEtleV0gPSBvYmo7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRqcyArPSBcIiwgXCIgKyBKU09OLnN0cmluZ2lmeShvcHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRqcyArPSBcIik7XFxuXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRqcyArPSBcIlxcblwiO1xuXHRcdGpzICs9IGluZGVudCArIFwicmV0dXJuIFwiICsgY2lyY3VpdFZhciArIFwiO1xcblwiO1xuXHRcdGpzICs9IFwifTtcXG5cXG5cIjtcblx0fSBlbHNlIHtcblx0XHRqcyArPSBcIlxcblwiO1xuXG5cdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLnJ1bigpO1xcblxcblwiO1xuXG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhcXFwiUHJvYmFiaWxpdGllczpcXFwiKTtcXG5cIjtcblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGNpcmN1aXQucHJvYmFiaWxpdGllcygpKSk7XFxuXFxuXCI7XG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhcXFwiTWVhc3VyZSBhbGw6XFxcIik7XFxuXCI7XG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShjaXJjdWl0Lm1lYXN1cmVBbGwoKSkpO1xcblxcblwiO1xuXHRcdGlmKGNpcmN1aXQuY3JlZ0NvdW50KCkpIHtcblx0XHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coXFxcIkNsYXNzaWNhbCByZWdpc3RlcnM6XFxcIik7XFxuXCI7XG5cdFx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKGNpcmN1aXQuY3JlZ3NBc1N0cmluZygpKTtcXG5cXG5cIjtcblx0XHR9XG5cdH1cblxuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdFwibWV0YWRhdGFcIjoge1xuXHRcdFx0XHRcImtlcm5lbHNwZWNcIjoge1xuXHRcdFx0XHRcdFwiZGlzcGxheV9uYW1lXCI6IFwiSmF2YXNjcmlwdCAoTm9kZS5qcylcIixcblx0XHRcdFx0XHRcImxhbmd1YWdlXCI6IFwiamF2YXNjcmlwdFwiLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcImphdmFzY3JpcHRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImxhbmd1YWdlX2luZm9cIjoge1xuXHRcdFx0XHRcdFwiZmlsZV9leHRlbnNpb25cIjogXCIuanNcIixcblx0XHRcdFx0XHRcIm1pbWV0eXBlXCI6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcImphdmFzY3JpcHRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZToganMsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4ganM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRaXNraXQgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIHByb3ZpZGVyTmFtZSwgYmFja2VuZE5hbWUsIGFzSnVweXRlciwgc2hvdHMsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlLCBoeWJyaWQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdHByb3ZpZGVyTmFtZTogcHJvdmlkZXJOYW1lLFxuXHRcdGJhY2tlbmROYW1lOiBiYWNrZW5kTmFtZSxcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0aHlicmlkOiBoeWJyaWRcblx0fTtcblx0XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUWlza2l0KG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlKVxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UXVFU1QgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIGRlZmluZWRGdW5jKSB7XG5cdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2Vcblx0fTtcblxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1F1RVNUKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGRlZmluZWRGdW5jKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFFBU00gPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgY29tcGF0aWJpbGl0eU1vZGUsIGluc2lkZVN1Ym1vZHVsZSkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdGNvbXBhdGliaWxpdHlNb2RlOiBjb21wYXRpYmlsaXR5TW9kZVxuXHR9O1xuXHRcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9RQVNNKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlKVx0XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbXBvcnRRQVNNID0gZnVuY3Rpb24oaW5wdXQsIGVycm9yQ2FsbGJhY2ssIGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdHRoaXMuaW5pdCgpO1xuXHRRQVNNSW1wb3J0KHRoaXMsIGlucHV0LCBlcnJvckNhbGxiYWNrLCBjb21wYXRpYmlsaXR5TW9kZSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRQeXF1aWwgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGxhdHRpY2UsIGFzUVZNLCBhc0p1cHl0ZXIsIHNob3RzLCBoeWJyaWQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGxhdHRpY2U6IGxhdHRpY2UsXG5cdFx0YXNRVk06IGFzUVZNLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRoeWJyaWQ6IGh5YnJpZFxuXHR9O1xuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1B5cXVpbChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFF1aWwgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyXG5cdH07XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9RdWlsKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW1wb3J0UXVpbCA9IGZ1bmN0aW9uKHF1aWwsIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMsIHF1Yml0TmFtZXMsIHJlbmFtZWRHYXRlcywgbGluZU9mZnNldCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0c2VsZi5pbml0KCk7XG5cblx0cmVuYW1lZEdhdGVzID0gcmVuYW1lZEdhdGVzIHx8IHt9O1xuXHRsaW5lT2Zmc2V0ID0gbGluZU9mZnNldCB8fCAwO1xuXG5cdGZ1bmN0aW9uIGdldEdhdGVJbmZvKGdhdGVOYW1lKSB7XG5cdFx0aWYoc2VsZi5jdXN0b21HYXRlcyAmJiBzZWxmLmN1c3RvbUdhdGVzW2dhdGVOYW1lXSkge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogZ2F0ZU5hbWUsIGN1c3RvbUdhdGU6IHNlbGYuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdIH07XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBnbmFtZSBpbiBzZWxmLmJhc2ljR2F0ZXMpIHtcblx0XHRcdHZhciBnZGVmID0gc2VsZi5iYXNpY0dhdGVzW2duYW1lXTtcblx0XHRcdGlmKGdkZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRpZihnZGVmLmV4cG9ydEluZm8ucXVpbCAmJiBnZGVmLmV4cG9ydEluZm8ucXVpbC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZ25hbWUsIGdhdGVEZWY6IGdkZWYsIHF1aWxEZWY6IGdkZWYuZXhwb3J0SW5mby5xdWlsIH07XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZ2RlZi5leHBvcnRJbmZvLnB5cXVpbCAmJiBnZGVmLmV4cG9ydEluZm8ucHlxdWlsLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBnbmFtZSwgZ2F0ZURlZjogZ2RlZiwgcXVpbERlZjogZ2RlZi5leHBvcnRJbmZvLnB5cXVpbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXG5cdHZhciBsaW5lcyA9IHF1aWwuc3BsaXQoXCJcXG5cIik7XG5cblx0dmFyIGNvbW1hbmRzID0gW107XG5cdHZhciBtdWx0aWxpbmUgPSBmYWxzZTtcblx0bGluZXMubWFwKGZ1bmN0aW9uKGxpbmUsIGxpbmVJbmRleCkge1xuXHRcdC8vIHJlbW92ZSBjb21tZW50c1xuXHRcdGxpbmUgPSBsaW5lLnNwbGl0KFwiI1wiKVswXTtcblxuXHRcdGlmKCFsaW5lLmxlbmd0aCkge1xuXHRcdFx0bXVsdGlsaW5lID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXNcblx0XHRcdGxpbmUgPSBsaW5lLnRyaW0oKTtcblx0XHR9XG5cblx0XHRpZighbXVsdGlsaW5lKSB7XG5cdFx0XHRpZihsaW5lLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgY2xpbmVzID0gbGluZS5zcGxpdChcIjtcIik7XG5cdFx0XHRcdHZhciBjb2RlbGluZXMgPSBbXTtcblx0XHRcdFx0Y2xpbmVzLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0XHRcdGlmKGNsaW5lLnRyaW0oKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvZGVsaW5lcy5wdXNoKGNsaW5lLnRyaW0oKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjb2RlbGluZXMubWFwKGZ1bmN0aW9uKGNvZGVsaW5lKSB7XG5cblx0XHRcdFx0XHR2YXIgdG9rZW5zID0gY29kZWxpbmUuc3BsaXQoXCIgXCIpO1xuXHRcdFx0XHRcdHZhciBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdGlmKGxhc3RUb2tlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGlmKGxhc3RUb2tlbltsYXN0VG9rZW4ubGVuZ3RoIC0gMV0gPT0gXCI6XCIpIHtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIFwiOlwiXG5cdFx0XHRcdFx0XHRcdGxhc3RUb2tlbiA9IGxhc3RUb2tlbi5zdWJzdHJpbmcoMCwgbGFzdFRva2VuLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdFx0XHR0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdID0gbGFzdFRva2VuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZih0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0eXBlID0gXCJHQVRFXCI7XG5cdFx0XHRcdFx0XHRcdGlmKHRva2Vuc1swXSA9PSBcIkRFRkdBVEVcIiB8fCB0b2tlbnNbMF0gPT0gXCJERUZDSVJDVUlUXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlID0gdG9rZW5zWzBdO1xuXHRcdFx0XHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoMCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgbmFtZSA9IHRva2Vucy5qb2luKFwiIFwiKTtcblxuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gW107XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbVN0YXJ0ID0gbmFtZS5pbmRleE9mKFwiKFwiKTtcblx0XHRcdFx0XHRcdFx0aWYocGFyYW1TdGFydCA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtRW5kID0gbmFtZS5pbmRleE9mKFwiKVwiKTtcblx0XHRcdFx0XHRcdFx0XHRpZihwYXJhbUVuZCA+IHBhcmFtU3RhcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcyA9IG5hbWUuc3Vic3RyaW5nKHBhcmFtU3RhcnQgKyAxLCBwYXJhbUVuZCkuc3BsaXQoXCIsXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXIsIG5keCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXIgPSBwYXIudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZShwYXIubGVuZ3RoICYmIHBhclswXSA9PSBcIiVcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhciA9IHBhci5zbGljZSgxKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXNbbmR4XSA9IHBhcjtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZigocGFyYW1FbmQgKyAxKSA8PSBuYW1lLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b2sgPSBuYW1lLnN1YnN0cmluZyhwYXJhbUVuZCArIDEsIG5hbWUubGVuZ3RoKS5zcGxpdChcIiBcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dG9rZW5zID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRvay5tYXAoZnVuY3Rpb24odGspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ayA9IHRrLnRyaW0oKTsgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYodGsubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b2tlbnMucHVzaCh0ayk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRva2VucyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgcGFyYW1TdGFydCkudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gdG9rZW5zLnNwbGljZSgwLCAxKVswXS50cmltKCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgYXJncyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHRva2VuID0gdG9rZW5zW3RdO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHF1Yml0TmFtZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBxaW5kZXggPSBxdWJpdE5hbWVzLmluZGV4T2YodG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocWluZGV4ID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKHFpbmRleCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2godG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2godG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmRzLnB1c2goeyB0eXBlOiB0eXBlLCBuYW1lOiBuYW1lLCBwYXJhbXM6IHBhcmFtcywgYXJnczogYXJncywgYm9keTogW10sIGxpbmU6IGxpbmVJbmRleCwgY29sOiAwIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBjb2RlbGluZXMgPSBsaW5lLnNwbGl0KFwiO1wiKTtcblx0XHRcdGNvZGVsaW5lcy5tYXAoZnVuY3Rpb24oY29kZWxpbmUpIHtcblx0XHRcdFx0aWYoY29kZWxpbmUudHJpbSgpLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbW1hbmRzW2NvbW1hbmRzLmxlbmd0aCAtIDFdLmJvZHkucHVzaChjb2RlbGluZS50cmltKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHZhciBjb21tYW5kQ291bnQgPSBjb21tYW5kcy5sZW5ndGg7XG5cdGZvcih2YXIgY29tbWFuZEluZGV4ID0gMDsgY29tbWFuZEluZGV4IDwgY29tbWFuZENvdW50OyBjb21tYW5kSW5kZXgrKykge1xuXHRcdHZhciBjb21tYW5kID0gY29tbWFuZHNbY29tbWFuZEluZGV4XTtcblxuXHRcdGlmKHJlbmFtZWRHYXRlc1tjb21tYW5kLm5hbWVdKSB7XG5cdFx0XHRjb21tYW5kLm5hbWUgPSByZW5hbWVkR2F0ZXNbY29tbWFuZC5uYW1lXTtcblx0XHR9XG5cblx0XHRzd2l0Y2goY29tbWFuZC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiREVGR0FURVwiOiB7XG5cdFx0XHRcdGlmKGNvbW1hbmQubmFtZSA9PSBjb21tYW5kLm5hbWUudG9VcHBlckNhc2UoKSkge1xuXHRcdFx0XHRcdHZhciBuZXdOYW1lID0gY29tbWFuZC5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0cmVuYW1lZEdhdGVzW2NvbW1hbmQubmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0XHRcdGNvbW1hbmQubmFtZSA9IG5ld05hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBOT1QgSU1QTEVNRU5URUQgWUVUICEhIVxuXG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Y2FzZSBcIkRFRkNJUkNVSVRcIjoge1xuXHRcdFx0XHRpZihjb21tYW5kLm5hbWUgPT0gY29tbWFuZC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcblx0XHRcdFx0XHR2YXIgbmV3TmFtZSA9IGNvbW1hbmQubmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHJlbmFtZWRHYXRlc1tjb21tYW5kLm5hbWVdID0gbmV3TmFtZTtcblx0XHRcdFx0XHRjb21tYW5kLm5hbWUgPSBuZXdOYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHN1YlF1aWwgPSBjb21tYW5kLmJvZHkuam9pbihcIlxcblwiKTtcblx0XHRcdFx0dmFyIHN1YlF1Yml0TmFtZXMgPSBjb21tYW5kLmFyZ3M7XG5cdFx0XHRcdHZhciBzdWJDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cblx0XHRcdFx0c3ViQ2lyY3VpdC5pbXBvcnRRdWlsKHN1YlF1aWwsIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMsIHN1YlF1Yml0TmFtZXMsIHJlbmFtZWRHYXRlcywgY29tbWFuZC5saW5lICsgMSk7XG5cblx0XHRcdFx0c3ViQ2lyY3VpdC5wYXJhbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbW1hbmQucGFyYW1zKSk7XG5cblx0XHRcdFx0c2VsZi5yZWdpc3RlckdhdGUoY29tbWFuZC5uYW1lLCBzdWJDaXJjdWl0LnNhdmUoKSk7XG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Y2FzZSBcIkdBVEVcIjoge1xuXHRcdFx0XHRzd2l0Y2goY29tbWFuZC5uYW1lKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkRFQ0xBUkVcIjoge1xuXHRcdFx0XHRcdFx0Ly8gTk9UIElNUExFTUVOVEVEIFlFVCAhISFcblxuXHRcdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcIkhBTFRcIjoge1xuXHRcdFx0XHRcdFx0Ly8gV2hhdCE/XG5cblx0XHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJQUkFHTUFcIjoge1xuXHRcdFx0XHRcdFx0Ly8gV2hhdCE/XG5cblx0XHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRcdHZhciBnYXRlSW5mbyA9IGdldEdhdGVJbmZvKGNvbW1hbmQubmFtZSk7XG5cdFx0XHRcdFx0XHRpZighZ2F0ZUluZm8pIHtcblx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiQ2Fubm90IHJlY29nbml6ZSBcXFwiXCIgKyBjb21tYW5kLm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtcyA9IHt9O1xuXG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVJbmZvLmdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGdhdGVJbmZvLmdhdGVEZWY7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHF1aWxEZWYgPSBnYXRlSW5mby5xdWlsRGVmO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYoKHF1aWxEZWYucGFyYW1zIHx8IFtdKS5sZW5ndGggIT0gKGNvbW1hbmQucGFyYW1zIHx8IFtdKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgbnVtYmVyIG9mIHBhcmFtcy4gRXhwZWN0ZWQgXCIgKyAocXVpbERlZi5wYXJhbXMgfHwgW10pLmxlbmd0aCArIFwiIGdvdCBcIiArIChjb21tYW5kLnBhcmFtcyB8fCBbXSkubGVuZ3RoICsgXCIuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBnYXRlRGVmLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gZ2F0ZURlZi5wYXJhbXNbaV07XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtSW5kZXggPSBxdWlsRGVmLnBhcmFtcy5pbmRleE9mKHBhcmFtTmFtZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1JbmRleCA8IDAgfHwgcGFyYW1JbmRleCA+PSBjb21tYW5kLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnRlcm5hbCBlcnJvcjogUVVJTCBkZWZpbml0aW9uIGZvciBnYXRlIFxcXCJcIiArIGNvbW1hbmQubmFtZSArIFwiIGlzIGludmFsaWQuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gY29tbWFuZC5wYXJhbXNbcGFyYW1JbmRleF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBnYXRlSW5mby5jdXN0b21HYXRlO1xuXHRcdFx0XHRcdFx0XHRcdGlmKChnYXRlRGVmLnBhcmFtcyB8fCBbXSkubGVuZ3RoICE9IChjb21tYW5kLnBhcmFtcyB8fCBbXSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIG51bWJlciBvZiBwYXJhbXMuIEV4cGVjdGVkIFwiICsgKGdhdGVEZWYucGFyYW1zIHx8IFtdKS5sZW5ndGggKyBcIiBnb3QgXCIgKyAoY29tbWFuZC5wYXJhbXMgfHwgW10pLmxlbmd0aCArIFwiLlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBnYXRlRGVmLnBhcmFtc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW3BhcmFtTmFtZV0gPSBjb21tYW5kLnBhcmFtc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBudW1iZXIgb2YgYXJndW1lbnRzIG1hdGNoIGdhdGVEZWZcblx0XHRcdFx0XHRcdFx0aWYoY29tbWFuZC5uYW1lID09IFwiTUVBU1VSRVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY29tbWFuZC5hcmdzLmxlbmd0aCAhPSAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJFeHBlY3RpbmcgMiBhcmd1bWVudHMgKHF1Yml0IGFuZCB0YXJnZXQgcmVnaXN0ZXIpIGJ1dCBmb3VuZCBcIiArIGNvbW1hbmQuYXJncy5sZW5ndGggKyBcIi5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBxdWJpdENvdW50ID0gMTtcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLm51bVF1Yml0cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXViaXRDb3VudCA9IGdhdGVEZWYubnVtUXViaXRzO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cXViaXRDb3VudCA9IG1hdGgubG9nMihnYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGNvbW1hbmQuYXJncy5sZW5ndGggIT0gcXViaXRDb3VudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiRXhwZWN0aW5nIFwiICsgcXViaXRDb3VudCArIFwiIGFyZ3VtZW50cyBidXQgZm91bmQgXCIgKyBjb21tYW5kLmFyZ3MubGVuZ3RoICsgXCIuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnID0ge307XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjb21tYW5kLmFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXJnID0gY29tbWFuZC5hcmdzW2ldO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGNvbW1hbmQubmFtZSA9PSBcIk1FQVNVUkVcIikge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1N0YXJ0ID0gYXJnLmluZGV4T2YoXCJbXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoY3JlZ1N0YXJ0ID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNyZWdFbmQgPSBhcmcuaW5kZXhPZihcIl1cIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNyZWdFbmQgPiBjcmVnU3RhcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjcmVnQml0ID0gYXJnLnN1YnN0cmluZyhjcmVnU3RhcnQgKyAxLCBjcmVnRW5kKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjcmVnTmFtZSA9IGFyZy5zdWJzdHJpbmcoMCwgY3JlZ1N0YXJ0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNyZWcgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiaXQ6IGNyZWdCaXQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBjcmVnTmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhcmdJbnQgPSBwYXJzZUludChhcmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihpc05hTihhcmdJbnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChhcmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGFyZ3VtZW50IFxcXCJcIiArIGFyZyArIFwiXFxcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKGFyZ0ludCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhcmdJbnQgPSBwYXJzZUludChhcmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaXNOYU4oYXJnSW50KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGFyZ3VtZW50IFxcXCJcIiArIGFyZyArIFwiXFxcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChhcmdJbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHNlbGYuYXBwZW5kR2F0ZShnYXRlSW5mby5uYW1lLCBhcmdzLCB7IHBhcmFtczogcGFyYW1zLCBjcmVnOiBjcmVnIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9OyBicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGVycm9yIGhhbmRsaW5nIGlzIGNyKnAgYnV0IGxldCdzIGJlIGNvbnNpc3RlbnQgd2l0aCBpbXBvcnRRQVNNKCkgZm9yIG5vd1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhbXSk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRdWlyayA9IGZ1bmN0aW9uKGRlY29tcG9zZSkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXG5cdGZ1bmN0aW9uIHJhbmdlKG4pIHtcblx0XHR2YXIgYXJyID0gW107XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0YXJyLnB1c2goaSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnI7XG5cdH1cblxuXHRmdW5jdGlvbiBpc1dpcmVJblJhbmdlKHdpcmUsIHdpcmVSYW5nZSl7XG5cdFx0aWYod2lyZVJhbmdlLmluZGV4T2Yod2lyZSkgPiAtMSl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gZm9yY2UgZGVjb21wb3NlXG5cdGRlY29tcG9zZSA9IHRydWU7XG5cdHZhciBvYmogPSB0aGlzLnNhdmUoZGVjb21wb3NlKTtcblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0dmFyIHRlbXBDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZChvYmopO1xuXHR0ZW1wQ2lyY3VpdC5sb2FkKG9iaik7XG5cblx0dmFyIHF1aXJrID0ge1xuXHRcdGNvbHM6IFtdLFxuXHRcdGdhdGVzOiBbXVxuXHR9O1xuXG5cdHZhciBnYXRlTWF0cml4ID0gbnVsbDtcblxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFxuXHR2YXIgZ2F0ZUxvY2F0aW9ucyA9IHt9O1xuXHR2YXIgY3VzdG9tR2F0ZUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHRcblx0XG5cdHZhciBnYXRlc1RvQmVBZGRlZCA9IFtdO1xuXHRcblx0dmFyIGdhdGVJbmZvcm1hdGlvbiA9IHt9O1xuXG5cdGlmKCFkZWNvbXBvc2UpIHtcblx0XHR2YXIgbnVtQ29scyA9IHRlbXBDaXJjdWl0Lm51bUNvbHMoKTtcblx0XHRmb3IodmFyIGNvbHVtbiA9IG51bUNvbHMgLSAxOyBjb2x1bW4gPj0gMDsgY29sdW1uLS0pIHtcblx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0ZW1wQ2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRlbXBDaXJjdWl0LmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCAmJiAhdGVtcENpcmN1aXQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0Y3VzdG9tRGVjb21wb3NlZENpcmN1aXQgPSB0ZW1wQ2lyY3VpdC5kZWNvbXBvc2VHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHR2YXIgaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0ID0gZmFsc2U7XG5cdFx0XHRcdFx0Z2F0ZUluZm9ybWF0aW9uW2dhdGUubmFtZV0gPSB7aW5mbzpbXSwgaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0Om51bGx9O1xuXHRcdFx0XHRcdGZvcih2YXIgZGVjb21wb3NlZENvbHVtbiA9IDA7IGRlY29tcG9zZWRDb2x1bW4gPCBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5udW1Db2xzKCk7IGRlY29tcG9zZWRDb2x1bW4rKykge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBkZWNvbXBvc2VkV2lyZSA9IDA7IGRlY29tcG9zZWRXaXJlIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtUXViaXRzOyBkZWNvbXBvc2VkV2lyZSsrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBnYXRlSW5DdXN0b21DaXJjdWl0ID0gY3VzdG9tRGVjb21wb3NlZENpcmN1aXQuZ2V0R2F0ZUF0KGRlY29tcG9zZWRDb2x1bW4sIGRlY29tcG9zZWRXaXJlKTtcblxuXHRcdFx0XHRcdFx0XHRpZihnYXRlSW5DdXN0b21DaXJjdWl0KXtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlSW5DdXN0b21DaXJjdWl0ID0gY3VzdG9tRGVjb21wb3NlZENpcmN1aXQuYmFzaWNHYXRlc1tnYXRlSW5DdXN0b21DaXJjdWl0Lm5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGJhc2ljR2F0ZUluQ3VzdG9tQ2lyY3VpdC5leHBvcnRJbmZvICYmICFiYXNpY0dhdGVJbkN1c3RvbUNpcmN1aXQuZXhwb3J0SW5mby5xdWlyayl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQgPSBpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQgfHwgdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZUluQ3VzdG9tQ2lyY3VpdC5jb25uZWN0b3IgPT0gMCl7XHRcblx0XHRcdFx0XHRcdFx0XHRcdGdhdGVJbmZvcm1hdGlvbltnYXRlLm5hbWVdLmluZm8ucHVzaCh7Z2F0ZUluQ3VzdG9tQ2lyY3VpdDpnYXRlSW5DdXN0b21DaXJjdWl0LCBjb2x1bW46Y29sdW1ufSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlc1RvQmVBZGRlZC5wdXNoKGdhdGVJbmZvcm1hdGlvbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGdhdGVJbmZvcm1hdGlvbltnYXRlLm5hbWVdLmlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdD0gaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0O1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYoaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0KXtcblx0XHRcdFx0XHRcdGNpcmN1aXQuZ2F0ZXMubWFwKGZ1bmN0aW9uKGNpcmN1aXRHYXRlLCBpbmRleCl7XG5cdFx0XHRcdFx0XHRcdGNpcmN1aXRHYXRlLm1hcChmdW5jdGlvbihnYXRlVG9SZW1vdmUpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVUb1JlbW92ZSAmJiBnYXRlVG9SZW1vdmUubmFtZSA9PSBnYXRlLm5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdC5yZW1vdmVHYXRlKGdhdGVUb1JlbW92ZS5pZCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnYXRlS2V5cyA9IE9iamVjdC5rZXlzKGdhdGVJbmZvcm1hdGlvbik7XG5cdGZvcih2YXIgZ2F0ZU51bWJlciA9ICAwOyBnYXRlTnVtYmVyIDwgZ2F0ZUtleXMubGVuZ3RoOyBnYXRlTnVtYmVyKyspe1xuXHRcdGdhdGVLZXkgPSBnYXRlS2V5c1tnYXRlTnVtYmVyXTtcblx0XHRpZihnYXRlSW5mb3JtYXRpb25bZ2F0ZUtleV0uaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0KXtcblx0XHRcdGZvcih2YXIgaSA9IGdhdGVJbmZvcm1hdGlvbltnYXRlS2V5XS5pbmZvLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcblx0XHRcdFx0dmFyIGdhdGVJbmZvID0gZ2F0ZUluZm9ybWF0aW9uW2dhdGVLZXldLmluZm9baV07XG5cdFx0XHRcdHZhciBnYXRlVG9BZGQgPSBnYXRlSW5mby5nYXRlSW5DdXN0b21DaXJjdWl0O1xuXHRcdFx0XHRjaXJjdWl0Lmluc2VydEdhdGUoZ2F0ZVRvQWRkLm5hbWUsIGdhdGVJbmZvLmNvbHVtbiwgZ2F0ZVRvQWRkLndpcmVzLCBnYXRlVG9BZGQub3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIHByZXZpb3VzQ29sdW1uID0gbnVsbDtcblx0dmFyIHByZXZpb3VzR2F0ZSA9IG51bGw7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSl7XG5cdFx0XHRcdGlmKHByZXZpb3VzR2F0ZSAmJiBwcmV2aW91c0dhdGUubmFtZSAhPSBnYXRlLm5hbWUgJiYgcHJldmlvdXNHYXRlLmNvbm5lY3RvciAhPSAwICYmIHByZXZpb3VzQ29sdW1uID09IGNvbHVtbil7XG5cdFx0XHRcdFx0Y2lyY3VpdC5yZW1vdmVHYXRlKGdhdGUuaWQpO1xuXHRcdFx0XHRcdGNpcmN1aXQuaW5zZXJ0R2F0ZShnYXRlLm5hbWUsIGdhdGUuY29sdW1uICsgMSwgZ2F0ZS53aXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwcmV2aW91c0dhdGUgPSBnYXRlO1xuXHRcdFx0XHRwcmV2aW91c0NvbHVtbiA9IGNvbHVtbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0dmFyIHF1aXJrQ29sdW1uID0gW107XG5cdFx0dmFyIHdpcmVSYW5nZSA9IFtdO1xuXHRcdHZhciBpc0Jhc2ljR2F0ZSA9IGZhbHNlO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZighZ2F0ZSB8fCBnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgfHwgZ2F0ZS5uYW1lID09IFwicmVzZXRcIikge1xuXHRcdFx0XHRpZihpc0Jhc2ljR2F0ZSB8fCAhaXNXaXJlSW5SYW5nZSh3aXJlLCB3aXJlUmFuZ2UpKXtcblx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdHZhciBtYXhXaXJlID0gbWF0aC5tYXgoZ2F0ZS53aXJlcyk7XG5cdFx0XHRcdHZhciBtaW5XaXJlID0gbWF0aC5taW4oZ2F0ZS53aXJlcyk7XG5cdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBnYXRlLndpcmVzLnNsaWNlKCk7XG5cdFx0XHRcdHZhciB3aXJlUmFuZ2UgPSByYW5nZShtYXhXaXJlKTtcblx0XHRcdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIHF1aXJrTmFtZSA9IFwiXCI7XG5cdFx0XHRcdFx0dmFyIGNvbnRyb2xsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRpc0Jhc2ljR2F0ZSA9IHRydWU7XG5cdFx0XHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8gJiYgYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpcmspe1xuXHRcdFx0XHRcdFx0cXVpcmtOYW1lID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpcmsubmFtZTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZWQgPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlyay5jb250cm9sbGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyB0d28tcXViaXQgZ2F0ZVxuXHRcdFx0XHRcdGlmKGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoID09IDQpIHtcblx0XHRcdFx0XHRcdC8vIGtub3duIGdhdGUsIGJ1dCB0aGlzIGlzIGNvbnRyb2wgYml0XG5cdFx0XHRcdFx0XHRpZihxdWlya05hbWUgJiYgKGdhdGUubmFtZSA9PSBcInN3YXBcIiAmJiBnYXRlLmNvbm5lY3RvciA8IGdhdGUud2lyZXMubGVuZ3RoIC0gMiAmJiBjb250cm9sbGVkKSB8fCAoZ2F0ZS5uYW1lICE9IFwic3dhcFwiICYmIGdhdGUuY29ubmVjdG9yIDwgZ2F0ZS53aXJlcy5sZW5ndGggLSAxICYmIGNvbnRyb2xsZWQpKSB7XG5cdFx0XHRcdFx0XHRcdHF1aXJrTmFtZSA9IFwi4oCiXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gdGhyZWUtcXViaXQgZ2F0ZVxuXHRcdFx0XHRcdGlmKGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoID09IDgpIHtcblx0XHRcdFx0XHRcdC8vIGtub3duIGdhdGUsIGJ1dCB0aGlzIGlzIGNvbnRyb2wgYml0XG5cdFx0XHRcdFx0XHRpZihxdWlya05hbWUgJiYgKGdhdGUubmFtZSA9PSBcImNzd2FwXCIgJiYgZ2F0ZS5jb25uZWN0b3IgPCBnYXRlLndpcmVzLmxlbmd0aCAtIDIgJiYgY29udHJvbGxlZCkgfHwgKGdhdGUubmFtZSAhPSBcImNzd2FwXCIgJiYgZ2F0ZS5jb25uZWN0b3IgPCBnYXRlLndpcmVzLmxlbmd0aCAtIDEgJiYgY29udHJvbGxlZCkpIHtcblx0XHRcdFx0XHRcdFx0cXVpcmtOYW1lID0gXCLigKJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihxdWlya05hbWUpIHtcblx0XHRcdFx0XHRcdC8vIGFkZCBnYXRlIHRvIGNvbHVtblxuXHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaChxdWlya05hbWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE5vdCBkaXJlY3RseSBzdXBwb3J0ZWQgYnkgcXVpcmtcblx0XHRcdFx0XHRpZighcXVpcmtOYW1lKSB7XG5cdFx0XHRcdFx0XHRxdWlya05hbWUgPSBcIn5cIiArIGdhdGUubmFtZTtcblxuXHRcdFx0XHRcdFx0aWYoYmFzaWNHYXRlLnBhcmFtcy5sZW5ndGggJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRiYXNpY0dhdGUucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0YW5nbGUgPSBtYXRoLnJvdW5kKG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1twYXJhbV0sIGdsb2JhbFBhcmFtcyksIDMpO1xuXHRcdFx0XHRcdFx0XHRcdHF1aXJrTmFtZSArPSBcIl9cIiArIGFuZ2xlO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dmFyIG1hdHJpeCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ7XCI7XG5cblx0XHRcdFx0XHRcdHZhciByYXdNYXRyaXggPSBzZWxmLmdldFJhd0dhdGUoYmFzaWNHYXRlLCBnYXRlLm9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHR2YXIgdGFyZ2V0V2lyZXNTb3J0ZWQgPSBnYXRlV2lyZXMuc29ydCgpO1xuXHRcdFx0XHRcdFx0dmFyIHRhcmdldFdpcmVzID0gW107XG5cdFx0XHRcdFx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbih0V2lyZSkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRXaXJlcy5wdXNoKHRhcmdldFdpcmVzU29ydGVkLmluZGV4T2YodFdpcmUpKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYobWF4V2lyZSAtIG1pbldpcmUgKyAxID4gZ2F0ZS53aXJlcy5sZW5ndGggfHwgZ2F0ZS53aXJlc1swXSA+IGdhdGUud2lyZXNbMV0pIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZU1hdHJpeCA9IGNpcmN1aXQudHJhbnNmb3JtTWF0cml4KG1heFdpcmUgLSBtaW5XaXJlICsgMSwgcmF3TWF0cml4LCB0YXJnZXRXaXJlcyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRnYXRlTWF0cml4ID0gcmF3TWF0cml4O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRnYXRlTWF0cml4Lm1hcChmdW5jdGlvbihyb3csIHJvd0luZGV4KSB7XG5cdFx0XHRcdFx0XHRcdGlmKHJvd0luZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIixcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ7XCI7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRyb3cubWFwKGZ1bmN0aW9uKGNvbCwgY29sSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihjb2xJbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIixcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgY29sICE9IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbCA9IG1hdGguY29tcGxleChjb2wpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbCA9IGNvbC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBjb2w7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ9XCI7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIn1cIjtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgYWxyZWFkeURlZmluZWQgPSBxdWlyay5nYXRlcy5maW5kKGZ1bmN0aW9uKGd0KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGd0LmlkID09IHF1aXJrTmFtZTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZighYWxyZWFkeURlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlyay5nYXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBxdWlya05hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXg6IG1hdHJpeFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVByZXNlbnRJbkNvbCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGNvbHVtbkVsZW1lbnQgPSAwOyBjb2x1bW5FbGVtZW50IDwgcXVpcmtDb2x1bW4ubGVuZ3RoOyBjb2x1bW5FbGVtZW50Kyspe1xuXHRcdFx0XHRcdFx0XHRcdGlmKHF1aXJrQ29sdW1uW2NvbHVtbkVsZW1lbnRdID09IHF1aXJrTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlUHJlc2VudEluQ29sID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKCFnYXRlUHJlc2VudEluQ29sKXtcblx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKHF1aXJrTmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZih3aXJlIDwgZ2F0ZS53aXJlc1swXSl7XG5cdFx0XHRcdFx0XHRcdFx0cXVpcmsuZ2F0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZDogcXVpcmtOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4OiBtYXRyaXhcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYWxyZWFkeURlZmluZWQgPSBxdWlyay5nYXRlcy5maW5kKGZ1bmN0aW9uKGd0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZ3QuaWQgPT0gcXVpcmtOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGlmKCFhbHJlYWR5RGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpcmsuZ2F0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkOiBxdWlya05hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeDogbWF0cml4XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQcmVzZW50SW5Db2wgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGNvbHVtbkVsZW1lbnQgPSAwOyBjb2x1bW5FbGVtZW50IDwgcXVpcmtDb2x1bW4ubGVuZ3RoOyBjb2x1bW5FbGVtZW50Kyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocXVpcmtDb2x1bW5bY29sdW1uRWxlbWVudF0gPT0gcXVpcmtOYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVByZXNlbnRJbkNvbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGlmKCFnYXRlUHJlc2VudEluQ29sKXtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2gocXVpcmtOYW1lKTtcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZVdpcmVzID0gW107XG5cdFx0XHRcdFx0aXNCYXNpY0dhdGUgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZUV4aXN0cyA9IGN1c3RvbUdhdGVDaXJjdWl0LmdhdGVzLmZpbmQoZnVuY3Rpb24oY3VzdG9tR2F0ZSl7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjdXN0b21HYXRlICYmIGN1c3RvbUdhdGVbMF0gJiYgY3VzdG9tR2F0ZVswXVtcIm5hbWVcIl0gPT0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZighY3VzdG9tR2F0ZUV4aXN0cyl7XG5cdFx0XHRcdFx0XHRcdHZhciB3aXJlT2Zmc2V0ID0gZ2F0ZS53aXJlc1swXTtcblx0XHRcdFx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24oZ2F0ZVdpcmUpe1xuXHRcdFx0XHRcdFx0XHRcdGN1c3RvbUdhdGVXaXJlcy5wdXNoKGdhdGVXaXJlIC0gd2lyZU9mZnNldCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21HYXRlQ2lyY3VpdC5yZWdpc3RlckdhdGUoZ2F0ZS5uYW1lLCBzZWxmLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21HYXRlQ2lyY3VpdC5hcHBlbmRHYXRlKGdhdGUubmFtZSwgY3VzdG9tR2F0ZVdpcmVzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2goXCJ+XCIgKyBnYXRlLm5hbWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRxdWlyay5jb2xzLnB1c2gocXVpcmtDb2x1bW4pO1xuXHR9XHRcdFxuXHRcblx0XG5cdC8vIHVzZXIgZGVmaW5lZCBnYXRlc1xuXHRpZighZGVjb21wb3NlKSB7XG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdGZvcihjdXN0b21Db2wgPSAwOyBjdXN0b21Db2wgPCBjdXN0b21HYXRlQ2lyY3VpdC5udW1Db2xzKCk7IGN1c3RvbUNvbCsrKXtcblx0XHRcdFx0XHRcdGZvcihjdXN0b21XaXJlID0gMDsgY3VzdG9tV2lyZSA8IGN1c3RvbUdhdGVDaXJjdWl0Lm51bUdhdGVzKCk7IGN1c3RvbVdpcmUrKyl7XG5cdFx0XHRcdFx0XHRcdHZhciBjaXJjdWl0R2F0ZSA9IGN1c3RvbUdhdGVDaXJjdWl0LmdldEdhdGVBdChjdXN0b21Db2wsIGN1c3RvbVdpcmUpO1xuXHRcdFx0XHRcdFx0XHRpZihjaXJjdWl0R2F0ZSAmJiBjaXJjdWl0R2F0ZS5uYW1lID09IHVzZWRHYXRlTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZU9iaiA9IGN1c3RvbUdhdGVDaXJjdWl0LmRlY29tcG9zZUdhdGVBdChjdXN0b21Db2wsIGN1c3RvbVdpcmUpO1xuXHRcdFx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlT2JqKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWlyay5nYXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdGlkOiBcIn5cIiArIHVzZWRHYXRlTmFtZSxcblx0XHRcdFx0XHRcdGNpcmN1aXQ6IGN1c3RvbUNpcmN1aXQuZXhwb3J0UXVpcmsodHJ1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHF1aXJrO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0Q2lycSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0ciwgYXNKdXB5dGVyLCBzaG90cywgZXhwb3J0VGZxKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0ZXhwb3J0VGZxOiBleHBvcnRUZnFcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9DaXJxKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRU2hhcnAgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGFzSnVweXRlciwgY2lyY3VpdE5hbWUsIGluZGVudERlcHRoKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRjaXJjdWl0TmFtZTogY2lyY3VpdE5hbWUsXG5cdFx0aW5kZW50RGVwdGg6IGluZGVudERlcHRoXG5cdH07XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUVNoYXJwKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UW9iaiA9IGZ1bmN0aW9uKGNpcmN1aXROYW1lLCBleHBlcmltZW50TmFtZSwgbnVtU2hvdHMsIGNpcmN1aXRSZXBsYWNlbWVudCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjaXJjdWl0TmFtZTogY2lyY3VpdE5hbWUsXG5cdFx0ZXhwZXJpbWVudE5hbWU6IGV4cGVyaW1lbnROYW1lLFxuXHRcdG51bVNob3RzOiBudW1TaG90c1xuXHR9O1xuXHRcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9Rb2JqKG9wdGlvbnMsIGNpcmN1aXRSZXBsYWNlbWVudClcdFxufVxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbXBvcnRRb2JqID0gZnVuY3Rpb24ocW9iaiwgZXJyb3JDYWxsYmFjaykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dGhpcy5pbml0KCk7XG5cblx0aWYoIXFvYmogfHwgIXFvYmouZXhwZXJpbWVudHMgfHwgIXFvYmouZXhwZXJpbWVudHMubGVuZ3RoKSB7XG5cdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBcIkludmFsaWQgaW5wdXQgZmlsZTogbm8gZXhwZXJpbWVudHMgZm91bmQuXCIgfSBdKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGV4cGVyaW1lbnQgPSBxb2JqLmV4cGVyaW1lbnRzWzBdO1xuXG5cdHZhciBoZWFkZXIgPSBleHBlcmltZW50LmhlYWRlciB8fCB7fTtcblxuXHQvLyBBZGQgcXViaXRzXG5cdHRoaXMuaW5pdChwYXJzZUludChoZWFkZXIubl9xdWJpdHMgfHwgMCkpO1xuXG5cdC8vIENsYXNzaWNhbCByZWdpc3RlcnNcblx0dmFyIGNyZWdEYXRhID0ge307XG5cdGlmKGhlYWRlci5jcmVnX3NpemVzICYmIGhlYWRlci5jcmVnX3NpemVzLmxlbmd0aCkge1xuXHRcdHZhciB0b3RhbEJpdHMgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBoZWFkZXIuY3JlZ19zaXplcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGNyZWdEZWYgPSBoZWFkZXIuY3JlZ19zaXplc1tpXTtcblx0XHRcdGlmKGNyZWdEZWYubGVuZ3RoID4gMSkge1xuXHRcdFx0XHR2YXIgY3JlZ05hbWUgPSBjcmVnRGVmWzBdICsgXCJcIjtcblx0XHRcdFx0dmFyIGNyZWdMZW4gPSBwYXJzZUludChjcmVnRGVmWzFdKTtcblx0XHRcdFx0dGhpcy5jcmVhdGVDcmVnKGNyZWdOYW1lLCBjcmVnTGVuKTtcblxuXHRcdFx0XHR2YXIgY3JlZ01hc2sgPSAoKDEgPDwgKHRvdGFsQml0cyArIGNyZWdMZW4pKSAtICgxIDw8IHRvdGFsQml0cykpO1xuXG5cdFx0XHRcdGNyZWdEYXRhW2NyZWdOYW1lXSA9IHtcblx0XHRcdFx0XHRtYXNrOiBjcmVnTWFzayxcblx0XHRcdFx0XHRvZmZzZXQ6IHRvdGFsQml0c1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHRvdGFsQml0cyArPSBjcmVnTGVuO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiBjbGFzc2ljYWwgY29uZGl0aW9uIGFyZ3VtZW50IGZvciBnYXRlIGZyb20gYmZ1bmMgbWFzayBhbmQgdmFsdWVcblx0ZnVuY3Rpb24gY29uZGl0aW9uRnJvbU1hc2tBbmRWYWx1ZShtYXNrLCB2YWx1ZSkge1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gY3JlZ0RhdGEpIHtcblx0XHRcdHZhciBkYXRhID0gY3JlZ0RhdGFbY3JlZ05hbWVdO1xuXG5cdFx0XHRpZihkYXRhLm1hc2sgPT0gbWFzaykge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNyZWc6IGNyZWdOYW1lLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSA+PiBkYXRhLm9mZnNldFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gT2J0YWluIGNsYXNzaWNhbCByZWdpc3RlciBuYW1lIGFuZCBsb2NhbCBiaXQgbnVtYmVyIGZyb20gZ2xvYmFsIGJpdCBudW1iZXJcblx0ZnVuY3Rpb24gbWVtb3J5VG9DcmVnKG1lbW9yeSkge1xuXHRcdHZhciB0b3RhbEJpdHMgPSAwO1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gc2VsZi5jcmVncykge1xuXHRcdFx0dmFyIGNyZWcgPSBzZWxmLmNyZWdzW2NyZWdOYW1lXTtcblx0XHRcdGlmKCh0b3RhbEJpdHMgKyBjcmVnLmxlbmd0aCkgPiBtZW1vcnkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRuYW1lOiBjcmVnTmFtZSxcblx0XHRcdFx0XHRiaXQ6IG1lbW9yeSAtIHRvdGFsQml0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0dG90YWxCaXRzICs9IGNyZWcubGVuZ3RoO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIEFkZCBnYXRlc1xuXHR2YXIgaW5zdHJ1Y3Rpb25zID0gZXhwZXJpbWVudC5pbnN0cnVjdGlvbnMgfHwgW107XG5cdHZhciBjb25kaXRpb25zID0ge307XG5cdGZvcih2YXIgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgZXhwZXJpbWVudC5pbnN0cnVjdGlvbnMubGVuZ3RoOyBpbnN0SW5kZXgrKykge1xuXHRcdHZhciBpbnN0ID0gZXhwZXJpbWVudC5pbnN0cnVjdGlvbnNbaW5zdEluZGV4XTtcblxuXHRcdHN3aXRjaChpbnN0Lm5hbWUpIHtcblx0XHRcdC8vIGNsYXNzaWNhbCBjb250cm9sXG5cdFx0XHRjYXNlIFwiYmZ1bmNcIjoge1xuXHRcdFx0XHR2YXIgY29uZGl0aW9uID0gY29uZGl0aW9uRnJvbU1hc2tBbmRWYWx1ZShwYXJzZUludChpbnN0Lm1hc2spLCBwYXJzZUludChpbnN0LnZhbCkpO1xuXG5cdFx0XHRcdGlmKCFjb25kaXRpb24pIHtcblx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGNsYXNzaWNhbCBjb25kaXRpb24uXCI7XG5cdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UgfSBdKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uZGl0aW9uc1tpbnN0LnJlZ2lzdGVyXSA9IGNvbmRpdGlvbjtcblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHQvLyBNZWFzdXJlbWVudFxuXHRcdFx0Y2FzZSBcIm1lYXN1cmVcIjoge1xuXHRcdFx0XHRmb3IodmFyIHFJbmRleCA9IDA7IHFJbmRleCA8IGluc3QucXViaXRzLmxlbmd0aDsgcUluZGV4KyspIHtcblx0XHRcdFx0XHR2YXIgcXViaXQgPSBpbnN0LnF1Yml0c1txSW5kZXhdO1xuXHRcdFx0XHRcdHZhciBtZW1vcnkgPSBpbnN0Lm1lbW9yeVtxSW5kZXhdO1xuXHRcdFx0XHRcdHZhciBjcmVnID0gbWVtb3J5VG9DcmVnKG1lbW9yeSk7XG5cdFx0XHRcdFx0aWYoIWNyZWcpIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgbWVhc3VyZW1lbnQgZGVzdGluYXRpb24uXCI7XG5cdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgb3B0aW9ucyA9IHsgY3JlZzogY3JlZyB9O1xuXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRHYXRlKFwibWVhc3VyZVwiLCBxdWJpdCwgb3B0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiYmFycmllclwiOiB7XG5cdFx0XHRcdC8vICEhISBOb3QgaW1wbGVtZW50ZWQgeWV0LiBJZ25vcmUgZm9yIG5vdy5cblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHQvLyBOb3JtYWwgZ2F0ZVxuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHR2YXIgb3B0aW9ucyA9IHtcblx0XHRcdFx0XHRwYXJhbXM6IHt9LFxuXHRcdFx0XHRcdGNvbmRpdGlvbjoge31cblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBGaW5kIGdhdGUgZGVmaW5pdGlvblxuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBpbnN0Lm5hbWU7XG5cdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJpZGVuXCI6IGdhdGVOYW1lID0gXCJpZFwiOyBicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJVbmtub3duIGdhdGUgXFxcIlwiICsgaW5zdC5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdhdGUgcGFyYW1zIChpZiBhbnkpXG5cdFx0XHRcdGlmKGdhdGVEZWYucGFyYW1zICYmIGdhdGVEZWYucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmKCFpbnN0LnBhcmFtcyB8fCAhaW5zdC5wYXJhbXMubGVuZ3RoIHx8IGluc3QucGFyYW1zLmxlbmd0aCAhPSBnYXRlRGVmLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgbnVtYmVyIG9mIHBhcmFtcyBmb3IgZ2F0ZSBcXFwiXCIgKyBpbnN0Lm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgcGFySW5kZXggPSAwOyBwYXJJbmRleCA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgcGFySW5kZXgrKykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IGdhdGVEZWYucGFyYW1zW3BhckluZGV4XTtcblx0XHRcdFx0XHRcdG9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0gPSBpbnN0LnBhcmFtc1twYXJJbmRleF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2xhc3NpY2FsIGNvbnRyb2wgKGlmIGFueSlcblx0XHRcdFx0aWYodHlwZW9mIGluc3QuY29uZGl0aW9uYWwgIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdHZhciBjb25kaXRpb24gPSBjb25kaXRpb25zW2luc3QuY29uZGl0aW9uYWxdO1xuXHRcdFx0XHRcdGlmKCFjb25kaXRpb24pIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgY2xhc3NpY2FsIGNvbmRpdGlvbi5cIjtcblx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UgfSBdKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9wdGlvbnMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIGdhdGUgdG8gY2lyY3VpdFxuXHRcdFx0XHR0aGlzLmFwcGVuZEdhdGUoZ2F0ZU5hbWUsIGluc3QucXViaXRzLCBvcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGVycm9yIGhhbmRsaW5nIGlzIGNyKnAgYnV0IGxldCdzIGJlIGNvbnNpc3RlbnQgd2l0aCBpbXBvcnRRQVNNKCkgZm9yIG5vd1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhbXSk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRURlEgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGFzSnVweXRlciwgc2hvdHMpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90c1xuXHR9O1xuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1RGUShvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydEJyYWtldCA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0ciwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkLFxuXHRcdGluZGVudERlcHRoOiBpbmRlbnREZXB0aFxuXHR9O1xuXG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQnJha2V0KG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0U1ZHID0gZnVuY3Rpb24oZW1iZWRkZWQsIG9wdGlvbnMpIHtcblx0dmFyIG5ld09wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRuZXdPcHRpb25zLmVtYmVkZGVkID0gISFlbWJlZGRlZDtcblxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1NWRyhuZXdPcHRpb25zKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1NWRyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHR2YXIgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5lbWJlZGRlZCA9IG9wdGlvbnMuZW1iZWRkZWQgfHwgZmFsc2U7XG5cdG9wdGlvbnMuY2VsbFdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggfHwgNDA7XG5cdG9wdGlvbnMuY2VsbEhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodCB8fCA0MDtcblx0b3B0aW9ucy5oU3BhY2luZyA9IG9wdGlvbnMuaFNwYWNpbmcgfHwgMjg7XG5cdG9wdGlvbnMudlNwYWNpbmcgPSBvcHRpb25zLnZTcGFjaW5nIHx8IDM0O1xuXHRvcHRpb25zLmJsYWNrYm94UGFkZGluZ1ggPSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1ggfHwgMjtcblx0b3B0aW9ucy5ibGFja2JveFBhZGRpbmdZID0gb3B0aW9ucy5ibGFja2JveFBhZGRpbmdZIHx8IDI7XG5cdG9wdGlvbnMuYmxhY2tib3hMaW5lQ29sb3IgPSBvcHRpb25zLmJsYWNrYm94TGluZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy5ibGFja2JveFNlbGVjdGVkTGluZUNvbG9yID0gb3B0aW9ucy5ibGFja2JveFNlbGVjdGVkTGluZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy53aXJlQ29sb3IgPSBvcHRpb25zLndpcmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMuZ2F0ZUxpbmVDb2xvciA9IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yID0gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLmNXaXJlQ29sb3IgPSBvcHRpb25zLmNXaXJlQ29sb3IgfHwgXCJzaWx2ZXJcIjtcblx0b3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgPSBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciB8fCBcInNpbHZlclwiO1xuXHRvcHRpb25zLmNBcnJvd1NpemUgPSBvcHRpb25zLmNBcnJvd1NpemUgfHwgMTA7XG5cdG9wdGlvbnMuaFdpcmVDb2xvciA9IG9wdGlvbnMuaFdpcmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMud2lyZVdpZHRoID0gb3B0aW9ucy53aXJlV2lkdGggfHwgMTtcblx0b3B0aW9ucy53aXJlVGV4dEhlaWdodCA9IG9wdGlvbnMud2lyZVRleHRIZWlnaHQgfHwgODtcblx0b3B0aW9ucy53aXJlVGV4dERvd24gPSBvcHRpb25zLndpcmVUZXh0RG93biB8fCAxNjtcblx0b3B0aW9ucy53aXJlTWFyZ2luID0gb3B0aW9ucy53aXJlTWFyZ2luIHx8IDIwO1xuXHRvcHRpb25zLndpcmVMYWJlbFdpZHRoID0gb3B0aW9ucy53aXJlTGFiZWxXaWR0aCB8fCA0MDtcblx0b3B0aW9ucy5kb3RSYWRpdXMgPSBvcHRpb25zLmRvdFJhZGl1cyB8fCA1O1xuXHRvcHRpb25zLnBhcmFtVGV4dEhlaWdodCA9IG9wdGlvbnMucGFyYW1UZXh0SGVpZ2h0IHx8IDY7XG5cdG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1ggPSBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdYIHx8IDQ7XG5cdG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1kgPSBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdZIHx8IDQ7XG5cdG9wdGlvbnMuc2VsZWN0aW9uTGluZUNvbG9yID0gb3B0aW9ucy5zZWxlY3Rpb25MaW5lQ29sb3IgfHwgXCIjMjE4NUQwXCI7XG5cdG9wdGlvbnMuZHJhd0Jsb2NoU3BoZXJlcyA9IG9wdGlvbnMuZHJhd0Jsb2NoU3BoZXJlcyB8fCBmYWxzZTtcblxuXHRpZih0eXBlb2Ygb3B0aW9ucy5kcmF3SHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcHRpb25zLmRyYXdIeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdHZhciBnZXRDcmVnSW5kZXggPSBmdW5jdGlvbihuYW1lKSB7XG5cdFx0dmFyIGNyZWdJbmRleCA9IDA7XG5cdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiBzZWxmLmNyZWdzKSB7XG5cdFx0XHRpZihjcmVnTmFtZSA9PSBuYW1lKSB7XG5cdFx0XHRcdHJldHVybiBjcmVnSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRjcmVnSW5kZXgrKztcblx0XHR9XG5cdFx0cmV0dXJuIGNyZWdJbmRleDtcblx0fTtcblxuXHR2YXIgZ2V0Q2VsbFggPSBmdW5jdGlvbihjb2wpIHtcblx0XHRyZXR1cm4gb3B0aW9ucy53aXJlTGFiZWxXaWR0aCArICgob3B0aW9ucy5jZWxsV2lkdGggKyBvcHRpb25zLmhTcGFjaW5nKSAqIGNvbCkgKyBvcHRpb25zLmhTcGFjaW5nO1xuXHR9O1xuXG5cdHZhciBnZXRDZWxsWSA9IGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRyZXR1cm4gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIHdpcmUpICsgb3B0aW9ucy52U3BhY2luZztcblx0fTtcblxuXHR2YXIgbnVtUm93cyA9IHRoaXMubnVtUXViaXRzO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgbnVtQ3JlZ3MgPSB0aGlzLmNyZWdDb3VudCgpO1xuXG5cdHZhciB0b3RhbENvbHMgPSBudW1Db2xzO1xuXHQvLyByZXNlcnZlIGNvbCBmb3IgYmxvY2ggc3BoZXJlc1xuXHRpZihvcHRpb25zLmRyYXdCbG9jaFNwaGVyZXMpIHtcblx0XHR0b3RhbENvbHMrKztcblx0fVxuXG5cdHZhciB0b3RhbFdpcmVDb2xzID0gdG90YWxDb2xzO1xuXG5cdC8vIHJlc2VydmUgMiBjb2xzIGZvciBoeWJyaWQgcXVhbnR1bS1jbGFzc2ljYWwgY29ubmVjdG9yXG5cdGlmKG9wdGlvbnMuZHJhd0h5YnJpZCkge1xuXHRcdHRvdGFsQ29scyArPSAyO1xuXHR9XG5cblx0dmFyIHRvdGFsV2lkdGggPSBnZXRDZWxsWCh0b3RhbENvbHMpO1xuXHR2YXIgdG90YWxXaXJlV2lkdGggPSBnZXRDZWxsWCh0b3RhbFdpcmVDb2xzKTtcblx0dmFyIHRvdGFsSGVpZ2h0ID0gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIChudW1Sb3dzICsgbnVtQ3JlZ3MgKyAob3B0aW9ucy5kcmF3SHlicmlkID8gMSA6IDApKSkgKyBvcHRpb25zLnZTcGFjaW5nO1xuXG5cdHZhciBoeWJyaWRZID0gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIChudW1Sb3dzICsgbnVtQ3JlZ3MpKSArIG9wdGlvbnMudlNwYWNpbmc7XG5cdHZhciBoeWJyaWRXaXJlWSA9ICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiAobnVtUm93cyArIG51bUNyZWdzKSkgKyAob3B0aW9ucy52U3BhY2luZyArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKSk7XG5cblx0ZnVuY3Rpb24gcG9sYXJUb0NhcnRlc2lhbihjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXMsIGFuZ2xlSW5EZWdyZWVzKSB7XG5cdFx0dmFyIGFuZ2xlSW5SYWRpYW5zID0gKGFuZ2xlSW5EZWdyZWVzIC0gOTApICogTWF0aC5QSSAvIDE4MC4wO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFx0eDogY2VudGVyWCArIChyYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUluUmFkaWFucykpLFxuXHRcdFx0XHR5OiBjZW50ZXJZICsgKHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlSW5SYWRpYW5zKSlcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gZGVzY3JpYmVBcmMoeCwgeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSl7XG5cblx0XHR2YXIgc3RhcnQgPSBwb2xhclRvQ2FydGVzaWFuKHgsIHksIHJhZGl1cywgZW5kQW5nbGUpO1xuXHRcdHZhciBlbmQgPSBwb2xhclRvQ2FydGVzaWFuKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSk7XG5cblx0XHR2YXIgbGFyZ2VBcmNGbGFnID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlIDw9IDE4MCA/IFwiMFwiIDogXCIxXCI7XG5cblx0XHR2YXIgZCA9IFtcblx0XHRcdFwiTVwiLCBzdGFydC54LCBzdGFydC55LFxuXHRcdFx0XCJBXCIsIHJhZGl1cywgcmFkaXVzLCAwLCBsYXJnZUFyY0ZsYWcsIDAsIGVuZC54LCBlbmQueVxuXHRcdF0uam9pbihcIiBcIik7XG5cblx0XHRyZXR1cm4gZDtcblx0fVxuXG5cdHZhciBxV2lyZVkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdFx0cmV0dXJuICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiB3aXJlKSArIChvcHRpb25zLnZTcGFjaW5nICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpKTtcblx0fTtcblxuXHR2YXIgcUdhdGVZID0gZnVuY3Rpb24od2lyZSkge1xuXHRcdHJldHVybiAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogd2lyZSkgKyBvcHRpb25zLnZTcGFjaW5nO1xuXHR9O1xuXG5cdHZhciBjV2lyZVkgPSBmdW5jdGlvbihjcmVnTmFtZSkge1xuXHRcdHJldHVybiAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogKG51bVJvd3MgKyBnZXRDcmVnSW5kZXgoY3JlZ05hbWUpKSkgKyAob3B0aW9ucy52U3BhY2luZyArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKSk7XG5cdH07XG5cblxuXHRmdW5jdGlvbiBnYXRlQm94U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpIHtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0cmVzICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtYm94XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRpZihnYXRlTGFiZWwpIHtcblx0XHRcdHJlcyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLWxhYmVsXFxcIiB4PVxcXCJcIiArIChnYXRlWCArIChnYXRlV2lkdGggLyAyKSkgKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmaWxsPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIj5cIiArIGdhdGVMYWJlbCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlUmVjdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKSB7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAyO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRyZXMgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1yZWN0XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRpZihnYXRlTGFiZWwpIHtcblx0XHRcdHJlcyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLWxhYmVsXFxcIiB4PVxcXCJcIiArIChnYXRlWCArIChnYXRlV2lkdGggLyAyKSkgKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIj5cIiArIGdhdGVMYWJlbCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlQ2lyY2xlU1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgY2VudGVyWCA9IGNlbGxYICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBjZWxsWSArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKTtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCAqIDAuODtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodCAqIDAuODtcblx0XHR2YXIgZ2F0ZVggPSBjZWxsWCArICgob3B0aW9ucy5jZWxsV2lkdGggLSBnYXRlV2lkdGgpIC8gMik7XG5cdFx0dmFyIGdhdGVZID0gY2VsbFkgKyAoKG9wdGlvbnMuY2VsbEhlaWdodCAtIGdhdGVIZWlnaHQpIC8gMik7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxlbGxpcHNlIGNsYXNzPVxcXCJxYy1nYXRlLW5vdFxcXCIgY3g9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiBjeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHJ4PVxcXCJcIiArIChnYXRlV2lkdGggLyAyKSArIFwiXFxcIiByeT1cXFwiXCIgKyAoZ2F0ZUhlaWdodCAvIDIpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRpZihnYXRlTGFiZWwpIHtcblx0XHRcdHJlcyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLWxhYmVsXFxcIiB4PVxcXCJcIiArIChnYXRlWCArIChnYXRlV2lkdGggLyAyKSkgKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIj5cIiArIGdhdGVMYWJlbCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlTm90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGNlbnRlclggPSBjZWxsWCArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gY2VsbFkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAwLjg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjg7XG5cdFx0dmFyIGdhdGVYID0gY2VsbFggKyAoKG9wdGlvbnMuY2VsbFdpZHRoIC0gZ2F0ZVdpZHRoKSAvIDIpO1xuXHRcdHZhciBnYXRlWSA9IGNlbGxZICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxlbGxpcHNlIGNsYXNzPVxcXCJxYy1nYXRlLW5vdFxcXCIgY3g9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiBjeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHJ4PVxcXCJcIiArIChnYXRlV2lkdGggLyAyKSArIFwiXFxcIiByeT1cXFwiXCIgKyAoZ2F0ZUhlaWdodCAvIDIpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXMgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1ub3QtbGluZVxcXCIgeDE9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHkxPVxcXCJcIiArIGdhdGVZICtcIlxcXCIgeTI9XFxcIlwiICsgKGdhdGVZICsgZ2F0ZUhlaWdodCkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbm90LWxpbmVcXFwiIHgxPVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHgyPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeTE9XFxcIlwiICsgY2VudGVyWSArXCJcXFwiIHkyPVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZUdhdWdlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBjZW50ZXJYID0gZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBnYXRlWSArIChnYXRlSGVpZ2h0IC8gMik7XG5cdFx0dmFyIG1vdmVkb3duID0gZ2F0ZUhlaWdodCAvIDU7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLWJveFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPHBhdGggY2xhc3M9XFxcImdjLWdhdGUtZ2F1Z2UtYXJjXFxcIiBkPVxcXCJcIiArIGRlc2NyaWJlQXJjKGNlbnRlclgsIGNlbnRlclkgKyBtb3ZlZG93biwgZ2F0ZVdpZHRoIC8gMi4zLCAzMDAsIDYwKSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXMgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1nYXVnZS1zY2FsZVxcXCIgeDE9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyAoKGdhdGVYICsgZ2F0ZVdpZHRoKSAtIG1vdmVkb3duKSArIFwiXFxcIiB5MT1cXFwiXCIgKyAoY2VudGVyWSArIG1vdmVkb3duKSArIFwiXFxcIiB5Mj1cXFwiXCIgKyAoZ2F0ZVkgKyBtb3ZlZG93bikgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZVhTVkcoY2VsbFgsIGNlbGxZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAwLjQ7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjQ7XG5cdFx0dmFyIGdhdGVYID0gY2VsbFggKyAoKG9wdGlvbnMuY2VsbFdpZHRoIC0gZ2F0ZVdpZHRoKSAvIDIpO1xuXHRcdHZhciBnYXRlWSA9IGNlbGxZICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUteFxcXCIgeDE9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeDI9XFxcIlwiICsgKGdhdGVYICsgZ2F0ZVdpZHRoKSArIFwiXFxcIiB5MT1cXFwiXCIgKyBnYXRlWSArXCJcXFwiIHkyPVxcXCJcIiArIChnYXRlWSArIGdhdGVIZWlnaHQpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJlcyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLXhcXFwiIHgxPVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHgyPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeTE9XFxcIlwiICsgKGdhdGVZICsgZ2F0ZUhlaWdodCkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZURvdFNWRyhjZWxsWCwgY2VsbFksIGdhdGVOYW1lLCBzZWxlY3RlZCkge1xuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHR2YXIgY2VudGVyWCA9IGNlbGxYICsgKGdhdGVXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gY2VsbFkgKyAoZ2F0ZUhlaWdodCAvIDIpO1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cdFx0cmVzICs9IFwiPGNpcmNsZSBjbGFzcz1cXFwicWMtZ2F0ZS1kb3RcXFwiIGN4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgY3k9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiByPVxcXCJcIiArIG9wdGlvbnMuZG90UmFkaXVzICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMud2lyZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy53aXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZUludmVydGVkRG90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBjZW50ZXJYID0gY2VsbFggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBjZWxsWSArIChnYXRlSGVpZ2h0IC8gMik7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblx0XHRyZXMgKz0gXCI8Y2lyY2xlIGNsYXNzPVxcXCJxYy1nYXRlLW5kb3RcXFwiIGN4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgY3k9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiByPVxcXCJcIiArIG9wdGlvbnMuZG90UmFkaXVzICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMud2lyZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgY29ubmVjdG9yLCBkcmF3Qm94LCBzZWxlY3RlZCkge1xuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0aWYoY29ubmVjdG9yICE9IFwiYm94XCIgJiYgZHJhd0JveCkge1xuXHRcdFx0cmVzICs9IGdhdGVCb3hTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgXCJcIiwgc2VsZWN0ZWQpO1xuXHRcdH1cblxuXHRcdHN3aXRjaChjb25uZWN0b3IpIHtcblx0XHRcdGNhc2UgXCJib3hcIjogcmVzICs9IGdhdGVCb3hTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlY3RcIjogcmVzICs9IGdhdGVSZWN0U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJjaXJjbGVcIjogcmVzICs9IGdhdGVDaXJjbGVTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm5vdFwiOiByZXMgKz0gZ2F0ZU5vdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcInhcIjogcmVzICs9IGdhdGVYU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwiZG90XCI6IHJlcyArPSBnYXRlRG90U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwibmRvdFwiOiByZXMgKz0gZ2F0ZUludmVydGVkRG90U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwiZ2F1Z2VcIjogcmVzICs9IGdhdGVHYXVnZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlKGdhdGUsIGNvbEluZGV4LCByb3dJbmRleCkge1xuXHRcdHZhciBkaW5mbyA9IHNlbGYuYmFzaWNHYXRlc1tnYXRlLm5hbWVdID8gc2VsZi5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZHJhd2luZ0luZm8gOiBudWxsO1xuXHRcdGlmKCFkaW5mbykge1xuXHRcdFx0ZGluZm8gPSBzZWxmLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0gPyBzZWxmLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0uZHJhd2luZ0luZm8gOiBudWxsO1xuXHRcdH1cblxuXHRcdHZhciBibGFja2JveCA9IGZhbHNlO1xuXHRcdHZhciBzZWxlY3RlZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZWxlY3Rpb24gJiYgb3B0aW9ucy5zZWxlY3Rpb24uaW5kZXhPZihnYXRlLmlkKSA+PSAwO1xuXHRcdGlmKCFkaW5mbykge1xuXHRcdFx0aWYoZ2F0ZS53aXJlcy5sZW5ndGggPT0gMSkge1xuXHRcdFx0XHRkaW5mbyA9IHsgY29ubmVjdG9yczogW1wiYm94XCJdIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkaW5mbyA9IHsgY29ubmVjdG9yczogW10gfTtcblx0XHRcdFx0YmxhY2tib3ggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZShkaW5mby5jb25uZWN0b3JzLmxlbmd0aCA8IGdhdGUud2lyZXMubGVuZ3RoKSB7XG5cdFx0XHRkaW5mby5jb25uZWN0b3JzLnB1c2goXCJib3hcIik7XG5cdFx0fVxuXG5cdFx0dmFyIHRvcFdpcmUgPSBNYXRoLm1pbi5hcHBseShudWxsLCBnYXRlLndpcmVzKTtcblx0XHR2YXIgYm90dG9tV2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGdhdGUud2lyZXMpO1xuXHRcdHZhciBjTGlua1RvcFkgPSBjV2lyZVkoYm90dG9tV2lyZSk7XG5cblx0XHR2YXIgc3ZnID0gXCJcIjtcblx0XHRzdmcgKz0gXCI8ZyBjbGFzcz1cXFwicWMtZ2F0ZS1ncm91cFxcXCIgZGF0YS1pZD1cXFwiXCIgKyBnYXRlLmlkICsgXCJcXFwiIGRhdGEtZ2F0ZT1cXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCI+XCI7XG5cdFx0aWYoYmxhY2tib3gpIHtcblx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KSAtIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWDtcblx0XHRcdHZhciBnYXRlWSA9IHFHYXRlWSh0b3BXaXJlKSAtIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWTtcblx0XHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCArICgyICogb3B0aW9ucy5ibGFja2JveFBhZGRpbmdYKTtcblx0XHRcdHZhciBnYXRlSGVpZ2h0ID0gKChxR2F0ZVkoYm90dG9tV2lyZSkgKyBvcHRpb25zLmNlbGxIZWlnaHQpIC0gZ2F0ZVkpICsgb3B0aW9ucy5ibGFja2JveFBhZGRpbmdZO1xuXG5cdFx0XHR2YXIgY2VudGVyWCA9IGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpO1xuXG5cdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQ7XG5cblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1ibGFja2JveC1sYWJlbFxcXCIgeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZIC0gb3B0aW9ucy53aXJlVGV4dEhlaWdodCAtIChvcHRpb25zLmJsYWNrYm94UGFkZGluZ1kgKiAyKSkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcImhhbmdpbmdcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5cIiArIChkaW5mby5sYWJlbCB8fCBnYXRlLm5hbWUpICsgXCI8L3RleHQ+XCI7XG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1ibGFja2JveFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5ibGFja2JveFNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5ibGFja2JveExpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHR9XG5cblx0XHRpZihzZWxlY3RlZCkge1xuXHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpIC0gb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWDtcblx0XHRcdHZhciBnYXRlWSA9IHFHYXRlWSh0b3BXaXJlKSAtIG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1k7XG5cdFx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKyAoMiAqIG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1gpO1xuXHRcdFx0dmFyIGdhdGVIZWlnaHQgPSAoKHFHYXRlWShib3R0b21XaXJlKSArIG9wdGlvbnMuY2VsbEhlaWdodCkgLSBnYXRlWSkgKyBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdZO1xuXG5cdFx0XHR2YXIgY2VudGVyWCA9IGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpO1xuXG5cdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQ7XG5cblx0XHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLXNlbGVjdGlvblxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5zZWxlY3Rpb25MaW5lQ29sb3IgKyBcIlxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHR9XG5cblx0XHQvLyBsaW5rXG5cdFx0aWYodG9wV2lyZSAhPSBib3R0b21XaXJlICYmICFibGFja2JveCkge1xuXHRcdFx0dmFyIGxpbmtYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0XHR2YXIgbGlua1kxID0gZ2V0Q2VsbFkodG9wV2lyZSkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cdFx0XHR2YXIgbGlua1kyID0gZ2V0Q2VsbFkoYm90dG9tV2lyZSkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy53aXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHR9XG5cblx0XHQvLyBjb25uZWN0b3JzXG5cdFx0dmFyIG1heFdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCBnYXRlLndpcmVzKTtcblx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbih3aXJlLCBjb25uZWN0b3IpIHtcblxuXHRcdFx0c3dpdGNoKGRpbmZvLmNvbm5lY3RvcnNbY29ubmVjdG9yXSkge1xuXHRcdFx0XHRjYXNlIFwiYm94XCI6IHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlQm94U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZS5uYW1lLCAoYmxhY2tib3ggPyBxdWJpdExldHRlcihjb25uZWN0b3IsIG51bVJvd3MpIDogKGRpbmZvLmxhYmVsIHx8IGdhdGUubmFtZSkpLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJjaXJjbGVcIjoge1xuXHRcdFx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVDaXJjbGVTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlLm5hbWUsIChibGFja2JveCA/IHF1Yml0TGV0dGVyKGNvbm5lY3RvciwgbnVtUm93cykgOiAoZGluZm8ubGFiZWwgfHwgZ2F0ZS5uYW1lKSksIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdHZhciBnYXRlSGVpZ2h0ID0gKG9wdGlvbnMuY2VsbEhlaWdodCAqIDAuOCk7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQgKyAoKG9wdGlvbnMuY2VsbEhlaWdodCAtIGdhdGVIZWlnaHQpIC8gMik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwibm90XCI6IHtcblx0XHRcdFx0XHR2YXIgY2VsbFggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGNlbGxZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlTm90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZS5uYW1lLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZUhlaWdodCA9IChvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjgpO1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gY2VsbFkgKyBnYXRlSGVpZ2h0ICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcInhcIjoge1xuXHRcdFx0XHRcdHZhciBjZWxsWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgY2VsbFkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVYU1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZS5uYW1lLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBxV2lyZVkoYm90dG9tV2lyZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJkb3RcIjoge1xuXHRcdFx0XHRcdHZhciBjZWxsWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgY2VsbFkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVEb3RTVkcoY2VsbFgsIGNlbGxZLCBnYXRlLm5hbWUsIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IHFXaXJlWShib3R0b21XaXJlKSArIG9wdGlvbnMuZG90UmFkaXVzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIm5kb3RcIjoge1xuXHRcdFx0XHRcdHZhciBjZWxsWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgY2VsbFkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVJbnZlcnRlZERvdFNWRyhjZWxsWCwgY2VsbFksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gcVdpcmVZKGJvdHRvbVdpcmUpICsgb3B0aW9ucy5kb3RSYWRpdXM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiZ2F1Z2VcIjoge1xuXHRcdFx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVHYXVnZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Ly8gcGFyYW1zXG5cdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyAmJiB3aXJlID09IG1heFdpcmUpIHtcblx0XHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblx0XHRcdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXG5cdFx0XHRcdHZhciBwYXJhbXNTdHIgPSBcIlwiO1xuXHRcdFx0XHR2YXIgcGFyYW1zQ291bnQgPSAwO1xuXHRcdFx0XHRmb3IodmFyIHBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0aWYocGFyYW1zU3RyKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNTdHIgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBwYXJhbVZhbCA9IGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXTtcblx0XHRcdFx0XHRpZih0eXBlb2YgcGFyYW1WYWwgPT0gXCJzdHJpbmdcIiAmJiBwYXJhbVZhbC5tYXRjaCgvXltcXCtcXC1dP1xcZCpcXC4/XFxkKyg/OltFZV1bXFwrXFwtXT9cXGQrKT8kLykpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsID0gcGFyc2VGbG9hdChwYXJhbVZhbCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYodHlwZW9mIHBhcmFtVmFsID09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsID0gbWF0aC5yb3VuZChwYXJhbVZhbCwgMyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cGFyYW1zU3RyICs9IHBhcmFtVmFsO1xuXHRcdFx0XHRcdHBhcmFtc0NvdW50Kys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihwYXJhbXNTdHIubGVuZ3RoID4gMjYpIHtcblx0XHRcdFx0XHRwYXJhbXNTdHIgPSBcIihcIiArIHBhcmFtc0NvdW50ICsgXCIgcGFyYW1zKVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLXBhcmFtc1xcXCIgeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy5wYXJhbVRleHRIZWlnaHQpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+XCIgKyBwYXJhbXNTdHIgKyBcIjwvdGV4dD5cIjtcblx0XHRcdH1cblxuXHRcdH0pO1xuXG5cdFx0Ly8gbWVhc3VyZVxuXHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSkge1xuXHRcdFx0dmFyIGxpbmtYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0XHR2YXIgbGlua1kxID0gY0xpbmtUb3BZO1xuXHRcdFx0dmFyIGxpbmtZMiA9IGNXaXJlWShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKTtcblxuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbGluay1jXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWxpbmstY1xcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDE9XFxcIlwiICsgKGxpbmtYIC0gKG9wdGlvbnMuY0Fycm93U2l6ZSAvIDIpKSArIFwiXFxcIiB5MT1cXFwiXCIgKyAobGlua1kyIC0gb3B0aW9ucy5jQXJyb3dTaXplKSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWxpbmstY1xcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDE9XFxcIlwiICsgKGxpbmtYICsgKG9wdGlvbnMuY0Fycm93U2l6ZSAvIDIpKSArIFwiXFxcIiB5MT1cXFwiXCIgKyAobGlua1kyIC0gb3B0aW9ucy5jQXJyb3dTaXplKSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtbGFiZWxcXFwiIHg9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeT1cXFwiXCIgKyAobGlua1kyICsgb3B0aW9ucy53aXJlVGV4dEhlaWdodCkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcImhhbmdpbmdcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5cIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdC8vIGNvbnRyb2xsZWQgYnkgY2xhc3NpYyByZWdpc3RlclxuXHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0dmFyIGxpbmtYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0XHR2YXIgbGlua1kxID0gY0xpbmtUb3BZO1xuXHRcdFx0dmFyIGxpbmtZMiA9IGNXaXJlWShnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpO1xuXG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rLWNcXFwiIHgxPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmtZMSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0c3ZnICs9IFwiPGNpcmNsZSBjbGFzcz1cXFwicWMtZ2F0ZS1kb3QtY1xcXCIgY3g9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgY3k9XFxcIlwiICsgbGlua1kyICsgXCJcXFwiIHI9XFxcIlwiICsgb3B0aW9ucy5kb3RSYWRpdXMgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHk9XFxcIlwiICsgKGxpbmtZMiArIG9wdGlvbnMud2lyZVRleHRIZWlnaHQpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+PT0gXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0c3ZnICs9IFwiPC9nPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlUGxhY2Vob2xkZXIoY29sSW5kZXgsIHdpcmUpIHtcblx0XHR2YXIgc3ZnID0gXCJcIjtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCArIG9wdGlvbnMuaFNwYWNpbmc7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nO1xuXHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KSAtIG9wdGlvbnMuaFNwYWNpbmc7XG5cdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSkgLSBvcHRpb25zLnZTcGFjaW5nO1xuXG5cdFx0aWYod2lyZSA9PSBudW1Sb3dzKSB7XG5cdFx0XHRnYXRlSGVpZ2h0ID0gb3B0aW9ucy52U3BhY2luZztcblx0XHR9XG5cblx0XHRpZihjb2xJbmRleCA9PSBudW1Db2xzKSB7XG5cdFx0XHRnYXRlV2lkdGggPSBvcHRpb25zLmhTcGFjaW5nO1xuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLXBsYWNlaG9sZGVyXFxcIiBkYXRhLXJvdz1cXFwiXCIgKyB3aXJlICsgXCJcXFwiIGRhdGEtY29sPVxcXCJcIiArIGNvbEluZGV4ICsgXCJcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJub25lXFxcIiBmaWxsPVxcXCJ0cmFuc3BhcmVudFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIwXFxcIiAvPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlSGFuZGxlKGdhdGUsIGNvbEluZGV4LCB3aXJlKSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0c3ZnICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtaGFuZGxlXFxcIiBkYXRhLWlkPVxcXCJcIiArIGdhdGUuaWQgKyBcIlxcXCIgZGF0YS1nYXRlPVxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIiBkYXRhLXJvdz1cXFwiXCIgKyB3aXJlICsgXCJcXFwiIGRhdGEtY29sPVxcXCJcIiArIGNvbEluZGV4ICsgXCJcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJub25lXFxcIiBmaWxsPVxcXCJ0cmFuc3BhcmVudFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIwXFxcIiAvPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlQ2FudmFzKGNvbEluZGV4LCB3aXJlLCBjbGFzc05hbWUsIGNhbnZhc0lkKSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cblx0XHRzdmcgKz0gXCI8ZyBjbGFzcz1cXFwiXCIgKyAoY2xhc3NOYW1lIHx8IFwicWMtY2FudmFzLWdyb3VwXCIpICsgXCJcXFwiIGRhdGEtcm93PVxcXCJcIiArIHdpcmUgKyBcIlxcXCI+XCI7XG5cdFx0c3ZnICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWNhbnZhcy1ib3hcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJ0cmFuc3BhcmVudFxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRzdmcgKz0gXCI8Zm9yZWlnbk9iamVjdCBjbGFzcz1cXFwicWMtY2FudmFzLW9iamVjdFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIj5cIjtcblx0XHRzdmcgKz0gXCI8ZGl2IHN0eWxlPVxcXCJwb3NpdGlvbjpyZWxhdGl2ZTtcXFwiPlwiO1xuXHRcdHN2ZyArPSBcIjxjYW52YXMgaWQ9XFxcIlwiICsgY2FudmFzSWQgKyBcIi1cIiArIHdpcmUgKyBcIlxcXCIgY2xhc3M9XFxcIlwiICsgY2FudmFzSWQgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiPlwiO1xuXHRcdHN2ZyArPSBcIjwvY2FudmFzPlwiO1xuXHRcdHN2ZyArPSBcIjwvZGl2PlwiO1xuXHRcdHN2ZyArPSBcIjwvZm9yZWlnbk9iamVjdD5cIjtcblx0XHRzdmcgKz0gXCI8L2c+XCI7XG5cblx0XHRyZXR1cm4gc3ZnO1xuXHR9XG5cblxuXHRmdW5jdGlvbiBlc2NhcGVIdG1sKHN0cikge1xuXHRcdHJldHVybiBzdHJcblx0XHRcdC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcblx0XHRcdC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKVxuXHRcdFx0LnJlcGxhY2UoLz4vZywgXCImZ3Q7XCIpXG5cdFx0XHQucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcblx0XHRcdC5yZXBsYWNlKC8nL2csIFwiJiMwMzk7XCIpO1xuXHR9XG5cblx0Ly8gXG5cdC8vIC0gZ2F0ZUdhbGxlcnkgYW5kIGN1c3RvbUdhdGVHYWxsZXJ5IGlzIHVzZWQgZm9yIHRvb2xib3ggcGFsZXR0ZSBpbiBkcmFnICYgZHJvcCBlZGl0b3IuXG5cdC8vIC0gZ2F0ZUdhbGxlcnlSYXcgaXMgdXNlZCB0byBnZW5lcmF0ZSBsaXN0IG9mIGFsbCBnYXRlIHN5bWJvbHMgdGhhdCBsb29rIHRoZSBzYW1lIGFzIGluIGRpYWdyYW1cblx0Ly8gICAoZ2F0ZSBzeW1ib2wgb25seSB3aXRob3V0IGNvbnRyb2xsaW5nIHdpcmUpLiBVc2VmdWwgdG8gZ2VuZXJhdGUgdHJhaW5pbmcgc2V0IGZvciBjaXJjdWl0IGltYWdlIHJlY29nbml0aW9uLlxuXHQvL1xuXHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5IHx8IG9wdGlvbnMuZ2F0ZUdhbGxlcnlSYXcgfHwgb3B0aW9ucy5jdXN0b21HYXRlR2FsbGVyeSkge1xuXHRcdHZhciBnYXRlTGlzdCA9IFtdO1xuXG5cdFx0Ly8gYmFzaWMgZ2F0ZXNcblx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5IHx8IG9wdGlvbnMuZ2F0ZUdhbGxlcnlSYXcpIHtcblxuXHRcdFx0dmFyIHVuaXEgPSBbXTtcblx0XHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5iYXNpY0dhdGVzKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0dmFyIGRpbmZvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnYXRlLmRyYXdpbmdJbmZvIHx8IHsgY29ubmVjdG9yczogW1wiYm94XCJdIH0pKTtcblx0XHRcdFx0aWYoZGluZm8uY29ubmVjdG9ycykge1xuXHRcdFx0XHRcdHZhciBnYXRlTGFiZWwgPSBkaW5mby5sYWJlbCB8fCBnYXRlTmFtZTtcblx0XHRcdFx0XHR2YXIgY29ubmVjdG9yID0gZGluZm8uY29ubmVjdG9ycyA/IGRpbmZvLmNvbm5lY3RvcnNbZGluZm8uY29ubmVjdG9ycy5sZW5ndGggLSAxXSA6IFwiYm94XCI7XG5cblx0XHRcdFx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRcdFx0XHQvLyBEcmF3IFwic3dhcFwiLCBcImN1MVwiIGFuZCBcImN6XCIgZ2F0ZXMgYXMgYm94XG5cdFx0XHRcdFx0XHRpZihjb25uZWN0b3IgPT0gXCJ4XCIgfHwgY29ubmVjdG9yID09IFwiZG90XCIpIHtcblx0XHRcdFx0XHRcdFx0Y29ubmVjdG9yID0gXCJib3hcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgdW5pcVN0ciA9IGdhdGVMYWJlbCArIFwifFwiICsgY29ubmVjdG9yO1xuXG5cdFx0XHRcdFx0aWYodW5pcS5pbmRleE9mKHVuaXFTdHIpIDwgMCAmJiBnYXRlTmFtZSAhPSBcImNjeFwiKSB7XG5cdFx0XHRcdFx0XHR1bmlxLnB1c2godW5pcVN0cik7XG5cblx0XHRcdFx0XHRcdHZhciBzdmcgPSBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdFx0XHRcdFx0c3ZnICs9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIj8+XCI7XG5cdFx0XHRcdFx0XHRcdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWdhdGUtZ2FsbGVyeS1pdGVtXFxcIiBkYXRhLWdhdGU9XFxcIlwiICsgZXNjYXBlSHRtbChnYXRlTmFtZSkgKyBcIlxcXCIgZGF0YS1jb250ZW50PVxcXCJcIiArIGVzY2FwZUh0bWwoZ2F0ZS5kZXNjcmlwdGlvbikgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgb3B0aW9ucy5jZWxsV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIG9wdGlvbnMuY2VsbEhlaWdodCArIFwiXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+XCI7XG5cdFx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlU1ZHKDAsIDAsIGdhdGVOYW1lLCBnYXRlTGFiZWwsIGNvbm5lY3RvciwgISFvcHRpb25zLmdhdGVHYWxsZXJ5LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRzdmcgKz0gXCI8L3N2Zz5cIjtcblxuXHRcdFx0XHRcdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSkge1xuXHRcdFx0XHRcdFx0XHRnYXRlTGlzdC5wdXNoKHN2Zyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRnYXRlTGlzdC5wdXNoKHsgbmFtZTogZ2F0ZU5hbWUsIHN2Zzogc3ZnIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBzcGVjaWFsIGl0ZW06IGRvdFxuXHRcdFx0dmFyIGRvdHN2ZyA9IFwiXCI7XG5cdFx0XHRpZighb3B0aW9ucy5lbWJlZGRlZCkge1xuXHRcdFx0XHRkb3RzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdFx0ZG90c3ZnICs9XCI8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcXFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cXFwiIFxcXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcXFwiPlwiO1xuXHRcdFx0fVxuXHRcdFx0ZG90c3ZnICs9IFwiPHN2ZyBjbGFzcz1cXFwicWMtZ2F0ZS1nYWxsZXJ5LWl0ZW1cXFwiIGRhdGEtZ2F0ZT1cXFwiZG90XFxcIiBkYXRhLWNvbnRlbnQ9XFxcIkNvbnRyb2xcXFwiIHdpZHRoPVxcXCJcIiArIG9wdGlvbnMuY2VsbFdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXHRcdFx0ZG90c3ZnID0gZG90c3ZnICsgZ2F0ZVNWRygwLCAwLCBcImRvdFwiLCBcImRvdFwiLCBcImRvdFwiLCAhIW9wdGlvbnMuZ2F0ZUdhbGxlcnksIGZhbHNlKTtcblx0XHRcdGRvdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXG5cdFx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2goZG90c3ZnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2goeyBuYW1lOiBcImRvdFwiLCBzdmc6IGRvdHN2ZyB9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3BlY2lhbCBpdGVtOiBpbnZlcnRlZCBkb3Rcblx0XHRcdHZhciBuZG90c3ZnID0gXCJcIjtcblx0XHRcdGlmKCFvcHRpb25zLmVtYmVkZGVkKSB7XG5cdFx0XHRcdG5kb3RzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdFx0bmRvdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHRcdH1cblx0XHRcdG5kb3RzdmcgKz0gXCI8c3ZnIGNsYXNzPVxcXCJxYy1nYXRlLWdhbGxlcnktaXRlbVxcXCIgZGF0YS1nYXRlPVxcXCJuZG90XFxcIiBkYXRhLWNvbnRlbnQ9XFxcIkNvbnRyb2xcXFwiIHdpZHRoPVxcXCJcIiArIG9wdGlvbnMuY2VsbFdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXHRcdFx0bmRvdHN2ZyA9IG5kb3RzdmcgKyBnYXRlU1ZHKDAsIDAsIFwibmRvdFwiLCBcIm5kb3RcIiwgXCJuZG90XCIsICEhb3B0aW9ucy5nYXRlR2FsbGVyeSwgZmFsc2UpO1xuXHRcdFx0bmRvdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXG5cdFx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2gobmRvdHN2Zyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKHsgbmFtZTogXCJkb3RcIiwgc3ZnOiBuZG90c3ZnIH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGN1c3RvbSBnYXRlc1xuXHRcdGlmKG9wdGlvbnMuY3VzdG9tR2F0ZUdhbGxlcnkpIHtcblx0XHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5jdXN0b21HYXRlcykge1xuXHRcdFx0XHR2YXIgc3ZnID0gXCJcIjtcblx0XHRcdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdFx0XHRzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdFx0XHRzdmcgKz1cIjwhRE9DVFlQRSBzdmcgUFVCTElDIFxcXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlxcXCIgXFxcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFxcXCI+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3ZnICs9IFwiPHN2ZyBjbGFzcz1cXFwicWMtY3VzdG9tLWdhdGUtZ2FsbGVyeS1pdGVtXFxcIiBkYXRhLWdhdGU9XFxcIlwiICsgZ2F0ZU5hbWUgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgKG9wdGlvbnMuY2VsbFdpZHRoICogMikgKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIG9wdGlvbnMuY2VsbEhlaWdodCArIFwiXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+XCI7XG5cdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVTVkcoMCwgMCwgZ2F0ZU5hbWUsIGdhdGVOYW1lLCBcInJlY3RcIiwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0c3ZnICs9IFwiPC9zdmc+XCI7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2goc3ZnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZ2F0ZUxpc3Q7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdHN2ZyArPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCI/PlwiO1xuXHRcdFx0c3ZnICs9XCI8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcXFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cXFwiIFxcXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcXFwiPlwiO1xuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWNpcmN1aXRcXFwiIHdpZHRoPVxcXCJcIiArIHRvdGFsV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIHRvdGFsSGVpZ2h0ICsgXCJcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj5cIjtcblxuXHRcdGlmKG9wdGlvbnMucGxhY2Vob2xkZXJzKSB7XG5cdFx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8PSBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDw9IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0XHRzdmcgKz0gZHJhd0dhdGVQbGFjZWhvbGRlcihjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUXVhbnR1bSB3aXJlc1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBudW1Sb3dzOyB3aXJlKyspIHtcblx0XHRcdHZhciB3aXJlWSA9IHFXaXJlWSh3aXJlKTtcblx0XHRcdHZhciBpbml0U3ltYm9sID0gXCIwXCI7XG5cdFx0XHRpZihvcHRpb25zLmN1c3RvbUdhdGUpIHtcblx0XHRcdFx0aW5pdFN5bWJvbCA9IHF1Yml0TGV0dGVyKHdpcmUsIG51bVJvd3MpO1xuXHRcdFx0fVxuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtaW5pdFxcXCIgeD1cXFwiMFxcXCIgeT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiPnxcIiArIGluaXRTeW1ib2wgKyBcIuKfqTwvdGV4dD5cIjtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlXFxcIiB4MT1cXFwiXCIgKyBvcHRpb25zLndpcmVNYXJnaW4gKyBcIlxcXCIgeDI9XFxcIlwiICsgdG90YWxXaXJlV2lkdGggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMud2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiXCIgKyBvcHRpb25zLndpcmVXaWR0aCArIFwiXFxcIiAvPlwiO1xuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtbGFiZWxcXFwiIHg9XFxcIlwiICsgb3B0aW9ucy53aXJlTWFyZ2luICsgXCJcXFwiIHk9XFxcIlwiICsgKHdpcmVZIC0gKG9wdGlvbnMud2lyZVRleHRIZWlnaHQqMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5xXCIgKyB3aXJlICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gQ2xhc3NpY2FsIHdpcmVzXG5cdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0XHR2YXIgd2lyZVkgPSBjV2lyZVkoY3JlZ05hbWUpO1xuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtaW5pdFxcXCIgeD1cXFwiMFxcXCIgeT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiPjA8L3RleHQ+XCI7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1jXFxcIiB4MT1cXFwiXCIgKyBvcHRpb25zLndpcmVNYXJnaW4gKyBcIlxcXCIgeDI9XFxcIlwiICsgdG90YWxXaXJlV2lkdGggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuY1dpcmVDb2xvciArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIG9wdGlvbnMud2lyZU1hcmdpbiArIFwiXFxcIiB5PVxcXCJcIiArICh3aXJlWSAtIChvcHRpb25zLndpcmVUZXh0SGVpZ2h0ICogMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5cIiArIGNyZWdOYW1lICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gR2F0ZXNcblx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0XHRpZihnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdFx0XHRzdmcgKz0gZHJhd0dhdGUoZ2F0ZSwgY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBHYXRlIGhhbmRsZXMgKGZvciBkcmFnICYgZHJvcCBlZGl0b3IpXG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdFx0aWYob3B0aW9ucy5wbGFjZWhvbGRlcnMpIHtcblx0XHRcdFx0XHRcdHN2ZyArPSBkcmF3R2F0ZUhhbmRsZShnYXRlLCBjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFBsYWNlIGZvciBibG9jaCBzcGhlcmUgb24gZWFjaCBxdWFudHVtIHdpcmVcblx0XHRpZihvcHRpb25zLmRyYXdCbG9jaFNwaGVyZXMpIHtcblx0XHRcdHZhciBjdXJyZW50Q29sID0gdG90YWxDb2xzIC0gMTtcblx0XHRcdGlmKG9wdGlvbnMuZHJhd0h5YnJpZCkge1xuXHRcdFx0XHRjdXJyZW50Q29sIC09IDI7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRcdHN2ZyArPSBkcmF3R2F0ZUNhbnZhcyhjdXJyZW50Q29sLCB3aXJlLCBcInFjLWJsb2NoLWdyb3VwXCIsIFwicWMtYmxvY2gtY2FudmFzXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGh5YnJpZCBxdWFudHVtLWNsYXNzaWNhbFxuXHRcdGlmKG9wdGlvbnMuZHJhd0h5YnJpZCkge1xuXHRcdFx0dmFyIGN1cnJlbnRDb2wgPSB0b3RhbENvbHMgLSAyO1xuXHRcdFx0Ly8gY29ubmVjdG9yXG5cdFx0XHR2YXIgY29sSW5kZXggPSBjdXJyZW50Q29sO1xuXG5cdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCkgKyBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1g7XG5cdFx0XHR2YXIgZ2F0ZVkgPSBxR2F0ZVkoMCkgKyBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1k7XG5cdFx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggLSAoMiAqIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWCk7XG5cdFx0XHR2YXIgZ2F0ZUhlaWdodCA9ICgocUdhdGVZKG51bVJvd3MgKyBudW1DcmVncyAtIDEpICsgb3B0aW9ucy5jZWxsSGVpZ2h0KSAtIGdhdGVZKSAtIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWTtcblxuXHRcdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChnYXRlV2lkdGggLyAyKTtcblx0XHRcdHZhciBjZW50ZXJZID0gZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpO1xuXG5cdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQ7XG5cblx0XHRcdC8vIGNvc3Rcblx0XHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1jb3N0LWhcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiByeD1cXFwiOFxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1sYWJlbC1oXFxcIiB4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJtaWRkbGVcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZpbGw9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHRyYW5zZm9ybT1cXFwicm90YXRlKC05MCwgXCIgKyBjZW50ZXJYICsgXCIsIFwiICsgY2VudGVyWSArIFwiKVxcXCI+Q29zdDwvdGV4dD5cIjtcblxuXG5cdFx0XHR2YXIgZ2F0ZTJYID0gZ2V0Q2VsbFgoY29sSW5kZXggKyAxKSArIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWDtcblx0XHRcdHZhciBjZW50ZXIyWCA9IGdhdGUyWCArIChnYXRlV2lkdGggLyAyKTtcblxuXHRcdFx0Ly8gYXJyb3dcblx0XHRcdHN2ZyArPSBcIjxtYXJrZXIgaWQ9XFxcInFjLWFycm93LWhlYWRcXFwiIG9yaWVudD1cXFwiYXV0b1xcXCIgbWFya2VyV2lkdGg9XFxcIjhcXFwiIG1hcmtlckhlaWdodD1cXFwiMTBcXFwiIHJlZlg9XFxcIjhcXFwiIHJlZlk9XFxcIjVcXFwiPjxwYXRoIGQ9XFxcIk0wLDAgVjEwIEw4LDUgWlxcXCIgZmlsbD1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIvPjwvbWFya2VyPlwiO1xuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWxpbmstaFxcXCIgeDE9XFxcIlwiICsgKGdhdGVYICsgZ2F0ZVdpZHRoKSArIFwiXFxcIiB4Mj1cXFwiXCIgKyBnYXRlMlggKyBcIlxcXCIgeTE9XFxcIlwiICsgY2VudGVyWSArXCJcXFwiIHkyPVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgbWFya2VyLWVuZD1cXFwidXJsKCNxYy1hcnJvdy1oZWFkKVxcXCIgLz5cIjtcblxuXG5cdFx0XHQvLyBvcHRpbWl6ZXJcblx0XHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1vcHRpbWl6ZXItaFxcXCIgeD1cXFwiXCIgKyBnYXRlMlggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiByeD1cXFwiOFxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1sYWJlbC1oXFxcIiB4PVxcXCJcIiArIGNlbnRlcjJYICsgXCJcXFwiIHk9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmaWxsPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtOTAsIFwiICsgY2VudGVyMlggKyBcIiwgXCIgKyBjZW50ZXJZICsgXCIpXFxcIj5PcHRpbWl6ZXI8L3RleHQ+XCI7XG5cblx0XHRcdC8vIGxpbmtcblx0XHRcdHZhciBsaW5rWCA9IGNlbnRlcjJYO1xuXHRcdFx0dmFyIGxpbmtZMSA9IGNMaW5rVG9wWTtcblx0XHRcdHZhciBsaW5rWTIgPSBoeWJyaWRXaXJlWTtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmtZMSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0Ly8gQ29ubmVjdCBhbGwgZ2xvYmFsbHkgcGFyYW1ldHJpemVkIGdhdGVzXG5cdFx0XHR2YXIgaFdpcmVYID0gMDtcblx0XHRcdHZhciBnbG9iYWxQYXJhbXNJbmZvID0gdGhpcy5maW5kR2xvYmFsUGFyYW1zKCk7XG5cdFx0XHRpZihnbG9iYWxQYXJhbXNJbmZvLmdsb2JhbFBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0aFdpcmVYID0gZ2V0Q2VsbFgoZ2xvYmFsUGFyYW1zSW5mby5jZWxsc1swXVswXSkgKyBvcHRpb25zLmNlbGxXaWR0aCArIChvcHRpb25zLmhTcGFjaW5nIC8gMik7XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBnbG9iYWxQYXJhbXNJbmZvLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGNlbGwgPSBnbG9iYWxQYXJhbXNJbmZvLmNlbGxzW2ldO1xuXG5cdFx0XHRcdFx0dmFyIGxpbmsyWCA9IGdldENlbGxYKGNlbGxbMF0pICsgb3B0aW9ucy5jZWxsV2lkdGggKyAob3B0aW9ucy5oU3BhY2luZyAvIDIpO1xuXHRcdFx0XHRcdHZhciBsaW5rMlkyID0gZ2V0Q2VsbFkoY2VsbFsxXSkgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nIC0gKG9wdGlvbnMucGFyYW1UZXh0SGVpZ2h0IC8gMik7XG5cdFx0XHRcdFx0dmFyIGxpbmsyWTEgPSBoeWJyaWRXaXJlWTtcblx0XHRcdFx0XHR2YXIgY2VsbEJvdHRvbVJpZ2h0WCA9IGdldENlbGxYKGNlbGxbMF0pICsgb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0XHRcdFx0dmFyIGNlbGxCb3R0b21SaWdodFkgPSBnZXRDZWxsWShjZWxsWzFdKSArIG9wdGlvbnMuY2VsbEhlaWdodCArIChvcHRpb25zLnBhcmFtVGV4dEhlaWdodCAqIDIpICsgNDtcblx0XHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBsaW5rMlggKyBcIlxcXCIgeDI9XFxcIlwiICsgbGluazJYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmsyWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rMlkyICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLWRhc2hhcnJheT1cXFwiNFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdFx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGxpbmsyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBjZWxsQm90dG9tUmlnaHRYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmsyWTIgK1wiXFxcIiB5Mj1cXFwiXCIgKyBjZWxsQm90dG9tUmlnaHRZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLWRhc2hhcnJheT1cXFwiNFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiBtYXJrZXItZW5kPVxcXCJ1cmwoI3FjLWFycm93LWhlYWQpXFxcIiAvPlwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHdpcmVZID0gaHlicmlkV2lyZVk7XG5cdFx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGhXaXJlWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBjZW50ZXIyWCArIFwiXFxcIiB5MT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiB5Mj1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiXCIgKyBvcHRpb25zLndpcmVXaWR0aCArIFwiXFxcIiAvPlwiO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBObyBnYXRlcyB3aXRoIGdsb2JhbCBwYXJhbXNcblx0XHRcdFx0aFdpcmVYID0gZ2V0Q2VsbFgodG90YWxXaXJlQ29scyk7XG5cblx0XHRcdFx0dmFyIHdpcmVZID0gaHlicmlkV2lyZVk7XG5cdFx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGNlbnRlcjJYICsgXCJcXFwiIHgyPVxcXCJcIiArIGhXaXJlWCArIFwiXFxcIiB5MT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiB5Mj1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiXCIgKyBvcHRpb25zLndpcmVXaWR0aCArIFwiXFxcIiAgbWFya2VyLWVuZD1cXFwidXJsKCNxYy1hcnJvdy1oZWFkKVxcXCIgLz5cIjtcblx0XHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdhcm5pbmctaFxcXCIgeD1cXFwiXCIgKyAoaFdpcmVYIC0gNSkgKyBcIlxcXCIgeT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwiZW5kXFxcIj4/PC90ZXh0PlwiO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0c3ZnICs9IFwiPC9zdmc+XCI7XG5cdH1cblxuXHRyZXR1cm4gc3ZnO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUWlza2l0ID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIHZlcnNpb25TdHIgPSBvcHRpb25zLnZlcnNpb25TdHI7XG5cdHZhciBwcm92aWRlck5hbWUgPSBvcHRpb25zLnByb3ZpZGVyTmFtZTtcblx0dmFyIGJhY2tlbmROYW1lID0gb3B0aW9ucy5iYWNrZW5kTmFtZTtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gb3B0aW9ucy5oeWJyaWQ7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHByb3ZpZGVyTmFtZSA9IHByb3ZpZGVyTmFtZSB8fCBcIkFlclwiO1xuXG5cdGJhY2tlbmROYW1lID0gYmFja2VuZE5hbWUgfHwgXCJcIjtcblx0aWYoIWJhY2tlbmROYW1lICYmIHByb3ZpZGVyTmFtZSA9PSBcIkFlclwiKSB7XG5cdFx0YmFja2VuZE5hbWUgPSBcInFhc21fc2ltdWxhdG9yXCI7XG5cdH1cblxuXHRzaG90cyA9IHNob3RzIHx8IDEwMjQ7XG5cblx0dmFyIHZlcnNpb24gPSBwYXJzZUZsb2F0KHZlcnNpb25TdHIgfHwgXCIwLjdcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDAuNztcblx0fVxuXG5cdGlmKHR5cGVvZiBoeWJyaWQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGh5YnJpZCA9IHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcWlza2l0ID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMSAmJiBjbGluZVswXSAhPSBcIiNcIikge1xuXHRcdFx0XHRxaXNraXQgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0cWlza2l0ICs9IGNsaW5lO1xuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCAmJiBoeWJyaWQpIHtcblx0XHRcdFx0cmV0dXJuIFwicGFyYW1zW1wiICsgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpICsgXCJdXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGp1c3RJZGVudGF0aW9uID0gZnVuY3Rpb24oYWRkU3RyLCBpZGVudCkge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXG5cdFx0Ly8gYWRkIHVzZXIgZGVmaW5lZCBjb3N0IGZ1bmN0aW9uIHdpdGggcHJvcGVyIGlkZW50YXRpb25cblx0XHR2YXIgY2ZMaW5lcyA9IGFkZFN0ci5zcGxpdChcIlxcblwiKTtcblx0XHR2YXIgbWluSWRlbnQgPSAtMTtcblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHZhciB0bXBJZGVudCA9IGNmTGluZS5zZWFyY2goL1xcUy8pO1xuXHRcdFx0aWYodG1wSWRlbnQgPj0gMCAmJiAobWluSWRlbnQgPCAwIHx8IHRtcElkZW50IDwgbWluSWRlbnQpKSB7XG5cdFx0XHRcdG1pbklkZW50ID0gdG1wSWRlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZihtaW5JZGVudCA8IDApIHtcblx0XHRcdG1pbklkZW50ID0gMDtcblx0XHR9XG5cblx0XHR2YXIgYWRkSWRlbnQgPSBcIlwiO1xuXHRcdGlmKG1pbklkZW50IDwgaWRlbnQubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIHRtcCA9IDA7IHRtcCA8IChpZGVudC5sZW5ndGggLSBtaW5JZGVudCk7IHRtcCsrKSB7XG5cdFx0XHRcdGFkZElkZW50ICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0c3RyICs9IGFkZElkZW50ICsgY2ZMaW5lICsgXCJcXG5cIjtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHFpc2tpdCArPSBcImRlZiBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyBcIihxY1wiO1xuXG5cdFx0dmFyIGFyZ2MgPSAwO1xuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciBwYyA9IDA7IHBjIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBwYysrKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdGFyZ2MrKztcblx0XHRcdFx0cWlza2l0ICs9IGNpcmN1aXQucGFyYW1zW3BjXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0cWlza2l0ICs9IFwiLCBcIjtcblx0XHRcdGFyZ2MrKztcblx0XHRcdHFpc2tpdCArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0fVxuXHRcdHFpc2tpdCArPSBcIik6XFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoIWNpcmN1aXRSZXBsYWNlbWVudCkge1xuXHRcdFx0cWlza2l0ICs9IFwiZnJvbSBxaXNraXQgaW1wb3J0IFF1YW50dW1SZWdpc3RlciwgQ2xhc3NpY2FsUmVnaXN0ZXJcXG5cIjtcblx0XHRcdHFpc2tpdCArPSBcImZyb20gcWlza2l0IGltcG9ydCBRdWFudHVtQ2lyY3VpdCwgZXhlY3V0ZSwgXCIgKyBwcm92aWRlck5hbWUgKyBcIlxcblwiO1xuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwiZnJvbSBzY2lweS5vcHRpbWl6ZSBpbXBvcnQgbWluaW1pemVcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlclxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRxaXNraXQgKz0gXCJpbXBvcnQgbnVtcHkgYXMgbnBcXG5cIjtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXG5cdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRxaXNraXQgKz0gXCJzaG90cyA9IFwiICsgc2hvdHMgKyBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblxuXHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRcdHFpc2tpdCArPSBnbG9iYWxQYXJhbU5hbWUgKyBcIiA9IFwiICsgZ2xvYmFsUGFyYW1WYWx1ZSArIFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRxaXNraXQgKz0gXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0XHRcdFx0XHRcdFx0cHJvdmlkZXJOYW1lOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGJhY2tlbmROYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHNob3RzOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRoeWJyaWQ6IG51bGxcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RaXNraXQobmV3T3B0aW9ucywgdXNlZEdhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGlkZW50YXRpb24gPSBcIlwiO1xuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdGlkZW50YXRpb24gPSBcIiAgXCI7XG5cblx0XHRcdFx0cWlza2l0ICs9IFwiZGVmIG9iamVjdGl2ZV9mdW5jdGlvbihwYXJhbXMpOlxcblwiXG5cdFx0XHR9XG5cblx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJxYyA9IFF1YW50dW1DaXJjdWl0KClcXG5cIjtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXG5cdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicSA9IFF1YW50dW1SZWdpc3RlcihcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIsICdxJylcXG5cIjtcblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIGNyZWdOYW1lICsgXCIgPSBDbGFzc2ljYWxSZWdpc3RlcihcIiArICh0aGlzLmNyZWdzW2NyZWdOYW1lXS5sZW5ndGggfHwgMSkgKyBcIiwgJ1wiICsgY3JlZ05hbWUgKyBcIicpXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblxuXHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInFjLmFkZF9yZWdpc3RlcihxKVxcblwiO1xuXHRcdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJxYy5hZGRfcmVnaXN0ZXIoXCIgKyBjcmVnTmFtZSArIFwiKVxcblwiO1xuXHRcdFx0fVxuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XHRcblx0XHRcdHZhciBxaXNraXRSZXBsYWNlbWVudCA9IG51bGw7XG5cdFx0XHR2YXIgcWlza2l0RXF1aXZhbGVudCA9IG51bGw7XG5cdFx0XHR2YXIgcWlza2l0Q29uZGl0aW9uID0gbnVsbDtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcblx0XHRcdFx0cWlza2l0Q29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IG51bGw7XG5cblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0aWYoZ2F0ZURlZil7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQucmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRxaXNraXRSZXBsYWNlbWVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQucmVwbGFjZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdFJlcGxhY2VtZW50Lm1hcChmdW5jdGlvbihyZXBsYWNlbWVudCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbXMgPSBPYmplY3Qua2V5cyhnYXRlLm9wdGlvbnMucGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudFBhcmFtcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VtZW50LnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocmVwbGFjZW1lbnRQYXJhbXMuaW5kZXhPZihwYXJhbSkgPiAtMSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucGFyYW1zW3BhcmFtXSA9IGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1dO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuYWRkR2F0ZShyZXBsYWNlbWVudC5uYW1lLCBjb2x1bW4sIGdhdGUud2lyZXMsIHtwYXJhbXM6IHJlcGxhY2VtZW50LnBhcmFtcywgY29uZGl0aW9uOiBxaXNraXRDb25kaXRpb259KTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmVyc2lvblN0cjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRwcm92aWRlck5hbWU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0YmFja2VuZE5hbWU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHNob3RzOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGh5YnJpZDogbnVsbFxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IHJlcGxhY2VtZW50Q2lyY3VpdC5leHBvcnRUb1Fpc2tpdChuZXdPcHRpb25zLCBmYWxzZSwgdHJ1ZSwgISFleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdC5lcXVpdmFsZW50KXtcblx0XHRcdFx0XHRcdFx0cWlza2l0RXF1aXZhbGVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQuZXF1aXZhbGVudDtcblx0XHRcdFx0XHRcdFx0cWlza2l0RXF1aXZhbGVudC5tYXAoZnVuY3Rpb24oZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVxdWl2YWxlbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVXaXJlcyA9IGVxdWl2YWxlbnQud2lyZXMubGVuZ3RoID4gMSA/IGdhdGUud2lyZXMgOiBnYXRlLndpcmVzW2VxdWl2YWxlbnQud2lyZXNbMF1dO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlcVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdGlmKGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBnYXRlUGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zW2dhdGVQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnYXRlLm9wdGlvbnMucGFyYW1zW2dhdGVQYXJhbU5hbWVdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGVxUGFyYW1OYW1lIGluIGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVxUGFyYW1zW2VxUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZXF1aXZhbGVudC5wYXJhbXNbZXFQYXJhbU5hbWVdLCBnYXRlUGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlcXVpdmFsZW50Q2lyY3VpdC5hZGRHYXRlKGVxdWl2YWxlbnQubmFtZSwgY29sdW1uLCBnYXRlV2lyZXMsIHsgcGFyYW1zOiBlcVBhcmFtcywgY29uZGl0aW9uOiBxaXNraXRDb25kaXRpb24gfSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvdmlkZXJOYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tlbmROYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG90czogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRoeWJyaWQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBlcXVpdmFsZW50Q2lyY3VpdC5leHBvcnRUb1Fpc2tpdChuZXdPcHRpb25zLCBmYWxzZSwgdHJ1ZSwgISFleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFxaXNraXRSZXBsYWNlbWVudCAmJiAhcWlza2l0RXF1aXZhbGVudCkge1xuXHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUgfHwgaW5zaWRlU3VibW9kdWxlIHx8IGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiICBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighcWlza2l0UmVwbGFjZW1lbnQgJiYgIXFpc2tpdEVxdWl2YWxlbnQpIHtcblxuXHRcdFx0XHRcdHZhciBnYXRlTmFtZSA9IGdhdGUubmFtZTtcblxuXHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYodGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXSkge1xuXHRcdFx0XHRcdFx0cWlza2l0ICs9IFwicWMuXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lKXtcblx0XHRcdFx0XHRcdGdhdGVOYW1lID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRnYXRlTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0cWlza2l0ICs9IGdhdGVOYW1lICsgXCIoXCI7XG5cblx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gdGhpcy5jdXN0b21HYXRlc1tnYXRlLm5hbWVdO1xuXG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcInFjXCI7XG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnbnAnIHRvIG1hdGggY29uc3RhbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0gfHwgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdLnRvU3RyaW5nKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwiY3VcIiAmJiAhZ2F0ZVBhcmFtc1tcImdhbW1hXCJdKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIDBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSkge1xuXHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IFwicVtcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cWlza2l0ICs9IGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIltcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiXVwiO1xuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCIpXCI7XHRcdFx0XHRcdFxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIuY19pZihcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyArIFwiLCBcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIilcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKCFjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cblx0XHRcdHZhciBpZGVudGF0aW9uID0gXCJcIjtcblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRpZGVudGF0aW9uID0gXCIgIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihwcm92aWRlck5hbWUgPT0gXCJBZXJcIikge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiYmFja2VuZCA9IEFlci5nZXRfYmFja2VuZCgnXCIgKyBiYWNrZW5kTmFtZSArIFwiJylcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImpvYiA9IGV4ZWN1dGUocWMsIGJhY2tlbmQ9YmFja2VuZFwiO1xuXHRcdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgc2hvdHM9c2hvdHNcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxaXNraXQgKz0gXCIpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJqb2JfcmVzdWx0ID0gam9iLnJlc3VsdCgpXFxuXCI7XG5cblx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImNvdW50cyA9IENvdW50ZXIoam9iX3Jlc3VsdC5nZXRfY291bnRzKHFjKSlcXG5cIjtcblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHFpc2tpdCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaWRlbnRhdGlvbik7XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInByaW50KGpvYl9yZXN1bHQuZ2V0X2NvdW50cyhxYykpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYocHJvdmlkZXJOYW1lID09IFwiSUJNUVwiKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJJQk1RLmxvYWRfYWNjb3VudCgpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJwcm92aWRlciA9IElCTVEuZ2V0X3Byb3ZpZGVyKGh1Yj1cXFwiaWJtLXFcXFwiLCBncm91cD1cXFwib3BlblxcXCIsIHByb2plY3Q9XFxcIm1haW5cXFwiKVxcblwiO1xuXHRcdFx0XHRpZihiYWNrZW5kTmFtZSkge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJiYWNrZW5kID0gcHJvdmlkZXIuZ2V0X2JhY2tlbmQoXFxcIlwiICsgYmFja2VuZE5hbWUgKyBcIlxcXCIpXFxuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCAgcWlza2l0ICs9IGlkZW50YXRpb24gKyBcImJhY2tlbmRzID0gcHJvdmlkZXIuYmFja2VuZHMoKVxcblwiO1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJiYWNrZW5kID0gbGVhc3RfYnVzeShiYWNrZW5kcylcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiam9iID0gZXhlY3V0ZShxYywgYmFja2VuZD1iYWNrZW5kXCI7XG5cdFx0XHRcdGlmKHNob3RzKSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiLCBzaG90cz1zaG90c1wiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHFpc2tpdCArPSBcIilcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImpvYl9yZXN1bHQgPSBqb2IucmVzdWx0KClcXG5cIjtcblxuXHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiY291bnRzID0gQ291bnRlcihqb2JfcmVzdWx0LmdldF9jb3VudHMocWMpKVxcblwiO1xuXHRcdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiXG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWlza2l0ICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpZGVudGF0aW9uKTtcblxuXHRcdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiXG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicHJpbnQoam9iX3Jlc3VsdC5nZXRfY291bnRzKHFjKSlcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcIm1pbmltdW0gPSBtaW5pbWl6ZShvYmplY3RpdmVfZnVuY3Rpb24sIHBhcmFtcywgbWV0aG9kPVxcXCJcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyIDogXCJQb3dlbGxcIikgKyBcIlxcXCIsIHRvbD10b2xlcmFuY2UpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cblxuXHRcdGlmKGFzSnVweXRlcikge1xuXHRcdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0XHRjZWxsczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0XHRzb3VyY2U6IHFpc2tpdCxcblx0XHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHFpc2tpdDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1F1RVNUID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgZGVmaW5lZEZ1bmMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0ZGVmaW5lZEZ1bmMgPSBkZWZpbmVkRnVuYyB8fCBbXTtcblxuXHR2YXIgY2lyY3VpdCA9IG51bGw7XG5cdHZhciBmdW5jdGlvbnMgPSBbXCJ1bml0YXJ5XCIsXCJjb250cm9sbGVkVW5pdGFyeVwiXTtcblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBxdWVzdCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDIgJiYgY2xpbmVbMF0gIT0gXCIvXCIgJiYgY2xpbmVbMV0gIT0gXCIvXCIpIHtcblx0XHRcdFx0cXVlc3QgKz0gXCIvLyBcIjtcblx0XHRcdH1cblx0XHRcdHF1ZXN0ICs9IGNsaW5lO1xuXHRcdFx0cXVlc3QgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0dmFyIGdhdGVzID0gdGhpcy5nYXRlc1tpXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgZ2F0ZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdHZhciBnYXRlID0gZ2F0ZXNbal07XG5cdFx0XHRpZighZ2F0ZSB8fCAhdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0pe1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYodGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mbyAmJiB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXS5leHBvcnRJbmZvLnF1ZXN0KSB7XG5cdFx0XHRcdHZhciBxdWVzdE5hbWUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXS5leHBvcnRJbmZvLnF1ZXN0Lm5hbWU7XG5cdFx0XHRcdGlmKGRlZmluZWRGdW5jLmluY2x1ZGVzKGdhdGUubmFtZSkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihmdW5jdGlvbnMuaW5jbHVkZXMocXVlc3ROYW1lKSB8fCB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXS5leHBvcnRJbmZvLnF1ZXN0LmZ1bmMgKSB7XG5cdFx0XHRcdFx0ZGVmaW5lZEZ1bmMucHVzaChnYXRlLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHF1ZXN0ICs9IFwiUXVyZWcgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgXCIoUXVyZWcgcXViaXRzXCI7XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0cXVlc3QgKz0gXCIsIGNvbnN0IGludCBxXCI7XG5cdFx0XHRxdWVzdCArPSBpO1xuXHRcdH1cblxuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHF1ZXN0ICs9IFwiLCBkb3VibGUgXCIgKyBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cXVlc3QgKz0gXCIpIHtcXG5cIjtcblx0fSBlbHNlIHtcblx0XHRxdWVzdCArPSBcIiNpbmNsdWRlIDxtYXRoLmg+XFxuI2luY2x1ZGUgXFxcIlF1RVNULmhcXFwiXFxuXFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIjaWZuZGVmIE1fUElcXG4jZGVmaW5lIE1fUEkgMy4xNDE1OTI2NVxcbiNlbmRpZlxcblxcblwiO1xuXG5cdFx0dmFyIGN1c3RvbVF1RVNUID0gW107XG5cblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGN1c3RvbVF1RVNULnB1c2goY3VzdG9tQ2lyY3VpdC5leHBvcnRUb1F1RVNUKG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSwgZGVmaW5lZEZ1bmMpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZWZpbmVkRnVuYy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGdhdGVOYW1lID0gZGVmaW5lZEZ1bmNbaV07XG5cdFx0XHR2YXIgcXVlc3ROYW1lID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXS5leHBvcnRJbmZvLnF1ZXN0Lm5hbWU7XG5cdFx0XHRzd2l0Y2gocXVlc3ROYW1lKSB7XG5cdFx0XHRcdGNhc2UgXCJ1bml0YXJ5XCI6XG5cdFx0XHRcdGNhc2UgXCJjb250cm9sbGVkVW5pdGFyeVwiOiB7XG5cdFx0XHRcdFx0bWF0cml4ID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXS5leHBvcnRJbmZvLnF1ZXN0Lm1hdHJpeDtcblx0XHRcdFx0XHR2YXIgcXVlc3RQYXJhbXMgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdLmV4cG9ydEluZm8ucXVlc3QucGFyYW1zO1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwidm9pZCBcIiArIGdhdGVOYW1lICsgXCIoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcVwiO1xuXHRcdFx0XHRcdGlmKHF1ZXN0TmFtZSA9PSBcImNvbnRyb2xsZWRVbml0YXJ5XCIpIHtcblx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiMSwgY29uc3QgaW50IHEyXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChxdWVzdFBhcmFtcykge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBqPTA7IGogPCBxdWVzdFBhcmFtcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgZG91YmxlIFwiICsgcXVlc3RQYXJhbXNbal07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiKSB7XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgQ29tcGxleE1hdHJpeDIgdTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIwYzAgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzBdWzBdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFswXVswXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIwYzEgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzBdWzFdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFswXVsxXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIxYzAgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzFdWzBdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFsxXVswXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIxYzEgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzFdWzFdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFsxXVsxXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBcIiArIHF1ZXN0TmFtZSArIFwiKHF1Yml0cywgcVwiXG5cdFx0XHRcdFx0aWYocXVlc3ROYW1lID09IFwiY29udHJvbGxlZFVuaXRhcnlcIikge1xuXHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIxLCBxMlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWVzdCArPSBcIiwgdSk7XFxufVxcblxcblwiO1xuXHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiB7IHF1ZXN0ICs9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0uZXhwb3J0SW5mby5xdWVzdC5mdW5jICsgXCJcXG5cXG5cIjsgfSBicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY3VzdG9tUXVFU1QubGVuZ3RoOyBpKyspIHtcblx0XHRcdHF1ZXN0ICs9IGN1c3RvbVF1RVNUW2ldO1xuXHRcdH1cblxuXHRcdHF1ZXN0ICs9IFwiaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkge1xcblwiO1xuXHRcdHF1ZXN0ICs9IFwiICAgIFF1RVNURW52IGVudiA9IGNyZWF0ZVF1RVNURW52KCk7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgUXVyZWcgcXViaXRzID0gY3JlYXRlUXVyZWcoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArXCIsIGVudik7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgaW50IG1lYXN1cmVkW1wiICsgY2lyY3VpdC5udW1RdWJpdHMgK1wiXTtcXG5cXG5cIjtcblx0fVxuXG5cdHF1ZXN0ICs9IFwiXFxuXCI7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblxuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRxdWVzdCArPSBcImlmKFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICsgXCI9PVwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSArIFwiKSB7XFxuXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblxuXHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIG1lYXN1cmVkW1wiICsgZ2F0ZS53aXJlc1swXSArIFwiXSA9IG1lYXN1cmUocXViaXRzLCBcIiArIGdhdGUud2lyZXNbMF07XG5cdFx0XHRcdH0gZWxzZSBpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0dmFyIHF1ZXN0TmFtZSA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWVzdC5uYW1lO1xuXHRcdFx0XHRcdHZhciBxdWVzdFBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWVzdC5wYXJhbXM7XG5cblx0XHRcdFx0XHRpZihmdW5jdGlvbnMuaW5jbHVkZXMocXVlc3ROYW1lKSkge1xuXHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgXCIgKyBnYXRlTmFtZSArIFwiKHF1Yml0c1wiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBcIiArIHF1ZXN0TmFtZSArIFwiKHF1Yml0c1wiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgcVwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYocXVlc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHN3aXRjaChxdWVzdE5hbWUpe1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiY29tcGFjdFVuaXRhcnlcIjoge1xuXHRcdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIHF1ZXN0UGFyYW1zLmFscGhhO1xuXHRcdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIHF1ZXN0UGFyYW1zLmJldGE7XG5cdFx0XHRcdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJwaGFzZVNoaWZ0XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYocXVlc3RQYXJhbXMudGhldGEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIHF1ZXN0UGFyYW1zLnRoZXRhO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIHF1Yml0cyA9IFwiICsgZ2F0ZU5hbWUgKyBcIihxdWJpdHNcIjtcblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBwYXJhbURlZltwXTtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBnYXRlUGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRxdWVzdCArPSBcIik7XFxuXCI7XG5cblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCJ9XFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0cXVlc3QgKz0gXCJcXG4gICAgcmV0dXJuIHF1Yml0cztcXG59XFxuXFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0cXVlc3QgKz0gXCJcXG4gICAgZGVzdHJveVF1cmVnKHF1Yml0cywgZW52KTtcXG5cIjtcblx0XHRxdWVzdCArPSBcIiAgICBkZXN0cm95UXVFU1RFbnYoZW52KTtcXG5cIjtcblx0XHRxdWVzdCArPSBcIiAgICByZXR1cm4gMDtcXG59XFxuXCI7XG5cdH1cblxuXHRyZXR1cm4gcXVlc3Q7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1FBU00gPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgY29tcGF0aWJpbGl0eU1vZGUgPSBvcHRpb25zLmNvbXBhdGliaWxpdHlNb2RlO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdGlmKCFjb21wYXRpYmlsaXR5TW9kZSAmJiBzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gZ2xvYmFsUGFyYW1zW25vZGUubmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBxYXNtID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMiAmJiBjbGluZVswXSAhPSBcIi9cIiAmJiBjbGluZVsxXSAhPSBcIi9cIikge1xuXHRcdFx0XHRxYXNtICs9IFwiLy8gXCI7XG5cdFx0XHR9XG5cdFx0XHRxYXNtICs9IGNsaW5lO1xuXHRcdFx0cWFzbSArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHFhc20gKz0gXCJnYXRlIFwiICsgZXhwb3J0QXNHYXRlTmFtZTtcblxuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0cWFzbSArPSBcIihcIjtcblx0XHRcdGZvcih2YXIgcGMgPSAwOyBwYyA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgcGMrKykge1xuXHRcdFx0XHRpZihwYyA+IDApIHtcblx0XHRcdFx0XHRxYXNtICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxYXNtICs9IGNpcmN1aXQucGFyYW1zW3BjXTtcblx0XHRcdH1cblx0XHRcdHFhc20gKz0gXCIpXCI7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGkgPT0gMCkge1xuXHRcdFx0XHRxYXNtICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0cWFzbSArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRxYXNtICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHR9XG5cdFx0cWFzbSArPSBcIlxcbntcXG5cIjtcblx0fSBlbHNlIHtcblx0XHRpZighY2lyY3VpdFJlcGxhY2VtZW50KXtcblx0XHRcdHFhc20gKz0gXCJPUEVOUUFTTSAyLjA7XFxuXCI7XG5cdFx0XHRxYXNtICs9IFwiaW5jbHVkZSBcXFwicWVsaWIxLmluY1xcXCI7XFxuXCI7XG5cdFx0XHRxYXNtICs9IFwicXJlZyBxW1wiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIl07XFxuXCI7XG5cblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdFx0XHRxYXNtICs9IFwiY3JlZyBcIiArIGNyZWdOYW1lICsgXCJbXCIgKyAoY2lyY3VpdC5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoIHx8IDEpICsgXCJdO1xcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbXBhdGliaWxpdHlNb2RlOiBjb21wYXRpYmlsaXR5TW9kZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRxYXNtICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RQVNNKG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0dmFyIHFhc21SZXBsYWNlbWVudCA9IG51bGw7XG5cdFx0XHR2YXIgcWFzbUVxdWl2YWxlbnQgPSBudWxsO1xuXHRcdFx0XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIHFhc21OYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRpZighY29tcGF0aWJpbGl0eU1vZGUpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYpe1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKXtcblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ubmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFhc21OYW1lID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ubmFtZTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbVJlcGxhY2VtZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ucmVwbGFjZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbVJlcGxhY2VtZW50Lm1hcChmdW5jdGlvbihyZXBsYWNlbWVudCl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMoZ2F0ZS5vcHRpb25zLnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudFBhcmFtcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VtZW50LnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW0pe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlcGxhY2VtZW50UGFyYW1zLmluZGV4T2YocGFyYW0pID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnBhcmFtc1twYXJhbV0gPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRDb25kaXRpb24gPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA/IGdhdGUub3B0aW9ucy5jb25kaXRpb24gOiB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50Q2lyY3VpdC5hZGRHYXRlKHJlcGxhY2VtZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZS53aXJlcywgeyBwYXJhbXM6IHJlcGxhY2VtZW50LnBhcmFtcywgY29uZGl0aW9uOiByZXBsYWNlbWVudENvbmRpdGlvbiB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRxYXNtICs9IHJlcGxhY2VtZW50Q2lyY3VpdC5leHBvcnRUb1FBU00obmV3T3B0aW9ucywgZmFsc2UsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbUVxdWl2YWxlbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5lcXVpdmFsZW50O1xuXHRcdFx0XHRcdFx0XHRcdHFhc21FcXVpdmFsZW50Lm1hcChmdW5jdGlvbihlcXVpdmFsZW50KXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcXVpdmFsZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVXaXJlcyA9IGVxdWl2YWxlbnQud2lyZXMubGVuZ3RoID4gMSA/IGdhdGUud2lyZXMgOiBnYXRlLndpcmVzW2VxdWl2YWxlbnQud2lyZXNbMF1dO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVxUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gZXF1aXZhbGVudCBnYXRlIHBhcmFtcyBjYW4gY29udGFpbiB2YXJpYWJsZSBmcm9tIGdhdGUgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEV2YWx1YXRlIGdhdGUncyBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGdhdGVQYXJhbU5hbWUgaW4gZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtc1tnYXRlUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRXZhbHVhdGUgZXF1aXZhbGVudCBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZXFQYXJhbU5hbWUgaW4gZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcVBhcmFtc1tlcVBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGVxdWl2YWxlbnQucGFyYW1zW2VxUGFyYW1OYW1lXSwgZ2F0ZVBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVxQ29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uIDoge307XG5cblx0XHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmFkZEdhdGUoZXF1aXZhbGVudC5uYW1lLCBjb2x1bW4sIGdhdGVXaXJlcywgeyBwYXJhbXM6IGVxUGFyYW1zLCBjb25kaXRpb246IGVxQ29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbXBhdGliaWxpdHlNb2RlOiBjb21wYXRpYmlsaXR5TW9kZVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gZXF1aXZhbGVudENpcmN1aXQuZXhwb3J0VG9RQVNNKG5ld09wdGlvbnMsIFwiXCIsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIXFhc21SZXBsYWNlbWVudCAmJiAhcWFzbUVxdWl2YWxlbnQpIHtcblx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSkge1xuXHRcdFx0XHRcdFx0cWFzbSArPSBcIiAgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0cWFzbSArPSBcImlmKFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICsgXCI9PVwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSArIFwiKSBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZigoIXFhc21SZXBsYWNlbWVudCAmJiAhcWFzbUVxdWl2YWxlbnQpIHx8IGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cblx0XHRcdFx0XHRxYXNtICs9IGNvbXBhdGliaWxpdHlNb2RlID8gZ2F0ZS5uYW1lIDogcWFzbU5hbWU7XG5cblx0XHRcdFx0XHRpZihnYXRlUGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiAoXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbVZhbHVlID0gZ2F0ZVBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUgJiYgIWluc2lkZVN1Ym1vZHVsZSAmJiAhY29tcGF0aWJpbGl0eU1vZGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gcGFyYW1WYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVx0XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdGlmKHcgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSkge1xuXHRcdFx0XHRcdFx0XHRxYXNtICs9IFwiIFwiICsgcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiBxW1wiICsgZ2F0ZS53aXJlc1t3XSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0cWFzbSArPSBcIiAtPiBcIjtcblx0XHRcdFx0XHRcdHFhc20gKz0gZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIFwiW1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCJdXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWFzbSArPSBcIjtcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxYXNtICs9IFwifVxcblxcblwiO1xuXHR9XG5cblx0cmV0dXJuIHFhc207XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9QeXF1aWwgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgbGF0dGljZSA9IG9wdGlvbnMubGF0dGljZTtcblx0dmFyIGFzUVZNID0gb3B0aW9ucy5hc1FWTTtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gb3B0aW9ucy5oeWJyaWQ7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMi4xMlwiKTtcblx0aWYoaXNOYU4odmVyc2lvbikpIHtcblx0XHR2ZXJzaW9uID0gMi4xO1xuXHR9XG5cblx0aWYoIXNob3RzKSB7XG5cdFx0c2hvdHMgPSAxMDI0O1xuXHR9XG5cblx0aWYodHlwZW9mIGh5YnJpZCA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0aHlicmlkID0gdGhpcy5vcHRpb25zID8gISF0aGlzLm9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlKSB7XG5cdFx0XHR2YXIgbnVtcHlzID0gW1wicGlcIiwgXCJzaW5cIiwgXCJjb3NcIiwgXCJ0YW5cIiwgXCJhc2luXCIsIFwiYWNvc1wiLCBcImF0YW5cIl07XG5cdFx0XHRpZihudW1weXMuaW5kZXhPZihub2RlLm5hbWUpID49IDApIHtcblx0XHRcdFx0cmV0dXJuIFwibnAuXCIgKyBub2RlLm5hbWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHNlbGYucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwICYmIGh5YnJpZCkge1xuXHRcdFx0XHRyZXR1cm4gXCJwYXJhbXNbXCIgKyBzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgKyBcIl1cIjtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGFkanVzdElkZW50YXRpb24gPSBmdW5jdGlvbihhZGRTdHIsIGlkZW50KSB7XG5cdFx0dmFyIHN0ciA9IFwiXCI7XG5cblx0XHQvLyBhZGQgdXNlciBkZWZpbmVkIGNvc3QgZnVuY3Rpb24gd2l0aCBwcm9wZXIgaWRlbnRhdGlvblxuXHRcdHZhciBjZkxpbmVzID0gYWRkU3RyLnNwbGl0KFwiXFxuXCIpO1xuXHRcdHZhciBtaW5JZGVudCA9IC0xO1xuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0dmFyIHRtcElkZW50ID0gY2ZMaW5lLnNlYXJjaCgvXFxTLyk7XG5cdFx0XHRpZih0bXBJZGVudCA+PSAwICYmIChtaW5JZGVudCA8IDAgfHwgdG1wSWRlbnQgPCBtaW5JZGVudCkpIHtcblx0XHRcdFx0bWluSWRlbnQgPSB0bXBJZGVudDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmKG1pbklkZW50IDwgMCkge1xuXHRcdFx0bWluSWRlbnQgPSAwO1xuXHRcdH1cblxuXHRcdHZhciBhZGRJZGVudCA9IFwiXCI7XG5cdFx0aWYobWluSWRlbnQgPCBpZGVudC5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgdG1wID0gMDsgdG1wIDwgKGlkZW50Lmxlbmd0aCAtIG1pbklkZW50KTsgdG1wKyspIHtcblx0XHRcdFx0YWRkSWRlbnQgKz0gXCIgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHRzdHIgKz0gYWRkSWRlbnQgKyBjZkxpbmUgKyBcIlxcblwiO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHN0cjtcblx0fTtcblxuXHR2YXIgaW1wb3J0R2F0ZXMgPSBcIlwiO1xuXHR2YXIgZGVmUGFyYW1zID0gW107XG5cdHZhciBkZWZHYXRlcyA9IFwiXCI7XG5cdHZhciBkZWZSdW4gPSBcIlwiO1xuXHR2YXIgZGVmQXJyYXlzID0gXCJcIjtcblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHZhciBnb3RNZWFzdXJlbWVudCA9IGNpcmN1aXQuZ290TWVhc3VyZW1lbnQoKTtcblxuXHR2YXIgZGVmR2F0ZU5hbWVzID0gW107XG5cdHZhciBkZWZDaXJjTmFtZXMgPSBbXTtcblx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mbyAmJiBiYXNpY0dhdGUuZXhwb3J0SW5mby5weXF1aWwpIHtcblx0XHRcdFx0dmFyIHF1aWxJbmZvID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucHlxdWlsO1xuXHRcdFx0XHRpZihxdWlsSW5mby5hcnJheSkge1xuXG5cdFx0XHRcdFx0Ly8gZGVmZ2F0ZVxuXG5cdFx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8ucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCIsIFtcIjtcblx0XHRcdFx0XHRcdHF1aWxJbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lLCBwYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdGlmKHBhcmFtSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1UZXh0ID0gXCJwX1wiICsgcGFyYW1OYW1lICsgXCIgPSBQYXJhbWV0ZXIoXFwnXCIgKyBwYXJhbU5hbWUgKyBcIlxcJylcIjtcblx0XHRcdFx0XHRcdFx0aWYoZGVmUGFyYW1zLmluZGV4T2YocGFyYW1UZXh0KSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRkZWZQYXJhbXMucHVzaChwYXJhbVRleHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHBhcmFtTGlzdCArPSBcIl1cIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkZWZSdW4gKz0gXCJwLmluc3QoXCIgKyBxdWlsSW5mby5uYW1lICsgXCJfZGVmZ2F0ZSlcXG5cIjtcblx0XHRcdFx0XHRkZWZBcnJheXMgKz0gcXVpbEluZm8ubmFtZSArIFwiX2FycmF5ID0gbnAuYXJyYXkoXCIgKyBxdWlsSW5mby5hcnJheSArIFwiKVxcblwiO1xuXHRcdFx0XHRcdGRlZkdhdGVzICs9IHF1aWxJbmZvLm5hbWUgKyBcIl9kZWZnYXRlID0gRGVmR2F0ZShcXCdcIiArIHF1aWxJbmZvLm5hbWUgKyBcIlxcJywgXCIgKyBxdWlsSW5mby5uYW1lICsgXCJfYXJyYXlcIiArIHBhcmFtTGlzdCArIFwiKVxcblwiO1xuXHRcdFx0XHRcdGRlZkdhdGVzICs9IHF1aWxJbmZvLm5hbWUgKyBcIiA9IFwiICsgcXVpbEluZm8ubmFtZSArIFwiX2RlZmdhdGUuZ2V0X2NvbnN0cnVjdG9yKClcXG5cIjtcblxuXHRcdFx0XHRcdGRlZkdhdGVOYW1lcy5wdXNoKHF1aWxJbmZvLm5hbWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBpbXBvcnROYW1lID0gXCJcIjtcblx0XHRcdFx0XHRpZihxdWlsSW5mby5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0dmFyIGJnID0gY2lyY3VpdC5iYXNpY0dhdGVzW3F1aWxJbmZvLnJlcGxhY2VtZW50Lm5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoYmcpIHtcblx0XHRcdFx0XHRcdFx0aWYoYmcuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gYmcuZXhwb3J0SW5mby5weXF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYmcuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBiZy5leHBvcnRJbmZvLnF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IHF1aWxJbmZvLm5hbWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoaW1wb3J0TmFtZSkge1xuXHRcdFx0XHRcdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0aW1wb3J0R2F0ZXMgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW1wb3J0R2F0ZXMgKz0gaW1wb3J0TmFtZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aWwpIHtcblx0XHRcdFx0XHR2YXIgcXVpbEluZm8gPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsO1xuXG5cdFx0XHRcdFx0aWYoIXF1aWxJbmZvLmRlZmdhdGUpIHtcblxuXHRcdFx0XHRcdFx0dmFyIGltcG9ydE5hbWUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0aWYocXVpbEluZm8ucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGJnID0gY2lyY3VpdC5iYXNpY0dhdGVzW3F1aWxJbmZvLnJlcGxhY2VtZW50Lm5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZihiZykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBiZy5leHBvcnRJbmZvLnB5cXVpbC5uYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYmcuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IGJnLmV4cG9ydEluZm8ucXVpbC5uYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gcXVpbEluZm8ubmFtZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoaW1wb3J0TmFtZSkge1xuXHRcdFx0XHRcdFx0XHRpZihpbXBvcnRHYXRlcykge1xuXHRcdFx0XHRcdFx0XHRcdGltcG9ydEdhdGVzICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpbXBvcnRHYXRlcyArPSBpbXBvcnROYW1lO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGJhc2ljIGdhdGUgbm90IHN1cHBvcnRlZCBieSBweXF1aWxcblx0XHRcdFx0XHQvLyBUT0RPOiBhZGQgcHlxdWlsIGRlZmluZSBnYXRlIGNvZGVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Ly8gaW1wb3J0IE1PVkUsIEFORCwgT1IgaWYgY2lyY3VpdCBoYXMgY29uZGl0aW9uc1xuXHR2YXIgZ290Q29uZGl0aW9ucyA9IGNpcmN1aXQuZ290Q2xhc3NpY2FsQ29udHJvbCgpO1xuXHRpZihnb3RDb25kaXRpb25zKSB7XG5cdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdGltcG9ydEdhdGVzICs9IFwiLCBcIjtcblx0XHR9XG5cdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdGltcG9ydEdhdGVzICs9IFwiRkFMU0UsIE5PVCwgT1IsIEFORFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbXBvcnRHYXRlcyArPSBcIk1PVkUsIE5PVCwgSU9SLCBBTkRcIjtcblx0XHR9XG5cdH1cblxuXHR2YXIgaW1wb3J0c0ZvckRlZmdhdGUgPSBcIlwiO1xuXHRpZihkZWZHYXRlcykge1xuXHRcdGlmKHZlcnNpb24gPCAyLjEyKSB7XG5cdFx0XHRpbXBvcnRzRm9yRGVmZ2F0ZSA9IFwiZnJvbSBweXF1aWwucGFyYW1ldGVycyBpbXBvcnQgUGFyYW1ldGVyLCBxdWlsX3NpbiwgcXVpbF9jb3MsIHF1aWxfc3FydCwgcXVpbF9leHAsIHF1aWxfY2lzXFxuZnJvbSBweXF1aWwucXVpbGJhc2UgaW1wb3J0IERlZkdhdGVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW1wb3J0c0ZvckRlZmdhdGUgPSBcImZyb20gcHlxdWlsLnF1aWxhdG9tIGltcG9ydCBQYXJhbWV0ZXIsIHF1aWxfc2luLCBxdWlsX2NvcywgcXVpbF9zcXJ0LCBxdWlsX2V4cCwgcXVpbF9jaXNcXG5mcm9tIHB5cXVpbC5xdWlsYmFzZSBpbXBvcnQgRGVmR2F0ZVwiO1x0XHRcdFxuXHRcdH1cblx0fVxuXG5cdHZhciBweXF1aWwgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAxICYmIGNsaW5lWzBdICE9IFwiI1wiKSB7XG5cdFx0XHRcdHB5cXVpbCArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRweXF1aWwgKz0gY2xpbmU7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0dmFyIGFyZ3MgPSBcIlwiO1xuXHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gXCJxXCIgKyBpO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0cHlxdWlsICs9IFwiZGVmIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKSArIFwiOlxcblwiO1xuXHRcdGluZGVudCA9IFwiICBcIjtcblx0fSBlbHNlIHtcblx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBweXF1aWwuYXBpIGltcG9ydCBRVk1Db25uZWN0aW9uXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIHB5cXVpbC5xdWlsIGltcG9ydCBQcm9ncmFtXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gcHlxdWlsIGltcG9ydCBQcm9ncmFtLCBnZXRfcWNcXG5cIjtcblx0XHR9XG5cblx0XHRpZihpbXBvcnRHYXRlcykge1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBweXF1aWwuZ2F0ZXMgaW1wb3J0IFwiICsgaW1wb3J0R2F0ZXMgKyBcIlxcblwiO1xuXHRcdH1cblx0XHRpZihpbXBvcnRzRm9yRGVmZ2F0ZSkge1xuXHRcdFx0cHlxdWlsICs9IGltcG9ydHNGb3JEZWZnYXRlICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHRweXF1aWwgKz0gXCJmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlXFxuXCI7XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyXFxuXCI7XG5cblx0XHR9XG5cblx0XHRweXF1aWwgKz0gXCJpbXBvcnQgbnVtcHkgYXMgbnBcXG5cIjtcblxuXG5cdFx0aWYoc2hvdHMpIHtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwic2hvdHMgPSBcIiArIHNob3RzICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRweXF1aWwgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoZGVmR2F0ZXMpIHtcblx0XHRcdGRlZlBhcmFtcy5tYXAoZnVuY3Rpb24oZGVmUGFyYW1JdGVtLCBkZWZJbmRleCkge1xuXHRcdFx0XHRpZihkZWZJbmRleCA9PSAwKSB7XG5cdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cHlxdWlsICs9IGRlZlBhcmFtSXRlbSArIFwiXFxuXCI7XG5cdFx0XHR9KTtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IGRlZkFycmF5cyArIFwiXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBkZWZHYXRlcyArIFwiXFxuXCI7XG5cdFx0fVxuXHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUHlxdWlsKG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSk7XG5cdFx0XHRcdFx0XHRkZWZDaXJjTmFtZXMucHVzaCh1c2VkR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0aWYoaHlicmlkKSB7XG5cdFx0aW5kZW50ICs9IFwiICBcIjtcblxuXHRcdHB5cXVpbCArPSBcImRlZiBvYmplY3RpdmVfZnVuY3Rpb24ocGFyYW1zKTpcXG5cIlxuXHR9XG5cblx0aWYodmVyc2lvbiA+PSAyICYmICFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoYXNRVk0gfHwgbGF0dGljZSkge1xuXHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicCA9IFByb2dyYW0oJ1BSQUdNQSBJTklUSUFMX1JFV0lSSU5HIFxcXCJQQVJUSUFMXFxcIicpXFxuXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAgPSBQcm9ncmFtKClcXG5cXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgdG90YWxCaXRzID0gY2lyY3VpdC5jcmVnVG90YWxCaXRzKCk7XG5cdFx0aWYoZ290Q29uZGl0aW9ucykge1xuXHRcdFx0dG90YWxCaXRzICs9IDE7XG5cdFx0fTtcblx0XHRpZih0b3RhbEJpdHMpIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJvID0gcC5kZWNsYXJlKCdybycsIG1lbW9yeV90eXBlPSdCSVQnLCBtZW1vcnlfc2l6ZT1cIiArIHRvdGFsQml0cyArIFwiKVxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAgPSBQcm9ncmFtKClcXG5cXG5cIjtcblx0fVxuXG5cdHB5cXVpbCArPSBkZWZSdW4gPyAoaW5kZW50ICsgZGVmUnVuICsgXCJcXG5cIikgOiBcIlwiO1xuXG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgY2lyY3VpdC5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIHF1aWxJbmZvID0gbnVsbDtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnB5cXVpbCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZURlZi5leHBvcnRJbmZvLnB5cXVpbC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlsSW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWw7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWxJbmZvID0gZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWw7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGlzRGVmR2F0ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHZhciBpc0RlZkNpcmMgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihxdWlsSW5mbykge1xuXHRcdFx0XHRcdFx0aXNEZWZHYXRlID0gZGVmR2F0ZU5hbWVzLmluZGV4T2YocXVpbEluZm8ubmFtZSkgPj0gMDtcblx0XHRcdFx0XHRcdGlzRGVmQ2lyYyA9IGRlZkNpcmNOYW1lcy5pbmRleE9mKHF1aWxJbmZvLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlzRGVmR2F0ZSA9IGRlZkdhdGVOYW1lcy5pbmRleE9mKGdhdGUubmFtZSkgPj0gMDtcblx0XHRcdFx0XHRcdGlzRGVmQ2lyYyA9IGRlZkNpcmNOYW1lcy5pbmRleE9mKGdhdGUubmFtZSkgPj0gMDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgaW5zaWRlQ29udHJvbCA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHQvLyBGbG93IGNvbnRyb2xcblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0aW5zaWRlQ29udHJvbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIHRlc3RCaXQgPSBzZWxmLmNyZWdUb3RhbEJpdHMoKTtcblx0XHRcdFx0XHRcdHZhciBjb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdFx0dmFyIGNvbmRpdGlvblZhbHVlID0gY29uZGl0aW9uLnZhbHVlIHx8IDA7XG5cdFx0XHRcdFx0XHR2YXIgY3JlZ0Jhc2UgPSBzZWxmLmNyZWdCYXNlKGNvbmRpdGlvbi5jcmVnKTtcblxuXHRcdFx0XHRcdFx0aWYoY29uZGl0aW9uVmFsdWUgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1NpemUgPSBzZWxmLmNyZWdzW2NvbmRpdGlvbi5jcmVnXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEZBTFNFKFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdEluZGV4ID0gMDsgYml0SW5kZXggPCBjcmVnU2l6ZTsgYml0SW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE9SKFwiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCIsIFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE5PVChcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKFwiICsgdGVzdEJpdCArIFwiLCBQcm9ncmFtKFwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChNT1ZFKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgMCkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBiaXRJbmRleCA9IDA7IGJpdEluZGV4IDwgY3JlZ1NpemU7IGJpdEluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChJT1Iocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChOT1Qocm9bXCIgKyB0ZXN0Qml0ICsgXCJdKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmlmX3RoZW4ocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCBQcm9ncmFtKFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0U3RyID0gY29uZGl0aW9uVmFsdWUudG9TdHJpbmcoMikuc3BsaXQoXCJcIikucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0Q291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgc2luZ2xlQml0SW5kZXggPSAwO1xuXHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBiaXRWYWwgPSBwYXJzZUludChiaXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0Yml0U3RyW2JpdEluZGV4XSA9IGJpdFZhbDtcblx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGJpdENvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0XHRzaW5nbGVCaXRJbmRleCA9IGJpdEluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0aWYoYml0Q291bnQgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmlmX3RoZW4oXCIgKyAoc2luZ2xlQml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIiwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKHJvW1wiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdLCBQcm9ncmFtKFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEZBTFNFKFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE9SKFwiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCIsIFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEFORChcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiLCBcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihcIiArIHRlc3RCaXQgKyBcIiwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE1PVkUocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCAwKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KElPUihyb1tcIiArIHRlc3RCaXQgKyBcIl0sIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEFORChyb1tcIiArIHRlc3RCaXQgKyBcIl0sIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYocXVpbEluZm8pIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBxdWlsSW5mby5uYW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBnb3RPcGVuQnJhY2UgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihxdWlsSW5mbyAmJiBxdWlsSW5mby5wYXJhbXMgJiYgcXVpbEluZm8ucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdGdvdE9wZW5CcmFjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcXVpbEluZm8ucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnbnAnIHRvIG1hdGggY29uc3RhbnRzXG5cdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1zW3F1aWxJbmZvLnBhcmFtc1twXV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3F1aWxJbmZvLnBhcmFtc1twXV0pO1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIgfHwgaXNEZWZHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5wYXJhbXMgJiYgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0Z290T3BlbkJyYWNlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1zW2dhdGVEZWYucGFyYW1zW3BdXSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1tnYXRlRGVmLnBhcmFtc1twXV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIgfHwgaXNEZWZHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLndpcmVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyIHx8ICFnb3RPcGVuQnJhY2UgfHwgaXNEZWZHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0Z290T3BlbkJyYWNlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwicVwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQpIHx8IDA7XG5cdFx0XHRcdFx0XHRcdGlmKGlzTmFOKHRhcmdldEJpdCkpIHtcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRCaXQgPSAwO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9ICh0YXJnZXRCaXQgKyBzZWxmLmNyZWdCYXNlKGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJyb1tcIiArICh0YXJnZXRCaXQgKyBzZWxmLmNyZWdCYXNlKGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpKSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRweXF1aWwgKz0gXCIpXCI7XG5cdFx0XHRcdFx0aWYoaW5zaWRlQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiKVxcblwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bmtub3duIGdhdGU/XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBFeHBvcnQgdG8gcHlxdWlsIFdBUk5JTkc6IHVua25vd24gZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIHBcXG5cIjtcblx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0fSBlbHNlIHtcblx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicXZtID0gUVZNQ29ubmVjdGlvbigpXFxuXCI7XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicHJpbnQocXZtLnJ1bihwKSlcXG5cIjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC53cmFwX2luX251bXNob3RzX2xvb3Aoc2hvdHMpXFxuXCI7XG5cdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGF0dGljZU5hbWUgPSBsYXR0aWNlO1xuXHRcdFx0aWYoIWxhdHRpY2VOYW1lKSB7XG5cdFx0XHRcdGlmKHZlcnNpb24gPCAyLjEpIHtcblx0XHRcdFx0XHRsYXR0aWNlTmFtZSA9IHRoaXMubnVtUXViaXRzICsgXCJxLWdlbmVyaWMtcXZtXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGF0dGljZU5hbWUgPSB0aGlzLm51bVF1Yml0cyArIFwicS1xdm1cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJxYyA9IGdldF9xYygnXCIgKyBsYXR0aWNlTmFtZSArIFwiJ1wiICsgKGxhdHRpY2UgPyAoXCIsIGFzX3F2bT1cIiArIChhc1FWTSA/IFwiVHJ1ZVwiIDogXCJGYWxzZVwiKSkgOiBcIlwiKSArIFwiKVxcblwiO1xuXG5cdFx0XHRpZihsYXR0aWNlKSB7XG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImVwID0gcWMuY29tcGlsZShwKVxcblwiO1xuXG5cdFx0XHRcdGlmKGdvdE1lYXN1cmVtZW50KSB7XG5cblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzX2xpc3QgPSBxYy5ydW4oZXApLnJlYWRvdXRfZGF0YS5nZXQoXFxcInJvXFxcIilcXG5cIjtcblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSwgXFxcIlxcXCIpLCByZXN1bHRzX2xpc3QpKVxcblwiO1xuXG5cdFx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImNvdW50cyA9IGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKVxcblwiO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicHJpbnQoY291bnRzKVxcblwiO1x0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KHFjLnJ1bihlcCkucmVhZG91dF9kYXRhLmdldChcXFwicm9cXFwiKSlcXG5cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKGdvdE1lYXN1cmVtZW50KSB7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0c19saXN0ID0gcWMucnVuKHApLnJlYWRvdXRfZGF0YS5nZXQoXFxcInJvXFxcIilcXG5cIjtcblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSwgXFxcIlxcXCIpLCByZXN1bHRzX2xpc3QpKVxcblwiO1xuXHRcdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcihkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KGNvdW50cylcXG5cIjtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJlc3VsdHNfbGlzdCA9IHFjLnJ1bihwKS5yZWFkb3V0X2RhdGEuZ2V0KFxcXCJyb1xcXCIpXFxuXCI7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0sIFxcXCJcXFwiKSwgcmVzdWx0c19saXN0KSlcXG5cIjtcblx0XHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImNvdW50cyA9IENvdW50ZXIoZGljdCh6aXAocmVzdWx0cyxbcmVzdWx0cy5jb3VudChpKSBmb3IgaSBpbiByZXN1bHRzXSkpKVxcblwiO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicHJpbnQocmVzdWx0cylcXG5cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0dGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uKGdsb2JhbFBhcmFtTmFtZSwgZ2xvYmFsUGFyYW1JbmRleCkge1xuXHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwibWluaW11bSA9IG1pbmltaXplKG9iamVjdGl2ZV9mdW5jdGlvbiwgcGFyYW1zLCBtZXRob2Q9XFxcIlwiICsgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgOiBcIlBvd2VsbFwiKSArIFwiXFxcIiwgdG9sPXRvbGVyYW5jZSlcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHR9XG5cdH1cblxuXHRpZihhc0p1cHl0ZXIpIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0ZGlzcGxheV9uYW1lOiBcIlB5dGhvbiAzXCIsXG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IHB5cXVpbCxcblx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vdGVib29rKTtcblx0fVxuXG5cdHJldHVybiBweXF1aWw7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RdWlsID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblxuXHQvLyBRVUlMIFN1Ym1vZHVsZXMgbm90IHN1cHBvcnRlZFxuXHR2YXIgZGVjb21wb3NlID0gdHJ1ZTsgLy8gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQodmVyc2lvblN0ciB8fCBcIjIuMFwiKTtcblx0aWYoaXNOYU4odmVyc2lvbikpIHtcblx0XHR2ZXJzaW9uID0gMi4wO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcXVpbCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0cXVpbCArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRxdWlsICs9IGNsaW5lO1xuXHRcdFx0cXVpbCArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8gJiYgYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpbCkge1xuXHRcdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsLmRlZmdhdGUpIHtcblx0XHRcdFx0XHRxdWlsICs9IGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aWwuZGVmZ2F0ZTtcblx0XHRcdFx0XHRxdWlsICs9IFwiXFxuXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGJhc2ljIGdhdGUgbm90IHN1cHBvcnRlZCBieSBxdWlsXG5cdFx0XHRcdC8vIFRPRE86IGFkZCBxdWlsIGRlZmluZSBnYXRlIGNvZGVcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHZhciBnb3RDb25kaXRpb25zID0gdGhpcy5nb3RDbGFzc2ljYWxDb250cm9sKCk7XG5cdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0dmFyIHBhcmFtcyA9IFwiXCI7XG5cdFx0aWYoY2lyY3VpdC5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRwYXJhbXMgKz0gXCIoXCI7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0XHRwYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhcmFtcyArPSBcIiVcIiArIGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0fVxuXHRcdFx0cGFyYW1zICs9IFwiKVwiO1xuXHRcdH1cblxuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gXCJxXCIgKyBpO1xuXHRcdH1cblx0XHRxdWlsICs9IFwiREVGQ0lSQ1VJVCBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyAocGFyYW1zID8gXCIgXCIgKyBwYXJhbXMgOiBcIlwiKSArIChhcmdzID8gXCIgXCIgKyBhcmdzIDogXCJcIikgKyBcIjpcXG5cIjtcblx0XHRpbmRlbnQgPSBcIiAgICBcIjtcblx0fSBlbHNlIHtcblx0XHRxdWlsICs9IFwiXFxuXCI7XG5cblx0XHRpZih2ZXJzaW9uID49IDIpIHtcblx0XHRcdHZhciB0b3RhbEJpdHMgPSBjaXJjdWl0LmNyZWdUb3RhbEJpdHMoKTtcblx0XHRcdGlmKGdvdENvbmRpdGlvbnMpIHtcblx0XHRcdFx0dG90YWxCaXRzICs9IDE7XG5cdFx0XHR9O1xuXHRcdFx0aWYodG90YWxCaXRzKSB7XG5cdFx0XHRcdHF1aWwgKz0gXCJERUNMQVJFIHJvIEJJVFtcIiArIHRvdGFsQml0cyArIFwiXVxcblwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRpZih0aGlzLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRxdWlsICs9IFwiREVDTEFSRSBcIiArIGdsb2JhbFBhcmFtTmFtZSArIFwiIFJFQUxbMV1cXG5cIjtcblx0XHRcdH1cblx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2Vcblx0XHRcdFx0XHRcdH07XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cXVpbCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUXVpbChuZXdPcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlICYmIGNpcmN1aXQucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRyZXR1cm4gXCIlXCIgKyBub2RlLm5hbWU7XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBsYWJlbENvdW50ZXIgPSAxO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IGNpcmN1aXQubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIHF1aWxJbmZvID0gbnVsbDtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRxdWlsSW5mbyA9IChnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbCkgPyBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbCA6IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGluc2lkZUNvbnRyb2wgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0Ly8gRmxvdyBjb250cm9sXG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdGluc2lkZUNvbnRyb2wgPSB0cnVlO1xuXHRcdFx0XHRcdFx0cXVpbCArPSBcIlxcblwiO1xuXG5cdFx0XHRcdFx0XHR2YXIgdGVzdEJpdCA9IHNlbGYuY3JlZ1RvdGFsQml0cygpO1xuXHRcdFx0XHRcdFx0dmFyIGNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdFx0XHR2YXIgY29uZGl0aW9uVmFsdWUgPSBjb25kaXRpb24udmFsdWUgfHwgMDtcblx0XHRcdFx0XHRcdHZhciBjcmVnQmFzZSA9IHNlbGYuY3JlZ0Jhc2UoY29uZGl0aW9uLmNyZWcpO1xuXG5cdFx0XHRcdFx0XHRpZihjb25kaXRpb25WYWx1ZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnU2l6ZSA9IHNlbGYuY3JlZ3NbY29uZGl0aW9uLmNyZWddLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiRkFMU0UgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgYml0SW5kZXggPSAwOyBiaXRJbmRleCA8IGNyZWdTaXplOyBiaXRJbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiT1IgW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk5PVCBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAtV0hFTiBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCIgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJGQUxTRSByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdEluZGV4ID0gMDsgYml0SW5kZXggPCBjcmVnU2l6ZTsgYml0SW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiTk9UIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0U3RyID0gY29uZGl0aW9uVmFsdWUudG9TdHJpbmcoMikuc3BsaXQoXCJcIikucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0Q291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgc2luZ2xlQml0SW5kZXggPSAwO1xuXHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBiaXRWYWwgPSBwYXJzZUludChiaXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0Yml0U3RyW2JpdEluZGV4XSA9IGJpdFZhbDtcblx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGJpdENvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0XHRzaW5nbGVCaXRJbmRleCA9IGJpdEluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0aWYoYml0Q291bnQgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiBbXCIgKyAoc2luZ2xlQml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIHJvW1wiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIkZBTFNFIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIFtcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJBTkQgW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAtV0hFTiBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCIgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIkZBTFNFIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGZpcnN0U2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGJpdFN0ci5tYXAoZnVuY3Rpb24oYml0VmFsdWUsIGJpdEluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGJpdFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZmlyc3RTZXQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpcnN0U2V0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiT1Igcm9bXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0gcm9bXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJBTkQgcm9bXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0gcm9bXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHF1aWxJbmZvKSB7XG5cdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIHF1aWxJbmZvLm5hbWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHF1aWwgKz0gXCIgXCI7XG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRpZihxdWlsSW5mbyAmJiBxdWlsSW5mby5wYXJhbXMgJiYgcXVpbEluZm8ucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBxdWlsSW5mby5wYXJhbXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnJScgdG8gZ2xvYmFsIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYucGFyYW1zICYmIGdhdGVEZWYucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJyUnIHRvIGdsb2JhbCBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1tnYXRlRGVmLnBhcmFtc1twXV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbZ2F0ZURlZi5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwicVwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0dmFyIHRhcmdldEJpdCA9IHBhcnNlSW50KGdhdGUub3B0aW9ucy5jcmVnLmJpdCkgfHwgMDtcblx0XHRcdFx0XHRcdGlmKGlzTmFOKHRhcmdldEJpdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJbXCIgKyAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSkgKyBcIl1cIjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJyb1tcIiArICh0YXJnZXRCaXQgKyBzZWxmLmNyZWdCYXNlKGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpKSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdFx0XHRcdGlmKGluc2lkZUNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0XHRcdFx0bGFiZWxDb3VudGVyICs9IDI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVua25vd24gZ2F0ZT9cblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInVua25vd24gZ2F0ZVwiLCBnYXRlLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0fVxuXG5cdHJldHVybiBxdWlsO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvQVFBU00gPSBmdW5jdGlvbihvcHRpb25zLCBpc0V4cG9ydFB5QVFBU00sIGV4cG9ydEFzR2F0ZU5hbWUsIGluZGVudERlcHRoKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBzaG90cyA9IG9wdGlvbnMuc2hvdHM7XG5cdHZhciBoeWJyaWQgPSAhIWlzRXhwb3J0UHlBUUFTTSA/IG9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXHR2YXIgdGVtcENpcmN1aXQgPSBudWxsO1xuXG5cdHNob3RzID0gc2hvdHMgfHwgMTAyNDtcblxuXHRpZih0eXBlb2YgaHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRoeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdHZhciBvYmogPSB0aGlzLnNhdmUoISFkZWNvbXBvc2UpO1xuXG5cdGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0dGVtcENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKG9iaik7XG5cdHRlbXBDaXJjdWl0LmxvYWQob2JqKTtcblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgYWRqdXN0SWRlbnRhdGlvbiA9IGZ1bmN0aW9uKGFkZFN0ciwgaWRlbnQpIHtcblx0XHR2YXIgc3RyID0gXCJcIjtcblxuXHRcdC8vIGFkZCB1c2VyIGRlZmluZWQgY29zdCBmdW5jdGlvbiB3aXRoIHByb3BlciBpZGVudGF0aW9uXG5cdFx0dmFyIGNmTGluZXMgPSBhZGRTdHIuc3BsaXQoXCJcXG5cIik7XG5cdFx0dmFyIG1pbklkZW50ID0gLTE7XG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHR2YXIgdG1wSWRlbnQgPSBjZkxpbmUuc2VhcmNoKC9cXFMvKTtcblx0XHRcdGlmKHRtcElkZW50ID49IDAgJiYgKG1pbklkZW50IDwgMCB8fCB0bXBJZGVudCA8IG1pbklkZW50KSkge1xuXHRcdFx0XHRtaW5JZGVudCA9IHRtcElkZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYobWluSWRlbnQgPCAwKSB7XG5cdFx0XHRtaW5JZGVudCA9IDA7XG5cdFx0fVxuXG5cdFx0dmFyIGFkZElkZW50ID0gXCJcIjtcblx0XHRpZihtaW5JZGVudCA8IGlkZW50Lmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciB0bXAgPSAwOyB0bXAgPCAoaWRlbnQubGVuZ3RoIC0gbWluSWRlbnQpOyB0bXArKykge1xuXHRcdFx0XHRhZGRJZGVudCArPSBcIiBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHN0ciArPSBhZGRJZGVudCArIGNmTGluZSArIFwiXFxuXCI7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdHZhciBnZXRJbmRlbnQgPSBmdW5jdGlvbihkZXB0aCkge1xuXHRcdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0XHRpbmRlbnQgKz0gXCIgICAgXCI7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRlbnQ7XG5cdH1cblxuXHRpbmRlbnREZXB0aCA9IGluZGVudERlcHRoIHx8IDA7XG5cblx0dmFyIGdhdGVzVG9CZUFkZGVkID0gW107XG5cdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHZhciBudW1Db2xzID0gdGVtcENpcmN1aXQubnVtQ29scygpO1xuXHRcdFx0Zm9yKHZhciBjb2x1bW4gPSBudW1Db2xzIC0gMTsgY29sdW1uID49IDA7IGNvbHVtbi0tKSB7XG5cdFx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0ZW1wQ2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHRcdHZhciBnYXRlID0gdGVtcENpcmN1aXQuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDAgJiYgIXRlbXBDaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGVjb21wb3NlZENpcmN1aXQgPSB0ZW1wQ2lyY3VpdC5kZWNvbXBvc2VHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHRcdHZhciBpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGZvcih2YXIgZGVjb21wb3NlZENvbHVtbiA9IDA7IGRlY29tcG9zZWRDb2x1bW4gPCBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5udW1Db2xzKCk7IGRlY29tcG9zZWRDb2x1bW4rKykge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGRlY29tcG9zZWRXaXJlID0gMDsgZGVjb21wb3NlZFdpcmUgPCBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5udW1RdWJpdHM7IGRlY29tcG9zZWRXaXJlKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZUluQ3VzdG9tQ2lyY3VpdCA9IGN1c3RvbURlY29tcG9zZWRDaXJjdWl0LmdldEdhdGVBdChkZWNvbXBvc2VkQ29sdW1uLCBkZWNvbXBvc2VkV2lyZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlSW5DdXN0b21DaXJjdWl0ICYmIGdhdGVJbkN1c3RvbUNpcmN1aXQuY29ubmVjdG9yID09IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZXNUb0JlQWRkZWQucHVzaChnYXRlSW5DdXN0b21DaXJjdWl0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdC5nYXRlcy5tYXAoZnVuY3Rpb24oY2lyY3VpdEdhdGUsIGluZGV4KXtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcmN1aXRHYXRlLm1hcChmdW5jdGlvbihnYXRlVG9SZW1vdmUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlVG9SZW1vdmUgJiYgZ2F0ZVRvUmVtb3ZlLm5hbWUgPT0gZ2F0ZS5uYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaXJjdWl0LnJlbW92ZUdhdGUoZ2F0ZVRvUmVtb3ZlLmlkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdH0pO1x0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Z2F0ZXNUb0JlQWRkZWQubWFwKGZ1bmN0aW9uKGdhdGVUb0FkZCl7XG5cdFx0XHRpZihnYXRlVG9BZGQpe1xuXHRcdFx0XHRjaXJjdWl0Lmluc2VydEdhdGUoZ2F0ZVRvQWRkLm5hbWUsIGdhdGVUb0FkZC5jb2x1bW4sIGdhdGVUb0FkZC53aXJlcywgZ2F0ZVRvQWRkLm9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dmFyIGFxYXNtID0gXCJcIjtcblx0dmFyIGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR2YXIgbnVtUXViaXRzID0gY2lyY3VpdC5udW1RdWJpdHM7XG5cdFxuXHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJCRUdJTlxcblwiO1xuXHRcdGFxYXNtICs9IGluZGVudCArICBcInF1Yml0cyBcIiArIG51bVF1Yml0cyArIFwiXFxuXCI7XG5cblx0XHRpZiAoY2lyY3VpdC5jcmVncyl7XG5cdFx0XHR2YXIgY3JlZ0xlbmd0aCA9IDA7XG5cdFx0XHRmb3IodmFyIGNyZWcgaW4gY2lyY3VpdC5jcmVncyl7XG5cdFx0XHRcdGNyZWdMZW5ndGggKz0gY2lyY3VpdC5jcmVnc1tjcmVnXS5sZW5ndGg7XG5cdFx0XHR9XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImNiaXRzIFwiICsgY3JlZ0xlbmd0aCArIFwiXFxuXCI7XG5cdFx0fVxuXHR9ZWxzZSB7XG5cdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0XHR2YXIgYXJncyA9IFwiXCI7XG5cdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFyZ3MgKz0gY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdH1cblx0XHR9ZWxzZSB7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gcWF0LmxhbmcuQVFBU00gaW1wb3J0ICpcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiZnJvbSBxYXQucXB1cyBpbXBvcnQgZ2V0X2RlZmF1bHRfcXB1XFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXJcXG5cIjtcblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiZnJvbSBzY2lweS5vcHRpbWl6ZSBpbXBvcnQgbWluaW1pemVcXG5cIjtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cblx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cblx0XHRcdHZhciB1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uID0gXCJcIjtcblx0XHRcdHZhciBzdWJtb2R1bGVDb3VudCA9IDA7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdGlmKCFkZWNvbXBvc2Upe1xuXHRcdFx0XHRcdFx0aWYoY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5hcWFzbSAmJiBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXS5leHBvcnRJbmZvLmFxYXNtLmFycmF5KSB7XG5cdFx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkQXFhc21JbmZvID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5hcWFzbTtcblx0XHRcdFxuXHRcdFx0XHRcdFx0XHRnYXRlVW5pdGFyeSA9IHVzZWRHYXRlTmFtZSArIFwiX2dhdGVcIjtcblx0XHRcdFx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJkZWYgXCIgKyBnYXRlVW5pdGFyeSArXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMgJiYgdW5zdXBwb3J0ZWRBcWFzbUluZm8ucGFyYW1zLmxlbmd0aCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXFhc20gKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBcIik6XFxuXCI7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IGdldEluZGVudChpbmRlbnREZXB0aCArIDEpICsgXCJyZXR1cm4gbnAuYXJyYXkoXCIgKyAgdW5zdXBwb3J0ZWRBcWFzbUluZm8uYXJyYXkgKyBcIilcXG5cXG5cIjtcdFx0XHRcdFx0XHRcdFxuXG5cdFx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkR2F0ZURlZmluaXRpb24gKz0gdXNlZEdhdGVOYW1lICsgXCIgPSBBYnN0cmFjdEdhdGUoXFxcIlwiICsgdXNlZEdhdGVOYW1lICsgXCJcXFwiLCBbXCI7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgY291bnQgPSAwO1xuXG5cdFx0XHRcdFx0XHRcdGlmKHVuc3VwcG9ydGVkQXFhc21JbmZvLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHVuc3VwcG9ydGVkQXFhc21JbmZvLnBhcmFtcy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihjb3VudCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkR2F0ZURlZmluaXRpb24gKz0gXCJmbG9hdFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihiYXNpY0dhdGUubWF0cml4KXtcblx0XHRcdFx0XHRcdFx0XHRhcml0eSA9IG1hdGgubG9nMihiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IFwiXSwgbWF0cml4X2dlbmVyYXRvcj1cIiArIGdhdGVVbml0YXJ5ICsgXCIsIGFyaXR5PVwiICsgYXJpdHkgK1wiKVxcblwiO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblxuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0c2hvdHM6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGh5YnJpZDogZmFsc2Vcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGFxYXNtICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9BUUFTTShuZXdPcHRpb25zLCBpc0V4cG9ydFB5QVFBU00sIHVzZWRHYXRlTmFtZSwgaW5kZW50RGVwdGgpO1xuXHRcdFx0XHRcdFx0c3VibW9kdWxlQ291bnQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRhcWFzbSArPSB1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uO1xuXG5cdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXG5cdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcInNob3RzID0gXCIgKyBzaG90cyArIFwiXFxuXCI7XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcInByb2dyYW0gPSBQcm9ncmFtKClcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcInF1Yml0c19yZWcgPSBwcm9ncmFtLnFhbGxvYyhcIisgY2lyY3VpdC5udW1RdWJpdHMgK1wiKVxcblwiO1x0XG5cdFx0XHRcblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncyl7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIGNyZWdOYW1lICsgXCIgPSBwcm9ncmFtLmNhbGxvYyhcIiArIGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVdLmxlbmd0aCArIFwiKVxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXG5cdFx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRpZih0aGlzLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdFx0XHRcdFx0YXFhc20gKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcInRvbGVyYW5jZSA9IFwiICsgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy50b2xlcmFuY2UgPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy50b2xlcmFuY2UgfHwgXCIwLjAwMVwiIDogXCIwLjAwMVwiKSArIFwiXFxuXCI7XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0YXFhc20gKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0aW5kZW50RGVwdGgrKztcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdGFxYXNtICs9IGluZGVudCArIFwiY2lyY3VpdCA9IFFSb3V0aW5lKClcXG5cIlx0XG5cdH0gZWxzZSB7XG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRhcWFzbSArPSBcImRlZiBvYmplY3RpdmVfZnVuY3Rpb24ocGFyYW1zKTpcXG5cIlxuXHRcdFx0aW5kZW50RGVwdGgrKztcblx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0fVxuXHR9XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpZihzdWJtb2R1bGVDb3VudCkge1xuXHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdGlmKCFjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXSAmJiBjaXJjdWl0LmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyB1c2VkR2F0ZU5hbWUgKyBcIihcIjtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjaXJjdWl0Lm51bUNvbHMoKTsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdHZhciBuYW1lID0gXCJcIjtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpe1xuXHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMucGFyYW1zO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiKXtcblx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwiTUVBU1wiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG5hbWUgKz0gXCJwcm9ncmFtLm1lYXN1cmVcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJyZXNldFwiKXtcblx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwiUkVTRVRcIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwicHJvZ3JhbS5yZXNldFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvKXtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8uYXFhc20pe1xuXHRcdFx0XHRcdFx0dmFyIGFxYXNtSW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5hcWFzbTtcblx0XHRcdFx0XHRcdHZhciBhcWFzbUluZm9OYW1lID0gXCJcIjtcblx0XHRcdFx0XHRcdGlmKGFxYXNtSW5mby5uYW1lKXtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYucGFyYW1zLmxlbmd0aCl7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZURlZi5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoe2hhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXJ9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mb05hbWUgPSBhcWFzbUluZm8ubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lICs9IFwiW1wiICsgcGFyYW1WYWx1ZSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mb05hbWUgKz0gXCIoXCIgKyBwYXJhbVZhbHVlICsgXCIpXCI7XHRcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mb05hbWUgKz0gYXFhc21JbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihhcWFzbUluZm8uY29udHJvbGxlZCAmJiBhcWFzbUluZm8uZGFnZ2VyKXtcblx0XHRcdFx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJDVFJMKERBRyhcIiArIGFxYXNtSW5mb05hbWUgKyBcIikpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBhcWFzbUluZm9OYW1lICsgXCIuZGFnKCkuY3RybCgpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ZWxzZSBpZihhcWFzbUluZm8uY29udHJvbGxlZCl7XG5cdFx0XHRcdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiQ1RSTChcIiArIGFxYXNtSW5mb05hbWUgKyBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IGFxYXNtSW5mb05hbWUgKyBcIi5jdHJsKClcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1lbHNlIGlmKGFxYXNtSW5mby5kYWdnZXIpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIkRBRyhcIiArIGFxYXNtSW5mb05hbWUgKyBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IGFxYXNtSW5mb05hbWUgKyBcIi5kYWcoKVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gYXFhc21JbmZvTmFtZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZihhcWFzbUluZm8ubWF0cml4KXtcblx0XHRcdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IFwiW1wiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgayA9IDAgOyBrIDwgYXFhc21JbmZvLm1hdHJpeC5sZW5ndGg7IGsrKyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyb3cgPSBhcWFzbUluZm8ubWF0cml4W2tdO1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIltcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dfZWxlbWVudCA9IHJvd1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXFhc21JbmZvLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXFhc21JbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbSA9IGdhdGVQYXJhbXNbcGFyYW1OYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJvd19lbGVtZW50LnRvU3RyaW5nKCkuaW5kZXhPZihwYXJhbU5hbWUpID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJvd19lbGVtZW50ID0gcm93X2VsZW1lbnQucmVwbGFjZShwYXJhbU5hbWUsIHBhcmFtKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRldmFsdWF0ZWRfZXhwcmVzc2lvbiA9IG1hdGguZXZhbHVhdGUocm93X2VsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXhfZWxlbWVudCA9IG1hdGguY29tcGxleChldmFsdWF0ZWRfZXhwcmVzc2lvbik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeF9lbGVtZW50X3JlYWwgPSBtYXRyaXhfZWxlbWVudFtcInJlXCJdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXhfZWxlbWVudF9pbSA9IG1hdHJpeF9lbGVtZW50W1wiaW1cIl07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gbWF0cml4X2VsZW1lbnRfcmVhbCArIFwiLCBcIiArIG1hdHJpeF9lbGVtZW50X2ltICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpIDwgcm93Lmxlbmd0aCAtIDEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJdXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoayA8IGFxYXNtSW5mby5tYXRyaXgubGVuZ3RoIC0gMSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJdXCI7XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBnYXRlLm5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZURlZi5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50ID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoe2hhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXJ9KTtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gcGFyYW1WYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFxYXNtICs9IGluZGVudCArICBuYW1lO1xuXG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRhcWFzbSArPSBcIiBcIjtcblx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRhcWFzbSArPSBcIihcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKXtcblx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApe1xuXHRcdFx0XHRcdFx0YXFhc20gKz0gIFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdGFxYXNtICs9IFwicVtcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IFwicXViaXRzX3JlZ1tcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcmdDb3VudCA9IGFyZ0NvdW50ICsgMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZyl7XG5cdFx0XHRcdFx0YXFhc20gKz0gXCIsIFwiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIFwiW1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCJdXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdGFxYXNtICs9IFwiKVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0YXFhc20gKz0gaW5kZW50ICsgXCJyZXR1cm4gY2lyY3VpdFxcblxcblwiO1xuXHR9XG5cblx0aWYoIWlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdGFxYXNtICs9IFwiRU5EXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpe1x0XHRcdFxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJjaXJjdWl0ID0gcHJvZ3JhbS50b19jaXJjKClcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImpvYiA9IGNpcmN1aXQudG9fam9iKG5ic2hvdHM9c2hvdHMsIGFnZ3JlZ2F0ZV9kYXRhPUZhbHNlKVxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwicXB1ID0gZ2V0X2RlZmF1bHRfcXB1KClcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImpvYl9yZXN1bHQgPSBxcHUuc3VibWl0KGpvYilcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImNvdW50cyA9IENvdW50ZXIoKVxcblxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiZm9yIHN0YXRlIGluIGpvYl9yZXN1bHQ6XFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCIgICAgc3RyaW5nX3N0YXRlID0gc3RyKHN0YXRlLnN0YXRlKVxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiICAgIHN0cmluZ19zdGF0ZSA9IHN0cmluZ19zdGF0ZVtzdHJpbmdfc3RhdGUuZmluZCgnfCcpICsgMTogc3RyaW5nX3N0YXRlLmZpbmQoJz4nKV1cXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIiAgICBzdHJpbmdfc3RhdGUgPSBzdHJpbmdfc3RhdGVbOjotMV1cXG5cIlxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiICAgIGNvdW50c1tzdHJpbmdfc3RhdGVdICs9IDFcXG5cXG5cIlxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblx0XG5cdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdH1cblx0XG5cdFx0XHRcdGFxYXNtICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXHRcblx0XHRcdFx0YXFhc20gKz0gXCJcXG5cIlxuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCI7XHRcblx0XG5cdFx0XHRcdGluZGVudERlcHRoLS07XG5cdFx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdGlmKGdsb2JhbFBhcmFtSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRnbG9iYWxQYXJhbUxpc3QgKz0gZ2xvYmFsUGFyYW1OYW1lO1xuXHRcdFx0XHRcdH0pO1xuXHRcblx0XHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwicGFyYW1zID0gbnAuYXJyYXkoW1wiICsgZ2xvYmFsUGFyYW1MaXN0ICsgXCJdKVxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHRcdFx0YXFhc20gKz0gXCJtaW5pbXVtID0gbWluaW1pemUob2JqZWN0aXZlX2Z1bmN0aW9uLCBwYXJhbXMsIG1ldGhvZD1cXFwiXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA6IFwiUG93ZWxsXCIpICsgXCJcXFwiLCB0b2w9dG9sZXJhbmNlKVxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwicHJpbnQoXFxcImNvc3Q6XFxcIiwgbWluaW11bS5mdW4sIFxcXCJwYXJhbXM6XFxcIiwgbWluaW11bS54KVxcblwiO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJwcmludChjb3VudHMpXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoYXNKdXB5dGVyICYmIGlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRsYW5ndWFnZTogXCJweXRob25cIixcblx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogYXFhc20sXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gYXFhc21cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRBUUFTTSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgaXNFeHBvcnRQeUFRQVNNLCBleHBvcnRBc0dhdGVOYW1lLCBhc0p1cHl0ZXIsIHNob3RzLCBoeWJyaWQsIGluZGVudERlcHRoKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkXG5cdH07XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9BUUFTTShvcHRpb25zLCBpc0V4cG9ydFB5QVFBU00sIGV4cG9ydEFzR2F0ZU5hbWUsIGluZGVudERlcHRoKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUHlBUUFTTSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9BUUFTTShvcHRpb25zLCB0cnVlLCBleHBvcnRBc0dhdGVOYW1lKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRQeUFRQVNNID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCBhc0p1cHl0ZXIsIHNob3RzLCBoeWJyaWQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0aHlicmlkOiBoeWJyaWRcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9QeUFRQVNNKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvQ2lycSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIHZlcnNpb25TdHIgPSBvcHRpb25zLnZlcnNpb25TdHI7XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0dmFyIGV4cG9ydFRmcSA9IG9wdGlvbnMuZXhwb3J0VGZxO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgcGxhdGZvcm0gPSBcIlwiO1xuXHRpZihleHBvcnRUZnEpIHtcblx0XHRwbGF0Zm9ybSA9IFwiVEZRXCI7XG5cdH0gZWxzZSB7XG5cdFx0cGxhdGZvcm0gPSBcImNpcnFcIjtcblx0fVxuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMC43XCIpO1xuXHRpZihpc05hTih2ZXJzaW9uKSkge1xuXHRcdHZlcnNpb24gPSAwLjc7XG5cdH1cblxuXHRpZih0eXBlb2Ygc2hvdHMgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHNob3RzID0gMTAyNDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIGNpcnEgPSBcIlwiO1xuXHR2YXIgaW5kZW50ID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMSAmJiBjbGluZVswXSAhPSBcIiNcIikge1xuXHRcdFx0XHRjaXJxICs9IFwiIyBcIjtcblx0XHRcdH1cblx0XHRcdGNpcnEgKz0gY2xpbmU7XG5cdFx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgcGFyYW1zVG9BcmcgPSBmdW5jdGlvbihnYXRlTmFtZSwgZ2F0ZVBhcmFtcykge1xuXHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0aWYocGFyYW1Db3VudCkge1x0XHRcblx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnbnAnIHRvIG1hdGggY29uc3RhbnRzXG5cdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGNpcnEgKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0Y2lycSArPSBcIiAgICByZXR1cm4gW1xcblwiO1xuXHRcdGluZGVudCA9IFwiICAgICAgICBcIjtcblx0fSBlbHNlIHtcblx0XHRpZihleHBvcnRUZnEpe1xuXHRcdFx0Y2lycSArPSBcImltcG9ydCB0ZW5zb3JmbG93X3F1YW50dW0gYXMgdGZxXFxuXCJcblx0XHR9XG5cblx0XHRjaXJxICs9IFwiaW1wb3J0IGNpcnFcXG5cIjtcblx0XHRjaXJxICs9IFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cdFx0Y2lycSArPSBcImZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2VcXG5cIjtcblx0XHRjaXJxICs9IFwiXFxuXCI7XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0Y2lycSArPSBnbG9iYWxQYXJhbU5hbWUgKyBcIiA9IFwiICsgZ2xvYmFsUGFyYW1WYWx1ZSArIFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHJcblx0XHRcdFx0XHRcdH07XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRjaXJxICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9DaXJxKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dmFyIGRlZkdhdGVzID0gXCJcIjtcblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLmNpcnEpIHtcblx0XHRcdFx0XHR2YXIgY2lycUluZm8gPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5jaXJxO1xuXHRcdFx0XHRcdHZhciBpc1JlcGxhY2VkID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYgKGNpcnFJbmZvLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRHYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGNpcnFJbmZvLnJlcGxhY2VtZW50Lm5hbWUpXG5cdFx0XHRcdFx0XHRjaXJxSW5mbyA9IHJlcGxhY2VtZW50R2F0ZURlZi5leHBvcnRJbmZvLmNpcnFcblx0XHRcdFx0XHRcdGlzUmVwbGFjZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZihjaXJxSW5mby5hcnJheSkge1xuXHRcdFx0XHRcdFx0aWYoIWV4cG9ydFRmcSl7XG5cdFx0XHRcdFx0XHRcdC8vIGRlZmdhdGVcblx0XHRcdFx0XHRcdFx0dmFyIGRlZk5hbWUgPSBpc1JlcGxhY2VkID8gY2lycUluZm8ubmFtZSA6IHVzZWRHYXRlTmFtZVxuXHRcdFx0XHRcdFx0XHRpZiAoZGVmR2F0ZXMuaW5kZXhPZihkZWZOYW1lKSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcImRlZiBcIiArIGRlZk5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1MaXN0ID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRpZihjaXJxSW5mby5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTGlzdCArPSBcIiwgW1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lycUluZm8ucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUsIHBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCJdXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGRlZkdhdGVzICs9IFwiKTpcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRpZihiYXNpY0dhdGUubWF0cml4ICYmIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMC43KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN3aXRjaChiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMjogZGVmR2F0ZXMgKz0gXCIgICAgcmV0dXJuIGNpcnEuU2luZ2xlUXViaXRNYXRyaXhHYXRlKG5wLmFycmF5KFwiICsgY2lycUluZm8uYXJyYXkgKyBcIikpXFxuXCI7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgNDogZGVmR2F0ZXMgKz0gXCIgICAgcmV0dXJuIGNpcnEuVHdvUXViaXRNYXRyaXhHYXRlKG5wLmFycmF5KFwiICsgY2lycUluZm8uYXJyYXkgKyBcIikpXFxuXCI7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6IGRlZkdhdGVzICs9IFwiICAgICMgRXhwb3J0IHRvIFwiICsgcGxhdGZvcm0gKyBcIiBXQVJOSU5HOiBDYW5ub3QgZGVmaW5lIFwiICsgYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGggKyBcIiB4IFwiICsgYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGggKyBcIiBtYXRyaXggZ2F0ZVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIiAgICByZXR1cm4gY2lycS5NYXRyaXhHYXRlKG5wLmFycmF5KFwiICsgY2lycUluZm8uYXJyYXkgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGRlZkdhdGVzICs9IFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRjaXJxICs9IGRlZkdhdGVzO1xuXG5cdFx0aWYoZXhwb3J0VGZxKXtcblx0XHRcdGNpcnEgKz0gXCJxID0gY2lycS5HcmlkUXViaXQucmVjdCgxLCBcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIpXFxuXCI7XG5cdFx0fWVsc2V7XG5cdFx0XHRjaXJxICs9IFwicSA9IFtjaXJxLk5hbWVkUXViaXQoJ3EnICsgc3RyKGkpKSBmb3IgaSBpbiByYW5nZShcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIpXVxcblwiO1xuXHRcdH1cblxuXHRcdGNpcnEgKz0gXCJcXG5cIjtcblxuXHRcdGlmKHZlcnNpb24gPCAwLjcpIHtcblx0XHRcdGNpcnEgKz0gXCJjaXJjdWl0ID0gY2lycS5DaXJjdWl0LmZyb21fb3BzKFxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaXJxICs9IFwiY2lyY3VpdCA9IGNpcnEuQ2lyY3VpdChcXG5cIjtcblx0XHR9XG5cdFx0aW5kZW50ID0gXCIgICAgXCI7XG5cdH1cblx0XG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdHZhciBnYXRlQ291bnRlciA9IDA7XG5cdHZhciBtdWx0aXNob3RLZXlzID0gJyc7XG5cdHZhciB0ZW1wR2F0ZURlZiA9IG51bGw7XG5cdHZhciBub1RmcVN1cHBvcnQgPSBmYWxzZTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0aWYoZ2F0ZUNvdW50ZXIgPiAwKXtcblx0XHRcdFx0XHRjaXJxICs9IFwiLFwiO1xuXHRcdFx0XHRcdGlmKGV4cG9ydFRmcSAmJiBub1RmcVN1cHBvcnQpe1xuXHRcdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFRGUSBXQVJOSU5HOiBHYXRlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IFRlbnNvcmZsb3cgUXVhbnR1bVwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIGNpcnFJbmZvID0gbnVsbDtcblx0XHRcdFx0dmFyIGlzQ29udHJvbGxlZEdhdGUgPSBmYWxzZTtcblx0XHRcdFx0dmFyIGlzQmFzaWNHYXRlID0gISFjaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0XHRub1RmcVN1cHBvcnQgPSBnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5ub3RUZnFTdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxICYmIGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aXNDb250cm9sbGVkR2F0ZSA9IChnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC50eXBlICYmIChnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC50eXBlID09IFwiY29udHJvbGxlZFwiKSkgPyB0cnVlIDogZmFsc2U7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0bm9UZnFTdXBwb3J0ID0gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQubm90VGZxU3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y2lycUluZm8gPSAoZ2F0ZURlZiAmJiBnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEpID8gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEgOiBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRnYXRlQ291bnRlcisrO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHRjaXJxICs9IGluZGVudCArIFwiIyBFeHBvcnQgdG8gXCIgKyBwbGF0Zm9ybSArXCIgV0FSTklORzogY2xhc3NpY2FsIGNvbnRyb2wgbm90IGltcGxlbWVudGVkIHlldC5cXG5cIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgdG1wUGFyYW1Db3VudCA9IDA7XG5cdFx0XHRcdFx0dmFyIHBhcmFtU3RyaW5nID0gXCJcIjtcblxuXG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJ5eVwiKXtcblx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBbXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCkge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZighbm9kZS5hcmdzKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwYXJhbSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlID0gbWF0aC5wYXJzZShnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1x0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHRpZih0bXBQYXJhbUNvdW50ID09IHBhcmFtQ291bnQgLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihpc0Jhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dG1wUGFyYW1Db3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoY2lycUluZm8pIHtcblx0XHRcdFx0XHRcdHZhciBhZGRCcmFjZXMgPSBjaXJxSW5mby5uYW1lLmluZGV4T2YoXCIqKlwiKSA+PSAwO1xuXG5cdFx0XHRcdFx0XHRjaXJxICs9IGluZGVudDtcblxuXHRcdFx0XHRcdFx0aWYoYWRkQnJhY2VzKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKCFjaXJxSW5mby5hcnJheSkge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiY2lycS5cIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0VGZxICYmIGNpcnFJbmZvLnRmcVJlcGxhY2VtZW50ICYmIGNpcnFJbmZvLnRmcVJlcGxhY2VtZW50Lm5hbWUpe1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiY2lycS5cIiArIGNpcnFJbmZvLnRmcVJlcGxhY2VtZW50Lm5hbWVcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IGNpcnFJbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGFkZEJyYWNlcykge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNpcnEgKz0gaW5kZW50ICsgZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNpcnEgKz0gcGFyYW1TdHJpbmc7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFxuXG5cdFx0XHRcdFx0aWYoaXNDb250cm9sbGVkR2F0ZSkge1xuXHRcdFx0XHRcdFx0Y2lycSArPSBcIi5jb250cm9sbGVkKCkub24oXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoaXNCYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIihcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcInFbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpIHtcblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiLCBrZXk9XCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNpcnEgKz0gXCInXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCInXCI7XG5cblx0XHRcdFx0XHRcdGlmKGNvbHVtbiA9PSBudW1Db2xzIC0gMSAmJiB3aXJlID09IHRoaXMubnVtUXViaXRzIC0gMSl7XG5cdFx0XHRcdFx0XHRcdG11bHRpc2hvdEtleXMgKz0gXCInXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCInXCI7XG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0bXVsdGlzaG90S2V5cyArPSBcIidcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIicsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjaXJxICs9IFwiKVwiO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFwiICsgcGxhdGZvcm0gKyBcIiBXQVJOSU5HOiB1bmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0VGZxICYmIG5vVGZxU3VwcG9ydCl7XG5cdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFRGUSBXQVJOSU5HOiBHYXRlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IFRlbnNvcmZsb3cgUXVhbnR1XCI7XG5cdH1cblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGNpcnEgKz0gXCJcXG4pXFxuXCI7XG5cdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdGlmKCFleHBvcnRUZnEpe1xuXHRcdFx0Y2lycSArPSBcInNpbXVsYXRvciA9IGNpcnEuU2ltdWxhdG9yKClcXG5cIjtcblx0XHRcdGNpcnEgKz0gXCJyZXN1bHQgPSBzaW11bGF0b3IucnVuKGNpcmN1aXQsIHJlcGV0aXRpb25zPVwiKyBzaG90cyArXCIpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwicmVzdWx0X2RpY3QgPSBkaWN0KHJlc3VsdC5tdWx0aV9tZWFzdXJlbWVudF9oaXN0b2dyYW0oa2V5cz1bXCIgKyBtdWx0aXNob3RLZXlzICsgXCJdKSlcXG5cIjtcblx0XHRcdGNpcnEgKz0gXCJrZXlzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSksIHJlc3VsdF9kaWN0LmtleXMoKSkpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwiY291bnRzID0gZGljdCh6aXAoa2V5cyxbdmFsdWUgZm9yIHZhbHVlIGluIHJlc3VsdF9kaWN0LnZhbHVlcygpXSkpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwicHJpbnQoY291bnRzKVwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjaXJxICs9IFwiXFxuICAgIF1cXG5cIjtcblx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdH1cblxuXHRpZihhc0p1cHl0ZXIpIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0ZGlzcGxheV9uYW1lOiBcIlB5dGhvbiAzXCIsXG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IGNpcnEsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gY2lycTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvVEZRID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHRcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdGlmKHR5cGVvZiBzaG90cyA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0c2hvdHMgPSAxMDI0O1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgdGZxID0gXCJcIjtcblx0dmFyIGluZGVudCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0Y2lycSArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRjaXJxICs9IGNsaW5lO1xuXHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGV4cG9ydFRmcTogdHJ1ZVxuXHR9O1x0XHRcdFx0XHRcdFxuXHR0ZnEgKz0gY2lyY3VpdC5leHBvcnRUb0NpcnEobmV3T3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG5cdHRmcSArPSBcInJlc3VsdHNfbGlzdCA9IHRmcS5sYXllcnMuU2FtcGxlKCkoY2lyY3VpdCwgcmVwZXRpdGlvbnM9XCIrc2hvdHMrXCIpLnRvX2xpc3QoKVswXVxcblwiO1xuXHR0ZnEgKz0gXCJyZXN1bHRzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSksIHJlc3VsdHNfbGlzdCkpXFxuXCI7XG5cdHRmcSArPSBcImNvdW50cyA9IGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKVxcblwiO1xuXHR0ZnEgKz0gXCJwcmludChjb3VudHMpXCI7XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiB0ZnEsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gdGZxO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RU2hhcnAgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBjaXJjdWl0TmFtZSA9IG9wdGlvbnMuY2lyY3VpdE5hbWU7XG5cdHZhciBpbmRlbnREZXB0aCA9IG9wdGlvbnMuaW5kZW50RGVwdGg7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cblx0XHQvLyBzeW1ib2xzXG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBwYXJhbWV0ZXJKc29uID0geyBcInBpXCI6IFwiUEkoKVwiIH07XG5cdFx0XHRpZihwYXJhbWV0ZXJKc29uW25vZGUubmFtZV0pe1xuXHRcdFx0XHRyZXR1cm4gcGFyYW1ldGVySnNvbltub2RlLm5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNvbnN0YW50XG5cdFx0aWYobm9kZS5pc0NvbnN0YW50Tm9kZSkge1xuXHRcdFx0Ly8gY29udmVydCBpbnRlZ2VyIHRvIGZsb2F0XG5cdFx0XHRpZihOdW1iZXIuaXNJbnRlZ2VyKG5vZGUudmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiAobm9kZS52YWx1ZSkudG9GaXhlZCgxKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIG9wZXJhdGlvbk5hbWUgPSBjaXJjdWl0TmFtZSB8fCBcIkNpcmN1aXRcIjtcblxuXHRpbmRlbnREZXB0aCA9IGluZGVudERlcHRoIHx8IDA7XG5cblx0ZnVuY3Rpb24gZ2V0SW5kZW50KGRlcHRoKSB7XG5cdFx0dmFyIGluZGVudCA9IFwiXCI7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlcHRoOyBpKyspIHtcblx0XHRcdGluZGVudCArPSBcIiAgICBcIjtcblx0XHR9XG5cdFx0cmV0dXJuIGluZGVudDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHFzaGFycCA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoIWFzSnVweXRlcikge1xuXHRcdFx0Ly8gb3BlbmluZyBuYW1lc3BhY2Vcblx0XHRcdHFzaGFycCArPSBcIm5hbWVzcGFjZSBRdWFudHVtIHtcXG5cIjtcblx0XHRcdGluZGVudERlcHRoKys7XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdH1cblxuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJvcGVuIE1pY3Jvc29mdC5RdWFudHVtLkludHJpbnNpYztcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5DYW5vbjtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5NYXRoO1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJvcGVuIE1pY3Jvc29mdC5RdWFudHVtLkNvbnZlcnQ7XFxuXCI7XG5cblx0XHRxc2hhcnAgKz0gXCJcXG5cIjtcblxuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJmdW5jdGlvbiBTZXRCaXRWYWx1ZShyZWc6IEludCwgYml0OiBJbnQsIHZhbHVlOiBCb29sKTogSW50IHtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiICAgIGlmKHZhbHVlKSB7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIiAgICAgICAgcmV0dXJuIHJlZyB8fHwgKDEgPDw8IGJpdCk7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIiAgICB9IGVsc2Uge1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgICAgIHJldHVybiByZWcgJiYmIH5+figxIDw8PCBiaXQpO1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgfVxcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJ9XFxuXCI7XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiXFxuXCI7XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0dmFyIGFyZ3MgPSBcIlwiO1xuXHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gcXViaXRMZXR0ZXIoaSwgY2lyY3VpdC5udW1RdWJpdHMpICsgXCI6IFF1Yml0XCI7XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJvcGVyYXRpb24gXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpO1xuXHRcdC8vIHFzaGFycCArPSBcIiAgICByZXR1cm4gW1xcblwiO1xuXHRcdC8vIGluZGVudCA9IFwiICAgICAgICBcIjtcblx0fSBlbHNle1xuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdFx0XHRcdFx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRjaXJjdWl0TmFtZTogbnVsbCxcblx0XHRcdFx0XHRcdFx0aW5kZW50RGVwdGg6IGluZGVudERlcHRoXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cXNoYXJwICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RU2hhcnAobmV3T3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlcmF0aW9uIFwiICsgb3BlcmF0aW9uTmFtZSArIFwiKClcIjtcblx0fVxuXG5cdGluZGVudERlcHRoKys7XG5cdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cblx0dmFyIGNyZWdDb3VudCA9IDA7XG5cdGZvcihjcmVnTmFtZSBpbiBjaXJjdWl0LmNyZWdzKSB7XG5cdFx0Y3JlZ0NvdW50Kys7XG5cdH1cblxuXHR2YXIgY3JlZ0xpc3QgPSBcIlwiO1xuXHRpZihjcmVnQ291bnQpIHtcblx0XHRxc2hhcnAgKz0gXCIgOiAoXCJcblx0XHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdFx0aWYoY3JlZ0xpc3QpIHtcblx0XHRcdFx0cXNoYXJwICs9IFwiLCBcIjtcblx0XHRcdFx0Y3JlZ0xpc3QgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0cXNoYXJwICs9IFwiSW50XCI7XG5cdFx0XHRjcmVnTGlzdCArPSBjcmVnTmFtZTtcblx0XHR9XG5cdFx0cXNoYXJwICs9IFwiKVwiO1xuXHR9IGVsc2Uge1xuXHRcdHFzaGFycCArPSBcIiA6IFVuaXRcIjtcblx0fVxuXHRxc2hhcnAgKz0gXCIge1xcblwiO1xuXHQvLyAtLS1cblxuXHQvLyBkZWNsYXJlIGNyZWdzXG5cdGlmKGNyZWdDb3VudCkge1xuXHRcdGZvcihjcmVnTmFtZSBpbiBjaXJjdWl0LmNyZWdzKSB7XG5cdFx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJtdXRhYmxlIFwiICsgY3JlZ05hbWUgKyBcIiA9IDA7XFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0cXJlZ19uYW1lID0gXCJxdWJpdHNcIjtcblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcInVzaW5nKFwiO1xuXHRcdHFzaGFycCArPSBxcmVnX25hbWUgKyBcIiA9IFF1Yml0W1wiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIl1cIjtcblx0XHRxc2hhcnAgKz0gXCIpIHtcXG5cIjtcblx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdH1cblxuXHR2YXIgZGVmR2F0ZXMgPSBcIlwiO1xuXHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHR2YXIgZ2F0ZUNvdW50ZXIgPSAwO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXG5cdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBxc2hhcnBJbmZvID0gbnVsbDtcblx0XHRcdFx0dmFyIGlzQ29udHJvbGxlZEdhdGUgPSBmYWxzZTtcblx0XHRcdFx0dmFyIHdpcmVJZHggPSAwO1xuXHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycC5yZXBsYWNlbWVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycC5yZXBsYWNlbWVudC5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cXNoYXJwSW5mbyA9IChnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwKSA/IGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAgOiBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZHJhd2luZ0luZm8gJiYgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ICYmIGdhdGUubmFtZSAhPSBcImN4XCIgJiYgZ2F0ZS5uYW1lICE9IFwiY2N4XCIpIHtcblx0XHRcdFx0XHRcdGlzQ29udHJvbGxlZEdhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXG5cdFx0XHRcdFx0dmFyIHRtcFBhcmFtQ291bnQgPSAwO1xuXHRcdFx0XHRcdHZhciBwYXJhbVN0cmluZyA9IFwiXCI7XG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcdFx0XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBpZih0bXBQYXJhbUNvdW50ID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBcdHBhcmFtU3RyaW5nICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0XHRcdC8vIH1cblx0XHRcdFx0XHRcdFx0XHRpZih0bXBQYXJhbUNvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XHRcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBpZih0bXBQYXJhbUNvdW50ID09IHBhcmFtQ291bnQgLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRwYXJhbVN0cmluZyArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHRcdFx0dG1wUGFyYW1Db3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBpbmRlbnQgKyBcInNldCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIiA9IFNldEJpdFZhbHVlKFwiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIFwiLCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiLCBSZXN1bHRBc0Jvb2woTShcIjtcblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxdWJpdExldHRlcihnYXRlLndpcmVzWzBdLCBjaXJjdWl0Lm51bVF1Yml0cykgKyBcIikpKTtcXG5cIjtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxcmVnX25hbWUgKyBcIltcIiArIGdhdGUud2lyZXNbMF0gKyBcIl0pKSk7XFxuXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBpbmRlbnQgKyBcIi8vIEV4cG9ydCB0byBxc2hhcnAgV0FSTklORzogbWlzc2luZyBkZXN0aW5hdGlvbiByZWdpc3RlclxcblwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50O1xuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiaWYoXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgKyBcIiA9PSBcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIikge1xcblwiO1xuXHRcdFx0XHRcdFx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdFx0XHRcdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihxc2hhcnBJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxc2hhcnBJbmZvLm5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBnYXRlLm5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoaXNDb250cm9sbGVkR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiW1wiICsgcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1swXSwgY2lyY3VpdC5udW1RdWJpdHMpICsgXCJdLCAoXCI7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiW1wiICsgcXJlZ19uYW1lICsgXCJbXCIgKyBnYXRlLndpcmVzWzBdICsgXCJdXSwgKFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHdpcmVJZHggPSAxO1xuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdHdpcmVJZHggPSAwO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihwYXJhbVN0cmluZyl7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBwYXJhbVN0cmluZyArIFwiLCBcIjtcblx0XHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0XHQvLyBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFx0cXNoYXJwICs9IHBhcmFtU3RyaW5nICsgXCIoXCI7XG5cdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0Zm9yKHZhciB3ID0gd2lyZUlkeDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxcmVnX25hbWUgKyBcIltcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGlzQ29udHJvbGxlZEdhdGUpe1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHFzaGFycCArPSBcIik7XFxuXCI7XG5cblx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0XHQvLyBlbmQgaWZcblx0XHRcdFx0XHRcdFx0aW5kZW50RGVwdGgtLTtcblx0XHRcdFx0XHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IGluZGVudCArIFwifVxcblwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwiUmVzZXRBbGwoXCIgKyBxcmVnX25hbWUgKyBcIik7XFxuXCI7XG5cblx0XHRpbmRlbnREZXB0aC0tO1xuXHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJ9XFxuXCI7XG5cdH1cblxuXHRpZihjcmVnQ291bnQpIHtcblx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJyZXR1cm4gKFwiICsgY3JlZ0xpc3QgKyBcIik7XFxuXCI7XG5cdH1cblxuXHRpbmRlbnREZXB0aC0tO1xuXHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRxc2hhcnAgKz0gaW5kZW50ICsgXCJ9XFxuXCI7XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpZighYXNKdXB5dGVyKSB7XG5cdFx0XHQvLyBjbG9zaW5nIG5hbWVzcGFjZVxuXHRcdFx0cXNoYXJwICs9IFwifVxcblwiO1xuXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHFzaGFycCArPSBcIlxcblwiO1xuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0XCJtZXRhZGF0YVwiOiB7XG5cdFx0XHRcdFwia2VybmVsc3BlY1wiOiB7XG5cdFx0XHRcdFx0XCJkaXNwbGF5X25hbWVcIjogXCJRI1wiLFxuXHRcdFx0XHRcdFwibGFuZ3VhZ2VcIjogXCJxc2hhcnBcIixcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJpcXNoYXJwXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJsYW5ndWFnZV9pbmZvXCI6IHtcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogcXNoYXJwLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IFwiJXNpbXVsYXRlIFwiICsgb3BlcmF0aW9uTmFtZSxcblx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vdGVib29rKTtcblx0fVxuXG5cdHJldHVybiBxc2hhcnA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9CcmFrZXQgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBzaG90cyA9IG9wdGlvbnMuc2hvdHM7XG5cdHZhciBoeWJyaWQgPSBvcHRpb25zLmh5YnJpZDtcblx0dmFyIGluZGVudERlcHRoID0gb3B0aW9ucy5pbmRlbnREZXB0aDtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblxuXHRzaG90cyA9IHNob3RzIHx8IDEwMjQ7XG5cblx0dmFyIHZlcnNpb24gPSBwYXJzZUZsb2F0KHZlcnNpb25TdHIgfHwgXCIxLjBcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDEuMDtcblx0fVxuXG5cdGlmKHR5cGVvZiBoeWJyaWQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGh5YnJpZCA9IHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCAmJiBoeWJyaWQpIHtcblx0XHRcdFx0cmV0dXJuIFwicGFyYW1zW1wiICsgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpICsgXCJdXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGp1c3RJZGVudGF0aW9uID0gZnVuY3Rpb24oYWRkU3RyLCBpZGVudCkge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXG5cdFx0Ly8gYWRkIHVzZXIgZGVmaW5lZCBjb3N0IGZ1bmN0aW9uIHdpdGggcHJvcGVyIGlkZW50YXRpb25cblx0XHR2YXIgY2ZMaW5lcyA9IGFkZFN0ci5zcGxpdChcIlxcblwiKTtcblx0XHR2YXIgbWluSWRlbnQgPSAtMTtcblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHZhciB0bXBJZGVudCA9IGNmTGluZS5zZWFyY2goL1xcUy8pO1xuXHRcdFx0aWYodG1wSWRlbnQgPj0gMCAmJiAobWluSWRlbnQgPCAwIHx8IHRtcElkZW50IDwgbWluSWRlbnQpKSB7XG5cdFx0XHRcdG1pbklkZW50ID0gdG1wSWRlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZihtaW5JZGVudCA8IDApIHtcblx0XHRcdG1pbklkZW50ID0gMDtcblx0XHR9XG5cblx0XHR2YXIgYWRkSWRlbnQgPSBcIlwiO1xuXHRcdGlmKG1pbklkZW50IDwgaWRlbnQubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIHRtcCA9IDA7IHRtcCA8IChpZGVudC5sZW5ndGggLSBtaW5JZGVudCk7IHRtcCsrKSB7XG5cdFx0XHRcdGFkZElkZW50ICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0c3RyICs9IGFkZElkZW50ICsgY2ZMaW5lICsgXCJcXG5cIjtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cblx0dmFyIGdldEluZGVudCA9IGZ1bmN0aW9uKGRlcHRoKSB7XG5cdFx0dmFyIGluZGVudCA9IFwiXCI7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlcHRoOyBpKyspIHtcblx0XHRcdGluZGVudCArPSBcIiAgICBcIjtcblx0XHR9XG5cdFx0cmV0dXJuIGluZGVudDtcblx0fVxuXG5cdGluZGVudERlcHRoID0gaW5kZW50RGVwdGggfHwgMDtcblxuXHR2YXIgYnJha2V0ID0gXCJcIjtcblx0dmFyIGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHZhciBpc1N1Yk1vZHVsZSA9IGZhbHNlO1xuXHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSl7XG5cdFx0aWYoIWNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdKXtcblx0XHRcdGlzU3ViTW9kdWxlID0gdHJ1ZTtcblx0XHR9XG5cdH0pO1xuXG5cdHZhciBhcmdzID0gXCJcIjtcblx0dmFyIGFyZ0NvdW50ID0gMDtcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImltcG9ydCBudW1weSBhcyBucFxcblwiO1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImZyb20gYnJha2V0LmRldmljZXMgaW1wb3J0IExvY2FsU2ltdWxhdG9yXFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwiZnJvbSBicmFrZXQuY2lyY3VpdHMgaW1wb3J0IENpcmN1aXRcXG5cIjtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyXFxuXCI7XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0fVxuXG5cdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cblx0XHRpZihzaG90cykge1xuXHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwic2hvdHMgPSBcIiArIHNob3RzICsgXCJcXG5cIjtcblx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRpZih0aGlzLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRicmFrZXQgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHVuc3VwcG9ydGVkQnJha2V0SW5mbyA9IG51bGw7XG5cdHZhciBnYXRlVW5pdGFyeSA9IG51bGw7XG5cdHZhciBzdWJtb2R1bGVDb3VudCA9IDA7XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0aWYoIWRlY29tcG9zZSl7XG5cdFx0XHRcdGlmKGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYnJha2V0ICYmIGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYnJha2V0LmFycmF5KSB7XG5cdFx0XHRcdFx0dW5zdXBwb3J0ZWRCcmFrZXRJbmZvID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5icmFrZXQ7XG5cdFxuXHRcdFx0XHRcdGlmKHVuc3VwcG9ydGVkQnJha2V0SW5mby5uYW1lID09IFwidW5pdGFyeVwiKXtcblx0XHRcdFx0XHRcdGdhdGVVbml0YXJ5ID0gdXNlZEdhdGVOYW1lICsgXCJfdW5pdGFyeVwiO1xuXHRcdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiZGVmIFwiICsgZ2F0ZVVuaXRhcnkgK1wiKFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEJyYWtldEluZm8ucGFyYW1zICYmIHVuc3VwcG9ydGVkQnJha2V0SW5mby5wYXJhbXMubGVuZ3RoKXtcblx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEJyYWtldEluZm8ucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInBfXCIgKyBwYXJhbU5hbWU7XG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcblx0XHRcdFx0XHRicmFrZXQgKz0gXCIpOlxcblwiO1xuXHRcdFx0XHRcdGJyYWtldCArPSBnZXRJbmRlbnQoaW5kZW50RGVwdGggKyAxKSArIFwicmV0dXJuIG5wLmFycmF5KFwiICsgIHVuc3VwcG9ydGVkQnJha2V0SW5mby5hcnJheSArIFwiKTtcXG5cXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRicmFrZXQgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRCcmFrZXQoXCJcIiwgdHJ1ZSwgdXNlZEdhdGVOYW1lLCB2ZXJzaW9uU3RyLCBmYWxzZSwgbnVsbCwgZmFsc2UsIGluZGVudERlcHRoKTtcblx0XHRcdFx0c3VibW9kdWxlQ291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdH0pO1x0XG5cdFx0XHRcdFx0XG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdGJyYWtldCArPSBcImRlZiBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyAoYXJncyA/IFwiKFwiICsgYXJncyArIFwiKVwiIDogXCJcIikgKyBcIjpcXG5cIjtcblx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdH0gZWxzZSB7XG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gXCJkZWYgb2JqZWN0aXZlX2Z1bmN0aW9uKHBhcmFtcyk6XFxuXCJcblx0XHRcdGluZGVudERlcHRoKys7XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdH1cblx0fVxuXG5cdGJyYWtldCArPSBpbmRlbnQgKyBcImNpcmN1aXQgPSBDaXJjdWl0KClcXG5cIjtcblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGlmKHN1Ym1vZHVsZUNvdW50KSB7XG5cdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdGlmKCFjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXSAmJiBjaXJjdWl0LmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJjaXJjdWl0LnJlZ2lzdGVyX3N1YnJvdXRpbmUoXCIgKyB1c2VkR2F0ZU5hbWUgKyBcIilcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHR9XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0dmFyIGJyYWtldEluZm8gPSBudWxsO1xuXG5cdFx0XHRcdHZhciBnYXRlTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0dmFyIHBhcmFtU3RyaW5nID0gXCJcIjtcblx0XHRcdFx0dmFyIGlzVW5pdGFyeSA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLmJyYWtldCkge1xuXHRcdFx0XHRcdFx0YnJha2V0SW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5icmFrZXQ7XG5cblx0XHRcdFx0XHRcdGlmKGJyYWtldEluZm8ucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdGlmKEFycmF5LmlzQXJyYXkoYnJha2V0SW5mby5wYXJhbXMpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBicmFrZXRJbmZvLnBhcmFtcztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gYnJha2V0SW5mby5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBPYmplY3Qua2V5cyhnYXRlUGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihicmFrZXRJbmZvLm5hbWUgPT0gXCJ1bml0YXJ5XCIpIHtcblx0XHRcdFx0XHRcdFx0aXNVbml0YXJ5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVOYW1lID0gYnJha2V0SW5mby5uYW1lO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFicmFrZXRJbmZvICYmICFjaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCIjIFVuc3VwcG9ydGVkIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlxcblwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciB0bXBQYXJhbUNvdW50ID0gMDtcblx0XHRcdFx0XHRpZihnYXRlUGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcdFx0XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZih0bXBQYXJhbUNvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XHRcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1zW3BhcmFtTmFtZV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dG1wUGFyYW1Db3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiY2lyY3VpdC5cIjtcblxuXHRcdFx0XHRcdGlmKGlzVW5pdGFyeSkge1xuXHRcdFx0XHRcdFx0YnJha2V0ICs9IFwidW5pdGFyeShtYXRyaXg9XCIgKyBnYXRlTmFtZSArIFwiX3VuaXRhcnkoXCIgKyBwYXJhbVN0cmluZyArIFwiKSwgdGFyZ2V0cz1bXCI7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBnYXRlTmFtZSArIFwiKFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdGZvcih3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGlzVW5pdGFyeSkge1xuXHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiXVwiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihwYXJhbVN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gcGFyYW1TdHJpbmc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyYWtldCArPSBcIilcIjtcblx0XHRcdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwicmV0dXJuIGNpcmN1aXRcIjtcblx0fVxuXG5cdGJyYWtldCArPSBcIlxcblxcblwiO1xuXHRcblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJsb2NhbF9zaW0gPSBMb2NhbFNpbXVsYXRvcigpXFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwicmVzdWx0ID0gbG9jYWxfc2ltLnJ1bihjaXJjdWl0LCBzaG90cz1zaG90cykucmVzdWx0KClcXG5cIjtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKHsgXFxcIlxcXCIuam9pbihyZXZlcnNlZChrKSk6IHYgZm9yIGssIHYgaW4gcmVzdWx0Lm1lYXN1cmVtZW50X2NvdW50cy5pdGVtcygpIH0pXFxuXCI7XG5cdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHR9XG5cblx0XHRcdGJyYWtldCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblxuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCJcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCI7XG5cblxuXHRcdFx0aW5kZW50RGVwdGgtLTtcblx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcIm1pbmltdW0gPSBtaW5pbWl6ZShvYmplY3RpdmVfZnVuY3Rpb24sIHBhcmFtcywgbWV0aG9kPVxcXCJcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyIDogXCJQb3dlbGxcIikgKyBcIlxcXCIsIHRvbD10b2xlcmFuY2UpXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJwcmludChjb3VudHMpXCI7XG5cdFx0fVxuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBicmFrZXQsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gYnJha2V0O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUW9iaiA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNpcmN1aXRSZXBsYWNlbWVudCkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY2lyY3VpdE5hbWUgPSBvcHRpb25zLmNpcmN1aXROYW1lO1xuXHR2YXIgZXhwZXJpbWVudE5hbWUgPSBvcHRpb25zLmV4cGVyaW1lbnROYW1lO1xuXHR2YXIgbnVtU2hvdHMgPSBvcHRpb25zLm51bVNob3RzO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblx0XG5cdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2xvYmFsUGFyYW1zKSk7XG5cdGZvcih2YXIgZ2xvYmFsUGFyYW1OYW1lIGluIGdsb2JhbFBhcmFtcykge1xuXHRcdGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdH1cblxuXHRjaXJjdWl0TmFtZSA9IGNpcmN1aXROYW1lIHx8IFwiXCI7XG5cdGV4cGVyaW1lbnROYW1lID0gZXhwZXJpbWVudE5hbWUgfHwgXCJcIjtcblx0bnVtU2hvdHMgPSBudW1TaG90cyB8fCAxO1xuXG5cdC8vIC0tLVxuXHQvLyBkZWNvbXBvc2UgY2lyY3VpdFxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblx0Ly8gLS0tXG5cblx0dmFyIGlkID0gdGhpcy5yYW5kb21TdHJpbmcoKTtcblx0dmFyIHBhcmVudFFvYmogPSB7cW9ial9pZDogXCJxb2JqX1wiICsgaWQsIHR5cGU6IFwiUUFTTVwiLCBzY2hlbWFfdmVyc2lvbjogXCIxLjBcIiwgZXhwZXJpbWVudHM6IFtdLCBoZWFkZXI6IHtkZXNjcmlwdGlvbjogY2lyY3VpdE5hbWV9LCBjb25maWc6e3Nob3RzOiBudW1TaG90cywgbWVtb3J5X3Nsb3RzOiAwfX07XG5cdHZhciBxb2JqID0ge2hlYWRlcjoge21lbW9yeV9zbG90czogMCwgbl9xdWJpdHM6IDAsIHFyZWdfc2l6ZXM6IFtdLCBxdWJpdF9sYWJlbHM6IFtdLCBjcmVnX3NpemVzOiBbXSwgY2xiaXRfbGFiZWxzOiBbXSwgbmFtZTogXCJjaXJjdWl0MFwifSwgY29uZmlnOiB7bl9xdWJpdHM6IDAsIG1lbW9yeV9zbG90czogMH0sIGluc3RydWN0aW9uczogW119O1xuXHR2YXIgY3JlZ05hbWVzID0gT2JqZWN0LmtleXMoY2lyY3VpdC5jcmVncyk7XG5cblx0dmFyIGludFRvRG91YmxlID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKE51bWJlci5pc0ludGVnZXIobm9kZSkpIHtcblx0XHRcdHJldHVybiBub2RlLnRvRml4ZWQoMSk7XG5cdFx0fVxuXHRcdHJldHVybiBub2RlO1xuXHR9O1xuXG5cdGlmKCFjaXJjdWl0UmVwbGFjZW1lbnQpe1xuXHRcdGlmKGV4cGVyaW1lbnROYW1lKXtcblx0XHRcdHFvYmouaGVhZGVyLmRlc2NyaXB0aW9uID0gZXhwZXJpbWVudE5hbWU7XG5cdFx0fVxuXHRcdGZvcihjcmVnTmFtZSBpbiBjaXJjdWl0LmNyZWdzKXtcblx0XHRcdHZhciBjcmVnTGVuZ3RoID0gY2lyY3VpdC5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoO1xuXHRcdFx0cGFyZW50UW9iai5jb25maWcubWVtb3J5X3Nsb3RzICs9IGNyZWdMZW5ndGg7XG5cdFx0XHRxb2JqLmhlYWRlci5jcmVnX3NpemVzLnB1c2goW2NyZWdOYW1lLCBjcmVnTGVuZ3RoXSk7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY3JlZ0xlbmd0aDsgaSsrKXtcblx0XHRcdFx0cW9iai5oZWFkZXIuY2xiaXRfbGFiZWxzLnB1c2goW2NyZWdOYW1lLCBpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHFvYmouaGVhZGVyLm1lbW9yeV9zbG90cyA9IHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cztcblx0XHRxb2JqLmhlYWRlci5uX3F1Yml0cyA9IGNpcmN1aXQubnVtUXViaXRzO1xuXHRcdHFvYmouY29uZmlnLm1lbW9yeV9zbG90cyA9IHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cztcblx0XHRxb2JqLmNvbmZpZy5uX3F1Yml0cyA9IGNpcmN1aXQubnVtUXViaXRzO1xuXHRcdHFvYmouaGVhZGVyLnFyZWdfc2l6ZXMucHVzaChbXCJxXCIsIGNpcmN1aXQubnVtUXViaXRzXSk7XG5cdH1cblxuXHR2YXIgcmVnaXN0ZXJTbG90cyA9IHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cztcblxuXHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpe1xuXHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRpZighYmFzaWNHYXRlKXtcblx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0aWYoY3VzdG9tR2F0ZSl7XG5cdFx0XHRcdGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRjaXJjdWl0TmFtZTogY2lyY3VpdE5hbWUsXG5cdFx0XHRcdFx0ZXhwZXJpbWVudE5hbWU6IGV4cGVyaW1lbnROYW1lLFxuXHRcdFx0XHRcdG51bVNob3RzOiBudW1TaG90c1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRwYXJlbnRRb2JqICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9Rb2JqKG5ld09wdGlvbnMsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspe1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKXtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdHZhciBxb2JqSW5zdHJ1Y3Rpb24gPSB7bmFtZSA6IFwiXCIsIHF1Yml0czogW119O1xuXHRcdFx0dmFyIHFvYmpSZXBsYWNlbWVudCA9IG51bGw7XG5cdFx0XHR2YXIgcW9iakVxdWl2YWxlbnQgPSBudWxsO1xuXHRcdFx0aWYoY29sdW1uID09IDApe1xuXHRcdFx0XHRxb2JqLmhlYWRlci5xdWJpdF9sYWJlbHMucHVzaChbXCJxXCIsIHdpcmVdKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKXtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0aWYoZ2F0ZURlZil7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKXtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50KXtcblx0XHRcdFx0XHRcdFx0cW9ialJlcGxhY2VtZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ucmVwbGFjZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdHFvYmpSZXBsYWNlbWVudC5tYXAoZnVuY3Rpb24ocmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbXMgPSBPYmplY3Qua2V5cyhnYXRlLm9wdGlvbnMucGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudFBhcmFtcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VtZW50LnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocmVwbGFjZW1lbnRQYXJhbXMuaW5kZXhPZihwYXJhbSkgPiAtMSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucGFyYW1zW3BhcmFtXSA9IGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1dO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uIDoge307XG5cdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmFkZEdhdGUocmVwbGFjZW1lbnQubmFtZSwgY29sdW1uLCBnYXRlLndpcmVzLCB7IHBhcmFtczogcmVwbGFjZW1lbnQucGFyYW1zLCBjb25kaXRpb246IHJlcGxhY2VtZW50Q29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRleHBlcmltZW50TmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdG51bVNob3RzOiBcIlwiXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucyA9IHFvYmouaW5zdHJ1Y3Rpb25zLmNvbmNhdChyZXBsYWNlbWVudENpcmN1aXQuZXhwb3J0VG9Rb2JqKG5ld09wdGlvbnMsIHRydWUpKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9ZWxzZSBpZihnYXRlRGVmLmV4cG9ydEluZm8ucWFzbSAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5lcXVpdmFsZW50KXtcblx0XHRcdFx0XHRcdFx0cW9iakVxdWl2YWxlbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5lcXVpdmFsZW50O1xuXHRcdFx0XHRcdFx0XHRxb2JqRXF1aXZhbGVudC5tYXAoZnVuY3Rpb24oZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVxdWl2YWxlbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBlcXVpdmFsZW50LndpcmVzLmxlbmd0aCA+IDEgPyBnYXRlLndpcmVzIDogZ2F0ZS53aXJlc1tlcXVpdmFsZW50LndpcmVzWzBdXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXFQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRpZihlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBlcXVpdmFsZW50IGdhdGUgcGFyYW1zIGNhbiBjb250YWluIHZhcmlhYmxlIGZyb20gZ2F0ZSBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBFdmFsdWF0ZSBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBnYXRlUGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zW2dhdGVQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnYXRlLm9wdGlvbnMucGFyYW1zW2dhdGVQYXJhbU5hbWVdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBFdmFsdWF0ZSBlcXVpdmFsZW50IGdhdGUncyBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZXFQYXJhbU5hbWUgaW4gZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXFQYXJhbXNbZXFQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShlcXVpdmFsZW50LnBhcmFtc1tlcVBhcmFtTmFtZV0sIGdhdGVQYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdHZhciBlcUNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IHt9O1xuXG5cdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuYWRkR2F0ZShlcXVpdmFsZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZVdpcmVzLCB7IHBhcmFtczogZXFQYXJhbXMsIGNvbmRpdGlvbjogZXFDb25kaXRpb24gfSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaXJjdWl0TmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdGV4cGVyaW1lbnROYW1lOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bnVtU2hvdHM6IFwiXCJcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdHFvYmouaW5zdHJ1Y3Rpb25zID0gcW9iai5pbnN0cnVjdGlvbnMuY29uY2F0KGVxdWl2YWxlbnRDaXJjdWl0LmV4cG9ydFRvUW9iaihuZXdPcHRpb25zLCB0cnVlKSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFxb2JqUmVwbGFjZW1lbnQgJiYgIXFvYmpFcXVpdmFsZW50KXtcblx0XHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0XHRpZih0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdKXtcblx0XHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiaWRcIjoge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVOYW1lID0gXCJpZGVuXCI7XG5cdFx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwicjJcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJ1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS8yXCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJyNFwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzRcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcInI4XCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvOFwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwiY3IyXCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwiY3UxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzJcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcImNyNFwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcImN1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS80XCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJjcjhcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJjdTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvOFwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLm5hbWUgPSBnYXRlTmFtZTtcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnF1Yml0cyA9IGdhdGUud2lyZXM7XG5cblx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyl7XG5cdFx0XHRcdFx0XHRcdHZhciBib29sZWFuSW5zdHJ1Y3Rpb24gPSB7bmFtZTogXCJcIiwgcmVnaXN0ZXI6IHJlZ2lzdGVyU2xvdHMsIHJlbGF0aW9uOiBcIj09XCIsIG1hc2s6IFwiXCIsIHZhbDogXCJcIn07XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnU2l6ZSA9IGNpcmN1aXQuY3JlZ3NbZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdHZhciBudW1iZXJPZkJpdHNTaGlmdCA9IDA7XG5cdFx0XHRcdFx0XHRcdHZhciBtYXNrVmFsdWUgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgbWFzayA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdHZhciB2YWwgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGluZGV4T2ZSZWdpc3RlciA9IGNyZWdOYW1lcy5pbmRleE9mKGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyk7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBpbmRleE9mUmVnaXN0ZXI7IGkrKyl7XG5cdFx0XHRcdFx0XHRcdFx0bnVtYmVyT2ZCaXRzU2hpZnQgKz0gY2lyY3VpdC5jcmVnc1tjcmVnTmFtZXNbaV1dLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IChnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICUgTWF0aC5wb3coMiwgY3JlZ1NpemUpKSpNYXRoLnBvdygyLCBudW1iZXJPZkJpdHNTaGlmdCk7XG5cdFx0XHRcdFx0XHRcdHZhbCA9IFwiMHhcIiArIHZhbHVlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmKG51bWJlck9mQml0c1NoaWZ0ID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4cG9uZW50ID0gTWF0aC5wb3coMiwgbnVtYmVyT2ZCaXRzU2hpZnQpO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgYml0ID0gMDsgYml0IDwgY3JlZ1NpemU7IGJpdCsrKXtcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRtYXNrVmFsdWUgKz0gZXhwb25lbnQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRleHBvbmVudCAqPSAyO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRtYXNrID0gXCIweFwiICsgbWFza1ZhbHVlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bWFzayA9IFwiMHhcIiArIChNYXRoLnBvdygyLCBjcmVnU2l6ZSkgLSAxKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRib29sZWFuSW5zdHJ1Y3Rpb24ubmFtZSA9IFwiYmZ1bmNcIjtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLmNvbmRpdGlvbmFsID0gcmVnaXN0ZXJTbG90cztcblx0XHRcdFx0XHRcdFx0Ym9vbGVhbkluc3RydWN0aW9uLm1hc2sgPSBtYXNrO1xuXHRcdFx0XHRcdFx0XHRib29sZWFuSW5zdHJ1Y3Rpb24udmFsID0gdmFsO1xuXHRcdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucy5wdXNoKGJvb2xlYW5JbnN0cnVjdGlvbik7XG5cdFx0XHRcdFx0XHRcdHJlZ2lzdGVyU2xvdHMgKz0gMTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKXtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLm1lbW9yeSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRxb2JqSW5zdHJ1Y3Rpb24ucmVnaXN0ZXIgPSBbXTtcblx0XHRcdFx0XHRcdFx0dmFyIHByZXZSZWdpc3Rlckxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdHZhciBpbmRleE9mUmVnaXN0ZXIgPSBjcmVnTmFtZXMuaW5kZXhPZihnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGluZGV4T2ZSZWdpc3RlcjsgaSsrKXtcblx0XHRcdFx0XHRcdFx0XHRwcmV2UmVnaXN0ZXJMZW5ndGggKz0gY2lyY3VpdC5jcmVnc1tjcmVnTmFtZXNbaV1dLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ0JpdCA9IHByZXZSZWdpc3Rlckxlbmd0aCArIGdhdGUub3B0aW9ucy5jcmVnLmJpdDtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLm1lbW9yeS5wdXNoKGNyZWdCaXQpO1xuXHRcdFx0XHRcdFx0XHRxb2JqSW5zdHJ1Y3Rpb24ucmVnaXN0ZXIucHVzaChjcmVnQml0KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmKXtcblx0XHRcdFx0XHRcdFx0XHRwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRxb2JqSW5zdHJ1Y3Rpb24ucGFyYW1zID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0gfHwgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdLnRvU3RyaW5nKCkpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5ldmFsdWF0ZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0sIGdsb2JhbFBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnBhcmFtcy5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFvYmouaW5zdHJ1Y3Rpb25zLnB1c2gocW9iakluc3RydWN0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0XG5cdGlmKGNpcmN1aXRSZXBsYWNlbWVudCl7XG5cdFx0cmV0dXJuIHFvYmouaW5zdHJ1Y3Rpb25zO1xuXHR9XG5cblx0aWYocW9iai5pbnN0cnVjdGlvbnMubGVuZ3RoKXtcblx0XHRwYXJlbnRRb2JqLmV4cGVyaW1lbnRzLnB1c2gocW9iaik7XG5cdH1cblxuXHRyZXR1cm4gcGFyZW50UW9iajtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNsZWFyUGFydGl0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnBhcnRpdGlvbk1hcCA9IFtdO1xuXHR0aGlzLnBhcnRpdGlvbkNvdW50ID0gMDtcblx0dGhpcy5wYXJ0aXRpb25JbmZvID0ge307XG5cblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHR0aGlzLnBhcnRpdGlvbk1hcC5wdXNoKFtdKTtcblx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0XHR0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXS5wdXNoKC0xKTtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jcmVhdGVQYXJ0aXRpb25zID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuY2xlYXJQYXJ0aXRpb25zKCk7XG5cblx0dmFyIHdpcmVQYXJ0aXRpb25zID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0d2lyZVBhcnRpdGlvbnMucHVzaCgtMSk7XG5cdH1cblxuXHR2YXIgcGFydGl0aW9uQ291bnRlciA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLndpcmVzKSB7XG5cdFx0XHRcdHZhciBwcmV2UGFydGl0aW9ucyA9IFtdO1xuXHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdHZhciB3ciA9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0dmFyIHByZXZQYXJ0aXRpb24gPSB3aXJlUGFydGl0aW9uc1t3cl07XG5cdFx0XHRcdFx0aWYocHJldlBhcnRpdGlvbnMuaW5kZXhPZihwcmV2UGFydGl0aW9uKSA8IDApIHtcblx0XHRcdFx0XHRcdHByZXZQYXJ0aXRpb25zLnB1c2gocHJldlBhcnRpdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBwYXJ0aXRpb24gPSAtMTtcblx0XHRcdFx0aWYocHJldlBhcnRpdGlvbnMubGVuZ3RoICE9IDEgfHwgcHJldlBhcnRpdGlvbnNbMF0gPT0gLTEpIHtcblx0XHRcdFx0XHRwYXJ0aXRpb24gPSBwYXJ0aXRpb25Db3VudGVyKys7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFydGl0aW9uID0gcHJldlBhcnRpdGlvbnNbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdHZhciB3ciA9IGdhdGUud2lyZXNbd107XG5cblx0XHRcdFx0XHRvbGRQYXJ0aXRpb24gPSB3aXJlUGFydGl0aW9uc1t3cl07XG5cdFx0XHRcdFx0aWYob2xkUGFydGl0aW9uID09IC0xKSB7XG5cdFx0XHRcdFx0XHR3aXJlUGFydGl0aW9uc1t3cl0gPSBwYXJ0aXRpb247XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKHdpcmVQYXJ0aXRpb25zW2ldID09IG9sZFBhcnRpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdHdpcmVQYXJ0aXRpb25zW2ldID0gcGFydGl0aW9uO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl0gPSB3aXJlUGFydGl0aW9uc1t3aXJlXTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnBhcnRpdGlvbkNvdW50ID0gcGFydGl0aW9uQ291bnRlcjtcblxuXHRmb3IodmFyIHBhcnRpdGlvbiA9IDA7IHBhcnRpdGlvbiA8IHBhcnRpdGlvbkNvdW50ZXI7IHBhcnRpdGlvbisrKSB7XG5cdFx0dGhpcy5wYXJ0aXRpb25JbmZvW3BhcnRpdGlvbl0gPSB0aGlzLnBhcnRpdGlvbkJvdW5kcyhwYXJ0aXRpb24pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJpbnRQYXJ0aXRpb25zID0gZnVuY3Rpb24oKSB7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dmFyIHJvdyA9IFwiXCI7XG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0dmFyIHBhcnQgPSB0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYocGFydCA9PSAtMSkgcGFydCA9IFwiIFwiO1xuXHRcdFx0aWYodGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKSkge1xuXHRcdFx0XHRwYXJ0ID0gcGFydCArIFwiKlwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFydCA9IHBhcnQgKyBcIiBcIjtcblx0XHRcdH1cblx0XHRcdHdoaWxlKHBhcnQubGVuZ3RoIDwgNCkge1xuXHRcdFx0XHRwYXJ0ID0gXCIgXCIgKyBwYXJ0O1xuXHRcdFx0fVxuXHRcdFx0cm93ICs9IHBhcnQ7XG5cdFx0fVxuXHRcdHZhciB3ID0gd2lyZSArIFwiXCI7XG5cdFx0d2hpbGUody5sZW5ndGggPCAyKSB7XG5cdFx0XHR3ID0gXCIwXCIgKyB3O1xuXHRcdH1cblx0XHRyb3cgPSBcInFcIiArIHcgKyByb3c7XG5cdFx0Y29uc29sZS5sb2cocm93KTtcblx0fVxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucGFydGl0aW9uQm91bmRzID0gZnVuY3Rpb24ocGFydGl0aW9uSW5kZXgpIHtcblx0dmFyIGJvdW5kcyA9IHtcblx0XHR3aXJlOiB7XG5cdFx0XHR0b3A6IC0xLFxuXHRcdFx0Ym90dG9tOiAtMVxuXHRcdH0sXG5cdFx0Y29sdW1uOiB7XG5cdFx0XHRsZWZ0OiAtMSxcblx0XHRcdHJpZ2h0OiAtMVxuXHRcdH0sXG5cdFx0d2lyZU1hcDoge1xuXG5cdFx0fSxcblx0XHRwYXJlbnRzOiB7XG5cblx0XHR9XG5cdH07XG5cblx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIHBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihwYXJ0aXRpb24gPT0gcGFydGl0aW9uSW5kZXgpIHtcblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmKGJvdW5kcy53aXJlLnRvcCA8IDApIHtcblx0XHRcdFx0XHRib3VuZHMud2lyZS50b3AgPSB3aXJlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGJvdW5kcy53aXJlLmJvdHRvbSA8IHdpcmUpIHtcblx0XHRcdFx0XHRib3VuZHMud2lyZS5ib3R0b20gPSB3aXJlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoYm91bmRzLmNvbHVtbi5sZWZ0IDwgMCkge1xuXHRcdFx0XHRcdGJvdW5kcy5jb2x1bW4ubGVmdCA9IGNvbHVtbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihib3VuZHMuY29sdW1uLnJpZ2h0IDwgY29sdW1uKSB7XG5cdFx0XHRcdFx0Ym91bmRzLmNvbHVtbi5yaWdodCA9IGNvbHVtbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKCFmb3VuZCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIHBhcnRpdGlvbldpcmUgPSAwO1xuXHRmb3IodmFyIHdpcmUgPSBib3VuZHMud2lyZS50b3A7IHdpcmUgPD0gYm91bmRzLndpcmUuYm90dG9tOyB3aXJlKyspIHtcblx0XHR2YXIgcGFydGl0aW9uID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bYm91bmRzLmNvbHVtbi5sZWZ0XTtcblx0XHRpZihwYXJ0aXRpb24gPT0gcGFydGl0aW9uSW5kZXgpIHtcblx0XHRcdGJvdW5kcy53aXJlTWFwW3dpcmVdID0gcGFydGl0aW9uV2lyZTtcblxuXHRcdFx0cGFydGl0aW9uV2lyZSsrO1xuXHRcdH1cblx0fVxuXHRib3VuZHMubnVtUXViaXRzID0gcGFydGl0aW9uV2lyZTtcblxuXHRpZihib3VuZHMuY29sdW1uLmxlZnQgPiAwKSB7XG5cdFx0Zm9yKHZhciB3aXJlIGluIGJvdW5kcy53aXJlTWFwKSB7XG5cdFx0XHR2YXIgcGFyZW50UGFydGl0aW9uID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bYm91bmRzLmNvbHVtbi5sZWZ0IC0gMV07XG5cdFx0XHRpZihwYXJlbnRQYXJ0aXRpb24gPj0gMCkge1xuXHRcdFx0XHRpZighYm91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXSkge1xuXHRcdFx0XHRcdGJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0gPSB7fTtcblx0XHRcdFx0XHRib3VuZHMucGFyZW50c1twYXJlbnRQYXJ0aXRpb25dLmxpbmtzID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIHBhcmVudEJvdW5kcyA9IHRoaXMucGFydGl0aW9uSW5mb1twYXJlbnRQYXJ0aXRpb25dO1xuXHRcdFx0XHRmb3IodmFyIHB3aXJlIGluIHBhcmVudEJvdW5kcy53aXJlTWFwKSB7XG5cdFx0XHRcdFx0aWYocHdpcmUgPT0gd2lyZSkge1xuXHRcdFx0XHRcdFx0Ym91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXS5saW5rcy5wdXNoKGJvdW5kcy53aXJlTWFwW3dpcmVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYm91bmRzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucGFydGl0aW9uQ2lyY3VpdCA9IGZ1bmN0aW9uKHBhcnRpdGlvbkluZGV4KSB7XG5cdHZhciBib3VuZHMgPSB0aGlzLnBhcnRpdGlvbkluZm9bcGFydGl0aW9uSW5kZXhdO1xuXHRpZighYm91bmRzKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgY29tYmluZUxpc3QgPSBbXTtcblx0dmFyIHVzZWRXaXJlcyA9IFtdO1xuXHRmb3IodmFyIHBhcmVudFBhcnRpdGlvbiBpbiBib3VuZHMucGFyZW50cykge1xuXHRcdHZhciBjb21iaW5lSXRlbSA9IHt9O1xuXG5cdFx0Y29tYmluZUl0ZW0uY2lyY3VpdCA9IHRoaXMucGFydGl0aW9uQ2FjaGVbcGFyZW50UGFydGl0aW9uXTtcblx0XHRjb21iaW5lSXRlbS53aXJlcyA9IFtdO1xuXHRcdGNvbWJpbmVJdGVtLndpcmVzID0gYm91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXS5saW5rcztcblxuXHRcdHVzZWRXaXJlcyA9IHVzZWRXaXJlcy5jb25jYXQoY29tYmluZUl0ZW0ud2lyZXMpO1xuXG5cdFx0Y29tYmluZUxpc3QucHVzaChjb21iaW5lSXRlbSk7XG5cdH1cblxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdC8vIGNvbWJpbmUgc3RhdGUgZnJvbSBwYXJlbnQgcGFydGl0aW9uc1xuXHRpZihjb21iaW5lTGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0aWYoYm91bmRzLm51bVF1Yml0cyA+IHVzZWRXaXJlcy5sZW5ndGgpIHtcblx0XHRcdHZhciBjb21iaW5lSXRlbSA9IHt9O1xuXHRcdFx0Y29tYmluZUl0ZW0uY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdChib3VuZHMubnVtUXViaXRzIC0gdXNlZFdpcmVzLmxlbmd0aCk7XG5cdFx0XHRjb21iaW5lSXRlbS53aXJlcyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGJvdW5kcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0XHRpZih1c2VkV2lyZXMuaW5kZXhPZihpKSA8IDApIHtcblx0XHRcdFx0XHRjb21iaW5lSXRlbS53aXJlcy5wdXNoKGkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb21iaW5lTGlzdC5wdXNoKGNvbWJpbmVJdGVtKTtcblx0XHR9XG5cdFx0Y2lyY3VpdC5zZXRDb21iaW5lZFN0YXRlKGNvbWJpbmVMaXN0KTtcblx0fVxuXG5cdC8vIGFkZCBnYXRlcyB0byB0aGUgY2lyY3VpdFxuXHRmb3IodmFyIGNvbHVtbiA9IGJvdW5kcy5jb2x1bW4ubGVmdDsgY29sdW1uIDw9IGJvdW5kcy5jb2x1bW4ucmlnaHQ7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gYm91bmRzLndpcmUudG9wOyB3aXJlIDw9IGJvdW5kcy53aXJlLmJvdHRvbTsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgcGFydGl0aW9uID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKHBhcnRpdGlvbiA9PSBwYXJ0aXRpb25JbmRleCkge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBbXTtcblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0dmFyIHdyID0gZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdGdhdGVXaXJlcy5wdXNoKGJvdW5kcy53aXJlTWFwW3dyXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNpcmN1aXQuYWRkR2F0ZShnYXRlLm5hbWUsIGNvbHVtbiAtIGJvdW5kcy5jb2x1bW4ubGVmdCwgZ2F0ZVdpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNpcmN1aXQ7XG59O1xuXG4vL1xuLy8gT3B0aW9uczpcbi8vICAge1xuLy8gICAgIHN0cmljdE1vZGU6IGJvb2wsXG4vLyAgICAgcGFydGl0aW9uaW5nOiBib29sLFxuLy8gICAgIGNvbnRpbnVlOiBib29sLFxuLy8gICAgIGluaXRpYWxTdGF0ZTogQXJyYXlcbi8vICAgICBvbkdhdGU6IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZSwgZ2F0ZUNvdW50ZXIpIHsgLi4uIH0sXG4vLyAgICAgb25Db2x1bW46IGZ1bmN0aW9uKGNvbHVtbikgeyAuLi4gfVxuLy8gICB9XG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uKGluaXRpYWxWYWx1ZXMsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dGhpcy5tZWFzdXJlUmVzZXRzUXViaXQgPSAhIW9wdGlvbnMuc3RyaWN0TW9kZTtcblxuXHRpZighb3B0aW9ucy5jb250aW51ZSkge1xuXHRcdHRoaXMuaW5pdFN0YXRlKCk7XG5cdFx0dGhpcy5zdGF0cy5kdXJhdGlvbiA9IDA7XG5cdH1cblxuXHRpZihvcHRpb25zLmluaXRpYWxTdGF0ZSkge1xuXHRcdGlmKEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbml0aWFsU3RhdGUpKSB7XG5cdFx0XHR0aGlzLnN0YXRlID0ge307XG5cdFx0XHRmb3IodmFyIHZhbEluZGV4ID0gMDsgdmFsSW5kZXggPCBvcHRpb25zLmluaXRpYWxTdGF0ZS5sZW5ndGg7IHZhbEluZGV4KyspIHtcblx0XHRcdFx0dmFyIHZhbCA9IG9wdGlvbnMuaW5pdGlhbFN0YXRlW3ZhbEluZGV4XTtcblxuXHRcdFx0XHRpZihBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA9PSAyKSB7XG5cdFx0XHRcdFx0dmFsID0gbWF0aC5jb21wbGV4KHZhbFswXSwgdmFsWzFdKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHZhbCA9IHRoaXMuZXZhbE1hdGhTdHJpbmcodmFsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZih0eXBlb2YgdmFsID09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHR2YWwgPSBtYXRoLmNvbXBsZXgodmFsLCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnN0YXRlW3ZhbEluZGV4ICsgXCJcIl0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc3RhdGUgPSBvcHRpb25zLmluaXRpYWxTdGF0ZTtcblx0XHR9XG5cblx0XHR0aGlzLnN0YXRlQml0cyA9IDA7XG5cdFx0Zm9yKHZhciBhaW5kZXggaW4gdGhpcy5zdGF0ZSkge1xuXHRcdFx0dGhpcy5zdGF0ZUJpdHMgfD0gcGFyc2VJbnQoYWluZGV4KTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnN0YXRzLnN0YXJ0ID0gbmV3IERhdGUoKTtcblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHRpZihpbml0aWFsVmFsdWVzKSB7XG5cdFx0ZGVjb21wb3NlZC5pbnNlcnRDb2x1bW4oMCk7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdGlmKGluaXRpYWxWYWx1ZXNbd2lyZV0pIHtcblx0XHRcdFx0ZGVjb21wb3NlZC5hZGRHYXRlKFwieFwiLCAwLCB3aXJlLCB7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIHBhcnRpdGlvbmluZyA9IG9wdGlvbnMucGFydGl0aW9uaW5nO1xuXG5cdGlmKHBhcnRpdGlvbmluZykge1xuXHRcdGRlY29tcG9zZWQuY3JlYXRlUGFydGl0aW9ucygpO1xuLy9cdFx0ZGVjb21wb3NlZC5wcmludFBhcnRpdGlvbnMoKTtcblx0fVxuXG5cdHZhciBudW1Db2xzID0gZGVjb21wb3NlZC5udW1Db2xzKCk7XG5cdHZhciBnYXRlQ291bnRlciA9IDA7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdGdhdGVDb3VudGVyKys7XG5cblx0XHRcdFx0dmFyIGV4ZWN1dGVHYXRlID0gdHJ1ZTtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0dmFyIGNyZWdWYWx1ZSA9IHRoaXMuZ2V0Q3JlZ1ZhbHVlKGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyk7XG5cdFx0XHRcdFx0ZXhlY3V0ZUdhdGUgPSBjcmVnVmFsdWUgPT09IGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihleGVjdXRlR2F0ZSkge1xuXG5cdFx0XHRcdFx0aWYocGFydGl0aW9uaW5nKSB7XG5cdFx0XHRcdFx0XHR2YXIgcGFydGl0aW9uID0gZGVjb21wb3NlZC5wYXJ0aXRpb25NYXBbd2lyZV1bY29sdW1uXTtcblx0XHRcdFx0XHRcdGlmKCFkZWNvbXBvc2VkLnBhcnRpdGlvbkNhY2hlW3BhcnRpdGlvbl0pIHtcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtwYXJ0aXRpb25dID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DaXJjdWl0KHBhcnRpdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZhciBwY2lyYyA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbcGFydGl0aW9uXTtcblx0XHRcdFx0XHRcdHZhciBib3VuZHMgPSBkZWNvbXBvc2VkLnBhcnRpdGlvbkluZm9bcGFydGl0aW9uXTtcblxuXHRcdFx0XHRcdFx0dmFyIHBjb2x1bW4gPSBjb2x1bW4gLSBib3VuZHMuY29sdW1uLmxlZnQ7XG5cblx0XHRcdFx0XHRcdHZhciBwZ2F0ZSA9IHBjaXJjLmdldEdhdGVBdChwY29sdW1uLCBib3VuZHMud2lyZU1hcFt3aXJlXSk7XG5cblx0XHRcdFx0XHRcdHBjaXJjLmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNyZWdzKSk7XG5cdFx0XHRcdFx0XHRwY2lyYy5hcHBseUdhdGUocGdhdGUubmFtZSwgcGNvbHVtbiwgcGdhdGUud2lyZXMsIHBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0dGhpcy5jcmVncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGNpcmMuY3JlZ3MpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5hcHBseUdhdGUoZ2F0ZS5uYW1lLCBjb2x1bW4sIGdhdGUud2lyZXMsIGdhdGUub3B0aW9ucyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2FsbGJhY2sgYWZ0ZXIgZ2F0ZSBpcyBmaW5pc2hlZFxuXHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMub25HYXRlKSB7XG5cdFx0XHRcdFx0b3B0aW9ucy5vbkdhdGUoY29sdW1uLCB3aXJlLCBnYXRlQ291bnRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gY2FsbGJhY2sgYWZ0ZXIgY29sdW1uIGlzIGZpbmlzaGVkXG5cdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLm9uQ29sdW1uKSB7XG5cdFx0XHRvcHRpb25zLm9uQ29sdW1uKGNvbHVtbik7XG5cdFx0fVxuXHR9XG5cblx0aWYocGFydGl0aW9uaW5nKSB7XG5cdFx0dmFyIGxhc3RQYXJ0aXRpb25zID0gW107XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBwYXJ0aXRpb24gPSBkZWNvbXBvc2VkLnBhcnRpdGlvbk1hcFt3aXJlXVtudW1Db2xzIC0gMV07XG5cdFx0XHRpZihwYXJ0aXRpb24gPj0gMCAmJiBsYXN0UGFydGl0aW9ucy5pbmRleE9mKHBhcnRpdGlvbikgPCAwKSB7XG5cdFx0XHRcdGxhc3RQYXJ0aXRpb25zLnB1c2gocGFydGl0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYobGFzdFBhcnRpdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRpZihsYXN0UGFydGl0aW9ucy5sZW5ndGggPT0gMSkge1xuXHRcdFx0XHR0aGlzLnN0YXRlID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtsYXN0UGFydGl0aW9uc1swXV0uc3RhdGU7XG5cdFx0XHRcdHRoaXMuc3RhdGVCaXRzID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtsYXN0UGFydGl0aW9uc1swXV0uc3RhdGVCaXRzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIHN0YXJ0VGltZSA9IHRoaXMuc3RhdHMuc3RhcnQ7XG5cdFx0XHRcdHZhciBjb21iaW5lTGlzdCA9IFtdO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbGFzdFBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgbGFzdFBhcnRpdGlvbiA9IGxhc3RQYXJ0aXRpb25zW2ldO1xuXG5cdFx0XHRcdFx0dmFyIGNvbWJpbmVJdGVtID0ge307XG5cblx0XHRcdFx0XHRjb21iaW5lSXRlbS5jaXJjdWl0ID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtsYXN0UGFydGl0aW9uXTtcblx0XHRcdFx0XHRjb21iaW5lSXRlbS53aXJlcyA9IFtdO1xuXG5cdFx0XHRcdFx0dmFyIGxhc3RCb3VuZHMgPSBkZWNvbXBvc2VkLnBhcnRpdGlvbkluZm9bbGFzdFBhcnRpdGlvbl07XG5cdFx0XHRcdFx0Zm9yKHZhciB3aXJlIGluIGxhc3RCb3VuZHMud2lyZU1hcCkge1xuXHRcdFx0XHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMucHVzaChwYXJzZUludCh3aXJlKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29tYmluZUxpc3QucHVzaChjb21iaW5lSXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zZXRDb21iaW5lZFN0YXRlKGNvbWJpbmVMaXN0KTtcblx0XHRcdFx0dGhpcy5zdGF0cy5zdGFydCA9IHN0YXJ0VGltZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnN0YXRzLmVuZCA9IG5ldyBEYXRlKCk7XG5cdHRoaXMuc3RhdHMuZHVyYXRpb24gKz0gdGhpcy5zdGF0cy5lbmQgLSB0aGlzLnN0YXRzLnN0YXJ0O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNvbnRpbnVlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucnVuKG51bGwsIHtcblx0XHRjb250aW51ZTogdHJ1ZVxuXHR9KTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zdGF0ZUFzQXJyYXkgPSBmdW5jdGlvbihvbmx5UG9zc2libGUsIHNraXBJdGVtcywgYmxvY2tTaXplLCByZXZlcnNlQml0cykge1xuXHR2YXIgc3RhdGUgPSBbXTtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXG5cdHNraXBJdGVtcyA9IHNraXBJdGVtcyB8fCAwO1xuXHRibG9ja1NpemUgPSBibG9ja1NpemUgfHwgKG9ubHlQb3NzaWJsZSA/IHRoaXMubnVtQW1wbGl0dWRlcyhvbmx5UG9zc2libGUpIDogbnVtQW1wbGl0dWRlcyk7XG5cblx0dmFyIGNvdW50ID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUFtcGxpdHVkZXM7IGkrKykge1xuXHRcdHZhciBhbXBJbmRleCA9IGk7XG5cdFx0aWYocmV2ZXJzZUJpdHMpIHtcblx0XHRcdGFtcEluZGV4ID0gcmV2ZXJzZUJpdHdpc2UoaSwgdGhpcy5udW1RdWJpdHMpO1xuXHRcdH1cblxuXHRcdHZhciBhbXBsaXR1ZGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbYW1wSW5kZXhdIHx8IG1hdGguY29tcGxleCgwLCAwKSwgMTQpO1xuXG5cdFx0aWYoIW9ubHlQb3NzaWJsZSB8fCAoYW1wbGl0dWRlLnJlIHx8IGFtcGxpdHVkZS5pbSkpIHtcblx0XHRcdGlmKGNvdW50ID49IHNraXBJdGVtcykge1xuXHRcdFx0XHR2YXIgaW5kZXhCaW5TdHIgPSBpLnRvU3RyaW5nKDIpO1xuXHRcdFx0XHR3aGlsZShpbmRleEJpblN0ci5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0XHRcdGluZGV4QmluU3RyID0gXCIwXCIgKyBpbmRleEJpblN0cjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBhbXBsaXR1ZGVTdHIgPSB0aGlzLmZvcm1hdENvbXBsZXgoYW1wbGl0dWRlLCB7IGZpeGVkV2lkdGg6IHRydWUsIGRlY2ltYWxQbGFjZXM6IDgsIGlvdGFDaGFyOiBcImlcIiB9KTtcblx0XHRcdFx0dmFyIG1hZ25pdHVkZSA9IG1hdGgucG93KG1hdGguYWJzKGFtcGxpdHVkZSksIDIpO1xuXHRcdFx0XHR2YXIgY2hhbmNlID0gbWFnbml0dWRlICogMTAwO1xuXHRcdFx0XHR2YXIgY2hhbmNlU3RyID0gY2hhbmNlLnRvRml4ZWQoNSk7XG5cdFx0XHRcdHZhciBwaGFzZSA9IG1hdGguYXJnKGFtcGxpdHVkZSk7XG5cdFx0XHRcdHZhciBwaGFzZVN0ciA9IHBoYXNlLnRvRml4ZWQoNSk7XG5cblx0XHRcdFx0c3RhdGUucHVzaCh7XG5cdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0aW5kZXhCaW5TdHI6IGluZGV4QmluU3RyLFxuXHRcdFx0XHRcdGFtcGxpdHVkZTogYW1wbGl0dWRlLFxuXHRcdFx0XHRcdGFtcGxpdHVkZVN0cjogYW1wbGl0dWRlU3RyLFxuXHRcdFx0XHRcdG1hZ25pdHVkZTogbWFnbml0dWRlLFxuXHRcdFx0XHRcdGNoYW5jZTogY2hhbmNlLFxuXHRcdFx0XHRcdGNoYW5jZVN0cjogY2hhbmNlU3RyLFxuXHRcdFx0XHRcdHBoYXNlOiBwaGFzZSxcblx0XHRcdFx0XHRwaGFzZVN0cjogcGhhc2VTdHJcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvdW50Kys7XG5cblx0XHRcdGlmKHN0YXRlLmxlbmd0aCA9PSBibG9ja1NpemUpIHtcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdGF0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zdGF0ZUFzU2ltcGxlQXJyYXkgPSBmdW5jdGlvbihyZXZlcnNlQml0cykge1xuXG5cdHZhciBudW1BbXBsaXR1ZGVzID0gdGhpcy5udW1BbXBsaXR1ZGVzKCk7XG5cdGlmKCF0aGlzLnN0YXRlKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0dmFyIHN0YXRlID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBudW1BbXBsaXR1ZGVzOyBpKyspIHtcblx0XHR2YXIgYW1wSW5kZXggPSBpO1xuXHRcdGlmKHJldmVyc2VCaXRzKSB7XG5cdFx0XHRhbXBJbmRleCA9IHJldmVyc2VCaXR3aXNlKGksIHRoaXMubnVtUXViaXRzKTtcblx0XHR9XG5cblx0XHRzdGF0ZS5wdXNoKG1hdGgucm91bmQodGhpcy5zdGF0ZVthbXBJbmRleF0gfHwgbWF0aC5jb21wbGV4KDAsIDApLCAxNCkpO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnN0YXRlQXNTdHJpbmcgPSBmdW5jdGlvbihvbmx5UG9zc2libGUpIHtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXHRpZighdGhpcy5zdGF0ZSkge1xuXHRcdHJldHVybiBcIkVycm9yOiBjaXJjdWl0IGlzIG5vdCBpbml0aWFsaXplZC4gUGxlYXNlIGNhbGwgaW5pdFN0YXRlKCkgb3IgcnVuKCkgbWV0aG9kLlwiO1xuXHR9XG5cblx0dmFyIHMgPSBcIlwiO1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQW1wbGl0dWRlczsgaSsrKSB7XG5cdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2ldIHx8IG1hdGguY29tcGxleCgwLCAwKSwgMTQpO1xuXHRcdGlmKCFvbmx5UG9zc2libGUgfHwgKHN0YXRlLnJlIHx8IHN0YXRlLmltKSkge1xuXHRcdFx0dmFyIG0gPSBtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpICogMTAwO1xuXG5cdFx0XHQvLyBiaW5hcnkgc3RyaW5nXG5cdFx0XHR2YXIgYmluID0gaS50b1N0cmluZygyKTtcblx0XHRcdHdoaWxlKGJpbi5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcmlnaHQgYWxpZ25lZCBwZXJjZW50XG5cdFx0XHR2YXIgcGVyYyA9IG0udG9GaXhlZCg1KTtcblx0XHRcdHdoaWxlKHBlcmMubGVuZ3RoIDwgOSkge1xuXHRcdFx0XHRwZXJjID0gXCIgXCIgKyBwZXJjO1xuXHRcdFx0fVxuXG5cdFx0XHRzICs9IHRoaXMuZm9ybWF0Q29tcGxleChzdGF0ZSwgeyBmaXhlZFdpZHRoOiB0cnVlLCBkZWNpbWFsUGxhY2VzOiA4LCBpb3RhQ2hhcjogXCJpXCIgfSkgKyBcInxcIiArIGJpbiArIFwiPlxcdFwiICsgcGVyYyArIFwiJVxcblwiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wcmludCA9IGZ1bmN0aW9uKG9ubHlQb3NzaWJsZSkge1xuXHRjb25zb2xlLmxvZyh0aGlzLnN0YXRlQXNTdHJpbmcob25seVBvc3NpYmxlKSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ290Q2xhc3NpY2FsQ29udHJvbCA9IGZ1bmN0aW9uKCkge1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdvdE1lYXN1cmVtZW50ID0gZnVuY3Rpb24oKSB7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlZ0NvdW50ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBjcmVnQ291bnQgPSAwO1xuXHRmb3IodmFyIGNyZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRjcmVnQ291bnQrKztcblx0fVxuXHRyZXR1cm4gY3JlZ0NvdW50O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdzID0gZnVuY3Rpb24oKSB7XG5cdHZhciByZXMgPSB7fTtcblx0Zm9yKHZhciBjcmVnIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRyZXNbY3JlZ10gPSB0aGlzLmdldENyZWdWYWx1ZShjcmVnKTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdzQXNTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcInJlZ1xcdGJpblxcdGRlY1xcblwiO1xuXHRmb3IodmFyIGNyZWcgaW4gdGhpcy5jcmVncykge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMuZ2V0Q3JlZ1ZhbHVlKGNyZWcpO1xuXG5cdFx0Ly8gYmluYXJ5IHN0cmluZ1xuXHRcdHZhciBiaW4gPSB2YWx1ZS50b1N0cmluZygyKTtcblx0XHR2YXIgbGVuID0gdGhpcy5jcmVnc1tjcmVnXSA/IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDEgOiAxO1xuXHRcdHdoaWxlKGJpbi5sZW5ndGggPCBsZW4pIHtcblx0XHRcdGJpbiA9IFwiMFwiICsgYmluO1xuXHRcdH1cblxuXHRcdHMgKz0gY3JlZyArIFwiXFx0XCIgKyBiaW4gKyBcIlxcdFwiICsgdmFsdWUgKyBcIlxcblwiO1xuXHR9XG5cdHJldHVybiBzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlYXRlQ3JlZyA9IGZ1bmN0aW9uKGNyZWcsIGxlbikge1xuXHR0aGlzLmNyZWdzW2NyZWddID0gW107XG5cblx0Ly8gZXh0ZW5kIHJlZ2lzdGVyXG5cdHdoaWxlKHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIDwgKGxlbiB8fCAxKSkge1xuXHRcdHRoaXMuY3JlZ3NbY3JlZ10ucHVzaCgwKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZUNyZWcgPSBmdW5jdGlvbihjcmVnKSB7XG5cdC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gY3JlZ1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgcmVtb3ZlR2F0ZXMgPSBbXTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdC8vIGdhdGUgd3JpdGluZyB0byBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jcmVnICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSA9PSBjcmVnKSB7XG5cdFx0XHRcdFx0aWYocmVtb3ZlR2F0ZXMuaW5kZXhPZihnYXRlLmlkKSA8IDApIHtcblx0XHRcdFx0XHRcdHJlbW92ZUdhdGVzLnB1c2goZ2F0ZS5pZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZ2F0ZSBjb250cm9sbGVkIGJ5IGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID09IGNyZWcpIHtcblx0XHRcdFx0XHRkZWxldGUgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGRlbGV0ZSByZWdpc3RlclxuXHRkZWxldGUgdGhpcy5jcmVnc1tjcmVnXTtcblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgcmVtb3ZlR2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR0aGlzLnJlbW92ZUdhdGUocmVtb3ZlR2F0ZXNbaV0pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVuYW1lQ3JlZyA9IGZ1bmN0aW9uKG9sZE5hbWUsIG5ld05hbWUpIHtcblx0Ly8gcmVuYW1lIHJlZmVyZW5jZVxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLm9wdGlvbnMpIHtcblx0XHRcdFx0Ly8gZ2F0ZSB3cml0aW5nIHRvIGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID09IG9sZE5hbWUpIHtcblx0XHRcdFx0XHRnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGdhdGUgY29udHJvbGxlZCBieSBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyA9PSBvbGROYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJlbmFtZSByZWdpc3RlclxuXHR0aGlzLmNyZWdzW25ld05hbWVdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNyZWdzW29sZE5hbWVdKSk7XG5cdGRlbGV0ZSB0aGlzLmNyZWdzW29sZE5hbWVdO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1pbkNyZWdTaXplID0gZnVuY3Rpb24oY3JlZykge1xuXHR2YXIgbGFyZ2VzdEJpdCA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlICYmIGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHQvLyBnYXRlIHdyaXRpbmcgdG8gY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY3JlZyAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgPT0gY3JlZykge1xuXHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQgfHwgMCk7XG5cdFx0XHRcdFx0aWYoaXNOYU4odGFyZ2V0Qml0KSkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYodGFyZ2V0Qml0ID4gbGFyZ2VzdEJpdCkge1xuXHRcdFx0XHRcdFx0bGFyZ2VzdEJpdCA9IHRhcmdldEJpdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBnYXRlIGNvbnRyb2xsZWQgYnkgY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgPT0gY3JlZykge1xuXHRcdFx0XHRcdHZhciBsYiA9IE1hdGguZmxvb3IoTWF0aC5sb2cyKGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUpKTtcblx0XHRcdFx0XHRpZihsYiA+IGxhcmdlc3RCaXQpIHtcblx0XHRcdFx0XHRcdGxhcmdlc3RCaXQgPSBsYjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbGFyZ2VzdEJpdCArIDE7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzaXplQ3JlZyA9IGZ1bmN0aW9uKGNyZWcsIHNpemUpIHtcblx0aWYoc2l6ZSA8IHRoaXMubWluQ3JlZ1NpemUoY3JlZykpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA8IHNpemUpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cblxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA+IHNpemUpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnBvcCgpO1xuXHR9XG5cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDcmVnID0gZnVuY3Rpb24oY3JlZykge1xuXHRyZXR1cm4gdGhpcy5jcmVnc1tjcmVnXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zZXRDcmVnQml0ID0gZnVuY3Rpb24oY3JlZywgY2JpdCwgdmFsdWUpIHtcblx0Ly8gc2VlIGlmIGNiaXQgaXMgaW50ZWdlclxuXHR2YXIgYml0ID0gcGFyc2VJbnQoY2JpdCk7XG5cdGlmKGlzTmFOKGJpdCkpIHtcblx0XHR0aHJvdyBcIkVycm9yOiBpbnZhbGlkIFxcXCJjYml0XFxcIiBhcmd1bWVudCB0byBcXFwic2V0Q3JlZ0JpdFxcXCIgbWV0aG9kOiBleHBlY3RlZCBcXFwiaW50ZWdlclxcXCIgZ290IFxcXCJcIiArIHR5cGVvZiBjYml0ICsgXCJcXFwiLlwiO1xuXHR9XG5cblx0Ly8gY3JlYXRlIHJlZ2lzdGVyIGlmIGRvZXMgbm90IGV4aXN0XG5cdGlmKCF0aGlzLmNyZWdzW2NyZWddKSB7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXHR9XG5cblx0Ly8gZXh0ZW5kIHJlZ2lzdGVyIGlmIG5lZWRlZFxuXHR3aGlsZShiaXQgPj0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGgpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cblxuXHQvLyBzZXQgYml0XG5cdHRoaXMuY3JlZ3NbY3JlZ11bYml0XSA9IHZhbHVlID8gMSA6IDA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0Q3JlZ0JpdCA9IGZ1bmN0aW9uKGNyZWcsIGNiaXQpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBiaXQgPSBwYXJzZUludChjYml0KTtcblx0aWYoaXNOYU4oYml0KSB8fCBiaXQgPj0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGgpIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IGJpdCBcXFwiXCIgKyBjYml0ICsgXCJcXFwiIG5vdCBmb3VuZC5cIjtcblx0fVxuXHRyZXR1cm4gdGhpcy5jcmVnc1tjcmVnXVtiaXRdO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdCYXNlID0gZnVuY3Rpb24oY3JlZykge1xuXHRpZighdGhpcy5jcmVnc1tjcmVnXSkge1xuXHRcdHRocm93IFwiRXJyb3I6IFxcXCJnZXRDcmVnQml0XFxcIjogdW5rbm93biByZWdpc3RlciBcXFwiXCIgKyBjcmVnICsgXCJcXFwiLlwiO1xuXHR9XG5cblx0dmFyIGJhc2UgPSAwO1xuXHRmb3IodmFyIHJlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdGlmKHJlZ05hbWUgPT0gY3JlZykge1xuXHRcdFx0cmV0dXJuIGJhc2U7XG5cdFx0fVxuXHRcdGJhc2UgKz0gdGhpcy5jcmVnc1tyZWdOYW1lXS5sZW5ndGg7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jcmVnVG90YWxCaXRzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBiaXRzID0gMDtcblx0Zm9yKHZhciByZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRiaXRzICs9IHRoaXMuY3JlZ3NbcmVnTmFtZV0ubGVuZ3RoO1xuXHR9XG5cdHJldHVybiBiaXRzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdWYWx1ZSA9IGZ1bmN0aW9uKGNyZWcpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBsZW4gPSB0aGlzLmNyZWdzW2NyZWddLmxlbmd0aDtcblx0dmFyIHZhbHVlID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0aWYodGhpcy5jcmVnc1tjcmVnXVtpXSkge1xuXHRcdFx0dmFsdWUgKz0gbWF0aC5wb3coMiwgaSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBtZWFzdXJlbWVudCBvZiBhbGwgcXViaXRzIG9uIGN1cnJlbnQgc3RhdGUgdmVjdG9yLCB3aXRob3V0IG1vZGlmeWluZyBzdGF0ZVxuLy8gICBSZXR1cm5zIGFycmF5IG9mIDBzIGFuZCAxcyBmb3IgZWFjaCBxdWJpdC4gXG4vLyAgIEZvciBleGFtcGxlLCBiZWxsIHN0YXRlIHdpbGwgcmV0dXJuOiBbMCwgMF0gb3IgWzEsIDFdXG4vLyAgIElmIHlvdSBuZWVkIG11bHRpcGxlIHNob3RzIHRoZW4gdXNlIFwibWVhc3VyZUFsbE11bHRpc2hvdFwiIG1ldGhvZCAoaXQgcnVucyBtdWNoIGZhc3RlcikuXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1lYXN1cmVBbGwgPSBmdW5jdGlvbihmb3JjZSkge1xuXHRpZih0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmNvbGxhcHNlZC5sZW5ndGggPT0gdGhpcy5udW1RdWJpdHMgJiYgIWZvcmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGFwc2VkO1xuXHR9XG5cblx0dGhpcy5jb2xsYXBzZWQgPSBbXTtcblxuXHR2YXIgcmFuZG9tV2VpZ2h0ID0gTWF0aC5yYW5kb20oKTtcblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2lzXSwgMTQpO1xuXHRcdGlmKHN0YXRlLnJlIHx8IHN0YXRlLmltKSB7XG5cdFx0XHR2YXIgY2hhbmNlID0gbWF0aC5yb3VuZChtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpLCAxNCk7XG5cdFx0XHRyYW5kb21XZWlnaHQgLT0gY2hhbmNlO1xuXHRcdFx0aWYocmFuZG9tV2VpZ2h0IDw9IDApIHtcblx0XHRcdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cdFx0XHRcdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0XHRcdFx0Zm9yKHZhciBxID0gdGhpcy5udW1RdWJpdHMgLSAxOyBxID49IDA7IHEtLSkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgxIDw8IHEgJiBpID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IodmFyIHEgPSAwOyBxIDwgdGhpcy5udW1RdWJpdHM7IHErKykge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgxIDw8IHEgJiBpID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsYXBzZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBzaG9sZCBuZXZlciBoYXBwZW4sIGJ1dCBcIm5hdHVyZSBpcyBub3QgY2xhc3NpY2FsXCIgOilcblx0aWYoIXRoaXMuY29sbGFwc2VkLmxlbmd0aCkge1xuXHRcdHdoaWxlKHRoaXMuY29sbGFwc2VkLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmNvbGxhcHNlZC5wdXNoKDApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcy5jb2xsYXBzZWQ7XG59O1xuXG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBtZWFzdXJlbWVudCBvZiBhbGwgcXViaXRzIG9uIGN1cnJlbnQgc3RhdGUgdmVjdG9yLCB3aXRob3V0IG1vZGlmeWluZyBzdGF0ZSwgbXVsdGlwbGUgdGltZXNcbi8vICAgUmV0dXJucyBvYmplY3QgKGRpY3Rpb25hcnkpIHdpdGggbWVhc3VyZWQgdmFsdWVzIChiaW5hcnkpIGFzIGtleXMgYW5kIGNvdW50cyBhcyB2YWx1ZXNcbi8vICAgRm9yIGV4YW1wbGUsIDEwMjQgc2hvdHMgb24gYmVsbCBzdGF0ZSB3aWxsIHJldHVybiBzb21ldGhpbmcgbGlrZTogeyBcIjAwXCI6IDUxNCwgXCIxMVwiOiA1MTAgfVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tZWFzdXJlQWxsTXVsdGlzaG90ID0gZnVuY3Rpb24oc2hvdHMpIHtcblx0c2hvdHMgPSBzaG90cyB8fCAxO1xuXG5cdHZhciBjb3VudHMgPSB7fTtcblxuXHR2YXIgcmFuZG9tV2VpZ2h0cyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgc2hvdHM7IGkrKykge1xuXHRcdHJhbmRvbVdlaWdodHMucHVzaChNYXRoLnJhbmRvbSgpKTtcblx0fVxuXG5cdHZhciBzaG90Q291bnQgPSAwO1xuXHRkbyB7XG5cdFx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0XHR2YXIgc3RhdGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaXNdLCAxNCk7XG5cdFx0XHRpZihzdGF0ZS5yZSB8fCBzdGF0ZS5pbSkge1xuXHRcdFx0XHR2YXIgY2hhbmNlID0gbWF0aC5yb3VuZChtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpLCAxNCk7XG5cblx0XHRcdFx0Zm9yKHZhciBzaCA9IDA7IHNoIDwgc2hvdHM7IHNoKyspIHtcblx0XHRcdFx0XHRpZihyYW5kb21XZWlnaHRzW3NoXSA+IDApIHtcblx0XHRcdFx0XHRcdHJhbmRvbVdlaWdodHNbc2hdIC09IGNoYW5jZTtcblxuXHRcdFx0XHRcdFx0aWYocmFuZG9tV2VpZ2h0c1tzaF0gPD0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYmluID0gcGFyc2VJbnQoaXMpLnRvU3RyaW5nKDIpO1xuXHRcdFx0XHRcdFx0XHR3aGlsZShiaW4ubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKGNvdW50c1tiaW5dKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y291bnRzW2Jpbl0rKztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb3VudHNbYmluXSA9IDE7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzaG90Q291bnQrKztcblxuXHRcdFx0XHRcdFx0XHRpZihzaG90Q291bnQgPT0gc2hvdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gY291bnRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IHdoaWxlKHNob3RDb3VudCA8IHNob3RzKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1lYXN1cmUgPSBmdW5jdGlvbih3aXJlLCBjcmVnLCBjYml0LCBmb3JjZSkge1xuXHRpZihmb3JjZSB8fCAhdGhpcy5jb2xsYXBzZWQgfHwgdGhpcy5jb2xsYXBzZWQubGVuZ3RoICE9IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0dGhpcy5tZWFzdXJlQWxsKGZvcmNlKTtcblx0fVxuXG5cdHZhciB2YWwgPSB0aGlzLmNvbGxhcHNlZFt3aXJlXTtcblxuXHRpZihjcmVnICYmIHR5cGVvZiBjYml0ICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHR0aGlzLnNldENyZWdCaXQoY3JlZywgY2JpdCwgdmFsKTtcblx0fVxuXG5cdHJldHVybiB2YWw7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJvYmFiaWxpdGllcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnByb2IgPSBbXTtcblxuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdHRoaXMucHJvYi5wdXNoKDApO1xuXHR9XG5cblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGJpdCA9IG51bGw7XG5cblx0XHRcdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0XHRcdGJpdCA9IG1hdGgucG93KDIsICh0aGlzLm51bVF1Yml0cyAtIDEpIC0gd2lyZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRiaXQgPSBtYXRoLnBvdygyLCB3aXJlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoaSAmIGJpdCkge1xuXHRcdFx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlW2lzXTtcblx0XHRcdFx0aWYoc3RhdGUucmUgfHwgc3RhdGUuaW0pIHtcblx0XHRcdFx0XHR0aGlzLnByb2Jbd2lyZV0gKz0gbWF0aC5wb3cobWF0aC5hYnMoc3RhdGUpLCAyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dGhpcy5wcm9iW3dpcmVdID0gbWF0aC5yb3VuZCh0aGlzLnByb2Jbd2lyZV0sIDE0KTtcblx0fVxuXG5cdHJldHVybiB0aGlzLnByb2I7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJvYmFiaWxpdHkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdGlmKCF0aGlzLnByb2IgfHwgdGhpcy5wcm9iLmxlbmd0aCAhPSB0aGlzLm51bVF1Yml0cykge1xuXHRcdHRoaXMucHJvYmFiaWxpdGllcygpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXMucHJvYlt3aXJlXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZW5zaXR5TWF0cml4ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBkZW5zaXR5ID0gW107XG5cdHZhciBudW1BbXBsaXR1ZGVzID0gdGhpcy5udW1BbXBsaXR1ZGVzKCk7XG5cdGZvcihyb3cgPSAwOyByb3cgPCBudW1BbXBsaXR1ZGVzOyByb3crKykge1xuXHRcdHZhciByID0gW107XG5cdFx0dmFyIHJvd1ZhbCA9IHRoaXMuc3RhdGVbcm93XSB8fCBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBudW1BbXBsaXR1ZGVzOyBjb2wrKykge1xuXHRcdFx0dmFyIGNvbFZhbCA9IHRoaXMuc3RhdGVbY29sXSB8fCBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0XHRpZihjb2xWYWwucmUgfHwgY29sVmFsLmltKSB7XG5cdFx0XHRcdGNvbFZhbCA9IG1hdGguY29uaihjb2xWYWwpO1xuXHRcdFx0fVxuXHRcdFx0ci5wdXNoKG1hdGgubXVsdGlwbHkocm93VmFsLCBjb2xWYWwpKTtcblx0XHR9XG5cdFx0ZGVuc2l0eS5wdXNoKHIpO1xuXHR9XG5cdHJldHVybiBkZW5zaXR5O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpYWxUcmFjZSA9IGZ1bmN0aW9uKHF1Yml0KSB7XG5cblx0ZnVuY3Rpb24gaW5zZXJ0Qml0KGlucHV0LCBwb3MsIGJpdCkge1xuXHRcdHZhciBvdXQgPSBpbnB1dCA8PCAxO1xuXHRcdHZhciBtID0gKDIgPDwgcG9zKSAtIDE7XG5cdFx0dmFyIHBvc0JpdCA9IDEgPDwgcG9zO1xuXHRcdHZhciBvdXQgPSAob3V0IF4gKChvdXQgXiBpbnB1dCkgJiBtKSkgfCBwb3NCaXQ7XG5cdFx0aWYoIWJpdCkge1xuXHRcdFx0b3V0ID0gb3V0IF4gcG9zQml0O1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0dmFyIHRyYWNlID0gW107XG5cblx0dmFyIHVudXNlZENvdW50ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHR2YXIgdW51c2VkTGVuID0gbWF0aC5wb3coMiwgdW51c2VkQ291bnQpO1xuXG5cdHZhciBxcG9zID0gbnVsbDtcblx0aWYodGhpcy5yZXZlcnNlQml0T3JkZXIpIHtcblx0XHRxcG9zID0gKHRoaXMubnVtUXViaXRzIC0gMSkgLSBxdWJpdDtcblx0fSBlbHNlIHtcblx0XHRxcG9zID0gcXViaXQ7XG5cdH1cblxuXHRmb3IodmFyIGVsID0gMDsgZWwgPCA0OyBlbCsrKSB7XG5cdFx0dHJhY2UucHVzaChtYXRoLmNvbXBsZXgoMCwgMCkpO1xuXHRcdHZhciBiYXNlID0gdW51c2VkTGVuO1xuXHRcdHdoaWxlKGJhc2UtLSkge1xuXHRcdFx0dmFyIHJvdyA9IGluc2VydEJpdChiYXNlLCBxcG9zLCBlbCAmIDIgPyAxIDogMCk7XG5cdFx0XHRpZih0aGlzLnN0YXRlW3Jvd10pIHtcblx0XHRcdFx0dmFyIGNvbCA9IGluc2VydEJpdChiYXNlLCBxcG9zLCBlbCAmIDEgPyAxIDogMCk7XG5cdFx0XHRcdGlmKHRoaXMuc3RhdGVbY29sXSkge1xuXHRcdFx0XHRcdHRyYWNlW2VsXSA9IG1hdGguYWRkKHRyYWNlW2VsXSwgbWF0aC5tdWx0aXBseSh0aGlzLnN0YXRlW3Jvd10sIG1hdGguY29uaih0aGlzLnN0YXRlW2NvbF0pKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIFtcblx0XHRbIHRyYWNlWzBdLCB0cmFjZVsxXSBdLFxuXHRcdFsgdHJhY2VbMl0sIHRyYWNlWzNdIF1cblx0XTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFuZ2xlcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYW5nbGVzID0gW107XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0YW5nbGVzLnB1c2goeyB0aGV0YTogMCwgcGhpOiAwIH0pO1xuXHR9XG5cblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHR2YXIgdHJhY2UgPSB0aGlzLnBhcnRpYWxUcmFjZSh3aXJlKTtcblx0XHR2YXIgYWxwaGEgPSBtYXRoLnJvdW5kKG1hdGguc3FydCh0cmFjZVswXVswXSksIDEyKTtcblx0XHR2YXIgYmV0YSA9IG1hdGgucm91bmQobWF0aC5tdWx0aXBseSh0cmFjZVsxXVswXSwgbWF0aC5zcXJ0KDIpKSwgMTIpO1xuXHRcdHZhciByYWRpdXMgPSBtYXRoLnJvdW5kKG1hdGguYWJzKG1hdGguc3FydCgyKm1hdGguYWJzKG1hdGgudHJhY2UobWF0aC5wb3codHJhY2UsIDIpKSktMSkpLCAxMik7XG5cblx0XHR2YXIgdGhldGEgPSBtYXRoLm11bHRpcGx5KDIsIG1hdGguYWNvcyhhbHBoYSkpO1xuXHRcdHZhciBwaGkgPSAwO1xuXG5cdFx0aWYoIShtYXRoLnJvdW5kKGJldGEucmUsIDgpID09IDAgJiYgbWF0aC5yb3VuZChiZXRhLmltLCA4KSA9PSAwKSkge1xuXHRcdFx0cGhpID0gbWF0aC5tdWx0aXBseShtYXRoLmNvbXBsZXgoMCwgLTEpLCBtYXRoLmxvZyhtYXRoLm11bHRpcGx5KGJldGEsIG1hdGguY3NjKG1hdGguZGl2aWRlKHRoZXRhLCAyKSkpKSkucmU7XG5cdFx0XHRpZihpc05hTihwaGkpKSB7XG5cdFx0XHRcdHBoaSA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YW5nbGVzW3dpcmVdLnRoZXRhID0gbWF0aC5yb3VuZChtYXRoLmFicyh0aGV0YSksIDEyKTtcblx0XHRhbmdsZXNbd2lyZV0ucGhpID0gbWF0aC5yb3VuZChwaGksIDEyKTtcblx0XHRhbmdsZXNbd2lyZV0udGhldGFEZWcgPSBtYXRoLnJvdW5kKG1hdGgubXVsdGlwbHkobWF0aC5hYnModGhldGEpLCAoMTgwIC8gbWF0aC5waSkpLCA3KTtcblx0XHRhbmdsZXNbd2lyZV0ucGhpRGVnID0gbWF0aC5yb3VuZChtYXRoLm11bHRpcGx5KHBoaSwgKDE4MCAvIG1hdGgucGkpKSwgNyk7XG5cdFx0YW5nbGVzW3dpcmVdLnJhZGl1cyA9IG1hdGgucm91bmQocmFkaXVzLCA3KTtcblx0fVxuXG5cdHJldHVybiBhbmdsZXM7XG59O1xuXG5cbi8vXG4vLyBPcHRpb25zOiBcbi8vICB7IFxuLy9cdFx0dXNlR2F0ZXM6IFsgXCJyeVwiLCBcInJ6XCIsIFwiY3J6XCIsIC4uLiBdLFxuLy8gIFx0bm9NZWFzdXJlOiBmYWxzZVxuLy8gICAgICBub1Jlc2V0OiBmYWxzZVxuLy8gICAgICBub0NsYXNzaWNDb250cm9sOiBmYWxzZVxuLy8gIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yYW5kb21DaXJjdWl0ID0gZnVuY3Rpb24obnVtUXViaXRzLCBudW1HYXRlcywgb3B0aW9ucykge1xuXHR0aGlzLmluaXQobnVtUXViaXRzKTtcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZ2F0ZXMgPSAob3B0aW9ucy51c2VHYXRlcyAmJiBvcHRpb25zLnVzZUdhdGVzLmxlbmd0aCkgPyBvcHRpb25zLnVzZUdhdGVzIDogT2JqZWN0LmtleXModGhpcy5iYXNpY0dhdGVzKTtcblxuXHRpZihvcHRpb25zLm5vTWVhc3VyZSAmJiBnYXRlcy5pbmRleE9mKFwibWVhc3VyZVwiKSA+PSAwKSB7XG5cdFx0Z2F0ZXMuc3BsaWNlKGdhdGVzLmluZGV4T2YoXCJtZWFzdXJlXCIpLCAxKTtcblx0fVxuXG5cdGlmKG9wdGlvbnMubm9SZXNldCAmJiBnYXRlcy5pbmRleE9mKFwicmVzZXRcIikgPj0gMCkge1xuXHRcdGdhdGVzLnNwbGljZShnYXRlcy5pbmRleE9mKFwicmVzZXRcIiksIDEpO1xuXHR9XG5cblx0dmFyIGdhdGVDb3VudCA9IDA7XG5cdHdoaWxlKGdhdGVDb3VudCA8IG51bUdhdGVzKSB7XG5cdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZ2F0ZXMubGVuZ3RoKV07XG5cdFx0dmFyIGdhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdGlmKGdhdGUpIHtcblx0XHRcdHZhciBnYXRlUXViaXRzID0gZ2F0ZS5tYXRyaXggJiYgZ2F0ZS5tYXRyaXgubGVuZ3RoID8gbWF0aC5sb2cyKGdhdGUubWF0cml4Lmxlbmd0aCkgOiAxO1xuXG5cdFx0XHRpZihnYXRlUXViaXRzIDw9IG51bVF1Yml0cykge1xuXHRcdFx0XHQvLyBnYXRlIHdpcmVzXG5cdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBbXTtcblx0XHRcdFx0d2hpbGUoZ2F0ZVdpcmVzLmxlbmd0aCA8IGdhdGVRdWJpdHMpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmUgPSAtMTtcblx0XHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0XHRnYXRlV2lyZSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG51bVF1Yml0cyk7XG5cdFx0XHRcdFx0fSB3aGlsZShnYXRlV2lyZXMuaW5kZXhPZihnYXRlV2lyZSkgPj0gMCk7XG5cdFx0XHRcdFx0Z2F0ZVdpcmVzLnB1c2goZ2F0ZVdpcmUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIG9wdCA9IHt9O1xuXG5cdFx0XHRcdC8vIGdhdGUgcGFyYW1zXG5cdFx0XHRcdGlmKGdhdGUucGFyYW1zICYmIGdhdGUucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBwYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRnYXRlLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IE1hdGguUEkgKiAyICogTWF0aC5yYW5kb20oKTtcblxuXHRcdFx0XHRcdFx0Ly8gLVBJLi5QSVxuXHRcdFx0XHRcdFx0aWYocGFyYW1zW3BhcmFtTmFtZV0gPiBNYXRoLlBJKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gTWF0aC5QSSAtIHBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9wdC5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdC8vIG1lYXN1cmVtZW50IGRlc3RpbmF0aW9uXG5cdFx0XHRcdFx0b3B0LmNyZWcgPSB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImNcIixcblx0XHRcdFx0XHRcdGJpdDogZ2F0ZVdpcmVzWzBdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZighb3B0aW9ucy5ub0NsYXNzaWNDb250cm9sKSB7XG5cdFx0XHRcdFx0XHQvLyBtYXliZSBhZGQgY29uZGl0aW9uXG5cdFx0XHRcdFx0XHRpZihNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnQml0cyA9IHRoaXMuY3JlZ1RvdGFsQml0cygpO1xuXHRcdFx0XHRcdFx0XHRpZihjcmVnQml0cykge1xuXHRcdFx0XHRcdFx0XHRcdG9wdC5jb25kaXRpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjcmVnOiBcImNcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF0aC5wb3coMiwgY3JlZ0JpdHMpKSlcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hcHBlbmRHYXRlKGdhdGVOYW1lLCBnYXRlV2lyZXMsIG9wdCk7XG5cdFx0XHRcdGdhdGVDb3VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJhbmRvbVVuaXRhcnkgPSBmdW5jdGlvbihudW1RdWJpdHMpIHtcblx0dmFyIGNpcmMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyYy5yYW5kb21DaXJjdWl0KChudW1RdWJpdHMgfHwgMSksIChudW1RdWJpdHMgfHwgMSkgKiA4LCB7XG5cdFx0dXNlR2F0ZXM6IFsgXCJyeFwiLCBcInJ6XCIsIFwiY3pcIiBdLFxuXHRcdG5vTWVhc3VyZTogdHJ1ZSxcblx0XHRub1Jlc2V0OiB0cnVlLFxuXHRcdG5vQ2xhc3NpY0NvbnRyb2w6IHRydWVcblx0fSk7XG5cdHJldHVybiBjaXJjLmNpcmN1aXRNYXRyaXgoKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ldWxlckFuZ2xlc1pZWiA9IGZ1bmN0aW9uKGlucHV0TWF0cml4KSB7XG5cdHZhciBldWxlckFuZ2xlcyA9IHt0aGV0YTogbnVsbCwgcGhpOiBudWxsLCBsYW1iZGE6IG51bGwsIHBoYXNlOiBudWxsfTtcblx0dmFyIGNvZWZmID0gbWF0aC5wb3cobWF0aC5kZXQoaW5wdXRNYXRyaXgpLCAtMC41KTtcblx0ZXVsZXJBbmdsZXMucGhhc2UgPSAtMSAqIG1hdGguY29tcGxleChjb2VmZikudG9Qb2xhcigpLnBoaTtcblx0dmFyIHN1X21hdCA9IG1hdGgubXVsdGlwbHkoY29lZmYsIGlucHV0TWF0cml4KTtcblx0ZXVsZXJBbmdsZXMudGhldGEgPSAyICogbWF0aC5hdGFuMihtYXRoLmFicyhzdV9tYXRbMV1bMF0pLCBtYXRoLmFicyhzdV9tYXRbMF1bMF0pKTtcblx0dmFyIHBoaXBsYW1iZGEgPSAyICogbWF0aC5jb21wbGV4KHN1X21hdFsxXVsxXSkudG9Qb2xhcigpLnBoaTtcblx0dmFyIHBoaW1sYW1kYSA9IDIgKiBtYXRoLmNvbXBsZXgoc3VfbWF0WzFdWzBdKS50b1BvbGFyKCkucGhpO1xuXHRldWxlckFuZ2xlcy5waGkgPSAocGhpcGxhbWJkYSArIHBoaW1sYW1kYSkgLyAyLjA7XG5cdGV1bGVyQW5nbGVzLmxhbWJkYSA9IChwaGlwbGFtYmRhIC0gcGhpbWxhbWRhKSAvIDIuMDtcblx0cmV0dXJuIGV1bGVyQW5nbGVzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFudHVtQ2lyY3VpdDtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vIFRoaXMgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFRva2VuU3RyZWFtfSBsb2FkcyB0b2tlbnMgZnJvbSBhXG4vLyB7QGxpbmsgVG9rZW5Tb3VyY2V9IG9uLWRlbWFuZCwgYW5kIHBsYWNlcyB0aGUgdG9rZW5zIGluIGEgYnVmZmVyIHRvIHByb3ZpZGVcbi8vIGFjY2VzcyB0byBhbnkgcHJldmlvdXMgdG9rZW4gYnkgaW5kZXguXG4vL1xuLy8gPHA+XG4vLyBUaGlzIHRva2VuIHN0cmVhbSBpZ25vcmVzIHRoZSB2YWx1ZSBvZiB7QGxpbmsgVG9rZW4vL2dldENoYW5uZWx9LiBJZiB5b3VyXG4vLyBwYXJzZXIgcmVxdWlyZXMgdGhlIHRva2VuIHN0cmVhbSBmaWx0ZXIgdG9rZW5zIHRvIG9ubHkgdGhvc2Ugb24gYSBwYXJ0aWN1bGFyXG4vLyBjaGFubmVsLCBzdWNoIGFzIHtAbGluayBUb2tlbi8vREVGQVVMVF9DSEFOTkVMfSBvclxuLy8ge0BsaW5rIFRva2VuLy9ISURERU5fQ0hBTk5FTH0sIHVzZSBhIGZpbHRlcmluZyB0b2tlbiBzdHJlYW0gc3VjaCBhXG4vLyB7QGxpbmsgQ29tbW9uVG9rZW5TdHJlYW19LjwvcD5cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xudmFyIExleGVyID0gcmVxdWlyZSgnLi9MZXhlcicpLkxleGVyO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xuXG4vLyB0aGlzIGlzIGp1c3QgdG8ga2VlcCBtZWFuaW5nZnVsIHBhcmFtZXRlciB0eXBlcyB0byBQYXJzZXJcbmZ1bmN0aW9uIFRva2VuU3RyZWFtKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gQnVmZmVyZWRUb2tlblN0cmVhbSh0b2tlblNvdXJjZSkge1xuXG5cdFRva2VuU3RyZWFtLmNhbGwodGhpcyk7XG5cdC8vIFRoZSB7QGxpbmsgVG9rZW5Tb3VyY2V9IGZyb20gd2hpY2ggdG9rZW5zIGZvciB0aGlzIHN0cmVhbSBhcmUgZmV0Y2hlZC5cblx0dGhpcy50b2tlblNvdXJjZSA9IHRva2VuU291cmNlO1xuXG5cdC8vIEEgY29sbGVjdGlvbiBvZiBhbGwgdG9rZW5zIGZldGNoZWQgZnJvbSB0aGUgdG9rZW4gc291cmNlLiBUaGUgbGlzdCBpc1xuXHQvLyBjb25zaWRlcmVkIGEgY29tcGxldGUgdmlldyBvZiB0aGUgaW5wdXQgb25jZSB7QGxpbmsgLy9mZXRjaGVkRU9GfSBpcyBzZXRcblx0Ly8gdG8ge0Bjb2RlIHRydWV9LlxuXHR0aGlzLnRva2VucyA9IFtdO1xuXG5cdC8vIFRoZSBpbmRleCBpbnRvIHtAbGluayAvL3Rva2Vuc30gb2YgdGhlIGN1cnJlbnQgdG9rZW4gKG5leHQgdG9rZW4gdG9cblx0Ly8ge0BsaW5rIC8vY29uc3VtZX0pLiB7QGxpbmsgLy90b2tlbnN9e0Bjb2RlIFt9e0BsaW5rIC8vcH17QGNvZGUgXX0gc2hvdWxkXG5cdC8vIGJlXG5cdC8vIHtAbGluayAvL0xUIExUKDEpfS5cblx0Ly9cblx0Ly8gPHA+VGhpcyBmaWVsZCBpcyBzZXQgdG8gLTEgd2hlbiB0aGUgc3RyZWFtIGlzIGZpcnN0IGNvbnN0cnVjdGVkIG9yIHdoZW5cblx0Ly8ge0BsaW5rIC8vc2V0VG9rZW5Tb3VyY2V9IGlzIGNhbGxlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSBmaXJzdCB0b2tlbiBoYXNcblx0Ly8gbm90IHlldCBiZWVuIGZldGNoZWQgZnJvbSB0aGUgdG9rZW4gc291cmNlLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbixcblx0Ly8gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHtAbGluayBJbnRTdHJlYW19IGZvciBhIGRlc2NyaXB0aW9uIG9mXG5cdC8vIEluaXRpYWxpemluZyBNZXRob2RzLjwvcD5cblx0dGhpcy5pbmRleCA9IC0xO1xuXG5cdC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSB7QGxpbmsgVG9rZW4vL0VPRn0gdG9rZW4gaGFzIGJlZW4gZmV0Y2hlZCBmcm9tXG5cdC8vIHtAbGluayAvL3Rva2VuU291cmNlfSBhbmQgYWRkZWQgdG8ge0BsaW5rIC8vdG9rZW5zfS4gVGhpcyBmaWVsZCBpbXByb3Zlc1xuXHQvLyBwZXJmb3JtYW5jZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly9cblx0Ly8gPHVsPlxuXHQvLyA8bGk+e0BsaW5rIC8vY29uc3VtZX06IFRoZSBsb29rYWhlYWQgY2hlY2sgaW4ge0BsaW5rIC8vY29uc3VtZX0gdG9cblx0Ly8gcHJldmVudFxuXHQvLyBjb25zdW1pbmcgdGhlIEVPRiBzeW1ib2wgaXMgb3B0aW1pemVkIGJ5IGNoZWNraW5nIHRoZSB2YWx1ZXMgb2Zcblx0Ly8ge0BsaW5rIC8vZmV0Y2hlZEVPRn0gYW5kIHtAbGluayAvL3B9IGluc3RlYWQgb2YgY2FsbGluZyB7QGxpbmtcblx0Ly8gLy9MQX0uPC9saT5cblx0Ly8gPGxpPntAbGluayAvL2ZldGNofTogVGhlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIG11bHRpcGxlIEVPRiBzeW1ib2xzXG5cdC8vIGludG9cblx0Ly8ge0BsaW5rIC8vdG9rZW5zfSBpcyB0cml2aWFsIHdpdGggdGhpcyBmaWVsZC48L2xpPlxuXHQvLyA8dWw+XG5cdHRoaXMuZmV0Y2hlZEVPRiA9IGZhbHNlO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuU3RyZWFtLnByb3RvdHlwZSk7XG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJ1ZmZlcmVkVG9rZW5TdHJlYW07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLm1hcmsgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDA7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24obWFya2VyKSB7XG5cdC8vIG5vIHJlc291cmNlcyB0byByZWxlYXNlXG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnNlZWsoMCk7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHR0aGlzLmluZGV4ID0gdGhpcy5hZGp1c3RTZWVrSW5kZXgoaW5kZXgpO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHRyZXR1cm4gdGhpcy50b2tlbnNbaW5kZXhdO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2tpcEVvZkNoZWNrID0gZmFsc2U7XG5cdGlmICh0aGlzLmluZGV4ID49IDApIHtcblx0XHRpZiAodGhpcy5mZXRjaGVkRU9GKSB7XG5cdFx0XHQvLyB0aGUgbGFzdCB0b2tlbiBpbiB0b2tlbnMgaXMgRU9GLiBza2lwIGNoZWNrIGlmIHAgaW5kZXhlcyBhbnlcblx0XHRcdC8vIGZldGNoZWQgdG9rZW4gZXhjZXB0IHRoZSBsYXN0LlxuXHRcdFx0c2tpcEVvZkNoZWNrID0gdGhpcy5pbmRleCA8IHRoaXMudG9rZW5zLmxlbmd0aCAtIDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vIEVPRiB0b2tlbiBpbiB0b2tlbnMuIHNraXAgY2hlY2sgaWYgcCBpbmRleGVzIGEgZmV0Y2hlZCB0b2tlbi5cblx0XHRcdHNraXBFb2ZDaGVjayA9IHRoaXMuaW5kZXggPCB0aGlzLnRva2Vucy5sZW5ndGg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIG5vdCB5ZXQgaW5pdGlhbGl6ZWRcblx0XHRza2lwRW9mQ2hlY2sgPSBmYWxzZTtcblx0fVxuXHRpZiAoIXNraXBFb2ZDaGVjayAmJiB0aGlzLkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHR0aHJvdyBcImNhbm5vdCBjb25zdW1lIEVPRlwiO1xuXHR9XG5cdGlmICh0aGlzLnN5bmModGhpcy5pbmRleCArIDEpKSB7XG5cdFx0dGhpcy5pbmRleCA9IHRoaXMuYWRqdXN0U2Vla0luZGV4KHRoaXMuaW5kZXggKyAxKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIGluZGV4IHtAY29kZSBpfSBpbiB0b2tlbnMgaGFzIGEgdG9rZW4uXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYSB0b2tlbiBpcyBsb2NhdGVkIGF0IGluZGV4IHtAY29kZSBpfSwgb3RoZXJ3aXNlXG4vLyB7QGNvZGUgZmFsc2V9LlxuLy8gQHNlZSAvL2dldChpbnQgaSlcbi8vIC9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihpKSB7XG5cdHZhciBuID0gaSAtIHRoaXMudG9rZW5zLmxlbmd0aCArIDE7IC8vIGhvdyBtYW55IG1vcmUgZWxlbWVudHMgd2UgbmVlZD9cblx0aWYgKG4gPiAwKSB7XG5cdFx0dmFyIGZldGNoZWQgPSB0aGlzLmZldGNoKG4pO1xuXHRcdHJldHVybiBmZXRjaGVkID49IG47XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG4vLyBBZGQge0Bjb2RlIG59IGVsZW1lbnRzIHRvIGJ1ZmZlci5cbi8vXG4vLyBAcmV0dXJuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBidWZmZXIuXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5mZXRjaCA9IGZ1bmN0aW9uKG4pIHtcblx0aWYgKHRoaXMuZmV0Y2hlZEVPRikge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0dmFyIHQgPSB0aGlzLnRva2VuU291cmNlLm5leHRUb2tlbigpO1xuXHRcdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblx0XHR0aGlzLnRva2Vucy5wdXNoKHQpO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0dGhpcy5mZXRjaGVkRU9GID0gdHJ1ZTtcblx0XHRcdHJldHVybiBpICsgMTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG47XG59O1xuXG4vLyBHZXQgYWxsIHRva2VucyBmcm9tIHN0YXJ0Li5zdG9wIGluY2x1c2l2ZWx5Ly8vXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXRUb2tlbnMgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgdHlwZXMpIHtcblx0aWYgKHR5cGVzID09PSB1bmRlZmluZWQpIHtcblx0XHR0eXBlcyA9IG51bGw7XG5cdH1cblx0aWYgKHN0YXJ0IDwgMCB8fCBzdG9wIDwgMCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0dmFyIHN1YnNldCA9IFtdO1xuXHRpZiAoc3RvcCA+PSB0aGlzLnRva2Vucy5sZW5ndGgpIHtcblx0XHRzdG9wID0gdGhpcy50b2tlbnMubGVuZ3RoIC0gMTtcblx0fVxuXHRmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBzdG9wOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmICh0eXBlcyA9PT0gbnVsbCB8fCB0eXBlcy5jb250YWlucyh0LnR5cGUpKSB7XG5cdFx0XHRzdWJzZXQucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHN1YnNldDtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLkxBID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gdGhpcy5MVChpKS50eXBlO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuTEIgPSBmdW5jdGlvbihrKSB7XG5cdGlmICh0aGlzLmluZGV4IC0gayA8IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleCAtIGtdO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuTFQgPSBmdW5jdGlvbihrKSB7XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKGsgPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAoayA8IDApIHtcblx0XHRyZXR1cm4gdGhpcy5MQigtayk7XG5cdH1cblx0dmFyIGkgPSB0aGlzLmluZGV4ICsgayAtIDE7XG5cdHRoaXMuc3luYyhpKTtcblx0aWYgKGkgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7IC8vIHJldHVybiBFT0YgdG9rZW5cblx0XHQvLyBFT0YgbXVzdCBiZSBsYXN0IHRva2VuXG5cdFx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdO1xuXHR9XG5cdHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbi8vIEFsbG93ZWQgZGVyaXZlZCBjbGFzc2VzIHRvIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2Ygb3BlcmF0aW9ucyB3aGljaCBjaGFuZ2Vcbi8vIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbiBieSBhZGp1c3RpbmcgdGhlIHRhcmdldCB0b2tlbiBpbmRleCBvZiBhIHNlZWtcbi8vIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMge0Bjb2RlIGl9LiBJZiBhblxuLy8gZXhjZXB0aW9uIGlzIHRocm93biBpbiB0aGlzIG1ldGhvZCwgdGhlIGN1cnJlbnQgc3RyZWFtIGluZGV4IHNob3VsZCBub3QgYmVcbi8vIGNoYW5nZWQuXG4vL1xuLy8gPHA+Rm9yIGV4YW1wbGUsIHtAbGluayBDb21tb25Ub2tlblN0cmVhbX0gb3ZlcnJpZGVzIHRoaXMgbWV0aG9kIHRvIGVuc3VyZVxuLy8gdGhhdFxuLy8gdGhlIHNlZWsgdGFyZ2V0IGlzIGFsd2F5cyBhbiBvbi1jaGFubmVsIHRva2VuLjwvcD5cbi8vXG4vLyBAcGFyYW0gaSBUaGUgdGFyZ2V0IHRva2VuIGluZGV4LlxuLy8gQHJldHVybiBUaGUgYWRqdXN0ZWQgdGFyZ2V0IHRva2VuIGluZGV4LlxuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGp1c3RTZWVrSW5kZXggPSBmdW5jdGlvbihpKSB7XG5cdHJldHVybiBpO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUubGF6eUluaXQgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuaW5kZXggPT09IC0xKSB7XG5cdFx0dGhpcy5zZXR1cCgpO1xuXHR9XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnN5bmMoMCk7XG5cdHRoaXMuaW5kZXggPSB0aGlzLmFkanVzdFNlZWtJbmRleCgwKTtcbn07XG5cbi8vIFJlc2V0IHRoaXMgdG9rZW4gc3RyZWFtIGJ5IHNldHRpbmcgaXRzIHRva2VuIHNvdXJjZS4vLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnNldFRva2VuU291cmNlID0gZnVuY3Rpb24odG9rZW5Tb3VyY2UpIHtcblx0dGhpcy50b2tlblNvdXJjZSA9IHRva2VuU291cmNlO1xuXHR0aGlzLnRva2VucyA9IFtdO1xuXHR0aGlzLmluZGV4ID0gLTE7XG5cdHRoaXMuZmV0Y2hlZEVPRiA9IGZhbHNlO1xufTtcblxuXG4vLyBHaXZlbiBhIHN0YXJ0aW5nIGluZGV4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBuZXh0IHRva2VuIG9uIGNoYW5uZWwuXG4vLyBSZXR1cm4gaSBpZiB0b2tlbnNbaV0gaXMgb24gY2hhbm5lbC4gUmV0dXJuIC0xIGlmIHRoZXJlIGFyZSBubyB0b2tlbnNcbi8vIG9uIGNoYW5uZWwgYmV0d2VlbiBpIGFuZCBFT0YuXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5uZXh0VG9rZW5PbkNoYW5uZWwgPSBmdW5jdGlvbihpLCBjaGFubmVsKSB7XG5cdHRoaXMuc3luYyhpKTtcblx0aWYgKGkgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIC0xO1xuXHR9XG5cdHZhciB0b2tlbiA9IHRoaXMudG9rZW5zW2ldO1xuXHR3aGlsZSAodG9rZW4uY2hhbm5lbCAhPT0gdGhpcy5jaGFubmVsKSB7XG5cdFx0aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpICs9IDE7XG5cdFx0dGhpcy5zeW5jKGkpO1xuXHRcdHRva2VuID0gdGhpcy50b2tlbnNbaV07XG5cdH1cblx0cmV0dXJuIGk7XG59O1xuXG4vLyBHaXZlbiBhIHN0YXJ0aW5nIGluZGV4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBwcmV2aW91cyB0b2tlbiBvbiBjaGFubmVsLlxuLy8gUmV0dXJuIGkgaWYgdG9rZW5zW2ldIGlzIG9uIGNoYW5uZWwuIFJldHVybiAtMSBpZiB0aGVyZSBhcmUgbm8gdG9rZW5zXG4vLyBvbiBjaGFubmVsIGJldHdlZW4gaSBhbmQgMC5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnByZXZpb3VzVG9rZW5PbkNoYW5uZWwgPSBmdW5jdGlvbihpLCBjaGFubmVsKSB7XG5cdHdoaWxlIChpID49IDAgJiYgdGhpcy50b2tlbnNbaV0uY2hhbm5lbCAhPT0gY2hhbm5lbCkge1xuXHRcdGkgLT0gMTtcblx0fVxuXHRyZXR1cm4gaTtcbn07XG5cbi8vIENvbGxlY3QgYWxsIHRva2VucyBvbiBzcGVjaWZpZWQgY2hhbm5lbCB0byB0aGUgcmlnaHQgb2Zcbi8vIHRoZSBjdXJyZW50IHRva2VuIHVwIHVudGlsIHdlIHNlZSBhIHRva2VuIG9uIERFRkFVTFRfVE9LRU5fQ0hBTk5FTCBvclxuLy8gRU9GLiBJZiBjaGFubmVsIGlzIC0xLCBmaW5kIGFueSBub24gZGVmYXVsdCBjaGFubmVsIHRva2VuLlxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0SGlkZGVuVG9rZW5zVG9SaWdodCA9IGZ1bmN0aW9uKHRva2VuSW5kZXgsXG5cdFx0Y2hhbm5lbCkge1xuXHRpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hhbm5lbCA9IC0xO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKHRva2VuSW5kZXggPCAwIHx8IHRva2VuSW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJcIiArIHRva2VuSW5kZXggKyBcIiBub3QgaW4gMC4uXCIgKyB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBuZXh0T25DaGFubmVsID0gdGhpcy5uZXh0VG9rZW5PbkNoYW5uZWwodG9rZW5JbmRleCArIDEsIExleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCk7XG5cdHZhciBmcm9tXyA9IHRva2VuSW5kZXggKyAxO1xuXHQvLyBpZiBub25lIG9uY2hhbm5lbCB0byByaWdodCwgbmV4dE9uQ2hhbm5lbD0tMSBzbyBzZXQgdG8gPSBsYXN0IHRva2VuXG5cdHZhciB0byA9IG5leHRPbkNoYW5uZWwgPT09IC0xID8gdGhpcy50b2tlbnMubGVuZ3RoIC0gMSA6IG5leHRPbkNoYW5uZWw7XG5cdHJldHVybiB0aGlzLmZpbHRlckZvckNoYW5uZWwoZnJvbV8sIHRvLCBjaGFubmVsKTtcbn07XG5cbi8vIENvbGxlY3QgYWxsIHRva2VucyBvbiBzcGVjaWZpZWQgY2hhbm5lbCB0byB0aGUgbGVmdCBvZlxuLy8gdGhlIGN1cnJlbnQgdG9rZW4gdXAgdW50aWwgd2Ugc2VlIGEgdG9rZW4gb24gREVGQVVMVF9UT0tFTl9DSEFOTkVMLlxuLy8gSWYgY2hhbm5lbCBpcyAtMSwgZmluZCBhbnkgbm9uIGRlZmF1bHQgY2hhbm5lbCB0b2tlbi5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldEhpZGRlblRva2Vuc1RvTGVmdCA9IGZ1bmN0aW9uKHRva2VuSW5kZXgsXG5cdFx0Y2hhbm5lbCkge1xuXHRpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hhbm5lbCA9IC0xO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKHRva2VuSW5kZXggPCAwIHx8IHRva2VuSW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJcIiArIHRva2VuSW5kZXggKyBcIiBub3QgaW4gMC4uXCIgKyB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBwcmV2T25DaGFubmVsID0gdGhpcy5wcmV2aW91c1Rva2VuT25DaGFubmVsKHRva2VuSW5kZXggLSAxLCBMZXhlci5ERUZBVUxUX1RPS0VOX0NIQU5ORUwpO1xuXHRpZiAocHJldk9uQ2hhbm5lbCA9PT0gdG9rZW5JbmRleCAtIDEpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHQvLyBpZiBub25lIG9uIGNoYW5uZWwgdG8gbGVmdCwgcHJldk9uQ2hhbm5lbD0tMSB0aGVuIGZyb209MFxuXHR2YXIgZnJvbV8gPSBwcmV2T25DaGFubmVsICsgMTtcblx0dmFyIHRvID0gdG9rZW5JbmRleCAtIDE7XG5cdHJldHVybiB0aGlzLmZpbHRlckZvckNoYW5uZWwoZnJvbV8sIHRvLCBjaGFubmVsKTtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmZpbHRlckZvckNoYW5uZWwgPSBmdW5jdGlvbihsZWZ0LCByaWdodCwgY2hhbm5lbCkge1xuXHR2YXIgaGlkZGVuID0gW107XG5cdGZvciAodmFyIGkgPSBsZWZ0OyBpIDwgcmlnaHQgKyAxOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmIChjaGFubmVsID09PSAtMSkge1xuXHRcdFx0aWYgKHQuY2hhbm5lbCAhPT0gTGV4ZXIuREVGQVVMVF9UT0tFTl9DSEFOTkVMKSB7XG5cdFx0XHRcdGhpZGRlbi5wdXNoKHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodC5jaGFubmVsID09PSBjaGFubmVsKSB7XG5cdFx0XHRoaWRkZW4ucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0aWYgKGhpZGRlbi5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gaGlkZGVuO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0U291cmNlTmFtZSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy50b2tlblNvdXJjZS5nZXRTb3VyY2VOYW1lKCk7XG59O1xuXG4vLyBHZXQgdGhlIHRleHQgb2YgYWxsIHRva2VucyBpbiB0aGlzIGJ1ZmZlci4vLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdHRoaXMuZmlsbCgpO1xuXHRpZiAoaW50ZXJ2YWwgPT09IHVuZGVmaW5lZCB8fCBpbnRlcnZhbCA9PT0gbnVsbCkge1xuXHRcdGludGVydmFsID0gbmV3IEludGVydmFsKDAsIHRoaXMudG9rZW5zLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHZhciBzdGFydCA9IGludGVydmFsLnN0YXJ0O1xuXHRpZiAoc3RhcnQgaW5zdGFuY2VvZiBUb2tlbikge1xuXHRcdHN0YXJ0ID0gc3RhcnQudG9rZW5JbmRleDtcblx0fVxuXHR2YXIgc3RvcCA9IGludGVydmFsLnN0b3A7XG5cdGlmIChzdG9wIGluc3RhbmNlb2YgVG9rZW4pIHtcblx0XHRzdG9wID0gc3RvcC50b2tlbkluZGV4O1xuXHR9XG5cdGlmIChzdGFydCA9PT0gbnVsbCB8fCBzdG9wID09PSBudWxsIHx8IHN0YXJ0IDwgMCB8fCBzdG9wIDwgMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGlmIChzdG9wID49IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuXHRcdHN0b3AgPSB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBzID0gXCJcIjtcblx0Zm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgc3RvcCArIDE7IGkrKykge1xuXHRcdHZhciB0ID0gdGhpcy50b2tlbnNbaV07XG5cdFx0aWYgKHQudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cyA9IHMgKyB0LnRleHQ7XG5cdH1cblx0cmV0dXJuIHM7XG59O1xuXG4vLyBHZXQgYWxsIHRva2VucyBmcm9tIGxleGVyIHVudGlsIEVPRi8vL1xuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdHdoaWxlICh0aGlzLmZldGNoKDEwMDApID09PSAxMDAwKSB7XG5cdFx0Y29udGludWU7XG5cdH1cbn07XG5cbmV4cG9ydHMuQnVmZmVyZWRUb2tlblN0cmVhbSA9IEJ1ZmZlcmVkVG9rZW5TdHJlYW07XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxudmFyIElucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xuXG52YXIgaXNOb2RlSnMgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PT0gJ3VuZGVmaW5lZCc7XG52YXIgZnMgPSBpc05vZGVKcyA/IHJlcXVpcmUoXCJmc1wiKSA6IG51bGw7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zIHRvIGNyZWF0ZSBJbnB1dFN0cmVhbXMgZnJvbSB2YXJpb3VzIHNvdXJjZXMuXG4vL1xuLy8gQWxsIHJldHVybmVkIElucHV0U3RyZWFtcyBzdXBwb3J0IHRoZSBmdWxsIHJhbmdlIG9mIFVuaWNvZGVcbi8vIHVwIHRvIFUrMTBGRkZGICh0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBJbnB1dFN0cmVhbSBvbmx5IHN1cHBvcnRzXG4vLyBjb2RlIHBvaW50cyB1cCB0byBVK0ZGRkYpLlxudmFyIENoYXJTdHJlYW1zID0ge1xuICAvLyBDcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBzdHJpbmcuXG4gIGZyb21TdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgSW5wdXRTdHJlYW0oc3RyLCB0cnVlKTtcbiAgfSxcblxuICAvLyBBc3luY2hyb25vdXNseSBjcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBibG9iIGdpdmVuIHRoZVxuICAvLyBlbmNvZGluZyBvZiB0aGUgYnl0ZXMgaW4gdGhhdCBibG9iIChkZWZhdWx0cyB0byAndXRmOCcgaWZcbiAgLy8gZW5jb2RpbmcgaXMgbnVsbCkuXG4gIC8vXG4gIC8vIEludm9rZXMgb25Mb2FkKHJlc3VsdCkgb24gc3VjY2Vzcywgb25FcnJvcihlcnJvcikgb25cbiAgLy8gZmFpbHVyZS5cbiAgZnJvbUJsb2I6IGZ1bmN0aW9uKGJsb2IsIGVuY29kaW5nLCBvbkxvYWQsIG9uRXJyb3IpIHtcbiAgICB2YXIgcmVhZGVyID0gRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgaXMgPSBuZXcgSW5wdXRTdHJlYW0oZS50YXJnZXQucmVzdWx0LCB0cnVlKTtcbiAgICAgIG9uTG9hZChpcyk7XG4gICAgfTtcbiAgICByZWFkZXIub25lcnJvciA9IG9uRXJyb3I7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpO1xuICB9LFxuXG4gIC8vIENyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZnJvbSBhIEJ1ZmZlciBnaXZlbiB0aGVcbiAgLy8gZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgYnVmZmVyIChkZWZhdWx0cyB0byAndXRmOCcgaWZcbiAgLy8gZW5jb2RpbmcgaXMgbnVsbCkuXG4gIGZyb21CdWZmZXI6IGZ1bmN0aW9uKGJ1ZmZlciwgZW5jb2RpbmcpIHtcbiAgICByZXR1cm4gbmV3IElucHV0U3RyZWFtKGJ1ZmZlci50b1N0cmluZyhlbmNvZGluZyksIHRydWUpO1xuICB9LFxuXG4gIC8vIEFzeW5jaHJvbm91c2x5IGNyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZnJvbSBhIGZpbGUgb24gZGlzayBnaXZlblxuICAvLyB0aGUgZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgZmlsZSAoZGVmYXVsdHMgdG8gJ3V0ZjgnIGlmXG4gIC8vIGVuY29kaW5nIGlzIG51bGwpLlxuICAvL1xuICAvLyBJbnZva2VzIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpIG9uIGNvbXBsZXRpb24uXG4gIGZyb21QYXRoOiBmdW5jdGlvbihwYXRoLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBmcy5yZWFkRmlsZShwYXRoLCBlbmNvZGluZywgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICB2YXIgaXMgPSBudWxsO1xuICAgICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgICAgaXMgPSBuZXcgSW5wdXRTdHJlYW0oZGF0YSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhlcnIsIGlzKTtcbiAgICB9KTtcbiAgfSxcblxuICAvLyBTeW5jaHJvbm91c2x5IGNyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZ2l2ZW4gYSBwYXRoIHRvIGEgZmlsZVxuICAvLyBvbiBkaXNrIGFuZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgZmlsZSAoZGVmYXVsdHMgdG9cbiAgLy8gJ3V0ZjgnIGlmIGVuY29kaW5nIGlzIG51bGwpLlxuICBmcm9tUGF0aFN5bmM6IGZ1bmN0aW9uKHBhdGgsIGVuY29kaW5nKSB7XG4gICAgdmFyIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgZW5jb2RpbmcpO1xuICAgIHJldHVybiBuZXcgSW5wdXRTdHJlYW0oZGF0YSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydHMuQ2hhclN0cmVhbXMgPSBDaGFyU3RyZWFtcztcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vL1xuLy8gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBUb2tlbkZhY3Rvcnl9IGNyZWF0ZXNcbi8vIHtAbGluayBDb21tb25Ub2tlbn0gb2JqZWN0cy5cbi8vXG5cbnZhciBDb21tb25Ub2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Db21tb25Ub2tlbjtcblxuZnVuY3Rpb24gVG9rZW5GYWN0b3J5KCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gQ29tbW9uVG9rZW5GYWN0b3J5KGNvcHlUZXh0KSB7XG5cdFRva2VuRmFjdG9yeS5jYWxsKHRoaXMpO1xuICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHtAbGluayBDb21tb25Ub2tlbi8vc2V0VGV4dH0gc2hvdWxkIGJlIGNhbGxlZCBhZnRlclxuICAgIC8vIGNvbnN0cnVjdGluZyB0b2tlbnMgdG8gZXhwbGljaXRseSBzZXQgdGhlIHRleHQuIFRoaXMgaXMgdXNlZnVsIGZvciBjYXNlc1xuICAgIC8vIHdoZXJlIHRoZSBpbnB1dCBzdHJlYW0gbWlnaHQgbm90IGJlIGFibGUgdG8gcHJvdmlkZSBhcmJpdHJhcnkgc3Vic3RyaW5nc1xuICAgIC8vIG9mIHRleHQgZnJvbSB0aGUgaW5wdXQgYWZ0ZXIgdGhlIGxleGVyIGNyZWF0ZXMgYSB0b2tlbiAoZS5nLiB0aGVcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQ2hhclN0cmVhbS8vZ2V0VGV4dH0gaW5cbiAgICAvLyB7QGxpbmsgVW5idWZmZXJlZENoYXJTdHJlYW19IHRocm93cyBhblxuICAgIC8vIHtAbGluayBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbn0pLiBFeHBsaWNpdGx5IHNldHRpbmcgdGhlIHRva2VuIHRleHRcbiAgICAvLyBhbGxvd3Mge0BsaW5rIFRva2VuLy9nZXRUZXh0fSB0byBiZSBjYWxsZWQgYXQgYW55IHRpbWUgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAvLyBpbnB1dCBzdHJlYW0gaW1wbGVtZW50YXRpb24uXG4gICAgLy9cbiAgICAvLyA8cD5cbiAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB7QGNvZGUgZmFsc2V9IHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5XG4gICAgLy8gb3ZlcmhlYWQgb2YgY29weWluZyB0ZXh0IGZvciBldmVyeSB0b2tlbiB1bmxlc3MgZXhwbGljaXRseSByZXF1ZXN0ZWQuPC9wPlxuICAgIC8vXG4gICAgdGhpcy5jb3B5VGV4dCA9IGNvcHlUZXh0PT09dW5kZWZpbmVkID8gZmFsc2UgOiBjb3B5VGV4dDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuRmFjdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuRmFjdG9yeS5wcm90b3R5cGUpO1xuQ29tbW9uVG9rZW5GYWN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuRmFjdG9yeTtcblxuLy9cbi8vIFRoZSBkZWZhdWx0IHtAbGluayBDb21tb25Ub2tlbkZhY3Rvcnl9IGluc3RhbmNlLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyB0b2tlbiBmYWN0b3J5IGRvZXMgbm90IGV4cGxpY2l0bHkgY29weSB0b2tlbiB0ZXh0IHdoZW4gY29uc3RydWN0aW5nXG4vLyB0b2tlbnMuPC9wPlxuLy9cbkNvbW1vblRva2VuRmFjdG9yeS5ERUZBVUxUID0gbmV3IENvbW1vblRva2VuRmFjdG9yeSgpO1xuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgdHlwZSwgdGV4dCwgY2hhbm5lbCwgc3RhcnQsIHN0b3AsIGxpbmUsIGNvbHVtbikge1xuICAgIHZhciB0ID0gbmV3IENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApO1xuICAgIHQubGluZSA9IGxpbmU7XG4gICAgdC5jb2x1bW4gPSBjb2x1bW47XG4gICAgaWYgKHRleHQgIT09bnVsbCkge1xuICAgICAgICB0LnRleHQgPSB0ZXh0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb3B5VGV4dCAmJiBzb3VyY2VbMV0gIT09bnVsbCkge1xuICAgICAgICB0LnRleHQgPSBzb3VyY2VbMV0uZ2V0VGV4dChzdGFydCxzdG9wKTtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZVRoaW4gPSBmdW5jdGlvbih0eXBlLCB0ZXh0KSB7XG4gICAgdmFyIHQgPSBuZXcgQ29tbW9uVG9rZW4obnVsbCwgdHlwZSk7XG4gICAgdC50ZXh0ID0gdGV4dDtcbiAgICByZXR1cm4gdDtcbn07XG5cbmV4cG9ydHMuQ29tbW9uVG9rZW5GYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vL1xuLy8gVGhpcyBjbGFzcyBleHRlbmRzIHtAbGluayBCdWZmZXJlZFRva2VuU3RyZWFtfSB3aXRoIGZ1bmN0aW9uYWxpdHkgdG8gZmlsdGVyXG4vLyB0b2tlbiBzdHJlYW1zIHRvIHRva2VucyBvbiBhIHBhcnRpY3VsYXIgY2hhbm5lbCAodG9rZW5zIHdoZXJlXG4vLyB7QGxpbmsgVG9rZW4vL2dldENoYW5uZWx9IHJldHVybnMgYSBwYXJ0aWN1bGFyIHZhbHVlKS5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgdG9rZW4gc3RyZWFtIHByb3ZpZGVzIGFjY2VzcyB0byBhbGwgdG9rZW5zIGJ5IGluZGV4IG9yIHdoZW4gY2FsbGluZ1xuLy8gbWV0aG9kcyBsaWtlIHtAbGluayAvL2dldFRleHR9LiBUaGUgY2hhbm5lbCBmaWx0ZXJpbmcgaXMgb25seSB1c2VkIGZvciBjb2RlXG4vLyBhY2Nlc3NpbmcgdG9rZW5zIHZpYSB0aGUgbG9va2FoZWFkIG1ldGhvZHMge0BsaW5rIC8vTEF9LCB7QGxpbmsgLy9MVH0sIGFuZFxuLy8ge0BsaW5rIC8vTEJ9LjwvcD5cbi8vXG4vLyA8cD5cbi8vIEJ5IGRlZmF1bHQsIHRva2VucyBhcmUgcGxhY2VkIG9uIHRoZSBkZWZhdWx0IGNoYW5uZWxcbi8vICh7QGxpbmsgVG9rZW4vL0RFRkFVTFRfQ0hBTk5FTH0pLCBidXQgbWF5IGJlIHJlYXNzaWduZWQgYnkgdXNpbmcgdGhlXG4vLyB7QGNvZGUgLT5jaGFubmVsKEhJRERFTil9IGxleGVyIGNvbW1hbmQsIG9yIGJ5IHVzaW5nIGFuIGVtYmVkZGVkIGFjdGlvbiB0b1xuLy8gY2FsbCB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9LlxuLy8gPC9wPlxuLy9cbi8vIDxwPlxuLy8gTm90ZTogbGV4ZXIgcnVsZXMgd2hpY2ggdXNlIHRoZSB7QGNvZGUgLT5za2lwfSBsZXhlciBjb21tYW5kIG9yIGNhbGxcbi8vIHtAbGluayBMZXhlci8vc2tpcH0gZG8gbm90IHByb2R1Y2UgdG9rZW5zIGF0IGFsbCwgc28gaW5wdXQgdGV4dCBtYXRjaGVkIGJ5XG4vLyBzdWNoIGEgcnVsZSB3aWxsIG5vdCBiZSBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgdG9rZW4gc3RyZWFtLCByZWdhcmRsZXNzIG9mXG4vLyBjaGFubmVsLjwvcD5cbi8vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQnVmZmVyZWRUb2tlblN0cmVhbSA9IHJlcXVpcmUoJy4vQnVmZmVyZWRUb2tlblN0cmVhbScpLkJ1ZmZlcmVkVG9rZW5TdHJlYW07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuU3RyZWFtKGxleGVyLCBjaGFubmVsKSB7XG5cdEJ1ZmZlcmVkVG9rZW5TdHJlYW0uY2FsbCh0aGlzLCBsZXhlcik7XG4gICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbD09PXVuZGVmaW5lZCA/IFRva2VuLkRFRkFVTFRfQ0hBTk5FTCA6IGNoYW5uZWw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUpO1xuQ29tbW9uVG9rZW5TdHJlYW0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29tbW9uVG9rZW5TdHJlYW07XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGp1c3RTZWVrSW5kZXggPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIHRoaXMubmV4dFRva2VuT25DaGFubmVsKGksIHRoaXMuY2hhbm5lbCk7XG59O1xuXG5Db21tb25Ub2tlblN0cmVhbS5wcm90b3R5cGUuTEIgPSBmdW5jdGlvbihrKSB7XG4gICAgaWYgKGs9PT0wIHx8IHRoaXMuaW5kZXgtazwwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuaW5kZXg7XG4gICAgdmFyIG4gPSAxO1xuICAgIC8vIGZpbmQgayBnb29kIHRva2VucyBsb29raW5nIGJhY2t3YXJkc1xuICAgIHdoaWxlIChuIDw9IGspIHtcbiAgICAgICAgLy8gc2tpcCBvZmYtY2hhbm5lbCB0b2tlbnNcbiAgICAgICAgaSA9IHRoaXMucHJldmlvdXNUb2tlbk9uQ2hhbm5lbChpIC0gMSwgdGhpcy5jaGFubmVsKTtcbiAgICAgICAgbiArPSAxO1xuICAgIH1cbiAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5MVCA9IGZ1bmN0aW9uKGspIHtcbiAgICB0aGlzLmxhenlJbml0KCk7XG4gICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChrIDwgMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5MQigtayk7XG4gICAgfVxuICAgIHZhciBpID0gdGhpcy5pbmRleDtcbiAgICB2YXIgbiA9IDE7IC8vIHdlIGtub3cgdG9rZW5zW3Bvc10gaXMgYSBnb29kIG9uZVxuICAgIC8vIGZpbmQgayBnb29kIHRva2Vuc1xuICAgIHdoaWxlIChuIDwgaykge1xuICAgICAgICAvLyBza2lwIG9mZi1jaGFubmVsIHRva2VucywgYnV0IG1ha2Ugc3VyZSB0byBub3QgbG9vayBwYXN0IEVPRlxuICAgICAgICBpZiAodGhpcy5zeW5jKGkgKyAxKSkge1xuICAgICAgICAgICAgaSA9IHRoaXMubmV4dFRva2VuT25DaGFubmVsKGkgKyAxLCB0aGlzLmNoYW5uZWwpO1xuICAgICAgICB9XG4gICAgICAgIG4gKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2ldO1xufTtcblxuLy8gQ291bnQgRU9GIGp1c3Qgb25jZS4vLy9cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXROdW1iZXJPZk9uQ2hhbm5lbFRva2VucyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gMDtcbiAgICB0aGlzLmZpbGwoKTtcbiAgICBmb3IgKHZhciBpID0wOyBpPCB0aGlzLnRva2Vucy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciB0ID0gdGhpcy50b2tlbnNbaV07XG4gICAgICAgIGlmKCB0LmNoYW5uZWw9PT10aGlzLmNoYW5uZWwpIHtcbiAgICAgICAgICAgIG4gKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiggdC50eXBlPT09VG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbjtcbn07XG5cbmV4cG9ydHMuQ29tbW9uVG9rZW5TdHJlYW0gPSBDb21tb25Ub2tlblN0cmVhbTsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vICBUaGlzIGlzIGFuIElucHV0U3RyZWFtIHRoYXQgaXMgbG9hZGVkIGZyb20gYSBmaWxlIGFsbCBhdCBvbmNlXG4vLyAgd2hlbiB5b3UgY29uc3RydWN0IHRoZSBvYmplY3QuXG4vL1xudmFyIElucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xudmFyIGlzTm9kZUpzID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgPT09ICd1bmRlZmluZWQnO1xudmFyIGZzID0gaXNOb2RlSnMgPyByZXF1aXJlKFwiZnNcIikgOiBudWxsO1xuXG5mdW5jdGlvbiBGaWxlU3RyZWFtKGZpbGVOYW1lLCBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdHZhciBkYXRhID0gZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCBcInV0ZjhcIik7XG5cdElucHV0U3RyZWFtLmNhbGwodGhpcywgZGF0YSwgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyk7XG5cdHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkZpbGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJbnB1dFN0cmVhbS5wcm90b3R5cGUpO1xuRmlsZVN0cmVhbS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWxlU3RyZWFtO1xuXG5leHBvcnRzLkZpbGVTdHJlYW0gPSBGaWxlU3RyZWFtO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnJlcXVpcmUoJy4vcG9seWZpbGxzL2NvZGVwb2ludGF0Jyk7XG5yZXF1aXJlKCcuL3BvbHlmaWxscy9mcm9tY29kZXBvaW50Jyk7XG5cbi8vIFZhY3V1bSBhbGwgaW5wdXQgZnJvbSBhIHN0cmluZyBhbmQgdGhlbiB0cmVhdCBpdCBsaWtlIGEgYnVmZmVyLlxuXG5mdW5jdGlvbiBfbG9hZFN0cmluZyhzdHJlYW0pIHtcblx0c3RyZWFtLl9pbmRleCA9IDA7XG5cdHN0cmVhbS5kYXRhID0gW107XG5cdGlmIChzdHJlYW0uZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cykge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RyZWFtLnN0cmRhdGEubGVuZ3RoOyApIHtcblx0XHRcdHZhciBjb2RlUG9pbnQgPSBzdHJlYW0uc3RyZGF0YS5jb2RlUG9pbnRBdChpKTtcblx0XHRcdHN0cmVhbS5kYXRhLnB1c2goY29kZVBvaW50KTtcblx0XHRcdGkgKz0gY29kZVBvaW50IDw9IDB4RkZGRiA/IDEgOiAyO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0cmVhbS5zdHJkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgY29kZVVuaXQgPSBzdHJlYW0uc3RyZGF0YS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0c3RyZWFtLmRhdGEucHVzaChjb2RlVW5pdCk7XG5cdFx0fVxuXHR9XG5cdHN0cmVhbS5fc2l6ZSA9IHN0cmVhbS5kYXRhLmxlbmd0aDtcbn1cblxuLy8gSWYgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgdHJlYXRlZFxuLy8gYXMgYSBzZXJpZXMgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cbi8vXG4vLyBPdGhlcndpc2UsIHRoZSBpbnB1dCBpcyB0cmVhdGVkIGFzIGEgc2VyaWVzIG9mIDE2LWJpdCBVVEYtMTYgY29kZVxuLy8gdW5pdHMuXG5mdW5jdGlvbiBJbnB1dFN0cmVhbShkYXRhLCBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdHRoaXMubmFtZSA9IFwiPGVtcHR5PlwiO1xuXHR0aGlzLnN0cmRhdGEgPSBkYXRhO1xuXHR0aGlzLmRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMgPSBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzIHx8IGZhbHNlO1xuXHRfbG9hZFN0cmluZyh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1dFN0cmVhbS5wcm90b3R5cGUsIFwiaW5kZXhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5kZXg7XG5cdH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXRTdHJlYW0ucHJvdG90eXBlLCBcInNpemVcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2l6ZTtcblx0fVxufSk7XG5cbi8vIFJlc2V0IHRoZSBzdHJlYW0gc28gdGhhdCBpdCdzIGluIHRoZSBzYW1lIHN0YXRlIGl0IHdhc1xuLy8gd2hlbiB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkICpleGNlcHQqIHRoZSBkYXRhIGFycmF5IGlzIG5vdFxuLy8gdG91Y2hlZC5cbi8vXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5faW5kZXggPSAwO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLmNvbnN1bWUgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX2luZGV4ID49IHRoaXMuX3NpemUpIHtcblx0XHQvLyBhc3NlcnQgdGhpcy5MQSgxKSA9PSBUb2tlbi5FT0Zcblx0XHR0aHJvdyAoXCJjYW5ub3QgY29uc3VtZSBFT0ZcIik7XG5cdH1cblx0dGhpcy5faW5kZXggKz0gMTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5MQSA9IGZ1bmN0aW9uKG9mZnNldCkge1xuXHRpZiAob2Zmc2V0ID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7IC8vIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChvZmZzZXQgPCAwKSB7XG5cdFx0b2Zmc2V0ICs9IDE7IC8vIGUuZy4sIHRyYW5zbGF0ZSBMQSgtMSkgdG8gdXNlIG9mZnNldD0wXG5cdH1cblx0dmFyIHBvcyA9IHRoaXMuX2luZGV4ICsgb2Zmc2V0IC0gMTtcblx0aWYgKHBvcyA8IDAgfHwgcG9zID49IHRoaXMuX3NpemUpIHsgLy8gaW52YWxpZFxuXHRcdHJldHVybiBUb2tlbi5FT0Y7XG5cdH1cblx0cmV0dXJuIHRoaXMuZGF0YVtwb3NdO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLkxUID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdHJldHVybiB0aGlzLkxBKG9mZnNldCk7XG59O1xuXG4vLyBtYXJrL3JlbGVhc2UgZG8gbm90aGluZzsgd2UgaGF2ZSBlbnRpcmUgYnVmZmVyXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUubWFyayA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gLTE7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKG1hcmtlcikge1xufTtcblxuLy8gY29uc3VtZSgpIGFoZWFkIHVudGlsIHA9PV9pbmRleDsgY2FuJ3QganVzdCBzZXQgcD1faW5kZXggYXMgd2UgbXVzdFxuLy8gdXBkYXRlIGxpbmUgYW5kIGNvbHVtbi4gSWYgd2Ugc2VlayBiYWNrd2FyZHMsIGp1c3Qgc2V0IHBcbi8vXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uKF9pbmRleCkge1xuXHRpZiAoX2luZGV4IDw9IHRoaXMuX2luZGV4KSB7XG5cdFx0dGhpcy5faW5kZXggPSBfaW5kZXg7IC8vIGp1c3QganVtcDsgZG9uJ3QgdXBkYXRlIHN0cmVhbSBzdGF0ZSAobGluZSxcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi4pXG5cdFx0cmV0dXJuO1xuXHR9XG5cdC8vIHNlZWsgZm9yd2FyZFxuXHR0aGlzLl9pbmRleCA9IE1hdGgubWluKF9pbmRleCwgdGhpcy5fc2l6ZSk7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wKSB7XG5cdGlmIChzdG9wID49IHRoaXMuX3NpemUpIHtcblx0XHRzdG9wID0gdGhpcy5fc2l6ZSAtIDE7XG5cdH1cblx0aWYgKHN0YXJ0ID49IHRoaXMuX3NpemUpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRpZiAodGhpcy5kZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gXCJcIjtcblx0XHRcdGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBzdG9wOyBpKyspIHtcblx0XHRcdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuZGF0YVtpXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdHJkYXRhLnNsaWNlKHN0YXJ0LCBzdG9wICsgMSk7XG5cdFx0fVxuXHR9XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3RyZGF0YTtcbn07XG5cbmV4cG9ydHMuSW5wdXRTdHJlYW0gPSBJbnB1dFN0cmVhbTtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLypqc2xpbnQgc21hcnR0YWJzOnRydWUgKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuXG4vKiBzdG9wIGlzIG5vdCBpbmNsdWRlZCEgKi9cbmZ1bmN0aW9uIEludGVydmFsKHN0YXJ0LCBzdG9wKSB7XG5cdHRoaXMuc3RhcnQgPSBzdGFydDtcblx0dGhpcy5zdG9wID0gc3RvcDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkludGVydmFsLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0cmV0dXJuIGl0ZW0gPj0gdGhpcy5zdGFydCAmJiBpdGVtIDwgdGhpcy5zdG9wO1xufTtcblxuSW50ZXJ2YWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdGlmKHRoaXMuc3RhcnQ9PT10aGlzLnN0b3AtMSkge1xuXHRcdHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhcnQudG9TdHJpbmcoKSArIFwiLi5cIiArICh0aGlzLnN0b3AtMSkudG9TdHJpbmcoKTtcblx0fVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWwucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3AgLSB0aGlzLnN0YXJ0O1xuXHR9XG59KTtcblxuZnVuY3Rpb24gSW50ZXJ2YWxTZXQoKSB7XG5cdHRoaXMuaW50ZXJ2YWxzID0gbnVsbDtcblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xufVxuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCB8fCB0aGlzLmludGVydmFscy5sZW5ndGg9PT0wKSB7XG5cdFx0cmV0dXJuIFRva2VuLklOVkFMSURfVFlQRTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcnZhbHNbMF0uc3RhcnQ7XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5hZGRPbmUgPSBmdW5jdGlvbih2KSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHYsIHYgKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkUmFuZ2UgPSBmdW5jdGlvbihsLCBoKSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGwsIGggKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkSW50ZXJ2YWwgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHRoaXMuaW50ZXJ2YWxzID0gW107XG5cdFx0dGhpcy5pbnRlcnZhbHMucHVzaCh2KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmaW5kIGluc2VydCBwb3Ncblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdFx0Ly8gZGlzdGluY3QgcmFuZ2UgLT4gaW5zZXJ0XG5cdFx0XHRpZiAodi5zdG9wIDwgaS5zdGFydCkge1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgdik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGNvbnRpZ3VvdXMgcmFuZ2UgLT4gYWRqdXN0XG5cdFx0XHRlbHNlIGlmICh2LnN0b3AgPT09IGkuc3RhcnQpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10uc3RhcnQgPSB2LnN0YXJ0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBvdmVybGFwcGluZyByYW5nZSAtPiBhZGp1c3QgYW5kIHJlZHVjZVxuXHRcdFx0ZWxzZSBpZiAodi5zdGFydCA8PSBpLnN0b3ApIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoTWF0aC5taW4oaS5zdGFydCwgdi5zdGFydCksIE1hdGgubWF4KGkuc3RvcCwgdi5zdG9wKSk7XG5cdFx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGdyZWF0ZXIgdGhhbiBhbnkgZXhpc3Rpbmdcblx0XHR0aGlzLmludGVydmFscy5wdXNoKHYpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKG90aGVyLmludGVydmFscyAhPT0gbnVsbCkge1xuXHRcdGZvciAodmFyIGsgPSAwOyBrIDwgb3RoZXIuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IG90aGVyLmludGVydmFsc1trXTtcblx0XHRcdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGkuc3RhcnQsIGkuc3RvcCkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcztcbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbihrKSB7XG5cdC8vIG9ubHkgbmVlZCB0byByZWR1Y2UgaWYgayBpcyBub3QgdGhlIGxhc3Rcblx0aWYgKGsgPCB0aGlzLmludGVydmFsc2xlbmd0aCAtIDEpIHtcblx0XHR2YXIgbCA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdHZhciByID0gdGhpcy5pbnRlcnZhbHNbayArIDFdO1xuXHRcdC8vIGlmIHIgY29udGFpbmVkIGluIGxcblx0XHRpZiAobC5zdG9wID49IHIuc3RvcCkge1xuXHRcdFx0dGhpcy5pbnRlcnZhbHMucG9wKGsgKyAxKTtcblx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdH0gZWxzZSBpZiAobC5zdG9wID49IHIuc3RhcnQpIHtcblx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGwuc3RhcnQsIHIuc3RvcCk7XG5cdFx0XHR0aGlzLmludGVydmFscy5wb3AoayArIDEpO1xuXHRcdH1cblx0fVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmNvbXBsZW1lbnQgPSBmdW5jdGlvbihzdGFydCwgc3RvcCkge1xuICAgIHZhciByZXN1bHQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICByZXN1bHQuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHN0YXJ0LHN0b3ArMSkpO1xuICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5yZW1vdmVSYW5nZSh0aGlzLmludGVydmFsc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRpZih0aGlzLmludGVydmFsc1trXS5jb250YWlucyhpdGVtKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsZW4gPSAwO1xuXHRcdHRoaXMuaW50ZXJ2YWxzLm1hcChmdW5jdGlvbihpKSB7bGVuICs9IGkubGVuZ3RoO30pO1xuXHRcdHJldHVybiBsZW47XG5cdH1cbn0pO1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUucmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbih2KSB7XG4gICAgaWYodi5zdGFydD09PXYuc3RvcC0xKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlT25lKHYuc3RhcnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbnRlcnZhbHMhPT1udWxsKSB7XG4gICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgZm9yKHZhciBuPTA7IG48dGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5pbnRlcnZhbHNba107XG4gICAgICAgICAgICAvLyBpbnRlcnZhbHMgYXJlIG9yZGVyZWRcbiAgICAgICAgICAgIGlmICh2LnN0b3A8PWkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgaW5jbHVkaW5nIHJhbmdlLCBzcGxpdCBpdFxuICAgICAgICAgICAgZWxzZSBpZih2LnN0YXJ0Pmkuc3RhcnQgJiYgdi5zdG9wPGkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQsIHYuc3RhcnQpO1xuICAgICAgICAgICAgICAgIHZhciB4ID0gbmV3IEludGVydmFsKHYuc3RvcCwgaS5zdG9wKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGluY2x1ZGVkIHJhbmdlLCByZW1vdmUgaXRcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDw9aS5zdGFydCAmJiB2LnN0b3A+PWkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgICAgICBrID0gayAtIDE7IC8vIG5lZWQgYW5vdGhlciBwYXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgbG93ZXIgYm91bmRhcnlcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDxpLnN0b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsc1trXSA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2LnN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciB1cHBlciBib3VuZGFyeVxuICAgICAgICAgICAgZWxzZSBpZih2LnN0b3A8aS5zdG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwodi5zdG9wLCBpLnN0b3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgayArPSAxO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnJlbW92ZU9uZSA9IGZ1bmN0aW9uKHYpIHtcblx0aWYgKHRoaXMuaW50ZXJ2YWxzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmludGVydmFscy5sZW5ndGg7IGsrKykge1xuXHRcdFx0dmFyIGkgPSB0aGlzLmludGVydmFsc1trXTtcblx0XHRcdC8vIGludGVydmFscyBpcyBvcmRlcmVkXG5cdFx0XHRpZiAodiA8IGkuc3RhcnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIHNpbmdsZSB2YWx1ZSByYW5nZVxuXHRcdFx0ZWxzZSBpZiAodiA9PT0gaS5zdGFydCAmJiB2ID09PSBpLnN0b3AgLSAxKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIGxvd2VyIGJvdW5kYXJ5XG5cdFx0XHRlbHNlIGlmICh2ID09PSBpLnN0YXJ0KSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQgKyAxLCBpLnN0b3ApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBjaGVjayBmb3IgdXBwZXIgYm91bmRhcnlcblx0XHRcdGVsc2UgaWYgKHYgPT09IGkuc3RvcCAtIDEpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoaS5zdGFydCwgaS5zdG9wIC0gMSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIHNwbGl0IGV4aXN0aW5nIHJhbmdlXG5cdFx0XHRlbHNlIGlmICh2IDwgaS5zdG9wIC0gMSkge1xuXHRcdFx0XHR2YXIgeCA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2KTtcblx0XHRcdFx0aS5zdGFydCA9IHYgKyAxO1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgZWxlbXNBcmVDaGFyKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRlbGVtc0FyZUNoYXIgPSBlbGVtc0FyZUNoYXIgfHwgZmFsc2U7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcInt9XCI7XG5cdH0gZWxzZSBpZihsaXRlcmFsTmFtZXMhPT1udWxsIHx8IHN5bWJvbGljTmFtZXMhPT1udWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9Ub2tlblN0cmluZyhsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpO1xuXHR9IGVsc2UgaWYoZWxlbXNBcmVDaGFyKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9DaGFyU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMudG9JbmRleFN0cmluZygpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUudG9DaGFyU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBuYW1lcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHYgPSB0aGlzLmludGVydmFsc1tpXTtcblx0XHRpZih2LnN0b3A9PT12LnN0YXJ0KzEpIHtcblx0XHRcdGlmICggdi5zdGFydD09PVRva2VuLkVPRiApIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIjxFT0Y+XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIidcIiArIFN0cmluZy5mcm9tQ2hhckNvZGUodi5zdGFydCkgKyBcIidcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2goXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RhcnQpICsgXCInLi4nXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RvcC0xKSArIFwiJ1wiKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvSW5kZXhTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGlmKHYuc3RvcD09PXYuc3RhcnQrMSkge1xuXHRcdFx0aWYgKCB2LnN0YXJ0PT09VG9rZW4uRU9GICkge1xuXHRcdFx0XHRuYW1lcy5wdXNoKFwiPEVPRj5cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuYW1lcy5wdXNoKHYuc3RhcnQudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2godi5zdGFydC50b1N0cmluZygpICsgXCIuLlwiICsgKHYuc3RvcC0xKS50b1N0cmluZygpKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvVG9rZW5TdHJpbmcgPSBmdW5jdGlvbihsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGZvciAodmFyIGogPSB2LnN0YXJ0OyBqIDwgdi5zdG9wOyBqKyspIHtcblx0XHRcdG5hbWVzLnB1c2godGhpcy5lbGVtZW50TmFtZShsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMsIGopKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5lbGVtZW50TmFtZSA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgYSkge1xuXHRpZiAoYSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIGlmIChhID09PSBUb2tlbi5FUFNJTE9OKSB7XG5cdFx0cmV0dXJuIFwiPEVQU0lMT04+XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGxpdGVyYWxOYW1lc1thXSB8fCBzeW1ib2xpY05hbWVzW2FdO1xuXHR9XG59O1xuXG5leHBvcnRzLkludGVydmFsID0gSW50ZXJ2YWw7XG5leHBvcnRzLkludGVydmFsU2V0ID0gSW50ZXJ2YWxTZXQ7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbnZhciBTZXQgPSByZXF1aXJlKCcuL1V0aWxzJykuU2V0O1xudmFyIEJpdFNldCA9IHJlcXVpcmUoJy4vVXRpbHMnKS5CaXRTZXQ7XG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQVROQ29uZmlnID0gcmVxdWlyZSgnLi9hdG4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIEludGVydmFsU2V0ID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsU2V0O1xudmFyIFJ1bGVTdG9wU3RhdGUgPSByZXF1aXJlKCcuL2F0bi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgUnVsZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuL2F0bi9UcmFuc2l0aW9uJykuUnVsZVRyYW5zaXRpb247XG52YXIgTm90U2V0VHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5Ob3RTZXRUcmFuc2l0aW9uO1xudmFyIFdpbGRjYXJkVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5XaWxkY2FyZFRyYW5zaXRpb247XG52YXIgQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uID0gcmVxdWlyZSgnLi9hdG4vVHJhbnNpdGlvbicpLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxudmFyIHBjID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uQ29udGV4dCcpO1xudmFyIHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0ID0gcGMucHJlZGljdGlvbkNvbnRleHRGcm9tUnVsZUNvbnRleHQ7XG52YXIgUHJlZGljdGlvbkNvbnRleHQgPSBwYy5QcmVkaWN0aW9uQ29udGV4dDtcbnZhciBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IHBjLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuXG5mdW5jdGlvbiBMTDFBbmFseXplciAoYXRuKSB7XG4gICAgdGhpcy5hdG4gPSBhdG47XG59XG5cbi8vKiBTcGVjaWFsIHZhbHVlIGFkZGVkIHRvIHRoZSBsb29rYWhlYWQgc2V0cyB0byBpbmRpY2F0ZSB0aGF0IHdlIGhpdFxuLy8gIGEgcHJlZGljYXRlIGR1cmluZyBhbmFseXNpcyBpZiB7QGNvZGUgc2VlVGhydVByZWRzPT1mYWxzZX0uXG4vLy9cbkxMMUFuYWx5emVyLkhJVF9QUkVEID0gVG9rZW4uSU5WQUxJRF9UWVBFO1xuXG5cbi8vKlxuLy8gQ2FsY3VsYXRlcyB0aGUgU0xMKDEpIGV4cGVjdGVkIGxvb2thaGVhZCBzZXQgZm9yIGVhY2ggb3V0Z29pbmcgdHJhbnNpdGlvblxuLy8gb2YgYW4ge0BsaW5rIEFUTlN0YXRlfS4gVGhlIHJldHVybmVkIGFycmF5IGhhcyBvbmUgZWxlbWVudCBmb3IgZWFjaFxuLy8gb3V0Z29pbmcgdHJhbnNpdGlvbiBpbiB7QGNvZGUgc30uIElmIHRoZSBjbG9zdXJlIGZyb20gdHJhbnNpdGlvblxuLy8gPGVtPmk8L2VtPiBsZWFkcyB0byBhIHNlbWFudGljIHByZWRpY2F0ZSBiZWZvcmUgbWF0Y2hpbmcgYSBzeW1ib2wsIHRoZVxuLy8gZWxlbWVudCBhdCBpbmRleCA8ZW0+aTwvZW0+IG9mIHRoZSByZXN1bHQgd2lsbCBiZSB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZVxuLy8gQHJldHVybiB0aGUgZXhwZWN0ZWQgc3ltYm9scyBmb3IgZWFjaCBvdXRnb2luZyB0cmFuc2l0aW9uIG9mIHtAY29kZSBzfS5cbi8vL1xuTEwxQW5hbHl6ZXIucHJvdG90eXBlLmdldERlY2lzaW9uTG9va2FoZWFkID0gZnVuY3Rpb24ocykge1xuICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgY291bnQgPSBzLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICB2YXIgbG9vayA9IFtdO1xuICAgIGZvcih2YXIgYWx0PTA7IGFsdDwgY291bnQ7IGFsdCsrKSB7XG4gICAgICAgIGxvb2tbYWx0XSA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgICAgICB2YXIgbG9va0J1c3kgPSBuZXcgU2V0KCk7XG4gICAgICAgIHZhciBzZWVUaHJ1UHJlZHMgPSBmYWxzZTsgLy8gZmFpbCB0byBnZXQgbG9va2FoZWFkIHVwb24gcHJlZFxuICAgICAgICB0aGlzLl9MT09LKHMudHJhbnNpdGlvbihhbHQpLnRhcmdldCwgbnVsbCwgUHJlZGljdGlvbkNvbnRleHQuRU1QVFksXG4gICAgICAgICAgICAgIGxvb2tbYWx0XSwgbG9va0J1c3ksIG5ldyBCaXRTZXQoKSwgc2VlVGhydVByZWRzLCBmYWxzZSk7XG4gICAgICAgIC8vIFdpcGUgb3V0IGxvb2thaGVhZCBmb3IgdGhpcyBhbHRlcm5hdGl2ZSBpZiB3ZSBmb3VuZCBub3RoaW5nXG4gICAgICAgIC8vIG9yIHdlIGhhZCBhIHByZWRpY2F0ZSB3aGVuIHdlICFzZWVUaHJ1UHJlZHNcbiAgICAgICAgaWYgKGxvb2tbYWx0XS5sZW5ndGg9PT0wIHx8IGxvb2tbYWx0XS5jb250YWlucyhMTDFBbmFseXplci5ISVRfUFJFRCkpIHtcbiAgICAgICAgICAgIGxvb2tbYWx0XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvb2s7XG59O1xuXG4vLypcbi8vIENvbXB1dGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vL1xuLy8gPHA+SWYge0Bjb2RlIGN0eH0gaXMge0Bjb2RlIG51bGx9IGFuZCB0aGUgZW5kIG9mIHRoZSBydWxlIGNvbnRhaW5pbmdcbi8vIHtAY29kZSBzfSBpcyByZWFjaGVkLCB7QGxpbmsgVG9rZW4vL0VQU0lMT059IGlzIGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0LlxuLy8gSWYge0Bjb2RlIGN0eH0gaXMgbm90IHtAY29kZSBudWxsfSBhbmQgdGhlIGVuZCBvZiB0aGUgb3V0ZXJtb3N0IHJ1bGUgaXNcbi8vIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRU9GfSBpcyBhZGRlZCB0byB0aGUgcmVzdWx0IHNldC48L3A+XG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZVxuLy8gQHBhcmFtIHN0b3BTdGF0ZSB0aGUgQVROIHN0YXRlIHRvIHN0b3AgYXQuIFRoaXMgY2FuIGJlIGFcbi8vIHtAbGluayBCbG9ja0VuZFN0YXRlfSB0byBkZXRlY3QgZXBzaWxvbiBwYXRocyB0aHJvdWdoIGEgY2xvc3VyZS5cbi8vIEBwYXJhbSBjdHggdGhlIGNvbXBsZXRlIHBhcnNlciBjb250ZXh0LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIGNvbnRleHRcbi8vIHNob3VsZCBiZSBpZ25vcmVkXG4vL1xuLy8gQHJldHVybiBUaGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vLy9cbkxMMUFuYWx5emVyLnByb3RvdHlwZS5MT09LID0gZnVuY3Rpb24ocywgc3RvcFN0YXRlLCBjdHgpIHtcbiAgICB2YXIgciA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHZhciBzZWVUaHJ1UHJlZHMgPSB0cnVlOyAvLyBpZ25vcmUgcHJlZHM7IGdldCBhbGwgbG9va2FoZWFkXG5cdGN0eCA9IGN0eCB8fCBudWxsO1xuICAgIHZhciBsb29rQ29udGV4dCA9IGN0eCE9PW51bGwgPyBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChzLmF0biwgY3R4KSA6IG51bGw7XG4gICAgdGhpcy5fTE9PSyhzLCBzdG9wU3RhdGUsIGxvb2tDb250ZXh0LCByLCBuZXcgU2V0KCksIG5ldyBCaXRTZXQoKSwgc2VlVGhydVByZWRzLCB0cnVlKTtcbiAgICByZXR1cm4gcjtcbn07XG5cbi8vKlxuLy8gQ29tcHV0ZSBzZXQgb2YgdG9rZW5zIHRoYXQgY2FuIGZvbGxvdyB7QGNvZGUgc30gaW4gdGhlIEFUTiBpbiB0aGVcbi8vIHNwZWNpZmllZCB7QGNvZGUgY3R4fS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY3R4fSBpcyB7QGNvZGUgbnVsbH0gYW5kIHtAY29kZSBzdG9wU3RhdGV9IG9yIHRoZSBlbmQgb2YgdGhlXG4vLyBydWxlIGNvbnRhaW5pbmcge0Bjb2RlIHN9IGlzIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgYWRkZWQgdG9cbi8vIHRoZSByZXN1bHQgc2V0LiBJZiB7QGNvZGUgY3R4fSBpcyBub3Qge0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgYWRkRU9GfSBpc1xuLy8ge0Bjb2RlIHRydWV9IGFuZCB7QGNvZGUgc3RvcFN0YXRlfSBvciB0aGUgZW5kIG9mIHRoZSBvdXRlcm1vc3QgcnVsZSBpc1xuLy8gcmVhY2hlZCwge0BsaW5rIFRva2VuLy9FT0Z9IGlzIGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0LjwvcD5cbi8vXG4vLyBAcGFyYW0gcyB0aGUgQVROIHN0YXRlLlxuLy8gQHBhcmFtIHN0b3BTdGF0ZSB0aGUgQVROIHN0YXRlIHRvIHN0b3AgYXQuIFRoaXMgY2FuIGJlIGFcbi8vIHtAbGluayBCbG9ja0VuZFN0YXRlfSB0byBkZXRlY3QgZXBzaWxvbiBwYXRocyB0aHJvdWdoIGEgY2xvc3VyZS5cbi8vIEBwYXJhbSBjdHggVGhlIG91dGVyIGNvbnRleHQsIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgb3V0ZXIgY29udGV4dCBzaG91bGRcbi8vIG5vdCBiZSB1c2VkLlxuLy8gQHBhcmFtIGxvb2sgVGhlIHJlc3VsdCBsb29rYWhlYWQgc2V0LlxuLy8gQHBhcmFtIGxvb2tCdXN5IEEgc2V0IHVzZWQgZm9yIHByZXZlbnRpbmcgZXBzaWxvbiBjbG9zdXJlcyBpbiB0aGUgQVROXG4vLyBmcm9tIGNhdXNpbmcgYSBzdGFjayBvdmVyZmxvdy4gT3V0c2lkZSBjb2RlIHNob3VsZCBwYXNzXG4vLyB7QGNvZGUgbmV3IFNldDxBVE5Db25maWc+fSBmb3IgdGhpcyBhcmd1bWVudC5cbi8vIEBwYXJhbSBjYWxsZWRSdWxlU3RhY2sgQSBzZXQgdXNlZCBmb3IgcHJldmVudGluZyBsZWZ0IHJlY3Vyc2lvbiBpbiB0aGVcbi8vIEFUTiBmcm9tIGNhdXNpbmcgYSBzdGFjayBvdmVyZmxvdy4gT3V0c2lkZSBjb2RlIHNob3VsZCBwYXNzXG4vLyB7QGNvZGUgbmV3IEJpdFNldCgpfSBmb3IgdGhpcyBhcmd1bWVudC5cbi8vIEBwYXJhbSBzZWVUaHJ1UHJlZHMge0Bjb2RlIHRydWV9IHRvIHRydWUgc2VtYW50aWMgcHJlZGljYXRlcyBhc1xuLy8gaW1wbGljaXRseSB7QGNvZGUgdHJ1ZX0gYW5kIFwic2VlIHRocm91Z2ggdGhlbVwiLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy8gdG8gdHJlYXQgc2VtYW50aWMgcHJlZGljYXRlcyBhcyBvcGFxdWUgYW5kIGFkZCB7QGxpbmsgLy9ISVRfUFJFRH0gdG8gdGhlXG4vLyByZXN1bHQgaWYgb25lIGlzIGVuY291bnRlcmVkLlxuLy8gQHBhcmFtIGFkZEVPRiBBZGQge0BsaW5rIFRva2VuLy9FT0Z9IHRvIHRoZSByZXN1bHQgaWYgdGhlIGVuZCBvZiB0aGVcbi8vIG91dGVybW9zdCBjb250ZXh0IGlzIHJlYWNoZWQuIFRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaWYge0Bjb2RlIGN0eH1cbi8vIGlzIHtAY29kZSBudWxsfS5cbi8vL1xuTEwxQW5hbHl6ZXIucHJvdG90eXBlLl9MT09LID0gZnVuY3Rpb24ocywgc3RvcFN0YXRlICwgY3R4LCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRikge1xuICAgIHZhciBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cywgYWx0OjAsIGNvbnRleHQ6IGN0eH0sIG51bGwpO1xuICAgIGlmIChsb29rQnVzeS5jb250YWlucyhjKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvb2tCdXN5LmFkZChjKTtcbiAgICBpZiAocyA9PT0gc3RvcFN0YXRlKSB7XG4gICAgICAgIGlmIChjdHggPT09bnVsbCkge1xuICAgICAgICAgICAgbG9vay5hZGRPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoY3R4LmlzRW1wdHkoKSAmJiBhZGRFT0YpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVPRik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlICkge1xuICAgICAgICBpZiAoY3R4ID09PW51bGwpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVQU0lMT04pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGN0eC5pc0VtcHR5KCkgJiYgYWRkRU9GKSB7XG4gICAgICAgICAgICBsb29rLmFkZE9uZShUb2tlbi5FT0YpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHggIT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG4gICAgICAgICAgICAvLyBydW4gdGhydSBhbGwgcG9zc2libGUgc3RhY2sgdG9wcyBpbiBjdHhcbiAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpPGN0eC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjdHguZ2V0UmV0dXJuU3RhdGUoaSldO1xuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkID0gY2FsbGVkUnVsZVN0YWNrLmNvbnRhaW5zKHJldHVyblN0YXRlLnJ1bGVJbmRleCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLnJlbW92ZShyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHJldHVyblN0YXRlLCBzdG9wU3RhdGUsIGN0eC5nZXRQYXJlbnQoaSksIGxvb2ssIGxvb2tCdXN5LCBjYWxsZWRSdWxlU3RhY2ssIHNlZVRocnVQcmVkcywgYWRkRU9GKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLmFkZChyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcih2YXIgaj0wOyBqPHMudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHQgPSBzLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICBpZiAodC5jb25zdHJ1Y3RvciA9PT0gUnVsZVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWRSdWxlU3RhY2suY29udGFpbnModC50YXJnZXQucnVsZUluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5ld0NvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUoY3R4LCB0LmZvbGxvd1N0YXRlLnN0YXRlTnVtYmVyKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLmFkZCh0LnRhcmdldC5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX0xPT0sodC50YXJnZXQsIHN0b3BTdGF0ZSwgbmV3Q29udGV4dCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjYWxsZWRSdWxlU3RhY2sucmVtb3ZlKHQudGFyZ2V0LnJ1bGVJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodCBpbnN0YW5jZW9mIEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiApIHtcbiAgICAgICAgICAgIGlmIChzZWVUaHJ1UHJlZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHQudGFyZ2V0LCBzdG9wU3RhdGUsIGN0eCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb29rLmFkZE9uZShMTDFBbmFseXplci5ISVRfUFJFRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiggdC5pc0Vwc2lsb24pIHtcbiAgICAgICAgICAgIHRoaXMuX0xPT0sodC50YXJnZXQsIHN0b3BTdGF0ZSwgY3R4LCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRik7XG4gICAgICAgIH0gZWxzZSBpZiAodC5jb25zdHJ1Y3RvciA9PT0gV2lsZGNhcmRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICBsb29rLmFkZFJhbmdlKCBUb2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFLCB0aGlzLmF0bi5tYXhUb2tlblR5cGUgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzZXQgPSB0LmxhYmVsO1xuICAgICAgICAgICAgaWYgKHNldCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgTm90U2V0VHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBzZXQgPSBzZXQuY29tcGxlbWVudChUb2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFLCB0aGlzLmF0bi5tYXhUb2tlblR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb29rLmFkZFNldChzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0cy5MTDFBbmFseXplciA9IExMMUFuYWx5emVyO1xuXG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gQSBsZXhlciBpcyByZWNvZ25pemVyIHRoYXQgZHJhd3MgaW5wdXQgc3ltYm9scyBmcm9tIGEgY2hhcmFjdGVyIHN0cmVhbS5cbi8vICBsZXhlciBncmFtbWFycyByZXN1bHQgaW4gYSBzdWJjbGFzcyBvZiB0aGlzIG9iamVjdC4gQSBMZXhlciBvYmplY3Rcbi8vICB1c2VzIHNpbXBsaWZpZWQgbWF0Y2goKSBhbmQgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcyBpbiB0aGUgaW50ZXJlc3Qgb2Ygc3BlZWQuXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSZWNvZ25pemVyID0gcmVxdWlyZSgnLi9SZWNvZ25pemVyJykuUmVjb2duaXplcjtcbnZhciBDb21tb25Ub2tlbkZhY3RvcnkgPSByZXF1aXJlKCcuL0NvbW1vblRva2VuRmFjdG9yeScpLkNvbW1vblRva2VuRmFjdG9yeTtcbnZhciBSZWNvZ25pdGlvbkV4Y2VwdGlvbiAgPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLlJlY29nbml0aW9uRXhjZXB0aW9uO1xudmFyIExleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb247XG5cbmZ1bmN0aW9uIFRva2VuU291cmNlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gTGV4ZXIoaW5wdXQpIHtcblx0UmVjb2duaXplci5jYWxsKHRoaXMpO1xuXHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHR0aGlzLl9mYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5LkRFRkFVTFQ7XG5cdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIGlucHV0IF07XG5cblx0dGhpcy5faW50ZXJwID0gbnVsbDsgLy8gY2hpbGQgY2xhc3NlcyBtdXN0IHBvcHVsYXRlIHRoaXNcblxuXHQvLyBUaGUgZ29hbCBvZiBhbGwgbGV4ZXIgcnVsZXMvbWV0aG9kcyBpcyB0byBjcmVhdGUgYSB0b2tlbiBvYmplY3QuXG5cdC8vIHRoaXMgaXMgYW4gaW5zdGFuY2UgdmFyaWFibGUgYXMgbXVsdGlwbGUgcnVsZXMgbWF5IGNvbGxhYm9yYXRlIHRvXG5cdC8vIGNyZWF0ZSBhIHNpbmdsZSB0b2tlbi4gbmV4dFRva2VuIHdpbGwgcmV0dXJuIHRoaXMgb2JqZWN0IGFmdGVyXG5cdC8vIG1hdGNoaW5nIGxleGVyIHJ1bGUocykuIElmIHlvdSBzdWJjbGFzcyB0byBhbGxvdyBtdWx0aXBsZSB0b2tlblxuXHQvLyBlbWlzc2lvbnMsIHRoZW4gc2V0IHRoaXMgdG8gdGhlIGxhc3QgdG9rZW4gdG8gYmUgbWF0Y2hlZCBvclxuXHQvLyBzb21ldGhpbmcgbm9ubnVsbCBzbyB0aGF0IHRoZSBhdXRvIHRva2VuIGVtaXQgbWVjaGFuaXNtIHdpbGwgbm90XG5cdC8vIGVtaXQgYW5vdGhlciB0b2tlbi5cblx0dGhpcy5fdG9rZW4gPSBudWxsO1xuXG5cdC8vIFdoYXQgY2hhcmFjdGVyIGluZGV4IGluIHRoZSBzdHJlYW0gZGlkIHRoZSBjdXJyZW50IHRva2VuIHN0YXJ0IGF0P1xuXHQvLyBOZWVkZWQsIGZvciBleGFtcGxlLCB0byBnZXQgdGhlIHRleHQgZm9yIGN1cnJlbnQgdG9rZW4uIFNldCBhdFxuXHQvLyB0aGUgc3RhcnQgb2YgbmV4dFRva2VuLlxuXHR0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4ID0gLTE7XG5cblx0Ly8gVGhlIGxpbmUgb24gd2hpY2ggdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdG9rZW4gcmVzaWRlcy8vL1xuXHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IC0xO1xuXG5cdC8vIFRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gb2YgZmlyc3QgY2hhcmFjdGVyIHdpdGhpbiB0aGUgbGluZS8vL1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cblx0Ly8gT25jZSB3ZSBzZWUgRU9GIG9uIGNoYXIgc3RyZWFtLCBuZXh0IHRva2VuIHdpbGwgYmUgRU9GLlxuXHQvLyBJZiB5b3UgaGF2ZSBET05FIDogRU9GIDsgdGhlbiB5b3Ugc2VlIERPTkUgRU9GLlxuXHR0aGlzLl9oaXRFT0YgPSBmYWxzZTtcblxuXHQvLyBUaGUgY2hhbm5lbCBudW1iZXIgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX2NoYW5uZWwgPSBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cblx0Ly8gVGhlIHRva2VuIHR5cGUgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX3R5cGUgPSBUb2tlbi5JTlZBTElEX1RZUEU7XG5cblx0dGhpcy5fbW9kZVN0YWNrID0gW107XG5cdHRoaXMuX21vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cblx0Ly8gWW91IGNhbiBzZXQgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHRva2VuIHRvIG92ZXJyaWRlIHdoYXQgaXMgaW5cblx0Ly8gdGhlIGlucHV0IGNoYXIgYnVmZmVyLiBVc2Ugc2V0VGV4dCgpIG9yIGNhbiBzZXQgdGhpcyBpbnN0YW5jZSB2YXIuXG5cdC8vIC9cblx0dGhpcy5fdGV4dCA9IG51bGw7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVjb2duaXplci5wcm90b3R5cGUpO1xuTGV4ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXI7XG5cbkxleGVyLkRFRkFVTFRfTU9ERSA9IDA7XG5MZXhlci5NT1JFID0gLTI7XG5MZXhlci5TS0lQID0gLTM7XG5cbkxleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcbkxleGVyLkhJRERFTiA9IFRva2VuLkhJRERFTl9DSEFOTkVMO1xuTGV4ZXIuTUlOX0NIQVJfVkFMVUUgPSAweDAwMDA7XG5MZXhlci5NQVhfQ0hBUl9WQUxVRSA9IDB4MTBGRkZGO1xuXG5MZXhlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0Ly8gd2FjayBMZXhlciBzdGF0ZSB2YXJpYWJsZXNcblx0aWYgKHRoaXMuX2lucHV0ICE9PSBudWxsKSB7XG5cdFx0dGhpcy5faW5wdXQuc2VlaygwKTsgLy8gcmV3aW5kIHRoZSBpbnB1dFxuXHR9XG5cdHRoaXMuX3Rva2VuID0gbnVsbDtcblx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0dGhpcy5fY2hhbm5lbCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcblx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IC0xO1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cdHRoaXMuX3Rva2VuU3RhcnRMaW5lID0gLTE7XG5cdHRoaXMuX3RleHQgPSBudWxsO1xuXG5cdHRoaXMuX2hpdEVPRiA9IGZhbHNlO1xuXHR0aGlzLl9tb2RlID0gTGV4ZXIuREVGQVVMVF9NT0RFO1xuXHR0aGlzLl9tb2RlU3RhY2sgPSBbXTtcblxuXHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcbn07XG5cbi8vIFJldHVybiBhIHRva2VuIGZyb20gdGhpcyBzb3VyY2U7IGkuZS4sIG1hdGNoIGEgdG9rZW4gb24gdGhlIGNoYXIgc3RyZWFtLlxuTGV4ZXIucHJvdG90eXBlLm5leHRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcIm5leHRUb2tlbiByZXF1aXJlcyBhIG5vbi1udWxsIGlucHV0IHN0cmVhbS5cIjtcblx0fVxuXG5cdC8vIE1hcmsgc3RhcnQgbG9jYXRpb24gaW4gY2hhciBzdHJlYW0gc28gdW5idWZmZXJlZCBzdHJlYW1zIGFyZVxuXHQvLyBndWFyYW50ZWVkIGF0IGxlYXN0IGhhdmUgdGV4dCBvZiBjdXJyZW50IHRva2VuXG5cdHZhciB0b2tlblN0YXJ0TWFya2VyID0gdGhpcy5faW5wdXQubWFyaygpO1xuXHR0cnkge1xuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAodGhpcy5faGl0RU9GKSB7XG5cdFx0XHRcdHRoaXMuZW1pdEVPRigpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fdG9rZW47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl90b2tlbiA9IG51bGw7XG5cdFx0XHR0aGlzLl9jaGFubmVsID0gVG9rZW4uREVGQVVMVF9DSEFOTkVMO1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENvbHVtbiA9IHRoaXMuX2ludGVycC5jb2x1bW47XG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IHRoaXMuX2ludGVycC5saW5lO1xuXHRcdFx0dGhpcy5fdGV4dCA9IG51bGw7XG5cdFx0XHR2YXIgY29udGludWVPdXRlciA9IGZhbHNlO1xuXHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0XHRcdFx0dmFyIHR0eXBlID0gTGV4ZXIuU0tJUDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0dHlwZSA9IHRoaXMuX2ludGVycC5tYXRjaCh0aGlzLl9pbnB1dCwgdGhpcy5fbW9kZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ICAgIGlmKGUgaW5zdGFuY2VvZiBSZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoZSk7IC8vIHJlcG9ydCBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvdmVyKGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX2lucHV0LkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0XHR0aGlzLl9oaXRFT0YgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl90eXBlID09PSBUb2tlbi5JTlZBTElEX1RZUEUpIHtcblx0XHRcdFx0XHR0aGlzLl90eXBlID0gdHR5cGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3R5cGUgPT09IExleGVyLlNLSVApIHtcblx0XHRcdFx0XHRjb250aW51ZU91dGVyID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fdHlwZSAhPT0gTGV4ZXIuTU9SRSkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29udGludWVPdXRlcikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLl90b2tlbiA9PT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLmVtaXQoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLl90b2tlbjtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0Ly8gbWFrZSBzdXJlIHdlIHJlbGVhc2UgbWFya2VyIGFmdGVyIG1hdGNoIG9yXG5cdFx0Ly8gdW5idWZmZXJlZCBjaGFyIHN0cmVhbSB3aWxsIGtlZXAgYnVmZmVyaW5nXG5cdFx0dGhpcy5faW5wdXQucmVsZWFzZSh0b2tlblN0YXJ0TWFya2VyKTtcblx0fVxufTtcblxuLy8gSW5zdHJ1Y3QgdGhlIGxleGVyIHRvIHNraXAgY3JlYXRpbmcgYSB0b2tlbiBmb3IgY3VycmVudCBsZXhlciBydWxlXG4vLyBhbmQgbG9vayBmb3IgYW5vdGhlciB0b2tlbi4gbmV4dFRva2VuKCkga25vd3MgdG8ga2VlcCBsb29raW5nIHdoZW5cbi8vIGEgbGV4ZXIgcnVsZSBmaW5pc2hlcyB3aXRoIHRva2VuIHNldCB0byBTS0lQX1RPS0VOLiBSZWNhbGwgdGhhdFxuLy8gaWYgdG9rZW49PW51bGwgYXQgZW5kIG9mIGFueSB0b2tlbiBydWxlLCBpdCBjcmVhdGVzIG9uZSBmb3IgeW91XG4vLyBhbmQgZW1pdHMgaXQuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLl90eXBlID0gTGV4ZXIuU0tJUDtcbn07XG5cbkxleGVyLnByb3RvdHlwZS5tb3JlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX3R5cGUgPSBMZXhlci5NT1JFO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLm1vZGUgPSBmdW5jdGlvbihtKSB7XG5cdHRoaXMuX21vZGUgPSBtO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLnB1c2hNb2RlID0gZnVuY3Rpb24obSkge1xuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwdXNoTW9kZSBcIiArIG0pO1xuXHR9XG5cdHRoaXMuX21vZGVTdGFjay5wdXNoKHRoaXMuX21vZGUpO1xuXHR0aGlzLm1vZGUobSk7XG59O1xuXG5MZXhlci5wcm90b3R5cGUucG9wTW9kZSA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fbW9kZVN0YWNrLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IFwiRW1wdHkgU3RhY2tcIjtcblx0fVxuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwb3BNb2RlIGJhY2sgdG8gXCIgKyB0aGlzLl9tb2RlU3RhY2suc2xpY2UoMCwgLTEpKTtcblx0fVxuXHR0aGlzLm1vZGUodGhpcy5fbW9kZVN0YWNrLnBvcCgpKTtcblx0cmV0dXJuIHRoaXMuX21vZGU7XG59O1xuXG4vLyBTZXQgdGhlIGNoYXIgc3RyZWFtIGFuZCByZXNldCB0aGUgbGV4ZXJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwiaW5wdXRTdHJlYW1cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5wdXQ7XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHRcdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIHRoaXMuX2lucHV0IF07XG5cdFx0dGhpcy5yZXNldCgpO1xuXHRcdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cdFx0dGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciA9IFsgdGhpcywgdGhpcy5faW5wdXQgXTtcblx0fVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwic291cmNlTmFtZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uIHNvdXJjZU5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG5cdH1cbn0pO1xuXG4vLyBCeSBkZWZhdWx0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgZW1pdHMgcGVyIG5leHRUb2tlbiBpbnZvY2F0aW9uXG4vLyBmb3IgZWZmaWNpZW5jeSByZWFzb25zLiBTdWJjbGFzcyBhbmQgb3ZlcnJpZGUgdGhpcyBtZXRob2QsIG5leHRUb2tlbixcbi8vIGFuZCBnZXRUb2tlbiAodG8gcHVzaCB0b2tlbnMgaW50byBhIGxpc3QgYW5kIHB1bGwgZnJvbSB0aGF0IGxpc3Rcbi8vIHJhdGhlciB0aGFuIGEgc2luZ2xlIHZhcmlhYmxlIGFzIHRoaXMgaW1wbGVtZW50YXRpb24gZG9lcykuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuZW1pdFRva2VuID0gZnVuY3Rpb24odG9rZW4pIHtcblx0dGhpcy5fdG9rZW4gPSB0b2tlbjtcbn07XG5cbi8vIFRoZSBzdGFuZGFyZCBtZXRob2QgY2FsbGVkIHRvIGF1dG9tYXRpY2FsbHkgZW1pdCBhIHRva2VuIGF0IHRoZVxuLy8gb3V0ZXJtb3N0IGxleGljYWwgcnVsZS4gVGhlIHRva2VuIG9iamVjdCBzaG91bGQgcG9pbnQgaW50byB0aGVcbi8vIGNoYXIgYnVmZmVyIHN0YXJ0Li5zdG9wLiBJZiB0aGVyZSBpcyBhIHRleHQgb3ZlcnJpZGUgaW4gJ3RleHQnLFxuLy8gdXNlIHRoYXQgdG8gc2V0IHRoZSB0b2tlbidzIHRleHQuIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGVtaXRcbi8vIGN1c3RvbSBUb2tlbiBvYmplY3RzIG9yIHByb3ZpZGUgYSBuZXcgZmFjdG9yeS5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gdGhpcy5fZmFjdG9yeS5jcmVhdGUodGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciwgdGhpcy5fdHlwZSxcblx0XHRcdHRoaXMuX3RleHQsIHRoaXMuX2NoYW5uZWwsIHRoaXMuX3Rva2VuU3RhcnRDaGFySW5kZXgsIHRoaXNcblx0XHRcdFx0XHQuZ2V0Q2hhckluZGV4KCkgLSAxLCB0aGlzLl90b2tlblN0YXJ0TGluZSxcblx0XHRcdHRoaXMuX3Rva2VuU3RhcnRDb2x1bW4pO1xuXHR0aGlzLmVtaXRUb2tlbih0KTtcblx0cmV0dXJuIHQ7XG59O1xuXG5MZXhlci5wcm90b3R5cGUuZW1pdEVPRiA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgY3BvcyA9IHRoaXMuY29sdW1uO1xuXHR2YXIgbHBvcyA9IHRoaXMubGluZTtcblx0dmFyIGVvZiA9IHRoaXMuX2ZhY3RvcnkuY3JlYXRlKHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIsIFRva2VuLkVPRixcblx0XHRcdG51bGwsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCwgdGhpcy5faW5wdXQuaW5kZXgsXG5cdFx0XHR0aGlzLl9pbnB1dC5pbmRleCAtIDEsIGxwb3MsIGNwb3MpO1xuXHR0aGlzLmVtaXRUb2tlbihlb2YpO1xuXHRyZXR1cm4gZW9mO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudHlwZTtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24odHlwZSkge1xuXHRcdHRoaXMuX3R5cGUgPSB0eXBlO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJsaW5lXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludGVycC5saW5lO1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbihsaW5lKSB7XG5cdFx0dGhpcy5faW50ZXJwLmxpbmUgPSBsaW5lO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJjb2x1bW5cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmNvbHVtbjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oY29sdW1uKSB7XG5cdFx0dGhpcy5faW50ZXJwLmNvbHVtbiA9IGNvbHVtbjtcblx0fVxufSk7XG5cblxuLy8gV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIG9mIGxvb2thaGVhZD8vLy9cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFySW5kZXggPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LmluZGV4O1xufTtcblxuLy8gUmV0dXJuIHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbiBvciBhbnkgdGV4dCBvdmVycmlkZS5cbi8vU2V0IHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoaXMgdG9rZW47IGl0IHdpcGVzIGFueSBwcmV2aW91cyBjaGFuZ2VzIHRvIHRoZSB0ZXh0LlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmdldFRleHQodGhpcy5faW5wdXQpO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIFRva2VuIG9iamVjdHMgaW4gaW5wdXQgY2hhciBzdHJlYW0uXG4vLyBGb3JjZXMgbG9hZCBvZiBhbGwgdG9rZW5zLiBEb2VzIG5vdCBpbmNsdWRlIEVPRiB0b2tlbi5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5nZXRBbGxUb2tlbnMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRva2VucyA9IFtdO1xuXHR2YXIgdCA9IHRoaXMubmV4dFRva2VuKCk7XG5cdHdoaWxlICh0LnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRva2Vucy5wdXNoKHQpO1xuXHRcdHQgPSB0aGlzLm5leHRUb2tlbigpO1xuXHR9XG5cdHJldHVybiB0b2tlbnM7XG59O1xuXG5MZXhlci5wcm90b3R5cGUubm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24oZSkge1xuXHR2YXIgc3RhcnQgPSB0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4O1xuXHR2YXIgc3RvcCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHR2YXIgdGV4dCA9IHRoaXMuX2lucHV0LmdldFRleHQoc3RhcnQsIHN0b3ApO1xuXHR2YXIgbXNnID0gXCJ0b2tlbiByZWNvZ25pdGlvbiBlcnJvciBhdDogJ1wiICsgdGhpcy5nZXRFcnJvckRpc3BsYXkodGV4dCkgKyBcIidcIjtcblx0dmFyIGxpc3RlbmVyID0gdGhpcy5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKTtcblx0bGlzdGVuZXIuc3ludGF4RXJyb3IodGhpcywgbnVsbCwgdGhpcy5fdG9rZW5TdGFydExpbmUsXG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uLCBtc2csIGUpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHMpIHtcblx0dmFyIGQgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZC5wdXNoKHNbaV0pO1xuXHR9XG5cdHJldHVybiBkLmpvaW4oJycpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheUZvckNoYXIgPSBmdW5jdGlvbihjKSB7XG5cdGlmIChjLmNoYXJDb2RlQXQoMCkgPT09IFRva2VuLkVPRikge1xuXHRcdHJldHVybiBcIjxFT0Y+XCI7XG5cdH0gZWxzZSBpZiAoYyA9PT0gJ1xcbicpIHtcblx0XHRyZXR1cm4gXCJcXFxcblwiO1xuXHR9IGVsc2UgaWYgKGMgPT09ICdcXHQnKSB7XG5cdFx0cmV0dXJuIFwiXFxcXHRcIjtcblx0fSBlbHNlIGlmIChjID09PSAnXFxyJykge1xuXHRcdHJldHVybiBcIlxcXFxyXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGM7XG5cdH1cbn07XG5cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFyRXJyb3JEaXNwbGF5ID0gZnVuY3Rpb24oYykge1xuXHRyZXR1cm4gXCInXCIgKyB0aGlzLmdldEVycm9yRGlzcGxheUZvckNoYXIoYykgKyBcIidcIjtcbn07XG5cbi8vIExleGVycyBjYW4gbm9ybWFsbHkgbWF0Y2ggYW55IGNoYXIgaW4gaXQncyB2b2NhYnVsYXJ5IGFmdGVyIG1hdGNoaW5nXG4vLyBhIHRva2VuLCBzbyBkbyB0aGUgZWFzeSB0aGluZyBhbmQganVzdCBraWxsIGEgY2hhcmFjdGVyIGFuZCBob3BlXG4vLyBpdCBhbGwgd29ya3Mgb3V0LiBZb3UgY2FuIGluc3RlYWQgdXNlIHRoZSBydWxlIGludm9jYXRpb24gc3RhY2tcbi8vIHRvIGRvIHNvcGhpc3RpY2F0ZWQgZXJyb3IgcmVjb3ZlcnkgaWYgeW91IGFyZSBpbiBhIGZyYWdtZW50IHJ1bGUuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlKSB7XG5cdGlmICh0aGlzLl9pbnB1dC5MQSgxKSAhPT0gVG9rZW4uRU9GKSB7XG5cdFx0aWYgKHJlIGluc3RhbmNlb2YgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbikge1xuXHRcdFx0Ly8gc2tpcCBhIGNoYXIgYW5kIHRyeSBhZ2FpblxuXHRcdFx0dGhpcy5faW50ZXJwLmNvbnN1bWUodGhpcy5faW5wdXQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUT0RPOiBEbyB3ZSBsb3NlIGNoYXJhY3RlciBvciBsaW5lIHBvc2l0aW9uIGluZm9ybWF0aW9uP1xuXHRcdFx0dGhpcy5faW5wdXQuY29uc3VtZSgpO1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0cy5MZXhlciA9IExleGVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgUGFyc2VUcmVlTGlzdGVuZXIgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlBhcnNlVHJlZUxpc3RlbmVyO1xudmFyIFJlY29nbml6ZXIgPSByZXF1aXJlKCcuL1JlY29nbml6ZXInKS5SZWNvZ25pemVyO1xudmFyIERlZmF1bHRFcnJvclN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9lcnJvci9FcnJvclN0cmF0ZWd5JykuRGVmYXVsdEVycm9yU3RyYXRlZ3k7XG52YXIgQVRORGVzZXJpYWxpemVyID0gcmVxdWlyZSgnLi9hdG4vQVRORGVzZXJpYWxpemVyJykuQVRORGVzZXJpYWxpemVyO1xudmFyIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMgPSByZXF1aXJlKCcuL2F0bi9BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zJykuQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbnZhciBUZXJtaW5hbE5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlRlcm1pbmFsTm9kZTtcbnZhciBFcnJvck5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLkVycm9yTm9kZTtcblxuZnVuY3Rpb24gVHJhY2VMaXN0ZW5lcihwYXJzZXIpIHtcblx0UGFyc2VUcmVlTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRyYWNlTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUpO1xuVHJhY2VMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFjZUxpc3RlbmVyO1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKGN0eCkge1xuXHRjb25zb2xlLmxvZyhcImVudGVyICAgXCIgKyB0aGlzLnBhcnNlci5ydWxlTmFtZXNbY3R4LnJ1bGVJbmRleF0gKyBcIiwgTFQoMSk9XCIgKyB0aGlzLnBhcnNlci5faW5wdXQuTFQoMSkudGV4dCk7XG59O1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24oIG5vZGUpIHtcblx0Y29uc29sZS5sb2coXCJjb25zdW1lIFwiICsgbm9kZS5zeW1ib2wgKyBcIiBydWxlIFwiICsgdGhpcy5wYXJzZXIucnVsZU5hbWVzW3RoaXMucGFyc2VyLl9jdHgucnVsZUluZGV4XSk7XG59O1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXZlcnlSdWxlID0gZnVuY3Rpb24oY3R4KSB7XG5cdGNvbnNvbGUubG9nKFwiZXhpdCAgICBcIiArIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1tjdHgucnVsZUluZGV4XSArIFwiLCBMVCgxKT1cIiArIHRoaXMucGFyc2VyLl9pbnB1dC5MVCgxKS50ZXh0KTtcbn07XG5cbi8vIHRoaXMgaXMgYWxsIHRoZSBwYXJzaW5nIHN1cHBvcnQgY29kZSBlc3NlbnRpYWxseTsgbW9zdCBvZiBpdCBpcyBlcnJvclxuLy8gcmVjb3Zlcnkgc3R1ZmYuLy9cbmZ1bmN0aW9uIFBhcnNlcihpbnB1dCkge1xuXHRSZWNvZ25pemVyLmNhbGwodGhpcyk7XG5cdC8vIFRoZSBpbnB1dCBzdHJlYW0uXG5cdHRoaXMuX2lucHV0ID0gbnVsbDtcblx0Ly8gVGhlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5IGZvciB0aGUgcGFyc2VyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhIG5ld1xuXHQvLyBpbnN0YW5jZSBvZiB7QGxpbmsgRGVmYXVsdEVycm9yU3RyYXRlZ3l9LlxuXHR0aGlzLl9lcnJIYW5kbGVyID0gbmV3IERlZmF1bHRFcnJvclN0cmF0ZWd5KCk7XG5cdHRoaXMuX3ByZWNlZGVuY2VTdGFjayA9IFtdO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sucHVzaCgwKTtcblx0Ly8gVGhlIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dH0gb2JqZWN0IGZvciB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBydWxlLlxuXHQvLyB0aGlzIGlzIGFsd2F5cyBub24tbnVsbCBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy5cblx0dGhpcy5fY3R4ID0gbnVsbDtcblx0Ly8gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBwYXJzZXIgc2hvdWxkIGNvbnN0cnVjdCBhIHBhcnNlIHRyZWUgZHVyaW5nXG5cdC8vIHRoZSBwYXJzaW5nIHByb2Nlc3MuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHtAY29kZSB0cnVlfS5cblx0dGhpcy5idWlsZFBhcnNlVHJlZXMgPSB0cnVlO1xuXHQvLyBXaGVuIHtAbGluayAvL3NldFRyYWNlfXtAY29kZSAodHJ1ZSl9IGlzIGNhbGxlZCwgYSByZWZlcmVuY2UgdG8gdGhlXG5cdC8vIHtAbGluayBUcmFjZUxpc3RlbmVyfSBpcyBzdG9yZWQgaGVyZSBzbyBpdCBjYW4gYmUgZWFzaWx5IHJlbW92ZWQgaW4gYVxuXHQvLyBsYXRlciBjYWxsIHRvIHtAbGluayAvL3NldFRyYWNlfXtAY29kZSAoZmFsc2UpfS4gVGhlIGxpc3RlbmVyIGl0c2VsZiBpc1xuXHQvLyBpbXBsZW1lbnRlZCBhcyBhIHBhcnNlciBsaXN0ZW5lciBzbyB0aGlzIGZpZWxkIGlzIG5vdCBkaXJlY3RseSB1c2VkIGJ5XG5cdC8vIG90aGVyIHBhcnNlciBtZXRob2RzLlxuXHR0aGlzLl90cmFjZXIgPSBudWxsO1xuXHQvLyBUaGUgbGlzdCBvZiB7QGxpbmsgUGFyc2VUcmVlTGlzdGVuZXJ9IGxpc3RlbmVycyByZWdpc3RlcmVkIHRvIHJlY2VpdmVcblx0Ly8gZXZlbnRzIGR1cmluZyB0aGUgcGFyc2UuXG5cdHRoaXMuX3BhcnNlTGlzdGVuZXJzID0gbnVsbDtcblx0Ly8gVGhlIG51bWJlciBvZiBzeW50YXggZXJyb3JzIHJlcG9ydGVkIGR1cmluZyBwYXJzaW5nLiB0aGlzIHZhbHVlIGlzXG5cdC8vIGluY3JlbWVudGVkIGVhY2ggdGltZSB7QGxpbmsgLy9ub3RpZnlFcnJvckxpc3RlbmVyc30gaXMgY2FsbGVkLlxuXHR0aGlzLl9zeW50YXhFcnJvcnMgPSAwO1xuXHR0aGlzLnNldElucHV0U3RyZWFtKGlucHV0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml6ZXIucHJvdG90eXBlKTtcblBhcnNlci5wcm90b3R5cGUuY29udHJ1Y3RvciA9IFBhcnNlcjtcblxuLy8gdGhpcyBmaWVsZCBtYXBzIGZyb20gdGhlIHNlcmlhbGl6ZWQgQVROIHN0cmluZyB0byB0aGUgZGVzZXJpYWxpemVkIHtAbGlua1xuLy8gQVROfSB3aXRoXG4vLyBieXBhc3MgYWx0ZXJuYXRpdmVzLlxuLy9cbi8vIEBzZWUgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy8vaXNHZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucygpXG4vL1xuUGFyc2VyLmJ5cGFzc0FsdHNBdG5DYWNoZSA9IHt9O1xuXG4vLyByZXNldCB0aGUgcGFyc2VyJ3Mgc3RhdGUvL1xuUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgIT09IG51bGwpIHtcblx0XHR0aGlzLl9pbnB1dC5zZWVrKDApO1xuXHR9XG5cdHRoaXMuX2VyckhhbmRsZXIucmVzZXQodGhpcyk7XG5cdHRoaXMuX2N0eCA9IG51bGw7XG5cdHRoaXMuX3N5bnRheEVycm9ycyA9IDA7XG5cdHRoaXMuc2V0VHJhY2UoZmFsc2UpO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sgPSBbXTtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnB1c2goMCk7XG5cdGlmICh0aGlzLl9pbnRlcnAgIT09IG51bGwpIHtcblx0XHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcblx0fVxufTtcblxuLy8gTWF0Y2ggY3VycmVudCBpbnB1dCBzeW1ib2wgYWdhaW5zdCB7QGNvZGUgdHR5cGV9LiBJZiB0aGUgc3ltYm9sIHR5cGVcbi8vIG1hdGNoZXMsIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlcG9ydE1hdGNofSBhbmQge0BsaW5rIC8vY29uc3VtZX0gYXJlXG4vLyBjYWxsZWQgdG8gY29tcGxldGUgdGhlIG1hdGNoIHByb2Nlc3MuXG4vL1xuLy8gPHA+SWYgdGhlIHN5bWJvbCB0eXBlIGRvZXMgbm90IG1hdGNoLFxuLy8ge0BsaW5rIEFOVExSRXJyb3JTdHJhdGVneS8vcmVjb3ZlcklubGluZX0gaXMgY2FsbGVkIG9uIHRoZSBjdXJyZW50IGVycm9yXG4vLyBzdHJhdGVneSB0byBhdHRlbXB0IHJlY292ZXJ5LiBJZiB7QGxpbmsgLy9nZXRCdWlsZFBhcnNlVHJlZX0gaXNcbi8vIHtAY29kZSB0cnVlfSBhbmQgdGhlIHRva2VuIGluZGV4IG9mIHRoZSBzeW1ib2wgcmV0dXJuZWQgYnlcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIC0xLCB0aGUgc3ltYm9sIGlzIGFkZGVkIHRvXG4vLyB0aGUgcGFyc2UgdHJlZSBieSBjYWxsaW5nIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vYWRkRXJyb3JOb2RlfS48L3A+XG4vL1xuLy8gQHBhcmFtIHR0eXBlIHRoZSB0b2tlbiB0eXBlIHRvIG1hdGNoXG4vLyBAcmV0dXJuIHRoZSBtYXRjaGVkIHN5bWJvbFxuLy8gQHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBpbnB1dCBzeW1ib2wgZGlkIG5vdCBtYXRjaFxuLy8ge0Bjb2RlIHR0eXBlfSBhbmQgdGhlIGVycm9yIHN0cmF0ZWd5IGNvdWxkIG5vdCByZWNvdmVyIGZyb20gdGhlXG4vLyBtaXNtYXRjaGVkIHN5bWJvbFxuXG5QYXJzZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24odHR5cGUpIHtcblx0dmFyIHQgPSB0aGlzLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpZiAodC50eXBlID09PSB0dHlwZSkge1xuXHRcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG5cdFx0dGhpcy5jb25zdW1lKCk7XG5cdH0gZWxzZSB7XG5cdFx0dCA9IHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcblx0XHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMgJiYgdC50b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Ly8gd2UgbXVzdCBoYXZlIGNvbmp1cmVkIHVwIGEgbmV3IHRva2VuIGR1cmluZyBzaW5nbGUgdG9rZW5cblx0XHRcdC8vIGluc2VydGlvblxuXHRcdFx0Ly8gaWYgaXQncyBub3QgdGhlIGN1cnJlbnQgc3ltYm9sXG5cdFx0XHR0aGlzLl9jdHguYWRkRXJyb3JOb2RlKHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdDtcbn07XG4vLyBNYXRjaCBjdXJyZW50IGlucHV0IHN5bWJvbCBhcyBhIHdpbGRjYXJkLiBJZiB0aGUgc3ltYm9sIHR5cGUgbWF0Y2hlc1xuLy8gKGkuZS4gaGFzIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDApLCB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZXBvcnRNYXRjaH1cbi8vIGFuZCB7QGxpbmsgLy9jb25zdW1lfSBhcmUgY2FsbGVkIHRvIGNvbXBsZXRlIHRoZSBtYXRjaCBwcm9jZXNzLlxuLy9cbi8vIDxwPklmIHRoZSBzeW1ib2wgdHlwZSBkb2VzIG5vdCBtYXRjaCxcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIGNhbGxlZCBvbiB0aGUgY3VycmVudCBlcnJvclxuLy8gc3RyYXRlZ3kgdG8gYXR0ZW1wdCByZWNvdmVyeS4gSWYge0BsaW5rIC8vZ2V0QnVpbGRQYXJzZVRyZWV9IGlzXG4vLyB7QGNvZGUgdHJ1ZX0gYW5kIHRoZSB0b2tlbiBpbmRleCBvZiB0aGUgc3ltYm9sIHJldHVybmVkIGJ5XG4vLyB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZWNvdmVySW5saW5lfSBpcyAtMSwgdGhlIHN5bWJvbCBpcyBhZGRlZCB0b1xuLy8gdGhlIHBhcnNlIHRyZWUgYnkgY2FsbGluZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZEVycm9yTm9kZX0uPC9wPlxuLy9cbi8vIEByZXR1cm4gdGhlIG1hdGNoZWQgc3ltYm9sXG4vLyBAdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIGlmIHRoZSBjdXJyZW50IGlucHV0IHN5bWJvbCBkaWQgbm90IG1hdGNoXG4vLyBhIHdpbGRjYXJkIGFuZCB0aGUgZXJyb3Igc3RyYXRlZ3kgY291bGQgbm90IHJlY292ZXIgZnJvbSB0aGUgbWlzbWF0Y2hlZFxuLy8gc3ltYm9sXG5cblBhcnNlci5wcm90b3R5cGUubWF0Y2hXaWxkY2FyZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdCA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlmICh0LnR5cGUgPiAwKSB7XG5cdFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcblx0XHR0aGlzLmNvbnN1bWUoKTtcblx0fSBlbHNlIHtcblx0XHR0ID0gdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuXHRcdGlmICh0aGlzLl9idWlsZFBhcnNlVHJlZXMgJiYgdC50b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Ly8gd2UgbXVzdCBoYXZlIGNvbmp1cmVkIHVwIGEgbmV3IHRva2VuIGR1cmluZyBzaW5nbGUgdG9rZW5cblx0XHRcdC8vIGluc2VydGlvblxuXHRcdFx0Ly8gaWYgaXQncyBub3QgdGhlIGN1cnJlbnQgc3ltYm9sXG5cdFx0XHR0aGlzLl9jdHguYWRkRXJyb3JOb2RlKHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuZ2V0UGFyc2VMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX3BhcnNlTGlzdGVuZXJzIHx8IFtdO1xufTtcblxuLy8gUmVnaXN0ZXJzIHtAY29kZSBsaXN0ZW5lcn0gdG8gcmVjZWl2ZSBldmVudHMgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuXG4vL1xuLy8gPHA+VG8gc3VwcG9ydCBvdXRwdXQtcHJlc2VydmluZyBncmFtbWFyIHRyYW5zZm9ybWF0aW9ucyAoaW5jbHVkaW5nIGJ1dCBub3Rcbi8vIGxpbWl0ZWQgdG8gbGVmdC1yZWN1cnNpb24gcmVtb3ZhbCwgYXV0b21hdGVkIGxlZnQtZmFjdG9yaW5nLCBhbmRcbi8vIG9wdGltaXplZCBjb2RlIGdlbmVyYXRpb24pLCBjYWxscyB0byBsaXN0ZW5lciBtZXRob2RzIGR1cmluZyB0aGUgcGFyc2Vcbi8vIG1heSBkaWZmZXIgc3Vic3RhbnRpYWxseSBmcm9tIGNhbGxzIG1hZGUgYnlcbi8vIHtAbGluayBQYXJzZVRyZWVXYWxrZXIvL0RFRkFVTFR9IHVzZWQgYWZ0ZXIgdGhlIHBhcnNlIGlzIGNvbXBsZXRlLiBJblxuLy8gcGFydGljdWxhciwgcnVsZSBlbnRyeSBhbmQgZXhpdCBldmVudHMgbWF5IG9jY3VyIGluIGEgZGlmZmVyZW50IG9yZGVyXG4vLyBkdXJpbmcgdGhlIHBhcnNlIHRoYW4gYWZ0ZXIgdGhlIHBhcnNlci4gSW4gYWRkaXRpb24sIGNhbGxzIHRvIGNlcnRhaW5cbi8vIHJ1bGUgZW50cnkgbWV0aG9kcyBtYXkgYmUgb21pdHRlZC48L3A+XG4vL1xuLy8gPHA+V2l0aCB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGV4Y2VwdGlvbnMsIGNhbGxzIHRvIGxpc3RlbmVyIGV2ZW50cyBhcmVcbi8vIDxlbT5kZXRlcm1pbmlzdGljPC9lbT4sIGkuZS4gZm9yIGlkZW50aWNhbCBpbnB1dCB0aGUgY2FsbHMgdG8gbGlzdGVuZXJcbi8vIG1ldGhvZHMgd2lsbCBiZSB0aGUgc2FtZS48L3A+XG4vL1xuLy8gPHVsPlxuLy8gPGxpPkFsdGVyYXRpb25zIHRvIHRoZSBncmFtbWFyIHVzZWQgdG8gZ2VuZXJhdGUgY29kZSBtYXkgY2hhbmdlIHRoZVxuLy8gYmVoYXZpb3Igb2YgdGhlIGxpc3RlbmVyIGNhbGxzLjwvbGk+XG4vLyA8bGk+QWx0ZXJhdGlvbnMgdG8gdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHBhc3NlZCB0byBBTlRMUiA0IHdoZW5cbi8vIGdlbmVyYXRpbmcgdGhlIHBhcnNlciBtYXkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgbGlzdGVuZXIgY2FsbHMuPC9saT5cbi8vIDxsaT5DaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgQU5UTFIgVG9vbCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwYXJzZXJcbi8vIG1heSBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBsaXN0ZW5lciBjYWxscy48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIGFkZFxuLy9cbi8vIEB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYge0Bjb2RlfSBsaXN0ZW5lciBpcyB7QGNvZGUgbnVsbH1cbi8vXG5QYXJzZXIucHJvdG90eXBlLmFkZFBhcnNlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRpZiAobGlzdGVuZXIgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcImxpc3RlbmVyXCI7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzID09PSBudWxsKSB7XG5cdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBbXTtcblx0fVxuXHR0aGlzLl9wYXJzZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbn07XG5cbi8vXG4vLyBSZW1vdmUge0Bjb2RlIGxpc3RlbmVyfSBmcm9tIHRoZSBsaXN0IG9mIHBhcnNlIGxpc3RlbmVycy5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgbGlzdGVuZXJ9IGlzIHtAY29kZSBudWxsfSBvciBoYXMgbm90IGJlZW4gYWRkZWQgYXMgYSBwYXJzZVxuLy8gbGlzdGVuZXIsIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy48L3A+XG4vLyBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIHJlbW92ZVxuLy9cblBhcnNlci5wcm90b3R5cGUucmVtb3ZlUGFyc2VMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuXHRcdHZhciBpZHggPSB0aGlzLl9wYXJzZUxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblx0XHRpZiAoaWR4ID49IDApIHtcblx0XHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLl9wYXJzZUxpc3RlbmVycyA9IG51bGw7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBSZW1vdmUgYWxsIHBhcnNlIGxpc3RlbmVycy5cblBhcnNlci5wcm90b3R5cGUucmVtb3ZlUGFyc2VMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBudWxsO1xufTtcblxuLy8gTm90aWZ5IGFueSBwYXJzZSBsaXN0ZW5lcnMgb2YgYW4gZW50ZXIgcnVsZSBldmVudC5cblBhcnNlci5wcm90b3R5cGUudHJpZ2dlckVudGVyUnVsZUV2ZW50ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0bGlzdGVuZXIuZW50ZXJFdmVyeVJ1bGUoY3R4KTtcblx0XHRcdGN0eC5lbnRlclJ1bGUobGlzdGVuZXIpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG4vL1xuLy8gTm90aWZ5IGFueSBwYXJzZSBsaXN0ZW5lcnMgb2YgYW4gZXhpdCBydWxlIGV2ZW50LlxuLy9cbi8vIEBzZWUgLy9hZGRQYXJzZUxpc3RlbmVyXG4vL1xuUGFyc2VyLnByb3RvdHlwZS50cmlnZ2VyRXhpdFJ1bGVFdmVudCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHQvLyByZXZlcnNlIG9yZGVyIHdhbGsgb2YgbGlzdGVuZXJzXG4gICAgICAgIHZhciBjdHggPSB0aGlzLl9jdHg7XG5cdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMuc2xpY2UoMCkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0Y3R4LmV4aXRSdWxlKGxpc3RlbmVyKTtcblx0XHRcdGxpc3RlbmVyLmV4aXRFdmVyeVJ1bGUoY3R4KTtcblx0XHR9KTtcblx0fVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRUb2tlbkZhY3RvcnkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LnRva2VuU291cmNlLl9mYWN0b3J5O1xufTtcblxuLy8gVGVsbCBvdXIgdG9rZW4gc291cmNlIGFuZCBlcnJvciBzdHJhdGVneSBhYm91dCBhIG5ldyB3YXkgdG8gY3JlYXRlIHRva2Vucy4vL1xuUGFyc2VyLnByb3RvdHlwZS5zZXRUb2tlbkZhY3RvcnkgPSBmdW5jdGlvbihmYWN0b3J5KSB7XG5cdHRoaXMuX2lucHV0LnRva2VuU291cmNlLl9mYWN0b3J5ID0gZmFjdG9yeTtcbn07XG5cbi8vIFRoZSBBVE4gd2l0aCBieXBhc3MgYWx0ZXJuYXRpdmVzIGlzIGV4cGVuc2l2ZSB0byBjcmVhdGUgc28gd2UgY3JlYXRlIGl0XG4vLyBsYXppbHkuXG4vL1xuLy8gQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBwYXJzZXIgZG9lcyBub3Rcbi8vIGltcGxlbWVudCB0aGUge0BsaW5rIC8vZ2V0U2VyaWFsaXplZEFUTigpfSBtZXRob2QuXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRBVE5XaXRoQnlwYXNzQWx0cyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2VyaWFsaXplZEF0biA9IHRoaXMuZ2V0U2VyaWFsaXplZEFUTigpO1xuXHRpZiAoc2VyaWFsaXplZEF0biA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhlIGN1cnJlbnQgcGFyc2VyIGRvZXMgbm90IHN1cHBvcnQgYW4gQVROIHdpdGggYnlwYXNzIGFsdGVybmF0aXZlcy5cIjtcblx0fVxuXHR2YXIgcmVzdWx0ID0gdGhpcy5ieXBhc3NBbHRzQXRuQ2FjaGVbc2VyaWFsaXplZEF0bl07XG5cdGlmIChyZXN1bHQgPT09IG51bGwpIHtcblx0XHR2YXIgZGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IG5ldyBBVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zKCk7XG5cdFx0ZGVzZXJpYWxpemF0aW9uT3B0aW9ucy5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IHRydWU7XG5cdFx0cmVzdWx0ID0gbmV3IEFUTkRlc2VyaWFsaXplcihkZXNlcmlhbGl6YXRpb25PcHRpb25zKVxuXHRcdFx0XHQuZGVzZXJpYWxpemUoc2VyaWFsaXplZEF0bik7XG5cdFx0dGhpcy5ieXBhc3NBbHRzQXRuQ2FjaGVbc2VyaWFsaXplZEF0bl0gPSByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIFRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGdldHRpbmcgYSB0cmVlIHBhdHRlcm4uIEZvciBleGFtcGxlLCBoZXJlJ3MgYVxuLy8gc2FtcGxlIHVzZTpcbi8vXG4vLyA8cHJlPlxuLy8gUGFyc2VUcmVlIHQgPSBwYXJzZXIuZXhwcigpO1xuLy8gUGFyc2VUcmVlUGF0dGVybiBwID0gcGFyc2VyLmNvbXBpbGVQYXJzZVRyZWVQYXR0ZXJuKFwiJmx0O0lEJmd0OyswXCIsXG4vLyBNeVBhcnNlci5SVUxFX2V4cHIpO1xuLy8gUGFyc2VUcmVlTWF0Y2ggbSA9IHAubWF0Y2godCk7XG4vLyBTdHJpbmcgaWQgPSBtLmdldChcIklEXCIpO1xuLy8gPC9wcmU+XG5cbnZhciBMZXhlciA9IHJlcXVpcmUoJy4vTGV4ZXInKS5MZXhlcjtcblxuUGFyc2VyLnByb3RvdHlwZS5jb21waWxlUGFyc2VUcmVlUGF0dGVybiA9IGZ1bmN0aW9uKHBhdHRlcm4sIHBhdHRlcm5SdWxlSW5kZXgsIGxleGVyKSB7XG5cdGxleGVyID0gbGV4ZXIgfHwgbnVsbDtcblx0aWYgKGxleGVyID09PSBudWxsKSB7XG5cdFx0aWYgKHRoaXMuZ2V0VG9rZW5TdHJlYW0oKSAhPT0gbnVsbCkge1xuXHRcdFx0dmFyIHRva2VuU291cmNlID0gdGhpcy5nZXRUb2tlblN0cmVhbSgpLnRva2VuU291cmNlO1xuXHRcdFx0aWYgKHRva2VuU291cmNlIGluc3RhbmNlb2YgTGV4ZXIpIHtcblx0XHRcdFx0bGV4ZXIgPSB0b2tlblNvdXJjZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGxleGVyID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJQYXJzZXIgY2FuJ3QgZGlzY292ZXIgYSBsZXhlciB0byB1c2VcIjtcblx0fVxuXHR2YXIgbSA9IG5ldyBQYXJzZVRyZWVQYXR0ZXJuTWF0Y2hlcihsZXhlciwgdGhpcyk7XG5cdHJldHVybiBtLmNvbXBpbGUocGF0dGVybiwgcGF0dGVyblJ1bGVJbmRleCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmdldFRva2VuU3RyZWFtKCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLnNldElucHV0U3RyZWFtID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dGhpcy5zZXRUb2tlblN0cmVhbShpbnB1dCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFRva2VuU3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLl9pbnB1dDtcbn07XG5cbi8vIFNldCB0aGUgdG9rZW4gc3RyZWFtIGFuZCByZXNldCB0aGUgcGFyc2VyLi8vXG5QYXJzZXIucHJvdG90eXBlLnNldFRva2VuU3RyZWFtID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHR0aGlzLnJlc2V0KCk7XG5cdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG59O1xuXG4vLyBNYXRjaCBuZWVkcyB0byByZXR1cm4gdGhlIGN1cnJlbnQgaW5wdXQgc3ltYm9sLCB3aGljaCBnZXRzIHB1dFxuLy8gaW50byB0aGUgbGFiZWwgZm9yIHRoZSBhc3NvY2lhdGVkIHRva2VuIHJlZjsgZS5nLiwgeD1JRC5cbi8vXG5QYXJzZXIucHJvdG90eXBlLmdldEN1cnJlbnRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW5wdXQuTFQoMSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLm5vdGlmeUVycm9yTGlzdGVuZXJzID0gZnVuY3Rpb24obXNnLCBvZmZlbmRpbmdUb2tlbiwgZXJyKSB7XG5cdG9mZmVuZGluZ1Rva2VuID0gb2ZmZW5kaW5nVG9rZW4gfHwgbnVsbDtcblx0ZXJyID0gZXJyIHx8IG51bGw7XG5cdGlmIChvZmZlbmRpbmdUb2tlbiA9PT0gbnVsbCkge1xuXHRcdG9mZmVuZGluZ1Rva2VuID0gdGhpcy5nZXRDdXJyZW50VG9rZW4oKTtcblx0fVxuXHR0aGlzLl9zeW50YXhFcnJvcnMgKz0gMTtcblx0dmFyIGxpbmUgPSBvZmZlbmRpbmdUb2tlbi5saW5lO1xuXHR2YXIgY29sdW1uID0gb2ZmZW5kaW5nVG9rZW4uY29sdW1uO1xuXHR2YXIgbGlzdGVuZXIgPSB0aGlzLmdldEVycm9yTGlzdGVuZXJEaXNwYXRjaCgpO1xuXHRsaXN0ZW5lci5zeW50YXhFcnJvcih0aGlzLCBvZmZlbmRpbmdUb2tlbiwgbGluZSwgY29sdW1uLCBtc2csIGVycik7XG59O1xuXG4vL1xuLy8gQ29uc3VtZSBhbmQgcmV0dXJuIHRoZSB7QGxpbmtwbGFpbiAvL2dldEN1cnJlbnRUb2tlbiBjdXJyZW50IHN5bWJvbH0uXG4vL1xuLy8gPHA+RS5nLiwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBpbnB1dCB3aXRoIHtAY29kZSBBfSBiZWluZyB0aGUgY3VycmVudFxuLy8gbG9va2FoZWFkIHN5bWJvbCwgdGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgY3Vyc29yIHRvIHtAY29kZSBCfSBhbmQgcmV0dXJuc1xuLy8ge0Bjb2RlIEF9LjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gQSBCXG4vLyBeXG4vLyA8L3ByZT5cbi8vXG4vLyBJZiB0aGUgcGFyc2VyIGlzIG5vdCBpbiBlcnJvciByZWNvdmVyeSBtb2RlLCB0aGUgY29uc3VtZWQgc3ltYm9sIGlzIGFkZGVkXG4vLyB0byB0aGUgcGFyc2UgdHJlZSB1c2luZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZENoaWxkKFRva2VuKX0sIGFuZFxuLy8ge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyLy92aXNpdFRlcm1pbmFsfSBpcyBjYWxsZWQgb24gYW55IHBhcnNlIGxpc3RlbmVycy5cbi8vIElmIHRoZSBwYXJzZXIgPGVtPmlzPC9lbT4gaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZSwgdGhlIGNvbnN1bWVkIHN5bWJvbCBpc1xuLy8gYWRkZWQgdG8gdGhlIHBhcnNlIHRyZWUgdXNpbmdcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vYWRkRXJyb3JOb2RlKFRva2VuKX0sIGFuZFxuLy8ge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyLy92aXNpdEVycm9yTm9kZX0gaXMgY2FsbGVkIG9uIGFueSBwYXJzZVxuLy8gbGlzdGVuZXJzLlxuLy9cblBhcnNlci5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbyA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlmIChvLnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRoaXMuZ2V0SW5wdXRTdHJlYW0oKS5jb25zdW1lKCk7XG5cdH1cblx0dmFyIGhhc0xpc3RlbmVyID0gdGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwgJiYgdGhpcy5fcGFyc2VMaXN0ZW5lcnMubGVuZ3RoID4gMDtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzIHx8IGhhc0xpc3RlbmVyKSB7XG5cdFx0dmFyIG5vZGU7XG5cdFx0aWYgKHRoaXMuX2VyckhhbmRsZXIuaW5FcnJvclJlY292ZXJ5TW9kZSh0aGlzKSkge1xuXHRcdFx0bm9kZSA9IHRoaXMuX2N0eC5hZGRFcnJvck5vZGUobyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vZGUgPSB0aGlzLl9jdHguYWRkVG9rZW5Ob2RlKG8pO1xuXHRcdH1cbiAgICAgICAgbm9kZS5pbnZva2luZ1N0YXRlID0gdGhpcy5zdGF0ZTtcblx0XHRpZiAoaGFzTGlzdGVuZXIpIHtcblx0XHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0XHRpZiAobm9kZSBpbnN0YW5jZW9mIEVycm9yTm9kZSB8fCAobm9kZS5pc0Vycm9yTm9kZSAhPT0gdW5kZWZpbmVkICYmIG5vZGUuaXNFcnJvck5vZGUoKSkpIHtcblx0XHRcdFx0XHRsaXN0ZW5lci52aXNpdEVycm9yTm9kZShub2RlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRcdFx0bGlzdGVuZXIudmlzaXRUZXJtaW5hbChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5hZGRDb250ZXh0VG9QYXJzZVRyZWUgPSBmdW5jdGlvbigpIHtcblx0Ly8gYWRkIGN1cnJlbnQgY29udGV4dCB0byBwYXJlbnQgaWYgd2UgaGF2ZSBhIHBhcmVudFxuXHRpZiAodGhpcy5fY3R4LnBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdHRoaXMuX2N0eC5wYXJlbnRDdHguYWRkQ2hpbGQodGhpcy5fY3R4KTtcblx0fVxufTtcblxuLy8gQWx3YXlzIGNhbGxlZCBieSBnZW5lcmF0ZWQgcGFyc2VycyB1cG9uIGVudHJ5IHRvIGEgcnVsZS4gQWNjZXNzIGZpZWxkXG4vLyB7QGxpbmsgLy9fY3R4fSBnZXQgdGhlIGN1cnJlbnQgY29udGV4dC5cblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsb2NhbGN0eCwgc3RhdGUsIHJ1bGVJbmRleCkge1xuXHR0aGlzLnN0YXRlID0gc3RhdGU7XG5cdHRoaXMuX2N0eCA9IGxvY2FsY3R4O1xuXHR0aGlzLl9jdHguc3RhcnQgPSB0aGlzLl9pbnB1dC5MVCgxKTtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzKSB7XG5cdFx0dGhpcy5hZGRDb250ZXh0VG9QYXJzZVRyZWUoKTtcblx0fVxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFbnRlclJ1bGVFdmVudCgpO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX2N0eC5zdG9wID0gdGhpcy5faW5wdXQuTFQoLTEpO1xuXHQvLyB0cmlnZ2VyIGV2ZW50IG9uIF9jdHgsIGJlZm9yZSBpdCByZXZlcnRzIHRvIHBhcmVudFxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG5cdH1cblx0dGhpcy5zdGF0ZSA9IHRoaXMuX2N0eC5pbnZva2luZ1N0YXRlO1xuXHR0aGlzLl9jdHggPSB0aGlzLl9jdHgucGFyZW50Q3R4O1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlck91dGVyQWx0ID0gZnVuY3Rpb24obG9jYWxjdHgsIGFsdE51bSkge1xuICAgXHRsb2NhbGN0eC5zZXRBbHROdW1iZXIoYWx0TnVtKTtcblx0Ly8gaWYgd2UgaGF2ZSBuZXcgbG9jYWxjdHgsIG1ha2Ugc3VyZSB3ZSByZXBsYWNlIGV4aXN0aW5nIGN0eFxuXHQvLyB0aGF0IGlzIHByZXZpb3VzIGNoaWxkIG9mIHBhcnNlIHRyZWVcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzICYmIHRoaXMuX2N0eCAhPT0gbG9jYWxjdHgpIHtcblx0XHRpZiAodGhpcy5fY3R4LnBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fY3R4LnBhcmVudEN0eC5yZW1vdmVMYXN0Q2hpbGQoKTtcblx0XHRcdHRoaXMuX2N0eC5wYXJlbnRDdHguYWRkQ2hpbGQobG9jYWxjdHgpO1xuXHRcdH1cblx0fVxuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcbn07XG5cbi8vIEdldCB0aGUgcHJlY2VkZW5jZSBsZXZlbCBmb3IgdGhlIHRvcC1tb3N0IHByZWNlZGVuY2UgcnVsZS5cbi8vXG4vLyBAcmV0dXJuIFRoZSBwcmVjZWRlbmNlIGxldmVsIGZvciB0aGUgdG9wLW1vc3QgcHJlY2VkZW5jZSBydWxlLCBvciAtMSBpZlxuLy8gdGhlIHBhcnNlciBjb250ZXh0IGlzIG5vdCBuZXN0ZWQgd2l0aGluIGEgcHJlY2VkZW5jZSBydWxlLlxuXG5QYXJzZXIucHJvdG90eXBlLmdldFByZWNlZGVuY2UgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX3ByZWNlZGVuY2VTdGFjay5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gLTE7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ByZWNlZGVuY2VTdGFja1t0aGlzLl9wcmVjZWRlbmNlU3RhY2subGVuZ3RoLTFdO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmVudGVyUmVjdXJzaW9uUnVsZSA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBzdGF0ZSwgcnVsZUluZGV4LFxuXHRcdHByZWNlZGVuY2UpIHtcblx0dGhpcy5zdGF0ZSA9IHN0YXRlO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sucHVzaChwcmVjZWRlbmNlKTtcblx0dGhpcy5fY3R4ID0gbG9jYWxjdHg7XG5cdHRoaXMuX2N0eC5zdGFydCA9IHRoaXMuX2lucHV0LkxUKDEpO1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFbnRlclJ1bGVFdmVudCgpOyAvLyBzaW11bGF0ZXMgcnVsZSBlbnRyeSBmb3Jcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gbGVmdC1yZWN1cnNpdmUgcnVsZXNcblx0fVxufTtcblxuLy9cbi8vIExpa2Uge0BsaW5rIC8vZW50ZXJSdWxlfSBidXQgZm9yIHJlY3Vyc2l2ZSBydWxlcy5cblxuUGFyc2VyLnByb3RvdHlwZS5wdXNoTmV3UmVjdXJzaW9uQ29udGV4dCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBzdGF0ZSwgcnVsZUluZGV4KSB7XG5cdHZhciBwcmV2aW91cyA9IHRoaXMuX2N0eDtcblx0cHJldmlvdXMucGFyZW50Q3R4ID0gbG9jYWxjdHg7XG5cdHByZXZpb3VzLmludm9raW5nU3RhdGUgPSBzdGF0ZTtcblx0cHJldmlvdXMuc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblxuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcblx0dGhpcy5fY3R4LnN0YXJ0ID0gcHJldmlvdXMuc3RhcnQ7XG5cdGlmICh0aGlzLmJ1aWxkUGFyc2VUcmVlcykge1xuXHRcdHRoaXMuX2N0eC5hZGRDaGlsZChwcmV2aW91cyk7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsKSB7XG5cdFx0dGhpcy50cmlnZ2VyRW50ZXJSdWxlRXZlbnQoKTsgLy8gc2ltdWxhdGVzIHJ1bGUgZW50cnkgZm9yXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGxlZnQtcmVjdXJzaXZlIHJ1bGVzXG5cdH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUudW5yb2xsUmVjdXJzaW9uQ29udGV4dHMgPSBmdW5jdGlvbihwYXJlbnRDdHgpIHtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnBvcCgpO1xuXHR0aGlzLl9jdHguc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblx0dmFyIHJldEN0eCA9IHRoaXMuX2N0eDsgLy8gc2F2ZSBjdXJyZW50IGN0eCAocmV0dXJuIHZhbHVlKVxuXHQvLyB1bnJvbGwgc28gX2N0eCBpcyBhcyBpdCB3YXMgYmVmb3JlIGNhbGwgdG8gcmVjdXJzaXZlIG1ldGhvZFxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR3aGlsZSAodGhpcy5fY3R4ICE9PSBwYXJlbnRDdHgpIHtcblx0XHRcdHRoaXMudHJpZ2dlckV4aXRSdWxlRXZlbnQoKTtcblx0XHRcdHRoaXMuX2N0eCA9IHRoaXMuX2N0eC5wYXJlbnRDdHg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMuX2N0eCA9IHBhcmVudEN0eDtcblx0fVxuXHQvLyBob29rIGludG8gdHJlZVxuXHRyZXRDdHgucGFyZW50Q3R4ID0gcGFyZW50Q3R4O1xuXHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMgJiYgcGFyZW50Q3R4ICE9PSBudWxsKSB7XG5cdFx0Ly8gYWRkIHJldHVybiBjdHggaW50byBpbnZva2luZyBydWxlJ3MgdHJlZVxuXHRcdHBhcmVudEN0eC5hZGRDaGlsZChyZXRDdHgpO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldEludm9raW5nQ29udGV4dCA9IGZ1bmN0aW9uKHJ1bGVJbmRleCkge1xuXHR2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHR3aGlsZSAoY3R4ICE9PSBudWxsKSB7XG5cdFx0aWYgKGN0eC5ydWxlSW5kZXggPT09IHJ1bGVJbmRleCkge1xuXHRcdFx0cmV0dXJuIGN0eDtcblx0XHR9XG5cdFx0Y3R4ID0gY3R4LnBhcmVudEN0eDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUucHJlY3ByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcHJlY2VkZW5jZSkge1xuXHRyZXR1cm4gcHJlY2VkZW5jZSA+PSB0aGlzLl9wcmVjZWRlbmNlU3RhY2tbdGhpcy5fcHJlY2VkZW5jZVN0YWNrLmxlbmd0aC0xXTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuaW5Db250ZXh0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXHQvLyBUT0RPOiB1c2VmdWwgaW4gcGFyc2VyP1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHtAY29kZSBzeW1ib2x9IGNhbiBmb2xsb3cgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlXG4vLyBBVE4uIFRoZSBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcsIGJ1dCBpc1xuLy8gaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZSBjb21wbGV0ZSBjb250ZXh0LXNlbnNpdGl2ZSBmb2xsb3cgc2V0IGRvZXMgbm90XG4vLyBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgY29uc3RydWN0ZWQuXG4vL1xuLy8gPHByZT5cbi8vIHJldHVybiBnZXRFeHBlY3RlZFRva2VucygpLmNvbnRhaW5zKHN5bWJvbCk7XG4vLyA8L3ByZT5cbi8vXG4vLyBAcGFyYW0gc3ltYm9sIHRoZSBzeW1ib2wgdHlwZSB0byBjaGVja1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYge0Bjb2RlIHN5bWJvbH0gY2FuIGZvbGxvdyB0aGUgY3VycmVudCBzdGF0ZSBpblxuLy8gdGhlIEFUTiwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX0uXG5cblBhcnNlci5wcm90b3R5cGUuaXNFeHBlY3RlZFRva2VuID0gZnVuY3Rpb24oc3ltYm9sKSB7XG5cdHZhciBhdG4gPSB0aGlzLl9pbnRlcnAuYXRuO1xuXHR2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHR2YXIgcyA9IGF0bi5zdGF0ZXNbdGhpcy5zdGF0ZV07XG5cdHZhciBmb2xsb3dpbmcgPSBhdG4ubmV4dFRva2VucyhzKTtcblx0aWYgKGZvbGxvd2luZy5jb250YWlucyhzeW1ib2wpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0d2hpbGUgKGN0eCAhPT0gbnVsbCAmJiBjdHguaW52b2tpbmdTdGF0ZSA+PSAwICYmIGZvbGxvd2luZy5jb250YWlucyhUb2tlbi5FUFNJTE9OKSkge1xuXHRcdHZhciBpbnZva2luZ1N0YXRlID0gYXRuLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG5cdFx0dmFyIHJ0ID0gaW52b2tpbmdTdGF0ZS50cmFuc2l0aW9uc1swXTtcblx0XHRmb2xsb3dpbmcgPSBhdG4ubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG5cdFx0aWYgKGZvbGxvd2luZy5jb250YWlucyhzeW1ib2wpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y3R4ID0gY3R4LnBhcmVudEN0eDtcblx0fVxuXHRpZiAoZm9sbG93aW5nLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pICYmIHN5bWJvbCA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vLyBDb21wdXRlcyB0aGUgc2V0IG9mIGlucHV0IHN5bWJvbHMgd2hpY2ggY291bGQgZm9sbG93IHRoZSBjdXJyZW50IHBhcnNlclxuLy8gc3RhdGUgYW5kIGNvbnRleHQsIGFzIGdpdmVuIGJ5IHtAbGluayAvL2dldFN0YXRlfSBhbmQge0BsaW5rIC8vZ2V0Q29udGV4dH0sXG4vLyByZXNwZWN0aXZlbHkuXG4vL1xuLy8gQHNlZSBBVE4vL2dldEV4cGVjdGVkVG9rZW5zKGludCwgUnVsZUNvbnRleHQpXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW50ZXJwLmF0bi5nZXRFeHBlY3RlZFRva2Vucyh0aGlzLnN0YXRlLCB0aGlzLl9jdHgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2Vuc1dpdGhpbkN1cnJlbnRSdWxlID0gZnVuY3Rpb24oKSB7XG5cdHZhciBhdG4gPSB0aGlzLl9pbnRlcnAuYXRuO1xuXHR2YXIgcyA9IGF0bi5zdGF0ZXNbdGhpcy5zdGF0ZV07XG5cdHJldHVybiBhdG4ubmV4dFRva2VucyhzKTtcbn07XG5cbi8vIEdldCBhIHJ1bGUncyBpbmRleCAoaS5lLiwge0Bjb2RlIFJVTEVfcnVsZU5hbWV9IGZpZWxkKSBvciAtMSBpZiBub3QgZm91bmQuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0UnVsZUluZGV4ID0gZnVuY3Rpb24ocnVsZU5hbWUpIHtcblx0dmFyIHJ1bGVJbmRleCA9IHRoaXMuZ2V0UnVsZUluZGV4TWFwKClbcnVsZU5hbWVdO1xuXHRpZiAocnVsZUluZGV4ICE9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHJ1bGVJbmRleDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gLTE7XG5cdH1cbn07XG5cbi8vIFJldHVybiBMaXN0Jmx0O1N0cmluZyZndDsgb2YgdGhlIHJ1bGUgbmFtZXMgaW4geW91ciBwYXJzZXIgaW5zdGFuY2Vcbi8vIGxlYWRpbmcgdXAgdG8gYSBjYWxsIHRvIHRoZSBjdXJyZW50IHJ1bGUuIFlvdSBjb3VsZCBvdmVycmlkZSBpZlxuLy8geW91IHdhbnQgbW9yZSBkZXRhaWxzIHN1Y2ggYXMgdGhlIGZpbGUvbGluZSBpbmZvIG9mIHdoZXJlXG4vLyBpbiB0aGUgQVROIGEgcnVsZSBpcyBpbnZva2VkLlxuLy9cbi8vIHRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIGVycm9yIG1lc3NhZ2VzLlxuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0UnVsZUludm9jYXRpb25TdGFjayA9IGZ1bmN0aW9uKHApIHtcblx0cCA9IHAgfHwgbnVsbDtcblx0aWYgKHAgPT09IG51bGwpIHtcblx0XHRwID0gdGhpcy5fY3R4O1xuXHR9XG5cdHZhciBzdGFjayA9IFtdO1xuXHR3aGlsZSAocCAhPT0gbnVsbCkge1xuXHRcdC8vIGNvbXB1dGUgd2hhdCBmb2xsb3dzIHdobyBpbnZva2VkIHVzXG5cdFx0dmFyIHJ1bGVJbmRleCA9IHAucnVsZUluZGV4O1xuXHRcdGlmIChydWxlSW5kZXggPCAwKSB7XG5cdFx0XHRzdGFjay5wdXNoKFwibi9hXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFjay5wdXNoKHRoaXMucnVsZU5hbWVzW3J1bGVJbmRleF0pO1xuXHRcdH1cblx0XHRwID0gcC5wYXJlbnRDdHg7XG5cdH1cblx0cmV0dXJuIHN0YWNrO1xufTtcblxuLy8gRm9yIGRlYnVnZ2luZyBhbmQgb3RoZXIgcHVycG9zZXMuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0REZBU3RyaW5ncyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkEudG9TdHJpbmcoKTtcbn07XG4vLyBGb3IgZGVidWdnaW5nIGFuZCBvdGhlciBwdXJwb3Nlcy4vL1xuUGFyc2VyLnByb3RvdHlwZS5kdW1wREZBID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzZWVuT25lID0gZmFsc2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkEubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgZGZhID0gdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkFbaV07XG5cdFx0aWYgKGRmYS5zdGF0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKHNlZW5PbmUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coKTtcblx0XHRcdH1cblx0XHRcdHRoaXMucHJpbnRlci5wcmludGxuKFwiRGVjaXNpb24gXCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIik7XG5cdFx0XHR0aGlzLnByaW50ZXIucHJpbnQoZGZhLnRvU3RyaW5nKHRoaXMubGl0ZXJhbE5hbWVzLCB0aGlzLnN5bWJvbGljTmFtZXMpKTtcblx0XHRcdHNlZW5PbmUgPSB0cnVlO1xuXHRcdH1cblx0fVxufTtcblxuLypcblwiXHRcdFx0cHJpbnRlciA9IGZ1bmN0aW9uKCkge1xcclxcblwiICtcblwiXHRcdFx0XHR0aGlzLnByaW50bG4gPSBmdW5jdGlvbihzKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdXRwdXQnKSArPSBzICsgJ1xcXFxuJzsgfVxcclxcblwiICtcblwiXHRcdFx0XHR0aGlzLnByaW50ID0gZnVuY3Rpb24ocykgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3V0cHV0JykgKz0gczsgfVxcclxcblwiICtcblwiXHRcdFx0fTtcXHJcXG5cIiArXG4qL1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFNvdXJjZU5hbWUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG59O1xuXG4vLyBEdXJpbmcgYSBwYXJzZSBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGxpc3RlbiBpbiBvbiB0aGUgcnVsZSBlbnRyeSBhbmQgZXhpdFxuLy8gZXZlbnRzIGFzIHdlbGwgYXMgdG9rZW4gbWF0Y2hlcy4gdGhpcyBpcyBmb3IgcXVpY2sgYW5kIGRpcnR5IGRlYnVnZ2luZy5cbi8vXG5QYXJzZXIucHJvdG90eXBlLnNldFRyYWNlID0gZnVuY3Rpb24odHJhY2UpIHtcblx0aWYgKCF0cmFjZSkge1xuXHRcdHRoaXMucmVtb3ZlUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHRcdHRoaXMuX3RyYWNlciA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKHRoaXMuX3RyYWNlciAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5yZW1vdmVQYXJzZUxpc3RlbmVyKHRoaXMuX3RyYWNlcik7XG5cdFx0fVxuXHRcdHRoaXMuX3RyYWNlciA9IG5ldyBUcmFjZUxpc3RlbmVyKHRoaXMpO1xuXHRcdHRoaXMuYWRkUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHR9XG59O1xuXG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vKiBBIHJ1bGUgaW52b2NhdGlvbiByZWNvcmQgZm9yIHBhcnNpbmcuXG4vL1xuLy8gIENvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcnVsZSBub3Qgc3RvcmVkIGluIHRoZVxuLy8gIFJ1bGVDb250ZXh0LiBJdCBoYW5kbGVzIHBhcnNlIHRyZWUgY2hpbGRyZW4gbGlzdCwgQW55IEFUTiBzdGF0ZVxuLy8gIHRyYWNpbmcsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMgYXZhaWxhYmxlIGZvciBydWxlIGluZGljYXRpb25zOlxuLy8gIHN0YXJ0LCBzdG9wLCBydWxlIGluZGV4LCBjdXJyZW50IGFsdCBudW1iZXIsIGN1cnJlbnRcbi8vICBBVE4gc3RhdGUuXG4vL1xuLy8gIFN1YmNsYXNzZXMgbWFkZSBmb3IgZWFjaCBydWxlIGFuZCBncmFtbWFyIHRyYWNrIHRoZSBwYXJhbWV0ZXJzLFxuLy8gIHJldHVybiB2YWx1ZXMsIGxvY2FscywgYW5kIGxhYmVscyBzcGVjaWZpYyB0byB0aGF0IHJ1bGUuIFRoZXNlXG4vLyAgYXJlIHRoZSBvYmplY3RzIHRoYXQgYXJlIHJldHVybmVkIGZyb20gcnVsZXMuXG4vL1xuLy8gIE5vdGUgdGV4dCBpcyBub3QgYW4gYWN0dWFsIGZpZWxkIG9mIGEgcnVsZSByZXR1cm4gdmFsdWU7IGl0IGlzIGNvbXB1dGVkXG4vLyAgZnJvbSBzdGFydCBhbmQgc3RvcCB1c2luZyB0aGUgaW5wdXQgc3RyZWFtJ3MgdG9TdHJpbmcoKSBtZXRob2QuICBJXG4vLyAgY291bGQgYWRkIGEgY3RvciB0byB0aGlzIHNvIHRoYXQgd2UgY2FuIHBhc3MgaW4gYW5kIHN0b3JlIHRoZSBpbnB1dFxuLy8gIHN0cmVhbSwgYnV0IEknbSBub3Qgc3VyZSB3ZSB3YW50IHRvIGRvIHRoYXQuICBJdCB3b3VsZCBzZWVtIHRvIGJlIHVuZGVmaW5lZFxuLy8gIHRvIGdldCB0aGUgLnRleHQgcHJvcGVydHkgYW55d2F5IGlmIHRoZSBydWxlIG1hdGNoZXMgdG9rZW5zIGZyb20gbXVsdGlwbGVcbi8vICBpbnB1dCBzdHJlYW1zLlxuLy9cbi8vICBJIGRvIG5vdCB1c2UgZ2V0dGVycyBmb3IgZmllbGRzIG9mIG9iamVjdHMgdGhhdCBhcmUgdXNlZCBzaW1wbHkgdG9cbi8vICBncm91cCB2YWx1ZXMgc3VjaCBhcyB0aGlzIGFnZ3JlZ2F0ZS4gIFRoZSBnZXR0ZXJzL3NldHRlcnMgYXJlIHRoZXJlIHRvXG4vLyAgc2F0aXNmeSB0aGUgc3VwZXJjbGFzcyBpbnRlcmZhY2UuXG5cbnZhciBSdWxlQ29udGV4dCA9IHJlcXVpcmUoJy4vUnVsZUNvbnRleHQnKS5SdWxlQ29udGV4dDtcbnZhciBUcmVlID0gcmVxdWlyZSgnLi90cmVlL1RyZWUnKTtcbnZhciBJTlZBTElEX0lOVEVSVkFMID0gVHJlZS5JTlZBTElEX0lOVEVSVkFMO1xudmFyIFRlcm1pbmFsTm9kZSA9IFRyZWUuVGVybWluYWxOb2RlO1xudmFyIFRlcm1pbmFsTm9kZUltcGwgPSBUcmVlLlRlcm1pbmFsTm9kZUltcGw7XG52YXIgRXJyb3JOb2RlSW1wbCA9IFRyZWUuRXJyb3JOb2RlSW1wbDtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoXCIuL0ludGVydmFsU2V0XCIpLkludGVydmFsO1xuXG5mdW5jdGlvbiBQYXJzZXJSdWxlQ29udGV4dChwYXJlbnQsIGludm9raW5nU3RhdGVOdW1iZXIpIHtcblx0cGFyZW50ID0gcGFyZW50IHx8IG51bGw7XG5cdGludm9raW5nU3RhdGVOdW1iZXIgPSBpbnZva2luZ1N0YXRlTnVtYmVyIHx8IG51bGw7XG5cdFJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyKTtcblx0dGhpcy5ydWxlSW5kZXggPSAtMTtcbiAgICAvLyAqIElmIHdlIGFyZSBkZWJ1Z2dpbmcgb3IgYnVpbGRpbmcgYSBwYXJzZSB0cmVlIGZvciBhIHZpc2l0b3IsXG4gICAgLy8gd2UgbmVlZCB0byB0cmFjayBhbGwgb2YgdGhlIHRva2VucyBhbmQgcnVsZSBpbnZvY2F0aW9ucyBhc3NvY2lhdGVkXG4gICAgLy8gd2l0aCB0aGlzIHJ1bGUncyBjb250ZXh0LiBUaGlzIGlzIGVtcHR5IGZvciBwYXJzaW5nIHcvbyB0cmVlIGNvbnN0ci5cbiAgICAvLyBvcGVyYXRpb24gYmVjYXVzZSB3ZSBkb24ndCB0aGUgbmVlZCB0byB0cmFjayB0aGUgZGV0YWlscyBhYm91dFxuICAgIC8vIGhvdyB3ZSBwYXJzZSB0aGlzIHJ1bGUuXG4gICAgLy8gL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICAgIHRoaXMuc3RhcnQgPSBudWxsO1xuICAgIHRoaXMuc3RvcCA9IG51bGw7XG4gICAgLy8gVGhlIGV4Y2VwdGlvbiB0aGF0IGZvcmNlZCB0aGlzIHJ1bGUgdG8gcmV0dXJuLiBJZiB0aGUgcnVsZSBzdWNjZXNzZnVsbHlcbiAgICAvLyBjb21wbGV0ZWQsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMuZXhjZXB0aW9uID0gbnVsbDtcbn1cblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VyUnVsZUNvbnRleHQ7XG5cbi8vICogQ09QWSBhIGN0eCAoSSdtIGRlbGliZXJhdGVseSBub3QgdXNpbmcgY29weSBjb25zdHJ1Y3RvcikvLy9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb3B5RnJvbSA9IGZ1bmN0aW9uKGN0eCkge1xuICAgIC8vIGZyb20gUnVsZUNvbnRleHRcbiAgICB0aGlzLnBhcmVudEN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgdGhpcy5pbnZva2luZ1N0YXRlID0gY3R4Lmludm9raW5nU3RhdGU7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG51bGw7XG4gICAgdGhpcy5zdGFydCA9IGN0eC5zdGFydDtcbiAgICB0aGlzLnN0b3AgPSBjdHguc3RvcDtcbiAgICAvLyBjb3B5IGFueSBlcnJvciBub2RlcyB0byBhbHQgbGFiZWwgbm9kZVxuICAgIGlmKGN0eC5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIC8vIHJlc2V0IHBhcmVudCBwb2ludGVyIGZvciBhbnkgZXJyb3Igbm9kZXNcbiAgICBcdGN0eC5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHtcbiAgICBcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgRXJyb3JOb2RlSW1wbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgY2hpbGQucGFyZW50Q3R4ID0gdGhpcztcbiAgICAgICAgICAgIH1cblx0XHR9LCB0aGlzKTtcblx0fVxufTtcblxuLy8gRG91YmxlIGRpc3BhdGNoIG1ldGhvZHMgZm9yIGxpc3RlbmVyc1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xufTtcblxuLy8gKiBEb2VzIG5vdCBzZXQgcGFyZW50IGxpbms7IG90aGVyIGFkZCBtZXRob2RzIGRvIHRoYXQvLy9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8vICogVXNlZCBieSBlbnRlck91dGVyQWx0IHRvIHRvc3Mgb3V0IGEgUnVsZUNvbnRleHQgcHJldmlvdXNseSBhZGRlZCBhc1xuLy8gd2UgZW50ZXJlZCBhIHJ1bGUuIElmIHdlIGhhdmUgLy8gbGFiZWwsIHdlIHdpbGwgbmVlZCB0byByZW1vdmVcbi8vIGdlbmVyaWMgcnVsZUNvbnRleHQgb2JqZWN0LlxuLy8gL1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLnJlbW92ZUxhc3RDaGlsZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucG9wKCk7XG4gICAgfVxufTtcblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmFkZFRva2VuTm9kZSA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgVGVybWluYWxOb2RlSW1wbCh0b2tlbik7XG4gICAgdGhpcy5hZGRDaGlsZChub2RlKTtcbiAgICBub2RlLnBhcmVudEN0eCA9IHRoaXM7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuYWRkRXJyb3JOb2RlID0gZnVuY3Rpb24oYmFkVG9rZW4pIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBFcnJvck5vZGVJbXBsKGJhZFRva2VuKTtcbiAgICB0aGlzLmFkZENoaWxkKG5vZGUpO1xuICAgIG5vZGUucGFyZW50Q3R4ID0gdGhpcztcbiAgICByZXR1cm4gbm9kZTtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGksIHR5cGUpIHtcblx0dHlwZSA9IHR5cGUgfHwgbnVsbDtcblx0aWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwgfHwgaSA8IDAgfHwgaSA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG5cdH0gZWxzZSB7XG5cdFx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltqXTtcblx0XHRcdGlmKGNoaWxkIGluc3RhbmNlb2YgdHlwZSkge1xuXHRcdFx0XHRpZihpPT09MCkge1xuXHRcdFx0XHRcdHJldHVybiBjaGlsZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpIC09IDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VG9rZW4gPSBmdW5jdGlvbih0dHlwZSwgaSkge1xuXHRpZiAodGhpcy5jaGlsZHJlbiA9PT0gbnVsbCB8fCBpIDwgMCB8fCBpID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRpZiAoY2hpbGQuc3ltYm9sLnR5cGUgPT09IHR0eXBlKSB7XG5cdFx0XHRcdGlmKGk9PT0wKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoaWxkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgLT0gMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRUb2tlbnMgPSBmdW5jdGlvbih0dHlwZSApIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuXHRcdHZhciB0b2tlbnMgPSBbXTtcblx0XHRmb3IodmFyIGo9MDsgajx0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2pdO1xuXHRcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRcdGlmIChjaGlsZC5zeW1ib2wudHlwZSA9PT0gdHR5cGUpIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaChjaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRva2VucztcbiAgICB9XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VHlwZWRSdWxlQ29udGV4dCA9IGZ1bmN0aW9uKGN0eFR5cGUsIGkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGlsZChpLCBjdHhUeXBlKTtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRUeXBlZFJ1bGVDb250ZXh0cyA9IGZ1bmN0aW9uKGN0eFR5cGUpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuXHRcdHZhciBjb250ZXh0cyA9IFtdO1xuXHRcdGZvcih2YXIgaj0wOyBqPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcblx0XHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0XHRpZiAoY2hpbGQgaW5zdGFuY2VvZiBjdHhUeXBlKSB7XG5cdFx0XHRcdGNvbnRleHRzLnB1c2goY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY29udGV4dHM7XG5cdH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZENvdW50ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLmNoaWxkcmVuPT09IG51bGwpIHtcblx0XHRyZXR1cm4gMDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG5cdH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRTb3VyY2VJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmKCB0aGlzLnN0YXJ0ID09PSBudWxsIHx8IHRoaXMuc3RvcCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gSU5WQUxJRF9JTlRFUlZBTDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEludGVydmFsKHRoaXMuc3RhcnQudG9rZW5JbmRleCwgdGhpcy5zdG9wLnRva2VuSW5kZXgpO1xuICAgIH1cbn07XG5cblJ1bGVDb250ZXh0LkVNUFRZID0gbmV3IFBhcnNlclJ1bGVDb250ZXh0KCk7XG5cbmZ1bmN0aW9uIEludGVycHJldGVyUnVsZUNvbnRleHQocGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyLCBydWxlSW5kZXgpIHtcblx0UGFyc2VyUnVsZUNvbnRleHQuY2FsbChwYXJlbnQsIGludm9raW5nU3RhdGVOdW1iZXIpO1xuICAgIHRoaXMucnVsZUluZGV4ID0gcnVsZUluZGV4O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5JbnRlcnByZXRlclJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkludGVycHJldGVyUnVsZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJwcmV0ZXJSdWxlQ29udGV4dDtcblxuZXhwb3J0cy5QYXJzZXJSdWxlQ29udGV4dCA9IFBhcnNlclJ1bGVDb250ZXh0OyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIFJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi9SdWxlQ29udGV4dCcpLlJ1bGVDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKCcuL1V0aWxzJykuSGFzaDtcblxuZnVuY3Rpb24gUHJlZGljdGlvbkNvbnRleHQoY2FjaGVkSGFzaENvZGUpIHtcblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IGNhY2hlZEhhc2hDb2RlO1xufVxuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBsb2NhbCBjb250ZXh0IHByZWRpY3Rpb24sIHdoaWNoIG1lYW5zIHdpbGRjYXJkLlxuLy8ge0Bjb2RlLy8reCA9Ly99LlxuLy8gL1xuUHJlZGljdGlvbkNvbnRleHQuRU1QVFkgPSBudWxsO1xuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBhbiBhcnJheSBpbiBmdWxsIGNvbnRleHQgbW9kZSwgd2hlbiB7QGNvZGUgJH1cbi8vIGRvZXNuJ3QgbWVhbiB3aWxkY2FyZDoge0Bjb2RlICQgKyB4ID0gWyQseF19LiBIZXJlLFxuLy8ge0Bjb2RlICR9ID0ge0BsaW5rIC8vRU1QVFlfUkVUVVJOX1NUQVRFfS5cbi8vIC9cblByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSA9IDB4N0ZGRkZGRkY7XG5cblByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudCA9IDE7XG5QcmVkaWN0aW9uQ29udGV4dC5pZCA9IFByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudDtcblxuLy8gU3RvcmVzIHRoZSBjb21wdXRlZCBoYXNoIGNvZGUgb2YgdGhpcyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9LiBUaGUgaGFzaFxuLy8gY29kZSBpcyBjb21wdXRlZCBpbiBwYXJ0cyB0byBtYXRjaCB0aGUgZm9sbG93aW5nIHJlZmVyZW5jZSBhbGdvcml0aG0uXG4vL1xuLy8gPHByZT5cbi8vIHByaXZhdGUgaW50IHJlZmVyZW5jZUhhc2hDb2RlKCkge1xuLy8gaW50IGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vaW5pdGlhbGl6ZSBNdXJtdXJIYXNoLmluaXRpYWxpemV9KHtAbGlua1xuLy8gLy9JTklUSUFMX0hBU0h9KTtcbi8vXG4vLyBmb3IgKGludCBpID0gMDsgaSAmbHQ7IHtAbGluayAvL3NpemUoKX07IGkrKykge1xuLy8gaGFzaCA9IHtAbGluayBNdXJtdXJIYXNoLy91cGRhdGUgTXVybXVySGFzaC51cGRhdGV9KGhhc2gsIHtAbGluayAvL2dldFBhcmVudFxuLy8gZ2V0UGFyZW50fShpKSk7XG4vLyB9XG4vL1xuLy8gZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB7QGxpbmsgLy9zaXplKCl9OyBpKyspIHtcbi8vIGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vdXBkYXRlIE11cm11ckhhc2gudXBkYXRlfShoYXNoLCB7QGxpbmtcbi8vIC8vZ2V0UmV0dXJuU3RhdGUgZ2V0UmV0dXJuU3RhdGV9KGkpKTtcbi8vIH1cbi8vXG4vLyBoYXNoID0ge0BsaW5rIE11cm11ckhhc2gvL2ZpbmlzaCBNdXJtdXJIYXNoLmZpbmlzaH0oaGFzaCwgMi8vIHtAbGlua1xuLy8gLy9zaXplKCl9KTtcbi8vIHJldHVybiBoYXNoO1xuLy8gfVxuLy8gPC9wcmU+XG4vLyAvXG5cbi8vIFRoaXMgbWVhbnMgb25seSB0aGUge0BsaW5rIC8vRU1QVFl9IGNvbnRleHQgaXMgaW4gc2V0LlxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xufTtcblxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmhhc0VtcHR5UGF0aCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5nZXRSZXR1cm5TdGF0ZSh0aGlzLmxlbmd0aCAtIDEpID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEU7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVkSGFzaENvZGU7XG59O1xuXG5cblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmNhY2hlZEhhc2hDb2RlKTtcbn07XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlSGFzaFN0cmluZyhwYXJlbnQsIHJldHVyblN0YXRlKSB7XG5cdHJldHVybiBcIlwiICsgcGFyZW50ICsgcmV0dXJuU3RhdGU7XG59XG4qL1xuXG4vLyBVc2VkIHRvIGNhY2hlIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cy4gSXRzIHVzZWQgZm9yIHRoZSBzaGFyZWRcbi8vIGNvbnRleHQgY2FzaCBhc3NvY2lhdGVkIHdpdGggY29udGV4dHMgaW4gREZBIHN0YXRlcy4gVGhpcyBjYWNoZVxuLy8gY2FuIGJlIHVzZWQgZm9yIGJvdGggbGV4ZXJzIGFuZCBwYXJzZXJzLlxuXG5mdW5jdGlvbiBQcmVkaWN0aW9uQ29udGV4dENhY2hlKCkge1xuXHR0aGlzLmNhY2hlID0ge307XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgYSBjb250ZXh0IHRvIHRoZSBjYWNoZSBhbmQgcmV0dXJuIGl0LiBJZiB0aGUgY29udGV4dCBhbHJlYWR5IGV4aXN0cyxcbi8vIHJldHVybiB0aGF0IG9uZSBpbnN0ZWFkIGFuZCBkbyBub3QgYWRkIGEgbmV3IGNvbnRleHQgdG8gdGhlIGNhY2hlLlxuLy8gUHJvdGVjdCBzaGFyZWQgY2FjaGUgZnJvbSB1bnNhZmUgdGhyZWFkIGFjY2Vzcy5cbi8vXG5QcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihjdHgpIHtcblx0aWYgKGN0eCA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdGhpcy5jYWNoZVtjdHhdIHx8IG51bGw7XG5cdGlmIChleGlzdGluZyAhPT0gbnVsbCkge1xuXHRcdHJldHVybiBleGlzdGluZztcblx0fVxuXHR0aGlzLmNhY2hlW2N0eF0gPSBjdHg7XG5cdHJldHVybiBjdHg7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihjdHgpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVbY3R4XSB8fCBudWxsO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFByZWRpY3Rpb25Db250ZXh0Q2FjaGUucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLmxlbmd0aDtcblx0fVxufSk7XG5cbmZ1bmN0aW9uIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0dmFyIGhhc2hDb2RlID0gMDtcblx0aWYocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0dmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuXHRcdGhhc2gudXBkYXRlKHBhcmVudCwgcmV0dXJuU3RhdGUpO1xuICAgICAgICBoYXNoQ29kZSA9IGhhc2guZmluaXNoKCk7XG5cdH1cblx0UHJlZGljdGlvbkNvbnRleHQuY2FsbCh0aGlzLCBoYXNoQ29kZSk7XG5cdHRoaXMucGFyZW50Q3R4ID0gcGFyZW50O1xuXHR0aGlzLnJldHVyblN0YXRlID0gcmV0dXJuU3RhdGU7XG59XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlKTtcblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5jb250cnVjdG9yID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQ7XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZSA9IGZ1bmN0aW9uKHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0aWYgKHJldHVyblN0YXRlID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgJiYgcGFyZW50ID09PSBudWxsKSB7XG5cdFx0Ly8gc29tZW9uZSBjYW4gcGFzcyBpbiB0aGUgYml0cyBvZiBhbiBhcnJheSBjdHggdGhhdCBtZWFuICRcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dChwYXJlbnQsIHJldHVyblN0YXRlKTtcblx0fVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxufSk7XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5wYXJlbnRDdHg7XG59O1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UmV0dXJuU3RhdGUgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZTtcbn07XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMuaGFzaENvZGUoKSAhPT0gb3RoZXIuaGFzaENvZGUoKSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gY2FuJ3QgYmUgc2FtZSBpZiBoYXNoIGlzIGRpZmZlcmVudFxuXHR9IGVsc2Uge1xuXHRcdGlmKHRoaXMucmV0dXJuU3RhdGUgIT09IG90aGVyLnJldHVyblN0YXRlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBlbHNlIGlmKHRoaXMucGFyZW50Q3R4PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIG90aGVyLnBhcmVudEN0eD09bnVsbFxuXHRcdGVsc2VcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudEN0eC5lcXVhbHMob3RoZXIucGFyZW50Q3R4KTtcblx0fVxufTtcblxuU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB1cCA9IHRoaXMucGFyZW50Q3R4ID09PSBudWxsID8gXCJcIiA6IHRoaXMucGFyZW50Q3R4LnRvU3RyaW5nKCk7XG5cdGlmICh1cC5sZW5ndGggPT09IDApIHtcblx0XHRpZiAodGhpcy5yZXR1cm5TdGF0ZSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG5cdFx0XHRyZXR1cm4gXCIkXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiICsgdGhpcy5yZXR1cm5TdGF0ZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCIgKyB0aGlzLnJldHVyblN0YXRlICsgXCIgXCIgKyB1cDtcblx0fVxufTtcblxuZnVuY3Rpb24gRW1wdHlQcmVkaWN0aW9uQ29udGV4dCgpIHtcblx0U2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY2FsbCh0aGlzLCBudWxsLCBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSk7XG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVtcHR5UHJlZGljdGlvbkNvbnRleHQ7XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRydWU7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmdldFJldHVyblN0YXRlID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGU7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcyA9PT0gb3RoZXI7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIkXCI7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5FTVBUWSA9IG5ldyBFbXB0eVByZWRpY3Rpb25Db250ZXh0KCk7XG5cbmZ1bmN0aW9uIEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcmV0dXJuU3RhdGVzKSB7XG5cdC8vIFBhcmVudCBjYW4gYmUgbnVsbCBvbmx5IGlmIGZ1bGwgY3R4IG1vZGUgYW5kIHdlIG1ha2UgYW4gYXJyYXlcblx0Ly8gZnJvbSB7QGxpbmsgLy9FTVBUWX0gYW5kIG5vbi1lbXB0eS4gV2UgbWVyZ2Uge0BsaW5rIC8vRU1QVFl9IGJ5IHVzaW5nXG5cdC8vIG51bGwgcGFyZW50IGFuZFxuXHQvLyByZXR1cm5TdGF0ZSA9PSB7QGxpbmsgLy9FTVBUWV9SRVRVUk5fU1RBVEV9LlxuXHR2YXIgaCA9IG5ldyBIYXNoKCk7XG5cdGgudXBkYXRlKHBhcmVudHMsIHJldHVyblN0YXRlcyk7XG5cdHZhciBoYXNoQ29kZSA9IGguZmluaXNoKCk7XG5cdFByZWRpY3Rpb25Db250ZXh0LmNhbGwodGhpcywgaGFzaENvZGUpO1xuXHR0aGlzLnBhcmVudHMgPSBwYXJlbnRzO1xuXHR0aGlzLnJldHVyblN0YXRlcyA9IHJldHVyblN0YXRlcztcblx0cmV0dXJuIHRoaXM7XG59XG5cbkFycmF5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUpO1xuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcnJheVByZWRpY3Rpb25Db250ZXh0O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdC8vIHNpbmNlIEVNUFRZX1JFVFVSTl9TVEFURSBjYW4gb25seSBhcHBlYXIgaW4gdGhlIGxhc3QgcG9zaXRpb24sIHdlXG5cdC8vIGRvbid0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgc2l6ZT09MVxuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXNbMF0gPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXMubGVuZ3RoO1xuXHR9XG59KTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucGFyZW50c1tpbmRleF07XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRSZXR1cm5TdGF0ZSA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHJldHVybiB0aGlzLnJldHVyblN0YXRlc1tpbmRleF07XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgQXJyYXlQcmVkaWN0aW9uQ29udGV4dCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAodGhpcy5oYXNoQ29kZSgpICE9PSBvdGhlci5oYXNoQ29kZSgpKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBjYW4ndCBiZSBzYW1lIGlmIGhhc2ggaXMgZGlmZmVyZW50XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGVzID09PSBvdGhlci5yZXR1cm5TdGF0ZXMgJiZcblx0XHRcdFx0dGhpcy5wYXJlbnRzID09PSBvdGhlci5wYXJlbnRzO1xuXHR9XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRyZXR1cm4gXCJbXVwiO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzID0gXCJbXCI7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJldHVyblN0YXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdHMgPSBzICsgXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucmV0dXJuU3RhdGVzW2ldID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpIHtcblx0XHRcdFx0cyA9IHMgKyBcIiRcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRzID0gcyArIHRoaXMucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0aWYgKHRoaXMucGFyZW50c1tpXSAhPT0gbnVsbCkge1xuXHRcdFx0XHRzID0gcyArIFwiIFwiICsgdGhpcy5wYXJlbnRzW2ldO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cyA9IHMgKyBcIm51bGxcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHMgKyBcIl1cIjtcblx0fVxufTtcblxuLy8gQ29udmVydCBhIHtAbGluayBSdWxlQ29udGV4dH0gdHJlZSB0byBhIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gZ3JhcGguXG4vLyBSZXR1cm4ge0BsaW5rIC8vRU1QVFl9IGlmIHtAY29kZSBvdXRlckNvbnRleHR9IGlzIGVtcHR5IG9yIG51bGwuXG4vLyAvXG5mdW5jdGlvbiBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChhdG4sIG91dGVyQ29udGV4dCkge1xuXHRpZiAob3V0ZXJDb250ZXh0ID09PSB1bmRlZmluZWQgfHwgb3V0ZXJDb250ZXh0ID09PSBudWxsKSB7XG5cdFx0b3V0ZXJDb250ZXh0ID0gUnVsZUNvbnRleHQuRU1QVFk7XG5cdH1cblx0Ly8gaWYgd2UgYXJlIGluIFJ1bGVDb250ZXh0IG9mIHN0YXJ0IHJ1bGUsIHMsIHRoZW4gUHJlZGljdGlvbkNvbnRleHRcblx0Ly8gaXMgRU1QVFkuIE5vYm9keSBjYWxsZWQgdXMuIChpZiB3ZSBhcmUgZW1wdHksIHJldHVybiBlbXB0eSlcblx0aWYgKG91dGVyQ29udGV4dC5wYXJlbnRDdHggPT09IG51bGwgfHwgb3V0ZXJDb250ZXh0ID09PSBSdWxlQ29udGV4dC5FTVBUWSkge1xuXHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTtcblx0fVxuXHQvLyBJZiB3ZSBoYXZlIGEgcGFyZW50LCBjb252ZXJ0IGl0IHRvIGEgUHJlZGljdGlvbkNvbnRleHQgZ3JhcGhcblx0dmFyIHBhcmVudCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0KGF0biwgb3V0ZXJDb250ZXh0LnBhcmVudEN0eCk7XG5cdHZhciBzdGF0ZSA9IGF0bi5zdGF0ZXNbb3V0ZXJDb250ZXh0Lmludm9raW5nU3RhdGVdO1xuXHR2YXIgdHJhbnNpdGlvbiA9IHN0YXRlLnRyYW5zaXRpb25zWzBdO1xuXHRyZXR1cm4gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKHBhcmVudCwgdHJhbnNpdGlvbi5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG59XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlTGlzdHNIYXNoU3RyaW5nKHBhcmVudHMsIHJldHVyblN0YXRlcykge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHBhcmVudHMubWFwKGZ1bmN0aW9uKHApIHtcblx0XHRzID0gcyArIHA7XG5cdH0pO1xuXHRyZXR1cm5TdGF0ZXMubWFwKGZ1bmN0aW9uKHIpIHtcblx0XHRzID0gcyArIHI7XG5cdH0pO1xuXHRyZXR1cm4gcztcbn1cbiovXG5mdW5jdGlvbiBtZXJnZShhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHQvLyBzaGFyZSBzYW1lIGdyYXBoIGlmIGJvdGggc2FtZVxuXHRpZiAoYSA9PT0gYikge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhIGluc3RhbmNlb2YgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQgJiYgYiBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0cmV0dXJuIG1lcmdlU2luZ2xldG9ucyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdH1cblx0Ly8gQXQgbGVhc3Qgb25lIG9mIGEgb3IgYiBpcyBhcnJheVxuXHQvLyBJZiBvbmUgaXMgJCBhbmQgcm9vdElzV2lsZGNhcmQsIHJldHVybiAkIGFzLy8gd2lsZGNhcmRcblx0aWYgKHJvb3RJc1dpbGRjYXJkKSB7XG5cdFx0aWYgKGEgaW5zdGFuY2VvZiBFbXB0eVByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gYTtcblx0XHR9XG5cdFx0aWYgKGIgaW5zdGFuY2VvZiBFbXB0eVByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gYjtcblx0XHR9XG5cdH1cblx0Ly8gY29udmVydCBzaW5nbGV0b24gc28gYm90aCBhcmUgYXJyYXlzIHRvIG5vcm1hbGl6ZVxuXHRpZiAoYSBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0YSA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KFthLmdldFBhcmVudCgpXSwgW2EucmV0dXJuU3RhdGVdKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0YiA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KFtiLmdldFBhcmVudCgpXSwgW2IucmV0dXJuU3RhdGVdKTtcblx0fVxuXHRyZXR1cm4gbWVyZ2VBcnJheXMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xufVxuXG4vL1xuLy8gTWVyZ2UgdHdvIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH0gaW5zdGFuY2VzLlxuLy9cbi8vIDxwPlN0YWNrIHRvcHMgZXF1YWwsIHBhcmVudHMgbWVyZ2UgaXMgc2FtZTsgcmV0dXJuIGxlZnQgZ3JhcGguPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9TaW5nbGV0b25NZXJnZV9TYW1lUm9vdFNhbWVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TYW1lIHN0YWNrIHRvcCwgcGFyZW50cyBkaWZmZXI7IG1lcmdlIHBhcmVudHMgZ2l2aW5nIGFycmF5IG5vZGUsIHRoZW5cbi8vIHJlbWFpbmRlcnMgb2YgdGhvc2UgZ3JhcGhzLiBBIG5ldyByb290IG5vZGUgaXMgY3JlYXRlZCB0byBwb2ludCB0byB0aGVcbi8vIG1lcmdlZCBwYXJlbnRzLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfU2FtZVJvb3REaWZmUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+RGlmZmVyZW50IHN0YWNrIHRvcHMgcG9pbnRpbmcgdG8gc2FtZSBwYXJlbnQuIE1ha2UgYXJyYXkgbm9kZSBmb3IgdGhlXG4vLyByb290IHdoZXJlIGJvdGggZWxlbWVudCBpbiB0aGUgcm9vdCBwb2ludCB0byB0aGUgc2FtZSAob3JpZ2luYWwpXG4vLyBwYXJlbnQuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9TaW5nbGV0b25NZXJnZV9EaWZmUm9vdFNhbWVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5EaWZmZXJlbnQgc3RhY2sgdG9wcyBwb2ludGluZyB0byBkaWZmZXJlbnQgcGFyZW50cy4gTWFrZSBhcnJheSBub2RlIGZvclxuLy8gdGhlIHJvb3Qgd2hlcmUgZWFjaCBlbGVtZW50IHBvaW50cyB0byB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW5hbFxuLy8gcGFyZW50Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfRGlmZlJvb3REaWZmUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gQHBhcmFtIGEgdGhlIGZpcnN0IHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSBiIHRoZSBzZWNvbmQge0BsaW5rIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0fVxuLy8gQHBhcmFtIHJvb3RJc1dpbGRjYXJkIHtAY29kZSB0cnVlfSBpZiB0aGlzIGlzIGEgbG9jYWwtY29udGV4dCBtZXJnZSxcbi8vIG90aGVyd2lzZSBmYWxzZSB0byBpbmRpY2F0ZSBhIGZ1bGwtY29udGV4dCBtZXJnZVxuLy8gQHBhcmFtIG1lcmdlQ2FjaGVcbi8vIC9cbmZ1bmN0aW9uIG1lcmdlU2luZ2xldG9ucyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdHZhciBwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGEsIGIpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGIsIGEpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0fVxuXG5cdHZhciByb290TWVyZ2UgPSBtZXJnZVJvb3QoYSwgYiwgcm9vdElzV2lsZGNhcmQpO1xuXHRpZiAocm9vdE1lcmdlICE9PSBudWxsKSB7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIHJvb3RNZXJnZSk7XG5cdFx0fVxuXHRcdHJldHVybiByb290TWVyZ2U7XG5cdH1cblx0aWYgKGEucmV0dXJuU3RhdGUgPT09IGIucmV0dXJuU3RhdGUpIHtcblx0XHR2YXIgcGFyZW50ID0gbWVyZ2UoYS5wYXJlbnRDdHgsIGIucGFyZW50Q3R4LCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdFx0Ly8gaWYgcGFyZW50IGlzIHNhbWUgYXMgZXhpc3RpbmcgYSBvciBiIHBhcmVudCBvciByZWR1Y2VkIHRvIGEgcGFyZW50LFxuXHRcdC8vIHJldHVybiBpdFxuXHRcdGlmIChwYXJlbnQgPT09IGEucGFyZW50Q3R4KSB7XG5cdFx0XHRyZXR1cm4gYTsgLy8gYXggKyBieCA9IGF4LCBpZiBhPWJcblx0XHR9XG5cdFx0aWYgKHBhcmVudCA9PT0gYi5wYXJlbnRDdHgpIHtcblx0XHRcdHJldHVybiBiOyAvLyBheCArIGJ4ID0gYngsIGlmIGE9YlxuXHRcdH1cblx0XHQvLyBlbHNlOiBheCArIGF5ID0gYSdbeCx5XVxuXHRcdC8vIG1lcmdlIHBhcmVudHMgeCBhbmQgeSwgZ2l2aW5nIGFycmF5IG5vZGUgd2l0aCB4LHkgdGhlbiByZW1haW5kZXJzXG5cdFx0Ly8gb2YgdGhvc2UgZ3JhcGhzLiBkdXAgYSwgYScgcG9pbnRzIGF0IG1lcmdlZCBhcnJheVxuXHRcdC8vIG5ldyBqb2luZWQgcGFyZW50IHNvIGNyZWF0ZSBuZXcgc2luZ2xldG9uIHBvaW50aW5nIHRvIGl0LCBhJ1xuXHRcdHZhciBzcGMgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUocGFyZW50LCBhLnJldHVyblN0YXRlKTtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgc3BjKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNwYztcblx0fSBlbHNlIHsgLy8gYSAhPSBiIHBheWxvYWRzIGRpZmZlclxuXHRcdC8vIHNlZSBpZiB3ZSBjYW4gY29sbGFwc2UgcGFyZW50cyBkdWUgdG8gJCt4IHBhcmVudHMgaWYgbG9jYWwgY3R4XG5cdFx0dmFyIHNpbmdsZVBhcmVudCA9IG51bGw7XG5cdFx0aWYgKGEgPT09IGIgfHwgKGEucGFyZW50Q3R4ICE9PSBudWxsICYmIGEucGFyZW50Q3R4ID09PSBiLnBhcmVudEN0eCkpIHsgLy8gYXggK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGJ4ID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBbYSxiXXhcblx0XHRcdHNpbmdsZVBhcmVudCA9IGEucGFyZW50Q3R4O1xuXHRcdH1cblx0XHRpZiAoc2luZ2xlUGFyZW50ICE9PSBudWxsKSB7IC8vIHBhcmVudHMgYXJlIHNhbWVcblx0XHRcdC8vIHNvcnQgcGF5bG9hZHMgYW5kIHVzZSBzYW1lIHBhcmVudFxuXHRcdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBiLnJldHVyblN0YXRlIF07XG5cdFx0XHRpZiAoYS5yZXR1cm5TdGF0ZSA+IGIucmV0dXJuU3RhdGUpIHtcblx0XHRcdFx0cGF5bG9hZHNbMF0gPSBiLnJldHVyblN0YXRlO1xuXHRcdFx0XHRwYXlsb2Fkc1sxXSA9IGEucmV0dXJuU3RhdGU7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcGFyZW50cyA9IFsgc2luZ2xlUGFyZW50LCBzaW5nbGVQYXJlbnQgXTtcblx0XHRcdHZhciBhcGMgPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhcGMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFwYztcblx0XHR9XG5cdFx0Ly8gcGFyZW50cyBkaWZmZXIgYW5kIGNhbid0IG1lcmdlIHRoZW0uIEp1c3QgcGFjayB0b2dldGhlclxuXHRcdC8vIGludG8gYXJyYXk7IGNhbid0IG1lcmdlLlxuXHRcdC8vIGF4ICsgYnkgPSBbYXgsYnldXG5cdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBiLnJldHVyblN0YXRlIF07XG5cdFx0dmFyIHBhcmVudHMgPSBbIGEucGFyZW50Q3R4LCBiLnBhcmVudEN0eCBdO1xuXHRcdGlmIChhLnJldHVyblN0YXRlID4gYi5yZXR1cm5TdGF0ZSkgeyAvLyBzb3J0IGJ5IHBheWxvYWRcblx0XHRcdHBheWxvYWRzWzBdID0gYi5yZXR1cm5TdGF0ZTtcblx0XHRcdHBheWxvYWRzWzFdID0gYS5yZXR1cm5TdGF0ZTtcblx0XHRcdHBhcmVudHMgPSBbIGIucGFyZW50Q3R4LCBhLnBhcmVudEN0eCBdO1xuXHRcdH1cblx0XHR2YXIgYV8gPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGFfKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFfO1xuXHR9XG59XG5cbi8vXG4vLyBIYW5kbGUgY2FzZSB3aGVyZSBhdCBsZWFzdCBvbmUgb2Yge0Bjb2RlIGF9IG9yIHtAY29kZSBifSBpc1xuLy8ge0BsaW5rIC8vRU1QVFl9LiBJbiB0aGUgZm9sbG93aW5nIGRpYWdyYW1zLCB0aGUgc3ltYm9sIHtAY29kZSAkfSBpcyB1c2VkXG4vLyB0byByZXByZXNlbnQge0BsaW5rIC8vRU1QVFl9LlxuLy9cbi8vIDxoMj5Mb2NhbC1Db250ZXh0IE1lcmdlczwvaDI+XG4vL1xuLy8gPHA+VGhlc2UgbG9jYWwtY29udGV4dCBtZXJnZSBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW4ge0Bjb2RlIHJvb3RJc1dpbGRjYXJkfVxuLy8gaXMgdHJ1ZS48L3A+XG4vL1xuLy8gPHA+e0BsaW5rIC8vRU1QVFl9IGlzIHN1cGVyc2V0IG9mIGFueSBncmFwaDsgcmV0dXJuIHtAbGluayAvL0VNUFRZfS48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0xvY2FsTWVyZ2VfRW1wdHlSb290LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD57QGxpbmsgLy9FTVBUWX0gYW5kIGFueXRoaW5nIGlzIHtAY29kZSAvL0VNUFRZfSwgc28gbWVyZ2VkIHBhcmVudCBpc1xuLy8ge0Bjb2RlIC8vRU1QVFl9OyByZXR1cm4gbGVmdCBncmFwaC48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0xvY2FsTWVyZ2VfRW1wdHlQYXJlbnQuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPlNwZWNpYWwgY2FzZSBvZiBsYXN0IG1lcmdlIGlmIGxvY2FsIGNvbnRleHQuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Mb2NhbE1lcmdlX0RpZmZSb290cy5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPGgyPkZ1bGwtQ29udGV4dCBNZXJnZXM8L2gyPlxuLy9cbi8vIDxwPlRoZXNlIGZ1bGwtY29udGV4dCBtZXJnZSBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW4ge0Bjb2RlIHJvb3RJc1dpbGRjYXJkfVxuLy8gaXMgZmFsc2UuPC9wPlxuLy9cbi8vIDxwPjxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX0VtcHR5Um9vdHMuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPk11c3Qga2VlcCBhbGwgY29udGV4dHM7IHtAbGluayAvL0VNUFRZfSBpbiBhcnJheSBpcyBhIHNwZWNpYWwgdmFsdWUgKGFuZFxuLy8gbnVsbCBwYXJlbnQpLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX0VtcHR5Um9vdC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+PGVtYmVkIHNyYz1cImltYWdlcy9GdWxsTWVyZ2VfU2FtZVJvb3Quc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIEBwYXJhbSBhIHRoZSBmaXJzdCB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9XG4vLyBAcGFyYW0gYiB0aGUgc2Vjb25kIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSByb290SXNXaWxkY2FyZCB7QGNvZGUgdHJ1ZX0gaWYgdGhpcyBpcyBhIGxvY2FsLWNvbnRleHQgbWVyZ2UsXG4vLyBvdGhlcndpc2UgZmFsc2UgdG8gaW5kaWNhdGUgYSBmdWxsLWNvbnRleHQgbWVyZ2Vcbi8vIC9cbmZ1bmN0aW9uIG1lcmdlUm9vdChhLCBiLCByb290SXNXaWxkY2FyZCkge1xuXHRpZiAocm9vdElzV2lsZGNhcmQpIHtcblx0XHRpZiAoYSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gLy8gKyBiID0vL1xuXHRcdH1cblx0XHRpZiAoYiA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gYSArLy8gPS8vXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChhID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSAmJiBiID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSkge1xuXHRcdFx0cmV0dXJuIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZOyAvLyAkICsgJCA9ICRcblx0XHR9IGVsc2UgaWYgKGEgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7IC8vICQgKyB4ID0gWyQseF1cblx0XHRcdHZhciBwYXlsb2FkcyA9IFsgYi5yZXR1cm5TdGF0ZSxcblx0XHRcdFx0XHRQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgXTtcblx0XHRcdHZhciBwYXJlbnRzID0gWyBiLnBhcmVudEN0eCwgbnVsbCBdO1xuXHRcdFx0cmV0dXJuIG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIHBheWxvYWRzKTtcblx0XHR9IGVsc2UgaWYgKGIgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7IC8vIHggKyAkID0gWyQseF0gKCQgaXMgYWx3YXlzIGZpcnN0IGlmIHByZXNlbnQpXG5cdFx0XHR2YXIgcGF5bG9hZHMgPSBbIGEucmV0dXJuU3RhdGUsIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSBdO1xuXHRcdFx0dmFyIHBhcmVudHMgPSBbIGEucGFyZW50Q3R4LCBudWxsIF07XG5cdFx0XHRyZXR1cm4gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcGF5bG9hZHMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuLy9cbi8vIE1lcmdlIHR3byB7QGxpbmsgQXJyYXlQcmVkaWN0aW9uQ29udGV4dH0gaW5zdGFuY2VzLlxuLy9cbi8vIDxwPkRpZmZlcmVudCB0b3BzLCBkaWZmZXJlbnQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfRGlmZlRvcERpZmZQYXIuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPlNoYXJlZCB0b3AsIHNhbWUgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfU2hhcmVUb3BTYW1lUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBkaWZmZXJlbnQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfU2hhcmVUb3BEaWZmUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBhbGwgc2hhcmVkIHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX1NoYXJlVG9wU2hhcmVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5FcXVhbCB0b3BzLCBtZXJnZSBwYXJlbnRzIGFuZCByZWR1Y2UgdG9wIHRvXG4vLyB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvQXJyYXlNZXJnZV9FcXVhbFRvcC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vLyAvXG5mdW5jdGlvbiBtZXJnZUFycmF5cyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdHZhciBwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGEsIGIpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGIsIGEpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0fVxuXHQvLyBtZXJnZSBzb3J0ZWQgcGF5bG9hZHMgYSArIGIgPT4gTVxuXHR2YXIgaSA9IDA7IC8vIHdhbGtzIGFcblx0dmFyIGogPSAwOyAvLyB3YWxrcyBiXG5cdHZhciBrID0gMDsgLy8gd2Fsa3MgdGFyZ2V0IE0gYXJyYXlcblxuXHR2YXIgbWVyZ2VkUmV0dXJuU3RhdGVzID0gW107XG5cdHZhciBtZXJnZWRQYXJlbnRzID0gW107XG5cdC8vIHdhbGsgYW5kIG1lcmdlIHRvIHlpZWxkIG1lcmdlZFBhcmVudHMsIG1lcmdlZFJldHVyblN0YXRlc1xuXHR3aGlsZSAoaSA8IGEucmV0dXJuU3RhdGVzLmxlbmd0aCAmJiBqIDwgYi5yZXR1cm5TdGF0ZXMubGVuZ3RoKSB7XG5cdFx0dmFyIGFfcGFyZW50ID0gYS5wYXJlbnRzW2ldO1xuXHRcdHZhciBiX3BhcmVudCA9IGIucGFyZW50c1tqXTtcblx0XHRpZiAoYS5yZXR1cm5TdGF0ZXNbaV0gPT09IGIucmV0dXJuU3RhdGVzW2pdKSB7XG5cdFx0XHQvLyBzYW1lIHBheWxvYWQgKHN0YWNrIHRvcHMgYXJlIGVxdWFsKSwgbXVzdCB5aWVsZCBtZXJnZWQgc2luZ2xldG9uXG5cdFx0XHR2YXIgcGF5bG9hZCA9IGEucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0Ly8gJCskID0gJFxuXHRcdFx0dmFyIGJvdGhEb2xsYXJzID0gcGF5bG9hZCA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFICYmXG5cdFx0XHRcdFx0YV9wYXJlbnQgPT09IG51bGwgJiYgYl9wYXJlbnQgPT09IG51bGw7XG5cdFx0XHR2YXIgYXhfYXggPSAoYV9wYXJlbnQgIT09IG51bGwgJiYgYl9wYXJlbnQgIT09IG51bGwgJiYgYV9wYXJlbnQgPT09IGJfcGFyZW50KTsgLy8gYXgrYXhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF4XG5cdFx0XHRpZiAoYm90aERvbGxhcnMgfHwgYXhfYXgpIHtcblx0XHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGFfcGFyZW50OyAvLyBjaG9vc2UgbGVmdFxuXHRcdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBwYXlsb2FkO1xuXHRcdFx0fSBlbHNlIHsgLy8gYXgrYXkgLT4gYSdbeCx5XVxuXHRcdFx0XHR2YXIgbWVyZ2VkUGFyZW50ID0gbWVyZ2UoYV9wYXJlbnQsIGJfcGFyZW50LCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdFx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBtZXJnZWRQYXJlbnQ7XG5cdFx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IHBheWxvYWQ7XG5cdFx0XHR9XG5cdFx0XHRpICs9IDE7IC8vIGhvcCBvdmVyIGxlZnQgb25lIGFzIHVzdWFsXG5cdFx0XHRqICs9IDE7IC8vIGJ1dCBhbHNvIHNraXAgb25lIGluIHJpZ2h0IHNpZGUgc2luY2Ugd2UgbWVyZ2Vcblx0XHR9IGVsc2UgaWYgKGEucmV0dXJuU3RhdGVzW2ldIDwgYi5yZXR1cm5TdGF0ZXNbal0pIHsgLy8gY29weSBhW2ldIHRvIE1cblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBhX3BhcmVudDtcblx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IGEucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0aSArPSAxO1xuXHRcdH0gZWxzZSB7IC8vIGIgPiBhLCBjb3B5IGJbal0gdG8gTVxuXHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGJfcGFyZW50O1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYi5yZXR1cm5TdGF0ZXNbal07XG5cdFx0XHRqICs9IDE7XG5cdFx0fVxuXHRcdGsgKz0gMTtcblx0fVxuXHQvLyBjb3B5IG92ZXIgYW55IHBheWxvYWRzIHJlbWFpbmluZyBpbiBlaXRoZXIgYXJyYXlcblx0aWYgKGkgPCBhLnJldHVyblN0YXRlcy5sZW5ndGgpIHtcblx0XHRmb3IgKHZhciBwID0gaTsgcCA8IGEucmV0dXJuU3RhdGVzLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gYS5wYXJlbnRzW3BdO1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYS5yZXR1cm5TdGF0ZXNbcF07XG5cdFx0XHRrICs9IDE7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvciAodmFyIHAgPSBqOyBwIDwgYi5yZXR1cm5TdGF0ZXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBiLnBhcmVudHNbcF07XG5cdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBiLnJldHVyblN0YXRlc1twXTtcblx0XHRcdGsgKz0gMTtcblx0XHR9XG5cdH1cblx0Ly8gdHJpbSBtZXJnZWQgaWYgd2UgY29tYmluZWQgYSBmZXcgdGhhdCBoYWQgc2FtZSBzdGFjayB0b3BzXG5cdGlmIChrIDwgbWVyZ2VkUGFyZW50cy5sZW5ndGgpIHsgLy8gd3JpdGUgaW5kZXggPCBsYXN0IHBvc2l0aW9uOyB0cmltXG5cdFx0aWYgKGsgPT09IDEpIHsgLy8gZm9yIGp1c3Qgb25lIG1lcmdlZCBlbGVtZW50LCByZXR1cm4gc2luZ2xldG9uIHRvcFxuXHRcdFx0dmFyIGFfID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKG1lcmdlZFBhcmVudHNbMF0sXG5cdFx0XHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzWzBdKTtcblx0XHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGFfKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhXztcblx0XHR9XG5cdFx0bWVyZ2VkUGFyZW50cyA9IG1lcmdlZFBhcmVudHMuc2xpY2UoMCwgayk7XG5cdFx0bWVyZ2VkUmV0dXJuU3RhdGVzID0gbWVyZ2VkUmV0dXJuU3RhdGVzLnNsaWNlKDAsIGspO1xuXHR9XG5cblx0dmFyIE0gPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChtZXJnZWRQYXJlbnRzLCBtZXJnZWRSZXR1cm5TdGF0ZXMpO1xuXG5cdC8vIGlmIHdlIGNyZWF0ZWQgc2FtZSBhcnJheSBhcyBhIG9yIGIsIHJldHVybiB0aGF0IGluc3RlYWRcblx0Ly8gVE9ETzogdHJhY2sgd2hldGhlciB0aGlzIGlzIHBvc3NpYmxlIGFib3ZlIGR1cmluZyBtZXJnZSBzb3J0IGZvciBzcGVlZFxuXHRpZiAoTSA9PT0gYSkge1xuXHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIGE7XG5cdH1cblx0aWYgKE0gPT09IGIpIHtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgYik7XG5cdFx0fVxuXHRcdHJldHVybiBiO1xuXHR9XG5cdGNvbWJpbmVDb21tb25QYXJlbnRzKG1lcmdlZFBhcmVudHMpO1xuXG5cdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgTSk7XG5cdH1cblx0cmV0dXJuIE07XG59XG5cbi8vXG4vLyBNYWtlIHBhc3Mgb3ZlciBhbGwgPGVtPk08L2VtPiB7QGNvZGUgcGFyZW50c307IG1lcmdlIGFueSB7QGNvZGUgZXF1YWxzKCl9XG4vLyBvbmVzLlxuLy8gL1xuZnVuY3Rpb24gY29tYmluZUNvbW1vblBhcmVudHMocGFyZW50cykge1xuXHR2YXIgdW5pcXVlUGFyZW50cyA9IHt9O1xuXG5cdGZvciAodmFyIHAgPSAwOyBwIDwgcGFyZW50cy5sZW5ndGg7IHArKykge1xuXHRcdHZhciBwYXJlbnQgPSBwYXJlbnRzW3BdO1xuXHRcdGlmICghKHBhcmVudCBpbiB1bmlxdWVQYXJlbnRzKSkge1xuXHRcdFx0dW5pcXVlUGFyZW50c1twYXJlbnRdID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXHRmb3IgKHZhciBxID0gMDsgcSA8IHBhcmVudHMubGVuZ3RoOyBxKyspIHtcblx0XHRwYXJlbnRzW3FdID0gdW5pcXVlUGFyZW50c1twYXJlbnRzW3FdXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dChjb250ZXh0LCBjb250ZXh0Q2FjaGUsIHZpc2l0ZWQpIHtcblx0aWYgKGNvbnRleHQuaXNFbXB0eSgpKSB7XG5cdFx0cmV0dXJuIGNvbnRleHQ7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdmlzaXRlZFtjb250ZXh0XSB8fCBudWxsO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gZXhpc3Rpbmc7XG5cdH1cblx0ZXhpc3RpbmcgPSBjb250ZXh0Q2FjaGUuZ2V0KGNvbnRleHQpO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHR2aXNpdGVkW2NvbnRleHRdID0gZXhpc3Rpbmc7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHZhciBjaGFuZ2VkID0gZmFsc2U7XG5cdHZhciBwYXJlbnRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwYXJlbnQgPSBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dChjb250ZXh0LmdldFBhcmVudChpKSwgY29udGV4dENhY2hlLCB2aXNpdGVkKTtcblx0XHRpZiAoY2hhbmdlZCB8fCBwYXJlbnQgIT09IGNvbnRleHQuZ2V0UGFyZW50KGkpKSB7XG5cdFx0XHRpZiAoIWNoYW5nZWQpIHtcblx0XHRcdFx0cGFyZW50cyA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNvbnRleHQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRwYXJlbnRzW2pdID0gY29udGV4dC5nZXRQYXJlbnQoaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYXJlbnRzW2ldID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXHRpZiAoIWNoYW5nZWQpIHtcblx0XHRjb250ZXh0Q2FjaGUuYWRkKGNvbnRleHQpO1xuXHRcdHZpc2l0ZWRbY29udGV4dF0gPSBjb250ZXh0O1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cdHZhciB1cGRhdGVkID0gbnVsbDtcblx0aWYgKHBhcmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0dXBkYXRlZCA9IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR9IGVsc2UgaWYgKHBhcmVudHMubGVuZ3RoID09PSAxKSB7XG5cdFx0dXBkYXRlZCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZShwYXJlbnRzWzBdLCBjb250ZXh0XG5cdFx0XHRcdC5nZXRSZXR1cm5TdGF0ZSgwKSk7XG5cdH0gZWxzZSB7XG5cdFx0dXBkYXRlZCA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIGNvbnRleHQucmV0dXJuU3RhdGVzKTtcblx0fVxuXHRjb250ZXh0Q2FjaGUuYWRkKHVwZGF0ZWQpO1xuXHR2aXNpdGVkW3VwZGF0ZWRdID0gdXBkYXRlZDtcblx0dmlzaXRlZFtjb250ZXh0XSA9IHVwZGF0ZWQ7XG5cblx0cmV0dXJuIHVwZGF0ZWQ7XG59XG5cbi8vIHRlcidzIHJlY3Vyc2l2ZSB2ZXJzaW9uIG9mIFNhbSdzIGdldEFsbE5vZGVzKClcbmZ1bmN0aW9uIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCkge1xuXHRpZiAobm9kZXMgPT09IG51bGwpIHtcblx0XHRub2RlcyA9IFtdO1xuXHRcdHJldHVybiBnZXRBbGxDb250ZXh0Tm9kZXMoY29udGV4dCwgbm9kZXMsIHZpc2l0ZWQpO1xuXHR9IGVsc2UgaWYgKHZpc2l0ZWQgPT09IG51bGwpIHtcblx0XHR2aXNpdGVkID0ge307XG5cdFx0cmV0dXJuIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGNvbnRleHQgPT09IG51bGwgfHwgdmlzaXRlZFtjb250ZXh0XSAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIG5vZGVzO1xuXHRcdH1cblx0XHR2aXNpdGVkW2NvbnRleHRdID0gY29udGV4dDtcblx0XHRub2Rlcy5wdXNoKGNvbnRleHQpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0Z2V0QWxsQ29udGV4dE5vZGVzKGNvbnRleHQuZ2V0UGFyZW50KGkpLCBub2RlcywgdmlzaXRlZCk7XG5cdFx0fVxuXHRcdHJldHVybiBub2Rlcztcblx0fVxufVxuXG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0ID0gUHJlZGljdGlvbkNvbnRleHQ7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0Q2FjaGUgPSBQcmVkaWN0aW9uQ29udGV4dENhY2hlO1xuZXhwb3J0cy5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuZXhwb3J0cy5wcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuZXhwb3J0cy5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IGdldENhY2hlZFByZWRpY3Rpb25Db250ZXh0O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBDb25zb2xlRXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JMaXN0ZW5lcicpLkNvbnNvbGVFcnJvckxpc3RlbmVyO1xudmFyIFByb3h5RXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JMaXN0ZW5lcicpLlByb3h5RXJyb3JMaXN0ZW5lcjtcblxuZnVuY3Rpb24gUmVjb2duaXplcigpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbIENvbnNvbGVFcnJvckxpc3RlbmVyLklOU1RBTkNFIF07XG4gICAgdGhpcy5faW50ZXJwID0gbnVsbDtcbiAgICB0aGlzLl9zdGF0ZU51bWJlciA9IC0xO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SZWNvZ25pemVyLnRva2VuVHlwZU1hcENhY2hlID0ge307XG5SZWNvZ25pemVyLnJ1bGVJbmRleE1hcENhY2hlID0ge307XG5cblxuUmVjb2duaXplci5wcm90b3R5cGUuY2hlY2tWZXJzaW9uID0gZnVuY3Rpb24odG9vbFZlcnNpb24pIHtcbiAgICB2YXIgcnVudGltZVZlcnNpb24gPSBcIjQuNy4yXCI7XG4gICAgaWYgKHJ1bnRpbWVWZXJzaW9uIT09dG9vbFZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJBTlRMUiBydW50aW1lIGFuZCBnZW5lcmF0ZWQgY29kZSB2ZXJzaW9ucyBkaXNhZ3JlZTogXCIrcnVudGltZVZlcnNpb24rXCIhPVwiK3Rvb2xWZXJzaW9uKTtcbiAgICB9XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5hZGRFcnJvckxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5yZW1vdmVFcnJvckxpc3RlbmVycyA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5UeXBlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRva2VuTmFtZXMgPSB0aGlzLmdldFRva2VuTmFtZXMoKTtcbiAgICBpZiAodG9rZW5OYW1lcz09PW51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgY3VycmVudCByZWNvZ25pemVyIGRvZXMgbm90IHByb3ZpZGUgYSBsaXN0IG9mIHRva2VuIG5hbWVzLlwiKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMudG9rZW5UeXBlTWFwQ2FjaGVbdG9rZW5OYW1lc107XG4gICAgaWYocmVzdWx0PT09dW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHRva2VuTmFtZXMucmVkdWNlKGZ1bmN0aW9uKG8sIGssIGkpIHsgb1trXSA9IGk7IH0pO1xuICAgICAgICByZXN1bHQuRU9GID0gVG9rZW4uRU9GO1xuICAgICAgICB0aGlzLnRva2VuVHlwZU1hcENhY2hlW3Rva2VuTmFtZXNdID0gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gR2V0IGEgbWFwIGZyb20gcnVsZSBuYW1lcyB0byBydWxlIGluZGV4ZXMuXG4vL1xuLy8gPHA+VXNlZCBmb3IgWFBhdGggYW5kIHRyZWUgcGF0dGVybiBjb21waWxhdGlvbi48L3A+XG4vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0UnVsZUluZGV4TWFwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJ1bGVOYW1lcyA9IHRoaXMucnVsZU5hbWVzO1xuICAgIGlmIChydWxlTmFtZXM9PT1udWxsKSB7XG4gICAgICAgIHRocm93KFwiVGhlIGN1cnJlbnQgcmVjb2duaXplciBkb2VzIG5vdCBwcm92aWRlIGEgbGlzdCBvZiBydWxlIG5hbWVzLlwiKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucnVsZUluZGV4TWFwQ2FjaGVbcnVsZU5hbWVzXTtcbiAgICBpZihyZXN1bHQ9PT11bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0ID0gcnVsZU5hbWVzLnJlZHVjZShmdW5jdGlvbihvLCBrLCBpKSB7IG9ba10gPSBpOyB9KTtcbiAgICAgICAgdGhpcy5ydWxlSW5kZXhNYXBDYWNoZVtydWxlTmFtZXNdID0gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW5OYW1lKSB7XG4gICAgdmFyIHR0eXBlID0gdGhpcy5nZXRUb2tlblR5cGVNYXAoKVt0b2tlbk5hbWVdO1xuICAgIGlmICh0dHlwZSAhPT11bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHR0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBUb2tlbi5JTlZBTElEX1RZUEU7XG4gICAgfVxufTtcblxuXG4vLyBXaGF0IGlzIHRoZSBlcnJvciBoZWFkZXIsIG5vcm1hbGx5IGxpbmUvY2hhcmFjdGVyIHBvc2l0aW9uIGluZm9ybWF0aW9uPy8vXG5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRFcnJvckhlYWRlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbGluZSA9IGUuZ2V0T2ZmZW5kaW5nVG9rZW4oKS5saW5lO1xuICAgIHZhciBjb2x1bW4gPSBlLmdldE9mZmVuZGluZ1Rva2VuKCkuY29sdW1uO1xuICAgIHJldHVybiBcImxpbmUgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW47XG59O1xuXG5cbi8vIEhvdyBzaG91bGQgYSB0b2tlbiBiZSBkaXNwbGF5ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZT8gVGhlIGRlZmF1bHRcbi8vICBpcyB0byBkaXNwbGF5IGp1c3QgdGhlIHRleHQsIGJ1dCBkdXJpbmcgZGV2ZWxvcG1lbnQgeW91IG1pZ2h0XG4vLyAgd2FudCB0byBoYXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIHNwaXQgb3V0LiAgT3ZlcnJpZGUgaW4gdGhhdCBjYXNlXG4vLyAgdG8gdXNlIHQudG9TdHJpbmcoKSAod2hpY2gsIGZvciBDb21tb25Ub2tlbiwgZHVtcHMgZXZlcnl0aGluZyBhYm91dFxuLy8gIHRoZSB0b2tlbikuIFRoaXMgaXMgYmV0dGVyIHRoYW4gZm9yY2luZyB5b3UgdG8gb3ZlcnJpZGUgYSBtZXRob2QgaW5cbi8vICB5b3VyIHRva2VuIG9iamVjdHMgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0byBnbyBtb2RpZnkgeW91ciBsZXhlclxuLy8gIHNvIHRoYXQgaXQgY3JlYXRlcyBhIG5ldyBKYXZhIHR5cGUuXG4vL1xuLy8gQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBieSB0aGUgQU5UTFIgNCBSdW50aW1lLiBTcGVjaWZpY1xuLy8gaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3l9IG1heSBwcm92aWRlIGEgc2ltaWxhclxuLy8gZmVhdHVyZSB3aGVuIG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUsIHNlZVxuLy8ge0BsaW5rIERlZmF1bHRFcnJvclN0cmF0ZWd5Ly9nZXRUb2tlbkVycm9yRGlzcGxheX0uXG4vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5FcnJvckRpc3BsYXkgPSBmdW5jdGlvbih0KSB7XG4gICAgaWYgKHQ9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiBcIjxubyB0b2tlbj5cIjtcbiAgICB9XG4gICAgdmFyIHMgPSB0LnRleHQ7XG4gICAgaWYgKHM9PT1udWxsKSB7XG4gICAgICAgIGlmICh0LnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHMgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gXCI8XCIgKyB0LnR5cGUgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzID0gcy5yZXBsYWNlKFwiXFxuXCIsXCJcXFxcblwiKS5yZXBsYWNlKFwiXFxyXCIsXCJcXFxcclwiKS5yZXBsYWNlKFwiXFx0XCIsXCJcXFxcdFwiKTtcbiAgICByZXR1cm4gXCInXCIgKyBzICsgXCInXCI7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb3h5RXJyb3JMaXN0ZW5lcih0aGlzLl9saXN0ZW5lcnMpO1xufTtcblxuLy8gc3ViY2xhc3MgbmVlZHMgdG8gb3ZlcnJpZGUgdGhlc2UgaWYgdGhlcmUgYXJlIHNlbXByZWRzIG9yIGFjdGlvbnNcbi8vIHRoYXQgdGhlIEFUTiBpbnRlcnAgbmVlZHMgdG8gZXhlY3V0ZVxuUmVjb2duaXplci5wcm90b3R5cGUuc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBydWxlSW5kZXgsIGFjdGlvbkluZGV4KSB7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5wcmVjcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4ICwgcHJlY2VkZW5jZSkge1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuLy9JbmRpY2F0ZSB0aGF0IHRoZSByZWNvZ25pemVyIGhhcyBjaGFuZ2VkIGludGVybmFsIHN0YXRlIHRoYXQgaXNcbi8vY29uc2lzdGVudCB3aXRoIHRoZSBBVE4gc3RhdGUgcGFzc2VkIGluLiAgVGhpcyB3YXkgd2UgYWx3YXlzIGtub3dcbi8vd2hlcmUgd2UgYXJlIGluIHRoZSBBVE4gYXMgdGhlIHBhcnNlciBnb2VzIGFsb25nLiBUaGUgcnVsZVxuLy9jb250ZXh0IG9iamVjdHMgZm9ybSBhIHN0YWNrIHRoYXQgbGV0cyB1cyBzZWUgdGhlIHN0YWNrIG9mXG4vL2ludm9raW5nIHJ1bGVzLiBDb21iaW5lIHRoaXMgYW5kIHdlIGhhdmUgY29tcGxldGUgQVROXG4vL2NvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWNvZ25pemVyLnByb3RvdHlwZSwgXCJzdGF0ZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZU51bWJlcjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oc3RhdGUpIHtcblx0XHR0aGlzLl9zdGF0ZU51bWJlciA9IHN0YXRlO1xuXHR9XG59KTtcblxuXG5leHBvcnRzLlJlY29nbml6ZXIgPSBSZWNvZ25pemVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vICBBIHJ1bGUgY29udGV4dCBpcyBhIHJlY29yZCBvZiBhIHNpbmdsZSBydWxlIGludm9jYXRpb24uIEl0IGtub3dzXG4vLyAgd2hpY2ggY29udGV4dCBpbnZva2VkIGl0LCBpZiBhbnkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCBjb250ZXh0LCB0aGVuXG4vLyAgbmF0dXJhbGx5IHRoZSBpbnZva2luZyBzdGF0ZSBpcyBub3QgdmFsaWQuICBUaGUgcGFyZW50IGxpbmtcbi8vICBwcm92aWRlcyBhIGNoYWluIHVwd2FyZHMgZnJvbSB0aGUgY3VycmVudCBydWxlIGludm9jYXRpb24gdG8gdGhlIHJvb3Rcbi8vICBvZiB0aGUgaW52b2NhdGlvbiB0cmVlLCBmb3JtaW5nIGEgc3RhY2suIFdlIGFjdHVhbGx5IGNhcnJ5IG5vXG4vLyAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dCAoZXhjZXB0XG4vLyAgd2hlbiBwYXJzaW5nKS4gV2Uga2VlcCBvbmx5IHRoZSBzdGF0ZSBudW1iZXIgb2YgdGhlIGludm9raW5nIHN0YXRlIGZyb21cbi8vICB0aGUgQVROIHN1Ym1hY2hpbmUgdGhhdCBpbnZva2VkIHRoaXMuIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgc1xuLy8gIHBvaW50ZXIgaW5zaWRlIFBhcnNlclJ1bGVDb250ZXh0IHRoYXQgdHJhY2tzIHRoZSBjdXJyZW50IHN0YXRlXG4vLyAgYmVpbmcgXCJleGVjdXRlZFwiIGZvciB0aGUgY3VycmVudCBydWxlLlxuLy9cbi8vICBUaGUgcGFyZW50IGNvbnRleHRzIGFyZSB1c2VmdWwgZm9yIGNvbXB1dGluZyBsb29rYWhlYWQgc2V0cyBhbmRcbi8vICBnZXR0aW5nIGVycm9yIGluZm9ybWF0aW9uLlxuLy9cbi8vICBUaGVzZSBvYmplY3RzIGFyZSB1c2VkIGR1cmluZyBwYXJzaW5nIGFuZCBwcmVkaWN0aW9uLlxuLy8gIEZvciB0aGUgc3BlY2lhbCBjYXNlIG9mIHBhcnNlcnMsIHdlIHVzZSB0aGUgc3ViY2xhc3Ncbi8vICBQYXJzZXJSdWxlQ29udGV4dC5cbi8vXG4vLyAgQHNlZSBQYXJzZXJSdWxlQ29udGV4dFxuLy8vXG5cbnZhciBSdWxlTm9kZSA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJykuUnVsZU5vZGU7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJykuSU5WQUxJRF9JTlRFUlZBTDtcbnZhciBJTlZBTElEX0FMVF9OVU1CRVIgPSByZXF1aXJlKCcuL2F0bi9BVE4nKS5JTlZBTElEX0FMVF9OVU1CRVI7XG5cbmZ1bmN0aW9uIFJ1bGVDb250ZXh0KHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRSdWxlTm9kZS5jYWxsKHRoaXMpO1xuXHQvLyBXaGF0IGNvbnRleHQgaW52b2tlZCB0aGlzIHJ1bGU/XG5cdHRoaXMucGFyZW50Q3R4ID0gcGFyZW50IHx8IG51bGw7XG5cdC8vIFdoYXQgc3RhdGUgaW52b2tlZCB0aGUgcnVsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0P1xuXHQvLyBUaGUgXCJyZXR1cm4gYWRkcmVzc1wiIGlzIHRoZSBmb2xsb3dTdGF0ZSBvZiBpbnZva2luZ1N0YXRlXG5cdC8vIElmIHBhcmVudCBpcyBudWxsLCB0aGlzIHNob3VsZCBiZSAtMS5cblx0dGhpcy5pbnZva2luZ1N0YXRlID0gaW52b2tpbmdTdGF0ZSB8fCAtMTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUnVsZU5vZGUucHJvdG90eXBlKTtcblJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVDb250ZXh0O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZGVwdGggPSBmdW5jdGlvbigpIHtcblx0dmFyIG4gPSAwO1xuXHR2YXIgcCA9IHRoaXM7XG5cdHdoaWxlIChwICE9PSBudWxsKSB7XG5cdFx0cCA9IHAucGFyZW50Q3R4O1xuXHRcdG4gKz0gMTtcblx0fVxuXHRyZXR1cm4gbjtcbn07XG5cbi8vIEEgY29udGV4dCBpcyBlbXB0eSBpZiB0aGVyZSBpcyBubyBpbnZva2luZyBzdGF0ZTsgbWVhbmluZyBub2JvZHkgY2FsbFxuLy8gY3VycmVudCBjb250ZXh0LlxuUnVsZUNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuaW52b2tpbmdTdGF0ZSA9PT0gLTE7XG59O1xuXG4vLyBzYXRpc2Z5IHRoZSBQYXJzZVRyZWUgLyBTeW50YXhUcmVlIGludGVyZmFjZVxuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0UnVsZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0UGF5bG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbi8vIFJldHVybiB0aGUgY29tYmluZWQgdGV4dCBvZiBhbGwgY2hpbGQgbm9kZXMuIFRoaXMgbWV0aG9kIG9ubHkgY29uc2lkZXJzXG4vLyB0b2tlbnMgd2hpY2ggaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlLlxuLy8gPHA+XG4vLyBTaW5jZSB0b2tlbnMgb24gaGlkZGVuIGNoYW5uZWxzIChlLmcuIHdoaXRlc3BhY2Ugb3IgY29tbWVudHMpIGFyZSBub3Rcbi8vIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlcywgdGhleSB3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIG91dHB1dCBvZiB0aGlzXG4vLyBtZXRob2QuXG4vLyAvXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5nZXRDaGlsZENvdW50KCkgPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHtcblx0XHRcdHJldHVybiBjaGlsZC5nZXRUZXh0KCk7XG5cdFx0fSkuam9pbihcIlwiKTtcblx0fVxufTtcblxuLy8gRm9yIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFyc2UgdHJlZSBpbnRlcm5hbCBub2RlLCByZXR1cm5cbi8vIHRoZSBvdXRlciBhbHRlcm5hdGl2ZSBudW1iZXIgdXNlZCB0byBtYXRjaCB0aGUgaW5wdXQuIERlZmF1bHRcbi8vIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGNvbXB1dGUgbm9yIHN0b3JlIHRoaXMgYWx0IG51bS4gQ3JlYXRlXG4vLyBhIHN1YmNsYXNzIG9mIFBhcnNlclJ1bGVDb250ZXh0IHdpdGggYmFja2luZyBmaWVsZCBhbmQgc2V0XG4vLyBvcHRpb24gY29udGV4dFN1cGVyQ2xhc3MuXG4vLyB0byBzZXQgaXQuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0QWx0TnVtYmVyID0gZnVuY3Rpb24oKSB7IHJldHVybiBJTlZBTElEX0FMVF9OVU1CRVI7IH1cblxuLy8gU2V0IHRoZSBvdXRlciBhbHRlcm5hdGl2ZSBudW1iZXIgZm9yIHRoaXMgY29udGV4dCBub2RlLiBEZWZhdWx0XG4vLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcgdG8gYXZvaWQgYmFja2luZyBmaWVsZCBvdmVyaGVhZCBmb3Jcbi8vIHRyZWVzIHRoYXQgZG9uJ3QgbmVlZCBpdC4gIENyZWF0ZVxuLy8gYSBzdWJjbGFzcyBvZiBQYXJzZXJSdWxlQ29udGV4dCB3aXRoIGJhY2tpbmcgZmllbGQgYW5kIHNldFxuLy8gb3B0aW9uIGNvbnRleHRTdXBlckNsYXNzLlxuUnVsZUNvbnRleHQucHJvdG90eXBlLnNldEFsdE51bWJlciA9IGZ1bmN0aW9uKGFsdE51bWJlcikgeyB9XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gMDtcbn07XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbih2aXNpdG9yKSB7XG5cdHJldHVybiB2aXNpdG9yLnZpc2l0Q2hpbGRyZW4odGhpcyk7XG59O1xuXG4vL25lZWQgdG8gbWFuYWdlIGNpcmN1bGFyIGRlcGVuZGVuY2llcywgc28gZXhwb3J0IG5vd1xuZXhwb3J0cy5SdWxlQ29udGV4dCA9IFJ1bGVDb250ZXh0O1xudmFyIFRyZWVzID0gcmVxdWlyZSgnLi90cmVlL1RyZWVzJykuVHJlZXM7XG5cblxuLy8gUHJpbnQgb3V0IGEgd2hvbGUgdHJlZSwgbm90IGp1c3QgYSBub2RlLCBpbiBMSVNQIGZvcm1hdFxuLy8gKHJvb3QgY2hpbGQxIC4uIGNoaWxkTikuIFByaW50IGp1c3QgYSBub2RlIGlmIHRoaXMgaXMgYSBsZWFmLlxuLy9cblxuUnVsZUNvbnRleHQucHJvdG90eXBlLnRvU3RyaW5nVHJlZSA9IGZ1bmN0aW9uKHJ1bGVOYW1lcywgcmVjb2cpIHtcblx0cmV0dXJuIFRyZWVzLnRvU3RyaW5nVHJlZSh0aGlzLCBydWxlTmFtZXMsIHJlY29nKTtcbn07XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKHJ1bGVOYW1lcywgc3RvcCkge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0c3RvcCA9IHN0b3AgfHwgbnVsbDtcblx0dmFyIHAgPSB0aGlzO1xuXHR2YXIgcyA9IFwiW1wiO1xuXHR3aGlsZSAocCAhPT0gbnVsbCAmJiBwICE9PSBzdG9wKSB7XG5cdFx0aWYgKHJ1bGVOYW1lcyA9PT0gbnVsbCkge1xuXHRcdFx0aWYgKCFwLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRzICs9IHAuaW52b2tpbmdTdGF0ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHJpID0gcC5ydWxlSW5kZXg7XG5cdFx0XHR2YXIgcnVsZU5hbWUgPSAocmkgPj0gMCAmJiByaSA8IHJ1bGVOYW1lcy5sZW5ndGgpID8gcnVsZU5hbWVzW3JpXVxuXHRcdFx0XHRcdDogXCJcIiArIHJpO1xuXHRcdFx0cyArPSBydWxlTmFtZTtcblx0XHR9XG5cdFx0aWYgKHAucGFyZW50Q3R4ICE9PSBudWxsICYmIChydWxlTmFtZXMgIT09IG51bGwgfHwgIXAucGFyZW50Q3R4LmlzRW1wdHkoKSkpIHtcblx0XHRcdHMgKz0gXCIgXCI7XG5cdFx0fVxuXHRcdHAgPSBwLnBhcmVudEN0eDtcblx0fVxuXHRzICs9IFwiXVwiO1xuXHRyZXR1cm4gcztcbn07XG5cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vIEEgdG9rZW4gaGFzIHByb3BlcnRpZXM6IHRleHQsIHR5cGUsIGxpbmUsIGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGUgbGluZVxuLy8gKHNvIHdlIGNhbiBpZ25vcmUgdGFicyksIHRva2VuIGNoYW5uZWwsIGluZGV4LCBhbmQgc291cmNlIGZyb20gd2hpY2hcbi8vIHdlIG9idGFpbmVkIHRoaXMgdG9rZW4uXG5cbmZ1bmN0aW9uIFRva2VuKCkge1xuXHR0aGlzLnNvdXJjZSA9IG51bGw7XG5cdHRoaXMudHlwZSA9IG51bGw7IC8vIHRva2VuIHR5cGUgb2YgdGhlIHRva2VuXG5cdHRoaXMuY2hhbm5lbCA9IG51bGw7IC8vIFRoZSBwYXJzZXIgaWdub3JlcyBldmVyeXRoaW5nIG5vdCBvbiBERUZBVUxUX0NIQU5ORUxcblx0dGhpcy5zdGFydCA9IG51bGw7IC8vIG9wdGlvbmFsOyByZXR1cm4gLTEgaWYgbm90IGltcGxlbWVudGVkLlxuXHR0aGlzLnN0b3AgPSBudWxsOyAvLyBvcHRpb25hbDsgcmV0dXJuIC0xIGlmIG5vdCBpbXBsZW1lbnRlZC5cblx0dGhpcy50b2tlbkluZGV4ID0gbnVsbDsgLy8gZnJvbSAwLi5uLTEgb2YgdGhlIHRva2VuIG9iamVjdCBpbiB0aGUgaW5wdXQgc3RyZWFtXG5cdHRoaXMubGluZSA9IG51bGw7IC8vIGxpbmU9MS4ubiBvZiB0aGUgMXN0IGNoYXJhY3RlclxuXHR0aGlzLmNvbHVtbiA9IG51bGw7IC8vIGJlZ2lubmluZyBvZiB0aGUgbGluZSBhdCB3aGljaCBpdCBvY2N1cnMsIDAuLm4tMVxuXHR0aGlzLl90ZXh0ID0gbnVsbDsgLy8gdGV4dCBvZiB0aGUgdG9rZW4uXG5cdHJldHVybiB0aGlzO1xufVxuXG5Ub2tlbi5JTlZBTElEX1RZUEUgPSAwO1xuXG4vLyBEdXJpbmcgbG9va2FoZWFkIG9wZXJhdGlvbnMsIHRoaXMgXCJ0b2tlblwiIHNpZ25pZmllcyB3ZSBoaXQgcnVsZSBlbmQgQVROIHN0YXRlXG4vLyBhbmQgZGlkIG5vdCBmb2xsb3cgaXQgZGVzcGl0ZSBuZWVkaW5nIHRvLlxuVG9rZW4uRVBTSUxPTiA9IC0yO1xuXG5Ub2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFID0gMTtcblxuVG9rZW4uRU9GID0gLTE7XG5cbi8vIEFsbCB0b2tlbnMgZ28gdG8gdGhlIHBhcnNlciAodW5sZXNzIHNraXAoKSBpcyBjYWxsZWQgaW4gdGhhdCBydWxlKVxuLy8gb24gYSBwYXJ0aWN1bGFyIFwiY2hhbm5lbFwiLiBUaGUgcGFyc2VyIHR1bmVzIHRvIGEgcGFydGljdWxhciBjaGFubmVsXG4vLyBzbyB0aGF0IHdoaXRlc3BhY2UgZXRjLi4uIGNhbiBnbyB0byB0aGUgcGFyc2VyIG9uIGEgXCJoaWRkZW5cIiBjaGFubmVsLlxuXG5Ub2tlbi5ERUZBVUxUX0NIQU5ORUwgPSAwO1xuXG4vLyBBbnl0aGluZyBvbiBkaWZmZXJlbnQgY2hhbm5lbCB0aGFuIERFRkFVTFRfQ0hBTk5FTCBpcyBub3QgcGFyc2VkXG4vLyBieSBwYXJzZXIuXG5cblRva2VuLkhJRERFTl9DSEFOTkVMID0gMTtcblxuLy8gRXhwbGljaXRseSBzZXQgdGhlIHRleHQgZm9yIHRoaXMgdG9rZW4uIElmIHtjb2RlIHRleHR9IGlzIG5vdFxuLy8ge0Bjb2RlIG51bGx9LCB0aGVuIHtAbGluayAvL2dldFRleHR9IHdpbGwgcmV0dXJuIHRoaXMgdmFsdWUgcmF0aGVyIHRoYW5cbi8vIGV4dHJhY3RpbmcgdGhlIHRleHQgZnJvbSB0aGUgaW5wdXQuXG4vL1xuLy8gQHBhcmFtIHRleHQgVGhlIGV4cGxpY2l0IHRleHQgb2YgdGhlIHRva2VuLCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRleHRcbi8vIHNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBpbnB1dCBhbG9uZyB3aXRoIHRoZSBzdGFydCBhbmQgc3RvcCBpbmRleGVzXG4vLyBvZiB0aGUgdG9rZW4uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb2tlbi5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0dGhpcy5fdGV4dCA9IHRleHQ7XG5cdH1cbn0pO1xuXG5Ub2tlbi5wcm90b3R5cGUuZ2V0VG9rZW5Tb3VyY2UgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc291cmNlWzBdO1xufTtcblxuVG9rZW4ucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnNvdXJjZVsxXTtcbn07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApIHtcblx0VG9rZW4uY2FsbCh0aGlzKTtcblx0dGhpcy5zb3VyY2UgPSBzb3VyY2UgIT09IHVuZGVmaW5lZCA/IHNvdXJjZSA6IENvbW1vblRva2VuLkVNUFRZX1NPVVJDRTtcblx0dGhpcy50eXBlID0gdHlwZSAhPT0gdW5kZWZpbmVkID8gdHlwZSA6IG51bGw7XG5cdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWwgIT09IHVuZGVmaW5lZCA/IGNoYW5uZWwgOiBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cdHRoaXMuc3RhcnQgPSBzdGFydCAhPT0gdW5kZWZpbmVkID8gc3RhcnQgOiAtMTtcblx0dGhpcy5zdG9wID0gc3RvcCAhPT0gdW5kZWZpbmVkID8gc3RvcCA6IC0xO1xuXHR0aGlzLnRva2VuSW5kZXggPSAtMTtcblx0aWYgKHRoaXMuc291cmNlWzBdICE9PSBudWxsKSB7XG5cdFx0dGhpcy5saW5lID0gc291cmNlWzBdLmxpbmU7XG5cdFx0dGhpcy5jb2x1bW4gPSBzb3VyY2VbMF0uY29sdW1uO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuY29sdW1uID0gLTE7XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVG9rZW4ucHJvdG90eXBlKTtcbkNvbW1vblRva2VuLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuO1xuXG4vLyBBbiBlbXB0eSB7QGxpbmsgUGFpcn0gd2hpY2ggaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZlxuLy8ge0BsaW5rIC8vc291cmNlfSBmb3IgdG9rZW5zIHRoYXQgZG8gbm90IGhhdmUgYSBzb3VyY2UuXG5Db21tb25Ub2tlbi5FTVBUWV9TT1VSQ0UgPSBbIG51bGwsIG51bGwgXTtcblxuLy8gQ29uc3RydWN0cyBhIG5ldyB7QGxpbmsgQ29tbW9uVG9rZW59IGFzIGEgY29weSBvZiBhbm90aGVyIHtAbGluayBUb2tlbn0uXG4vL1xuLy8gPHA+XG4vLyBJZiB7QGNvZGUgb2xkVG9rZW59IGlzIGFsc28gYSB7QGxpbmsgQ29tbW9uVG9rZW59IGluc3RhbmNlLCB0aGUgbmV3bHlcbi8vIGNvbnN0cnVjdGVkIHRva2VuIHdpbGwgc2hhcmUgYSByZWZlcmVuY2UgdG8gdGhlIHtAbGluayAvL3RleHR9IGZpZWxkIGFuZFxuLy8gdGhlIHtAbGluayBQYWlyfSBzdG9yZWQgaW4ge0BsaW5rIC8vc291cmNlfS4gT3RoZXJ3aXNlLCB7QGxpbmsgLy90ZXh0fSB3aWxsXG4vLyBiZSBhc3NpZ25lZCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vZ2V0VGV4dH0sIGFuZCB7QGxpbmsgLy9zb3VyY2V9XG4vLyB3aWxsIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJlc3VsdCBvZiB7QGxpbmsgVG9rZW4vL2dldFRva2VuU291cmNlfSBhbmRcbi8vIHtAbGluayBUb2tlbi8vZ2V0SW5wdXRTdHJlYW19LjwvcD5cbi8vXG4vLyBAcGFyYW0gb2xkVG9rZW4gVGhlIHRva2VuIHRvIGNvcHkuXG4vL1xuQ29tbW9uVG9rZW4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gbmV3IENvbW1vblRva2VuKHRoaXMuc291cmNlLCB0aGlzLnR5cGUsIHRoaXMuY2hhbm5lbCwgdGhpcy5zdGFydCxcblx0XHRcdHRoaXMuc3RvcCk7XG5cdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5JbmRleDtcblx0dC5saW5lID0gdGhpcy5saW5lO1xuXHR0LmNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR0LnRleHQgPSB0aGlzLnRleHQ7XG5cdHJldHVybiB0O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbW1vblRva2VuLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH1cblx0XHR2YXIgaW5wdXQgPSB0aGlzLmdldElucHV0U3RyZWFtKCk7XG5cdFx0aWYgKGlucHV0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dmFyIG4gPSBpbnB1dC5zaXplO1xuXHRcdGlmICh0aGlzLnN0YXJ0IDwgbiAmJiB0aGlzLnN0b3AgPCBuKSB7XG5cdFx0XHRyZXR1cm4gaW5wdXQuZ2V0VGV4dCh0aGlzLnN0YXJ0LCB0aGlzLnN0b3ApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCI8RU9GPlwiO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcblxuQ29tbW9uVG9rZW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0eHQgPSB0aGlzLnRleHQ7XG5cdGlmICh0eHQgIT09IG51bGwpIHtcblx0XHR0eHQgPSB0eHQucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIikucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIikucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIik7XG5cdH0gZWxzZSB7XG5cdFx0dHh0ID0gXCI8bm8gdGV4dD5cIjtcblx0fVxuXHRyZXR1cm4gXCJbQFwiICsgdGhpcy50b2tlbkluZGV4ICsgXCIsXCIgKyB0aGlzLnN0YXJ0ICsgXCI6XCIgKyB0aGlzLnN0b3AgKyBcIj0nXCIgK1xuXHRcdFx0dHh0ICsgXCInLDxcIiArIHRoaXMudHlwZSArIFwiPlwiICtcblx0XHRcdCh0aGlzLmNoYW5uZWwgPiAwID8gXCIsY2hhbm5lbD1cIiArIHRoaXMuY2hhbm5lbCA6IFwiXCIpICsgXCIsXCIgK1xuXHRcdFx0dGhpcy5saW5lICsgXCI6XCIgKyB0aGlzLmNvbHVtbiArIFwiXVwiO1xufTtcblxuZXhwb3J0cy5Ub2tlbiA9IFRva2VuO1xuZXhwb3J0cy5Db21tb25Ub2tlbiA9IENvbW1vblRva2VuO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5mdW5jdGlvbiBhcnJheVRvU3RyaW5nKGEpIHtcbiAgICByZXR1cm4gXCJbXCIgKyBhLmpvaW4oXCIsIFwiKSArIFwiXVwiO1xufVxuXG5TdHJpbmcucHJvdG90eXBlLnNlZWQgPSBTdHJpbmcucHJvdG90eXBlLnNlZWQgfHwgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgMzIpKTtcblxuU3RyaW5nLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVtYWluZGVyLCBieXRlcywgaDEsIGgxYiwgYzEsIGMxYiwgYzIsIGMyYiwgazEsIGksXG4gICAgICAgIGtleSA9IHRoaXMudG9TdHJpbmcoKTtcblxuICAgIHJlbWFpbmRlciA9IGtleS5sZW5ndGggJiAzOyAvLyBrZXkubGVuZ3RoICUgNFxuICAgIGJ5dGVzID0ga2V5Lmxlbmd0aCAtIHJlbWFpbmRlcjtcbiAgICBoMSA9IFN0cmluZy5wcm90b3R5cGUuc2VlZDtcbiAgICBjMSA9IDB4Y2M5ZTJkNTE7XG4gICAgYzIgPSAweDFiODczNTkzO1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBieXRlcykge1xuICAgICAgICBrMSA9XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZikpIHxcbiAgICAgICAgICAgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDgpIHxcbiAgICAgICAgICAgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNCk7XG4gICAgICAgICsraTtcblxuICAgICAgICBrMSA9ICgoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuICAgICAgICBrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcbiAgICAgICAgazEgPSAoKCgoazEgJiAweGZmZmYpICogYzIpICsgKCgoKGsxID4+PiAxNikgKiBjMikgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblxuICAgICAgICBoMSBePSBrMTtcbiAgICAgICAgaDEgPSAoaDEgPDwgMTMpIHwgKGgxID4+PiAxOSk7XG4gICAgICAgIGgxYiA9ICgoKChoMSAmIDB4ZmZmZikgKiA1KSArICgoKChoMSA+Pj4gMTYpICogNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgaDEgPSAoKChoMWIgJiAweGZmZmYpICsgMHg2YjY0KSArICgoKChoMWIgPj4+IDE2KSArIDB4ZTY1NCkgJiAweGZmZmYpIDw8IDE2KSk7XG4gICAgfVxuXG4gICAgazEgPSAwO1xuXG4gICAgc3dpdGNoIChyZW1haW5kZXIpIHtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBrMSBePSAoa2V5LmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZik7XG5cbiAgICAgICAgICAgIGsxID0gKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgICAgICAgICAgazEgPSAoazEgPDwgMTUpIHwgKGsxID4+PiAxNyk7XG4gICAgICAgICAgICBrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgICAgIGgxIF49IGsxO1xuICAgIH1cblxuICAgIGgxIF49IGtleS5sZW5ndGg7XG5cbiAgICBoMSBePSBoMSA+Pj4gMTY7XG4gICAgaDEgPSAoKChoMSAmIDB4ZmZmZikgKiAweDg1ZWJjYTZiKSArICgoKChoMSA+Pj4gMTYpICogMHg4NWViY2E2YikgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgIGgxIF49IGgxID4+PiAxMztcbiAgICBoMSA9ICgoKChoMSAmIDB4ZmZmZikgKiAweGMyYjJhZTM1KSArICgoKChoMSA+Pj4gMTYpICogMHhjMmIyYWUzNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICBoMSBePSBoMSA+Pj4gMTY7XG5cbiAgICByZXR1cm4gaDEgPj4+IDA7XG59O1xuXG5mdW5jdGlvbiBzdGFuZGFyZEVxdWFsc0Z1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYS5lcXVhbHMoYik7XG59XG5cbmZ1bmN0aW9uIHN0YW5kYXJkSGFzaENvZGVGdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuaGFzaENvZGUoKTtcbn1cblxuZnVuY3Rpb24gU2V0KGhhc2hGdW5jdGlvbiwgZXF1YWxzRnVuY3Rpb24pIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmhhc2hGdW5jdGlvbiA9IGhhc2hGdW5jdGlvbiB8fCBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb247XG4gICAgdGhpcy5lcXVhbHNGdW5jdGlvbiA9IGVxdWFsc0Z1bmN0aW9uIHx8IHN0YW5kYXJkRXF1YWxzRnVuY3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiaGFzaF9cIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsID0gbCArIHRoaXMuZGF0YVtrZXldLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICB9XG59KTtcblxuU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgaGFzaCA9IHRoaXMuaGFzaEZ1bmN0aW9uKHZhbHVlKTtcbiAgICB2YXIga2V5ID0gXCJoYXNoX1wiICsgaGFzaDtcbiAgICBpZiAoa2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5kYXRhW2tleV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbih2YWx1ZSwgdmFsdWVzW2ldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0gPSBbdmFsdWVdO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufTtcblxuU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmdldCh2YWx1ZSkgIT0gbnVsbDtcbn07XG5cblNldC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2hGdW5jdGlvbih2YWx1ZSk7XG4gICAgdmFyIGtleSA9IFwiaGFzaF9cIiArIGhhc2g7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24odmFsdWUsIHZhbHVlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGwgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihcImhhc2hfXCIpID09PSAwKSB7XG4gICAgICAgICAgICBsID0gbC5jb25jYXQodGhpcy5kYXRhW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsO1xufTtcblxuU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYXJyYXlUb1N0cmluZyh0aGlzLnZhbHVlcygpKTtcbn07XG5cbmZ1bmN0aW9uIEJpdFNldCgpIHtcbiAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuQml0U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbdmFsdWVdID0gdHJ1ZTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGJpdHMgPSB0aGlzO1xuICAgIE9iamVjdC5rZXlzKHNldC5kYXRhKS5tYXAoZnVuY3Rpb24gKGFsdCkge1xuICAgICAgICBiaXRzLmFkZChhbHQpO1xuICAgIH0pO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBkZWxldGUgdGhpcy5kYXRhW3ZhbHVlXTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3ZhbHVlXSA9PT0gdHJ1ZTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5taW5WYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gTWF0aC5taW4uYXBwbHkobnVsbCwgdGhpcy52YWx1ZXMoKSk7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnZhbHVlcygpKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBCaXRTZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzaENvZGUoKSA9PT0gb3RoZXIuaGFzaENvZGUoKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCaXRTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpLmxlbmd0aDtcbiAgICB9XG59KTtcblxuQml0U2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJ7XCIgKyB0aGlzLnZhbHVlcygpLmpvaW4oXCIsIFwiKSArIFwifVwiO1xufTtcblxuZnVuY3Rpb24gTWFwKGhhc2hGdW5jdGlvbiwgZXF1YWxzRnVuY3Rpb24pIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmhhc2hGdW5jdGlvbiA9IGhhc2hGdW5jdGlvbiB8fCBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb247XG4gICAgdGhpcy5lcXVhbHNGdW5jdGlvbiA9IGVxdWFsc0Z1bmN0aW9uIHx8IHN0YW5kYXJkRXF1YWxzRnVuY3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXAucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgZm9yICh2YXIgaGFzaEtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmIChoYXNoS2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGwgPSBsICsgdGhpcy5kYXRhW2hhc2hLZXldLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICB9XG59KTtcblxuTWFwLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBoYXNoS2V5ID0gXCJoYXNoX1wiICsgdGhpcy5oYXNoRnVuY3Rpb24oa2V5KTtcbiAgICBpZiAoaGFzaEtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmRhdGFbaGFzaEtleV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVxdWFsc0Z1bmN0aW9uKGtleSwgZW50cnkua2V5KSkge1xuICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9sZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVudHJpZXMucHVzaCh7a2V5OmtleSwgdmFsdWU6dmFsdWV9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtoYXNoS2V5XSA9IFt7a2V5OmtleSwgdmFsdWU6dmFsdWV9XTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn07XG5cbk1hcC5wcm90b3R5cGUuY29udGFpbnNLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGhhc2hLZXkgPSBcImhhc2hfXCIgKyB0aGlzLmhhc2hGdW5jdGlvbihrZXkpO1xuICAgIGlmKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGhhc2hLZXkgPSBcImhhc2hfXCIgKyB0aGlzLmhhc2hGdW5jdGlvbihrZXkpO1xuICAgIGlmKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuTWFwLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgbCA9IGwuY29uY2F0KHRoaXMuZGF0YVtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbDtcbn07XG5cblxuTWFwLnByb3RvdHlwZS5nZXRLZXlzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS5rZXk7XG4gICAgfSk7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUudmFsdWU7XG4gICAgfSk7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNzID0gdGhpcy5lbnRyaWVzKCkubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAneycgKyBlbnRyeS5rZXkgKyAnOicgKyBlbnRyeS52YWx1ZSArICd9JztcbiAgICB9KTtcbiAgICByZXR1cm4gJ1snICsgc3Muam9pbihcIiwgXCIpICsgJ10nO1xufTtcblxuXG5mdW5jdGlvbiBBbHREaWN0KCkge1xuICAgIHRoaXMuZGF0YSA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5cbkFsdERpY3QucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgPSBcImstXCIgKyBrZXk7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbkFsdERpY3QucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAga2V5ID0gXCJrLVwiICsga2V5O1xuICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWU7XG59O1xuXG5BbHREaWN0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xuICAgIHJldHVybiBrZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBkYXRhW2tleV07XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBEb3VibGVEaWN0KCkge1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBIYXNoKCkge1xuICAgIHRoaXMuY291bnQgPSAwO1xuICAgIHRoaXMuaGFzaCA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkhhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZS5hcHBseSh2YWx1ZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgICAgIGsgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgayA9IHZhbHVlLmhhc2hDb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnVwZGF0ZUhhc2hDb2RlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsgPSBrICogMHhDQzlFMkQ1MTtcbiAgICAgICAgICAgIGsgPSAoayA8PCAxNSkgfCAoayA+Pj4gKDMyIC0gMTUpKTtcbiAgICAgICAgICAgIGsgPSBrICogMHgxQjg3MzU5MztcbiAgICAgICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmNvdW50ICsgMTtcbiAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5oYXNoIF4gaztcbiAgICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCAxMykgfCAoaGFzaCA+Pj4gKDMyIC0gMTMpKTtcbiAgICAgICAgICAgIGhhc2ggPSBoYXNoICogNSArIDB4RTY1NDZCNjQ7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSBoYXNoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5IYXNoLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2ggXiAodGhpcy5jb3VudCAqIDQpO1xuICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4+IDE2KTtcbiAgICBoYXNoID0gaGFzaCAqIDB4ODVFQkNBNkI7XG4gICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+Pj4gMTMpO1xuICAgIGhhc2ggPSBoYXNoICogMHhDMkIyQUUzNTtcbiAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+PiAxNik7XG4gICAgcmV0dXJuIGhhc2g7XG59XG5cbmZ1bmN0aW9uIGhhc2hTdHVmZigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgaGFzaC51cGRhdGUuYXBwbHkoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn1cblxuRG91YmxlRGljdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgZCA9IHRoaXNbYV0gfHwgbnVsbDtcbiAgICByZXR1cm4gZCA9PT0gbnVsbCA/IG51bGwgOiAoZFtiXSB8fCBudWxsKTtcbn07XG5cbkRvdWJsZURpY3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBvKSB7XG4gICAgdmFyIGQgPSB0aGlzW2FdIHx8IG51bGw7XG4gICAgaWYgKGQgPT09IG51bGwpIHtcbiAgICAgICAgZCA9IHt9O1xuICAgICAgICB0aGlzW2FdID0gZDtcbiAgICB9XG4gICAgZFtiXSA9IG87XG59O1xuXG5cbmZ1bmN0aW9uIGVzY2FwZVdoaXRlc3BhY2UocywgZXNjYXBlU3BhY2VzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIilcbiAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKVxuICAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpO1xuICAgIGlmIChlc2NhcGVTcGFjZXMpIHtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvIC9nLCBcIlxcdTAwQjdcIik7XG4gICAgfVxuICAgIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiB0aXRsZUNhc2Uoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHdcXFMqL2csIGZ1bmN0aW9uICh0eHQpIHtcbiAgICAgICAgcmV0dXJuIHR4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSk7XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhLCBiKVxue1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSB8fCAhQXJyYXkuaXNBcnJheShiKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhID09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYVtpXSA9PSBiW2ldKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICghYVtpXS5lcXVhbHMoYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0cy5IYXNoID0gSGFzaDtcbmV4cG9ydHMuU2V0ID0gU2V0O1xuZXhwb3J0cy5NYXAgPSBNYXA7XG5leHBvcnRzLkJpdFNldCA9IEJpdFNldDtcbmV4cG9ydHMuQWx0RGljdCA9IEFsdERpY3Q7XG5leHBvcnRzLkRvdWJsZURpY3QgPSBEb3VibGVEaWN0O1xuZXhwb3J0cy5oYXNoU3R1ZmYgPSBoYXNoU3R1ZmY7XG5leHBvcnRzLmVzY2FwZVdoaXRlc3BhY2UgPSBlc2NhcGVXaGl0ZXNwYWNlO1xuZXhwb3J0cy5hcnJheVRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcbmV4cG9ydHMudGl0bGVDYXNlID0gdGl0bGVDYXNlO1xuZXhwb3J0cy5lcXVhbEFycmF5cyA9IGVxdWFsQXJyYXlzO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgTEwxQW5hbHl6ZXIgPSByZXF1aXJlKCcuLy4uL0xMMUFuYWx5emVyJykuTEwxQW5hbHl6ZXI7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEFUTihncmFtbWFyVHlwZSAsIG1heFRva2VuVHlwZSkge1xuXG4gICAgLy8gVXNlZCBmb3IgcnVudGltZSBkZXNlcmlhbGl6YXRpb24gb2YgQVROcyBmcm9tIHN0cmluZ3MvLy9cbiAgICAvLyBUaGUgdHlwZSBvZiB0aGUgQVROLlxuICAgIHRoaXMuZ3JhbW1hclR5cGUgPSBncmFtbWFyVHlwZTtcbiAgICAvLyBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYW55IHN5bWJvbCByZWNvZ25pemVkIGJ5IGEgdHJhbnNpdGlvbiBpbiB0aGUgQVROLlxuICAgIHRoaXMubWF4VG9rZW5UeXBlID0gbWF4VG9rZW5UeXBlO1xuICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgLy8gRWFjaCBzdWJydWxlL3J1bGUgaXMgYSBkZWNpc2lvbiBwb2ludCBhbmQgd2UgbXVzdCB0cmFjayB0aGVtIHNvIHdlXG4gICAgLy8gIGNhbiBnbyBiYWNrIGxhdGVyIGFuZCBidWlsZCBERkEgcHJlZGljdG9ycyBmb3IgdGhlbS4gIFRoaXMgaW5jbHVkZXNcbiAgICAvLyAgYWxsIHRoZSBydWxlcywgc3VicnVsZXMsIG9wdGlvbmFsIGJsb2NrcywgKCkrLCAoKSogZXRjLi4uXG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUgPSBbXTtcbiAgICAvLyBNYXBzIGZyb20gcnVsZSBpbmRleCB0byBzdGFydGluZyBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdGFydFN0YXRlID0gW107XG4gICAgLy8gTWFwcyBmcm9tIHJ1bGUgaW5kZXggdG8gc3RvcCBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdG9wU3RhdGUgPSBudWxsO1xuICAgIHRoaXMubW9kZU5hbWVUb1N0YXJ0U3RhdGUgPSB7fTtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBtYXBzIHRoZSBydWxlIGluZGV4IHRvIHRoZSByZXN1bHRpbmcgdG9rZW4gdHlwZS5cbiAgICAvLyBGb3IgcGFyc2VyIEFUTnMsIHRoaXMgbWFwcyB0aGUgcnVsZSBpbmRleCB0byB0aGUgZ2VuZXJhdGVkIGJ5cGFzcyB0b2tlblxuICAgIC8vIHR5cGUgaWYgdGhlXG4gICAgLy8ge0BsaW5rIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMvL2lzR2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnN9XG4gICAgLy8gZGVzZXJpYWxpemF0aW9uIG9wdGlvbiB3YXMgc3BlY2lmaWVkOyBvdGhlcndpc2UsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMucnVsZVRvVG9rZW5UeXBlID0gbnVsbDtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBpcyBhbiBhcnJheSBvZiB7QGxpbmsgTGV4ZXJBY3Rpb259IG9iamVjdHMgd2hpY2ggbWF5XG4gICAgLy8gYmUgcmVmZXJlbmNlZCBieSBhY3Rpb24gdHJhbnNpdGlvbnMgaW4gdGhlIEFUTi5cbiAgICB0aGlzLmxleGVyQWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5tb2RlVG9TdGFydFN0YXRlID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIHZhbGlkIHRva2VucyB0aGF0IGNhbiBvY2N1ciBzdGFydGluZyBpbiBzdGF0ZSB7QGNvZGUgc30uXG4vLyAgSWYge0Bjb2RlIGN0eH0gaXMgbnVsbCwgdGhlIHNldCBvZiB0b2tlbnMgd2lsbCBub3QgaW5jbHVkZSB3aGF0IGNhbiBmb2xsb3dcbi8vICB0aGUgcnVsZSBzdXJyb3VuZGluZyB7QGNvZGUgc30uIEluIG90aGVyIHdvcmRzLCB0aGUgc2V0IHdpbGwgYmVcbi8vICByZXN0cmljdGVkIHRvIHRva2VucyByZWFjaGFibGUgc3RheWluZyB3aXRoaW4ge0Bjb2RlIHN9J3MgcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc0luQ29udGV4dCA9IGZ1bmN0aW9uKHMsIGN0eCkge1xuICAgIHZhciBhbmFsID0gbmV3IExMMUFuYWx5emVyKHRoaXMpO1xuICAgIHJldHVybiBhbmFsLkxPT0socywgbnVsbCwgY3R4KTtcbn07XG5cbi8vIENvbXB1dGUgdGhlIHNldCBvZiB2YWxpZCB0b2tlbnMgdGhhdCBjYW4gb2NjdXIgc3RhcnRpbmcgaW4ge0Bjb2RlIHN9IGFuZFxuLy8gc3RheWluZyBpbiBzYW1lIHJ1bGUuIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgaW4gc2V0IGlmIHdlIHJlYWNoIGVuZCBvZlxuLy8gcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc05vQ29udGV4dCA9IGZ1bmN0aW9uKHMpIHtcbiAgICBpZiAocy5uZXh0VG9rZW5XaXRoaW5SdWxlICE9PSBudWxsICkge1xuICAgICAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xuICAgIH1cbiAgICBzLm5leHRUb2tlbldpdGhpblJ1bGUgPSB0aGlzLm5leHRUb2tlbnNJbkNvbnRleHQocywgbnVsbCk7XG4gICAgcy5uZXh0VG9rZW5XaXRoaW5SdWxlLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xufTtcblxuQVROLnByb3RvdHlwZS5uZXh0VG9rZW5zID0gZnVuY3Rpb24ocywgY3R4KSB7XG4gICAgaWYgKCBjdHg9PT11bmRlZmluZWQgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbnNOb0NvbnRleHQocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2Vuc0luQ29udGV4dChzLCBjdHgpO1xuICAgIH1cbn07XG5cbkFUTi5wcm90b3R5cGUuYWRkU3RhdGUgPSBmdW5jdGlvbiggc3RhdGUpIHtcbiAgICBpZiAoIHN0YXRlICE9PSBudWxsICkge1xuICAgICAgICBzdGF0ZS5hdG4gPSB0aGlzO1xuICAgICAgICBzdGF0ZS5zdGF0ZU51bWJlciA9IHRoaXMuc3RhdGVzLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZXMucHVzaChzdGF0ZSk7XG59O1xuXG5BVE4ucHJvdG90eXBlLnJlbW92ZVN0YXRlID0gZnVuY3Rpb24oIHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZXNbc3RhdGUuc3RhdGVOdW1iZXJdID0gbnVsbDsgLy8ganVzdCBmcmVlIG1lbSwgZG9uJ3Qgc2hpZnQgc3RhdGVzIGluIGxpc3Rcbn07XG5cbkFUTi5wcm90b3R5cGUuZGVmaW5lRGVjaXNpb25TdGF0ZSA9IGZ1bmN0aW9uKCBzKSB7XG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUucHVzaChzKTtcbiAgICBzLmRlY2lzaW9uID0gdGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoLTE7XG4gICAgcmV0dXJuIHMuZGVjaXNpb247XG59O1xuXG5BVE4ucHJvdG90eXBlLmdldERlY2lzaW9uU3RhdGUgPSBmdW5jdGlvbiggZGVjaXNpb24pIHtcbiAgICBpZiAodGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoPT09MCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWNpc2lvblRvU3RhdGVbZGVjaXNpb25dO1xuICAgIH1cbn07XG5cbi8vIENvbXB1dGVzIHRoZSBzZXQgb2YgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgQVROIHN0YXRlIG51bWJlclxuLy8ge0Bjb2RlIHN0YXRlTnVtYmVyfSBpbiB0aGUgc3BlY2lmaWVkIGZ1bGwge0Bjb2RlIGNvbnRleHR9LiBUaGlzIG1ldGhvZFxuLy8gY29uc2lkZXJzIHRoZSBjb21wbGV0ZSBwYXJzZXIgY29udGV4dCwgYnV0IGRvZXMgbm90IGV2YWx1YXRlIHNlbWFudGljXG4vLyBwcmVkaWNhdGVzIChpLmUuIGFsbCBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgY2FsY3VsYXRpb24gYXJlXG4vLyBhc3N1bWVkIHRydWUpLiBJZiBhIHBhdGggaW4gdGhlIEFUTiBleGlzdHMgZnJvbSB0aGUgc3RhcnRpbmcgc3RhdGUgdG8gdGhlXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0gb2YgdGhlIG91dGVybW9zdCBjb250ZXh0IHdpdGhvdXQgbWF0Y2hpbmcgYW55XG4vLyBzeW1ib2xzLCB7QGxpbmsgVG9rZW4vL0VPRn0gaXMgYWRkZWQgdG8gdGhlIHJldHVybmVkIHNldC5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY29udGV4dH0gaXMge0Bjb2RlIG51bGx9LCBpdCBpcyB0cmVhdGVkIGFzXG4vLyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL0VNUFRZfS48L3A+XG4vL1xuLy8gQHBhcmFtIHN0YXRlTnVtYmVyIHRoZSBBVE4gc3RhdGUgbnVtYmVyXG4vLyBAcGFyYW0gY29udGV4dCB0aGUgZnVsbCBwYXJzZSBjb250ZXh0XG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgcG90ZW50aWFsbHkgdmFsaWQgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgdGhlXG4vLyBzcGVjaWZpZWQgc3RhdGUgaW4gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxuLy8gQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIEFUTiBkb2VzIG5vdCBjb250YWluIGEgc3RhdGUgd2l0aFxuLy8gbnVtYmVyIHtAY29kZSBzdGF0ZU51bWJlcn1cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcblxuQVROLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCBzdGF0ZU51bWJlciwgY3R4ICkge1xuICAgIGlmICggc3RhdGVOdW1iZXIgPCAwIHx8IHN0YXRlTnVtYmVyID49IHRoaXMuc3RhdGVzLmxlbmd0aCApIHtcbiAgICAgICAgdGhyb3coXCJJbnZhbGlkIHN0YXRlIG51bWJlci5cIik7XG4gICAgfVxuICAgIHZhciBzID0gdGhpcy5zdGF0ZXNbc3RhdGVOdW1iZXJdO1xuICAgIHZhciBmb2xsb3dpbmcgPSB0aGlzLm5leHRUb2tlbnMocyk7XG4gICAgaWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgcmV0dXJuIGZvbGxvd2luZztcbiAgICB9XG4gICAgdmFyIGV4cGVjdGVkID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgZXhwZWN0ZWQuYWRkU2V0KGZvbGxvd2luZyk7XG4gICAgZXhwZWN0ZWQucmVtb3ZlT25lKFRva2VuLkVQU0lMT04pO1xuICAgIHdoaWxlIChjdHggIT09IG51bGwgJiYgY3R4Lmludm9raW5nU3RhdGUgPj0gMCAmJiBmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgdmFyIGludm9raW5nU3RhdGUgPSB0aGlzLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG4gICAgICAgIHZhciBydCA9IGludm9raW5nU3RhdGUudHJhbnNpdGlvbnNbMF07XG4gICAgICAgIGZvbGxvd2luZyA9IHRoaXMubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG4gICAgICAgIGV4cGVjdGVkLmFkZFNldChmb2xsb3dpbmcpO1xuICAgICAgICBleHBlY3RlZC5yZW1vdmVPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgIGN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgfVxuICAgIGlmIChmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgZXhwZWN0ZWQuYWRkT25lKFRva2VuLkVPRik7XG4gICAgfVxuICAgIHJldHVybiBleHBlY3RlZDtcbn07XG5cbkFUTi5JTlZBTElEX0FMVF9OVU1CRVIgPSAwO1xuXG5leHBvcnRzLkFUTiA9IEFUTjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIEEgdHVwbGU6IChBVE4gc3RhdGUsIHByZWRpY3RlZCBhbHQsIHN5bnRhY3RpYywgc2VtYW50aWMgY29udGV4dCkuXG4vLyAgVGhlIHN5bnRhY3RpYyBjb250ZXh0IGlzIGEgZ3JhcGgtc3RydWN0dXJlZCBzdGFjayBub2RlIHdob3NlXG4vLyAgcGF0aChzKSB0byB0aGUgcm9vdCBpcyB0aGUgcnVsZSBpbnZvY2F0aW9uKHMpXG4vLyAgY2hhaW4gdXNlZCB0byBhcnJpdmUgYXQgdGhlIHN0YXRlLiAgVGhlIHNlbWFudGljIGNvbnRleHQgaXNcbi8vICB0aGUgdHJlZSBvZiBzZW1hbnRpYyBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGJlZm9yZSByZWFjaGluZ1xuLy8gIGFuIEFUTiBzdGF0ZS5cbi8vL1xuXG52YXIgRGVjaXNpb25TdGF0ZSA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKS5EZWNpc2lvblN0YXRlO1xudmFyIFNlbWFudGljQ29udGV4dCA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuU2VtYW50aWNDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKFwiLi4vVXRpbHNcIikuSGFzaDtcblxuXG5mdW5jdGlvbiBjaGVja1BhcmFtcyhwYXJhbXMsIGlzQ2ZnKSB7XG5cdGlmKHBhcmFtcz09PW51bGwpIHtcblx0XHR2YXIgcmVzdWx0ID0geyBzdGF0ZTpudWxsLCBhbHQ6bnVsbCwgY29udGV4dDpudWxsLCBzZW1hbnRpY0NvbnRleHQ6bnVsbCB9O1xuXHRcdGlmKGlzQ2ZnKSB7XG5cdFx0XHRyZXN1bHQucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSAwO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9IGVsc2Uge1xuXHRcdHZhciBwcm9wcyA9IHt9O1xuXHRcdHByb3BzLnN0YXRlID0gcGFyYW1zLnN0YXRlIHx8IG51bGw7XG5cdFx0cHJvcHMuYWx0ID0gKHBhcmFtcy5hbHQgPT09IHVuZGVmaW5lZCkgPyBudWxsIDogcGFyYW1zLmFsdDtcblx0XHRwcm9wcy5jb250ZXh0ID0gcGFyYW1zLmNvbnRleHQgfHwgbnVsbDtcblx0XHRwcm9wcy5zZW1hbnRpY0NvbnRleHQgPSBwYXJhbXMuc2VtYW50aWNDb250ZXh0IHx8IG51bGw7XG5cdFx0aWYoaXNDZmcpIHtcblx0XHRcdHByb3BzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gcGFyYW1zLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0IHx8IDA7XG5cdFx0XHRwcm9wcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCA9IHBhcmFtcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCB8fCBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BzO1xuXHR9XG59XG5cbmZ1bmN0aW9uIEFUTkNvbmZpZyhwYXJhbXMsIGNvbmZpZykge1xuXHR0aGlzLmNoZWNrQ29udGV4dChwYXJhbXMsIGNvbmZpZyk7XG5cdHBhcmFtcyA9IGNoZWNrUGFyYW1zKHBhcmFtcyk7XG5cdGNvbmZpZyA9IGNoZWNrUGFyYW1zKGNvbmZpZywgdHJ1ZSk7XG4gICAgLy8gVGhlIEFUTiBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLy8vXG4gICAgdGhpcy5zdGF0ZSA9IHBhcmFtcy5zdGF0ZSE9PW51bGwgPyBwYXJhbXMuc3RhdGUgOiBjb25maWcuc3RhdGU7XG4gICAgLy8gV2hhdCBhbHQgKG9yIGxleGVyIHJ1bGUpIGlzIHByZWRpY3RlZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24vLy9cbiAgICB0aGlzLmFsdCA9IHBhcmFtcy5hbHQhPT1udWxsID8gcGFyYW1zLmFsdCA6IGNvbmZpZy5hbHQ7XG4gICAgLy8gVGhlIHN0YWNrIG9mIGludm9raW5nIHN0YXRlcyBsZWFkaW5nIHRvIHRoZSBydWxlL3N0YXRlcyBhc3NvY2lhdGVkXG4gICAgLy8gIHdpdGggdGhpcyBjb25maWcuICBXZSB0cmFjayBvbmx5IHRob3NlIGNvbnRleHRzIHB1c2hlZCBkdXJpbmdcbiAgICAvLyAgZXhlY3V0aW9uIG9mIHRoZSBBVE4gc2ltdWxhdG9yLlxuICAgIHRoaXMuY29udGV4dCA9IHBhcmFtcy5jb250ZXh0IT09bnVsbCA/IHBhcmFtcy5jb250ZXh0IDogY29uZmlnLmNvbnRleHQ7XG4gICAgdGhpcy5zZW1hbnRpY0NvbnRleHQgPSBwYXJhbXMuc2VtYW50aWNDb250ZXh0IT09bnVsbCA/IHBhcmFtcy5zZW1hbnRpY0NvbnRleHQgOlxuICAgICAgICAoY29uZmlnLnNlbWFudGljQ29udGV4dCE9PW51bGwgPyBjb25maWcuc2VtYW50aWNDb250ZXh0IDogU2VtYW50aWNDb250ZXh0Lk5PTkUpO1xuICAgIC8vIFdlIGNhbm5vdCBleGVjdXRlIHByZWRpY2F0ZXMgZGVwZW5kZW50IHVwb24gbG9jYWwgY29udGV4dCB1bmxlc3NcbiAgICAvLyB3ZSBrbm93IGZvciBzdXJlIHdlIGFyZSBpbiB0aGUgY29ycmVjdCBjb250ZXh0LiBCZWNhdXNlIHRoZXJlIGlzXG4gICAgLy8gbm8gd2F5IHRvIGRvIHRoaXMgZWZmaWNpZW50bHksIHdlIHNpbXBseSBjYW5ub3QgZXZhbHVhdGVcbiAgICAvLyBkZXBlbmRlbnQgcHJlZGljYXRlcyB1bmxlc3Mgd2UgYXJlIGluIHRoZSBydWxlIHRoYXQgaW5pdGlhbGx5XG4gICAgLy8gaW52b2tlcyB0aGUgQVROIHNpbXVsYXRvci5cbiAgICAvL1xuICAgIC8vIGNsb3N1cmUoKSB0cmFja3MgdGhlIGRlcHRoIG9mIGhvdyBmYXIgd2UgZGlwIGludG8gdGhlXG4gICAgLy8gb3V0ZXIgY29udGV4dDogZGVwdGggJmd0OyAwLiAgTm90ZSB0aGF0IGl0IG1heSBub3QgYmUgdG90YWxseVxuICAgIC8vIGFjY3VyYXRlIGRlcHRoIHNpbmNlIEkgZG9uJ3QgZXZlciBkZWNyZW1lbnQuIFRPRE86IG1ha2UgaXQgYSBib29sZWFuIHRoZW5cbiAgICB0aGlzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gY29uZmlnLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0O1xuICAgIHRoaXMucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSBjb25maWcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuY2hlY2tDb250ZXh0ID0gZnVuY3Rpb24ocGFyYW1zLCBjb25maWcpIHtcblx0aWYoKHBhcmFtcy5jb250ZXh0PT09bnVsbCB8fCBwYXJhbXMuY29udGV4dD09PXVuZGVmaW5lZCkgJiZcblx0XHRcdChjb25maWc9PT1udWxsIHx8IGNvbmZpZy5jb250ZXh0PT09bnVsbCB8fCBjb25maWcuY29udGV4dD09PXVuZGVmaW5lZCkpIHtcblx0XHR0aGlzLmNvbnRleHQgPSBudWxsO1xuXHR9XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cblxuQVROQ29uZmlnLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnN0YXRlLnN0YXRlTnVtYmVyLCB0aGlzLmFsdCwgdGhpcy5jb250ZXh0LCB0aGlzLnNlbWFudGljQ29udGV4dCk7XG59O1xuXG4vLyBBbiBBVE4gY29uZmlndXJhdGlvbiBpcyBlcXVhbCB0byBhbm90aGVyIGlmIGJvdGggaGF2ZVxuLy8gIHRoZSBzYW1lIHN0YXRlLCB0aGV5IHByZWRpY3QgdGhlIHNhbWUgYWx0ZXJuYXRpdmUsIGFuZFxuLy8gIHN5bnRhY3RpYy9zZW1hbnRpYyBjb250ZXh0cyBhcmUgdGhlIHNhbWUuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGUuc3RhdGVOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuYWx0PT09b3RoZXIuYWx0ICYmXG4gICAgICAgICAgICAodGhpcy5jb250ZXh0PT09bnVsbCA/IG90aGVyLmNvbnRleHQ9PT1udWxsIDogdGhpcy5jb250ZXh0LmVxdWFscyhvdGhlci5jb250ZXh0KSkgJiZcbiAgICAgICAgICAgIHRoaXMuc2VtYW50aWNDb250ZXh0LmVxdWFscyhvdGhlci5zZW1hbnRpY0NvbnRleHQpICYmXG4gICAgICAgICAgICB0aGlzLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkPT09b3RoZXIucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQ7XG4gICAgfVxufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlRm9yQ29uZmlnU2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuICAgIGhhc2gudXBkYXRlKHRoaXMuc3RhdGUuc3RhdGVOdW1iZXIsIHRoaXMuYWx0LCB0aGlzLnNlbWFudGljQ29udGV4dCk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzRm9yQ29uZmlnU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGUuc3RhdGVOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuYWx0PT09b3RoZXIuYWx0ICYmXG4gICAgICAgICAgICB0aGlzLnNlbWFudGljQ29udGV4dC5lcXVhbHMob3RoZXIuc2VtYW50aWNDb250ZXh0KTtcbiAgICB9XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCIoXCIgKyB0aGlzLnN0YXRlICsgXCIsXCIgKyB0aGlzLmFsdCArXG4gICAgICAgICh0aGlzLmNvbnRleHQhPT1udWxsID8gXCIsW1wiICsgdGhpcy5jb250ZXh0LnRvU3RyaW5nKCkgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgKHRoaXMuc2VtYW50aWNDb250ZXh0ICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSA/XG4gICAgICAgICAgICAgICAgKFwiLFwiICsgdGhpcy5zZW1hbnRpY0NvbnRleHQudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgKHRoaXMucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+MCA/XG4gICAgICAgICAgICAgICAgKFwiLHVwPVwiICsgdGhpcy5yZWFjaGVzSW50b091dGVyQ29udGV4dClcbiAgICAgICAgICAgICAgICA6IFwiXCIpICsgXCIpXCI7XG59O1xuXG5cbmZ1bmN0aW9uIExleGVyQVROQ29uZmlnKHBhcmFtcywgY29uZmlnKSB7XG5cdEFUTkNvbmZpZy5jYWxsKHRoaXMsIHBhcmFtcywgY29uZmlnKTtcblxuICAgIC8vIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmllbGQgZm9yIHtAbGluayAvL2dldExleGVyQWN0aW9uRXhlY3V0b3J9LlxuXHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IHBhcmFtcy5sZXhlckFjdGlvbkV4ZWN1dG9yIHx8IG51bGw7XG4gICAgdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID0gbGV4ZXJBY3Rpb25FeGVjdXRvciB8fCAoY29uZmlnIT09bnVsbCA/IGNvbmZpZy5sZXhlckFjdGlvbkV4ZWN1dG9yIDogbnVsbCk7XG4gICAgdGhpcy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gPSBjb25maWchPT1udWxsID8gdGhpcy5jaGVja05vbkdyZWVkeURlY2lzaW9uKGNvbmZpZywgdGhpcy5zdGF0ZSkgOiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5Db25maWcucHJvdG90eXBlKTtcbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQVROQ29uZmlnO1xuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5zdGF0ZS5zdGF0ZU51bWJlciwgdGhpcy5hbHQsIHRoaXMuY29udGV4dCwgdGhpcy5zZW1hbnRpY0NvbnRleHQsIHRoaXMucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uLCB0aGlzLmxleGVyQWN0aW9uRXhlY3V0b3IpO1xufTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG4gICAgICAgICAgICAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckFUTkNvbmZpZyAmJlxuICAgICAgICAgICAgdGhpcy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gPT0gb3RoZXIucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uICYmXG4gICAgICAgICAgICAodGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID8gdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yLmVxdWFscyhvdGhlci5sZXhlckFjdGlvbkV4ZWN1dG9yKSA6ICFvdGhlci5sZXhlckFjdGlvbkV4ZWN1dG9yKSAmJlxuICAgICAgICAgICAgQVROQ29uZmlnLnByb3RvdHlwZS5lcXVhbHMuY2FsbCh0aGlzLCBvdGhlcikpO1xufTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlRm9yQ29uZmlnU2V0ID0gTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlO1xuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzRm9yQ29uZmlnU2V0ID0gTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFscztcblxuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuY2hlY2tOb25HcmVlZHlEZWNpc2lvbiA9IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHNvdXJjZS5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gfHxcbiAgICAgICAgKHRhcmdldCBpbnN0YW5jZW9mIERlY2lzaW9uU3RhdGUpICYmIHRhcmdldC5ub25HcmVlZHk7XG59O1xuXG5leHBvcnRzLkFUTkNvbmZpZyA9IEFUTkNvbmZpZztcbmV4cG9ydHMuTGV4ZXJBVE5Db25maWcgPSBMZXhlckFUTkNvbmZpZzsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vL1xuLy8gU3BlY2lhbGl6ZWQge0BsaW5rIFNldH17QGNvZGUgPH17QGxpbmsgQVROQ29uZmlnfXtAY29kZSA+fSB0aGF0IGNhbiB0cmFja1xuLy8gaW5mbyBhYm91dCB0aGUgc2V0LCB3aXRoIHN1cHBvcnQgZm9yIGNvbWJpbmluZyBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zIHVzaW5nIGFcbi8vIGdyYXBoLXN0cnVjdHVyZWQgc3RhY2suXG4vLy9cblxudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIFV0aWxzID0gcmVxdWlyZSgnLi8uLi9VdGlscycpO1xudmFyIEhhc2ggPSBVdGlscy5IYXNoO1xudmFyIFNldCA9IFV0aWxzLlNldDtcbnZhciBTZW1hbnRpY0NvbnRleHQgPSByZXF1aXJlKCcuL1NlbWFudGljQ29udGV4dCcpLlNlbWFudGljQ29udGV4dDtcbnZhciBtZXJnZSA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5tZXJnZTtcblxuZnVuY3Rpb24gaGFzaEFUTkNvbmZpZyhjKSB7XG5cdHJldHVybiBjLmhhc2hDb2RlRm9yQ29uZmlnU2V0KCk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsQVROQ29uZmlncyhhLCBiKSB7XG5cdGlmICggYT09PWIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIGE9PT1udWxsIHx8IGI9PT1udWxsICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlXG4gICAgICAgcmV0dXJuIGEuZXF1YWxzRm9yQ29uZmlnU2V0KGIpO1xuIH1cblxuXG5mdW5jdGlvbiBBVE5Db25maWdTZXQoZnVsbEN0eCkge1xuXHQvL1xuXHQvLyBUaGUgcmVhc29uIHRoYXQgd2UgbmVlZCB0aGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgaGFzaCBtYXAgdG8gdXNlXG5cdC8vIHRoZSBzdGFuZGFyZCBoYXNoIGNvZGUgYW5kIGVxdWFscy4gV2UgbmVlZCBhbGwgY29uZmlndXJhdGlvbnMgd2l0aCB0aGVcblx0Ly8gc2FtZVxuXHQvLyB7QGNvZGUgKHMsaSxfLHNlbWN0eCl9IHRvIGJlIGVxdWFsLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGtleSBlZmZlY3RpdmVseVxuXHQvLyBkb3VibGVzXG5cdC8vIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggQVROQ29uZmlncy4gVGhlIG90aGVyIHNvbHV0aW9uIGlzXG5cdC8vIHRvXG5cdC8vIHVzZSBhIGhhc2ggdGFibGUgdGhhdCBsZXRzIHVzIHNwZWNpZnkgdGhlIGVxdWFscy9oYXNoY29kZSBvcGVyYXRpb24uXG5cdC8vIEFsbCBjb25maWdzIGJ1dCBoYXNoZWQgYnkgKHMsIGksIF8sIHBpKSBub3QgaW5jbHVkaW5nIGNvbnRleHQuIFdpcGVkIG91dFxuXHQvLyB3aGVuIHdlIGdvIHJlYWRvbmx5IGFzIHRoaXMgc2V0IGJlY29tZXMgYSBERkEgc3RhdGUuXG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldChoYXNoQVROQ29uZmlnLCBlcXVhbEFUTkNvbmZpZ3MpO1xuXHQvLyBJbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0IGlzIHBhcnQgb2YgYSBmdWxsIGNvbnRleHRcblx0Ly8gTEwgcHJlZGljdGlvbi4gSXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBob3cgdG8gbWVyZ2UgJC4gV2l0aCBTTExcblx0Ly8gaXQncyBhIHdpbGRjYXJkIHdoZXJlYXMgaXQgaXMgbm90IGZvciBMTCBjb250ZXh0IG1lcmdlLlxuXHR0aGlzLmZ1bGxDdHggPSBmdWxsQ3R4ID09PSB1bmRlZmluZWQgPyB0cnVlIDogZnVsbEN0eDtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhlIHNldCBvZiBjb25maWd1cmF0aW9ucyBpcyByZWFkLW9ubHkuIERvIG5vdFxuXHQvLyBhbGxvdyBhbnkgY29kZSB0byBtYW5pcHVsYXRlIHRoZSBzZXQ7IERGQSBzdGF0ZXMgd2lsbCBwb2ludCBhdFxuXHQvLyB0aGUgc2V0cyBhbmQgdGhleSBtdXN0IG5vdCBjaGFuZ2UuIFRoaXMgZG9lcyBub3QgcHJvdGVjdCB0aGUgb3RoZXJcblx0Ly8gZmllbGRzOyBpbiBwYXJ0aWN1bGFyLCBjb25mbGljdGluZ0FsdHMgaXMgc2V0IGFmdGVyXG5cdC8vIHdlJ3ZlIG1hZGUgdGhpcyByZWFkb25seS5cblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuXHQvLyBUcmFjayB0aGUgZWxlbWVudHMgYXMgdGhleSBhcmUgYWRkZWQgdG8gdGhlIHNldDsgc3VwcG9ydHMgZ2V0KGkpLy8vXG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXG5cdC8vIFRPRE86IHRoZXNlIGZpZWxkcyBtYWtlIG1lIHByZXR0eSB1bmNvbWZvcnRhYmxlIGJ1dCBuaWNlIHRvIHBhY2sgdXAgaW5mb1xuXHQvLyB0b2dldGhlciwgc2F2ZXMgcmVjb21wdXRhdGlvblxuXHQvLyBUT0RPOiBjYW4gd2UgdHJhY2sgY29uZmxpY3RzIGFzIHRoZXkgYXJlIGFkZGVkIHRvIHNhdmUgc2Nhbm5pbmcgY29uZmlnc1xuXHQvLyBsYXRlcj9cblx0dGhpcy51bmlxdWVBbHQgPSAwO1xuXHR0aGlzLmNvbmZsaWN0aW5nQWx0cyA9IG51bGw7XG5cblx0Ly8gVXNlZCBpbiBwYXJzZXIgYW5kIGxleGVyLiBJbiBsZXhlciwgaXQgaW5kaWNhdGVzIHdlIGhpdCBhIHByZWRcblx0Ly8gd2hpbGUgY29tcHV0aW5nIGEgY2xvc3VyZSBvcGVyYXRpb24uIERvbid0IG1ha2UgYSBERkEgc3RhdGUgZnJvbSB0aGlzLlxuXHR0aGlzLmhhc1NlbWFudGljQ29udGV4dCA9IGZhbHNlO1xuXHR0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID0gZmFsc2U7XG5cblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGRpbmcgYSBuZXcgY29uZmlnIG1lYW5zIG1lcmdpbmcgY29udGV4dHMgd2l0aCBleGlzdGluZyBjb25maWdzIGZvclxuLy8ge0Bjb2RlIChzLCBpLCBwaSwgXyl9LCB3aGVyZSB7QGNvZGUgc30gaXMgdGhlXG4vLyB7QGxpbmsgQVROQ29uZmlnLy9zdGF0ZX0sIHtAY29kZSBpfSBpcyB0aGUge0BsaW5rIEFUTkNvbmZpZy8vYWx0fSwgYW5kXG4vLyB7QGNvZGUgcGl9IGlzIHRoZSB7QGxpbmsgQVROQ29uZmlnLy9zZW1hbnRpY0NvbnRleHR9LiBXZSB1c2Vcbi8vIHtAY29kZSAocyxpLHBpKX0gYXMga2V5LlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIHVwZGF0ZXMge0BsaW5rIC8vZGlwc0ludG9PdXRlckNvbnRleHR9IGFuZFxuLy8ge0BsaW5rIC8vaGFzU2VtYW50aWNDb250ZXh0fSB3aGVuIG5lY2Vzc2FyeS48L3A+XG4vLyAvXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGNvbmZpZywgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWVyZ2VDYWNoZSA9IG51bGw7XG5cdH1cblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHR0aHJvdyBcIlRoaXMgc2V0IGlzIHJlYWRvbmx5XCI7XG5cdH1cblx0aWYgKGNvbmZpZy5zZW1hbnRpY0NvbnRleHQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG5cdFx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPSB0cnVlO1xuXHR9XG5cdGlmIChjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPiAwKSB7XG5cdFx0dGhpcy5kaXBzSW50b091dGVyQ29udGV4dCA9IHRydWU7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdGhpcy5jb25maWdMb29rdXAuYWRkKGNvbmZpZyk7XG5cdGlmIChleGlzdGluZyA9PT0gY29uZmlnKSB7XG5cdFx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXHRcdHRoaXMuY29uZmlncy5wdXNoKGNvbmZpZyk7IC8vIHRyYWNrIG9yZGVyIGhlcmVcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvLyBhIHByZXZpb3VzIChzLGkscGksXyksIG1lcmdlIHdpdGggaXQgYW5kIHNhdmUgcmVzdWx0XG5cdHZhciByb290SXNXaWxkY2FyZCA9ICF0aGlzLmZ1bGxDdHg7XG5cdHZhciBtZXJnZWQgPSBtZXJnZShleGlzdGluZy5jb250ZXh0LCBjb25maWcuY29udGV4dCwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHQvLyBubyBuZWVkIHRvIGNoZWNrIGZvciBleGlzdGluZy5jb250ZXh0LCBjb25maWcuY29udGV4dCBpbiBjYWNoZVxuXHQvLyBzaW5jZSBvbmx5IHdheSB0byBjcmVhdGUgbmV3IGdyYXBocyBpcyBcImNhbGwgcnVsZVwiIGFuZCBoZXJlLiBXZVxuXHQvLyBjYWNoZSBhdCBib3RoIHBsYWNlcy5cblx0ZXhpc3RpbmcucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSBNYXRoLm1heCggZXhpc3RpbmcucmVhY2hlc0ludG9PdXRlckNvbnRleHQsIGNvbmZpZy5yZWFjaGVzSW50b091dGVyQ29udGV4dCk7XG5cdC8vIG1ha2Ugc3VyZSB0byBwcmVzZXJ2ZSB0aGUgcHJlY2VkZW5jZSBmaWx0ZXIgc3VwcHJlc3Npb24gZHVyaW5nIHRoZSBtZXJnZVxuXHRpZiAoY29uZmlnLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkKSB7XG5cdFx0ZXhpc3RpbmcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSB0cnVlO1xuXHR9XG5cdGV4aXN0aW5nLmNvbnRleHQgPSBtZXJnZWQ7IC8vIHJlcGxhY2UgY29udGV4dDsgbm8gbmVlZCB0byBhbHQgbWFwcGluZ1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuZ2V0U3RhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzdGF0ZXMgPSBuZXcgU2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0c3RhdGVzLmFkZCh0aGlzLmNvbmZpZ3NbaV0uc3RhdGUpO1xuXHR9XG5cdHJldHVybiBzdGF0ZXM7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmdldFByZWRpY2F0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHByZWRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGMgPSB0aGlzLmNvbmZpZ3NbaV0uc2VtYW50aWNDb250ZXh0O1xuXHRcdGlmIChjICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0cHJlZHMucHVzaChjLnNlbWFudGljQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcmVkcztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcIml0ZW1zXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uZmlncztcblx0fVxufSk7XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUub3B0aW1pemVDb25maWdzID0gZnVuY3Rpb24oaW50ZXJwcmV0ZXIpIHtcblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHR0aHJvdyBcIlRoaXMgc2V0IGlzIHJlYWRvbmx5XCI7XG5cdH1cblx0aWYgKHRoaXMuY29uZmlnTG9va3VwLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZmlncy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb25maWcgPSB0aGlzLmNvbmZpZ3NbaV07XG5cdFx0Y29uZmlnLmNvbnRleHQgPSBpbnRlcnByZXRlci5nZXRDYWNoZWRDb250ZXh0KGNvbmZpZy5jb250ZXh0KTtcblx0fVxufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5hZGRBbGwgPSBmdW5jdGlvbihjb2xsKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29sbC5sZW5ndGg7IGkrKykge1xuXHRcdHRoaXMuYWRkKGNvbGxbaV0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0cmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG5cdFx0KG90aGVyIGluc3RhbmNlb2YgQVROQ29uZmlnU2V0ICYmXG5cdFx0VXRpbHMuZXF1YWxBcnJheXModGhpcy5jb25maWdzLCBvdGhlci5jb25maWdzKSAmJlxuXHRcdHRoaXMuZnVsbEN0eCA9PT0gb3RoZXIuZnVsbEN0eCAmJlxuXHRcdHRoaXMudW5pcXVlQWx0ID09PSBvdGhlci51bmlxdWVBbHQgJiZcblx0XHR0aGlzLmNvbmZsaWN0aW5nQWx0cyA9PT0gb3RoZXIuY29uZmxpY3RpbmdBbHRzICYmXG5cdFx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPT09IG90aGVyLmhhc1NlbWFudGljQ29udGV4dCAmJlxuXHRcdHRoaXMuZGlwc0ludG9PdXRlckNvbnRleHQgPT09IG90aGVyLmRpcHNJbnRvT3V0ZXJDb250ZXh0KTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHRpZiAodGhpcy5jYWNoZWRIYXNoQ29kZSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY29uZmlncyk7XG5cdFx0XHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gaGFzaC5maW5pc2goKTtcblx0XHR9XG4gICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY2FjaGVkSGFzaENvZGUpO1xuXHR9IGVsc2Uge1xuICAgICAgICBoYXNoLnVwZGF0ZSh0aGlzLmNvbmZpZ3MpO1xuXHR9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoO1xuXHR9XG59KTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoID09PSAwO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0aWYgKHRoaXMuY29uZmlnTG9va3VwID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlYWRvbmx5IHNldHMuXCI7XG5cdH1cblx0cmV0dXJuIHRoaXMuY29uZmlnTG9va3VwLmNvbnRhaW5zKGl0ZW0pO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWluc0Zhc3QgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmNvbmZpZ0xvb2t1cCA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhpcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkb25seSBzZXRzLlwiO1xuXHR9XG5cdHJldHVybiB0aGlzLmNvbmZpZ0xvb2t1cC5jb250YWluc0Zhc3QoaXRlbSk7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0dGhyb3cgXCJUaGlzIHNldCBpcyByZWFkb25seVwiO1xuXHR9XG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gLTE7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5zZXRSZWFkb25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG5cdHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcblx0aWYgKHJlYWRPbmx5KSB7XG5cdFx0dGhpcy5jb25maWdMb29rdXAgPSBudWxsOyAvLyBjYW4ndCBtb2QsIG5vIG5lZWQgZm9yIGxvb2t1cCBjYWNoZVxuXHR9XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMuY29uZmlncykgK1xuXHRcdCh0aGlzLmhhc1NlbWFudGljQ29udGV4dCA/IFwiLGhhc1NlbWFudGljQ29udGV4dD1cIiArIHRoaXMuaGFzU2VtYW50aWNDb250ZXh0IDogXCJcIikgK1xuXHRcdCh0aGlzLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiA/IFwiLHVuaXF1ZUFsdD1cIiArIHRoaXMudW5pcXVlQWx0IDogXCJcIikgK1xuXHRcdCh0aGlzLmNvbmZsaWN0aW5nQWx0cyAhPT0gbnVsbCA/IFwiLGNvbmZsaWN0aW5nQWx0cz1cIiArIHRoaXMuY29uZmxpY3RpbmdBbHRzIDogXCJcIikgK1xuXHRcdCh0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID8gXCIsZGlwc0ludG9PdXRlckNvbnRleHRcIiA6IFwiXCIpO1xufTtcblxuZnVuY3Rpb24gT3JkZXJlZEFUTkNvbmZpZ1NldCgpIHtcblx0QVROQ29uZmlnU2V0LmNhbGwodGhpcyk7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTkNvbmZpZ1NldC5wcm90b3R5cGUpO1xuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPcmRlcmVkQVROQ29uZmlnU2V0O1xuXG5leHBvcnRzLkFUTkNvbmZpZ1NldCA9IEFUTkNvbmZpZ1NldDtcbmV4cG9ydHMuT3JkZXJlZEFUTkNvbmZpZ1NldCA9IE9yZGVyZWRBVE5Db25maWdTZXQ7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmZ1bmN0aW9uIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMoY29weUZyb20pIHtcblx0aWYoY29weUZyb209PT11bmRlZmluZWQpIHtcblx0XHRjb3B5RnJvbSA9IG51bGw7XG5cdH1cblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuICAgIHRoaXMudmVyaWZ5QVROID0gY29weUZyb209PT1udWxsID8gdHJ1ZSA6IGNvcHlGcm9tLnZlcmlmeUFUTjtcbiAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zID0gY29weUZyb209PT1udWxsID8gZmFsc2UgOiBjb3B5RnJvbS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucztcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zLmRlZmF1bHRPcHRpb25zID0gbmV3IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMoKTtcbkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZGVmYXVsdE9wdGlvbnMucmVhZE9ubHkgPSB0cnVlO1xuXG4vLyAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwga2V5LCB2YWx1ZSk6XG4vLyAgICAgICAgaWYga2V5IT1cInJlYWRPbmx5XCIgYW5kIHNlbGYucmVhZE9ubHk6XG4vLyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihcIlRoZSBvYmplY3QgaXMgcmVhZCBvbmx5LlwiKVxuLy8gICAgICAgIHN1cGVyKHR5cGUoc2VsZiksIHNlbGYpLl9fc2V0YXR0cl9fKGtleSx2YWx1ZSlcblxuZXhwb3J0cy5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zID0gQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlR5cGUgPSByZXF1aXJlKCcuL0FUTlR5cGUnKS5BVE5UeXBlO1xudmFyIEFUTlN0YXRlcyA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKTtcbnZhciBBVE5TdGF0ZSA9IEFUTlN0YXRlcy5BVE5TdGF0ZTtcbnZhciBCYXNpY1N0YXRlID0gQVROU3RhdGVzLkJhc2ljU3RhdGU7XG52YXIgRGVjaXNpb25TdGF0ZSA9IEFUTlN0YXRlcy5EZWNpc2lvblN0YXRlO1xudmFyIEJsb2NrU3RhcnRTdGF0ZSA9IEFUTlN0YXRlcy5CbG9ja1N0YXJ0U3RhdGU7XG52YXIgQmxvY2tFbmRTdGF0ZSA9IEFUTlN0YXRlcy5CbG9ja0VuZFN0YXRlO1xudmFyIExvb3BFbmRTdGF0ZSA9IEFUTlN0YXRlcy5Mb29wRW5kU3RhdGU7XG52YXIgUnVsZVN0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuUnVsZVN0YXJ0U3RhdGU7XG52YXIgUnVsZVN0b3BTdGF0ZSA9IEFUTlN0YXRlcy5SdWxlU3RvcFN0YXRlO1xudmFyIFRva2Vuc1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuVG9rZW5zU3RhcnRTdGF0ZTtcbnZhciBQbHVzTG9vcGJhY2tTdGF0ZSA9IEFUTlN0YXRlcy5QbHVzTG9vcGJhY2tTdGF0ZTtcbnZhciBTdGFyTG9vcGJhY2tTdGF0ZSA9IEFUTlN0YXRlcy5TdGFyTG9vcGJhY2tTdGF0ZTtcbnZhciBTdGFyTG9vcEVudHJ5U3RhdGUgPSBBVE5TdGF0ZXMuU3Rhckxvb3BFbnRyeVN0YXRlO1xudmFyIFBsdXNCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcbnZhciBTdGFyQmxvY2tTdGFydFN0YXRlID0gQVROU3RhdGVzLlN0YXJCbG9ja1N0YXJ0U3RhdGU7XG52YXIgQmFzaWNCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG52YXIgVHJhbnNpdGlvbnMgPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKTtcbnZhciBUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuVHJhbnNpdGlvbjtcbnZhciBBdG9tVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLkF0b21UcmFuc2l0aW9uO1xudmFyIFNldFRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5TZXRUcmFuc2l0aW9uO1xudmFyIE5vdFNldFRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5Ob3RTZXRUcmFuc2l0aW9uO1xudmFyIFJ1bGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUnVsZVRyYW5zaXRpb247XG52YXIgUmFuZ2VUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUmFuZ2VUcmFuc2l0aW9uO1xudmFyIEFjdGlvblRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BY3Rpb25UcmFuc2l0aW9uO1xudmFyIEVwc2lsb25UcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuRXBzaWxvblRyYW5zaXRpb247XG52YXIgV2lsZGNhcmRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuV2lsZGNhcmRUcmFuc2l0aW9uO1xudmFyIFByZWRpY2F0ZVRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5QcmVkaWNhdGVUcmFuc2l0aW9uO1xudmFyIFByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IHJlcXVpcmUoJy4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucycpLkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnM7XG52YXIgTGV4ZXJBY3Rpb25zID0gcmVxdWlyZSgnLi9MZXhlckFjdGlvbicpO1xudmFyIExleGVyQWN0aW9uVHlwZSA9IExleGVyQWN0aW9ucy5MZXhlckFjdGlvblR5cGU7XG52YXIgTGV4ZXJTa2lwQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyU2tpcEFjdGlvbjtcbnZhciBMZXhlckNoYW5uZWxBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJDaGFubmVsQWN0aW9uO1xudmFyIExleGVyQ3VzdG9tQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyQ3VzdG9tQWN0aW9uO1xudmFyIExleGVyTW9yZUFjdGlvbiA9IExleGVyQWN0aW9ucy5MZXhlck1vcmVBY3Rpb247XG52YXIgTGV4ZXJUeXBlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyVHlwZUFjdGlvbjtcbnZhciBMZXhlclB1c2hNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyUHVzaE1vZGVBY3Rpb247XG52YXIgTGV4ZXJQb3BNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyUG9wTW9kZUFjdGlvbjtcbnZhciBMZXhlck1vZGVBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJNb2RlQWN0aW9uO1xuLy8gVGhpcyBpcyB0aGUgZWFybGllc3Qgc3VwcG9ydGVkIHNlcmlhbGl6ZWQgVVVJRC5cbi8vIHN0aWNrIHRvIHNlcmlhbGl6ZWQgdmVyc2lvbiBmb3Igbm93LCB3ZSBkb24ndCBuZWVkIGEgVVVJRCBpbnN0YW5jZVxudmFyIEJBU0VfU0VSSUFMSVpFRF9VVUlEID0gXCJBQURCOEQ3RS1BRUVGLTQ0MTUtQUQyQi04MjA0RDZDRjA0MkVcIjtcblxuLy9cbi8vIFRoaXMgVVVJRCBpbmRpY2F0ZXMgdGhlIHNlcmlhbGl6ZWQgQVROIGNvbnRhaW5zIHR3byBzZXRzIG9mXG4vLyBJbnRlcnZhbFNldHMsIHdoZXJlIHRoZSBzZWNvbmQgc2V0J3MgdmFsdWVzIGFyZSBlbmNvZGVkIGFzXG4vLyAzMi1iaXQgaW50ZWdlcnMgdG8gc3VwcG9ydCB0aGUgZnVsbCBVbmljb2RlIFNNUCByYW5nZSB1cCB0byBVKzEwRkZGRi5cbi8vXG52YXIgQURERURfVU5JQ09ERV9TTVAgPSBcIjU5NjI3Nzg0LTNCRTUtNDE3QS1COUVCLTgxMzFBNzI4NjA4OVwiO1xuXG4vLyBUaGlzIGxpc3QgY29udGFpbnMgYWxsIG9mIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIFVVSURzLCBvcmRlcmVkIGJ5IHdoZW5cbi8vIHRoZSBmZWF0dXJlIGZpcnN0IGFwcGVhcmVkIGluIHRoaXMgYnJhbmNoLlxudmFyIFNVUFBPUlRFRF9VVUlEUyA9IFsgQkFTRV9TRVJJQUxJWkVEX1VVSUQsIEFEREVEX1VOSUNPREVfU01QIF07XG5cbnZhciBTRVJJQUxJWkVEX1ZFUlNJT04gPSAzO1xuXG4vLyBUaGlzIGlzIHRoZSBjdXJyZW50IHNlcmlhbGl6ZWQgVVVJRC5cbnZhciBTRVJJQUxJWkVEX1VVSUQgPSBBRERFRF9VTklDT0RFX1NNUDtcblxuZnVuY3Rpb24gaW5pdEFycmF5KCBsZW5ndGgsIHZhbHVlKSB7XG5cdHZhciB0bXAgPSBbXTtcblx0dG1wW2xlbmd0aC0xXSA9IHZhbHVlO1xuXHRyZXR1cm4gdG1wLm1hcChmdW5jdGlvbihpKSB7cmV0dXJuIHZhbHVlO30pO1xufVxuXG5mdW5jdGlvbiBBVE5EZXNlcmlhbGl6ZXIgKG9wdGlvbnMpIHtcblxuICAgIGlmICggb3B0aW9ucz09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbCApIHtcbiAgICAgICAgb3B0aW9ucyA9IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuICAgIHRoaXMuZGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zdGF0ZUZhY3RvcmllcyA9IG51bGw7XG4gICAgdGhpcy5hY3Rpb25GYWN0b3JpZXMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIERldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgYW4gQVROIHN1cHBvcnRzXG4vLyBhIHBhcnRpY3VsYXIgZmVhdHVyZSwgaWRlbnRpZmllZCBieSB0aGUge0BsaW5rIFVVSUR9IHVzZWQgZm9yIHNlcmlhbGl6aW5nXG4vLyB0aGUgQVROIGF0IHRoZSB0aW1lIHRoZSBmZWF0dXJlIHdhcyBmaXJzdCBpbnRyb2R1Y2VkLlxuLy9cbi8vIEBwYXJhbSBmZWF0dXJlIFRoZSB7QGxpbmsgVVVJRH0gbWFya2luZyB0aGUgZmlyc3QgdGltZSB0aGUgZmVhdHVyZSB3YXNcbi8vIHN1cHBvcnRlZCBpbiB0aGUgc2VyaWFsaXplZCBBVE4uXG4vLyBAcGFyYW0gYWN0dWFsVXVpZCBUaGUge0BsaW5rIFVVSUR9IG9mIHRoZSBhY3R1YWwgc2VyaWFsaXplZCBBVE4gd2hpY2ggaXNcbi8vIGN1cnJlbnRseSBiZWluZyBkZXNlcmlhbGl6ZWQuXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUge0Bjb2RlIGFjdHVhbFV1aWR9IHZhbHVlIHJlcHJlc2VudHMgYVxuLy8gc2VyaWFsaXplZCBBVE4gYXQgb3IgYWZ0ZXIgdGhlIGZlYXR1cmUgaWRlbnRpZmllZCBieSB7QGNvZGUgZmVhdHVyZX0gd2FzXG4vLyBpbnRyb2R1Y2VkOyBvdGhlcndpc2UsIHtAY29kZSBmYWxzZX0uXG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuaXNGZWF0dXJlU3VwcG9ydGVkID0gZnVuY3Rpb24oZmVhdHVyZSwgYWN0dWFsVXVpZCkge1xuICAgIHZhciBpZHgxID0gU1VQUE9SVEVEX1VVSURTLmluZGV4T2YoZmVhdHVyZSk7XG4gICAgaWYgKGlkeDE8MCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBpZHgyID0gU1VQUE9SVEVEX1VVSURTLmluZGV4T2YoYWN0dWFsVXVpZCk7XG4gICAgcmV0dXJuIGlkeDIgPj0gaWR4MTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuZGVzZXJpYWxpemUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgdGhpcy5yZXNldChkYXRhKTtcbiAgICB0aGlzLmNoZWNrVmVyc2lvbigpO1xuICAgIHRoaXMuY2hlY2tVVUlEKCk7XG4gICAgdmFyIGF0biA9IHRoaXMucmVhZEFUTigpO1xuICAgIHRoaXMucmVhZFN0YXRlcyhhdG4pO1xuICAgIHRoaXMucmVhZFJ1bGVzKGF0bik7XG4gICAgdGhpcy5yZWFkTW9kZXMoYXRuKTtcbiAgICB2YXIgc2V0cyA9IFtdO1xuICAgIC8vIEZpcnN0LCBkZXNlcmlhbGl6ZSBzZXRzIHdpdGggMTYtYml0IGFyZ3VtZW50cyA8PSBVK0ZGRkYuXG4gICAgdGhpcy5yZWFkU2V0cyhhdG4sIHNldHMsIHRoaXMucmVhZEludC5iaW5kKHRoaXMpKTtcbiAgICAvLyBOZXh0LCBpZiB0aGUgQVROIHdhcyBzZXJpYWxpemVkIHdpdGggdGhlIFVuaWNvZGUgU01QIGZlYXR1cmUsXG4gICAgLy8gZGVzZXJpYWxpemUgc2V0cyB3aXRoIDMyLWJpdCBhcmd1bWVudHMgPD0gVSsxMEZGRkYuXG4gICAgaWYgKHRoaXMuaXNGZWF0dXJlU3VwcG9ydGVkKEFEREVEX1VOSUNPREVfU01QLCB0aGlzLnV1aWQpKSB7XG4gICAgICAgIHRoaXMucmVhZFNldHMoYXRuLCBzZXRzLCB0aGlzLnJlYWRJbnQzMi5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgdGhpcy5yZWFkRWRnZXMoYXRuLCBzZXRzKTtcbiAgICB0aGlzLnJlYWREZWNpc2lvbnMoYXRuKTtcbiAgICB0aGlzLnJlYWRMZXhlckFjdGlvbnMoYXRuKTtcbiAgICB0aGlzLm1hcmtQcmVjZWRlbmNlRGVjaXNpb25zKGF0bik7XG4gICAgdGhpcy52ZXJpZnlBVE4oYXRuKTtcbiAgICBpZiAodGhpcy5kZXNlcmlhbGl6YXRpb25PcHRpb25zLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zICYmIGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5QQVJTRVIgKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnMoYXRuKTtcbiAgICAgICAgLy8gcmUtdmVyaWZ5IGFmdGVyIG1vZGlmaWNhdGlvblxuICAgICAgICB0aGlzLnZlcmlmeUFUTihhdG4pO1xuICAgIH1cbiAgICByZXR1cm4gYXRuO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKGRhdGEpIHtcblx0dmFyIGFkanVzdCA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdmFyIHYgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIHJldHVybiB2PjEgID8gdi0yIDogdiArIDY1NTMzO1xuXHR9O1xuICAgIHZhciB0ZW1wID0gZGF0YS5zcGxpdChcIlwiKS5tYXAoYWRqdXN0KTtcbiAgICAvLyBkb24ndCBhZGp1c3QgdGhlIGZpcnN0IHZhbHVlIHNpbmNlIHRoYXQncyB0aGUgdmVyc2lvbiBudW1iZXJcbiAgICB0ZW1wWzBdID0gZGF0YS5jaGFyQ29kZUF0KDApO1xuICAgIHRoaXMuZGF0YSA9IHRlbXA7XG4gICAgdGhpcy5wb3MgPSAwO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5jaGVja1ZlcnNpb24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmVyc2lvbiA9IHRoaXMucmVhZEludCgpO1xuICAgIGlmICggdmVyc2lvbiAhPT0gU0VSSUFMSVpFRF9WRVJTSU9OICkge1xuICAgICAgICB0aHJvdyAoXCJDb3VsZCBub3QgZGVzZXJpYWxpemUgQVROIHdpdGggdmVyc2lvbiBcIiArIHZlcnNpb24gKyBcIiAoZXhwZWN0ZWQgXCIgKyBTRVJJQUxJWkVEX1ZFUlNJT04gKyBcIikuXCIpO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuY2hlY2tVVUlEID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHV1aWQgPSB0aGlzLnJlYWRVVUlEKCk7XG4gICAgaWYgKFNVUFBPUlRFRF9VVUlEUy5pbmRleE9mKHV1aWQpPDApIHtcbiAgICAgICAgdGhyb3cgKFwiQ291bGQgbm90IGRlc2VyaWFsaXplIEFUTiB3aXRoIFVVSUQ6IFwiICsgdXVpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiAoZXhwZWN0ZWQgXCIgKyBTRVJJQUxJWkVEX1VVSUQgKyBcIiBvciBhIGxlZ2FjeSBVVUlEKS5cIiwgdXVpZCwgU0VSSUFMSVpFRF9VVUlEKTtcbiAgICB9XG4gICAgdGhpcy51dWlkID0gdXVpZDtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZEFUTiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBncmFtbWFyVHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgIHZhciBtYXhUb2tlblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICByZXR1cm4gbmV3IEFUTihncmFtbWFyVHlwZSwgbWF4VG9rZW5UeXBlKTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFN0YXRlcyA9IGZ1bmN0aW9uKGF0bikge1xuXHR2YXIgaiwgcGFpciwgc3RhdGVOdW1iZXI7XG4gICAgdmFyIGxvb3BCYWNrU3RhdGVOdW1iZXJzID0gW107XG4gICAgdmFyIGVuZFN0YXRlTnVtYmVycyA9IFtdO1xuICAgIHZhciBuc3RhdGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yKHZhciBpPTA7IGk8bnN0YXRlczsgaSsrKSB7XG4gICAgICAgIHZhciBzdHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAvLyBpZ25vcmUgYmFkIHR5cGUgb2Ygc3RhdGVzXG4gICAgICAgIGlmIChzdHlwZT09PUFUTlN0YXRlLklOVkFMSURfVFlQRSkge1xuICAgICAgICAgICAgYXRuLmFkZFN0YXRlKG51bGwpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVJbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICBpZiAocnVsZUluZGV4ID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgIHJ1bGVJbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzID0gdGhpcy5zdGF0ZUZhY3Rvcnkoc3R5cGUsIHJ1bGVJbmRleCk7XG4gICAgICAgIGlmIChzdHlwZSA9PT0gQVROU3RhdGUuTE9PUF9FTkQpIHsgLy8gc3BlY2lhbCBjYXNlXG4gICAgICAgICAgICB2YXIgbG9vcEJhY2tTdGF0ZU51bWJlciA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgbG9vcEJhY2tTdGF0ZU51bWJlcnMucHVzaChbcywgbG9vcEJhY2tTdGF0ZU51bWJlcl0pO1xuICAgICAgICB9IGVsc2UgaWYocyBpbnN0YW5jZW9mIEJsb2NrU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdmFyIGVuZFN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBlbmRTdGF0ZU51bWJlcnMucHVzaChbcywgZW5kU3RhdGVOdW1iZXJdKTtcbiAgICAgICAgfVxuICAgICAgICBhdG4uYWRkU3RhdGUocyk7XG4gICAgfVxuICAgIC8vIGRlbGF5IHRoZSBhc3NpZ25tZW50IG9mIGxvb3AgYmFjayBhbmQgZW5kIHN0YXRlcyB1bnRpbCB3ZSBrbm93IGFsbCB0aGVcblx0Ly8gc3RhdGUgaW5zdGFuY2VzIGhhdmUgYmVlbiBpbml0aWFsaXplZFxuICAgIGZvciAoaj0wOyBqPGxvb3BCYWNrU3RhdGVOdW1iZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhaXIgPSBsb29wQmFja1N0YXRlTnVtYmVyc1tqXTtcbiAgICAgICAgcGFpclswXS5sb29wQmFja1N0YXRlID0gYXRuLnN0YXRlc1twYWlyWzFdXTtcbiAgICB9XG5cbiAgICBmb3IgKGo9MDsgajxlbmRTdGF0ZU51bWJlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFpciA9IGVuZFN0YXRlTnVtYmVyc1tqXTtcbiAgICAgICAgcGFpclswXS5lbmRTdGF0ZSA9IGF0bi5zdGF0ZXNbcGFpclsxXV07XG4gICAgfVxuXG4gICAgdmFyIG51bU5vbkdyZWVkeVN0YXRlcyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAoaj0wOyBqPG51bU5vbkdyZWVkeVN0YXRlczsgaisrKSB7XG4gICAgICAgIHN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5zdGF0ZXNbc3RhdGVOdW1iZXJdLm5vbkdyZWVkeSA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG51bVByZWNlZGVuY2VTdGF0ZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGo9MDsgajxudW1QcmVjZWRlbmNlU3RhdGVzOyBqKyspIHtcbiAgICAgICAgc3RhdGVOdW1iZXIgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgYXRuLnN0YXRlc1tzdGF0ZU51bWJlcl0uaXNQcmVjZWRlbmNlUnVsZSA9IHRydWU7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkUnVsZXMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgbnJ1bGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgaWYgKGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5MRVhFUiApIHtcbiAgICAgICAgYXRuLnJ1bGVUb1Rva2VuVHlwZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIH1cbiAgICBhdG4ucnVsZVRvU3RhcnRTdGF0ZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIGZvciAoaT0wOyBpPG5ydWxlczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBzdGFydFN0YXRlID0gYXRuLnN0YXRlc1tzXTtcbiAgICAgICAgYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbaV0gPSBzdGFydFN0YXRlO1xuICAgICAgICBpZiAoIGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5MRVhFUiApIHtcbiAgICAgICAgICAgIHZhciB0b2tlblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09IDB4RkZGRikge1xuICAgICAgICAgICAgICAgIHRva2VuVHlwZSA9IFRva2VuLkVPRjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGVbaV0gPSB0b2tlblR5cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIGZvciAoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKCEoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZVtzdGF0ZS5ydWxlSW5kZXhdID0gc3RhdGU7XG4gICAgICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW3N0YXRlLnJ1bGVJbmRleF0uc3RvcFN0YXRlID0gc3RhdGU7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkTW9kZXMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgbm1vZGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yICh2YXIgaT0wOyBpPG5tb2RlczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5tb2RlVG9TdGFydFN0YXRlLnB1c2goYXRuLnN0YXRlc1tzXSk7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkU2V0cyA9IGZ1bmN0aW9uKGF0biwgc2V0cywgcmVhZFVuaWNvZGUpIHtcbiAgICB2YXIgbSA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxtOyBpKyspIHtcbiAgICAgICAgdmFyIGlzZXQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgc2V0cy5wdXNoKGlzZXQpO1xuICAgICAgICB2YXIgbiA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB2YXIgY29udGFpbnNFb2YgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgaWYgKGNvbnRhaW5zRW9mIT09MCkge1xuICAgICAgICAgICAgaXNldC5hZGRPbmUoLTEpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGo9MDsgajxuOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBpMSA9IHJlYWRVbmljb2RlKCk7XG4gICAgICAgICAgICB2YXIgaTIgPSByZWFkVW5pY29kZSgpO1xuICAgICAgICAgICAgaXNldC5hZGRSYW5nZShpMSwgaTIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkRWRnZXMgPSBmdW5jdGlvbihhdG4sIHNldHMpIHtcblx0dmFyIGksIGosIHN0YXRlLCB0cmFucywgdGFyZ2V0O1xuICAgIHZhciBuZWRnZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGk9MDsgaTxuZWRnZXM7IGkrKykge1xuICAgICAgICB2YXIgc3JjID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciB0cmcgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIHR0eXBlID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmcxID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmcyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmczID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHRyYW5zID0gdGhpcy5lZGdlRmFjdG9yeShhdG4sIHR0eXBlLCBzcmMsIHRyZywgYXJnMSwgYXJnMiwgYXJnMywgc2V0cyk7XG4gICAgICAgIHZhciBzcmNTdGF0ZSA9IGF0bi5zdGF0ZXNbc3JjXTtcbiAgICAgICAgc3JjU3RhdGUuYWRkVHJhbnNpdGlvbih0cmFucyk7XG4gICAgfVxuICAgIC8vIGVkZ2VzIGZvciBydWxlIHN0b3Agc3RhdGVzIGNhbiBiZSBkZXJpdmVkLCBzbyB0aGV5IGFyZW4ndCBzZXJpYWxpemVkXG4gICAgZm9yIChpPTA7IGk8YXRuLnN0YXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgdCA9IHN0YXRlLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICAgICAgaWYgKCEodCBpbnN0YW5jZW9mIFJ1bGVUcmFuc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXHRcdFx0dmFyIG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSAtMTtcblx0XHRcdGlmIChhdG4ucnVsZVRvU3RhcnRTdGF0ZVt0LnRhcmdldC5ydWxlSW5kZXhdLmlzUHJlY2VkZW5jZVJ1bGUpIHtcblx0XHRcdFx0aWYgKHQucHJlY2VkZW5jZSA9PT0gMCkge1xuXHRcdFx0XHRcdG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSB0LnRhcmdldC5ydWxlSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dHJhbnMgPSBuZXcgRXBzaWxvblRyYW5zaXRpb24odC5mb2xsb3dTdGF0ZSwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybik7XG4gICAgICAgICAgICBhdG4ucnVsZVRvU3RvcFN0YXRlW3QudGFyZ2V0LnJ1bGVJbmRleF0uYWRkVHJhbnNpdGlvbih0cmFucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGtub3cgdGhlIGVuZCBzdGF0ZSB0byBzZXQgaXRzIHN0YXJ0IHN0YXRlXG4gICAgICAgICAgICBpZiAoc3RhdGUuZW5kU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBibG9jayBlbmQgc3RhdGVzIGNhbiBvbmx5IGJlIGFzc29jaWF0ZWQgdG8gYSBzaW5nbGUgYmxvY2sgc3RhcnRcblx0XHRcdC8vIHN0YXRlXG4gICAgICAgICAgICBpZiAoIHN0YXRlLmVuZFN0YXRlLnN0YXJ0U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5lbmRTdGF0ZS5zdGFydFN0YXRlID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgUGx1c0xvb3BiYWNrU3RhdGUpIHtcbiAgICAgICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudHJhbnNpdGlvbnNbal0udGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQbHVzQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5sb29wQmFja1N0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgU3Rhckxvb3BiYWNrU3RhdGUpIHtcbiAgICAgICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudHJhbnNpdGlvbnNbal0udGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTdGFyTG9vcEVudHJ5U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Lmxvb3BCYWNrU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWREZWNpc2lvbnMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgbmRlY2lzaW9ucyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxuZGVjaXNpb25zOyBpKyspIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIGRlY1N0YXRlID0gYXRuLnN0YXRlc1tzXTtcbiAgICAgICAgYXRuLmRlY2lzaW9uVG9TdGF0ZS5wdXNoKGRlY1N0YXRlKTtcbiAgICAgICAgZGVjU3RhdGUuZGVjaXNpb24gPSBpO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZExleGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuICAgIGlmIChhdG4uZ3JhbW1hclR5cGUgPT09IEFUTlR5cGUuTEVYRVIpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5sZXhlckFjdGlvbnMgPSBpbml0QXJyYXkoY291bnQsIG51bGwpO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICAgICAgdmFyIGFjdGlvblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIHZhciBkYXRhMSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgaWYgKGRhdGExID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICBkYXRhMSA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRhdGEyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBpZiAoZGF0YTIgPT09IDB4RkZGRikge1xuICAgICAgICAgICAgICAgIGRhdGEyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbGV4ZXJBY3Rpb24gPSB0aGlzLmxleGVyQWN0aW9uRmFjdG9yeShhY3Rpb25UeXBlLCBkYXRhMSwgZGF0YTIpO1xuICAgICAgICAgICAgYXRuLmxleGVyQWN0aW9uc1tpXSA9IGxleGVyQWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuXHR2YXIgaTtcbiAgICB2YXIgY291bnQgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZS5sZW5ndGg7XG4gICAgZm9yKGk9MDsgaTxjb3VudDsgaSsrKSB7XG4gICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGVbaV0gPSBhdG4ubWF4VG9rZW5UeXBlICsgaSArIDE7XG4gICAgfVxuICAgIGZvcihpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb24oYXRuLCBpKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb24gPSBmdW5jdGlvbihhdG4sIGlkeCkge1xuXHR2YXIgaSwgc3RhdGU7XG4gICAgdmFyIGJ5cGFzc1N0YXJ0ID0gbmV3IEJhc2ljQmxvY2tTdGFydFN0YXRlKCk7XG4gICAgYnlwYXNzU3RhcnQucnVsZUluZGV4ID0gaWR4O1xuICAgIGF0bi5hZGRTdGF0ZShieXBhc3NTdGFydCk7XG5cbiAgICB2YXIgYnlwYXNzU3RvcCA9IG5ldyBCbG9ja0VuZFN0YXRlKCk7XG4gICAgYnlwYXNzU3RvcC5ydWxlSW5kZXggPSBpZHg7XG4gICAgYXRuLmFkZFN0YXRlKGJ5cGFzc1N0b3ApO1xuXG4gICAgYnlwYXNzU3RhcnQuZW5kU3RhdGUgPSBieXBhc3NTdG9wO1xuICAgIGF0bi5kZWZpbmVEZWNpc2lvblN0YXRlKGJ5cGFzc1N0YXJ0KTtcblxuICAgIGJ5cGFzc1N0b3Auc3RhcnRTdGF0ZSA9IGJ5cGFzc1N0YXJ0O1xuXG4gICAgdmFyIGV4Y2x1ZGVUcmFuc2l0aW9uID0gbnVsbDtcbiAgICB2YXIgZW5kU3RhdGUgPSBudWxsO1xuXG4gICAgaWYgKGF0bi5ydWxlVG9TdGFydFN0YXRlW2lkeF0uaXNQcmVjZWRlbmNlUnVsZSkge1xuICAgICAgICAvLyB3cmFwIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVsZSB0byB0aGUgU3Rhckxvb3BFbnRyeVN0YXRlXG4gICAgICAgIGVuZFN0YXRlID0gbnVsbDtcbiAgICAgICAgZm9yKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZUlzRW5kU3RhdGVGb3Ioc3RhdGUsIGlkeCkpIHtcbiAgICAgICAgICAgICAgICBlbmRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGVUcmFuc2l0aW9uID0gc3RhdGUubG9vcEJhY2tTdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhjbHVkZVRyYW5zaXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IChcIkNvdWxkbid0IGlkZW50aWZ5IGZpbmFsIHN0YXRlIG9mIHRoZSBwcmVjZWRlbmNlIHJ1bGUgcHJlZml4IHNlY3Rpb24uXCIpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZW5kU3RhdGUgPSBhdG4ucnVsZVRvU3RvcFN0YXRlW2lkeF07XG4gICAgfVxuXG4gICAgLy8gYWxsIG5vbi1leGNsdWRlZCB0cmFuc2l0aW9ucyB0aGF0IGN1cnJlbnRseSB0YXJnZXQgZW5kIHN0YXRlIG5lZWQgdG9cblx0Ly8gdGFyZ2V0IGJsb2NrRW5kIGluc3RlYWRcbiAgICBmb3IoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuICAgICAgICBmb3IodmFyIGo9MDsgajxzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHRyYW5zaXRpb24gPSBzdGF0ZS50cmFuc2l0aW9uc1tqXTtcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uID09PSBleGNsdWRlVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24udGFyZ2V0ID09PSBlbmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24udGFyZ2V0ID0gYnlwYXNzU3RvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsbCB0cmFuc2l0aW9ucyBsZWF2aW5nIHRoZSBydWxlIHN0YXJ0IHN0YXRlIG5lZWQgdG8gbGVhdmUgYmxvY2tTdGFydFxuXHQvLyBpbnN0ZWFkXG4gICAgdmFyIHJ1bGVUb1N0YXJ0U3RhdGUgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZVtpZHhdO1xuICAgIHZhciBjb3VudCA9IHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoO1xuICAgIHdoaWxlICggY291bnQgPiAwKSB7XG4gICAgICAgIGJ5cGFzc1N0YXJ0LmFkZFRyYW5zaXRpb24ocnVsZVRvU3RhcnRTdGF0ZS50cmFuc2l0aW9uc1tjb3VudC0xXSk7XG4gICAgICAgIHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnMgPSBydWxlVG9TdGFydFN0YXRlLnRyYW5zaXRpb25zLnNsaWNlKC0xKTtcbiAgICB9XG4gICAgLy8gbGluayB0aGUgbmV3IHN0YXRlc1xuICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW2lkeF0uYWRkVHJhbnNpdGlvbihuZXcgRXBzaWxvblRyYW5zaXRpb24oYnlwYXNzU3RhcnQpKTtcbiAgICBieXBhc3NTdG9wLmFkZFRyYW5zaXRpb24obmV3IEVwc2lsb25UcmFuc2l0aW9uKGVuZFN0YXRlKSk7XG5cbiAgICB2YXIgbWF0Y2hTdGF0ZSA9IG5ldyBCYXNpY1N0YXRlKCk7XG4gICAgYXRuLmFkZFN0YXRlKG1hdGNoU3RhdGUpO1xuICAgIG1hdGNoU3RhdGUuYWRkVHJhbnNpdGlvbihuZXcgQXRvbVRyYW5zaXRpb24oYnlwYXNzU3RvcCwgYXRuLnJ1bGVUb1Rva2VuVHlwZVtpZHhdKSk7XG4gICAgYnlwYXNzU3RhcnQuYWRkVHJhbnNpdGlvbihuZXcgRXBzaWxvblRyYW5zaXRpb24obWF0Y2hTdGF0ZSkpO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5zdGF0ZUlzRW5kU3RhdGVGb3IgPSBmdW5jdGlvbihzdGF0ZSwgaWR4KSB7XG4gICAgaWYgKCBzdGF0ZS5ydWxlSW5kZXggIT09IGlkeCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCEoIHN0YXRlIGluc3RhbmNlb2YgU3Rhckxvb3BFbnRyeVN0YXRlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG1heWJlTG9vcEVuZFN0YXRlID0gc3RhdGUudHJhbnNpdGlvbnNbc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIC0gMV0udGFyZ2V0O1xuICAgIGlmICghKCBtYXliZUxvb3BFbmRTdGF0ZSBpbnN0YW5jZW9mIExvb3BFbmRTdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChtYXliZUxvb3BFbmRTdGF0ZS5lcHNpbG9uT25seVRyYW5zaXRpb25zICYmXG4gICAgICAgIChtYXliZUxvb3BFbmRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLy9cbi8vIEFuYWx5emUgdGhlIHtAbGluayBTdGFyTG9vcEVudHJ5U3RhdGV9IHN0YXRlcyBpbiB0aGUgc3BlY2lmaWVkIEFUTiB0byBzZXRcbi8vIHRoZSB7QGxpbmsgU3Rhckxvb3BFbnRyeVN0YXRlLy9pc1ByZWNlZGVuY2VEZWNpc2lvbn0gZmllbGQgdG8gdGhlXG4vLyBjb3JyZWN0IHZhbHVlLlxuLy9cbi8vIEBwYXJhbSBhdG4gVGhlIEFUTi5cbi8vXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLm1hcmtQcmVjZWRlbmNlRGVjaXNpb25zID0gZnVuY3Rpb24oYXRuKSB7XG5cdGZvcih2YXIgaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuXHRcdGlmICghKCBzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIGFuYWx5emUgdGhlIEFUTiB0byBkZXRlcm1pbmUgaWYgdGhpcyBBVE4gZGVjaXNpb24gc3RhdGUgaXMgdGhlXG4gICAgICAgIC8vIGRlY2lzaW9uIGZvciB0aGUgY2xvc3VyZSBibG9jayB0aGF0IGRldGVybWluZXMgd2hldGhlciBhXG4gICAgICAgIC8vIHByZWNlZGVuY2UgcnVsZSBzaG91bGQgY29udGludWUgb3IgY29tcGxldGUuXG4gICAgICAgIC8vXG4gICAgICAgIGlmICggYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbc3RhdGUucnVsZUluZGV4XS5pc1ByZWNlZGVuY2VSdWxlKSB7XG4gICAgICAgICAgICB2YXIgbWF5YmVMb29wRW5kU3RhdGUgPSBzdGF0ZS50cmFuc2l0aW9uc1tzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggLSAxXS50YXJnZXQ7XG4gICAgICAgICAgICBpZiAobWF5YmVMb29wRW5kU3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIG1heWJlTG9vcEVuZFN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYXliZUxvb3BFbmRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pc1ByZWNlZGVuY2VEZWNpc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUudmVyaWZ5QVROID0gZnVuY3Rpb24oYXRuKSB7XG4gICAgaWYgKCF0aGlzLmRlc2VyaWFsaXphdGlvbk9wdGlvbnMudmVyaWZ5QVROKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdmVyaWZ5IGFzc3VtcHRpb25zXG5cdGZvcih2YXIgaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKHN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgfHwgc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIDw9IDEpO1xuICAgICAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBQbHVzQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmxvb3BCYWNrU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5sb29wQmFja1N0YXRlICE9PSBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoID09PSAyKTtcbiAgICAgICAgICAgIGlmIChzdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBTdGFyQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9uc1sxXS50YXJnZXQgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oIXN0YXRlLm5vbkdyZWVkeSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldCBpbnN0YW5jZW9mIExvb3BFbmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnNbMV0udGFyZ2V0IGluc3RhbmNlb2YgU3RhckJsb2NrU3RhcnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5ub25HcmVlZHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyhcIklsbGVnYWxTdGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wYmFja1N0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA9PT0gMSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldCBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUubG9vcEJhY2tTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5zdG9wU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmVuZFN0YXRlICE9PSBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEJsb2NrRW5kU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUuc3RhcnRTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBEZWNpc2lvblN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA8PSAxIHx8IHN0YXRlLmRlY2lzaW9uID49IDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggPD0gMSB8fCAoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSk7XG4gICAgICAgIH1cblx0fVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5jaGVja0NvbmRpdGlvbiA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZT09PW51bGwpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIklsbGVnYWxTdGF0ZVwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IChtZXNzYWdlKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWRJbnQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkSW50MzIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbG93ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgdmFyIGhpZ2ggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICByZXR1cm4gbG93IHwgKGhpZ2ggPDwgMTYpO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkTG9uZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsb3cgPSB0aGlzLnJlYWRJbnQzMigpO1xuICAgIHZhciBoaWdoID0gdGhpcy5yZWFkSW50MzIoKTtcbiAgICByZXR1cm4gKGxvdyAmIDB4MDAwMDAwMDBGRkZGRkZGRikgfCAoaGlnaCA8PCAzMik7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCeXRlVG9IZXgoKSB7XG5cdHZhciBidGggPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHRcdGJ0aFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkudG9VcHBlckNhc2UoKTtcblx0fVxuXHRyZXR1cm4gYnRoO1xufVxuXG52YXIgYnl0ZVRvSGV4ID0gY3JlYXRlQnl0ZVRvSGV4KCk7XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFVVSUQgPSBmdW5jdGlvbigpIHtcblx0dmFyIGJiID0gW107XG5cdGZvcih2YXIgaT03O2k+PTA7aS0tKSB7XG5cdFx0dmFyIGludCA9IHRoaXMucmVhZEludCgpO1xuXHRcdC8qIGpzaGludCBiaXR3aXNlOiBmYWxzZSAqL1xuXHRcdGJiWygyKmkpKzFdID0gaW50ICYgMHhGRjtcblx0XHRiYlsyKmldID0gKGludCA+PiA4KSAmIDB4RkY7XG5cdH1cbiAgICByZXR1cm4gYnl0ZVRvSGV4W2JiWzBdXSArIGJ5dGVUb0hleFtiYlsxXV0gK1xuICAgIGJ5dGVUb0hleFtiYlsyXV0gKyBieXRlVG9IZXhbYmJbM11dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbNF1dICsgYnl0ZVRvSGV4W2JiWzVdXSArICctJyArXG4gICAgYnl0ZVRvSGV4W2JiWzZdXSArIGJ5dGVUb0hleFtiYls3XV0gKyAnLScgK1xuICAgIGJ5dGVUb0hleFtiYls4XV0gKyBieXRlVG9IZXhbYmJbOV1dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbMTBdXSArIGJ5dGVUb0hleFtiYlsxMV1dICtcbiAgICBieXRlVG9IZXhbYmJbMTJdXSArIGJ5dGVUb0hleFtiYlsxM11dICtcbiAgICBieXRlVG9IZXhbYmJbMTRdXSArIGJ5dGVUb0hleFtiYlsxNV1dO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5lZGdlRmFjdG9yeSA9IGZ1bmN0aW9uKGF0biwgdHlwZSwgc3JjLCB0cmcsIGFyZzEsIGFyZzIsIGFyZzMsIHNldHMpIHtcbiAgICB2YXIgdGFyZ2V0ID0gYXRuLnN0YXRlc1t0cmddO1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkVQU0lMT046XG4gICAgICAgIHJldHVybiBuZXcgRXBzaWxvblRyYW5zaXRpb24odGFyZ2V0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUkFOR0U6XG4gICAgICAgIHJldHVybiBhcmczICE9PSAwID8gbmV3IFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIFRva2VuLkVPRiwgYXJnMikgOiBuZXcgUmFuZ2VUcmFuc2l0aW9uKHRhcmdldCwgYXJnMSwgYXJnMik7XG4gICAgY2FzZSBUcmFuc2l0aW9uLlJVTEU6XG4gICAgICAgIHJldHVybiBuZXcgUnVsZVRyYW5zaXRpb24oYXRuLnN0YXRlc1thcmcxXSwgYXJnMiwgYXJnMywgdGFyZ2V0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFRElDQVRFOlxuICAgICAgICByZXR1cm4gbmV3IFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxLCBhcmcyLCBhcmczICE9PSAwKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFQ0VERU5DRTpcbiAgICAgICAgcmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIGFyZzEpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BVE9NOlxuICAgICAgICByZXR1cm4gYXJnMyAhPT0gMCA/IG5ldyBBdG9tVHJhbnNpdGlvbih0YXJnZXQsIFRva2VuLkVPRikgOiBuZXcgQXRvbVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uQUNUSU9OOlxuICAgICAgICByZXR1cm4gbmV3IEFjdGlvblRyYW5zaXRpb24odGFyZ2V0LCBhcmcxLCBhcmcyLCBhcmczICE9PSAwKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uU0VUOlxuICAgICAgICByZXR1cm4gbmV3IFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXRzW2FyZzFdKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uTk9UX1NFVDpcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RTZXRUcmFuc2l0aW9uKHRhcmdldCwgc2V0c1thcmcxXSk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLldJTERDQVJEOlxuICAgICAgICByZXR1cm4gbmV3IFdpbGRjYXJkVHJhbnNpdGlvbih0YXJnZXQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFwiVGhlIHNwZWNpZmllZCB0cmFuc2l0aW9uIHR5cGU6IFwiICsgdHlwZSArIFwiIGlzIG5vdCB2YWxpZC5cIjtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnN0YXRlRmFjdG9yeSA9IGZ1bmN0aW9uKHR5cGUsIHJ1bGVJbmRleCkge1xuICAgIGlmICh0aGlzLnN0YXRlRmFjdG9yaWVzID09PSBudWxsKSB7XG4gICAgICAgIHZhciBzZiA9IFtdO1xuICAgICAgICBzZltBVE5TdGF0ZS5JTlZBTElEX1RZUEVdID0gbnVsbDtcbiAgICAgICAgc2ZbQVROU3RhdGUuQkFTSUNdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgQmFzaWNTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5SVUxFX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFJ1bGVTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLkJMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IEJhc2ljQmxvY2tTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUGx1c0Jsb2NrU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFN0YXJCbG9ja1N0YXJ0U3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuVE9LRU5fU1RBUlRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgVG9rZW5zU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5SVUxFX1NUT1BdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUnVsZVN0b3BTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5CTE9DS19FTkRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgQmxvY2tFbmRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0xPT1BfQkFDS10gPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBTdGFyTG9vcGJhY2tTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlldID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgU3Rhckxvb3BFbnRyeVN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlBMVVNfTE9PUF9CQUNLXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFBsdXNMb29wYmFja1N0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLkxPT1BfRU5EXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IExvb3BFbmRTdGF0ZSgpOyB9O1xuICAgICAgICB0aGlzLnN0YXRlRmFjdG9yaWVzID0gc2Y7XG4gICAgfVxuICAgIGlmICh0eXBlPnRoaXMuc3RhdGVGYWN0b3JpZXMubGVuZ3RoIHx8IHRoaXMuc3RhdGVGYWN0b3JpZXNbdHlwZV0gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgc3BlY2lmaWVkIHN0YXRlIHR5cGUgXCIgKyB0eXBlICsgXCIgaXMgbm90IHZhbGlkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcyA9IHRoaXMuc3RhdGVGYWN0b3JpZXNbdHlwZV0oKTtcbiAgICAgICAgaWYgKHMhPT1udWxsKSB7XG4gICAgICAgICAgICBzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5sZXhlckFjdGlvbkZhY3RvcnkgPSBmdW5jdGlvbih0eXBlLCBkYXRhMSwgZGF0YTIpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25GYWN0b3JpZXMgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIGFmID0gW107XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5DSEFOTkVMXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyQ2hhbm5lbEFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5DVVNUT01dID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJDdXN0b21BY3Rpb24oZGF0YTEsIGRhdGEyKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLk1PREVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJNb2RlQWN0aW9uKGRhdGExKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLk1PUkVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlck1vcmVBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5QT1BfTU9ERV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIExleGVyUG9wTW9kZUFjdGlvbi5JTlNUQU5DRTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIG5ldyBMZXhlclB1c2hNb2RlQWN0aW9uKGRhdGExKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLlNLSVBdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlclNraXBBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5UWVBFXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyVHlwZUFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIHRoaXMuYWN0aW9uRmFjdG9yaWVzID0gYWY7XG4gICAgfVxuICAgIGlmICh0eXBlPnRoaXMuYWN0aW9uRmFjdG9yaWVzLmxlbmd0aCB8fCB0aGlzLmFjdGlvbkZhY3Rvcmllc1t0eXBlXSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyhcIlRoZSBzcGVjaWZpZWQgbGV4ZXIgYWN0aW9uIHR5cGUgXCIgKyB0eXBlICsgXCIgaXMgbm90IHZhbGlkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25GYWN0b3JpZXNbdHlwZV0oZGF0YTEsIGRhdGEyKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydHMuQVRORGVzZXJpYWxpemVyID0gQVRORGVzZXJpYWxpemVyOyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dDtcblxuZnVuY3Rpb24gQVROU2ltdWxhdG9yKGF0biwgc2hhcmVkQ29udGV4dENhY2hlKSB7XG5cbiAgICAvLyBUaGUgY29udGV4dCBjYWNoZSBtYXBzIGFsbCBQcmVkaWN0aW9uQ29udGV4dCBvYmplY3RzIHRoYXQgYXJlID09XG4gICAgLy8gIHRvIGEgc2luZ2xlIGNhY2hlZCBjb3B5LiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGNvbnRleHRzXG4gICAgLy8gIGluIGFsbCBBVE5Db25maWdzIGluIGFsbCBERkEgc3RhdGVzLiAgV2UgcmVidWlsZCBlYWNoIEFUTkNvbmZpZ1NldFxuICAgIC8vICB0byB1c2Ugb25seSBjYWNoZWQgbm9kZXMvZ3JhcGhzIGluIGFkZERGQVN0YXRlKCkuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAvLyAgZmlsbCB0aGlzIGR1cmluZyBjbG9zdXJlKCkgc2luY2UgdGhlcmUgYXJlIGxvdHMgb2YgY29udGV4dHMgdGhhdFxuICAgIC8vICBwb3AgdXAgYnV0IGFyZSBub3QgdXNlZCBldmVyIGFnYWluLiBJdCBhbHNvIGdyZWF0bHkgc2xvd3MgZG93biBjbG9zdXJlKCkuXG4gICAgLy9cbiAgICAvLyAgPHA+VGhpcyBjYWNoZSBtYWtlcyBhIGh1Z2UgZGlmZmVyZW5jZSBpbiBtZW1vcnkgYW5kIGEgbGl0dGxlIGJpdCBpbiBzcGVlZC5cbiAgICAvLyAgRm9yIHRoZSBKYXZhIGdyYW1tYXIgb24gamF2YS4qLCBpdCBkcm9wcGVkIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzXG4gICAgLy8gIGF0IHRoZSBlbmQgZnJvbSAyNU0gdG8gMTZNLiBXZSBkb24ndCBzdG9yZSBhbnkgb2YgdGhlIGZ1bGwgY29udGV4dFxuICAgIC8vICBncmFwaHMgaW4gdGhlIERGQSBiZWNhdXNlIHRoZXkgYXJlIGxpbWl0ZWQgdG8gbG9jYWwgY29udGV4dCBvbmx5LFxuICAgIC8vICBidXQgYXBwYXJlbnRseSB0aGVyZSdzIGEgbG90IG9mIHJlcGV0aXRpb24gdGhlcmUgYXMgd2VsbC4gV2Ugb3B0aW1pemVcbiAgICAvLyAgdGhlIGNvbmZpZyBjb250ZXh0cyBiZWZvcmUgc3RvcmluZyB0aGUgY29uZmlnIHNldCBpbiB0aGUgREZBIHN0YXRlc1xuICAgIC8vICBieSBsaXRlcmFsbHkgcmVidWlsZGluZyB0aGVtIHdpdGggY2FjaGVkIHN1YmdyYXBocyBvbmx5LjwvcD5cbiAgICAvL1xuICAgIC8vICA8cD5JIHRyaWVkIGEgY2FjaGUgZm9yIHVzZSBkdXJpbmcgY2xvc3VyZSBvcGVyYXRpb25zLCB0aGF0IHdhc1xuICAgIC8vICB3aGFja2VkIGFmdGVyIGVhY2ggYWRhcHRpdmVQcmVkaWN0KCkuIEl0IGNvc3QgYSBsaXR0bGUgYml0XG4gICAgLy8gIG1vcmUgdGltZSBJIHRoaW5rIGFuZCBkb2Vzbid0IHNhdmUgb24gdGhlIG92ZXJhbGwgZm9vdHByaW50XG4gICAgLy8gIHNvIGl0J3Mgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5LjwvcD5cbiAgICAvLy9cbiAgICB0aGlzLmF0biA9IGF0bjtcbiAgICB0aGlzLnNoYXJlZENvbnRleHRDYWNoZSA9IHNoYXJlZENvbnRleHRDYWNoZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gTXVzdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1pc3NpbmcgZWRnZSBhbmQgZWRnZSB3ZSBrbm93IGxlYWRzIG5vd2hlcmUvLy9cbkFUTlNpbXVsYXRvci5FUlJPUiA9IG5ldyBERkFTdGF0ZSgweDdGRkZGRkZGLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuXG5cbkFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q2FjaGVkQ29udGV4dCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUgPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gICAgdmFyIHZpc2l0ZWQgPSB7fTtcbiAgICByZXR1cm4gZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQoY29udGV4dCwgdGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUsIHZpc2l0ZWQpO1xufTtcblxuZXhwb3J0cy5BVE5TaW11bGF0b3IgPSBBVE5TaW11bGF0b3I7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy8gVGhlIGZvbGxvd2luZyBpbWFnZXMgc2hvdyB0aGUgcmVsYXRpb24gb2Ygc3RhdGVzIGFuZFxuLy8ge0BsaW5rIEFUTlN0YXRlLy90cmFuc2l0aW9uc30gZm9yIHZhcmlvdXMgZ3JhbW1hciBjb25zdHJ1Y3RzLlxuLy9cbi8vIDx1bD5cbi8vXG4vLyA8bGk+U29saWQgZWRnZXMgbWFya2VkIHdpdGggYW4gJi8vMDk0OTsgaW5kaWNhdGUgYSByZXF1aXJlZFxuLy8ge0BsaW5rIEVwc2lsb25UcmFuc2l0aW9ufS48L2xpPlxuLy9cbi8vIDxsaT5EYXNoZWQgZWRnZXMgaW5kaWNhdGUgbG9jYXRpb25zIHdoZXJlIGFueSB0cmFuc2l0aW9uIGRlcml2ZWQgZnJvbVxuLy8ge0BsaW5rIFRyYW5zaXRpb259IG1pZ2h0IGFwcGVhci48L2xpPlxuLy9cbi8vIDxsaT5EYXNoZWQgbm9kZXMgYXJlIHBsYWNlIGhvbGRlcnMgZm9yIGVpdGhlciBhIHNlcXVlbmNlIG9mIGxpbmtlZFxuLy8ge0BsaW5rIEJhc2ljU3RhdGV9IHN0YXRlcyBvciB0aGUgaW5jbHVzaW9uIG9mIGEgYmxvY2sgcmVwcmVzZW50aW5nIGEgbmVzdGVkXG4vLyBjb25zdHJ1Y3QgaW4gb25lIG9mIHRoZSBmb3JtcyBiZWxvdy48L2xpPlxuLy9cbi8vIDxsaT5Ob2RlcyBzaG93aW5nIG11bHRpcGxlIG91dGdvaW5nIGFsdGVybmF0aXZlcyB3aXRoIGEge0Bjb2RlIC4uLn0gc3VwcG9ydFxuLy8gYW55IG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgKG9uZSBvciBtb3JlKS4gTm9kZXMgd2l0aG91dCB0aGUge0Bjb2RlIC4uLn0gb25seVxuLy8gc3VwcG9ydCB0aGUgZXhhY3QgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBzaG93biBpbiB0aGUgZGlhZ3JhbS48L2xpPlxuLy9cbi8vIDwvdWw+XG4vL1xuLy8gPGgyPkJhc2ljIEJsb2NrczwvaDI+XG4vL1xuLy8gPGgzPlJ1bGU8L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvUnVsZS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDM+QmxvY2sgb2YgMSBvciBtb3JlIGFsdGVybmF0aXZlczwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9CbG9jay5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDI+R3JlZWR5IExvb3BzPC9oMj5cbi8vXG4vLyA8aDM+R3JlZWR5IENsb3N1cmU6IHtAY29kZSAoLi4uKSp9PC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0Nsb3N1cmVHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkdyZWVkeSBQb3NpdGl2ZSBDbG9zdXJlOiB7QGNvZGUgKC4uLikrfTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Qb3NpdGl2ZUNsb3N1cmVHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkdyZWVkeSBPcHRpb25hbDoge0Bjb2RlICguLi4pP308L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvT3B0aW9uYWxHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgyPk5vbi1HcmVlZHkgTG9vcHM8L2gyPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IENsb3N1cmU6IHtAY29kZSAoLi4uKSo/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9DbG9zdXJlTm9uR3JlZWR5LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IFBvc2l0aXZlIENsb3N1cmU6IHtAY29kZSAoLi4uKSs/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Qb3NpdGl2ZUNsb3N1cmVOb25HcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPk5vbi1HcmVlZHkgT3B0aW9uYWw6IHtAY29kZSAoLi4uKT8/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9PcHRpb25hbE5vbkdyZWVkeS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG5cbnZhciBJTklUSUFMX05VTV9UUkFOU0lUSU9OUyA9IDQ7XG5cbmZ1bmN0aW9uIEFUTlN0YXRlKCkge1xuICAgIC8vIFdoaWNoIEFUTiBhcmUgd2UgaW4/XG4gICAgdGhpcy5hdG4gPSBudWxsO1xuICAgIHRoaXMuc3RhdGVOdW1iZXIgPSBBVE5TdGF0ZS5JTlZBTElEX1NUQVRFX05VTUJFUjtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IG51bGw7XG4gICAgdGhpcy5ydWxlSW5kZXggPSAwOyAvLyBhdCBydW50aW1lLCB3ZSBkb24ndCBoYXZlIFJ1bGUgb2JqZWN0c1xuICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIC8vIFRyYWNrIHRoZSB0cmFuc2l0aW9ucyBlbWFuYXRpbmcgZnJvbSB0aGlzIEFUTiBzdGF0ZS5cbiAgICB0aGlzLnRyYW5zaXRpb25zID0gW107XG4gICAgLy8gVXNlZCB0byBjYWNoZSBsb29rYWhlYWQgZHVyaW5nIHBhcnNpbmcsIG5vdCB1c2VkIGR1cmluZyBjb25zdHJ1Y3Rpb25cbiAgICB0aGlzLm5leHRUb2tlbldpdGhpblJ1bGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG4vLyBjb25zdGFudHMgZm9yIHNlcmlhbGl6YXRpb25cbkFUTlN0YXRlLklOVkFMSURfVFlQRSA9IDA7XG5BVE5TdGF0ZS5CQVNJQyA9IDE7XG5BVE5TdGF0ZS5SVUxFX1NUQVJUID0gMjtcbkFUTlN0YXRlLkJMT0NLX1NUQVJUID0gMztcbkFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQgPSA0O1xuQVROU3RhdGUuU1RBUl9CTE9DS19TVEFSVCA9IDU7XG5BVE5TdGF0ZS5UT0tFTl9TVEFSVCA9IDY7XG5BVE5TdGF0ZS5SVUxFX1NUT1AgPSA3O1xuQVROU3RhdGUuQkxPQ0tfRU5EID0gODtcbkFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLID0gOTtcbkFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWSA9IDEwO1xuQVROU3RhdGUuUExVU19MT09QX0JBQ0sgPSAxMTtcbkFUTlN0YXRlLkxPT1BfRU5EID0gMTI7XG5cbkFUTlN0YXRlLnNlcmlhbGl6YXRpb25OYW1lcyA9IFtcbiAgICAgICAgICAgIFwiSU5WQUxJRFwiLFxuICAgICAgICAgICAgXCJCQVNJQ1wiLFxuICAgICAgICAgICAgXCJSVUxFX1NUQVJUXCIsXG4gICAgICAgICAgICBcIkJMT0NLX1NUQVJUXCIsXG4gICAgICAgICAgICBcIlBMVVNfQkxPQ0tfU1RBUlRcIixcbiAgICAgICAgICAgIFwiU1RBUl9CTE9DS19TVEFSVFwiLFxuICAgICAgICAgICAgXCJUT0tFTl9TVEFSVFwiLFxuICAgICAgICAgICAgXCJSVUxFX1NUT1BcIixcbiAgICAgICAgICAgIFwiQkxPQ0tfRU5EXCIsXG4gICAgICAgICAgICBcIlNUQVJfTE9PUF9CQUNLXCIsXG4gICAgICAgICAgICBcIlNUQVJfTE9PUF9FTlRSWVwiLFxuICAgICAgICAgICAgXCJQTFVTX0xPT1BfQkFDS1wiLFxuICAgICAgICAgICAgXCJMT09QX0VORFwiIF07XG5cbkFUTlN0YXRlLklOVkFMSURfU1RBVEVfTlVNQkVSID0gLTE7XG5cbkFUTlN0YXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5zdGF0ZU51bWJlcjtcbn07XG5cbkFUTlN0YXRlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIEFUTlN0YXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGVOdW1iZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn07XG5cbkFUTlN0YXRlLnByb3RvdHlwZS5pc05vbkdyZWVkeUV4aXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblxuQVROU3RhdGUucHJvdG90eXBlLmFkZFRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFucywgaW5kZXgpIHtcblx0aWYoaW5kZXg9PT11bmRlZmluZWQpIHtcblx0XHRpbmRleCA9IC0xO1xuXHR9XG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbnMubGVuZ3RoPT09MCkge1xuICAgICAgICB0aGlzLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgPSB0cmFucy5pc0Vwc2lsb247XG4gICAgfSBlbHNlIGlmKHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyAhPT0gdHJhbnMuaXNFcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXg9PT0tMSkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25zLnB1c2godHJhbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvbnMuc3BsaWNlKGluZGV4LCAxLCB0cmFucyk7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gQmFzaWNTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJBU0lDO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5CYXNpY1N0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkJhc2ljU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzaWNTdGF0ZTtcblxuXG5mdW5jdGlvbiBEZWNpc2lvblN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuICAgIHRoaXMuZGVjaXNpb24gPSAtMTtcbiAgICB0aGlzLm5vbkdyZWVkeSA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWNpc2lvblN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkRlY2lzaW9uU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGVjaXNpb25TdGF0ZTtcblxuXG4vLyAgVGhlIHN0YXJ0IG9mIGEgcmVndWxhciB7QGNvZGUgKC4uLil9IGJsb2NrLlxuZnVuY3Rpb24gQmxvY2tTdGFydFN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuZW5kU3RhdGUgPSBudWxsO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjaXNpb25TdGF0ZS5wcm90b3R5cGUpO1xuQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb2NrU3RhcnRTdGF0ZTtcblxuXG5mdW5jdGlvbiBCYXNpY0Jsb2NrU3RhcnRTdGF0ZSgpIHtcblx0QmxvY2tTdGFydFN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuQkxPQ0tfU1RBUlQ7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CYXNpY0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuQmFzaWNCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG5cblxuLy8gVGVybWluYWwgbm9kZSBvZiBhIHNpbXBsZSB7QGNvZGUgKGF8YnxjKX0gYmxvY2suXG5mdW5jdGlvbiBCbG9ja0VuZFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJMT0NLX0VORDtcbiAgICB0aGlzLnN0YXJ0U3RhdGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5CbG9ja0VuZFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkJsb2NrRW5kU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvY2tFbmRTdGF0ZTtcblxuXG4vLyBUaGUgbGFzdCBub2RlIGluIHRoZSBBVE4gZm9yIGEgcnVsZSwgdW5sZXNzIHRoYXQgcnVsZSBpcyB0aGUgc3RhcnQgc3ltYm9sLlxuLy8gIEluIHRoYXQgY2FzZSwgdGhlcmUgaXMgb25lIHRyYW5zaXRpb24gdG8gRU9GLiBMYXRlciwgd2UgbWlnaHQgZW5jb2RlXG4vLyAgcmVmZXJlbmNlcyB0byBhbGwgY2FsbHMgdG8gdGhpcyBydWxlIHRvIGNvbXB1dGUgRk9MTE9XIHNldHMgZm9yXG4vLyAgZXJyb3IgaGFuZGxpbmcuXG4vL1xuZnVuY3Rpb24gUnVsZVN0b3BTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlJVTEVfU1RPUDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUnVsZVN0b3BTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5SdWxlU3RvcFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVTdG9wU3RhdGU7XG5cbmZ1bmN0aW9uIFJ1bGVTdGFydFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlJVTEVfU1RBUlQ7XG5cdHRoaXMuc3RvcFN0YXRlID0gbnVsbDtcblx0dGhpcy5pc1ByZWNlZGVuY2VSdWxlID0gZmFsc2U7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5SdWxlU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSdWxlU3RhcnRTdGF0ZTtcblxuLy8gRGVjaXNpb24gc3RhdGUgZm9yIHtAY29kZSBBK30gYW5kIHtAY29kZSAoQXxCKSt9LiAgSXQgaGFzIHR3byB0cmFuc2l0aW9uczpcbi8vICBvbmUgdG8gdGhlIGxvb3AgYmFjayB0byBzdGFydCBvZiB0aGUgYmxvY2sgYW5kIG9uZSB0byBleGl0LlxuLy9cbmZ1bmN0aW9uIFBsdXNMb29wYmFja1N0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuUExVU19MT09QX0JBQ0s7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QbHVzTG9vcGJhY2tTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblBsdXNMb29wYmFja1N0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsdXNMb29wYmFja1N0YXRlO1xuXG5cbi8vIFN0YXJ0IG9mIHtAY29kZSAoQXxCfC4uLikrfSBsb29wLiBUZWNobmljYWxseSBhIGRlY2lzaW9uIHN0YXRlLCBidXRcbi8vICB3ZSBkb24ndCB1c2UgZm9yIGNvZGUgZ2VuZXJhdGlvbjsgc29tZWJvZHkgbWlnaHQgbmVlZCBpdCwgc28gSSdtIGRlZmluaW5nXG4vLyAgaXQgZm9yIGNvbXBsZXRlbmVzcy4gSW4gcmVhbGl0eSwgdGhlIHtAbGluayBQbHVzTG9vcGJhY2tTdGF0ZX0gbm9kZSBpcyB0aGVcbi8vICByZWFsIGRlY2lzaW9uLW1ha2luZyBub3RlIGZvciB7QGNvZGUgQSt9LlxuLy9cbmZ1bmN0aW9uIFBsdXNCbG9ja1N0YXJ0U3RhdGUoKSB7XG5cdEJsb2NrU3RhcnRTdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQ7XG4gICAgdGhpcy5sb29wQmFja1N0YXRlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUGx1c0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuUGx1c0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbHVzQmxvY2tTdGFydFN0YXRlO1xuXG4vLyBUaGUgYmxvY2sgdGhhdCBiZWdpbnMgYSBjbG9zdXJlIGxvb3AuXG5mdW5jdGlvbiBTdGFyQmxvY2tTdGFydFN0YXRlKCkge1xuXHRCbG9ja1N0YXJ0U3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3RhckJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuU3RhckJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyQmxvY2tTdGFydFN0YXRlO1xuXG5cbmZ1bmN0aW9uIFN0YXJMb29wYmFja1N0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3Rhckxvb3BiYWNrU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuU3Rhckxvb3BiYWNrU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3Rhckxvb3BiYWNrU3RhdGU7XG5cblxuZnVuY3Rpb24gU3Rhckxvb3BFbnRyeVN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuU1RBUl9MT09QX0VOVFJZO1xuICAgIHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG4gICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBzdGF0ZSBjYW4gYmVuZWZpdCBmcm9tIGEgcHJlY2VkZW5jZSBERkEgZHVyaW5nIFNMTCBkZWNpc2lvbiBtYWtpbmcuXG4gICAgdGhpcy5pc1ByZWNlZGVuY2VEZWNpc2lvbiA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblN0YXJMb29wRW50cnlTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblN0YXJMb29wRW50cnlTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyTG9vcEVudHJ5U3RhdGU7XG5cblxuLy8gTWFyayB0aGUgZW5kIG9mIGEgKiBvciArIGxvb3AuXG5mdW5jdGlvbiBMb29wRW5kU3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuTE9PUF9FTkQ7XG5cdHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG5Mb29wRW5kU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuTG9vcEVuZFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvb3BFbmRTdGF0ZTtcblxuXG4vLyBUaGUgVG9rZW5zIHJ1bGUgc3RhcnQgc3RhdGUgbGlua2luZyB0byBlYWNoIGxleGVyIHJ1bGUgc3RhcnQgc3RhdGUgKi9cbmZ1bmN0aW9uIFRva2Vuc1N0YXJ0U3RhdGUoKSB7XG5cdERlY2lzaW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5UT0tFTl9TVEFSVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRva2Vuc1N0YXJ0U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNpc2lvblN0YXRlLnByb3RvdHlwZSk7XG5Ub2tlbnNTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRva2Vuc1N0YXJ0U3RhdGU7XG5cbmV4cG9ydHMuQVROU3RhdGUgPSBBVE5TdGF0ZTtcbmV4cG9ydHMuQmFzaWNTdGF0ZSA9IEJhc2ljU3RhdGU7XG5leHBvcnRzLkRlY2lzaW9uU3RhdGUgPSBEZWNpc2lvblN0YXRlO1xuZXhwb3J0cy5CbG9ja1N0YXJ0U3RhdGUgPSBCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLkJsb2NrRW5kU3RhdGUgPSBCbG9ja0VuZFN0YXRlO1xuZXhwb3J0cy5Mb29wRW5kU3RhdGUgPSBMb29wRW5kU3RhdGU7XG5leHBvcnRzLlJ1bGVTdGFydFN0YXRlID0gUnVsZVN0YXJ0U3RhdGU7XG5leHBvcnRzLlJ1bGVTdG9wU3RhdGUgPSBSdWxlU3RvcFN0YXRlO1xuZXhwb3J0cy5Ub2tlbnNTdGFydFN0YXRlID0gVG9rZW5zU3RhcnRTdGF0ZTtcbmV4cG9ydHMuUGx1c0xvb3BiYWNrU3RhdGUgPSBQbHVzTG9vcGJhY2tTdGF0ZTtcbmV4cG9ydHMuU3Rhckxvb3BiYWNrU3RhdGUgPSBTdGFyTG9vcGJhY2tTdGF0ZTtcbmV4cG9ydHMuU3Rhckxvb3BFbnRyeVN0YXRlID0gU3Rhckxvb3BFbnRyeVN0YXRlO1xuZXhwb3J0cy5QbHVzQmxvY2tTdGFydFN0YXRlID0gUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcbmV4cG9ydHMuU3RhckJsb2NrU3RhcnRTdGF0ZSA9IFN0YXJCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLkJhc2ljQmxvY2tTdGFydFN0YXRlID0gQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gUmVwcmVzZW50cyB0aGUgdHlwZSBvZiByZWNvZ25pemVyIGFuIEFUTiBhcHBsaWVzIHRvLlxuXG5mdW5jdGlvbiBBVE5UeXBlKCkge1xuXG59XG5cbkFUTlR5cGUuTEVYRVIgPSAwO1xuQVROVHlwZS5QQVJTRVIgPSAxO1xuXG5leHBvcnRzLkFUTlR5cGUgPSBBVE5UeXBlO1xuXG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIFdoZW4gd2UgaGl0IGFuIGFjY2VwdCBzdGF0ZSBpbiBlaXRoZXIgdGhlIERGQSBvciB0aGUgQVROLCB3ZVxuLy8gIGhhdmUgdG8gbm90aWZ5IHRoZSBjaGFyYWN0ZXIgc3RyZWFtIHRvIHN0YXJ0IGJ1ZmZlcmluZyBjaGFyYWN0ZXJzXG4vLyAgdmlhIHtAbGluayBJbnRTdHJlYW0vL21hcmt9IGFuZCByZWNvcmQgdGhlIGN1cnJlbnQgc3RhdGUuIFRoZSBjdXJyZW50IHNpbSBzdGF0ZVxuLy8gIGluY2x1ZGVzIHRoZSBjdXJyZW50IGluZGV4IGludG8gdGhlIGlucHV0LCB0aGUgY3VycmVudCBsaW5lLFxuLy8gIGFuZCBjdXJyZW50IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGF0IGxpbmUuIE5vdGUgdGhhdCB0aGUgTGV4ZXIgaXNcbi8vICB0cmFja2luZyB0aGUgc3RhcnRpbmcgbGluZSBhbmQgY2hhcmFjdGVyaXphdGlvbiBvZiB0aGUgdG9rZW4uIFRoZXNlXG4vLyAgdmFyaWFibGVzIHRyYWNrIHRoZSBcInN0YXRlXCIgb2YgdGhlIHNpbXVsYXRvciB3aGVuIGl0IGhpdHMgYW4gYWNjZXB0IHN0YXRlLlxuLy9cbi8vICA8cD5XZSB0cmFjayB0aGVzZSB2YXJpYWJsZXMgc2VwYXJhdGVseSBmb3IgdGhlIERGQSBhbmQgQVROIHNpbXVsYXRpb25cbi8vICBiZWNhdXNlIHRoZSBERkEgc2ltdWxhdGlvbiBvZnRlbiBoYXMgdG8gZmFpbCBvdmVyIHRvIHRoZSBBVE5cbi8vICBzaW11bGF0aW9uLiBJZiB0aGUgQVROIHNpbXVsYXRpb24gZmFpbHMsIHdlIG5lZWQgdGhlIERGQSB0byBmYWxsXG4vLyAgYmFjayB0byBpdHMgcHJldmlvdXNseSBhY2NlcHRlZCBzdGF0ZSwgaWYgYW55LiBJZiB0aGUgQVROIHN1Y2NlZWRzLFxuLy8gIHRoZW4gdGhlIEFUTiBkb2VzIHRoZSBhY2NlcHQgYW5kIHRoZSBERkEgc2ltdWxhdG9yIHRoYXQgaW52b2tlZCBpdFxuLy8gIGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBwcmVkaWN0ZWQgdG9rZW4gdHlwZS48L3A+XG4vLy9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIExleGVyID0gcmVxdWlyZSgnLi8uLi9MZXhlcicpLkxleGVyO1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vQVROU2ltdWxhdG9yJykuQVROU2ltdWxhdG9yO1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBPcmRlcmVkQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5PcmRlcmVkQVROQ29uZmlnU2V0O1xudmFyIFByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlByZWRpY3Rpb25Db250ZXh0O1xudmFyIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xudmFyIFJ1bGVTdG9wU3RhdGUgPSByZXF1aXJlKCcuL0FUTlN0YXRlJykuUnVsZVN0b3BTdGF0ZTtcbnZhciBMZXhlckFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuTGV4ZXJBVE5Db25maWc7XG52YXIgVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNpdGlvbicpLlRyYW5zaXRpb247XG52YXIgTGV4ZXJBY3Rpb25FeGVjdXRvciA9IHJlcXVpcmUoJy4vTGV4ZXJBY3Rpb25FeGVjdXRvcicpLkxleGVyQWN0aW9uRXhlY3V0b3I7XG52YXIgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vLi4vZXJyb3IvRXJyb3JzJykuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuZnVuY3Rpb24gcmVzZXRTaW1TdGF0ZShzaW0pIHtcblx0c2ltLmluZGV4ID0gLTE7XG5cdHNpbS5saW5lID0gMDtcblx0c2ltLmNvbHVtbiA9IC0xO1xuXHRzaW0uZGZhU3RhdGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBTaW1TdGF0ZSgpIHtcblx0cmVzZXRTaW1TdGF0ZSh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNpbVN0YXRlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHRyZXNldFNpbVN0YXRlKHRoaXMpO1xufTtcblxuZnVuY3Rpb24gTGV4ZXJBVE5TaW11bGF0b3IocmVjb2csIGF0biwgZGVjaXNpb25Ub0RGQSwgc2hhcmVkQ29udGV4dENhY2hlKSB7XG5cdEFUTlNpbXVsYXRvci5jYWxsKHRoaXMsIGF0biwgc2hhcmVkQ29udGV4dENhY2hlKTtcblx0dGhpcy5kZWNpc2lvblRvREZBID0gZGVjaXNpb25Ub0RGQTtcblx0dGhpcy5yZWNvZyA9IHJlY29nO1xuXHQvLyBUaGUgY3VycmVudCB0b2tlbidzIHN0YXJ0aW5nIGluZGV4IGludG8gdGhlIGNoYXJhY3RlciBzdHJlYW0uXG5cdC8vIFNoYXJlZCBhY3Jvc3MgREZBIHRvIEFUTiBzaW11bGF0aW9uIGluIGNhc2UgdGhlIEFUTiBmYWlscyBhbmQgdGhlXG5cdC8vIERGQSBkaWQgbm90IGhhdmUgYSBwcmV2aW91cyBhY2NlcHQgc3RhdGUuIEluIHRoaXMgY2FzZSwgd2UgdXNlIHRoZVxuXHQvLyBBVE4tZ2VuZXJhdGVkIGV4Y2VwdGlvbiBvYmplY3QuXG5cdHRoaXMuc3RhcnRJbmRleCA9IC0xO1xuXHQvLyBsaW5lIG51bWJlciAxLi5uIHdpdGhpbiB0aGUgaW5wdXQvLy9cblx0dGhpcy5saW5lID0gMTtcblx0Ly8gVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuXHQvLyAwLi5uLTEvLy9cblx0dGhpcy5jb2x1bW4gPSAwO1xuXHR0aGlzLm1vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cdC8vIFVzZWQgZHVyaW5nIERGQS9BVE4gZXhlYyB0byByZWNvcmQgdGhlIG1vc3QgcmVjZW50IGFjY2VwdCBjb25maWd1cmF0aW9uXG5cdC8vIGluZm9cblx0dGhpcy5wcmV2QWNjZXB0ID0gbmV3IFNpbVN0YXRlKCk7XG5cdC8vIGRvbmVcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU2ltdWxhdG9yLnByb3RvdHlwZSk7XG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckFUTlNpbXVsYXRvcjtcblxuTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcgPSBmYWxzZTtcbkxleGVyQVROU2ltdWxhdG9yLmRmYV9kZWJ1ZyA9IGZhbHNlO1xuXG5MZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0UgPSAwO1xuTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFID0gMTI3OyAvLyBmb3JjZXMgdW5pY29kZSB0byBzdGF5IGluIEFUTlxuXG5MZXhlckFUTlNpbXVsYXRvci5tYXRjaF9jYWxscyA9IDA7XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb3B5U3RhdGUgPSBmdW5jdGlvbihzaW11bGF0b3IpIHtcblx0dGhpcy5jb2x1bW4gPSBzaW11bGF0b3IuY29sdW1uO1xuXHR0aGlzLmxpbmUgPSBzaW11bGF0b3IubGluZTtcblx0dGhpcy5tb2RlID0gc2ltdWxhdG9yLm1vZGU7XG5cdHRoaXMuc3RhcnRJbmRleCA9IHNpbXVsYXRvci5zdGFydEluZGV4O1xufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24oaW5wdXQsIG1vZGUpIHtcblx0dGhpcy5tYXRjaF9jYWxscyArPSAxO1xuXHR0aGlzLm1vZGUgPSBtb2RlO1xuXHR2YXIgbWFyayA9IGlucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR0aGlzLnN0YXJ0SW5kZXggPSBpbnB1dC5pbmRleDtcblx0XHR0aGlzLnByZXZBY2NlcHQucmVzZXQoKTtcblx0XHR2YXIgZGZhID0gdGhpcy5kZWNpc2lvblRvREZBW21vZGVdO1xuXHRcdGlmIChkZmEuczAgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQVROKGlucHV0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXhlY0FUTihpbnB1dCwgZGZhLnMwKTtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0aW5wdXQucmVsZWFzZShtYXJrKTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucHJldkFjY2VwdC5yZXNldCgpO1xuXHR0aGlzLnN0YXJ0SW5kZXggPSAtMTtcblx0dGhpcy5saW5lID0gMTtcblx0dGhpcy5jb2x1bW4gPSAwO1xuXHR0aGlzLm1vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUubWF0Y2hBVE4gPSBmdW5jdGlvbihpbnB1dCkge1xuXHR2YXIgc3RhcnRTdGF0ZSA9IHRoaXMuYXRuLm1vZGVUb1N0YXJ0U3RhdGVbdGhpcy5tb2RlXTtcblxuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIm1hdGNoQVROIG1vZGUgXCIgKyB0aGlzLm1vZGUgKyBcIiBzdGFydDogXCIgKyBzdGFydFN0YXRlKTtcblx0fVxuXHR2YXIgb2xkX21vZGUgPSB0aGlzLm1vZGU7XG5cdHZhciBzMF9jbG9zdXJlID0gdGhpcy5jb21wdXRlU3RhcnRTdGF0ZShpbnB1dCwgc3RhcnRTdGF0ZSk7XG5cdHZhciBzdXBwcmVzc0VkZ2UgPSBzMF9jbG9zdXJlLmhhc1NlbWFudGljQ29udGV4dDtcblx0czBfY2xvc3VyZS5oYXNTZW1hbnRpY0NvbnRleHQgPSBmYWxzZTtcblxuXHR2YXIgbmV4dCA9IHRoaXMuYWRkREZBU3RhdGUoczBfY2xvc3VyZSk7XG5cdGlmICghc3VwcHJlc3NFZGdlKSB7XG5cdFx0dGhpcy5kZWNpc2lvblRvREZBW3RoaXMubW9kZV0uczAgPSBuZXh0O1xuXHR9XG5cblx0dmFyIHByZWRpY3QgPSB0aGlzLmV4ZWNBVE4oaW5wdXQsIG5leHQpO1xuXG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiREZBIGFmdGVyIG1hdGNoQVROOiBcIiArIHRoaXMuZGVjaXNpb25Ub0RGQVtvbGRfbW9kZV0udG9MZXhlclN0cmluZygpKTtcblx0fVxuXHRyZXR1cm4gcHJlZGljdDtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROID0gZnVuY3Rpb24oaW5wdXQsIGRzMCkge1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcInN0YXJ0IHN0YXRlIGNsb3N1cmU9XCIgKyBkczAuY29uZmlncyk7XG5cdH1cblx0aWYgKGRzMC5pc0FjY2VwdFN0YXRlKSB7XG5cdFx0Ly8gYWxsb3cgemVyby1sZW5ndGggdG9rZW5zXG5cdFx0dGhpcy5jYXB0dXJlU2ltU3RhdGUodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgZHMwKTtcblx0fVxuXHR2YXIgdCA9IGlucHV0LkxBKDEpO1xuXHR2YXIgcyA9IGRzMDsgLy8gcyBpcyBjdXJyZW50L2Zyb20gREZBIHN0YXRlXG5cblx0d2hpbGUgKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcImV4ZWNBVE4gbG9vcCBzdGFydGluZyBjbG9zdXJlOiBcIiArIHMuY29uZmlncyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbW92ZSBzcmMtPnRyZywgc3JjLT50cmcsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIHRyZyB0b1xuXHRcdC8vIGF2b2lkIGxvb2tpbmcgdXAgdGhlIERGQSBzdGF0ZSBhZ2Fpbiwgd2hpY2ggaXMgZXhwZW5zaXZlLlxuXHRcdC8vIElmIHRoZSBwcmV2aW91cyB0YXJnZXQgd2FzIGFscmVhZHkgcGFydCBvZiB0aGUgREZBLCB3ZSBtaWdodFxuXHRcdC8vIGJlIGFibGUgdG8gYXZvaWQgZG9pbmcgYSByZWFjaCBvcGVyYXRpb24gdXBvbiB0LiBJZiBzIT1udWxsLFxuXHRcdC8vIGl0IG1lYW5zIHRoYXQgc2VtYW50aWMgcHJlZGljYXRlcyBkaWRuJ3QgcHJldmVudCB1cyBmcm9tXG5cdFx0Ly8gY3JlYXRpbmcgYSBERkEgc3RhdGUuIE9uY2Ugd2Uga25vdyBzIT1udWxsLCB3ZSBjaGVjayB0byBzZWUgaWZcblx0XHQvLyB0aGUgREZBIHN0YXRlIGhhcyBhbiBlZGdlIGFscmVhZHkgZm9yIHQuIElmIHNvLCB3ZSBjYW4ganVzdCByZXVzZVxuXHRcdC8vIGl0J3MgY29uZmlndXJhdGlvbiBzZXQ7IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gcmUtY29tcHV0aW5nIGl0LlxuXHRcdC8vIFRoaXMgaXMga2luZCBvZiBsaWtlIGRvaW5nIERGQSBzaW11bGF0aW9uIHdpdGhpbiB0aGUgQVROXG5cdFx0Ly8gc2ltdWxhdGlvbiBiZWNhdXNlIERGQSBzaW11bGF0aW9uIGlzIHJlYWxseSBqdXN0IGEgd2F5IHRvIGF2b2lkXG5cdFx0Ly8gY29tcHV0aW5nIHJlYWNoL2Nsb3N1cmUgc2V0cy4gVGVjaG5pY2FsbHksIG9uY2Ugd2Uga25vdyB0aGF0XG5cdFx0Ly8gd2UgaGF2ZSBhIHByZXZpb3VzbHkgYWRkZWQgREZBIHN0YXRlLCB3ZSBjb3VsZCBqdW1wIG92ZXIgdG9cblx0XHQvLyB0aGUgREZBIHNpbXVsYXRvci4gQnV0LCB0aGF0IHdvdWxkIG1lYW4gcG9wcGluZyBiYWNrIGFuZCBmb3J0aFxuXHRcdC8vIGEgbG90IGFuZCBtYWtpbmcgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQgYWxnb3JpdGhtaWNhbGx5LlxuXHRcdC8vIFRoaXMgb3B0aW1pemF0aW9uIG1ha2VzIGEgbG90IG9mIHNlbnNlIGZvciBsb29wcyB3aXRoaW4gREZBLlxuXHRcdC8vIEEgY2hhcmFjdGVyIHdpbGwgdGFrZSB1cyBiYWNrIHRvIGFuIGV4aXN0aW5nIERGQSBzdGF0ZVxuXHRcdC8vIHRoYXQgYWxyZWFkeSBoYXMgbG90cyBvZiBlZGdlcyBvdXQgb2YgaXQuIGUuZy4sIC4qIGluIGNvbW1lbnRzLlxuXHRcdC8vIHByaW50KFwiVGFyZ2V0IGZvcjpcIiArIHN0cihzKSArIFwiIGFuZDpcIiArIHN0cih0KSlcblx0XHR2YXIgdGFyZ2V0ID0gdGhpcy5nZXRFeGlzdGluZ1RhcmdldFN0YXRlKHMsIHQpO1xuXHRcdC8vIHByaW50KFwiRXhpc3Rpbmc6XCIgKyBzdHIodGFyZ2V0KSlcblx0XHRpZiAodGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHR0YXJnZXQgPSB0aGlzLmNvbXB1dGVUYXJnZXRTdGF0ZShpbnB1dCwgcywgdCk7XG5cdFx0XHQvLyBwcmludChcIkNvbXB1dGVkOlwiICsgc3RyKHRhcmdldCkpXG5cdFx0fVxuXHRcdGlmICh0YXJnZXQgPT09IEFUTlNpbXVsYXRvci5FUlJPUikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdC8vIElmIHRoaXMgaXMgYSBjb25zdW1hYmxlIGlucHV0IGVsZW1lbnQsIG1ha2Ugc3VyZSB0byBjb25zdW1lIGJlZm9yZVxuXHRcdC8vIGNhcHR1cmluZyB0aGUgYWNjZXB0IHN0YXRlIHNvIHRoZSBpbnB1dCBpbmRleCwgbGluZSwgYW5kIGNoYXJcblx0XHQvLyBwb3NpdGlvbiBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnByZXRlciBhdCB0aGVcblx0XHQvLyBlbmQgb2YgdGhlIHRva2VuLlxuXHRcdGlmICh0ICE9PSBUb2tlbi5FT0YpIHtcblx0XHRcdHRoaXMuY29uc3VtZShpbnB1dCk7XG5cdFx0fVxuXHRcdGlmICh0YXJnZXQuaXNBY2NlcHRTdGF0ZSkge1xuXHRcdFx0dGhpcy5jYXB0dXJlU2ltU3RhdGUodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgdGFyZ2V0KTtcblx0XHRcdGlmICh0ID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHQgPSBpbnB1dC5MQSgxKTtcblx0XHRzID0gdGFyZ2V0OyAvLyBmbGlwOyBjdXJyZW50IERGQSB0YXJnZXQgYmVjb21lcyBuZXcgc3JjL2Zyb20gc3RhdGVcblx0fVxuXHRyZXR1cm4gdGhpcy5mYWlsT3JBY2NlcHQodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgcy5jb25maWdzLCB0KTtcbn07XG5cbi8vIEdldCBhbiBleGlzdGluZyB0YXJnZXQgc3RhdGUgZm9yIGFuIGVkZ2UgaW4gdGhlIERGQS4gSWYgdGhlIHRhcmdldCBzdGF0ZVxuLy8gZm9yIHRoZSBlZGdlIGhhcyBub3QgeWV0IGJlZW4gY29tcHV0ZWQgb3IgaXMgb3RoZXJ3aXNlIG5vdCBhdmFpbGFibGUsXG4vLyB0aGlzIG1ldGhvZCByZXR1cm5zIHtAY29kZSBudWxsfS5cbi8vXG4vLyBAcGFyYW0gcyBUaGUgY3VycmVudCBERkEgc3RhdGVcbi8vIEBwYXJhbSB0IFRoZSBuZXh0IGlucHV0IHN5bWJvbFxuLy8gQHJldHVybiBUaGUgZXhpc3RpbmcgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRhcmdldCBzdGF0ZSBmb3IgdGhpcyBlZGdlIGlzIG5vdFxuLy8gYWxyZWFkeSBjYWNoZWRcbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFeGlzdGluZ1RhcmdldFN0YXRlID0gZnVuY3Rpb24ocywgdCkge1xuXHRpZiAocy5lZGdlcyA9PT0gbnVsbCB8fCB0IDwgTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFIHx8IHQgPiBMZXhlckFUTlNpbXVsYXRvci5NQVhfREZBX0VER0UpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciB0YXJnZXQgPSBzLmVkZ2VzW3QgLSBMZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0VdO1xuXHRpZih0YXJnZXQ9PT11bmRlZmluZWQpIHtcblx0XHR0YXJnZXQgPSBudWxsO1xuXHR9XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1ZyAmJiB0YXJnZXQgIT09IG51bGwpIHtcblx0XHRjb25zb2xlLmxvZyhcInJldXNlIHN0YXRlIFwiICsgcy5zdGF0ZU51bWJlciArIFwiIGVkZ2UgdG8gXCIgKyB0YXJnZXQuc3RhdGVOdW1iZXIpO1xuXHR9XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG4vLyBDb21wdXRlIGEgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEsIGFuZCBhdHRlbXB0IHRvIGFkZCB0aGVcbi8vIGNvbXB1dGVkIHN0YXRlIGFuZCBjb3JyZXNwb25kaW5nIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbVxuLy8gQHBhcmFtIHMgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vXG4vLyBAcmV0dXJuIFRoZSBjb21wdXRlZCB0YXJnZXQgREZBIHN0YXRlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgc3ltYm9sXG4vLyB7QGNvZGUgdH0uIElmIHtAY29kZSB0fSBkb2VzIG5vdCBsZWFkIHRvIGEgdmFsaWQgREZBIHN0YXRlLCB0aGlzIG1ldGhvZFxuLy8gcmV0dXJucyB7QGxpbmsgLy9FUlJPUn0uXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVRhcmdldFN0YXRlID0gZnVuY3Rpb24oaW5wdXQsIHMsIHQpIHtcblx0dmFyIHJlYWNoID0gbmV3IE9yZGVyZWRBVE5Db25maWdTZXQoKTtcblx0Ly8gaWYgd2UgZG9uJ3QgZmluZCBhbiBleGlzdGluZyBERkEgc3RhdGVcblx0Ly8gRmlsbCByZWFjaCBzdGFydGluZyBmcm9tIGNsb3N1cmUsIGZvbGxvd2luZyB0IHRyYW5zaXRpb25zXG5cdHRoaXMuZ2V0UmVhY2hhYmxlQ29uZmlnU2V0KGlucHV0LCBzLmNvbmZpZ3MsIHJlYWNoLCB0KTtcblxuXHRpZiAocmVhY2guaXRlbXMubGVuZ3RoID09PSAwKSB7IC8vIHdlIGdvdCBub3doZXJlIG9uIHQgZnJvbSBzXG5cdFx0aWYgKCFyZWFjaC5oYXNTZW1hbnRpY0NvbnRleHQpIHtcblx0XHRcdC8vIHdlIGdvdCBub3doZXJlIG9uIHQsIGRvbid0IHRocm93IG91dCB0aGlzIGtub3dsZWRnZTsgaXQnZFxuXHRcdFx0Ly8gY2F1c2UgYSBmYWlsb3ZlciBmcm9tIERGQSBsYXRlci5cblx0XHRcdHRoaXMuYWRkREZBRWRnZShzLCB0LCBBVE5TaW11bGF0b3IuRVJST1IpO1xuXHRcdH1cblx0XHQvLyBzdG9wIHdoZW4gd2UgY2FuJ3QgbWF0Y2ggYW55IG1vcmUgY2hhclxuXHRcdHJldHVybiBBVE5TaW11bGF0b3IuRVJST1I7XG5cdH1cblx0Ly8gQWRkIGFuIGVkZ2UgZnJvbSBzIHRvIHRhcmdldCBERkEgZm91bmQvY3JlYXRlZCBmb3IgcmVhY2hcblx0cmV0dXJuIHRoaXMuYWRkREZBRWRnZShzLCB0LCBudWxsLCByZWFjaCk7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZmFpbE9yQWNjZXB0ID0gZnVuY3Rpb24ocHJldkFjY2VwdCwgaW5wdXQsIHJlYWNoLCB0KSB7XG5cdGlmICh0aGlzLnByZXZBY2NlcHQuZGZhU3RhdGUgIT09IG51bGwpIHtcblx0XHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IHByZXZBY2NlcHQuZGZhU3RhdGUubGV4ZXJBY3Rpb25FeGVjdXRvcjtcblx0XHR0aGlzLmFjY2VwdChpbnB1dCwgbGV4ZXJBY3Rpb25FeGVjdXRvciwgdGhpcy5zdGFydEluZGV4LFxuXHRcdFx0XHRwcmV2QWNjZXB0LmluZGV4LCBwcmV2QWNjZXB0LmxpbmUsIHByZXZBY2NlcHQuY29sdW1uKTtcblx0XHRyZXR1cm4gcHJldkFjY2VwdC5kZmFTdGF0ZS5wcmVkaWN0aW9uO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGlmIG5vIGFjY2VwdCBhbmQgRU9GIGlzIGZpcnN0IGNoYXIsIHJldHVybiBFT0Zcblx0XHRpZiAodCA9PT0gVG9rZW4uRU9GICYmIGlucHV0LmluZGV4ID09PSB0aGlzLnN0YXJ0SW5kZXgpIHtcblx0XHRcdHJldHVybiBUb2tlbi5FT0Y7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMucmVjb2csIGlucHV0LCB0aGlzLnN0YXJ0SW5kZXgsIHJlYWNoKTtcblx0fVxufTtcblxuLy8gR2l2ZW4gYSBzdGFydGluZyBjb25maWd1cmF0aW9uIHNldCwgZmlndXJlIG91dCBhbGwgQVROIGNvbmZpZ3VyYXRpb25zXG4vLyB3ZSBjYW4gcmVhY2ggdXBvbiBpbnB1dCB7QGNvZGUgdH0uIFBhcmFtZXRlciB7QGNvZGUgcmVhY2h9IGlzIGEgcmV0dXJuXG4vLyBwYXJhbWV0ZXIuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UmVhY2hhYmxlQ29uZmlnU2V0ID0gZnVuY3Rpb24oaW5wdXQsIGNsb3N1cmUsXG5cdFx0cmVhY2gsIHQpIHtcblx0Ly8gdGhpcyBpcyB1c2VkIHRvIHNraXAgcHJvY2Vzc2luZyBmb3IgY29uZmlncyB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHlcblx0Ly8gdGhhbiBhIGNvbmZpZyB0aGF0IGFscmVhZHkgcmVhY2hlZCBhbiBhY2NlcHQgc3RhdGUgZm9yIHRoZSBzYW1lIHJ1bGVcblx0dmFyIHNraXBBbHQgPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNsb3N1cmUuaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY2ZnID0gY2xvc3VyZS5pdGVtc1tpXTtcblx0XHR2YXIgY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSA9IChjZmcuYWx0ID09PSBza2lwQWx0KTtcblx0XHRpZiAoY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSAmJiBjZmcucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcInRlc3RpbmcgJXMgYXQgJXNcXG5cIiwgdGhpcy5nZXRUb2tlbk5hbWUodCksIGNmZ1xuXHRcdFx0XHRcdC50b1N0cmluZyh0aGlzLnJlY29nLCB0cnVlKSk7XG5cdFx0fVxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2ZnLnN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgdHJhbnMgPSBjZmcuc3RhdGUudHJhbnNpdGlvbnNbal07IC8vIGZvciBlYWNoIHRyYW5zaXRpb25cblx0XHRcdHZhciB0YXJnZXQgPSB0aGlzLmdldFJlYWNoYWJsZVRhcmdldCh0cmFucywgdCk7XG5cdFx0XHRpZiAodGFyZ2V0ICE9PSBudWxsKSB7XG5cdFx0XHRcdHZhciBsZXhlckFjdGlvbkV4ZWN1dG9yID0gY2ZnLmxleGVyQWN0aW9uRXhlY3V0b3I7XG5cdFx0XHRcdGlmIChsZXhlckFjdGlvbkV4ZWN1dG9yICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0bGV4ZXJBY3Rpb25FeGVjdXRvciA9IGxleGVyQWN0aW9uRXhlY3V0b3IuZml4T2Zmc2V0QmVmb3JlTWF0Y2goaW5wdXQuaW5kZXggLSB0aGlzLnN0YXJ0SW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciB0cmVhdEVvZkFzRXBzaWxvbiA9ICh0ID09PSBUb2tlbi5FT0YpO1xuXHRcdFx0XHR2YXIgY29uZmlnID0gbmV3IExleGVyQVROQ29uZmlnKHtzdGF0ZTp0YXJnZXQsIGxleGVyQWN0aW9uRXhlY3V0b3I6bGV4ZXJBY3Rpb25FeGVjdXRvcn0sIGNmZyk7XG5cdFx0XHRcdGlmICh0aGlzLmNsb3N1cmUoaW5wdXQsIGNvbmZpZywgcmVhY2gsXG5cdFx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCB0cnVlLCB0cmVhdEVvZkFzRXBzaWxvbikpIHtcblx0XHRcdFx0XHQvLyBhbnkgcmVtYWluaW5nIGNvbmZpZ3MgZm9yIHRoaXMgYWx0IGhhdmUgYSBsb3dlciBwcmlvcml0eVxuXHRcdFx0XHRcdC8vIHRoYW4gdGhlIG9uZSB0aGF0IGp1c3QgcmVhY2hlZCBhbiBhY2NlcHQgc3RhdGUuXG5cdFx0XHRcdFx0c2tpcEFsdCA9IGNmZy5hbHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihpbnB1dCwgbGV4ZXJBY3Rpb25FeGVjdXRvcixcblx0XHRzdGFydEluZGV4LCBpbmRleCwgbGluZSwgY2hhclBvcykge1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIkFDVElPTiAlc1xcblwiLCBsZXhlckFjdGlvbkV4ZWN1dG9yKTtcblx0fVxuXHQvLyBzZWVrIHRvIGFmdGVyIGxhc3QgY2hhciBpbiB0b2tlblxuXHRpbnB1dC5zZWVrKGluZGV4KTtcblx0dGhpcy5saW5lID0gbGluZTtcblx0dGhpcy5jb2x1bW4gPSBjaGFyUG9zO1xuXHRpZiAobGV4ZXJBY3Rpb25FeGVjdXRvciAhPT0gbnVsbCAmJiB0aGlzLnJlY29nICE9PSBudWxsKSB7XG5cdFx0bGV4ZXJBY3Rpb25FeGVjdXRvci5leGVjdXRlKHRoaXMucmVjb2csIGlucHV0LCBzdGFydEluZGV4KTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFJlYWNoYWJsZVRhcmdldCA9IGZ1bmN0aW9uKHRyYW5zLCB0KSB7XG5cdGlmICh0cmFucy5tYXRjaGVzKHQsIDAsIExleGVyLk1BWF9DSEFSX1ZBTFVFKSkge1xuXHRcdHJldHVybiB0cmFucy50YXJnZXQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlU3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBwKSB7XG5cdHZhciBpbml0aWFsQ29udGV4dCA9IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR2YXIgY29uZmlncyA9IG5ldyBPcmRlcmVkQVROQ29uZmlnU2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcC50cmFuc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB0YXJnZXQgPSBwLnRyYW5zaXRpb25zW2ldLnRhcmdldDtcbiAgICAgICAgdmFyIGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7c3RhdGU6dGFyZ2V0LCBhbHQ6aSsxLCBjb250ZXh0OmluaXRpYWxDb250ZXh0fSwgbnVsbCk7XG5cdFx0dGhpcy5jbG9zdXJlKGlucHV0LCBjZmcsIGNvbmZpZ3MsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXHR9XG5cdHJldHVybiBjb25maWdzO1xufTtcblxuLy8gU2luY2UgdGhlIGFsdGVybmF0aXZlcyB3aXRoaW4gYW55IGxleGVyIGRlY2lzaW9uIGFyZSBvcmRlcmVkIGJ5XG4vLyBwcmVmZXJlbmNlLCB0aGlzIG1ldGhvZCBzdG9wcyBwdXJzdWluZyB0aGUgY2xvc3VyZSBhcyBzb29uIGFzIGFuIGFjY2VwdFxuLy8gc3RhdGUgaXMgcmVhY2hlZC4gQWZ0ZXIgdGhlIGZpcnN0IGFjY2VwdCBzdGF0ZSBpcyByZWFjaGVkIGJ5IGRlcHRoLWZpcnN0XG4vLyBzZWFyY2ggZnJvbSB7QGNvZGUgY29uZmlnfSwgYWxsIG90aGVyIChwb3RlbnRpYWxseSByZWFjaGFibGUpIHN0YXRlcyBmb3Jcbi8vIHRoaXMgcnVsZSB3b3VsZCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYW4gYWNjZXB0IHN0YXRlIGlzIHJlYWNoZWQsIG90aGVyd2lzZVxuLy8ge0Bjb2RlIGZhbHNlfS5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jbG9zdXJlID0gZnVuY3Rpb24oaW5wdXQsIGNvbmZpZywgY29uZmlncyxcblx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcblx0dmFyIGNmZyA9IG51bGw7XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZShcIiArIGNvbmZpZy50b1N0cmluZyh0aGlzLnJlY29nLCB0cnVlKSArIFwiKVwiKTtcblx0fVxuXHRpZiAoY29uZmlnLnN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkge1xuXHRcdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdFx0aWYgKHRoaXMucmVjb2cgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJjbG9zdXJlIGF0ICVzIHJ1bGUgc3RvcCAlc1xcblwiLCB0aGlzLnJlY29nLnJ1bGVOYW1lc1tjb25maWcuc3RhdGUucnVsZUluZGV4XSwgY29uZmlnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZSBhdCBydWxlIHN0b3AgJXNcXG5cIiwgY29uZmlnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNvbmZpZy5jb250ZXh0ID09PSBudWxsIHx8IGNvbmZpZy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKSB7XG5cdFx0XHRpZiAoY29uZmlnLmNvbnRleHQgPT09IG51bGwgfHwgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpKSB7XG5cdFx0XHRcdGNvbmZpZ3MuYWRkKGNvbmZpZyk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uZmlncy5hZGQobmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6Y29uZmlnLnN0YXRlLCBjb250ZXh0OlByZWRpY3Rpb25Db250ZXh0LkVNUFRZfSwgY29uZmlnKSk7XG5cdFx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY29uZmlnLmNvbnRleHQgIT09IG51bGwgJiYgIWNvbmZpZy5jb250ZXh0LmlzRW1wdHkoKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWcuY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoY29uZmlnLmNvbnRleHQuZ2V0UmV0dXJuU3RhdGUoaSkgIT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSkge1xuXHRcdFx0XHRcdHZhciBuZXdDb250ZXh0ID0gY29uZmlnLmNvbnRleHQuZ2V0UGFyZW50KGkpOyAvLyBcInBvcFwiIHJldHVybiBzdGF0ZVxuXHRcdFx0XHRcdHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG5cdFx0XHRcdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6cmV0dXJuU3RhdGUsIGNvbnRleHQ6bmV3Q29udGV4dCB9LCBjb25maWcpO1xuXHRcdFx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0aGlzLmNsb3N1cmUoaW5wdXQsIGNmZyxcblx0XHRcdFx0XHRcdFx0Y29uZmlncywgY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSwgc3BlY3VsYXRpdmUsXG5cdFx0XHRcdFx0XHRcdHRyZWF0RW9mQXNFcHNpbG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZTtcblx0fVxuXHQvLyBvcHRpbWl6YXRpb25cblx0aWYgKCFjb25maWcuc3RhdGUuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucykge1xuXHRcdGlmICghY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSB8fCAhY29uZmlnLnBhc3NlZFRocm91Z2hOb25HcmVlZHlEZWNpc2lvbikge1xuXHRcdFx0Y29uZmlncy5hZGQoY29uZmlnKTtcblx0XHR9XG5cdH1cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBjb25maWcuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgdHJhbnMgPSBjb25maWcuc3RhdGUudHJhbnNpdGlvbnNbal07XG5cdFx0Y2ZnID0gdGhpcy5nZXRFcHNpbG9uVGFyZ2V0KGlucHV0LCBjb25maWcsIHRyYW5zLCBjb25maWdzLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuXHRcdGlmIChjZmcgIT09IG51bGwpIHtcblx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0aGlzLmNsb3N1cmUoaW5wdXQsIGNmZywgY29uZmlncyxcblx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZTtcbn07XG5cbi8vIHNpZGUtZWZmZWN0OiBjYW4gYWx0ZXIgY29uZmlncy5oYXNTZW1hbnRpY0NvbnRleHRcbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFcHNpbG9uVGFyZ2V0ID0gZnVuY3Rpb24oaW5wdXQsIGNvbmZpZywgdHJhbnMsXG5cdFx0Y29uZmlncywgc3BlY3VsYXRpdmUsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG5cdHZhciBjZmcgPSBudWxsO1xuXHRpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uUlVMRSkge1xuXHRcdHZhciBuZXdDb250ZXh0ID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKGNvbmZpZy5jb250ZXh0LCB0cmFucy5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG5cdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKCB7IHN0YXRlOnRyYW5zLnRhcmdldCwgY29udGV4dDpuZXdDb250ZXh0fSwgY29uZmlnKTtcblx0fSBlbHNlIGlmICh0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5QUkVDRURFTkNFKSB7XG5cdFx0dGhyb3cgXCJQcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gbGV4ZXJzLlwiO1xuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLlBSRURJQ0FURSkge1xuXHRcdC8vIFRyYWNrIHRyYXZlcnNpbmcgc2VtYW50aWMgcHJlZGljYXRlcy4gSWYgd2UgdHJhdmVyc2UsXG5cdFx0Ly8gd2UgY2Fubm90IGFkZCBhIERGQSBzdGF0ZSBmb3IgdGhpcyBcInJlYWNoXCIgY29tcHV0YXRpb25cblx0XHQvLyBiZWNhdXNlIHRoZSBERkEgd291bGQgbm90IHRlc3QgdGhlIHByZWRpY2F0ZSBhZ2FpbiBpbiB0aGVcblx0XHQvLyBmdXR1cmUuIFJhdGhlciB0aGFuIGNyZWF0aW5nIGNvbGxlY3Rpb25zIG9mIHNlbWFudGljIHByZWRpY2F0ZXNcblx0XHQvLyBsaWtlIHYzIGFuZCB0ZXN0aW5nIHRoZW0gb24gcHJlZGljdGlvbiwgdjQgd2lsbCB0ZXN0IHRoZW0gb24gdGhlXG5cdFx0Ly8gZmx5IGFsbCB0aGUgdGltZSB1c2luZyB0aGUgQVROIG5vdCB0aGUgREZBLiBUaGlzIGlzIHNsb3dlciBidXRcblx0XHQvLyBzZW1hbnRpY2FsbHkgaXQncyBub3QgdXNlZCB0aGF0IG9mdGVuLiBPbmUgb2YgdGhlIGtleSBlbGVtZW50cyB0b1xuXHRcdC8vIHRoaXMgcHJlZGljYXRlIG1lY2hhbmlzbSBpcyBub3QgYWRkaW5nIERGQSBzdGF0ZXMgdGhhdCBzZWVcblx0XHQvLyBwcmVkaWNhdGVzIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMgaW4gdGhlIEFUTi4gRm9yIGV4YW1wbGUsXG5cblx0XHQvLyBhIDogSUQge3AxfT8gfCBJRCB7cDJ9PyA7XG5cblx0XHQvLyBzaG91bGQgY3JlYXRlIHRoZSBzdGFydCBzdGF0ZSBmb3IgcnVsZSAnYScgKHRvIHNhdmUgc3RhcnQgc3RhdGVcblx0XHQvLyBjb21wZXRpdGlvbiksIGJ1dCBzaG91bGQgbm90IGNyZWF0ZSB0YXJnZXQgb2YgSUQgc3RhdGUuIFRoZVxuXHRcdC8vIGNvbGxlY3Rpb24gb2YgQVROIHN0YXRlcyB0aGUgZm9sbG93aW5nIElEIHJlZmVyZW5jZXMgaW5jbHVkZXNcblx0XHQvLyBzdGF0ZXMgcmVhY2hlZCBieSB0cmF2ZXJzaW5nIHByZWRpY2F0ZXMuIFNpbmNlIHRoaXMgaXMgd2hlbiB3ZVxuXHRcdC8vIHRlc3QgdGhlbSwgd2UgY2Fubm90IGNhc2ggdGhlIERGQSBzdGF0ZSB0YXJnZXQgb2YgSUQuXG5cblx0XHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiRVZBTCBydWxlIFwiICsgdHJhbnMucnVsZUluZGV4ICsgXCI6XCIgKyB0cmFucy5wcmVkSW5kZXgpO1xuXHRcdH1cblx0XHRjb25maWdzLmhhc1NlbWFudGljQ29udGV4dCA9IHRydWU7XG5cdFx0aWYgKHRoaXMuZXZhbHVhdGVQcmVkaWNhdGUoaW5wdXQsIHRyYW5zLnJ1bGVJbmRleCwgdHJhbnMucHJlZEluZGV4LCBzcGVjdWxhdGl2ZSkpIHtcblx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLkFDVElPTikge1xuXHRcdGlmIChjb25maWcuY29udGV4dCA9PT0gbnVsbCB8fCBjb25maWcuY29udGV4dC5oYXNFbXB0eVBhdGgoKSkge1xuXHRcdFx0Ly8gZXhlY3V0ZSBhY3Rpb25zIGFueXdoZXJlIGluIHRoZSBzdGFydCBydWxlIGZvciBhIHRva2VuLlxuXHRcdFx0Ly9cblx0XHRcdC8vIFRPRE86IGlmIHRoZSBlbnRyeSBydWxlIGlzIGludm9rZWQgcmVjdXJzaXZlbHksIHNvbWVcblx0XHRcdC8vIGFjdGlvbnMgbWF5IGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgcmVjdXJzaXZlIGNhbGwuIFRoZVxuXHRcdFx0Ly8gcHJvYmxlbSBjYW4gYXBwZWFyIHdoZW4gaGFzRW1wdHlQYXRoKCkgaXMgdHJ1ZSBidXRcblx0XHRcdC8vIGlzRW1wdHkoKSBpcyBmYWxzZS4gSW4gdGhpcyBjYXNlLCB0aGUgY29uZmlnIG5lZWRzIHRvIGJlXG5cdFx0XHQvLyBzcGxpdCBpbnRvIHR3byBjb250ZXh0cyAtIG9uZSB3aXRoIGp1c3QgdGhlIGVtcHR5IHBhdGhcblx0XHRcdC8vIGFuZCBhbm90aGVyIHdpdGggZXZlcnl0aGluZyBidXQgdGhlIGVtcHR5IHBhdGguXG5cdFx0XHQvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgY3VycmVudCBhbGdvcml0aG0gZG9lcyBub3QgYWxsb3dcblx0XHRcdC8vIGdldEVwc2lsb25UYXJnZXQgdG8gcmV0dXJuIHR3byBjb25maWd1cmF0aW9ucywgc29cblx0XHRcdC8vIGFkZGl0aW9uYWwgbW9kaWZpY2F0aW9ucyBhcmUgbmVlZGVkIGJlZm9yZSB3ZSBjYW4gc3VwcG9ydFxuXHRcdFx0Ly8gdGhlIHNwbGl0IG9wZXJhdGlvbi5cblx0XHRcdHZhciBsZXhlckFjdGlvbkV4ZWN1dG9yID0gTGV4ZXJBY3Rpb25FeGVjdXRvci5hcHBlbmQoY29uZmlnLmxleGVyQWN0aW9uRXhlY3V0b3IsXG5cdFx0XHRcdFx0dGhpcy5hdG4ubGV4ZXJBY3Rpb25zW3RyYW5zLmFjdGlvbkluZGV4XSk7XG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoeyBzdGF0ZTp0cmFucy50YXJnZXQsIGxleGVyQWN0aW9uRXhlY3V0b3I6bGV4ZXJBY3Rpb25FeGVjdXRvciB9LCBjb25maWcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZ25vcmUgYWN0aW9ucyBpbiByZWZlcmVuY2VkIHJ1bGVzXG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoIHsgc3RhdGU6dHJhbnMudGFyZ2V0fSwgY29uZmlnKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uRVBTSUxPTikge1xuXHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uQVRPTSB8fFxuXHRcdFx0XHR0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5SQU5HRSB8fFxuXHRcdFx0XHR0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5TRVQpIHtcblx0XHRpZiAodHJlYXRFb2ZBc0Vwc2lsb24pIHtcblx0XHRcdGlmICh0cmFucy5tYXRjaGVzKFRva2VuLkVPRiwgMCwgTGV4ZXIuTUFYX0NIQVJfVkFMVUUpKSB7XG5cdFx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyggeyBzdGF0ZTp0cmFucy50YXJnZXQgfSwgY29uZmlnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGNmZztcbn07XG5cbi8vIEV2YWx1YXRlIGEgcHJlZGljYXRlIHNwZWNpZmllZCBpbiB0aGUgbGV4ZXIuXG4vL1xuLy8gPHA+SWYge0Bjb2RlIHNwZWN1bGF0aXZlfSBpcyB7QGNvZGUgdHJ1ZX0sIHRoaXMgbWV0aG9kIHdhcyBjYWxsZWQgYmVmb3JlXG4vLyB7QGxpbmsgLy9jb25zdW1lfSBmb3IgdGhlIG1hdGNoZWQgY2hhcmFjdGVyLiBUaGlzIG1ldGhvZCBzaG91bGQgY2FsbFxuLy8ge0BsaW5rIC8vY29uc3VtZX0gYmVmb3JlIGV2YWx1YXRpbmcgdGhlIHByZWRpY2F0ZSB0byBlbnN1cmUgcG9zaXRpb25cbi8vIHNlbnNpdGl2ZSB2YWx1ZXMsIGluY2x1ZGluZyB7QGxpbmsgTGV4ZXIvL2dldFRleHR9LCB7QGxpbmsgTGV4ZXIvL2dldExpbmV9LFxuLy8gYW5kIHtAbGluayBMZXhlci8vZ2V0Y29sdW1ufSwgcHJvcGVybHkgcmVmbGVjdCB0aGUgY3VycmVudFxuLy8gbGV4ZXIgc3RhdGUuIFRoaXMgbWV0aG9kIHNob3VsZCByZXN0b3JlIHtAY29kZSBpbnB1dH0gYW5kIHRoZSBzaW11bGF0b3Jcbi8vIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZSBiZWZvcmUgcmV0dXJuaW5nIChpLmUuIHVuZG8gdGhlIGFjdGlvbnMgbWFkZSBieSB0aGVcbi8vIGNhbGwgdG8ge0BsaW5rIC8vY29uc3VtZX0uPC9wPlxuLy9cbi8vIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgc3RyZWFtLlxuLy8gQHBhcmFtIHJ1bGVJbmRleCBUaGUgcnVsZSBjb250YWluaW5nIHRoZSBwcmVkaWNhdGUuXG4vLyBAcGFyYW0gcHJlZEluZGV4IFRoZSBpbmRleCBvZiB0aGUgcHJlZGljYXRlIHdpdGhpbiB0aGUgcnVsZS5cbi8vIEBwYXJhbSBzcGVjdWxhdGl2ZSB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGN1cnJlbnQgaW5kZXggaW4ge0Bjb2RlIGlucHV0fSBpc1xuLy8gb25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIHByZWRpY2F0ZSdzIGxvY2F0aW9uLlxuLy9cbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBzcGVjaWZpZWQgcHJlZGljYXRlIGV2YWx1YXRlcyB0b1xuLy8ge0Bjb2RlIHRydWV9LlxuLy8gL1xuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmV2YWx1YXRlUHJlZGljYXRlID0gZnVuY3Rpb24oaW5wdXQsIHJ1bGVJbmRleCxcblx0XHRwcmVkSW5kZXgsIHNwZWN1bGF0aXZlKSB7XG5cdC8vIGFzc3VtZSB0cnVlIGlmIG5vIHJlY29nbml6ZXIgd2FzIHByb3ZpZGVkXG5cdGlmICh0aGlzLnJlY29nID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFzcGVjdWxhdGl2ZSkge1xuXHRcdHJldHVybiB0aGlzLnJlY29nLnNlbXByZWQobnVsbCwgcnVsZUluZGV4LCBwcmVkSW5kZXgpO1xuXHR9XG5cdHZhciBzYXZlZGNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR2YXIgc2F2ZWRMaW5lID0gdGhpcy5saW5lO1xuXHR2YXIgaW5kZXggPSBpbnB1dC5pbmRleDtcblx0dmFyIG1hcmtlciA9IGlucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR0aGlzLmNvbnN1bWUoaW5wdXQpO1xuXHRcdHJldHVybiB0aGlzLnJlY29nLnNlbXByZWQobnVsbCwgcnVsZUluZGV4LCBwcmVkSW5kZXgpO1xuXHR9IGZpbmFsbHkge1xuXHRcdHRoaXMuY29sdW1uID0gc2F2ZWRjb2x1bW47XG5cdFx0dGhpcy5saW5lID0gc2F2ZWRMaW5lO1xuXHRcdGlucHV0LnNlZWsoaW5kZXgpO1xuXHRcdGlucHV0LnJlbGVhc2UobWFya2VyKTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNhcHR1cmVTaW1TdGF0ZSA9IGZ1bmN0aW9uKHNldHRpbmdzLCBpbnB1dCwgZGZhU3RhdGUpIHtcblx0c2V0dGluZ3MuaW5kZXggPSBpbnB1dC5pbmRleDtcblx0c2V0dGluZ3MubGluZSA9IHRoaXMubGluZTtcblx0c2V0dGluZ3MuY29sdW1uID0gdGhpcy5jb2x1bW47XG5cdHNldHRpbmdzLmRmYVN0YXRlID0gZGZhU3RhdGU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBRWRnZSA9IGZ1bmN0aW9uKGZyb21fLCB0aywgdG8sIGNmZ3MpIHtcblx0aWYgKHRvID09PSB1bmRlZmluZWQpIHtcblx0XHR0byA9IG51bGw7XG5cdH1cblx0aWYgKGNmZ3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNmZ3MgPSBudWxsO1xuXHR9XG5cdGlmICh0byA9PT0gbnVsbCAmJiBjZmdzICE9PSBudWxsKSB7XG5cdFx0Ly8gbGVhZGluZyB0byB0aGlzIGNhbGwsIEFUTkNvbmZpZ1NldC5oYXNTZW1hbnRpY0NvbnRleHQgaXMgdXNlZCBhcyBhXG5cdFx0Ly8gbWFya2VyIGluZGljYXRpbmcgZHluYW1pYyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBtYWtlcyB0aGlzIGVkZ2Vcblx0XHQvLyBkZXBlbmRlbnQgb24gdGhlIHNwZWNpZmljIGlucHV0IHNlcXVlbmNlLCBzbyB0aGUgc3RhdGljIGVkZ2UgaW4gdGhlXG5cdFx0Ly8gREZBIHNob3VsZCBiZSBvbWl0dGVkLiBUaGUgdGFyZ2V0IERGQVN0YXRlIGlzIHN0aWxsIGNyZWF0ZWQgc2luY2Vcblx0XHQvLyBleGVjQVROIGhhcyB0aGUgYWJpbGl0eSB0byByZXN5bmNocm9uaXplIHdpdGggdGhlIERGQSBzdGF0ZSBjYWNoZVxuXHRcdC8vIGZvbGxvd2luZyB0aGUgcHJlZGljYXRlIGV2YWx1YXRpb24gc3RlcC5cblx0XHQvL1xuXHRcdC8vIFRKUCBub3RlczogbmV4dCB0aW1lIHRocm91Z2ggdGhlIERGQSwgd2Ugc2VlIGEgcHJlZCBhZ2FpbiBhbmQgZXZhbC5cblx0XHQvLyBJZiB0aGF0IGdldHMgdXMgdG8gYSBwcmV2aW91c2x5IGNyZWF0ZWQgKGJ1dCBkYW5nbGluZykgREZBXG5cdFx0Ly8gc3RhdGUsIHdlIGNhbiBjb250aW51ZSBpbiBwdXJlIERGQSBtb2RlIGZyb20gdGhlcmUuXG5cdFx0Ly8gL1xuXHRcdHZhciBzdXBwcmVzc0VkZ2UgPSBjZmdzLmhhc1NlbWFudGljQ29udGV4dDtcblx0XHRjZmdzLmhhc1NlbWFudGljQ29udGV4dCA9IGZhbHNlO1xuXG5cdFx0dG8gPSB0aGlzLmFkZERGQVN0YXRlKGNmZ3MpO1xuXG5cdFx0aWYgKHN1cHByZXNzRWRnZSkge1xuXHRcdFx0cmV0dXJuIHRvO1xuXHRcdH1cblx0fVxuXHQvLyBhZGQgdGhlIGVkZ2Vcblx0aWYgKHRrIDwgTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFIHx8IHRrID4gTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFKSB7XG5cdFx0Ly8gT25seSB0cmFjayBlZGdlcyB3aXRoaW4gdGhlIERGQSBib3VuZHNcblx0XHRyZXR1cm4gdG87XG5cdH1cblx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJFREdFIFwiICsgZnJvbV8gKyBcIiAtPiBcIiArIHRvICsgXCIgdXBvbiBcIiArIHRrKTtcblx0fVxuXHRpZiAoZnJvbV8uZWRnZXMgPT09IG51bGwpIHtcblx0XHQvLyBtYWtlIHJvb20gZm9yIHRva2VucyAxLi5uIGFuZCAtMSBtYXNxdWVyYWRpbmcgYXMgaW5kZXggMFxuXHRcdGZyb21fLmVkZ2VzID0gW107XG5cdH1cblx0ZnJvbV8uZWRnZXNbdGsgLSBMZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0VdID0gdG87IC8vIGNvbm5lY3RcblxuXHRyZXR1cm4gdG87XG59O1xuXG4vLyBBZGQgYSBuZXcgREZBIHN0YXRlIGlmIHRoZXJlIGlzbid0IG9uZSB3aXRoIHRoaXMgc2V0IG9mXG4vLyBjb25maWd1cmF0aW9ucyBhbHJlYWR5LiBUaGlzIG1ldGhvZCBhbHNvIGRldGVjdHMgdGhlIGZpcnN0XG4vLyBjb25maWd1cmF0aW9uIGNvbnRhaW5pbmcgYW4gQVROIHJ1bGUgc3RvcCBzdGF0ZS4gTGF0ZXIsIHdoZW5cbi8vIHRyYXZlcnNpbmcgdGhlIERGQSwgd2Ugd2lsbCBrbm93IHdoaWNoIHJ1bGUgdG8gYWNjZXB0LlxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFkZERGQVN0YXRlID0gZnVuY3Rpb24oY29uZmlncykge1xuXHR2YXIgcHJvcG9zZWQgPSBuZXcgREZBU3RhdGUobnVsbCwgY29uZmlncyk7XG5cdHZhciBmaXJzdENvbmZpZ1dpdGhSdWxlU3RvcFN0YXRlID0gbnVsbDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGNmZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG5cdFx0aWYgKGNmZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcblx0XHRcdGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUgPSBjZmc7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0aWYgKGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUgIT09IG51bGwpIHtcblx0XHRwcm9wb3NlZC5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcblx0XHRwcm9wb3NlZC5sZXhlckFjdGlvbkV4ZWN1dG9yID0gZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZS5sZXhlckFjdGlvbkV4ZWN1dG9yO1xuXHRcdHByb3Bvc2VkLnByZWRpY3Rpb24gPSB0aGlzLmF0bi5ydWxlVG9Ub2tlblR5cGVbZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZS5zdGF0ZS5ydWxlSW5kZXhdO1xuXHR9XG5cdHZhciBkZmEgPSB0aGlzLmRlY2lzaW9uVG9ERkFbdGhpcy5tb2RlXTtcblx0dmFyIGV4aXN0aW5nID0gZGZhLnN0YXRlcy5nZXQocHJvcG9zZWQpO1xuXHRpZiAoZXhpc3RpbmchPT1udWxsKSB7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHZhciBuZXdTdGF0ZSA9IHByb3Bvc2VkO1xuXHRuZXdTdGF0ZS5zdGF0ZU51bWJlciA9IGRmYS5zdGF0ZXMubGVuZ3RoO1xuXHRjb25maWdzLnNldFJlYWRvbmx5KHRydWUpO1xuXHRuZXdTdGF0ZS5jb25maWdzID0gY29uZmlncztcblx0ZGZhLnN0YXRlcy5hZGQobmV3U3RhdGUpO1xuXHRyZXR1cm4gbmV3U3RhdGU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0REZBID0gZnVuY3Rpb24obW9kZSkge1xuXHRyZXR1cm4gdGhpcy5kZWNpc2lvblRvREZBW21vZGVdO1xufTtcblxuLy8gR2V0IHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbi5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0Ly8gaW5kZXggaXMgZmlyc3QgbG9va2FoZWFkIGNoYXIsIGRvbid0IGluY2x1ZGUuXG5cdHJldHVybiBpbnB1dC5nZXRUZXh0KHRoaXMuc3RhcnRJbmRleCwgaW5wdXQuaW5kZXggLSAxKTtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb25zdW1lID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dmFyIGN1ckNoYXIgPSBpbnB1dC5MQSgxKTtcblx0aWYgKGN1ckNoYXIgPT09IFwiXFxuXCIuY2hhckNvZGVBdCgwKSkge1xuXHRcdHRoaXMubGluZSArPSAxO1xuXHRcdHRoaXMuY29sdW1uID0gMDtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmNvbHVtbiArPSAxO1xuXHR9XG5cdGlucHV0LmNvbnN1bWUoKTtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRUb2tlbk5hbWUgPSBmdW5jdGlvbih0dCkge1xuXHRpZiAodHQgPT09IC0xKSB7XG5cdFx0cmV0dXJuIFwiRU9GXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0dCkgKyBcIidcIjtcblx0fVxufTtcblxuZXhwb3J0cy5MZXhlckFUTlNpbXVsYXRvciA9IExleGVyQVROU2ltdWxhdG9yO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbiAvL1xuXG5mdW5jdGlvbiBMZXhlckFjdGlvblR5cGUoKSB7XG59XG5cbkxleGVyQWN0aW9uVHlwZS5DSEFOTkVMID0gMDsgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJDaGFubmVsQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuQ1VTVE9NID0gMTsgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyQ3VzdG9tQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuTU9ERSA9IDI7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyTW9kZUFjdGlvbn0gYWN0aW9uLlxuTGV4ZXJBY3Rpb25UeXBlLk1PUkUgPSAzOyAgICAgICAgLy9UaGUgdHlwZSBvZiBhIHtAbGluayBMZXhlck1vcmVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5QT1BfTU9ERSA9IDQ7ICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJQb3BNb2RlQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuUFVTSF9NT0RFID0gNTsgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyUHVzaE1vZGVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5TS0lQID0gNjsgICAgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJTa2lwQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuVFlQRSA9IDc7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyVHlwZUFjdGlvbn0gYWN0aW9uLlxuXG5mdW5jdGlvbiBMZXhlckFjdGlvbihhY3Rpb24pIHtcbiAgICB0aGlzLmFjdGlvblR5cGUgPSBhY3Rpb247XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQWN0aW9uLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICB0aGlzLnVwZGF0ZUhhc2hDb2RlKGhhc2gpO1xuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpXG59O1xuXG5MZXhlckFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlKTtcbn07XG5cbkxleGVyQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIHJldHVybiB0aGlzID09PSBvdGhlcjtcbn07XG5cblxuXG4vL1xuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHNraXB9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vc2tpcH0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBza2lwfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlclNraXBBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLlNLSVApO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJTa2lwQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclNraXBBY3Rpb247XG5cbi8vIFByb3ZpZGVzIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGFyYW1ldGVybGVzcyBsZXhlciBhY3Rpb24uXG5MZXhlclNraXBBY3Rpb24uSU5TVEFOQ0UgPSBuZXcgTGV4ZXJTa2lwQWN0aW9uKCk7XG5cbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIuc2tpcCgpO1xufTtcblxuTGV4ZXJTa2lwQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJza2lwXCI7XG59O1xuXG4vLyAgSW1wbGVtZW50cyB0aGUge0Bjb2RlIHR5cGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vc2V0VHlwZX1cbi8vIHdpdGggdGhlIGFzc2lnbmVkIHR5cGUuXG5mdW5jdGlvbiBMZXhlclR5cGVBY3Rpb24odHlwZSkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5UWVBFKTtcblx0dGhpcy50eXBlID0gdHlwZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJUeXBlQWN0aW9uO1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnR5cGUgPSB0aGlzLnR5cGU7XG59O1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuYWN0aW9uVHlwZSwgdGhpcy50eXBlKTtcbn07XG5cblxuTGV4ZXJUeXBlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlclR5cGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBvdGhlci50eXBlO1xuICAgIH1cbn07XG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0eXBlKFwiICsgdGhpcy50eXBlICsgXCIpXCI7XG59O1xuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgcHVzaE1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXIvL3B1c2hNb2RlfSB3aXRoIHRoZSBhc3NpZ25lZCBtb2RlLlxuZnVuY3Rpb24gTGV4ZXJQdXNoTW9kZUFjdGlvbihtb2RlKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERSk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyUHVzaE1vZGVBY3Rpb247XG5cbi8vIDxwPlRoaXMgYWN0aW9uIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9wdXNoTW9kZX0gd2l0aCB0aGVcbi8vIHZhbHVlIHByb3ZpZGVkIGJ5IHtAbGluayAvL2dldE1vZGV9LjwvcD5cbkxleGVyUHVzaE1vZGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnB1c2hNb2RlKHRoaXMubW9kZSk7XG59O1xuXG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMubW9kZSk7XG59O1xuXG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJQdXNoTW9kZUFjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IG90aGVyLm1vZGU7XG4gICAgfVxufTtcblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwicHVzaE1vZGUoXCIgKyB0aGlzLm1vZGUgKyBcIilcIjtcbn07XG5cblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHBvcE1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcG9wTW9kZX0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBwb3BNb2RlfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlclBvcE1vZGVBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcyxMZXhlckFjdGlvblR5cGUuUE9QX01PREUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJQb3BNb2RlQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclBvcE1vZGVBY3Rpb247XG5cbkxleGVyUG9wTW9kZUFjdGlvbi5JTlNUQU5DRSA9IG5ldyBMZXhlclBvcE1vZGVBY3Rpb24oKTtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3BvcE1vZGV9LjwvcD5cbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIucG9wTW9kZSgpO1xufTtcblxuTGV4ZXJQb3BNb2RlQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwb3BNb2RlXCI7XG59O1xuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgbW9yZX0gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9tb3JlfS5cbi8vXG4vLyA8cD5UaGUge0Bjb2RlIG1vcmV9IGNvbW1hbmQgZG9lcyBub3QgaGF2ZSBhbnkgcGFyYW1ldGVycywgc28gdGhpcyBhY3Rpb24gaXNcbi8vIGltcGxlbWVudGVkIGFzIGEgc2luZ2xldG9uIGluc3RhbmNlIGV4cG9zZWQgYnkge0BsaW5rIC8vSU5TVEFOQ0V9LjwvcD5cbmZ1bmN0aW9uIExleGVyTW9yZUFjdGlvbigpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuTU9SRSk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5MZXhlck1vcmVBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyTW9yZUFjdGlvbjtcblxuTGV4ZXJNb3JlQWN0aW9uLklOU1RBTkNFID0gbmV3IExleGVyTW9yZUFjdGlvbigpO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcG9wTW9kZX0uPC9wPlxuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICBsZXhlci5tb3JlKCk7XG59O1xuXG5MZXhlck1vcmVBY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwibW9yZVwiO1xufTtcblxuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgbW9kZX0gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9tb2RlfSB3aXRoXG4vLyB0aGUgYXNzaWduZWQgbW9kZS5cbmZ1bmN0aW9uIExleGVyTW9kZUFjdGlvbihtb2RlKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLk1PREUpO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJNb2RlQWN0aW9uO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vbW9kZX0gd2l0aCB0aGVcbi8vIHZhbHVlIHByb3ZpZGVkIGJ5IHtAbGluayAvL2dldE1vZGV9LjwvcD5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIubW9kZSh0aGlzLm1vZGUpO1xufTtcblxuTGV4ZXJNb2RlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMubW9kZSk7XG59O1xuXG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlck1vZGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBvdGhlci5tb2RlO1xuICAgIH1cbn07XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJtb2RlKFwiICsgdGhpcy5tb2RlICsgXCIpXCI7XG59O1xuXG4vLyBFeGVjdXRlcyBhIGN1c3RvbSBsZXhlciBhY3Rpb24gYnkgY2FsbGluZyB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufSB3aXRoIHRoZVxuLy8gcnVsZSBhbmQgYWN0aW9uIGluZGV4ZXMgYXNzaWduZWQgdG8gdGhlIGN1c3RvbSBhY3Rpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBvZlxuLy8gYSBjdXN0b20gYWN0aW9uIGlzIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGxleGVyIGluIGFuIG92ZXJyaWRlXG4vLyBvZiB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufSB3aGVuIHRoZSBncmFtbWFyIGlzIGNvbXBpbGVkLlxuLy9cbi8vIDxwPlRoaXMgY2xhc3MgbWF5IHJlcHJlc2VudCBlbWJlZGRlZCBhY3Rpb25zIGNyZWF0ZWQgd2l0aCB0aGUgPGNvZGU+ey4uLn08L2NvZGU+XG4vLyBzeW50YXggaW4gQU5UTFIgNCwgYXMgd2VsbCBhcyBhY3Rpb25zIGNyZWF0ZWQgZm9yIGxleGVyIGNvbW1hbmRzIHdoZXJlIHRoZVxuLy8gY29tbWFuZCBhcmd1bWVudCBjb3VsZCBub3QgYmUgZXZhbHVhdGVkIHdoZW4gdGhlIGdyYW1tYXIgd2FzIGNvbXBpbGVkLjwvcD5cblxuXG4gICAgLy8gQ29uc3RydWN0cyBhIGN1c3RvbSBsZXhlciBhY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIHJ1bGUgYW5kIGFjdGlvblxuICAgIC8vIGluZGV4ZXMuXG4gICAgLy9cbiAgICAvLyBAcGFyYW0gcnVsZUluZGV4IFRoZSBydWxlIGluZGV4IHRvIHVzZSBmb3IgY2FsbHMgdG9cbiAgICAvLyB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufS5cbiAgICAvLyBAcGFyYW0gYWN0aW9uSW5kZXggVGhlIGFjdGlvbiBpbmRleCB0byB1c2UgZm9yIGNhbGxzIHRvXG4gICAgLy8ge0BsaW5rIFJlY29nbml6ZXIvL2FjdGlvbn0uXG5cbmZ1bmN0aW9uIExleGVyQ3VzdG9tQWN0aW9uKHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuQ1VTVE9NKTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg7XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJDdXN0b21BY3Rpb247XG5cbi8vIDxwPkN1c3RvbSBhY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vYWN0aW9ufSB3aXRoIHRoZVxuLy8gYXBwcm9wcmlhdGUgcnVsZSBhbmQgYWN0aW9uIGluZGV4ZXMuPC9wPlxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLmFjdGlvbihudWxsLCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5hY3Rpb25JbmRleCk7XG59O1xuXG5MZXhlckN1c3RvbUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5hY3Rpb25JbmRleCk7XG59O1xuXG5MZXhlckN1c3RvbUFjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIExleGVyQ3VzdG9tQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiYgdGhpcy5hY3Rpb25JbmRleCA9PT0gb3RoZXIuYWN0aW9uSW5kZXg7XG4gICAgfVxufTtcblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIGNoYW5uZWx9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9IHdpdGggdGhlIGFzc2lnbmVkIGNoYW5uZWwuXG4vLyBDb25zdHJ1Y3RzIGEgbmV3IHtAY29kZSBjaGFubmVsfSBhY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgdmFsdWUuXG4vLyBAcGFyYW0gY2hhbm5lbCBUaGUgY2hhbm5lbCB2YWx1ZSB0byBwYXNzIHRvIHtAbGluayBMZXhlci8vc2V0Q2hhbm5lbH0uXG5mdW5jdGlvbiBMZXhlckNoYW5uZWxBY3Rpb24oY2hhbm5lbCkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5DSEFOTkVMKTtcbiAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQ2hhbm5lbEFjdGlvbjtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9IHdpdGggdGhlXG4vLyB2YWx1ZSBwcm92aWRlZCBieSB7QGxpbmsgLy9nZXRDaGFubmVsfS48L3A+XG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLl9jaGFubmVsID0gdGhpcy5jaGFubmVsO1xufTtcblxuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMuY2hhbm5lbCk7XG59O1xuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckNoYW5uZWxBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsID09PSBvdGhlci5jaGFubmVsO1xuICAgIH1cbn07XG5cbkxleGVyQ2hhbm5lbEFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJjaGFubmVsKFwiICsgdGhpcy5jaGFubmVsICsgXCIpXCI7XG59O1xuXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBMZXhlckFjdGlvbn0gaXMgdXNlZCBmb3IgdHJhY2tpbmcgaW5wdXQgb2Zmc2V0c1xuLy8gZm9yIHBvc2l0aW9uLWRlcGVuZGVudCBhY3Rpb25zIHdpdGhpbiBhIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yfS5cbi8vXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBub3Qgc2VyaWFsaXplZCBhcyBwYXJ0IG9mIHRoZSBBVE4sIGFuZCBpcyBvbmx5IHJlcXVpcmVkIGZvclxuLy8gcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMgd2hpY2ggYXBwZWFyIGF0IGEgbG9jYXRpb24gb3RoZXIgdGhhbiB0aGVcbi8vIGVuZCBvZiBhIHJ1bGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IERGQSBvcHRpbWl6YXRpb25zIGVtcGxveWVkIGZvclxuLy8gbGV4ZXIgYWN0aW9ucywgc2VlIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yLy9hcHBlbmR9IGFuZFxuLy8ge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3IvL2ZpeE9mZnNldEJlZm9yZU1hdGNofS48L3A+XG5cbi8vIENvbnN0cnVjdHMgYSBuZXcgaW5kZXhlZCBjdXN0b20gYWN0aW9uIGJ5IGFzc29jaWF0aW5nIGEgY2hhcmFjdGVyIG9mZnNldFxuLy8gd2l0aCBhIHtAbGluayBMZXhlckFjdGlvbn0uXG4vL1xuLy8gPHA+Tm90ZTogVGhpcyBjbGFzcyBpcyBvbmx5IHJlcXVpcmVkIGZvciBsZXhlciBhY3Rpb25zIGZvciB3aGljaFxuLy8ge0BsaW5rIExleGVyQWN0aW9uLy9pc1Bvc2l0aW9uRGVwZW5kZW50fSByZXR1cm5zIHtAY29kZSB0cnVlfS48L3A+XG4vL1xuLy8gQHBhcmFtIG9mZnNldCBUaGUgb2Zmc2V0IGludG8gdGhlIGlucHV0IHtAbGluayBDaGFyU3RyZWFtfSwgcmVsYXRpdmUgdG9cbi8vIHRoZSB0b2tlbiBzdGFydCBpbmRleCwgYXQgd2hpY2ggdGhlIHNwZWNpZmllZCBsZXhlciBhY3Rpb24gc2hvdWxkIGJlXG4vLyBleGVjdXRlZC5cbi8vIEBwYXJhbSBhY3Rpb24gVGhlIGxleGVyIGFjdGlvbiB0byBleGVjdXRlIGF0IGEgcGFydGljdWxhciBvZmZzZXQgaW4gdGhlXG4vLyBpbnB1dCB7QGxpbmsgQ2hhclN0cmVhbX0uXG5mdW5jdGlvbiBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24ob2Zmc2V0LCBhY3Rpb24pIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBhY3Rpb24uYWN0aW9uVHlwZSk7XG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb247XG5cbi8vIDxwPlRoaXMgbWV0aG9kIGNhbGxzIHtAbGluayAvL2V4ZWN1dGV9IG9uIHRoZSByZXN1bHQgb2Yge0BsaW5rIC8vZ2V0QWN0aW9ufVxuLy8gdXNpbmcgdGhlIHByb3ZpZGVkIHtAY29kZSBsZXhlcn0uPC9wPlxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICAvLyBhc3N1bWUgdGhlIGlucHV0IHN0cmVhbSBwb3NpdGlvbiB3YXMgcHJvcGVybHkgc2V0IGJ5IHRoZSBjYWxsaW5nIGNvZGVcbiAgICB0aGlzLmFjdGlvbi5leGVjdXRlKGxleGVyKTtcbn07XG5cbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLm9mZnNldCwgdGhpcy5hY3Rpb24pO1xufTtcblxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0ID09PSBvdGhlci5vZmZzZXQgJiYgdGhpcy5hY3Rpb24gPT09IG90aGVyLmFjdGlvbjtcbiAgICB9XG59O1xuXG5cbmV4cG9ydHMuTGV4ZXJBY3Rpb25UeXBlID0gTGV4ZXJBY3Rpb25UeXBlO1xuZXhwb3J0cy5MZXhlclNraXBBY3Rpb24gPSBMZXhlclNraXBBY3Rpb247XG5leHBvcnRzLkxleGVyQ2hhbm5lbEFjdGlvbiA9IExleGVyQ2hhbm5lbEFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJDdXN0b21BY3Rpb24gPSBMZXhlckN1c3RvbUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uID0gTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuZXhwb3J0cy5MZXhlck1vcmVBY3Rpb24gPSBMZXhlck1vcmVBY3Rpb247XG5leHBvcnRzLkxleGVyVHlwZUFjdGlvbiA9IExleGVyVHlwZUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJQdXNoTW9kZUFjdGlvbiA9IExleGVyUHVzaE1vZGVBY3Rpb247XG5leHBvcnRzLkxleGVyUG9wTW9kZUFjdGlvbiA9IExleGVyUG9wTW9kZUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJNb2RlQWN0aW9uID0gTGV4ZXJNb2RlQWN0aW9uOyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gUmVwcmVzZW50cyBhbiBleGVjdXRvciBmb3IgYSBzZXF1ZW5jZSBvZiBsZXhlciBhY3Rpb25zIHdoaWNoIHRyYXZlcnNlZCBkdXJpbmdcbi8vIHRoZSBtYXRjaGluZyBvcGVyYXRpb24gb2YgYSBsZXhlciBydWxlICh0b2tlbikuXG4vL1xuLy8gPHA+VGhlIGV4ZWN1dG9yIHRyYWNrcyBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3IgcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnNcbi8vIGVmZmljaWVudGx5LCBlbnN1cmluZyB0aGF0IGFjdGlvbnMgYXBwZWFyaW5nIG9ubHkgYXQgdGhlIGVuZCBvZiB0aGUgcnVsZSBkb1xuLy8gbm90IGNhdXNlIGJsb2F0aW5nIG9mIHRoZSB7QGxpbmsgREZBfSBjcmVhdGVkIGZvciB0aGUgbGV4ZXIuPC9wPlxuXG52YXIgaGFzaFN0dWZmID0gcmVxdWlyZShcIi4uL1V0aWxzXCIpLmhhc2hTdHVmZjtcbnZhciBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24gPSByZXF1aXJlKCcuL0xleGVyQWN0aW9uJykuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuXG5mdW5jdGlvbiBMZXhlckFjdGlvbkV4ZWN1dG9yKGxleGVyQWN0aW9ucykge1xuXHR0aGlzLmxleGVyQWN0aW9ucyA9IGxleGVyQWN0aW9ucyA9PT0gbnVsbCA/IFtdIDogbGV4ZXJBY3Rpb25zO1xuXHQvLyBDYWNoZXMgdGhlIHJlc3VsdCBvZiB7QGxpbmsgLy9oYXNoQ29kZX0gc2luY2UgdGhlIGhhc2ggY29kZSBpcyBhbiBlbGVtZW50XG5cdC8vIG9mIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCB7QGxpbmsgTGV4ZXJBVE5Db25maWcvL2hhc2hDb2RlfSBvcGVyYXRpb24uXG5cdHRoaXMuY2FjaGVkSGFzaENvZGUgPSBoYXNoU3R1ZmYobGV4ZXJBY3Rpb25zKTsgLy8gXCJcIi5qb2luKFtzdHIobGEpIGZvciBsYSBpblxuXHQvLyBsZXhlckFjdGlvbnNdKSlcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8vIENyZWF0ZXMgYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gd2hpY2ggZXhlY3V0ZXMgdGhlIGFjdGlvbnMgZm9yXG4vLyB0aGUgaW5wdXQge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9IGZvbGxvd2VkIGJ5IGEgc3BlY2lmaWVkXG4vLyB7QGNvZGUgbGV4ZXJBY3Rpb259LlxuLy9cbi8vIEBwYXJhbSBsZXhlckFjdGlvbkV4ZWN1dG9yIFRoZSBleGVjdXRvciBmb3IgYWN0aW9ucyBhbHJlYWR5IHRyYXZlcnNlZCBieVxuLy8gdGhlIGxleGVyIHdoaWxlIG1hdGNoaW5nIGEgdG9rZW4gd2l0aGluIGEgcGFydGljdWxhclxuLy8ge0BsaW5rIExleGVyQVROQ29uZmlnfS4gSWYgdGhpcyBpcyB7QGNvZGUgbnVsbH0sIHRoZSBtZXRob2QgYmVoYXZlcyBhc1xuLy8gdGhvdWdoIGl0IHdlcmUgYW4gZW1wdHkgZXhlY3V0b3IuXG4vLyBAcGFyYW0gbGV4ZXJBY3Rpb24gVGhlIGxleGVyIGFjdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBhY3Rpb25zXG4vLyBzcGVjaWZpZWQgaW4ge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9LlxuLy9cbi8vIEByZXR1cm4gQSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gZm9yIGV4ZWN1dGluZyB0aGUgY29tYmluZSBhY3Rpb25zXG4vLyBvZiB7QGNvZGUgbGV4ZXJBY3Rpb25FeGVjdXRvcn0gYW5kIHtAY29kZSBsZXhlckFjdGlvbn0uXG5MZXhlckFjdGlvbkV4ZWN1dG9yLmFwcGVuZCA9IGZ1bmN0aW9uKGxleGVyQWN0aW9uRXhlY3V0b3IsIGxleGVyQWN0aW9uKSB7XG5cdGlmIChsZXhlckFjdGlvbkV4ZWN1dG9yID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKFsgbGV4ZXJBY3Rpb24gXSk7XG5cdH1cblx0dmFyIGxleGVyQWN0aW9ucyA9IGxleGVyQWN0aW9uRXhlY3V0b3IubGV4ZXJBY3Rpb25zLmNvbmNhdChbIGxleGVyQWN0aW9uIF0pO1xuXHRyZXR1cm4gbmV3IExleGVyQWN0aW9uRXhlY3V0b3IobGV4ZXJBY3Rpb25zKTtcbn07XG5cbi8vIENyZWF0ZXMgYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gd2hpY2ggZW5jb2RlcyB0aGUgY3VycmVudCBvZmZzZXRcbi8vIGZvciBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXIgYWN0aW9ucy5cbi8vXG4vLyA8cD5Ob3JtYWxseSwgd2hlbiB0aGUgZXhlY3V0b3IgZW5jb3VudGVycyBsZXhlciBhY3Rpb25zIHdoZXJlXG4vLyB7QGxpbmsgTGV4ZXJBY3Rpb24vL2lzUG9zaXRpb25EZXBlbmRlbnR9IHJldHVybnMge0Bjb2RlIHRydWV9LCBpdCBjYWxsc1xuLy8ge0BsaW5rIEludFN0cmVhbS8vc2Vla30gb24gdGhlIGlucHV0IHtAbGluayBDaGFyU3RyZWFtfSB0byBzZXQgdGhlIGlucHV0XG4vLyBwb3NpdGlvbiB0byB0aGUgPGVtPmVuZDwvZW0+IG9mIHRoZSBjdXJyZW50IHRva2VuLiBUaGlzIGJlaGF2aW9yIHByb3ZpZGVzXG4vLyBmb3IgZWZmaWNpZW50IERGQSByZXByZXNlbnRhdGlvbiBvZiBsZXhlciBhY3Rpb25zIHdoaWNoIGFwcGVhciBhdCB0aGUgZW5kXG4vLyBvZiBhIGxleGVyIHJ1bGUsIGV2ZW4gd2hlbiB0aGUgbGV4ZXIgcnVsZSBtYXRjaGVzIGEgdmFyaWFibGUgbnVtYmVyIG9mXG4vLyBjaGFyYWN0ZXJzLjwvcD5cbi8vXG4vLyA8cD5QcmlvciB0byB0cmF2ZXJzaW5nIGEgbWF0Y2ggdHJhbnNpdGlvbiBpbiB0aGUgQVROLCB0aGUgY3VycmVudCBvZmZzZXRcbi8vIGZyb20gdGhlIHRva2VuIHN0YXJ0IGluZGV4IGlzIGFzc2lnbmVkIHRvIGFsbCBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXJcbi8vIGFjdGlvbnMgd2hpY2ggaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGFzc2lnbmVkIGEgZml4ZWQgb2Zmc2V0LiBCeSBzdG9yaW5nXG4vLyB0aGUgb2Zmc2V0cyByZWxhdGl2ZSB0byB0aGUgdG9rZW4gc3RhcnQgaW5kZXgsIHRoZSBERkEgcmVwcmVzZW50YXRpb24gb2Zcbi8vIGxleGVyIGFjdGlvbnMgd2hpY2ggYXBwZWFyIGluIHRoZSBtaWRkbGUgb2YgdG9rZW5zIHJlbWFpbnMgZWZmaWNpZW50IGR1ZVxuLy8gdG8gc2hhcmluZyBhbW9uZyB0b2tlbnMgb2YgdGhlIHNhbWUgbGVuZ3RoLCByZWdhcmRsZXNzIG9mIHRoZWlyIGFic29sdXRlXG4vLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyZWFtLjwvcD5cbi8vXG4vLyA8cD5JZiB0aGUgY3VycmVudCBleGVjdXRvciBhbHJlYWR5IGhhcyBvZmZzZXRzIGFzc2lnbmVkIHRvIGFsbFxuLy8gcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMsIHRoZSBtZXRob2QgcmV0dXJucyB7QGNvZGUgdGhpc30uPC9wPlxuLy9cbi8vIEBwYXJhbSBvZmZzZXQgVGhlIGN1cnJlbnQgb2Zmc2V0IHRvIGFzc2lnbiB0byBhbGwgcG9zaXRpb24tZGVwZW5kZW50XG4vLyBsZXhlciBhY3Rpb25zIHdoaWNoIGRvIG5vdCBhbHJlYWR5IGhhdmUgb2Zmc2V0cyBhc3NpZ25lZC5cbi8vXG4vLyBAcmV0dXJuIEEge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3J9IHdoaWNoIHN0b3JlcyBpbnB1dCBzdHJlYW0gb2Zmc2V0c1xuLy8gZm9yIGFsbCBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXIgYWN0aW9ucy5cbi8vIC9cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmZpeE9mZnNldEJlZm9yZU1hdGNoID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdHZhciB1cGRhdGVkTGV4ZXJBY3Rpb25zID0gbnVsbDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxleGVyQWN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICh0aGlzLmxleGVyQWN0aW9uc1tpXS5pc1Bvc2l0aW9uRGVwZW5kZW50ICYmXG5cdFx0XHRcdCEodGhpcy5sZXhlckFjdGlvbnNbaV0gaW5zdGFuY2VvZiBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24pKSB7XG5cdFx0XHRpZiAodXBkYXRlZExleGVyQWN0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHR1cGRhdGVkTGV4ZXJBY3Rpb25zID0gdGhpcy5sZXhlckFjdGlvbnMuY29uY2F0KFtdKTtcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRMZXhlckFjdGlvbnNbaV0gPSBuZXcgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKG9mZnNldCxcblx0XHRcdFx0XHR0aGlzLmxleGVyQWN0aW9uc1tpXSk7XG5cdFx0fVxuXHR9XG5cdGlmICh1cGRhdGVkTGV4ZXJBY3Rpb25zID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKHVwZGF0ZWRMZXhlckFjdGlvbnMpO1xuXHR9XG59O1xuXG4vLyBFeGVjdXRlIHRoZSBhY3Rpb25zIGVuY2Fwc3VsYXRlZCBieSB0aGlzIGV4ZWN1dG9yIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhXG4vLyBwYXJ0aWN1bGFyIHtAbGluayBMZXhlcn0uXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgY2FsbHMge0BsaW5rIEludFN0cmVhbS8vc2Vla30gdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGVcbi8vIHtAY29kZSBpbnB1dH0ge0BsaW5rIENoYXJTdHJlYW19IHByaW9yIHRvIGNhbGxpbmdcbi8vIHtAbGluayBMZXhlckFjdGlvbi8vZXhlY3V0ZX0gb24gYSBwb3NpdGlvbi1kZXBlbmRlbnQgYWN0aW9uLiBCZWZvcmUgdGhlXG4vLyBtZXRob2QgcmV0dXJucywgdGhlIGlucHV0IHBvc2l0aW9uIHdpbGwgYmUgcmVzdG9yZWQgdG8gdGhlIHNhbWUgcG9zaXRpb25cbi8vIGl0IHdhcyBpbiB3aGVuIHRoZSBtZXRob2Qgd2FzIGludm9rZWQuPC9wPlxuLy9cbi8vIEBwYXJhbSBsZXhlciBUaGUgbGV4ZXIgaW5zdGFuY2UuXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbSB3aGljaCBpcyB0aGUgc291cmNlIGZvciB0aGUgY3VycmVudCB0b2tlbi5cbi8vIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgY3VycmVudCB7QGxpbmsgSW50U3RyZWFtLy9pbmRleH0gZm9yXG4vLyB7QGNvZGUgaW5wdXR9IHNob3VsZCBiZSB0aGUgc3RhcnQgb2YgdGhlIGZvbGxvd2luZyB0b2tlbiwgaS5lLiAxXG4vLyBjaGFyYWN0ZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRva2VuLlxuLy8gQHBhcmFtIHN0YXJ0SW5kZXggVGhlIHRva2VuIHN0YXJ0IGluZGV4LiBUaGlzIHZhbHVlIG1heSBiZSBwYXNzZWQgdG9cbi8vIHtAbGluayBJbnRTdHJlYW0vL3NlZWt9IHRvIHNldCB0aGUge0Bjb2RlIGlucHV0fSBwb3NpdGlvbiB0byB0aGUgYmVnaW5uaW5nXG4vLyBvZiB0aGUgdG9rZW4uXG4vLyAvXG5MZXhlckFjdGlvbkV4ZWN1dG9yLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIsIGlucHV0LCBzdGFydEluZGV4KSB7XG5cdHZhciByZXF1aXJlc1NlZWsgPSBmYWxzZTtcblx0dmFyIHN0b3BJbmRleCA9IGlucHV0LmluZGV4O1xuXHR0cnkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBsZXhlckFjdGlvbiA9IHRoaXMubGV4ZXJBY3Rpb25zW2ldO1xuXHRcdFx0aWYgKGxleGVyQWN0aW9uIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSB7XG5cdFx0XHRcdHZhciBvZmZzZXQgPSBsZXhlckFjdGlvbi5vZmZzZXQ7XG5cdFx0XHRcdGlucHV0LnNlZWsoc3RhcnRJbmRleCArIG9mZnNldCk7XG5cdFx0XHRcdGxleGVyQWN0aW9uID0gbGV4ZXJBY3Rpb24uYWN0aW9uO1xuXHRcdFx0XHRyZXF1aXJlc1NlZWsgPSAoc3RhcnRJbmRleCArIG9mZnNldCkgIT09IHN0b3BJbmRleDtcblx0XHRcdH0gZWxzZSBpZiAobGV4ZXJBY3Rpb24uaXNQb3NpdGlvbkRlcGVuZGVudCkge1xuXHRcdFx0XHRpbnB1dC5zZWVrKHN0b3BJbmRleCk7XG5cdFx0XHRcdHJlcXVpcmVzU2VlayA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0bGV4ZXJBY3Rpb24uZXhlY3V0ZShsZXhlcik7XG5cdFx0fVxuXHR9IGZpbmFsbHkge1xuXHRcdGlmIChyZXF1aXJlc1NlZWspIHtcblx0XHRcdGlucHV0LnNlZWsoc3RvcEluZGV4KTtcblx0XHR9XG5cdH1cbn07XG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNhY2hlZEhhc2hDb2RlO1xufTtcblxuTGV4ZXJBY3Rpb25FeGVjdXRvci5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5jYWNoZWRIYXNoQ29kZSk7XG59O1xuXG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBMZXhlckFjdGlvbkV4ZWN1dG9yKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmICh0aGlzLmNhY2hlZEhhc2hDb2RlICE9IG90aGVyLmNhY2hlZEhhc2hDb2RlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMubGV4ZXJBY3Rpb25zLmxlbmd0aCAhPSBvdGhlci5sZXhlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBudW1BY3Rpb25zID0gdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoXG5cdFx0Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbnVtQWN0aW9uczsgKytpZHgpIHtcblx0XHRcdGlmICghdGhpcy5sZXhlckFjdGlvbnNbaWR4XS5lcXVhbHMob3RoZXIubGV4ZXJBY3Rpb25zW2lkeF0pKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbmV4cG9ydHMuTGV4ZXJBY3Rpb25FeGVjdXRvciA9IExleGVyQWN0aW9uRXhlY3V0b3I7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vIFRoZSBlbWJvZGltZW50IG9mIHRoZSBhZGFwdGl2ZSBMTCgqKSwgQUxMKCopLCBwYXJzaW5nIHN0cmF0ZWd5LlxuLy9cbi8vIDxwPlxuLy8gVGhlIGJhc2ljIGNvbXBsZXhpdHkgb2YgdGhlIGFkYXB0aXZlIHN0cmF0ZWd5IG1ha2VzIGl0IGhhcmRlciB0byB1bmRlcnN0YW5kLlxuLy8gV2UgYmVnaW4gd2l0aCBBVE4gc2ltdWxhdGlvbiB0byBidWlsZCBwYXRocyBpbiBhIERGQS4gU3Vic2VxdWVudCBwcmVkaWN0aW9uXG4vLyByZXF1ZXN0cyBnbyB0aHJvdWdoIHRoZSBERkEgZmlyc3QuIElmIHRoZXkgcmVhY2ggYSBzdGF0ZSB3aXRob3V0IGFuIGVkZ2UgZm9yXG4vLyB0aGUgY3VycmVudCBzeW1ib2wsIHRoZSBhbGdvcml0aG0gZmFpbHMgb3ZlciB0byB0aGUgQVROIHNpbXVsYXRpb24gdG9cbi8vIGNvbXBsZXRlIHRoZSBERkEgcGF0aCBmb3IgdGhlIGN1cnJlbnQgaW5wdXQgKHVudGlsIGl0IGZpbmRzIGEgY29uZmxpY3Qgc3RhdGVcbi8vIG9yIHVuaXF1ZWx5IHByZWRpY3Rpbmcgc3RhdGUpLjwvcD5cbi8vXG4vLyA8cD5cbi8vIEFsbCBvZiB0aGF0IGlzIGRvbmUgd2l0aG91dCB1c2luZyB0aGUgb3V0ZXIgY29udGV4dCBiZWNhdXNlIHdlIHdhbnQgdG8gY3JlYXRlXG4vLyBhIERGQSB0aGF0IGlzIG5vdCBkZXBlbmRlbnQgdXBvbiB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrIHdoZW4gd2UgZG8gYVxuLy8gcHJlZGljdGlvbi4gT25lIERGQSB3b3JrcyBpbiBhbGwgY29udGV4dHMuIFdlIGF2b2lkIHVzaW5nIGNvbnRleHQgbm90XG4vLyBuZWNlc3NhcmlseSBiZWNhdXNlIGl0J3Mgc2xvd2VyLCBhbHRob3VnaCBpdCBjYW4gYmUsIGJ1dCBiZWNhdXNlIG9mIHRoZSBERkFcbi8vIGNhY2hpbmcgcHJvYmxlbS4gVGhlIGNsb3N1cmUgcm91dGluZSBvbmx5IGNvbnNpZGVycyB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrXG4vLyBjcmVhdGVkIGR1cmluZyBwcmVkaWN0aW9uIGJlZ2lubmluZyBpbiB0aGUgZGVjaXNpb24gcnVsZS4gRm9yIGV4YW1wbGUsIGlmXG4vLyBwcmVkaWN0aW9uIG9jY3VycyB3aXRob3V0IGludm9raW5nIGFub3RoZXIgcnVsZSdzIEFUTiwgdGhlcmUgYXJlIG5vIGNvbnRleHRcbi8vIHN0YWNrcyBpbiB0aGUgY29uZmlndXJhdGlvbnMuIFdoZW4gbGFjayBvZiBjb250ZXh0IGxlYWRzIHRvIGEgY29uZmxpY3QsIHdlXG4vLyBkb24ndCBrbm93IGlmIGl0J3MgYW4gYW1iaWd1aXR5IG9yIGEgd2Vha25lc3MgaW4gdGhlIHN0cm9uZyBMTCgqKSBwYXJzaW5nXG4vLyBzdHJhdGVneSAodmVyc3VzIGZ1bGwgTEwoKikpLjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdoZW4gU0xMIHlpZWxkcyBhIGNvbmZpZ3VyYXRpb24gc2V0IHdpdGggY29uZmxpY3QsIHdlIHJld2luZCB0aGUgaW5wdXQgYW5kXG4vLyByZXRyeSB0aGUgQVROIHNpbXVsYXRpb24sIHRoaXMgdGltZSB1c2luZyBmdWxsIG91dGVyIGNvbnRleHQgd2l0aG91dCBhZGRpbmdcbi8vIHRvIHRoZSBERkEuIENvbmZpZ3VyYXRpb24gY29udGV4dCBzdGFja3Mgd2lsbCBiZSB0aGUgZnVsbCBpbnZvY2F0aW9uIHN0YWNrc1xuLy8gZnJvbSB0aGUgc3RhcnQgcnVsZS4gSWYgd2UgZ2V0IGEgY29uZmxpY3QgdXNpbmcgZnVsbCBjb250ZXh0LCB0aGVuIHdlIGNhblxuLy8gZGVmaW5pdGl2ZWx5IHNheSB3ZSBoYXZlIGEgdHJ1ZSBhbWJpZ3VpdHkgZm9yIHRoYXQgaW5wdXQgc2VxdWVuY2UuIElmIHdlXG4vLyBkb24ndCBnZXQgYSBjb25mbGljdCwgaXQgaW1wbGllcyB0aGF0IHRoZSBkZWNpc2lvbiBpcyBzZW5zaXRpdmUgdG8gdGhlIG91dGVyXG4vLyBjb250ZXh0LiAoSXQgaXMgbm90IGNvbnRleHQtc2Vuc2l0aXZlIGluIHRoZSBzZW5zZSBvZiBjb250ZXh0LXNlbnNpdGl2ZVxuLy8gZ3JhbW1hcnMuKTwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZSBuZXh0IHRpbWUgd2UgcmVhY2ggdGhpcyBERkEgc3RhdGUgd2l0aCBhbiBTTEwgY29uZmxpY3QsIHRocm91Z2ggREZBXG4vLyBzaW11bGF0aW9uLCB3ZSB3aWxsIGFnYWluIHJldHJ5IHRoZSBBVE4gc2ltdWxhdGlvbiB1c2luZyBmdWxsIGNvbnRleHQgbW9kZS5cbi8vIFRoaXMgaXMgc2xvdyBiZWNhdXNlIHdlIGNhbid0IHNhdmUgdGhlIHJlc3VsdHMgYW5kIGhhdmUgdG8gXCJpbnRlcnByZXRcIiB0aGVcbi8vIEFUTiBlYWNoIHRpbWUgd2UgZ2V0IHRoYXQgaW5wdXQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5DQUNISU5HIEZVTEwgQ09OVEVYVCBQUkVESUNUSU9OUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdlIGNvdWxkIGNhY2hlIHJlc3VsdHMgZnJvbSBmdWxsIGNvbnRleHQgdG8gcHJlZGljdGVkIGFsdGVybmF0aXZlIGVhc2lseSBhbmRcbi8vIHRoYXQgc2F2ZXMgYSBsb3Qgb2YgdGltZSBidXQgZG9lc24ndCB3b3JrIGluIHByZXNlbmNlIG9mIHByZWRpY2F0ZXMuIFRoZSBzZXRcbi8vIG9mIHZpc2libGUgcHJlZGljYXRlcyBmcm9tIHRoZSBBVE4gc3RhcnQgc3RhdGUgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlXG4vLyBjb250ZXh0LCBiZWNhdXNlIGNsb3N1cmUgY2FuIGZhbGwgb2ZmIHRoZSBlbmQgb2YgYSBydWxlLiBJIHRyaWVkIHRvIGNhY2hlXG4vLyB0dXBsZXMgKHN0YWNrIGNvbnRleHQsIHNlbWFudGljIGNvbnRleHQsIHByZWRpY3RlZCBhbHQpIGJ1dCBpdCB3YXMgc2xvd2VyXG4vLyB0aGFuIGludGVycHJldGluZyBhbmQgbXVjaCBtb3JlIGNvbXBsaWNhdGVkLiBBbHNvIHJlcXVpcmVkIGEgaHVnZSBhbW91bnQgb2Zcbi8vIG1lbW9yeS4gVGhlIGdvYWwgaXMgbm90IHRvIGNyZWF0ZSB0aGUgd29ybGQncyBmYXN0ZXN0IHBhcnNlciBhbnl3YXkuIEknZCBsaWtlXG4vLyB0byBrZWVwIHRoaXMgYWxnb3JpdGhtIHNpbXBsZS4gQnkgbGF1bmNoaW5nIG11bHRpcGxlIHRocmVhZHMsIHdlIGNhbiBpbXByb3ZlXG4vLyB0aGUgc3BlZWQgb2YgcGFyc2luZyBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2YgZmlsZXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhlcmUgaXMgbm8gc3RyaWN0IG9yZGVyaW5nIGJldHdlZW4gdGhlIGFtb3VudCBvZiBpbnB1dCB1c2VkIGJ5IFNMTCB2cyBMTCxcbi8vIHdoaWNoIG1ha2VzIGl0IHJlYWxseSBoYXJkIHRvIGJ1aWxkIGEgY2FjaGUgZm9yIGZ1bGwgY29udGV4dC4gTGV0J3Mgc2F5IHRoYXRcbi8vIHdlIGhhdmUgaW5wdXQgQSBCIEMgdGhhdCBsZWFkcyB0byBhbiBTTEwgY29uZmxpY3Qgd2l0aCBmdWxsIGNvbnRleHQgWC4gVGhhdFxuLy8gaW1wbGllcyB0aGF0IHVzaW5nIFggd2UgbWlnaHQgb25seSB1c2UgQSBCIGJ1dCB3ZSBjb3VsZCBhbHNvIHVzZSBBIEIgQyBEIHRvXG4vLyByZXNvbHZlIGNvbmZsaWN0LiBJbnB1dCBBIEIgQyBEIGNvdWxkIHByZWRpY3QgYWx0ZXJuYXRpdmUgMSBpbiBvbmUgcG9zaXRpb25cbi8vIGluIHRoZSBpbnB1dCBhbmQgQSBCIEMgRSBjb3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDIgaW4gYW5vdGhlciBwb3NpdGlvbiBpblxuLy8gaW5wdXQuIFRoZSBjb25mbGljdGluZyBTTEwgY29uZmlndXJhdGlvbnMgY291bGQgc3RpbGwgYmUgbm9uLXVuaXF1ZSBpbiB0aGVcbi8vIGZ1bGwgY29udGV4dCBwcmVkaWN0aW9uLCB3aGljaCB3b3VsZCBsZWFkIHVzIHRvIHJlcXVpcmluZyBtb3JlIGlucHV0IHRoYW4gdGhlXG4vLyBvcmlnaW5hbCBBIEIgQy5cdFRvIG1ha2UgYVx0cHJlZGljdGlvbiBjYWNoZSB3b3JrLCB3ZSBoYXZlIHRvIHRyYWNrXHR0aGUgZXhhY3Rcbi8vIGlucHV0XHR1c2VkIGR1cmluZyB0aGUgcHJldmlvdXMgcHJlZGljdGlvbi4gVGhhdCBhbW91bnRzIHRvIGEgY2FjaGUgdGhhdCBtYXBzXG4vLyBYIHRvIGEgc3BlY2lmaWMgREZBIGZvciB0aGF0IGNvbnRleHQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gU29tZXRoaW5nIHNob3VsZCBiZSBkb25lIGZvciBsZWZ0LXJlY3Vyc2l2ZSBleHByZXNzaW9uIHByZWRpY3Rpb25zLiBUaGV5IGFyZVxuLy8gbGlrZWx5IExMKDEpICsgcHJlZCBldmFsLiBFYXNpZXIgdG8gZG8gdGhlIHdob2xlIFNMTCB1bmxlc3MgZXJyb3IgYW5kIHJldHJ5XG4vLyB3aXRoIGZ1bGwgTEwgdGhpbmcgU2FtIGRvZXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5BVk9JRElORyBGVUxMIENPTlRFWFQgUFJFRElDVElPTjwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdlIGF2b2lkIGRvaW5nIGZ1bGwgY29udGV4dCByZXRyeSB3aGVuIHRoZSBvdXRlciBjb250ZXh0IGlzIGVtcHR5LCB3ZSBkaWQgbm90XG4vLyBkaXAgaW50byB0aGUgb3V0ZXIgY29udGV4dCBieSBmYWxsaW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBzdGF0ZSBydWxlLFxuLy8gb3Igd2hlbiB3ZSBmb3JjZSBTTEwgbW9kZS48L3A+XG4vL1xuLy8gPHA+XG4vLyBBcyBhbiBleGFtcGxlIG9mIHRoZSBub3QgZGlwIGludG8gb3V0ZXIgY29udGV4dCBjYXNlLCBjb25zaWRlciBhcyBzdXBlclxuLy8gY29uc3RydWN0b3IgY2FsbHMgdmVyc3VzIGZ1bmN0aW9uIGNhbGxzLiBPbmUgZ3JhbW1hciBtaWdodCBsb29rIGxpa2Vcbi8vIHRoaXM6PC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBjdG9yQm9keVxuLy8gICA6ICd7JyBzdXBlckNhbGw/IHN0YXQqICd9J1xuLy8gICA7XG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5cbi8vIE9yLCB5b3UgbWlnaHQgc2VlIHNvbWV0aGluZyBsaWtlPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBzdGF0XG4vLyAgIDogc3VwZXJDYWxsICc7J1xuLy8gICB8IGV4cHJlc3Npb24gJzsnXG4vLyAgIHwgLi4uXG4vLyAgIDtcbi8vIDwvcHJlPlxuLy9cbi8vIDxwPlxuLy8gSW4gYm90aCBjYXNlcyBJIGJlbGlldmUgdGhhdCBubyBjbG9zdXJlIG9wZXJhdGlvbnMgd2lsbCBkaXAgaW50byB0aGUgb3V0ZXJcbi8vIGNvbnRleHQuIEluIHRoZSBmaXJzdCBjYXNlIGN0b3JCb2R5IGluIHRoZSB3b3JzdCBjYXNlIHdpbGwgc3RvcCBhdCB0aGUgJ30nLlxuLy8gSW4gdGhlIDJuZCBjYXNlIGl0IHNob3VsZCBzdG9wIGF0IHRoZSAnOycuIEJvdGggY2FzZXMgc2hvdWxkIHN0YXkgd2l0aGluIHRoZVxuLy8gZW50cnkgcnVsZSBhbmQgbm90IGRpcCBpbnRvIHRoZSBvdXRlciBjb250ZXh0LjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+UFJFRElDQVRFUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFByZWRpY2F0ZXMgYXJlIGFsd2F5cyBldmFsdWF0ZWQgaWYgcHJlc2VudCBpbiBlaXRoZXIgU0xMIG9yIExMIGJvdGguIFNMTCBhbmRcbi8vIExMIHNpbXVsYXRpb24gZGVhbHMgd2l0aCBwcmVkaWNhdGVzIGRpZmZlcmVudGx5LiBTTEwgY29sbGVjdHMgcHJlZGljYXRlcyBhc1xuLy8gaXQgcGVyZm9ybXMgY2xvc3VyZSBvcGVyYXRpb25zIGxpa2UgQU5UTFIgdjMgZGlkLiBJdCBkZWxheXMgcHJlZGljYXRlXG4vLyBldmFsdWF0aW9uIHVudGlsIGl0IHJlYWNoZXMgYW5kIGFjY2VwdCBzdGF0ZS4gVGhpcyBhbGxvd3MgdXMgdG8gY2FjaGUgdGhlIFNMTFxuLy8gQVROIHNpbXVsYXRpb24gd2hlcmVhcywgaWYgd2UgaGFkIGV2YWx1YXRlZCBwcmVkaWNhdGVzIG9uLXRoZS1mbHkgZHVyaW5nXG4vLyBjbG9zdXJlLCB0aGUgREZBIHN0YXRlIGNvbmZpZ3VyYXRpb24gc2V0cyB3b3VsZCBiZSBkaWZmZXJlbnQgYW5kIHdlIGNvdWxkbid0XG4vLyBidWlsZCB1cCBhIHN1aXRhYmxlIERGQS48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIGJ1aWxkaW5nIGEgREZBIGFjY2VwdCBzdGF0ZSBkdXJpbmcgQVROIHNpbXVsYXRpb24sIHdlIGV2YWx1YXRlIGFueVxuLy8gcHJlZGljYXRlcyBhbmQgcmV0dXJuIHRoZSBzb2xlIHNlbWFudGljYWxseSB2YWxpZCBhbHRlcm5hdGl2ZS4gSWYgdGhlcmUgaXNcbi8vIG1vcmUgdGhhbiAxIGFsdGVybmF0aXZlLCB3ZSByZXBvcnQgYW4gYW1iaWd1aXR5LiBJZiB0aGVyZSBhcmUgMCBhbHRlcm5hdGl2ZXMsXG4vLyB3ZSB0aHJvdyBhbiBleGNlcHRpb24uIEFsdGVybmF0aXZlcyB3aXRob3V0IHByZWRpY2F0ZXMgYWN0IGxpa2UgdGhleSBoYXZlXG4vLyB0cnVlIHByZWRpY2F0ZXMuIFRoZSBzaW1wbGUgd2F5IHRvIHRoaW5rIGFib3V0IGl0IGlzIHRvIHN0cmlwIGF3YXkgYWxsXG4vLyBhbHRlcm5hdGl2ZXMgd2l0aCBmYWxzZSBwcmVkaWNhdGVzIGFuZCBjaG9vc2UgdGhlIG1pbmltdW0gYWx0ZXJuYXRpdmUgdGhhdFxuLy8gcmVtYWlucy48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIHdlIHN0YXJ0IGluIHRoZSBERkEgYW5kIHJlYWNoIGFuIGFjY2VwdCBzdGF0ZSB0aGF0J3MgcHJlZGljYXRlZCwgd2UgdGVzdFxuLy8gdGhvc2UgYW5kIHJldHVybiB0aGUgbWluaW11bSBzZW1hbnRpY2FsbHkgdmlhYmxlIGFsdGVybmF0aXZlLiBJZiBub1xuLy8gYWx0ZXJuYXRpdmVzIGFyZSB2aWFibGUsIHdlIHRocm93IGFuIGV4Y2VwdGlvbi48L3A+XG4vL1xuLy8gPHA+XG4vLyBEdXJpbmcgZnVsbCBMTCBBVE4gc2ltdWxhdGlvbiwgY2xvc3VyZSBhbHdheXMgZXZhbHVhdGVzIHByZWRpY2F0ZXMgYW5kXG4vLyBvbi10aGUtZmx5LiBUaGlzIGlzIGNydWNpYWwgdG8gcmVkdWNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHNpemUgZHVyaW5nXG4vLyBjbG9zdXJlLiBJdCBoaXRzIGEgbGFuZG1pbmUgd2hlbiBwYXJzaW5nIHdpdGggdGhlIEphdmEgZ3JhbW1hciwgZm9yIGV4YW1wbGUsXG4vLyB3aXRob3V0IHRoaXMgb24tdGhlLWZseSBldmFsdWF0aW9uLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+U0hBUklORyBERkE8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+XG4vLyBBbGwgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHBhcnNlciBzaGFyZSB0aGUgc2FtZSBkZWNpc2lvbiBERkFzIHRocm91Z2ggYVxuLy8gc3RhdGljIGZpZWxkLiBFYWNoIGluc3RhbmNlIGdldHMgaXRzIG93biBBVE4gc2ltdWxhdG9yIGJ1dCB0aGV5IHNoYXJlIHRoZVxuLy8gc2FtZSB7QGxpbmsgLy9kZWNpc2lvblRvREZBfSBmaWVsZC4gVGhleSBhbHNvIHNoYXJlIGFcbi8vIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dENhY2hlfSBvYmplY3QgdGhhdCBtYWtlcyBzdXJlIHRoYXQgYWxsXG4vLyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9IG9iamVjdHMgYXJlIHNoYXJlZCBhbW9uZyB0aGUgREZBIHN0YXRlcy4gVGhpcyBtYWtlc1xuLy8gYSBiaWcgc2l6ZSBkaWZmZXJlbmNlLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+VEhSRUFEIFNBRkVUWTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZSB7QGxpbmsgUGFyc2VyQVROU2ltdWxhdG9yfSBsb2NrcyBvbiB0aGUge0BsaW5rIC8vZGVjaXNpb25Ub0RGQX0gZmllbGQgd2hlblxuLy8gaXQgYWRkcyBhIG5ldyBERkEgb2JqZWN0IHRvIHRoYXQgYXJyYXkuIHtAbGluayAvL2FkZERGQUVkZ2V9XG4vLyBsb2NrcyBvbiB0aGUgREZBIGZvciB0aGUgY3VycmVudCBkZWNpc2lvbiB3aGVuIHNldHRpbmcgdGhlXG4vLyB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBmaWVsZC4ge0BsaW5rIC8vYWRkREZBU3RhdGV9IGxvY2tzIG9uXG4vLyB0aGUgREZBIGZvciB0aGUgY3VycmVudCBkZWNpc2lvbiB3aGVuIGxvb2tpbmcgdXAgYSBERkEgc3RhdGUgdG8gc2VlIGlmIGl0XG4vLyBhbHJlYWR5IGV4aXN0cy4gV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBhbGwgcmVxdWVzdHMgdG8gYWRkIERGQSBzdGF0ZXMgdGhhdFxuLy8gYXJlIGVxdWl2YWxlbnQgcmVzdWx0IGluIHRoZSBzYW1lIHNoYXJlZCBERkEgb2JqZWN0LiBUaGlzIGlzIGJlY2F1c2UgbG90cyBvZlxuLy8gdGhyZWFkcyB3aWxsIGJlIHRyeWluZyB0byB1cGRhdGUgdGhlIERGQSBhdCBvbmNlLiBUaGVcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSBtZXRob2QgYWxzbyBsb2NrcyBpbnNpZGUgdGhlIERGQSBsb2NrXG4vLyBidXQgdGhpcyB0aW1lIG9uIHRoZSBzaGFyZWQgY29udGV4dCBjYWNoZSB3aGVuIGl0IHJlYnVpbGRzIHRoZVxuLy8gY29uZmlndXJhdGlvbnMnIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cyB1c2luZyBjYWNoZWRcbi8vIHN1YmdyYXBocy9ub2Rlcy4gTm8gb3RoZXIgbG9ja2luZyBvY2N1cnMsIGV2ZW4gZHVyaW5nIERGQSBzaW11bGF0aW9uLiBUaGlzIGlzXG4vLyBzYWZlIGFzIGxvbmcgYXMgd2UgY2FuIGd1YXJhbnRlZSB0aGF0IGFsbCB0aHJlYWRzIHJlZmVyZW5jaW5nXG4vLyB7QGNvZGUgcy5lZGdlW3RdfSBnZXQgdGhlIHNhbWUgcGh5c2ljYWwgdGFyZ2V0IHtAbGluayBERkFTdGF0ZX0sIG9yXG4vLyB7QGNvZGUgbnVsbH0uIE9uY2UgaW50byB0aGUgREZBLCB0aGUgREZBIHNpbXVsYXRpb24gZG9lcyBub3QgcmVmZXJlbmNlIHRoZVxuLy8ge0BsaW5rIERGQS8vc3RhdGVzfSBtYXAuIEl0IGZvbGxvd3MgdGhlIHtAbGluayBERkFTdGF0ZS8vZWRnZXN9IGZpZWxkIHRvIG5ld1xuLy8gdGFyZ2V0cy4gVGhlIERGQSBzaW11bGF0b3Igd2lsbCBlaXRoZXIgZmluZCB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSB0byBiZVxuLy8ge0Bjb2RlIG51bGx9LCB0byBiZSBub24te0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgZGZhLmVkZ2VzW3RdfSBudWxsLCBvclxuLy8ge0Bjb2RlIGRmYS5lZGdlc1t0XX0gdG8gYmUgbm9uLW51bGwuIFRoZVxuLy8ge0BsaW5rIC8vYWRkREZBRWRnZX0gbWV0aG9kIGNvdWxkIGJlIHJhY2luZyB0byBzZXQgdGhlIGZpZWxkXG4vLyBidXQgaW4gZWl0aGVyIGNhc2UgdGhlIERGQSBzaW11bGF0b3Igd29ya3M7IGlmIHtAY29kZSBudWxsfSwgYW5kIHJlcXVlc3RzIEFUTlxuLy8gc2ltdWxhdGlvbi4gSXQgY291bGQgYWxzbyByYWNlIHRyeWluZyB0byBnZXQge0Bjb2RlIGRmYS5lZGdlc1t0XX0sIGJ1dCBlaXRoZXJcbi8vIHdheSBpdCB3aWxsIHdvcmsgYmVjYXVzZSBpdCdzIG5vdCBkb2luZyBhIHRlc3QgYW5kIHNldCBvcGVyYXRpb24uPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5TdGFydGluZyB3aXRoIFNMTCB0aGVuIGZhaWxpbmcgdG8gY29tYmluZWQgU0xML0xMIChUd28tU3RhZ2Vcbi8vIFBhcnNpbmcpPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlxuLy8gU2FtIHBvaW50ZWQgb3V0IHRoYXQgaWYgU0xMIGRvZXMgbm90IGdpdmUgYSBzeW50YXggZXJyb3IsIHRoZW4gdGhlcmUgaXMgbm9cbi8vIHBvaW50IGluIGRvaW5nIGZ1bGwgTEwsIHdoaWNoIGlzIHNsb3dlci4gV2Ugb25seSBoYXZlIHRvIHRyeSBMTCBpZiB3ZSBnZXQgYVxuLy8gc3ludGF4IGVycm9yLiBGb3IgbWF4aW11bSBzcGVlZCwgU2FtIHN0YXJ0cyB0aGUgcGFyc2VyIHNldCB0byBwdXJlIFNMTFxuLy8gbW9kZSB3aXRoIHRoZSB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3l9OjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gcGFyc2VyLntAbGluayBQYXJzZXIvL2dldEludGVycHJldGVyKCkgZ2V0SW50ZXJwcmV0ZXIoKX0ue0BsaW5rIC8vc2V0UHJlZGljdGlvbk1vZGUgc2V0UHJlZGljdGlvbk1vZGV9e0Bjb2RlICh9e0BsaW5rIFByZWRpY3Rpb25Nb2RlLy9TTEx9e0Bjb2RlICl9O1xuLy8gcGFyc2VyLntAbGluayBQYXJzZXIvL3NldEVycm9ySGFuZGxlciBzZXRFcnJvckhhbmRsZXJ9KG5ldyB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3l9KCkpO1xuLy8gPC9wcmU+XG4vL1xuLy8gPHA+XG4vLyBJZiBpdCBkb2VzIG5vdCBnZXQgYSBzeW50YXggZXJyb3IsIHRoZW4gd2UncmUgZG9uZS4gSWYgaXQgZG9lcyBnZXQgYSBzeW50YXhcbi8vIGVycm9yLCB3ZSBuZWVkIHRvIHJldHJ5IHdpdGggdGhlIGNvbWJpbmVkIFNMTC9MTCBzdHJhdGVneS48L3A+XG4vL1xuLy8gPHA+XG4vLyBUaGUgcmVhc29uIHRoaXMgd29ya3MgaXMgYXMgZm9sbG93cy4gSWYgdGhlcmUgYXJlIG5vIFNMTCBjb25mbGljdHMsIHRoZW4gdGhlXG4vLyBncmFtbWFyIGlzIFNMTCAoYXQgbGVhc3QgZm9yIHRoYXQgaW5wdXQgc2V0KS4gSWYgdGhlcmUgaXMgYW4gU0xMIGNvbmZsaWN0LFxuLy8gdGhlIGZ1bGwgTEwgYW5hbHlzaXMgbXVzdCB5aWVsZCBhIHNldCBvZiB2aWFibGUgYWx0ZXJuYXRpdmVzIHdoaWNoIGlzIGFcbi8vIHN1YnNldCBvZiB0aGUgYWx0ZXJuYXRpdmVzIHJlcG9ydGVkIGJ5IFNMTC4gSWYgdGhlIExMIHNldCBpcyBhIHNpbmdsZXRvbixcbi8vIHRoZW4gdGhlIGdyYW1tYXIgaXMgTEwgYnV0IG5vdCBTTEwuIElmIHRoZSBMTCBzZXQgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgU0xMXG4vLyBzZXQsIHRoZSBkZWNpc2lvbiBpcyBTTEwuIElmIHRoZSBMTCBzZXQgaGFzIHNpemUgJmd0OyAxLCB0aGVuIHRoYXQgZGVjaXNpb25cbi8vIGlzIHRydWx5IGFtYmlndW91cyBvbiB0aGUgY3VycmVudCBpbnB1dC4gSWYgdGhlIExMIHNldCBpcyBzbWFsbGVyLCB0aGVuIHRoZVxuLy8gU0xMIGNvbmZsaWN0IHJlc29sdXRpb24gbWlnaHQgY2hvb3NlIGFuIGFsdGVybmF0aXZlIHRoYXQgdGhlIGZ1bGwgTEwgd291bGRcbi8vIHJ1bGUgb3V0IGFzIGEgcG9zc2liaWxpdHkgYmFzZWQgdXBvbiBiZXR0ZXIgY29udGV4dCBpbmZvcm1hdGlvbi4gSWYgdGhhdCdzXG4vLyB0aGUgY2FzZSwgdGhlbiB0aGUgU0xMIHBhcnNlIHdpbGwgZGVmaW5pdGVseSBnZXQgYW4gZXJyb3IgYmVjYXVzZSB0aGUgZnVsbCBMTFxuLy8gYW5hbHlzaXMgc2F5cyBpdCdzIG5vdCB2aWFibGUuIElmIFNMTCBjb25mbGljdCByZXNvbHV0aW9uIGNob29zZXMgYW5cbi8vIGFsdGVybmF0aXZlIHdpdGhpbiB0aGUgTEwgc2V0LCB0aGVtIGJvdGggU0xMIGFuZCBMTCB3b3VsZCBjaG9vc2UgdGhlIHNhbWVcbi8vIGFsdGVybmF0aXZlIGJlY2F1c2UgdGhleSBib3RoIGNob29zZSB0aGUgbWluaW11bSBvZiBtdWx0aXBsZSBjb25mbGljdGluZ1xuLy8gYWx0ZXJuYXRpdmVzLjwvcD5cbi8vXG4vLyA8cD5cbi8vIExldCdzIHNheSB3ZSBoYXZlIGEgc2V0IG9mIFNMTCBjb25mbGljdGluZyBhbHRlcm5hdGl2ZXMge0Bjb2RlIHsxLCAyLCAzfX0gYW5kXG4vLyBhIHNtYWxsZXIgTEwgc2V0IGNhbGxlZCA8ZW0+czwvZW0+LiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7MiwgM319LCB0aGVuIFNMTFxuLy8gcGFyc2luZyB3aWxsIGdldCBhbiBlcnJvciBiZWNhdXNlIFNMTCB3aWxsIHB1cnN1ZSBhbHRlcm5hdGl2ZSAxLiBJZlxuLy8gPGVtPnM8L2VtPiBpcyB7QGNvZGUgezEsIDJ9fSBvciB7QGNvZGUgezEsIDN9fSB0aGVuIGJvdGggU0xMIGFuZCBMTCB3aWxsXG4vLyBjaG9vc2UgdGhlIHNhbWUgYWx0ZXJuYXRpdmUgYmVjYXVzZSBhbHRlcm5hdGl2ZSBvbmUgaXMgdGhlIG1pbmltdW0gb2YgZWl0aGVyXG4vLyBzZXQuIElmIDxlbT5zPC9lbT4gaXMge0Bjb2RlIHsyfX0gb3Ige0Bjb2RlIHszfX0gdGhlbiBTTEwgd2lsbCBnZXQgYSBzeW50YXhcbi8vIGVycm9yLiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7MX19IHRoZW4gU0xMIHdpbGwgc3VjY2VlZC48L3A+XG4vL1xuLy8gPHA+XG4vLyBPZiBjb3Vyc2UsIGlmIHRoZSBpbnB1dCBpcyBpbnZhbGlkLCB0aGVuIHdlIHdpbGwgZ2V0IGFuIGVycm9yIGZvciBzdXJlIGluXG4vLyBib3RoIFNMTCBhbmQgTEwgcGFyc2luZy4gRXJyb25lb3VzIGlucHV0IHdpbGwgdGhlcmVmb3JlIHJlcXVpcmUgMiBwYXNzZXMgb3ZlclxuLy8gdGhlIGlucHV0LjwvcD5cbi8vXG5cbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG52YXIgQml0U2V0ID0gVXRpbHMuQml0U2V0O1xudmFyIERvdWJsZURpY3QgPSBVdGlscy5Eb3VibGVEaWN0O1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLkFUTlN0YXRlO1xudmFyIEFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vQVROQ29uZmlnU2V0JykuQVROQ29uZmlnU2V0O1xudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBQcmVkUHJlZGljdGlvbiA9IHJlcXVpcmUoJy4vLi4vZGZhL0RGQVN0YXRlJykuUHJlZFByZWRpY3Rpb247XG52YXIgQVROU2ltdWxhdG9yID0gcmVxdWlyZSgnLi9BVE5TaW11bGF0b3InKS5BVE5TaW11bGF0b3I7XG52YXIgUHJlZGljdGlvbk1vZGUgPSByZXF1aXJlKCcuL1ByZWRpY3Rpb25Nb2RlJykuUHJlZGljdGlvbk1vZGU7XG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgUGFyc2VyUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1BhcnNlclJ1bGVDb250ZXh0JykuUGFyc2VyUnVsZUNvbnRleHQ7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlN0YXJMb29wRW50cnlTdGF0ZTtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgUHJlZGljdGlvbkNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1ByZWRpY3Rpb25Db250ZXh0JykuUHJlZGljdGlvbkNvbnRleHQ7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgVHJhbnNpdGlvbnMgPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKTtcbnZhciBUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuVHJhbnNpdGlvbjtcbnZhciBTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuU2V0VHJhbnNpdGlvbjtcbnZhciBOb3RTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuTm90U2V0VHJhbnNpdGlvbjtcbnZhciBSdWxlVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlJ1bGVUcmFuc2l0aW9uO1xudmFyIEFjdGlvblRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BY3Rpb25UcmFuc2l0aW9uO1xudmFyIE5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi8uLi9lcnJvci9FcnJvcnMnKS5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxudmFyIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xudmFyIHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLnByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuXG5mdW5jdGlvbiBQYXJzZXJBVE5TaW11bGF0b3IocGFyc2VyLCBhdG4sIGRlY2lzaW9uVG9ERkEsIHNoYXJlZENvbnRleHRDYWNoZSkge1xuXHRBVE5TaW11bGF0b3IuY2FsbCh0aGlzLCBhdG4sIHNoYXJlZENvbnRleHRDYWNoZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5kZWNpc2lvblRvREZBID0gZGVjaXNpb25Ub0RGQTtcbiAgICAvLyBTTEwsIExMLCBvciBMTCArIGV4YWN0IGFtYmlnIGRldGVjdGlvbj8vL1xuICAgIHRoaXMucHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZS5MTDtcbiAgICAvLyBMQU1FIGdsb2JhbHMgdG8gYXZvaWQgcGFyYW1ldGVycyEhISEhIEkgbmVlZCB0aGVzZSBkb3duIGRlZXAgaW4gcHJlZFRyYW5zaXRpb25cbiAgICB0aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgdGhpcy5fc3RhcnRJbmRleCA9IDA7XG4gICAgdGhpcy5fb3V0ZXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9kZmEgPSBudWxsO1xuICAgIC8vIEVhY2ggcHJlZGljdGlvbiBvcGVyYXRpb24gdXNlcyBhIGNhY2hlIGZvciBtZXJnZSBvZiBwcmVkaWN0aW9uIGNvbnRleHRzLlxuICAgIC8vICBEb24ndCBrZWVwIGFyb3VuZCBhcyBpdCB3YXN0ZXMgaHVnZSBhbW91bnRzIG9mIG1lbW9yeS4gRG91YmxlS2V5TWFwXG4gICAgLy8gIGlzbid0IHN5bmNocm9uaXplZCBidXQgd2UncmUgb2sgc2luY2UgdHdvIHRocmVhZHMgc2hvdWxkbid0IHJldXNlIHNhbWVcbiAgICAvLyAgcGFyc2VyL2F0bnNpbSBvYmplY3QgYmVjYXVzZSBpdCBjYW4gb25seSBoYW5kbGUgb25lIGlucHV0IGF0IGEgdGltZS5cbiAgICAvLyAgVGhpcyBtYXBzIGdyYXBocyBhIGFuZCBiIHRvIG1lcmdlZCByZXN1bHQgYy4gKGEsYikmcmFycjtjLiBXZSBjYW4gYXZvaWRcbiAgICAvLyAgdGhlIG1lcmdlIGlmIHdlIGV2ZXIgc2VlIGEgYW5kIGIgYWdhaW4uICBOb3RlIHRoYXQgKGIsYSkmcmFycjtjIHNob3VsZFxuICAgIC8vICBhbHNvIGJlIGV4YW1pbmVkIGR1cmluZyBjYWNoZSBsb29rdXAuXG4gICAgLy9cbiAgICB0aGlzLm1lcmdlQ2FjaGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TaW11bGF0b3IucHJvdG90eXBlKTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJzZXJBVE5TaW11bGF0b3I7XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWcgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfY2xvc3VyZSA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5kZWJ1Z19hZGQgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfbGlzdF9hdG5fZGVjaXNpb25zID0gZmFsc2U7XG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmRmYV9kZWJ1ZyA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXRyeV9kZWJ1ZyA9IGZhbHNlO1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRhcHRpdmVQcmVkaWN0ID0gZnVuY3Rpb24oaW5wdXQsIGRlY2lzaW9uLCBvdXRlckNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImFkYXB0aXZlUHJlZGljdCBkZWNpc2lvbiBcIiArIGRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBleGVjIExBKDEpPT1cIiArIHRoaXMuZ2V0TG9va2FoZWFkTmFtZShpbnB1dCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGxpbmUgXCIgKyBpbnB1dC5MVCgxKS5saW5lICsgXCI6XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LkxUKDEpLmNvbHVtbik7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5fc3RhcnRJbmRleCA9IGlucHV0LmluZGV4O1xuICAgIHRoaXMuX291dGVyQ29udGV4dCA9IG91dGVyQ29udGV4dDtcblxuICAgIHZhciBkZmEgPSB0aGlzLmRlY2lzaW9uVG9ERkFbZGVjaXNpb25dO1xuICAgIHRoaXMuX2RmYSA9IGRmYTtcbiAgICB2YXIgbSA9IGlucHV0Lm1hcmsoKTtcbiAgICB2YXIgaW5kZXggPSBpbnB1dC5pbmRleDtcblxuICAgIC8vIE5vdyB3ZSBhcmUgY2VydGFpbiB0byBoYXZlIGEgc3BlY2lmaWMgZGVjaXNpb24ncyBERkFcbiAgICAvLyBCdXQsIGRvIHdlIHN0aWxsIG5lZWQgYW4gaW5pdGlhbCBzdGF0ZT9cbiAgICB0cnkge1xuICAgICAgICB2YXIgczA7XG4gICAgICAgIGlmIChkZmEucHJlY2VkZW5jZURmYSkge1xuICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHByZWNlZGVuY2UgREZBIGRlcGVuZHMgb24gdGhlIGN1cnJlbnRcbiAgICAgICAgICAgIC8vIHBhcnNlciBwcmVjZWRlbmNlLCBhbmQgaXMgcHJvdmlkZWQgYnkgYSBERkEgbWV0aG9kLlxuICAgICAgICAgICAgczAgPSBkZmEuZ2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUodGhpcy5wYXJzZXIuZ2V0UHJlY2VkZW5jZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZSBzdGFydCBzdGF0ZSBmb3IgYSBcInJlZ3VsYXJcIiBERkEgaXMganVzdCBzMFxuICAgICAgICAgICAgczAgPSBkZmEuczA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMwPT09bnVsbCkge1xuICAgICAgICAgICAgaWYgKG91dGVyQ29udGV4dD09PW51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRlckNvbnRleHQgPSBSdWxlQ29udGV4dC5FTVBUWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGVidWdfbGlzdF9hdG5fZGVjaXNpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJwcmVkaWN0QVROIGRlY2lzaW9uIFwiICsgZGZhLmRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgZXhlYyBMQSgxKT09XCIgKyB0aGlzLmdldExvb2thaGVhZE5hbWUoaW5wdXQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIG91dGVyQ29udGV4dD1cIiArIG91dGVyQ29udGV4dC50b1N0cmluZyh0aGlzLnBhcnNlci5ydWxlTmFtZXMpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZ1bGxDdHggPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBzMF9jbG9zdXJlID0gdGhpcy5jb21wdXRlU3RhcnRTdGF0ZShkZmEuYXRuU3RhcnRTdGF0ZSwgUnVsZUNvbnRleHQuRU1QVFksIGZ1bGxDdHgpO1xuXG4gICAgICAgICAgICBpZiggZGZhLnByZWNlZGVuY2VEZmEpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkEsIHdlIHVzZSBhcHBseVByZWNlZGVuY2VGaWx0ZXJcbiAgICAgICAgICAgICAgICAvLyB0byBjb252ZXJ0IHRoZSBjb21wdXRlZCBzdGFydCBzdGF0ZSB0byBhIHByZWNlZGVuY2Ugc3RhcnRcbiAgICAgICAgICAgICAgICAvLyBzdGF0ZS4gV2UgdGhlbiB1c2UgREZBLnNldFByZWNlZGVuY2VTdGFydFN0YXRlIHRvIHNldCB0aGVcbiAgICAgICAgICAgICAgICAvLyBhcHByb3ByaWF0ZSBzdGFydCBzdGF0ZSBmb3IgdGhlIHByZWNlZGVuY2UgbGV2ZWwgcmF0aGVyXG4gICAgICAgICAgICAgICAgLy8gdGhhbiBzaW1wbHkgc2V0dGluZyBERkEuczAuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICBkZmEuczAuY29uZmlncyA9IHMwX2Nsb3N1cmU7IC8vIG5vdCB1c2VkIGZvciBwcmVkaWN0aW9uIGJ1dCB1c2VmdWwgdG8ga25vdyBzdGFydCBjb25maWdzIGFueXdheVxuICAgICAgICAgICAgICAgIHMwX2Nsb3N1cmUgPSB0aGlzLmFwcGx5UHJlY2VkZW5jZUZpbHRlcihzMF9jbG9zdXJlKTtcbiAgICAgICAgICAgICAgICBzMCA9IHRoaXMuYWRkREZBU3RhdGUoZGZhLCBuZXcgREZBU3RhdGUobnVsbCwgczBfY2xvc3VyZSkpO1xuICAgICAgICAgICAgICAgIGRmYS5zZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSh0aGlzLnBhcnNlci5nZXRQcmVjZWRlbmNlKCksIHMwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczAgPSB0aGlzLmFkZERGQVN0YXRlKGRmYSwgbmV3IERGQVN0YXRlKG51bGwsIHMwX2Nsb3N1cmUpKTtcbiAgICAgICAgICAgICAgICBkZmEuczAgPSBzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgYWx0ID0gdGhpcy5leGVjQVROKGRmYSwgczAsIGlucHV0LCBpbmRleCwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiREZBIGFmdGVyIHByZWRpY3RBVE46IFwiICsgZGZhLnRvU3RyaW5nKHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fZGZhID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZXJnZUNhY2hlID0gbnVsbDsgLy8gd2FjayBjYWNoZSBhZnRlciBlYWNoIHByZWRpY3Rpb25cbiAgICAgICAgaW5wdXQuc2VlayhpbmRleCk7XG4gICAgICAgIGlucHV0LnJlbGVhc2UobSk7XG4gICAgfVxufTtcbi8vIFBlcmZvcm1zIEFUTiBzaW11bGF0aW9uIHRvIGNvbXB1dGUgYSBwcmVkaWN0ZWQgYWx0ZXJuYXRpdmUgYmFzZWRcbi8vICB1cG9uIHRoZSByZW1haW5pbmcgaW5wdXQsIGJ1dCBhbHNvIHVwZGF0ZXMgdGhlIERGQSBjYWNoZSB0byBhdm9pZFxuLy8gIGhhdmluZyB0byB0cmF2ZXJzZSB0aGUgQVROIGFnYWluIGZvciB0aGUgc2FtZSBpbnB1dCBzZXF1ZW5jZS5cblxuLy8gVGhlcmUgYXJlIHNvbWUga2V5IGNvbmRpdGlvbnMgd2UncmUgbG9va2luZyBmb3IgYWZ0ZXIgY29tcHV0aW5nIGEgbmV3XG4vLyBzZXQgb2YgQVROIGNvbmZpZ3MgKHByb3Bvc2VkIERGQSBzdGF0ZSk6XG4gICAgICAvLyBpZiB0aGUgc2V0IGlzIGVtcHR5LCB0aGVyZSBpcyBubyB2aWFibGUgYWx0ZXJuYXRpdmUgZm9yIGN1cnJlbnQgc3ltYm9sXG4gICAgICAvLyBkb2VzIHRoZSBzdGF0ZSB1bmlxdWVseSBwcmVkaWN0IGFuIGFsdGVybmF0aXZlP1xuICAgICAgLy8gZG9lcyB0aGUgc3RhdGUgaGF2ZSBhIGNvbmZsaWN0IHRoYXQgd291bGQgcHJldmVudCB1cyBmcm9tXG4gICAgICAvLyAgIHB1dHRpbmcgaXQgb24gdGhlIHdvcmsgbGlzdD9cblxuLy8gV2UgYWxzbyBoYXZlIHNvbWUga2V5IG9wZXJhdGlvbnMgdG8gZG86XG4gICAgICAvLyBhZGQgYW4gZWRnZSBmcm9tIHByZXZpb3VzIERGQSBzdGF0ZSB0byBwb3RlbnRpYWxseSBuZXcgREZBIHN0YXRlLCBELFxuICAgICAgLy8gICB1cG9uIGN1cnJlbnQgc3ltYm9sIGJ1dCBvbmx5IGlmIGFkZGluZyB0byB3b3JrIGxpc3QsIHdoaWNoIG1lYW5zIGluIGFsbFxuICAgICAgLy8gICBjYXNlcyBleGNlcHQgbm8gdmlhYmxlIGFsdGVybmF0aXZlIChhbmQgcG9zc2libHkgbm9uLWdyZWVkeSBkZWNpc2lvbnM/KVxuICAgICAgLy8gY29sbGVjdGluZyBwcmVkaWNhdGVzIGFuZCBhZGRpbmcgc2VtYW50aWMgY29udGV4dCB0byBERkEgYWNjZXB0IHN0YXRlc1xuICAgICAgLy8gYWRkaW5nIHJ1bGUgY29udGV4dCB0byBjb250ZXh0LXNlbnNpdGl2ZSBERkEgYWNjZXB0IHN0YXRlc1xuICAgICAgLy8gY29uc3VtaW5nIGFuIGlucHV0IHN5bWJvbFxuICAgICAgLy8gcmVwb3J0aW5nIGEgY29uZmxpY3RcbiAgICAgIC8vIHJlcG9ydGluZyBhbiBhbWJpZ3VpdHlcbiAgICAgIC8vIHJlcG9ydGluZyBhIGNvbnRleHQgc2Vuc2l0aXZpdHlcbiAgICAgIC8vIHJlcG9ydGluZyBpbnN1ZmZpY2llbnQgcHJlZGljYXRlc1xuXG4vLyBjb3ZlciB0aGVzZSBjYXNlczpcbi8vICAgIGRlYWQgZW5kXG4vLyAgICBzaW5nbGUgYWx0XG4vLyAgICBzaW5nbGUgYWx0ICsgcHJlZHNcbi8vICAgIGNvbmZsaWN0XG4vLyAgICBjb25mbGljdCArIHByZWRzXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROID0gZnVuY3Rpb24oZGZhLCBzMCwgaW5wdXQsIHN0YXJ0SW5kZXgsIG91dGVyQ29udGV4dCApIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImV4ZWNBVE4gZGVjaXNpb24gXCIgKyBkZmEuZGVjaXNpb24gK1xuICAgICAgICAgICAgICAgIFwiIGV4ZWMgTEEoMSk9PVwiICsgdGhpcy5nZXRMb29rYWhlYWROYW1lKGlucHV0KSArXG4gICAgICAgICAgICAgICAgXCIgbGluZSBcIiArIGlucHV0LkxUKDEpLmxpbmUgKyBcIjpcIiArIGlucHV0LkxUKDEpLmNvbHVtbik7XG4gICAgfVxuICAgIHZhciBhbHQ7XG4gICAgdmFyIHByZXZpb3VzRCA9IHMwO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJzMCA9IFwiICsgczApO1xuICAgIH1cbiAgICB2YXIgdCA9IGlucHV0LkxBKDEpO1xuICAgIHdoaWxlKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG4gICAgICAgIHZhciBEID0gdGhpcy5nZXRFeGlzdGluZ1RhcmdldFN0YXRlKHByZXZpb3VzRCwgdCk7XG4gICAgICAgIGlmKEQ9PT1udWxsKSB7XG4gICAgICAgICAgICBEID0gdGhpcy5jb21wdXRlVGFyZ2V0U3RhdGUoZGZhLCBwcmV2aW91c0QsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmKEQ9PT1BVE5TaW11bGF0b3IuRVJST1IpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBjb25maWdzIGluIHByZXZpb3VzIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHQsIHRoYXRcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgaW5wdXQgdXAgdG8gdCBhY3R1YWxseSBmaW5pc2hlZCBlbnRyeSBydWxlXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBmb3IgU0xMIGRlY2lzaW9uLiBGdWxsIExMIGRvZXNuJ3QgZGlwIGludG8gb3V0ZXJcbiAgICAgICAgICAgIC8vIHNvIGRvbid0IG5lZWQgc3BlY2lhbCBjYXNlLlxuICAgICAgICAgICAgLy8gV2Ugd2lsbCBnZXQgYW4gZXJyb3Igbm8gbWF0dGVyIHdoYXQgc28gZGVsYXkgdW50aWwgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGRlY2lzaW9uOyBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4gQWxzbywgbm8gcmVhY2hhYmxlIHRhcmdldFxuICAgICAgICAgICAgLy8gQVROIHN0YXRlcyBpbiBTTEwgaW1wbGllcyBMTCB3aWxsIGFsc28gZ2V0IG5vd2hlcmUuXG4gICAgICAgICAgICAvLyBJZiBjb25mbGljdCBpbiBzdGF0ZXMgdGhhdCBkaXAgb3V0LCBjaG9vc2UgbWluIHNpbmNlIHdlXG4gICAgICAgICAgICAvLyB3aWxsIGdldCBlcnJvciBubyBtYXR0ZXIgd2hhdC5cbiAgICAgICAgICAgIHZhciBlID0gdGhpcy5ub1ZpYWJsZUFsdChpbnB1dCwgb3V0ZXJDb250ZXh0LCBwcmV2aW91c0QuY29uZmlncywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICBpbnB1dC5zZWVrKHN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgYWx0ID0gdGhpcy5nZXRTeW5WYWxpZE9yU2VtSW52YWxpZEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHByZXZpb3VzRC5jb25maWdzLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoRC5yZXF1aXJlc0Z1bGxDb250ZXh0ICYmIHRoaXMucHJlZGljdGlvbk1vZGUgIT09IFByZWRpY3Rpb25Nb2RlLlNMTCkge1xuICAgICAgICAgICAgLy8gSUYgUFJFRFMsIE1JR0hUIFJFU09MVkUgVE8gU0lOR0xFIEFMVCA9PiBTTEwgKG9yIHN5bnRheCBlcnJvcilcbiAgICAgICAgICAgIHZhciBjb25mbGljdGluZ0FsdHMgPSBudWxsO1xuICAgICAgICAgICAgaWYgKEQucHJlZGljYXRlcyE9PW51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRGQSBzdGF0ZSBoYXMgcHJlZHMgaW4gREZBIHNpbSBMTCBmYWlsb3ZlclwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNvbmZsaWN0SW5kZXggPSBpbnB1dC5pbmRleDtcbiAgICAgICAgICAgICAgICBpZihjb25mbGljdEluZGV4ICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nQWx0cyA9IHRoaXMuZXZhbFNlbWFudGljQ29udGV4dChELnByZWRpY2F0ZXMsIG91dGVyQ29udGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZsaWN0aW5nQWx0cy5sZW5ndGg9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRnVsbCBMTCBhdm9pZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25mbGljdGluZ0FsdHMubWluVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZsaWN0SW5kZXggIT09IHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzdG9yZSB0aGUgaW5kZXggc28gcmVwb3J0aW5nIHRoZSBmYWxsYmFjayB0byBmdWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgb2NjdXJzIHdpdGggdGhlIGluZGV4IGF0IHRoZSBjb3JyZWN0IHNwb3RcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2Vlayhjb25mbGljdEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZmFfZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImN0eCBzZW5zaXRpdmUgc3RhdGUgXCIgKyBvdXRlckNvbnRleHQgK1wiIGluIFwiICsgRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZnVsbEN0eCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgczBfY2xvc3VyZSA9IHRoaXMuY29tcHV0ZVN0YXJ0U3RhdGUoZGZhLmF0blN0YXJ0U3RhdGUsIG91dGVyQ29udGV4dCwgZnVsbEN0eCk7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dChkZmEsIGNvbmZsaWN0aW5nQWx0cywgRC5jb25maWdzLCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCk7XG4gICAgICAgICAgICBhbHQgPSB0aGlzLmV4ZWNBVE5XaXRoRnVsbENvbnRleHQoZGZhLCBELCBzMF9jbG9zdXJlLCBpbnB1dCwgc3RhcnRJbmRleCwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEQuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKEQucHJlZGljYXRlcz09PW51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRC5wcmVkaWN0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN0b3BJbmRleCA9IGlucHV0LmluZGV4O1xuICAgICAgICAgICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICAgICAgICAgIHZhciBhbHRzID0gdGhpcy5ldmFsU2VtYW50aWNDb250ZXh0KEQucHJlZGljYXRlcywgb3V0ZXJDb250ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChhbHRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLm5vVmlhYmxlQWx0KGlucHV0LCBvdXRlckNvbnRleHQsIEQuY29uZmlncywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFsdHMubGVuZ3RoPT09MSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHRzLm1pblZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBhbWJpZ3VpdHkgYWZ0ZXIgcHJlZGljYXRlIGV2YWx1YXRpb24gdG8gbWFrZSBzdXJlIHRoZSBjb3JyZWN0IHNldCBvZiBhbWJpZyBhbHRzIGlzIHJlcG9ydGVkLlxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0QW1iaWd1aXR5KGRmYSwgRCwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBmYWxzZSwgYWx0cywgRC5jb25maWdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWx0cy5taW5WYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzRCA9IEQ7XG5cbiAgICAgICAgaWYgKHQgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQuY29uc3VtZSgpO1xuICAgICAgICAgICAgdCA9IGlucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfVxufTtcbi8vXG4vLyBHZXQgYW4gZXhpc3RpbmcgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEuIElmIHRoZSB0YXJnZXQgc3RhdGVcbi8vIGZvciB0aGUgZWRnZSBoYXMgbm90IHlldCBiZWVuIGNvbXB1dGVkIG9yIGlzIG90aGVyd2lzZSBub3QgYXZhaWxhYmxlLFxuLy8gdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHByZXZpb3VzRCBUaGUgY3VycmVudCBERkEgc3RhdGVcbi8vIEBwYXJhbSB0IFRoZSBuZXh0IGlucHV0IHN5bWJvbFxuLy8gQHJldHVybiBUaGUgZXhpc3RpbmcgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRhcmdldCBzdGF0ZSBmb3IgdGhpcyBlZGdlIGlzIG5vdFxuLy8gYWxyZWFkeSBjYWNoZWRcbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEV4aXN0aW5nVGFyZ2V0U3RhdGUgPSBmdW5jdGlvbihwcmV2aW91c0QsIHQpIHtcbiAgICB2YXIgZWRnZXMgPSBwcmV2aW91c0QuZWRnZXM7XG4gICAgaWYgKGVkZ2VzPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWRnZXNbdCArIDFdIHx8IG51bGw7XG4gICAgfVxufTtcbi8vXG4vLyBDb21wdXRlIGEgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEsIGFuZCBhdHRlbXB0IHRvIGFkZCB0aGVcbi8vIGNvbXB1dGVkIHN0YXRlIGFuZCBjb3JyZXNwb25kaW5nIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyBAcGFyYW0gZGZhIFRoZSBERkFcbi8vIEBwYXJhbSBwcmV2aW91c0QgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vXG4vLyBAcmV0dXJuIFRoZSBjb21wdXRlZCB0YXJnZXQgREZBIHN0YXRlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgc3ltYm9sXG4vLyB7QGNvZGUgdH0uIElmIHtAY29kZSB0fSBkb2VzIG5vdCBsZWFkIHRvIGEgdmFsaWQgREZBIHN0YXRlLCB0aGlzIG1ldGhvZFxuLy8gcmV0dXJucyB7QGxpbmsgLy9FUlJPUn0uXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlVGFyZ2V0U3RhdGUgPSBmdW5jdGlvbihkZmEsIHByZXZpb3VzRCwgdCkge1xuICAgdmFyIHJlYWNoID0gdGhpcy5jb21wdXRlUmVhY2hTZXQocHJldmlvdXNELmNvbmZpZ3MsIHQsIGZhbHNlKTtcbiAgICBpZihyZWFjaD09PW51bGwpIHtcbiAgICAgICAgdGhpcy5hZGRERkFFZGdlKGRmYSwgcHJldmlvdXNELCB0LCBBVE5TaW11bGF0b3IuRVJST1IpO1xuICAgICAgICByZXR1cm4gQVROU2ltdWxhdG9yLkVSUk9SO1xuICAgIH1cbiAgICAvLyBjcmVhdGUgbmV3IHRhcmdldCBzdGF0ZTsgd2UnbGwgYWRkIHRvIERGQSBhZnRlciBpdCdzIGNvbXBsZXRlXG4gICAgdmFyIEQgPSBuZXcgREZBU3RhdGUobnVsbCwgcmVhY2gpO1xuXG4gICAgdmFyIHByZWRpY3RlZEFsdCA9IHRoaXMuZ2V0VW5pcXVlQWx0KHJlYWNoKTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHZhciBhbHRTdWJTZXRzID0gUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzKHJlYWNoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJTTEwgYWx0U3ViU2V0cz1cIiArIFV0aWxzLmFycmF5VG9TdHJpbmcoYWx0U3ViU2V0cykgK1xuICAgICAgICAgICAgICAgICAgICBcIiwgcHJldmlvdXM9XCIgKyBwcmV2aW91c0QuY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgIFwiLCBjb25maWdzPVwiICsgcmVhY2ggK1xuICAgICAgICAgICAgICAgICAgICBcIiwgcHJlZGljdD1cIiArIHByZWRpY3RlZEFsdCArXG4gICAgICAgICAgICAgICAgICAgIFwiLCBhbGxTdWJzZXRzQ29uZmxpY3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgICBQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzQ29uZmxpY3QoYWx0U3ViU2V0cykgKyBcIiwgY29uZmxpY3RpbmdBbHRzPVwiICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb25mbGljdGluZ0FsdHMocmVhY2gpKTtcbiAgICB9XG4gICAgaWYgKHByZWRpY3RlZEFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgLy8gTk8gQ09ORkxJQ1QsIFVOSVFVRUxZIFBSRURJQ1RFRCBBTFRcbiAgICAgICAgRC5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgRC5jb25maWdzLnVuaXF1ZUFsdCA9IHByZWRpY3RlZEFsdDtcbiAgICAgICAgRC5wcmVkaWN0aW9uID0gcHJlZGljdGVkQWx0O1xuICAgIH0gZWxzZSBpZiAoUHJlZGljdGlvbk1vZGUuaGFzU0xMQ29uZmxpY3RUZXJtaW5hdGluZ1ByZWRpY3Rpb24odGhpcy5wcmVkaWN0aW9uTW9kZSwgcmVhY2gpKSB7XG4gICAgICAgIC8vIE1PUkUgVEhBTiBPTkUgVklBQkxFIEFMVEVSTkFUSVZFXG4gICAgICAgIEQuY29uZmlncy5jb25mbGljdGluZ0FsdHMgPSB0aGlzLmdldENvbmZsaWN0aW5nQWx0cyhyZWFjaCk7XG4gICAgICAgIEQucmVxdWlyZXNGdWxsQ29udGV4dCA9IHRydWU7XG4gICAgICAgIC8vIGluIFNMTC1vbmx5IG1vZGUsIHdlIHdpbGwgc3RvcCBhdCB0aGlzIHN0YXRlIGFuZCByZXR1cm4gdGhlIG1pbmltdW0gYWx0XG4gICAgICAgIEQuaXNBY2NlcHRTdGF0ZSA9IHRydWU7XG4gICAgICAgIEQucHJlZGljdGlvbiA9IEQuY29uZmlncy5jb25mbGljdGluZ0FsdHMubWluVmFsdWUoKTtcbiAgICB9XG4gICAgaWYgKEQuaXNBY2NlcHRTdGF0ZSAmJiBELmNvbmZpZ3MuaGFzU2VtYW50aWNDb250ZXh0KSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlREZBU3RhdGUoRCwgdGhpcy5hdG4uZ2V0RGVjaXNpb25TdGF0ZShkZmEuZGVjaXNpb24pKTtcbiAgICAgICAgaWYoIEQucHJlZGljYXRlcyE9PW51bGwpIHtcbiAgICAgICAgICAgIEQucHJlZGljdGlvbiA9IEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWxsIGFkZHMgdG8gZGZhIGFyZSBkb25lIGFmdGVyIHdlJ3ZlIGNyZWF0ZWQgZnVsbCBEIHN0YXRlXG4gICAgRCA9IHRoaXMuYWRkREZBRWRnZShkZmEsIHByZXZpb3VzRCwgdCwgRCk7XG4gICAgcmV0dXJuIEQ7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnByZWRpY2F0ZURGQVN0YXRlID0gZnVuY3Rpb24oZGZhU3RhdGUsIGRlY2lzaW9uU3RhdGUpIHtcbiAgICAvLyBXZSBuZWVkIHRvIHRlc3QgYWxsIHByZWRpY2F0ZXMsIGV2ZW4gaW4gREZBIHN0YXRlcyB0aGF0XG4gICAgLy8gdW5pcXVlbHkgcHJlZGljdCBhbHRlcm5hdGl2ZS5cbiAgICB2YXIgbmFsdHMgPSBkZWNpc2lvblN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICAvLyBVcGRhdGUgREZBIHNvIHJlYWNoIGJlY29tZXMgYWNjZXB0IHN0YXRlIHdpdGggKHByZWRpY2F0ZSxhbHQpXG4gICAgLy8gcGFpcnMgaWYgcHJlZHMgZm91bmQgZm9yIGNvbmZsaWN0aW5nIGFsdHNcbiAgICB2YXIgYWx0c1RvQ29sbGVjdFByZWRzRnJvbSA9IHRoaXMuZ2V0Q29uZmxpY3RpbmdBbHRzT3JVbmlxdWVBbHQoZGZhU3RhdGUuY29uZmlncyk7XG4gICAgdmFyIGFsdFRvUHJlZCA9IHRoaXMuZ2V0UHJlZHNGb3JBbWJpZ0FsdHMoYWx0c1RvQ29sbGVjdFByZWRzRnJvbSwgZGZhU3RhdGUuY29uZmlncywgbmFsdHMpO1xuICAgIGlmIChhbHRUb1ByZWQhPT1udWxsKSB7XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY2F0ZXMgPSB0aGlzLmdldFByZWRpY2F0ZVByZWRpY3Rpb25zKGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20sIGFsdFRvUHJlZCk7XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY3Rpb24gPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSOyAvLyBtYWtlIHN1cmUgd2UgdXNlIHByZWRzXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHByZWRzIGluIGNvbmZpZ3MgYnV0IHRoZXkgbWlnaHQgZ28gYXdheVxuICAgICAgICAvLyB3aGVuIE9SJ2QgdG9nZXRoZXIgbGlrZSB7cH0/IHx8IE5PTkUgPT0gTk9ORS4gSWYgbmVpdGhlclxuICAgICAgICAvLyBhbHQgaGFzIHByZWRzLCByZXNvbHZlIHRvIG1pbiBhbHRcbiAgICAgICAgZGZhU3RhdGUucHJlZGljdGlvbiA9IGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20ubWluVmFsdWUoKTtcbiAgICB9XG59O1xuXG4vLyBjb21lcyBiYWNrIHdpdGggcmVhY2gudW5pcXVlQWx0IHNldCB0byBhIHZhbGlkIGFsdFxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROV2l0aEZ1bGxDb250ZXh0ID0gZnVuY3Rpb24oZGZhLCBELCAvLyBob3cgZmFyIHdlIGdvdCBiZWZvcmUgZmFpbGluZyBvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImV4ZWNBVE5XaXRoRnVsbENvbnRleHQgXCIrczApO1xuICAgIH1cbiAgICB2YXIgZnVsbEN0eCA9IHRydWU7XG4gICAgdmFyIGZvdW5kRXhhY3RBbWJpZyA9IGZhbHNlO1xuICAgIHZhciByZWFjaCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gczA7XG4gICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICB2YXIgdCA9IGlucHV0LkxBKDEpO1xuICAgIHZhciBwcmVkaWN0ZWRBbHQgPSAtMTtcbiAgICB3aGlsZSAodHJ1ZSkgeyAvLyB3aGlsZSBtb3JlIHdvcmtcbiAgICAgICAgcmVhY2ggPSB0aGlzLmNvbXB1dGVSZWFjaFNldChwcmV2aW91cywgdCwgZnVsbEN0eCk7XG4gICAgICAgIGlmIChyZWFjaD09PW51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBjb25maWdzIGluIHByZXZpb3VzIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHQsIHRoYXRcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgaW5wdXQgdXAgdG8gdCBhY3R1YWxseSBmaW5pc2hlZCBlbnRyeSBydWxlXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBmb3IgTEwgZGVjaXNpb24uIEZ1bGwgTEwgZG9lc24ndCBkaXAgaW50byBvdXRlclxuICAgICAgICAgICAgLy8gc28gZG9uJ3QgbmVlZCBzcGVjaWFsIGNhc2UuXG4gICAgICAgICAgICAvLyBXZSB3aWxsIGdldCBhbiBlcnJvciBubyBtYXR0ZXIgd2hhdCBzbyBkZWxheSB1bnRpbCBhZnRlclxuICAgICAgICAgICAgLy8gZGVjaXNpb247IGJldHRlciBlcnJvciBtZXNzYWdlLiBBbHNvLCBubyByZWFjaGFibGUgdGFyZ2V0XG4gICAgICAgICAgICAvLyBBVE4gc3RhdGVzIGluIFNMTCBpbXBsaWVzIExMIHdpbGwgYWxzbyBnZXQgbm93aGVyZS5cbiAgICAgICAgICAgIC8vIElmIGNvbmZsaWN0IGluIHN0YXRlcyB0aGF0IGRpcCBvdXQsIGNob29zZSBtaW4gc2luY2Ugd2VcbiAgICAgICAgICAgIC8vIHdpbGwgZ2V0IGVycm9yIG5vIG1hdHRlciB3aGF0LlxuICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm5vVmlhYmxlQWx0KGlucHV0LCBvdXRlckNvbnRleHQsIHByZXZpb3VzLCBzdGFydEluZGV4KTtcbiAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgYWx0ID0gdGhpcy5nZXRTeW5WYWxpZE9yU2VtSW52YWxpZEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHByZXZpb3VzLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFsdFN1YlNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMocmVhY2gpO1xuICAgICAgICBpZih0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkxMIGFsdFN1YlNldHM9XCIgKyBhbHRTdWJTZXRzICsgXCIsIHByZWRpY3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgUHJlZGljdGlvbk1vZGUuZ2V0VW5pcXVlQWx0KGFsdFN1YlNldHMpICsgXCIsIHJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0PVwiICtcbiAgICAgICAgICAgICAgICAgIFByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0KGFsdFN1YlNldHMpKTtcbiAgICAgICAgfVxuICAgICAgICByZWFjaC51bmlxdWVBbHQgPSB0aGlzLmdldFVuaXF1ZUFsdChyZWFjaCk7XG4gICAgICAgIC8vIHVuaXF1ZSBwcmVkaWN0aW9uP1xuICAgICAgICBpZihyZWFjaC51bmlxdWVBbHQhPT1BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBwcmVkaWN0ZWRBbHQgPSByZWFjaC51bmlxdWVBbHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZWRpY3Rpb25Nb2RlICE9PSBQcmVkaWN0aW9uTW9kZS5MTF9FWEFDVF9BTUJJR19ERVRFQ1RJT04pIHtcbiAgICAgICAgICAgIHByZWRpY3RlZEFsdCA9IFByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0KGFsdFN1YlNldHMpO1xuICAgICAgICAgICAgaWYocHJlZGljdGVkQWx0ICE9PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbiBleGFjdCBhbWJpZ3VpdHkgbW9kZSwgd2UgbmV2ZXIgdHJ5IHRvIHRlcm1pbmF0ZSBlYXJseS5cbiAgICAgICAgICAgIC8vIEp1c3Qga2VlcHMgc2NhcmZpbmcgdW50aWwgd2Uga25vdyB3aGF0IHRoZSBjb25mbGljdCBpc1xuICAgICAgICAgICAgaWYgKFByZWRpY3Rpb25Nb2RlLmFsbFN1YnNldHNDb25mbGljdChhbHRTdWJTZXRzKSAmJiBQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzRXF1YWwoYWx0U3ViU2V0cykpIHtcbiAgICAgICAgICAgICAgICBmb3VuZEV4YWN0QW1iaWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZWRpY3RlZEFsdCA9IFByZWRpY3Rpb25Nb2RlLmdldFNpbmdsZVZpYWJsZUFsdChhbHRTdWJTZXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsc2UgdGhlcmUgYXJlIG11bHRpcGxlIG5vbi1jb25mbGljdGluZyBzdWJzZXRzIG9yXG4gICAgICAgICAgICAvLyB3ZSdyZSBub3Qgc3VyZSB3aGF0IHRoZSBhbWJpZ3VpdHkgaXMgeWV0LlxuICAgICAgICAgICAgLy8gU28sIGtlZXAgZ29pbmcuXG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSByZWFjaDtcbiAgICAgICAgaWYoIHQgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQuY29uc3VtZSgpO1xuICAgICAgICAgICAgdCA9IGlucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSBjb25maWd1cmF0aW9uIHNldCB1bmlxdWVseSBwcmVkaWN0cyBhbiBhbHRlcm5hdGl2ZSxcbiAgICAvLyB3aXRob3V0IGNvbmZsaWN0LCB0aGVuIHdlIGtub3cgdGhhdCBpdCdzIGEgZnVsbCBMTCBkZWNpc2lvblxuICAgIC8vIG5vdCBTTEwuXG4gICAgaWYgKHJlYWNoLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiApIHtcbiAgICAgICAgdGhpcy5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkoZGZhLCBwcmVkaWN0ZWRBbHQsIHJlYWNoLCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCk7XG4gICAgICAgIHJldHVybiBwcmVkaWN0ZWRBbHQ7XG4gICAgfVxuICAgIC8vIFdlIGRvIG5vdCBjaGVjayBwcmVkaWNhdGVzIGhlcmUgYmVjYXVzZSB3ZSBoYXZlIGNoZWNrZWQgdGhlbVxuICAgIC8vIG9uLXRoZS1mbHkgd2hlbiBkb2luZyBmdWxsIGNvbnRleHQgcHJlZGljdGlvbi5cblxuICAgIC8vXG4gICAgLy8gSW4gbm9uLWV4YWN0IGFtYmlndWl0eSBkZXRlY3Rpb24gbW9kZSwgd2UgbWlnaHRcdGFjdHVhbGx5IGJlIGFibGUgdG9cbiAgICAvLyBkZXRlY3QgYW4gZXhhY3QgYW1iaWd1aXR5LCBidXQgSSdtIG5vdCBnb2luZyB0byBzcGVuZCB0aGUgY3ljbGVzXG4gICAgLy8gbmVlZGVkIHRvIGNoZWNrLiBXZSBvbmx5IGVtaXQgYW1iaWd1aXR5IHdhcm5pbmdzIGluIGV4YWN0IGFtYmlndWl0eVxuICAgIC8vIG1vZGUuXG4gICAgLy9cbiAgICAvLyBGb3IgZXhhbXBsZSwgd2UgbWlnaHQga25vdyB0aGF0IHdlIGhhdmUgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMuXG4gICAgLy8gQnV0LCB0aGF0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGVyZSBpcyBubyB3YXkgZm9yd2FyZCB3aXRob3V0IGFcbiAgICAvLyBjb25mbGljdC4gSXQncyBwb3NzaWJsZSB0byBoYXZlIG5vbmNvbmZsaWN0aW5nIGFsdCBzdWJzZXRzIGFzIGluOlxuXG4gICAgLy8gYWx0U3ViU2V0cz1bezEsIDJ9LCB7MSwgMn0sIHsxfSwgezEsIDJ9XVxuXG4gICAgLy8gZnJvbVxuICAgIC8vXG4gICAgLy8gICAgWygxNywxLFs1ICRdKSwgKDEzLDEsWzUgMTAgJF0pLCAoMjEsMSxbNSAxMCAkXSksICgxMSwxLFskXSksXG4gICAgLy8gICAgICgxMywyLFs1IDEwICRdKSwgKDIxLDIsWzUgMTAgJF0pLCAoMTEsMixbJF0pXVxuICAgIC8vXG4gICAgLy8gSW4gdGhpcyBjYXNlLCAoMTcsMSxbNSAkXSkgaW5kaWNhdGVzIHRoZXJlIGlzIHNvbWUgbmV4dCBzZXF1ZW5jZSB0aGF0XG4gICAgLy8gd291bGQgcmVzb2x2ZSB0aGlzIHdpdGhvdXQgY29uZmxpY3QgdG8gYWx0ZXJuYXRpdmUgMS4gQW55IG90aGVyIHZpYWJsZVxuICAgIC8vIG5leHQgc2VxdWVuY2UsIGhvd2V2ZXIsIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGNvbmZsaWN0LiAgV2Ugc3RvcFxuICAgIC8vIGxvb2tpbmcgZm9yIGlucHV0IGJlY2F1c2Ugbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgYWx0ZXJcbiAgICAvLyB0aGUgZmFjdCB0aGF0IHdlIHNob3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDEuICBXZSBqdXN0IGNhbid0IHNheSBmb3JcbiAgICAvLyBzdXJlIHRoYXQgdGhlcmUgaXMgYW4gYW1iaWd1aXR5IHdpdGhvdXQgbG9va2luZyBmdXJ0aGVyLlxuXG4gICAgdGhpcy5yZXBvcnRBbWJpZ3VpdHkoZGZhLCBELCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCwgZm91bmRFeGFjdEFtYmlnLCBudWxsLCByZWFjaCk7XG5cbiAgICByZXR1cm4gcHJlZGljdGVkQWx0O1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlUmVhY2hTZXQgPSBmdW5jdGlvbihjbG9zdXJlLCB0LCBmdWxsQ3R4KSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJpbiBjb21wdXRlUmVhY2hTZXQsIHN0YXJ0aW5nIGNsb3N1cmU6IFwiICsgY2xvc3VyZSk7XG4gICAgfVxuICAgIGlmKCB0aGlzLm1lcmdlQ2FjaGU9PT1udWxsKSB7XG4gICAgICAgIHRoaXMubWVyZ2VDYWNoZSA9IG5ldyBEb3VibGVEaWN0KCk7XG4gICAgfVxuICAgIHZhciBpbnRlcm1lZGlhdGUgPSBuZXcgQVROQ29uZmlnU2V0KGZ1bGxDdHgpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvbnMgYWxyZWFkeSBpbiBhIHJ1bGUgc3RvcCBzdGF0ZSBpbmRpY2F0ZSByZWFjaGluZyB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIGRlY2lzaW9uIHJ1bGUgKGxvY2FsIGNvbnRleHQpIG9yIGVuZCBvZiB0aGUgc3RhcnQgcnVsZSAoZnVsbFxuICAgIC8vIGNvbnRleHQpLiBPbmNlIHJlYWNoZWQsIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBuZXZlciB1cGRhdGVkIGJ5IGFcbiAgICAvLyBjbG9zdXJlIG9wZXJhdGlvbiwgc28gdGhleSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGZvciB0aGUgcGVyZm9ybWFuY2VcbiAgICAvLyBhZHZhbnRhZ2Ugb2YgaGF2aW5nIGEgc21hbGxlciBpbnRlcm1lZGlhdGUgc2V0IHdoZW4gY2FsbGluZyBjbG9zdXJlLlxuICAgIC8vXG4gICAgLy8gRm9yIGZ1bGwtY29udGV4dCByZWFjaCBvcGVyYXRpb25zLCBzZXBhcmF0ZSBoYW5kbGluZyBpcyByZXF1aXJlZCB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyB0aGUgbG9uZ2VzdCBvdmVyYWxsIHNlcXVlbmNlIGlzXG4gICAgLy8gY2hvc2VuIHdoZW4gbXVsdGlwbGUgc3VjaCBjb25maWd1cmF0aW9ucyBjYW4gbWF0Y2ggdGhlIGlucHV0LlxuXG4gICAgdmFyIHNraXBwZWRTdG9wU3RhdGVzID0gbnVsbDtcblxuICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hlcmUgd2UgY2FuIHJlYWNoIG9uIGlucHV0IHRcbiAgICBmb3IgKHZhciBpPTA7IGk8Y2xvc3VyZS5pdGVtcy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBjID0gY2xvc3VyZS5pdGVtc1tpXTtcbiAgICAgICAgaWYodGhpcy5kZWJ1Z19hZGQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGVzdGluZyBcIiArIHRoaXMuZ2V0VG9rZW5OYW1lKHQpICsgXCIgYXQgXCIgKyBjKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChmdWxsQ3R4IHx8IHQgPT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcz09PW51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZFN0b3BTdGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2tpcHBlZFN0b3BTdGF0ZXMucHVzaChjKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnX2FkZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImFkZGVkIFwiICsgYyArIFwiIHRvIHNraXBwZWRTdG9wU3RhdGVzXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcih2YXIgaj0wO2o8Yy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7aisrKSB7XG4gICAgICAgICAgICB2YXIgdHJhbnMgPSBjLnN0YXRlLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZ2V0UmVhY2hhYmxlVGFyZ2V0KHRyYW5zLCB0KTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQhPT1udWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNmZyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnRhcmdldH0sIGMpO1xuICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZS5hZGQoY2ZnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWdfYWRkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWRkZWQgXCIgKyBjZmcgKyBcIiB0byBpbnRlcm1lZGlhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE5vdyBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWFjaCBvcGVyYXRpb24gY2FuIHRha2UgdXMuLi5cbiAgICB2YXIgcmVhY2ggPSBudWxsO1xuXG4gICAgLy8gVGhpcyBibG9jayBvcHRpbWl6ZXMgdGhlIHJlYWNoIG9wZXJhdGlvbiBmb3IgaW50ZXJtZWRpYXRlIHNldHMgd2hpY2hcbiAgICAvLyB0cml2aWFsbHkgaW5kaWNhdGUgYSB0ZXJtaW5hdGlvbiBzdGF0ZSBmb3IgdGhlIG92ZXJhbGxcbiAgICAvLyBhZGFwdGl2ZVByZWRpY3Qgb3BlcmF0aW9uLlxuICAgIC8vXG4gICAgLy8gVGhlIGNvbmRpdGlvbnMgYXNzdW1lIHRoYXQgaW50ZXJtZWRpYXRlXG4gICAgLy8gY29udGFpbnMgYWxsIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHRoZSByZWFjaCBzZXQsIGJ1dCB0aGlzXG4gICAgLy8gY29uZGl0aW9uIGlzIG5vdCB0cnVlIHdoZW4gb25lIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgaGF2ZSBiZWVuXG4gICAgLy8gd2l0aGhlbGQgaW4gc2tpcHBlZFN0b3BTdGF0ZXMsIG9yIHdoZW4gdGhlIGN1cnJlbnQgc3ltYm9sIGlzIEVPRi5cbiAgICAvL1xuICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcz09PW51bGwgJiYgdCE9PVRva2VuLkVPRikge1xuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlLml0ZW1zLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIC8vIERvbid0IHB1cnN1ZSB0aGUgY2xvc3VyZSBpZiB0aGVyZSBpcyBqdXN0IG9uZSBzdGF0ZS5cbiAgICAgICAgICAgIC8vIEl0IGNhbiBvbmx5IGhhdmUgb25lIGFsdGVybmF0aXZlOyBqdXN0IGFkZCB0byByZXN1bHRcbiAgICAgICAgICAgIC8vIEFsc28gZG9uJ3QgcHVyc3VlIHRoZSBjbG9zdXJlIGlmIHRoZXJlIGlzIHVuaXF1ZSBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgcmVhY2ggPSBpbnRlcm1lZGlhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRVbmlxdWVBbHQoaW50ZXJtZWRpYXRlKSE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIC8vIEFsc28gZG9uJ3QgcHVyc3VlIHRoZSBjbG9zdXJlIGlmIHRoZXJlIGlzIHVuaXF1ZSBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgcmVhY2ggPSBpbnRlcm1lZGlhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHJlYWNoIHNldCBjb3VsZCBub3QgYmUgdHJpdmlhbGx5IGRldGVybWluZWQsIHBlcmZvcm0gYSBjbG9zdXJlXG4gICAgLy8gb3BlcmF0aW9uIG9uIHRoZSBpbnRlcm1lZGlhdGUgc2V0IHRvIGNvbXB1dGUgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAgLy9cbiAgICBpZiAocmVhY2g9PT1udWxsKSB7XG4gICAgICAgIHJlYWNoID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcbiAgICAgICAgdmFyIGNsb3N1cmVCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgdHJlYXRFb2ZBc0Vwc2lsb24gPSB0ID09PSBUb2tlbi5FT0Y7XG4gICAgICAgIGZvciAodmFyIGs9MDsgazxpbnRlcm1lZGlhdGUuaXRlbXMubGVuZ3RoO2srKykge1xuICAgICAgICAgICAgdGhpcy5jbG9zdXJlKGludGVybWVkaWF0ZS5pdGVtc1trXSwgcmVhY2gsIGNsb3N1cmVCdXN5LCBmYWxzZSwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0ID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgLy8gQWZ0ZXIgY29uc3VtaW5nIEVPRiBubyBhZGRpdGlvbmFsIGlucHV0IGlzIHBvc3NpYmxlLCBzbyB3ZSBhcmVcbiAgICAgICAgLy8gb25seSBpbnRlcmVzdGVkIGluIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGVcbiAgICAgICAgLy8gZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHRoZSBzdGFydCBydWxlIChmdWxsXG4gICAgICAgIC8vIGNvbnRleHQpLiBVcGRhdGUgcmVhY2ggdG8gY29udGFpbiBvbmx5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBUaGlzXG4gICAgICAgIC8vIGhhbmRsZXMgYm90aCBleHBsaWNpdCBFT0YgdHJhbnNpdGlvbnMgaW4gdGhlIGdyYW1tYXIgYW5kIGltcGxpY2l0XG4gICAgICAgIC8vIEVPRiB0cmFuc2l0aW9ucyBmb2xsb3dpbmcgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gb3Igc3RhcnQgcnVsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlbiByZWFjaD09aW50ZXJtZWRpYXRlLCBubyBjbG9zdXJlIG9wZXJhdGlvbiB3YXMgcGVyZm9ybWVkLiBJblxuICAgICAgICAvLyB0aGlzIGNhc2UsIHJlbW92ZUFsbENvbmZpZ3NOb3RJblJ1bGVTdG9wU3RhdGUgbmVlZHMgdG8gY2hlY2sgZm9yXG4gICAgICAgIC8vIHJlYWNoYWJsZSBydWxlIHN0b3Agc3RhdGVzIGFzIHdlbGwgYXMgY29uZmlndXJhdGlvbnMgYWxyZWFkeSBpblxuICAgICAgICAvLyBhIHJ1bGUgc3RvcCBzdGF0ZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBpcyBoYW5kbGVkIGJlZm9yZSB0aGUgY29uZmlndXJhdGlvbnMgaW4gc2tpcHBlZFN0b3BTdGF0ZXMsXG4gICAgICAgIC8vIGJlY2F1c2UgYW55IGNvbmZpZ3VyYXRpb25zIHBvdGVudGlhbGx5IGFkZGVkIGZyb20gdGhhdCBsaXN0IGFyZVxuICAgICAgICAvLyBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiB3aGV0aGVyIG9yIG5vdCBpdCdzXG4gICAgICAgIC8vIHJlcXVpcmVkLlxuICAgICAgICAvL1xuICAgICAgICByZWFjaCA9IHRoaXMucmVtb3ZlQWxsQ29uZmlnc05vdEluUnVsZVN0b3BTdGF0ZShyZWFjaCwgcmVhY2ggPT09IGludGVybWVkaWF0ZSk7XG4gICAgfVxuICAgIC8vIElmIHNraXBwZWRTdG9wU3RhdGVzIT09bnVsbCwgdGhlbiBpdCBjb250YWlucyBhdCBsZWFzdCBvbmVcbiAgICAvLyBjb25maWd1cmF0aW9uLiBGb3IgZnVsbC1jb250ZXh0IHJlYWNoIG9wZXJhdGlvbnMsIHRoZXNlXG4gICAgLy8gY29uZmlndXJhdGlvbnMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzdGFydCBydWxlLCBpbiB3aGljaCBjYXNlIHdlXG4gICAgLy8gb25seSBhZGQgdGhlbSBiYWNrIHRvIHJlYWNoIGlmIG5vIGNvbmZpZ3VyYXRpb24gZHVyaW5nIHRoZSBjdXJyZW50XG4gICAgLy8gY2xvc3VyZSBvcGVyYXRpb24gcmVhY2hlZCBzdWNoIGEgc3RhdGUuIFRoaXMgZW5zdXJlcyBhZGFwdGl2ZVByZWRpY3RcbiAgICAvLyBjaG9vc2VzIGFuIGFsdGVybmF0aXZlIG1hdGNoaW5nIHRoZSBsb25nZXN0IG92ZXJhbGwgc2VxdWVuY2Ugd2hlblxuICAgIC8vIG11bHRpcGxlIGFsdGVybmF0aXZlcyBhcmUgdmlhYmxlLlxuICAgIC8vXG4gICAgaWYgKHNraXBwZWRTdG9wU3RhdGVzIT09bnVsbCAmJiAoICghIGZ1bGxDdHgpIHx8ICghIFByZWRpY3Rpb25Nb2RlLmhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZShyZWFjaCkpKSkge1xuICAgICAgICBmb3IgKHZhciBsPTA7IGw8c2tpcHBlZFN0b3BTdGF0ZXMubGVuZ3RoO2wrKykge1xuICAgICAgICAgICAgcmVhY2guYWRkKHNraXBwZWRTdG9wU3RhdGVzW2xdLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZWFjaC5pdGVtcy5sZW5ndGg9PT0wKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWFjaDtcbiAgICB9XG59O1xuLy9cbi8vIFJldHVybiBhIGNvbmZpZ3VyYXRpb24gc2V0IGNvbnRhaW5pbmcgb25seSB0aGUgY29uZmlndXJhdGlvbnMgZnJvbVxuLy8ge0Bjb2RlIGNvbmZpZ3N9IHdoaWNoIGFyZSBpbiBhIHtAbGluayBSdWxlU3RvcFN0YXRlfS4gSWYgYWxsXG4vLyBjb25maWd1cmF0aW9ucyBpbiB7QGNvZGUgY29uZmlnc30gYXJlIGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUsIHRoaXNcbi8vIG1ldGhvZCBzaW1wbHkgcmV0dXJucyB7QGNvZGUgY29uZmlnc30uXG4vL1xuLy8gPHA+V2hlbiB7QGNvZGUgbG9va1RvRW5kT2ZSdWxlfSBpcyB0cnVlLCB0aGlzIG1ldGhvZCB1c2VzXG4vLyB7QGxpbmsgQVROLy9uZXh0VG9rZW5zfSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSB3aGljaCBpc1xuLy8gbm90IGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUgdG8gc2VlIGlmIGEgcnVsZSBzdG9wIHN0YXRlIGlzIHJlYWNoYWJsZVxuLy8gZnJvbSB0aGUgY29uZmlndXJhdGlvbiB2aWEgZXBzaWxvbi1vbmx5IHRyYW5zaXRpb25zLjwvcD5cbi8vXG4vLyBAcGFyYW0gY29uZmlncyB0aGUgY29uZmlndXJhdGlvbiBzZXQgdG8gdXBkYXRlXG4vLyBAcGFyYW0gbG9va1RvRW5kT2ZSdWxlIHdoZW4gdHJ1ZSwgdGhpcyBtZXRob2QgY2hlY2tzIGZvciBydWxlIHN0b3Agc3RhdGVzXG4vLyByZWFjaGFibGUgYnkgZXBzaWxvbi1vbmx5IHRyYW5zaXRpb25zIGZyb20gZWFjaCBjb25maWd1cmF0aW9uIGluXG4vLyB7QGNvZGUgY29uZmlnc30uXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgY29uZmlnc30gaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8gcnVsZSBzdG9wIHN0YXRlLCBvdGhlcndpc2UgcmV0dXJuIGEgbmV3IGNvbmZpZ3VyYXRpb24gc2V0IGNvbnRhaW5pbmcgb25seVxuLy8gdGhlIGNvbmZpZ3VyYXRpb25zIGZyb20ge0Bjb2RlIGNvbmZpZ3N9IHdoaWNoIGFyZSBpbiBhIHJ1bGUgc3RvcCBzdGF0ZVxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVtb3ZlQWxsQ29uZmlnc05vdEluUnVsZVN0b3BTdGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZ3MsIGxvb2tUb0VuZE9mUnVsZSkge1xuICAgIGlmIChQcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyhjb25maWdzKSkge1xuICAgICAgICByZXR1cm4gY29uZmlncztcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmIChjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgICAgICByZXN1bHQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb29rVG9FbmRPZlJ1bGUgJiYgY29uZmlnLnN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBuZXh0VG9rZW5zID0gdGhpcy5hdG4ubmV4dFRva2Vucyhjb25maWcuc3RhdGUpO1xuICAgICAgICAgICAgaWYgKG5leHRUb2tlbnMuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW5kT2ZSdWxlU3RhdGUgPSB0aGlzLmF0bi5ydWxlVG9TdG9wU3RhdGVbY29uZmlnLnN0YXRlLnJ1bGVJbmRleF07XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChuZXcgQVROQ29uZmlnKHtzdGF0ZTplbmRPZlJ1bGVTdGF0ZX0sIGNvbmZpZyksIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwLCBjdHgsIGZ1bGxDdHgpIHtcbiAgICAvLyBhbHdheXMgYXQgbGVhc3QgdGhlIGltcGxpY2l0IGNhbGwgdG8gc3RhcnQgcnVsZVxuICAgIHZhciBpbml0aWFsQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0KHRoaXMuYXRuLCBjdHgpO1xuICAgIHZhciBjb25maWdzID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDtpPHAudHJhbnNpdGlvbnMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gcC50cmFuc2l0aW9uc1tpXS50YXJnZXQ7XG4gICAgICAgIHZhciBjID0gbmV3IEFUTkNvbmZpZyh7IHN0YXRlOnRhcmdldCwgYWx0OmkrMSwgY29udGV4dDppbml0aWFsQ29udGV4dCB9LCBudWxsKTtcbiAgICAgICAgdmFyIGNsb3N1cmVCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLmNsb3N1cmUoYywgY29uZmlncywgY2xvc3VyZUJ1c3ksIHRydWUsIGZ1bGxDdHgsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ3M7XG59O1xuXG4vL1xuLy8gVGhpcyBtZXRob2QgdHJhbnNmb3JtcyB0aGUgc3RhcnQgc3RhdGUgY29tcHV0ZWQgYnlcbi8vIHtAbGluayAvL2NvbXB1dGVTdGFydFN0YXRlfSB0byB0aGUgc3BlY2lhbCBzdGFydCBzdGF0ZSB1c2VkIGJ5IGFcbi8vIHByZWNlZGVuY2UgREZBIGZvciBhIHBhcnRpY3VsYXIgcHJlY2VkZW5jZSB2YWx1ZS4gVGhlIHRyYW5zZm9ybWF0aW9uXG4vLyBwcm9jZXNzIGFwcGxpZXMgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIHRoZSBzdGFydCBzdGF0ZSdzIGNvbmZpZ3VyYXRpb25cbi8vIHNldC5cbi8vXG4vLyA8b2w+XG4vLyA8bGk+RXZhbHVhdGUgdGhlIHByZWNlZGVuY2UgcHJlZGljYXRlcyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIHVzaW5nXG4vLyB7QGxpbmsgU2VtYW50aWNDb250ZXh0Ly9ldmFsUHJlY2VkZW5jZX0uPC9saT5cbi8vIDxsaT5SZW1vdmUgYWxsIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHByZWRpY3QgYW4gYWx0ZXJuYXRpdmUgZ3JlYXRlciB0aGFuXG4vLyAxLCBmb3Igd2hpY2ggYW5vdGhlciBjb25maWd1cmF0aW9uIHRoYXQgcHJlZGljdHMgYWx0ZXJuYXRpdmUgMSBpcyBpbiB0aGVcbi8vIHNhbWUgQVROIHN0YXRlIHdpdGggdGhlIHNhbWUgcHJlZGljdGlvbiBjb250ZXh0LiBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzXG4vLyB2YWxpZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxuLy8gPHVsPlxuLy8gPGxpPlRoZSBjbG9zdXJlIGJsb2NrIGNhbm5vdCBjb250YWluIGFueSBlcHNpbG9uIHRyYW5zaXRpb25zIHdoaWNoIGJ5cGFzc1xuLy8gdGhlIGJvZHkgb2YgdGhlIGNsb3N1cmUsIHNvIGFsbCBzdGF0ZXMgcmVhY2hhYmxlIHZpYSBhbHRlcm5hdGl2ZSAxIGFyZVxuLy8gcGFydCBvZiB0aGUgcHJlY2VkZW5jZSBhbHRlcm5hdGl2ZXMgb2YgdGhlIHRyYW5zZm9ybWVkIGxlZnQtcmVjdXJzaXZlXG4vLyBydWxlLjwvbGk+XG4vLyA8bGk+VGhlIFwicHJpbWFyeVwiIHBvcnRpb24gb2YgYSBsZWZ0IHJlY3Vyc2l2ZSBydWxlIGNhbm5vdCBjb250YWluIGFuXG4vLyBlcHNpbG9uIHRyYW5zaXRpb24sIHNvIHRoZSBvbmx5IHdheSBhbiBhbHRlcm5hdGl2ZSBvdGhlciB0aGFuIDEgY2FuIGV4aXN0XG4vLyBpbiBhIHN0YXRlIHRoYXQgaXMgYWxzbyByZWFjaGFibGUgdmlhIGFsdGVybmF0aXZlIDEgaXMgYnkgbmVzdGluZyBjYWxsc1xuLy8gdG8gdGhlIGxlZnQtcmVjdXJzaXZlIHJ1bGUsIHdpdGggdGhlIG91dGVyIGNhbGxzIG5vdCBiZWluZyBhdCB0aGVcbi8vIHByZWZlcnJlZCBwcmVjZWRlbmNlIGxldmVsLjwvbGk+XG4vLyA8L3VsPlxuLy8gPC9saT5cbi8vIDwvb2w+XG4vL1xuLy8gPHA+XG4vLyBUaGUgcHJlZGljdGlvbiBjb250ZXh0IG11c3QgYmUgY29uc2lkZXJlZCBieSB0aGlzIGZpbHRlciB0byBhZGRyZXNzXG4vLyBzaXR1YXRpb25zIGxpa2UgdGhlIGZvbGxvd2luZy5cbi8vIDwvcD5cbi8vIDxjb2RlPlxuLy8gPHByZT5cbi8vIGdyYW1tYXIgVEE7XG4vLyBwcm9nOiBzdGF0ZW1lbnQqIEVPRjtcbi8vIHN0YXRlbWVudDogbGV0dGVyQSB8IHN0YXRlbWVudCBsZXR0ZXJBICdiJyA7XG4vLyBsZXR0ZXJBOiAnYSc7XG4vLyA8L3ByZT5cbi8vIDwvY29kZT5cbi8vIDxwPlxuLy8gSWYgdGhlIGFib3ZlIGdyYW1tYXIsIHRoZSBBVE4gc3RhdGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSB0b2tlblxuLy8gcmVmZXJlbmNlIHtAY29kZSAnYSd9IGluIHtAY29kZSBsZXR0ZXJBfSBpcyByZWFjaGFibGUgZnJvbSB0aGUgbGVmdCBlZGdlXG4vLyBvZiBib3RoIHRoZSBwcmltYXJ5IGFuZCBjbG9zdXJlIGJsb2NrcyBvZiB0aGUgbGVmdC1yZWN1cnNpdmUgcnVsZVxuLy8ge0Bjb2RlIHN0YXRlbWVudH0uIFRoZSBwcmVkaWN0aW9uIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhlc2Vcbi8vIGNvbmZpZ3VyYXRpb25zIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0aGVtLCBhbmQgcHJldmVudHMgdGhlIGFsdGVybmF0aXZlXG4vLyB3aGljaCBzdGVwcGVkIG91dCB0byB7QGNvZGUgcHJvZ30gKGFuZCB0aGVuIGJhY2sgaW4gdG8ge0Bjb2RlIHN0YXRlbWVudH1cbi8vIGZyb20gYmVpbmcgZWxpbWluYXRlZCBieSB0aGUgZmlsdGVyLlxuLy8gPC9wPlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBjb25maWd1cmF0aW9uIHNldCBjb21wdXRlZCBieVxuLy8ge0BsaW5rIC8vY29tcHV0ZVN0YXJ0U3RhdGV9IGFzIHRoZSBzdGFydCBzdGF0ZSBmb3IgdGhlIERGQS5cbi8vIEByZXR1cm4gVGhlIHRyYW5zZm9ybWVkIGNvbmZpZ3VyYXRpb24gc2V0IHJlcHJlc2VudGluZyB0aGUgc3RhcnQgc3RhdGVcbi8vIGZvciBhIHByZWNlZGVuY2UgREZBIGF0IGEgcGFydGljdWxhciBwcmVjZWRlbmNlIGxldmVsIChkZXRlcm1pbmVkIGJ5XG4vLyBjYWxsaW5nIHtAbGluayBQYXJzZXIvL2dldFByZWNlZGVuY2V9KS5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFwcGx5UHJlY2VkZW5jZUZpbHRlciA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0dmFyIGNvbmZpZztcblx0dmFyIHN0YXRlc0Zyb21BbHQxID0gW107XG4gICAgdmFyIGNvbmZpZ1NldCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIC8vIGhhbmRsZSBhbHQgMSBmaXJzdFxuICAgICAgICBpZiAoY29uZmlnLmFsdCAhPT0gMSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVwZGF0ZWRDb250ZXh0ID0gY29uZmlnLnNlbWFudGljQ29udGV4dC5ldmFsUHJlY2VkZW5jZSh0aGlzLnBhcnNlciwgdGhpcy5fb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgaWYgKHVwZGF0ZWRDb250ZXh0PT09bnVsbCkge1xuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZ3VyYXRpb24gd2FzIGVsaW1pbmF0ZWRcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlc0Zyb21BbHQxW2NvbmZpZy5zdGF0ZS5zdGF0ZU51bWJlcl0gPSBjb25maWcuY29udGV4dDtcbiAgICAgICAgaWYgKHVwZGF0ZWRDb250ZXh0ICE9PSBjb25maWcuc2VtYW50aWNDb250ZXh0KSB7XG4gICAgICAgICAgICBjb25maWdTZXQuYWRkKG5ldyBBVE5Db25maWcoe3NlbWFudGljQ29udGV4dDp1cGRhdGVkQ29udGV4dH0sIGNvbmZpZyksIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdTZXQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IoaT0wOyBpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uZmlnID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGNvbmZpZy5hbHQgPT09IDEpIHtcbiAgICAgICAgICAgIC8vIGFscmVhZHkgaGFuZGxlZFxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW4gdGhlIGZ1dHVyZSwgdGhpcyBlbGltaW5hdGlvbiBzdGVwIGNvdWxkIGJlIHVwZGF0ZWQgdG8gYWxzb1xuICAgICAgICAvLyBmaWx0ZXIgdGhlIHByZWRpY3Rpb24gY29udGV4dCBmb3IgYWx0ZXJuYXRpdmVzIHByZWRpY3RpbmcgYWx0PjFcbiAgICAgICAgLy8gKGJhc2ljYWxseSBhIGdyYXBoIHN1YnRyYWN0aW9uIGFsZ29yaXRobSkuXG5cdFx0aWYgKCFjb25maWcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gc3RhdGVzRnJvbUFsdDFbY29uZmlnLnN0YXRlLnN0YXRlTnVtYmVyXSB8fCBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbnRleHQhPT1udWxsICYmIGNvbnRleHQuZXF1YWxzKGNvbmZpZy5jb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZWRcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblx0XHR9XG4gICAgICAgIGNvbmZpZ1NldC5hZGQoY29uZmlnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnU2V0O1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSZWFjaGFibGVUYXJnZXQgPSBmdW5jdGlvbih0cmFucywgdHR5cGUpIHtcbiAgICBpZiAodHJhbnMubWF0Y2hlcyh0dHlwZSwgMCwgdGhpcy5hdG4ubWF4VG9rZW5UeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJhbnMudGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UHJlZHNGb3JBbWJpZ0FsdHMgPSBmdW5jdGlvbihhbWJpZ0FsdHMsIGNvbmZpZ3MsIG5hbHRzKSB7XG4gICAgLy8gUkVBQ0g9WzF8MXxbXXwwOjAsIDF8MnxbXXwwOjFdXG4gICAgLy8gYWx0VG9QcmVkIHN0YXJ0cyBhcyBhbiBhcnJheSBvZiBhbGwgbnVsbCBjb250ZXh0cy4gVGhlIGVudHJ5IGF0IGluZGV4IGlcbiAgICAvLyBjb3JyZXNwb25kcyB0byBhbHRlcm5hdGl2ZSBpLiBhbHRUb1ByZWRbaV0gbWF5IGhhdmUgb25lIG9mIHRocmVlIHZhbHVlczpcbiAgICAvLyAgIDEuIG51bGw6IG5vIEFUTkNvbmZpZyBjIGlzIGZvdW5kIHN1Y2ggdGhhdCBjLmFsdD09aVxuICAgIC8vICAgMi4gU2VtYW50aWNDb250ZXh0Lk5PTkU6IEF0IGxlYXN0IG9uZSBBVE5Db25maWcgYyBleGlzdHMgc3VjaCB0aGF0XG4gICAgLy8gICAgICBjLmFsdD09aSBhbmQgYy5zZW1hbnRpY0NvbnRleHQ9PVNlbWFudGljQ29udGV4dC5OT05FLiBJbiBvdGhlciB3b3JkcyxcbiAgICAvLyAgICAgIGFsdCBpIGhhcyBhdCBsZWFzdCBvbmUgdW5wcmVkaWNhdGVkIGNvbmZpZy5cbiAgICAvLyAgIDMuIE5vbi1OT05FIFNlbWFudGljIENvbnRleHQ6IFRoZXJlIGV4aXN0cyBhdCBsZWFzdCBvbmUsIGFuZCBmb3IgYWxsXG4gICAgLy8gICAgICBBVE5Db25maWcgYyBzdWNoIHRoYXQgYy5hbHQ9PWksIGMuc2VtYW50aWNDb250ZXh0IT1TZW1hbnRpY0NvbnRleHQuTk9ORS5cbiAgICAvL1xuICAgIC8vIEZyb20gdGhpcywgaXQgaXMgY2xlYXIgdGhhdCBOT05FfHxhbnl0aGluZz09Tk9ORS5cbiAgICAvL1xuICAgIHZhciBhbHRUb1ByZWQgPSBbXTtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmKGFtYmlnQWx0cy5jb250YWlucyggYy5hbHQgKSkge1xuICAgICAgICAgICAgYWx0VG9QcmVkW2MuYWx0XSA9IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQoYWx0VG9QcmVkW2MuYWx0XSB8fCBudWxsLCBjLnNlbWFudGljQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG5QcmVkQWx0cyA9IDA7XG4gICAgZm9yIChpID0xO2k8IG5hbHRzKzE7aSsrKSB7XG4gICAgICAgIHZhciBwcmVkID0gYWx0VG9QcmVkW2ldIHx8IG51bGw7XG4gICAgICAgIGlmIChwcmVkPT09bnVsbCkge1xuICAgICAgICAgICAgYWx0VG9QcmVkW2ldID0gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJlZCAhPT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcbiAgICAgICAgICAgIG5QcmVkQWx0cyArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vbmFtYmlnIGFsdHMgYXJlIG51bGwgaW4gYWx0VG9QcmVkXG4gICAgaWYgKG5QcmVkQWx0cz09PTApIHtcbiAgICAgICAgYWx0VG9QcmVkID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcmVkc0ZvckFtYmlnQWx0cyByZXN1bHQgXCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKGFsdFRvUHJlZCkpO1xuICAgIH1cbiAgICByZXR1cm4gYWx0VG9QcmVkO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRQcmVkaWNhdGVQcmVkaWN0aW9ucyA9IGZ1bmN0aW9uKGFtYmlnQWx0cywgYWx0VG9QcmVkKSB7XG4gICAgdmFyIHBhaXJzID0gW107XG4gICAgdmFyIGNvbnRhaW5zUHJlZGljYXRlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaT0xOyBpPGFsdFRvUHJlZC5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBwcmVkID0gYWx0VG9QcmVkW2ldO1xuICAgICAgICAvLyB1bnByZWRpY2F0ZWQgaXMgaW5kaWNhdGVkIGJ5IFNlbWFudGljQ29udGV4dC5OT05FXG4gICAgICAgIGlmKCBhbWJpZ0FsdHMhPT1udWxsICYmIGFtYmlnQWx0cy5jb250YWlucyggaSApKSB7XG4gICAgICAgICAgICBwYWlycy5wdXNoKG5ldyBQcmVkUHJlZGljdGlvbihwcmVkLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICBjb250YWluc1ByZWRpY2F0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEgY29udGFpbnNQcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGltcHJvdmUgdGhlIGxvY2FsaXphdGlvbiBvZiBlcnJvciBtZXNzYWdlcyBieVxuLy8gY2hvb3NpbmcgYW4gYWx0ZXJuYXRpdmUgcmF0aGVyIHRoYW4gdGhyb3dpbmcgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSBpbiBwYXJ0aWN1bGFyIHByZWRpY3Rpb24gc2NlbmFyaW9zIHdoZXJlIHRoZVxuLy8ge0BsaW5rIC8vRVJST1J9IHN0YXRlIHdhcyByZWFjaGVkIGR1cmluZyBBVE4gc2ltdWxhdGlvbi5cbi8vXG4vLyA8cD5cbi8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHVzZXMgdGhlIGZvbGxvd2luZ1xuLy8gYWxnb3JpdGhtIHRvIGlkZW50aWZ5IGFuIEFUTiBjb25maWd1cmF0aW9uIHdoaWNoIHN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlXG4vLyBkZWNpc2lvbiBlbnRyeSBydWxlLiBDaG9vc2luZyBzdWNoIGFuIGFsdGVybmF0aXZlIGVuc3VyZXMgdGhhdCB0aGVcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dH0gcmV0dXJuZWQgYnkgdGhlIGNhbGxpbmcgcnVsZSB3aWxsIGJlIGNvbXBsZXRlXG4vLyBhbmQgdmFsaWQsIGFuZCB0aGUgc3ludGF4IGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgbGF0ZXIgYXQgYSBtb3JlXG4vLyBsb2NhbGl6ZWQgbG9jYXRpb24uPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT5JZiBhIHN5bnRhY3RpY2FsbHkgdmFsaWQgcGF0aCBvciBwYXRocyByZWFjaCB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIGFuZFxuLy8gdGhleSBhcmUgc2VtYW50aWNhbGx5IHZhbGlkIGlmIHByZWRpY2F0ZWQsIHJldHVybiB0aGUgbWluIGFzc29jaWF0ZWQgYWx0LjwvbGk+XG4vLyA8bGk+RWxzZSwgaWYgYSBzZW1hbnRpY2FsbHkgaW52YWxpZCBidXQgc3ludGFjdGljYWxseSB2YWxpZCBwYXRoIGV4aXN0XG4vLyBvciBwYXRocyBleGlzdCwgcmV0dXJuIHRoZSBtaW5pbXVtIGFzc29jaWF0ZWQgYWx0LlxuLy8gPC9saT5cbi8vIDxsaT5PdGhlcndpc2UsIHJldHVybiB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LjwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIDxwPlxuLy8gSW4gc29tZSBzY2VuYXJpb3MsIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGFib3ZlIGNvdWxkIHByZWRpY3QgYW5cbi8vIGFsdGVybmF0aXZlIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0gaW5cbi8vIHRoZSBwYXJzZXIuIFNwZWNpZmljYWxseSwgdGhpcyBjb3VsZCBvY2N1ciBpZiB0aGUgPGVtPm9ubHk8L2VtPiBjb25maWd1cmF0aW9uXG4vLyBjYXBhYmxlIG9mIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGRlY2lzaW9uIHJ1bGUgaXNcbi8vIGJsb2NrZWQgYnkgYSBzZW1hbnRpYyBwcmVkaWNhdGUuIEJ5IGNob29zaW5nIHRoaXMgYWx0ZXJuYXRpdmUgd2l0aGluXG4vLyB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9IGluc3RlYWQgb2YgdGhyb3dpbmcgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSwgdGhlIHJlc3VsdGluZ1xuLy8ge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0gaW4gdGhlIHBhcnNlciB3aWxsIGlkZW50aWZ5IHRoZSBzcGVjaWZpY1xuLy8gcHJlZGljYXRlIHdoaWNoIGlzIHByZXZlbnRpbmcgdGhlIHBhcnNlciBmcm9tIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRoZVxuLy8gZGVjaXNpb24gcnVsZSwgd2hpY2ggaGVscHMgZGV2ZWxvcGVycyBpZGVudGlmeSBhbmQgY29ycmVjdCBsb2dpYyBlcnJvcnNcbi8vIGluIHNlbWFudGljIHByZWRpY2F0ZXMuXG4vLyA8L3A+XG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgVGhlIEFUTiBjb25maWd1cmF0aW9ucyB3aGljaCB3ZXJlIHZhbGlkIGltbWVkaWF0ZWx5IGJlZm9yZVxuLy8gdGhlIHtAbGluayAvL0VSUk9SfSBzdGF0ZSB3YXMgcmVhY2hlZFxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgaXMgdGhlIFxcZ2FtbWFfMCBpbml0aWFsIHBhcnNlciBjb250ZXh0IGZyb20gdGhlIHBhcGVyXG4vLyBvciB0aGUgcGFyc2VyIHN0YWNrIGF0IHRoZSBpbnN0YW50IGJlZm9yZSBwcmVkaWN0aW9uIGNvbW1lbmNlcy5cbi8vXG4vLyBAcmV0dXJuIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9LCBvclxuLy8ge0BsaW5rIEFUTi8vSU5WQUxJRF9BTFRfTlVNQkVSfSBpZiBhIHN1aXRhYmxlIGFsdGVybmF0aXZlIHdhcyBub3Rcbi8vIGlkZW50aWZpZWQgYW5kIHtAbGluayAvL2FkYXB0aXZlUHJlZGljdH0gc2hvdWxkIHJlcG9ydCBhbiBlcnJvciBpbnN0ZWFkLlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0U3luVmFsaWRPclNlbUludmFsaWRBbHRUaGF0RmluaXNoZWREZWNpc2lvbkVudHJ5UnVsZSA9IGZ1bmN0aW9uKGNvbmZpZ3MsIG91dGVyQ29udGV4dCkge1xuICAgIHZhciBjZmdzID0gdGhpcy5zcGxpdEFjY29yZGluZ1RvU2VtYW50aWNWYWxpZGl0eShjb25maWdzLCBvdXRlckNvbnRleHQpO1xuICAgIHZhciBzZW1WYWxpZENvbmZpZ3MgPSBjZmdzWzBdO1xuICAgIHZhciBzZW1JbnZhbGlkQ29uZmlncyA9IGNmZ3NbMV07XG4gICAgdmFyIGFsdCA9IHRoaXMuZ2V0QWx0VGhhdEZpbmlzaGVkRGVjaXNpb25FbnRyeVJ1bGUoc2VtVmFsaWRDb25maWdzKTtcbiAgICBpZiAoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikgeyAvLyBzZW1hbnRpY2FsbHkvc3ludGFjdGljYWxseSB2aWFibGUgcGF0aCBleGlzdHNcbiAgICAgICAgcmV0dXJuIGFsdDtcbiAgICB9XG4gICAgLy8gSXMgdGhlcmUgYSBzeW50YWN0aWNhbGx5IHZhbGlkIHBhdGggd2l0aCBhIGZhaWxlZCBwcmVkP1xuICAgIGlmIChzZW1JbnZhbGlkQ29uZmlncy5pdGVtcy5sZW5ndGg+MCkge1xuICAgICAgICBhbHQgPSB0aGlzLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHNlbUludmFsaWRDb25maWdzKTtcbiAgICAgICAgaWYgKGFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHsgLy8gc3ludGFjdGljYWxseSB2aWFibGUgcGF0aCBleGlzdHNcbiAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBhbHRzID0gW107XG4gICAgZm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGMucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+MCB8fCAoKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSAmJiBjLmNvbnRleHQuaGFzRW1wdHlQYXRoKCkpKSB7XG4gICAgICAgICAgICBpZihhbHRzLmluZGV4T2YoYy5hbHQpPDApIHtcbiAgICAgICAgICAgICAgICBhbHRzLnB1c2goYy5hbHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhbHRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KG51bGwsIGFsdHMpO1xuICAgIH1cbn07XG4vLyBXYWxrIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIGFuZCBzcGxpdCB0aGVtIGFjY29yZGluZyB0b1xuLy8gIHRob3NlIHRoYXQgaGF2ZSBwcmVkcyBldmFsdWF0aW5nIHRvIHRydWUvZmFsc2UuICBJZiBubyBwcmVkLCBhc3N1bWVcbi8vICB0cnVlIHByZWQgYW5kIGluY2x1ZGUgaW4gc3VjY2VlZGVkIHNldC4gIFJldHVybnMgUGFpciBvZiBzZXRzLlxuLy9cbi8vICBDcmVhdGUgYSBuZXcgc2V0IHNvIGFzIG5vdCB0byBhbHRlciB0aGUgaW5jb21pbmcgcGFyYW1ldGVyLlxuLy9cbi8vICBBc3N1bXB0aW9uOiB0aGUgaW5wdXQgc3RyZWFtIGhhcyBiZWVuIHJlc3RvcmVkIHRvIHRoZSBzdGFydGluZyBwb2ludFxuLy8gIHByZWRpY3Rpb24sIHdoaWNoIGlzIHdoZXJlIHByZWRpY2F0ZXMgbmVlZCB0byBldmFsdWF0ZS5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnNwbGl0QWNjb3JkaW5nVG9TZW1hbnRpY1ZhbGlkaXR5ID0gZnVuY3Rpb24oIGNvbmZpZ3MsIG91dGVyQ29udGV4dCkge1xuICAgIHZhciBzdWNjZWVkZWQgPSBuZXcgQVROQ29uZmlnU2V0KGNvbmZpZ3MuZnVsbEN0eCk7XG4gICAgdmFyIGZhaWxlZCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYy5zZW1hbnRpY0NvbnRleHQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICB2YXIgcHJlZGljYXRlRXZhbHVhdGlvblJlc3VsdCA9IGMuc2VtYW50aWNDb250ZXh0LmV2YWx1YXRlKHRoaXMucGFyc2VyLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBzdWNjZWVkZWQuYWRkKGMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmYWlsZWQuYWRkKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VjY2VlZGVkLmFkZChjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3N1Y2NlZWRlZCwgZmFpbGVkXTtcbn07XG5cbi8vIExvb2sgdGhyb3VnaCBhIGxpc3Qgb2YgcHJlZGljYXRlL2FsdCBwYWlycywgcmV0dXJuaW5nIGFsdHMgZm9yIHRoZVxuLy8gIHBhaXJzIHRoYXQgd2luLiBBIHtAY29kZSBOT05FfSBwcmVkaWNhdGUgaW5kaWNhdGVzIGFuIGFsdCBjb250YWluaW5nIGFuXG4vLyAgdW5wcmVkaWNhdGVkIGNvbmZpZyB3aGljaCBiZWhhdmVzIGFzIFwiYWx3YXlzIHRydWUuXCIgSWYgIWNvbXBsZXRlXG4vLyAgdGhlbiB3ZSBzdG9wIGF0IHRoZSBmaXJzdCBwcmVkaWNhdGUgdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZS4gVGhpc1xuLy8gIGluY2x1ZGVzIHBhaXJzIHdpdGggbnVsbCBwcmVkaWNhdGVzLlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZXZhbFNlbWFudGljQ29udGV4dCA9IGZ1bmN0aW9uKHByZWRQcmVkaWN0aW9ucywgb3V0ZXJDb250ZXh0LCBjb21wbGV0ZSkge1xuICAgIHZhciBwcmVkaWN0aW9ucyA9IG5ldyBCaXRTZXQoKTtcbiAgICBmb3IodmFyIGk9MDtpPHByZWRQcmVkaWN0aW9ucy5sZW5ndGg7aSsrKSB7XG4gICAgXHR2YXIgcGFpciA9IHByZWRQcmVkaWN0aW9uc1tpXTtcbiAgICAgICAgaWYgKHBhaXIucHJlZCA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcbiAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZChwYWlyLmFsdCk7XG4gICAgICAgICAgICBpZiAoISBjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQgPSBwYWlyLnByZWQuZXZhbHVhdGUodGhpcy5wYXJzZXIsIG91dGVyQ29udGV4dCk7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGZhX2RlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImV2YWwgcHJlZCBcIiArIHBhaXIgKyBcIj1cIiArIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkaWNhdGVFdmFsdWF0aW9uUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRmYV9kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUFJFRElDVCBcIiArIHBhaXIuYWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZChwYWlyLmFsdCk7XG4gICAgICAgICAgICBpZiAoISBjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVkaWN0aW9ucztcbn07XG5cbi8vIFRPRE86IElmIHdlIGFyZSBkb2luZyBwcmVkaWNhdGVzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBwdXJzdWluZ1xuLy8gICAgIGNsb3N1cmUgb3BlcmF0aW9ucyBpZiB3ZSByZWFjaCBhIERGQSBzdGF0ZSB0aGF0IHVuaXF1ZWx5IHByZWRpY3RzXG4vLyAgICAgYWx0ZXJuYXRpdmUuIFdlIHdpbGwgbm90IGJlIGNhY2hpbmcgdGhhdCBERkEgc3RhdGUgYW5kIGl0IGlzIGFcbi8vICAgICB3YXN0ZSB0byBwdXJzdWUgdGhlIGNsb3N1cmUuIE1pZ2h0IGhhdmUgdG8gYWR2YW5jZSB3aGVuIHdlIGRvXG4vLyAgICAgYW1iaWcgZGV0ZWN0aW9uIHRob3VnaHQgOihcbi8vXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZSA9IGZ1bmN0aW9uKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCB0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgIHZhciBpbml0aWFsRGVwdGggPSAwO1xuICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ3R4LCBpbml0aWFsRGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbn07XG5cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jbG9zdXJlQ2hlY2tpbmdTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgaWYgKHRoaXMuZGVidWcgfHwgdGhpcy5kZWJ1Z19jbG9zdXJlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2xvc3VyZShcIiArIGNvbmZpZy50b1N0cmluZyh0aGlzLnBhcnNlcix0cnVlKSArIFwiKVwiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb25maWdzKFwiICsgY29uZmlncy50b1N0cmluZygpICsgXCIpXCIpO1xuICAgICAgICBpZihjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+NTApIHtcbiAgICAgICAgICAgIHRocm93IFwicHJvYmxlbVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgIC8vIFdlIGhpdCBydWxlIGVuZC4gSWYgd2UgaGF2ZSBjb250ZXh0IGluZm8sIHVzZSBpdFxuICAgICAgICAvLyBydW4gdGhydSBhbGwgcG9zc2libGUgc3RhY2sgdG9wcyBpbiBjdHhcbiAgICAgICAgaWYgKCEgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBmb3IgKCB2YXIgaSA9MDsgaTxjb25maWcuY29udGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdWxsQ3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzLmFkZChuZXcgQVROQ29uZmlnKHtzdGF0ZTpjb25maWcuc3RhdGUsIGNvbnRleHQ6UHJlZGljdGlvbkNvbnRleHQuRU1QVFl9LCBjb25maWcpLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIG5vIGNvbnRleHQgaW5mbywganVzdCBjaGFzZSBmb2xsb3cgbGlua3MgKGlmIGdyZWVkeSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUxMSU5HIG9mZiBydWxlIFwiICsgdGhpcy5nZXRSdWxlTmFtZShjb25maWcuc3RhdGUucnVsZUluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3N1cmVfKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJldHVyblN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW2NvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpXTtcbiAgICAgICAgICAgICAgICB2YXIgbmV3Q29udGV4dCA9IGNvbmZpZy5jb250ZXh0LmdldFBhcmVudChpKTsgLy8gXCJwb3BcIiByZXR1cm4gc3RhdGVcbiAgICAgICAgICAgICAgICB2YXIgcGFybXMgPSB7c3RhdGU6cmV0dXJuU3RhdGUsIGFsdDpjb25maWcuYWx0LCBjb250ZXh0Om5ld0NvbnRleHQsIHNlbWFudGljQ29udGV4dDpjb25maWcuc2VtYW50aWNDb250ZXh0fTtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IG5ldyBBVE5Db25maWcocGFybXMsIG51bGwpO1xuICAgICAgICAgICAgICAgIC8vIFdoaWxlIHdlIGhhdmUgY29udGV4dCB0byBwb3AgYmFjayBmcm9tLCB3ZSBtYXkgaGF2ZVxuICAgICAgICAgICAgICAgIC8vIGdvdHRlbiB0aGF0IGNvbnRleHQgQUZURVIgaGF2aW5nIGZhbGxpbmcgb2ZmIGEgcnVsZS5cbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgdHJhY2sgdGhhdCB3ZSBhcmUgbm93IG91dCBvZiBjb250ZXh0LlxuICAgICAgICAgICAgICAgIGMucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSBjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zdXJlQ2hlY2tpbmdTdG9wU3RhdGUoYywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCBkZXB0aCAtIDEsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmKCBmdWxsQ3R4KSB7XG4gICAgICAgICAgICAvLyByZWFjaGVkIGVuZCBvZiBzdGFydCBydWxlXG4gICAgICAgICAgICBjb25maWdzLmFkZChjb25maWcsIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbHNlIGlmIHdlIGhhdmUgbm8gY29udGV4dCBpbmZvLCBqdXN0IGNoYXNlIGZvbGxvdyBsaW5rcyAoaWYgZ3JlZWR5KVxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBTExJTkcgb2ZmIHJ1bGUgXCIgKyB0aGlzLmdldFJ1bGVOYW1lKGNvbmZpZy5zdGF0ZS5ydWxlSW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsb3N1cmVfKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCBkZXB0aCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xufTtcblxuXG4vLyBEbyB0aGUgYWN0dWFsIHdvcmsgb2Ygd2Fsa2luZyBlcHNpbG9uIGVkZ2VzLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZV8gPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgdmFyIHAgPSBjb25maWcuc3RhdGU7XG4gICAgLy8gb3B0aW1pemF0aW9uXG4gICAgaWYgKCEgcC5lcHNpbG9uT25seVRyYW5zaXRpb25zKSB7XG4gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIG5vdCByZXR1cm4gaGVyZSwgYmVjYXVzZSBFT0YgdHJhbnNpdGlvbnMgY2FuIGFjdCBhc1xuICAgICAgICAvLyBib3RoIGVwc2lsb24gdHJhbnNpdGlvbnMgYW5kIG5vbi1lcHNpbG9uIHRyYW5zaXRpb25zLlxuICAgIH1cbiAgICBmb3IodmFyIGkgPSAwO2k8cC50cmFuc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZihpPT0wICYmIHRoaXMuY2FuRHJvcExvb3BFbnRyeUVkZ2VJbkxlZnRSZWN1cnNpdmVSdWxlKGNvbmZpZykpXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB2YXIgdCA9IHAudHJhbnNpdGlvbnNbaV07XG4gICAgICAgIHZhciBjb250aW51ZUNvbGxlY3RpbmcgPSBjb2xsZWN0UHJlZGljYXRlcyAmJiAhKHQgaW5zdGFuY2VvZiBBY3Rpb25UcmFuc2l0aW9uKTtcbiAgICAgICAgdmFyIGMgPSB0aGlzLmdldEVwc2lsb25UYXJnZXQoY29uZmlnLCB0LCBjb250aW51ZUNvbGxlY3RpbmcsIGRlcHRoID09PSAwLCBmdWxsQ3R4LCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgIGlmIChjIT09bnVsbCkge1xuICAgICAgICAgICAgdmFyIG5ld0RlcHRoID0gZGVwdGg7XG4gICAgICAgICAgICBpZiAoIGNvbmZpZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyB0YXJnZXQgZmVsbCBvZmYgZW5kIG9mIHJ1bGU7IG1hcmsgcmVzdWx0aW5nIGMgYXMgaGF2aW5nIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBnZXQgaGVyZSBpZiBpbmNvbWluZyBjb25maWcgd2FzIHJ1bGUgc3RvcCBhbmQgd2UgaGFkIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyB0cmFjayBob3cgZmFyIHdlIGRpcCBpbnRvIG91dGVyIGNvbnRleHQuICBNaWdodFxuICAgICAgICAgICAgICAgIC8vIGNvbWUgaW4gaGFuZHkgYW5kIHdlIGF2b2lkIGV2YWx1YXRpbmcgY29udGV4dCBkZXBlbmRlbnRcbiAgICAgICAgICAgICAgICAvLyBwcmVkcyBpZiB0aGlzIGlzID4gMC5cblx0XHRcdFx0aWYgKHRoaXMuX2RmYSAhPT0gbnVsbCAmJiB0aGlzLl9kZmEucHJlY2VkZW5jZURmYSkge1xuXHRcdFx0XHRcdGlmICh0Lm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPT09IHRoaXMuX2RmYS5hdG5TdGFydFN0YXRlLnJ1bGVJbmRleCkge1xuXHRcdFx0XHRcdFx0Yy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cbiAgICAgICAgICAgICAgICBjLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGNsb3N1cmVCdXN5LmFkZChjKSE9PWMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGZvciByaWdodC1yZWN1cnNpdmUgcnVsZXNcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZ3MuZGlwc0ludG9PdXRlckNvbnRleHQgPSB0cnVlOyAvLyBUT0RPOiBjYW4gcmVtb3ZlPyBvbmx5IGNhcmUgd2hlbiB3ZSBhZGQgdG8gc2V0IHBlciBtaWRkbGUgb2YgdGhpcyBtZXRob2RcbiAgICAgICAgICAgICAgICBuZXdEZXB0aCAtPSAxO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlwcyBpbnRvIG91dGVyIGN0eDogXCIgKyBjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdC5pc0Vwc2lsb24gJiYgY2xvc3VyZUJ1c3kuYWRkKGMpIT09Yyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBmb3IgRU9GKiBhbmQgRU9GK1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBSdWxlVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBsYXRjaCB3aGVuIG5ld0RlcHRoIGdvZXMgbmVnYXRpdmUgLSBvbmNlIHdlIHN0ZXAgb3V0IG9mIHRoZSBlbnRyeSBjb250ZXh0IHdlIGNhbid0IHJldHVyblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3RGVwdGggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVwdGggKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGMsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb250aW51ZUNvbGxlY3RpbmcsIGZ1bGxDdHgsIG5ld0RlcHRoLCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2FuRHJvcExvb3BFbnRyeUVkZ2VJbkxlZnRSZWN1cnNpdmVSdWxlID0gZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgLy8gcmV0dXJuIEZhbHNlXG4gICAgdmFyIHAgPSBjb25maWcuc3RhdGU7XG4gICAgLy8gRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBpbiBTdGFyTG9vcEVudHJ5U3RhdGUgZ2VuZXJhdGVkIGR1cmluZ1xuICAgIC8vIGxlZnQtcmVjdXJzaW9uIGVsaW1pbmF0aW9uLiBGb3IgZWZmaWNpZW5jeSwgYWxzbyBjaGVjayBpZlxuICAgIC8vIHRoZSBjb250ZXh0IGhhcyBhbiBlbXB0eSBzdGFjayBjYXNlLiBJZiBzbywgaXQgd291bGQgbWVhblxuICAgIC8vIGdsb2JhbCBGT0xMT1cgc28gd2UgY2FuJ3QgcGVyZm9ybSBvcHRpbWl6YXRpb25cbiAgICAvLyBBcmUgd2UgdGhlIHNwZWNpYWwgbG9vcCBlbnRyeS9leGl0IHN0YXRlPyBvciBTTEwgd2lsZGNhcmRcbiAgICBpZihwLnN0YXRlVHlwZSAhPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZihwLnN0YXRlVHlwZSAhPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkgfHwgIXAuaXNQcmVjZWRlbmNlRGVjaXNpb24gfHxcbiAgICAgICAgICAgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpIHx8IGNvbmZpZy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBSZXF1aXJlIGFsbCByZXR1cm4gc3RhdGVzIHRvIHJldHVybiBiYWNrIHRvIHRoZSBzYW1lIHJ1bGUgdGhhdCBwIGlzIGluLlxuICAgIHZhciBudW1DdHhzID0gY29uZmlnLmNvbnRleHQubGVuZ3RoO1xuICAgIGZvcih2YXIgaT0wOyBpPG51bUN0eHM7IGkrKykgeyAvLyBmb3IgZWFjaCBzdGFjayBjb250ZXh0XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZS5ydWxlSW5kZXggIT0gcC5ydWxlSW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGRlY2lzaW9uU3RhcnRTdGF0ZSA9IHAudHJhbnNpdGlvbnNbMF0udGFyZ2V0O1xuICAgIHZhciBibG9ja0VuZFN0YXRlTnVtID0gZGVjaXNpb25TdGFydFN0YXRlLmVuZFN0YXRlLnN0YXRlTnVtYmVyO1xuICAgIHZhciBibG9ja0VuZFN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW2Jsb2NrRW5kU3RhdGVOdW1dO1xuXG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRvcCBvZiBlYWNoIHN0YWNrIGNvbnRleHQgbGVhZHMgdG8gbG9vcCBlbnRyeS9leGl0XG4gICAgLy8gc3RhdGUgdGhyb3VnaCBlcHNpbG9uIGVkZ2VzIGFuZCB3L28gbGVhdmluZyBydWxlLlxuICAgIGZvcih2YXIgaT0wOyBpPG51bUN0eHM7IGkrKykgeyAvLyBmb3IgZWFjaCBzdGFjayBjb250ZXh0XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZU51bWJlciA9IGNvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpO1xuICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSB0aGlzLmF0bi5zdGF0ZXNbcmV0dXJuU3RhdGVOdW1iZXJdO1xuICAgICAgICAvLyBhbGwgc3RhdGVzIG11c3QgaGF2ZSBzaW5nbGUgb3V0Z29pbmcgZXBzaWxvbiBlZGdlXG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggIT0gMSB8fCAhcmV0dXJuU3RhdGUudHJhbnNpdGlvbnNbMF0uaXNFcHNpbG9uKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIHByZWZpeCBvcCBjYXNlIGxpa2UgJ25vdCBleHByJywgKCcgdHlwZSAnKScgZXhwclxuICAgICAgICB2YXIgcmV0dXJuU3RhdGVUYXJnZXQgPSByZXR1cm5TdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQ7XG4gICAgICAgIGlmICggcmV0dXJuU3RhdGUuc3RhdGVUeXBlID09IEFUTlN0YXRlLkJMT0NLX0VORCAmJiByZXR1cm5TdGF0ZVRhcmdldCA9PSBwIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yICdleHByIG9wIGV4cHInIG9yIGNhc2Ugd2hlcmUgZXhwcidzIHJldHVybiBzdGF0ZSBpcyBibG9jayBlbmRcbiAgICAgICAgLy8gb2YgKC4uLikqIGludGVybmFsIGJsb2NrOyB0aGUgYmxvY2sgZW5kIHBvaW50cyB0byBsb29wIGJhY2tcbiAgICAgICAgLy8gd2hpY2ggcG9pbnRzIHRvIHAgYnV0IHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhhdFxuICAgICAgICBpZiAoIHJldHVyblN0YXRlID09IGJsb2NrRW5kU3RhdGUgKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gTG9vayBmb3IgdGVybmFyeSBleHByID8gZXhwciA6IGV4cHIuIFRoZSByZXR1cm4gc3RhdGUgcG9pbnRzIGF0IGJsb2NrIGVuZCxcbiAgICAgICAgLy8gd2hpY2ggcG9pbnRzIGF0IGxvb3AgZW50cnkgc3RhdGVcbiAgICAgICAgaWYgKCByZXR1cm5TdGF0ZVRhcmdldCA9PSBibG9ja0VuZFN0YXRlIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIGNvbXBsZXggcHJlZml4ICdiZXR3ZWVuIGV4cHIgYW5kIGV4cHInIGNhc2Ugd2hlcmUgMm5kIGV4cHInc1xuICAgICAgICAvLyByZXR1cm4gc3RhdGUgcG9pbnRzIGF0IGJsb2NrIGVuZCBzdGF0ZSBvZiAoLi4uKSogaW50ZXJuYWwgYmxvY2tcbiAgICAgICAgaWYgKHJldHVyblN0YXRlVGFyZ2V0LnN0YXRlVHlwZSA9PSBBVE5TdGF0ZS5CTE9DS19FTkQgJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnMubGVuZ3RoID09IDFcbiAgICAgICAgICAgICAgICAmJiByZXR1cm5TdGF0ZVRhcmdldC50cmFuc2l0aW9uc1swXS5pc0Vwc2lsb24gJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnNbMF0udGFyZ2V0ID09IHApXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBhbnl0aGluZyBlbHNlIGFpbid0IGNvbmZvcm1pbmdcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSdWxlTmFtZSA9IGZ1bmN0aW9uKCBpbmRleCkge1xuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwgJiYgaW5kZXg+PTApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1tpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiPHJ1bGUgXCIgKyBpbmRleCArIFwiPlwiO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0RXBzaWxvblRhcmdldCA9IGZ1bmN0aW9uKGNvbmZpZywgdCwgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcbiAgICBzd2l0Y2godC5zZXJpYWxpemF0aW9uVHlwZSkge1xuICAgIGNhc2UgVHJhbnNpdGlvbi5SVUxFOlxuICAgICAgICByZXR1cm4gdGhpcy5ydWxlVHJhbnNpdGlvbihjb25maWcsIHQpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5QUkVDRURFTkNFOlxuICAgICAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlVHJhbnNpdGlvbihjb25maWcsIHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5QUkVESUNBVEU6XG4gICAgICAgIHJldHVybiB0aGlzLnByZWRUcmFuc2l0aW9uKGNvbmZpZywgdCwgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkFDVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uVHJhbnNpdGlvbihjb25maWcsIHQpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5FUFNJTE9OOlxuICAgICAgICByZXR1cm4gbmV3IEFUTkNvbmZpZyh7c3RhdGU6dC50YXJnZXR9LCBjb25maWcpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BVE9NOlxuICAgIGNhc2UgVHJhbnNpdGlvbi5SQU5HRTpcbiAgICBjYXNlIFRyYW5zaXRpb24uU0VUOlxuICAgICAgICAvLyBFT0YgdHJhbnNpdGlvbnMgYWN0IGxpa2UgZXBzaWxvbiB0cmFuc2l0aW9ucyBhZnRlciB0aGUgZmlyc3QgRU9GXG4gICAgICAgIC8vIHRyYW5zaXRpb24gaXMgdHJhdmVyc2VkXG4gICAgICAgIGlmICh0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgICAgICAgICAgaWYgKHQubWF0Y2hlcyhUb2tlbi5FT0YsIDAsIDEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOiB0LnRhcmdldH0sIGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgZGVmYXVsdDpcbiAgICBcdHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWN0aW9uVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZywgdCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHQuYWN0aW9uSW5kZXg9PS0xID8gNjU1MzUgOiB0LmFjdGlvbkluZGV4O1xuICAgICAgICBjb25zb2xlLmxvZyhcIkFDVElPTiBlZGdlIFwiICsgdC5ydWxlSW5kZXggKyBcIjpcIiArIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOnQudGFyZ2V0fSwgY29uZmlnKTtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucHJlY2VkZW5jZVRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHB0LCAgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiUFJFRCAoY29sbGVjdFByZWRpY2F0ZXM9XCIgKyBjb2xsZWN0UHJlZGljYXRlcyArIFwiKSBcIiArXG4gICAgICAgICAgICAgICAgcHQucHJlY2VkZW5jZSArIFwiPj1fcCwgY3R4IGRlcGVuZGVudD10cnVlXCIpO1xuICAgICAgICBpZiAodGhpcy5wYXJzZXIhPT1udWxsKSB7XG4gICAgICAgIFx0Y29uc29sZS5sb2coXCJjb250ZXh0IHN1cnJvdW5kaW5nIHByZWQgaXMgXCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMucGFyc2VyLmdldFJ1bGVJbnZvY2F0aW9uU3RhY2soKSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBjID0gbnVsbDtcbiAgICBpZiAoY29sbGVjdFByZWRpY2F0ZXMgJiYgaW5Db250ZXh0KSB7XG4gICAgICAgIGlmIChmdWxsQ3R4KSB7XG4gICAgICAgICAgICAvLyBJbiBmdWxsIGNvbnRleHQgbW9kZSwgd2UgY2FuIGV2YWx1YXRlIHByZWRpY2F0ZXMgb24tdGhlLWZseVxuICAgICAgICAgICAgLy8gZHVyaW5nIGNsb3N1cmUsIHdoaWNoIGRyYW1hdGljYWxseSByZWR1Y2VzIHRoZSBzaXplIG9mXG4gICAgICAgICAgICAvLyB0aGUgY29uZmlnIHNldHMuIEl0IGFsc28gb2J2aWF0ZXMgdGhlIG5lZWQgdG8gdGVzdCBwcmVkaWNhdGVzXG4gICAgICAgICAgICAvLyBsYXRlciBkdXJpbmcgY29uZmxpY3QgcmVzb2x1dGlvbi5cbiAgICAgICAgICAgIHZhciBjdXJyZW50UG9zaXRpb24gPSB0aGlzLl9pbnB1dC5pbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnNlZWsodGhpcy5fc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgcHJlZFN1Y2NlZWRzID0gcHQuZ2V0UHJlZGljYXRlKCkuZXZhbHVhdGUodGhpcy5wYXJzZXIsIHRoaXMuX291dGVyQ29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKGN1cnJlbnRQb3NpdGlvbik7XG4gICAgICAgICAgICBpZiAocHJlZFN1Y2NlZWRzKSB7XG4gICAgICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldH0sIGNvbmZpZyk7IC8vIG5vIHByZWQgY29udGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5ld1NlbUN0eCA9IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KGNvbmZpZy5zZW1hbnRpY0NvbnRleHQsIHB0LmdldFByZWRpY2F0ZSgpKTtcbiAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXQsIHNlbWFudGljQ29udGV4dDpuZXdTZW1DdHh9LCBjb25maWcpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldH0sIGNvbmZpZyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29uZmlnIGZyb20gcHJlZCB0cmFuc2l0aW9uPVwiICsgYyk7XG4gICAgfVxuICAgIHJldHVybiBjO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5wcmVkVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZywgcHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlBSRUQgKGNvbGxlY3RQcmVkaWNhdGVzPVwiICsgY29sbGVjdFByZWRpY2F0ZXMgKyBcIikgXCIgKyBwdC5ydWxlSW5kZXggK1xuICAgICAgICAgICAgICAgIFwiOlwiICsgcHQucHJlZEluZGV4ICsgXCIsIGN0eCBkZXBlbmRlbnQ9XCIgKyBwdC5pc0N0eERlcGVuZGVudCk7XG4gICAgICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29udGV4dCBzdXJyb3VuZGluZyBwcmVkIGlzIFwiICsgVXRpbHMuYXJyYXlUb1N0cmluZyh0aGlzLnBhcnNlci5nZXRSdWxlSW52b2NhdGlvblN0YWNrKCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgYyA9IG51bGw7XG4gICAgaWYgKGNvbGxlY3RQcmVkaWNhdGVzICYmICgocHQuaXNDdHhEZXBlbmRlbnQgJiYgaW5Db250ZXh0KSB8fCAhIHB0LmlzQ3R4RGVwZW5kZW50KSkge1xuICAgICAgICBpZiAoZnVsbEN0eCkge1xuICAgICAgICAgICAgLy8gSW4gZnVsbCBjb250ZXh0IG1vZGUsIHdlIGNhbiBldmFsdWF0ZSBwcmVkaWNhdGVzIG9uLXRoZS1mbHlcbiAgICAgICAgICAgIC8vIGR1cmluZyBjbG9zdXJlLCB3aGljaCBkcmFtYXRpY2FsbHkgcmVkdWNlcyB0aGUgc2l6ZSBvZlxuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZyBzZXRzLiBJdCBhbHNvIG9idmlhdGVzIHRoZSBuZWVkIHRvIHRlc3QgcHJlZGljYXRlc1xuICAgICAgICAgICAgLy8gbGF0ZXIgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24uXG4gICAgICAgICAgICB2YXIgY3VycmVudFBvc2l0aW9uID0gdGhpcy5faW5wdXQuaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKHRoaXMuX3N0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgdmFyIHByZWRTdWNjZWVkcyA9IHB0LmdldFByZWRpY2F0ZSgpLmV2YWx1YXRlKHRoaXMucGFyc2VyLCB0aGlzLl9vdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQuc2VlayhjdXJyZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKHByZWRTdWNjZWVkcykge1xuICAgICAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpOyAvLyBubyBwcmVkIGNvbnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuZXdTZW1DdHggPSBTZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dChjb25maWcuc2VtYW50aWNDb250ZXh0LCBwdC5nZXRQcmVkaWNhdGUoKSk7XG4gICAgICAgICAgICBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cHQudGFyZ2V0LCBzZW1hbnRpY0NvbnRleHQ6bmV3U2VtQ3R4fSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImNvbmZpZyBmcm9tIHByZWQgdHJhbnNpdGlvbj1cIiArIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucnVsZVRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNBTEwgcnVsZSBcIiArIHRoaXMuZ2V0UnVsZU5hbWUodC50YXJnZXQucnVsZUluZGV4KSArIFwiLCBjdHg9XCIgKyBjb25maWcuY29udGV4dCk7XG4gICAgfVxuICAgIHZhciByZXR1cm5TdGF0ZSA9IHQuZm9sbG93U3RhdGU7XG4gICAgdmFyIG5ld0NvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUoY29uZmlnLmNvbnRleHQsIHJldHVyblN0YXRlLnN0YXRlTnVtYmVyKTtcbiAgICByZXR1cm4gbmV3IEFUTkNvbmZpZyh7c3RhdGU6dC50YXJnZXQsIGNvbnRleHQ6bmV3Q29udGV4dH0sIGNvbmZpZyApO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRDb25mbGljdGluZ0FsdHMgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGFsdHNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMoY29uZmlncyk7XG4gICAgcmV0dXJuIFByZWRpY3Rpb25Nb2RlLmdldEFsdHMoYWx0c2V0cyk7XG59O1xuXG4gLy8gU2FtIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aXRoIHRoZSBwcmV2aW91cyBkZWZpbml0aW9uLCB2Mywgb2ZcbiAvLyBhbWJpZ3VvdXMgc3RhdGVzLiBJZiB3ZSBoYXZlIGFub3RoZXIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGNvbmZsaWN0aW5nXG4gLy8gYWx0ZXJuYXRpdmVzLCB3ZSBzaG91bGQga2VlcCBnb2luZy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZ3JhbW1hclxuIC8vXG4gLy8gcyA6IChJRCB8IElEIElEPykgJzsnIDtcbiAvL1xuIC8vIFdoZW4gdGhlIEFUTiBzaW11bGF0aW9uIHJlYWNoZXMgdGhlIHN0YXRlIGJlZm9yZSAnOycsIGl0IGhhcyBhIERGQVxuIC8vIHN0YXRlIHRoYXQgbG9va3MgbGlrZTogWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV0uIE5hdHVyYWxseVxuIC8vIDEyfDF8W10gYW5kIDEyfDJ8W10gY29uZmxpY3QsIGJ1dCB3ZSBjYW5ub3Qgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbm9kZVxuIC8vIGJlY2F1c2UgYWx0ZXJuYXRpdmUgdG8gaGFzIGFub3RoZXIgd2F5IHRvIGNvbnRpbnVlLCB2aWEgWzZ8MnxbXV0uXG4gLy8gVGhlIGtleSBpcyB0aGF0IHdlIGhhdmUgYSBzaW5nbGUgc3RhdGUgdGhhdCBoYXMgY29uZmlnJ3Mgb25seSBhc3NvY2lhdGVkXG4gLy8gd2l0aCBhIHNpbmdsZSBhbHRlcm5hdGl2ZSwgMiwgYW5kIGNydWNpYWxseSB0aGUgc3RhdGUgdHJhbnNpdGlvbnNcbiAvLyBhbW9uZyB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGFsbCBub24tZXBzaWxvbiB0cmFuc2l0aW9ucy4gVGhhdCBtZWFuc1xuIC8vIHdlIGRvbid0IGNvbnNpZGVyIGFueSBjb25mbGljdHMgdGhhdCBpbmNsdWRlIGFsdGVybmF0aXZlIDIuIFNvLCB3ZVxuIC8vIGlnbm9yZSB0aGUgY29uZmxpY3QgYmV0d2VlbiBhbHRzIDEgYW5kIDIuIFdlIGlnbm9yZSBhIHNldCBvZlxuIC8vIGNvbmZsaWN0aW5nIGFsdHMgd2hlbiB0aGVyZSBpcyBhbiBpbnRlcnNlY3Rpb24gd2l0aCBhbiBhbHRlcm5hdGl2ZVxuIC8vIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBhbHQgc3RhdGUgaW4gdGhlIHN0YXRlJnJhcnI7Y29uZmlnLWxpc3QgbWFwLlxuIC8vXG4gLy8gSXQncyBhbHNvIHRoZSBjYXNlIHRoYXQgd2UgbWlnaHQgaGF2ZSB0d28gY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMgYnV0XG4gLy8gYWxzbyBhIDNyZCBub25jb25mbGljdGluZyBjb25maWd1cmF0aW9uIGZvciBhIGRpZmZlcmVudCBhbHRlcm5hdGl2ZTpcbiAvLyBbMXwxfFtdLCAxfDJ8W10sIDh8M3xbXV0uIFRoaXMgY2FuIGNvbWUgYWJvdXQgZnJvbSBncmFtbWFyOlxuIC8vXG4gLy8gYSA6IEEgfCBBIHwgQSBCIDtcbiAvL1xuIC8vIEFmdGVyIG1hdGNoaW5nIGlucHV0IEEsIHdlIHJlYWNoIHRoZSBzdG9wIHN0YXRlIGZvciBydWxlIEEsIHN0YXRlIDEuXG4gLy8gU3RhdGUgOCBpcyB0aGUgc3RhdGUgcmlnaHQgYmVmb3JlIEIuIENsZWFybHkgYWx0ZXJuYXRpdmVzIDEgYW5kIDJcbiAvLyBjb25mbGljdCBhbmQgbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgc2VwYXJhdGUgdGhlIHR3by5cbiAvLyBIb3dldmVyLCBhbHRlcm5hdGl2ZSAzIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSBhbmQgc28gd2UgZG8gbm90XG4gLy8gc3RvcCB3b3JraW5nIG9uIHRoaXMgc3RhdGUuIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB3ZSdyZSBjb25jZXJuZWRcbiAvLyB3aXRoIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlcy4gSGVyZSBhbHRcbiAvLyAzIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGNvbmZpZ3MsIGJ1dCBzaW5jZSB3ZSBjYW4gY29udGludWVcbiAvLyBsb29raW5nIGZvciBpbnB1dCByZWFzb25hYmx5LCBJIGRvbid0IGRlY2xhcmUgdGhlIHN0YXRlIGRvbmUuIFdlXG4gLy8gaWdub3JlIGEgc2V0IG9mIGNvbmZsaWN0aW5nIGFsdHMgd2hlbiB3ZSBoYXZlIGFuIGFsdGVybmF0aXZlXG4gLy8gdGhhdCB3ZSBzdGlsbCBuZWVkIHRvIHB1cnN1ZS5cbi8vXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzT3JVbmlxdWVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGNvbmZsaWN0aW5nQWx0cyA9IG51bGw7XG4gICAgaWYgKGNvbmZpZ3MudW5pcXVlQWx0IT09IEFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgY29uZmxpY3RpbmdBbHRzID0gbmV3IEJpdFNldCgpO1xuICAgICAgICBjb25mbGljdGluZ0FsdHMuYWRkKGNvbmZpZ3MudW5pcXVlQWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25mbGljdGluZ0FsdHMgPSBjb25maWdzLmNvbmZsaWN0aW5nQWx0cztcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZsaWN0aW5nQWx0cztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0VG9rZW5OYW1lID0gZnVuY3Rpb24oIHQpIHtcbiAgICBpZiAodD09PVRva2VuLkVPRikge1xuICAgICAgICByZXR1cm4gXCJFT0ZcIjtcbiAgICB9XG4gICAgaWYoIHRoaXMucGFyc2VyIT09bnVsbCAmJiB0aGlzLnBhcnNlci5saXRlcmFsTmFtZXMhPT1udWxsKSB7XG4gICAgICAgIGlmICh0ID49IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcy5sZW5ndGggJiYgdCA+PSB0aGlzLnBhcnNlci5zeW1ib2xpY05hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJcIiArIHQgKyBcIiB0dHlwZSBvdXQgb2YgcmFuZ2U6IFwiICsgdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiXCIgKyB0aGlzLnBhcnNlci5nZXRJbnB1dFN0cmVhbSgpLmdldFRva2VucygpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzW3RdIHx8IHRoaXMucGFyc2VyLnN5bWJvbGljTmFtZXNbdF07XG4gICAgICAgICAgICByZXR1cm4gbmFtZSArIFwiPFwiICsgdCArIFwiPlwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiICsgdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0TG9va2FoZWFkTmFtZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5OYW1lKGlucHV0LkxBKDEpKTtcbn07XG5cbi8vIFVzZWQgZm9yIGRlYnVnZ2luZyBpbiBhZGFwdGl2ZVByZWRpY3QgYXJvdW5kIGV4ZWNBVE4gYnV0IEkgY3V0XG4vLyAgaXQgb3V0IGZvciBjbGFyaXR5IG5vdyB0aGF0IGFsZy4gd29ya3Mgd2VsbC4gV2UgY2FuIGxlYXZlIHRoaXNcbi8vICBcImRlYWRcIiBjb2RlIGZvciBhIGJpdC5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmR1bXBEZWFkRW5kQ29uZmlncyA9IGZ1bmN0aW9uKG52YWUpIHtcbiAgICBjb25zb2xlLmxvZyhcImRlYWQgZW5kIGNvbmZpZ3M6IFwiKTtcbiAgICB2YXIgZGVjcyA9IG52YWUuZ2V0RGVhZEVuZENvbmZpZ3MoKTtcbiAgICBmb3IodmFyIGk9MDsgaTxkZWNzLmxlbmd0aDsgaSsrKSB7XG4gICAgXHR2YXIgYyA9IGRlY3NbaV07XG4gICAgICAgIHZhciB0cmFucyA9IFwibm8gZWRnZXNcIjtcbiAgICAgICAgaWYgKGMuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoPjApIHtcbiAgICAgICAgICAgIHZhciB0ID0gYy5zdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgQXRvbVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0cmFucyA9IFwiQXRvbSBcIisgdGhpcy5nZXRUb2tlbk5hbWUodC5sYWJlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHQgaW5zdGFuY2VvZiBTZXRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5lZyA9ICh0IGluc3RhbmNlb2YgTm90U2V0VHJhbnNpdGlvbik7XG4gICAgICAgICAgICAgICAgdHJhbnMgPSAobmVnID8gXCJ+XCIgOiBcIlwiKSArIFwiU2V0IFwiICsgdC5zZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihjLnRvU3RyaW5nKHRoaXMucGFyc2VyLCB0cnVlKSArIFwiOlwiICsgdHJhbnMpO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUubm9WaWFibGVBbHQgPSBmdW5jdGlvbihpbnB1dCwgb3V0ZXJDb250ZXh0LCBjb25maWdzLCBzdGFydEluZGV4KSB7XG4gICAgcmV0dXJuIG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzLnBhcnNlciwgaW5wdXQsIGlucHV0LmdldChzdGFydEluZGV4KSwgaW5wdXQuTFQoMSksIGNvbmZpZ3MsIG91dGVyQ29udGV4dCk7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFVuaXF1ZUFsdCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgYWx0ID0gQVROLklOVkFMSURfQUxUX05VTUJFUjtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgIFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYWx0ID09PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBhbHQgPSBjLmFsdCAvLyBmb3VuZCBmaXJzdCBhbHRcbiAgICAgICAgfSBlbHNlIGlmKCBjLmFsdCE9PWFsdCkge1xuICAgICAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsdDtcbn07XG5cbi8vXG4vLyBBZGQgYW4gZWRnZSB0byB0aGUgREZBLCBpZiBwb3NzaWJsZS4gVGhpcyBtZXRob2QgY2FsbHNcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSB0byBlbnN1cmUgdGhlIHtAY29kZSB0b30gc3RhdGUgaXMgcHJlc2VudCBpbiB0aGVcbi8vIERGQS4gSWYge0Bjb2RlIGZyb219IGlzIHtAY29kZSBudWxsfSwgb3IgaWYge0Bjb2RlIHR9IGlzIG91dHNpZGUgdGhlXG4vLyByYW5nZSBvZiBlZGdlcyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUgREZBIHRhYmxlcywgdGhpcyBtZXRob2Rcbi8vIHJldHVybnMgd2l0aG91dCBhZGRpbmcgdGhlIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgdG99IGlzIHtAY29kZSBudWxsfSwgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vLyBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHtAbGluayBERkFTdGF0ZX0gcmV0dXJuZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIC8vYWRkREZBU3RhdGV9IGZvciB0aGUge0Bjb2RlIHRvfSBzdGF0ZS48L3A+XG4vL1xuLy8gQHBhcmFtIGRmYSBUaGUgREZBXG4vLyBAcGFyYW0gZnJvbSBUaGUgc291cmNlIHN0YXRlIGZvciB0aGUgZWRnZVxuLy8gQHBhcmFtIHQgVGhlIGlucHV0IHN5bWJvbFxuLy8gQHBhcmFtIHRvIFRoZSB0YXJnZXQgc3RhdGUgZm9yIHRoZSBlZGdlXG4vL1xuLy8gQHJldHVybiBJZiB7QGNvZGUgdG99IGlzIHtAY29kZSBudWxsfSwgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH07XG4vLyBvdGhlcndpc2UgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vYWRkREZBU3RhdGV9XG4vLyBvbiB7QGNvZGUgdG99XG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hZGRERkFFZGdlID0gZnVuY3Rpb24oZGZhLCBmcm9tXywgdCwgdG8pIHtcbiAgICBpZiggdGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkVER0UgXCIgKyBmcm9tXyArIFwiIC0+IFwiICsgdG8gKyBcIiB1cG9uIFwiICsgdGhpcy5nZXRUb2tlbk5hbWUodCkpO1xuICAgIH1cbiAgICBpZiAodG89PT1udWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0byA9IHRoaXMuYWRkREZBU3RhdGUoZGZhLCB0byk7IC8vIHVzZWQgZXhpc3RpbmcgaWYgcG9zc2libGUgbm90IGluY29taW5nXG4gICAgaWYgKGZyb21fPT09bnVsbCB8fCB0IDwgLTEgfHwgdCA+IHRoaXMuYXRuLm1heFRva2VuVHlwZSkge1xuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuICAgIGlmIChmcm9tXy5lZGdlcz09PW51bGwpIHtcbiAgICAgICAgZnJvbV8uZWRnZXMgPSBbXTtcbiAgICB9XG4gICAgZnJvbV8uZWRnZXNbdCsxXSA9IHRvOyAvLyBjb25uZWN0XG5cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICB2YXIgbGl0ZXJhbE5hbWVzID0gdGhpcy5wYXJzZXI9PT1udWxsID8gbnVsbCA6IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcztcbiAgICAgICAgdmFyIHN5bWJvbGljTmFtZXMgPSB0aGlzLnBhcnNlcj09PW51bGwgPyBudWxsIDogdGhpcy5wYXJzZXIuc3ltYm9saWNOYW1lcztcbiAgICAgICAgY29uc29sZS5sb2coXCJERkE9XFxuXCIgKyBkZmEudG9TdHJpbmcobGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSk7XG4gICAgfVxuICAgIHJldHVybiB0bztcbn07XG4vL1xuLy8gQWRkIHN0YXRlIHtAY29kZSBEfSB0byB0aGUgREZBIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQsIGFuZCByZXR1cm5cbi8vIHRoZSBhY3R1YWwgaW5zdGFuY2Ugc3RvcmVkIGluIHRoZSBERkEuIElmIGEgc3RhdGUgZXF1aXZhbGVudCB0byB7QGNvZGUgRH1cbi8vIGlzIGFscmVhZHkgaW4gdGhlIERGQSwgdGhlIGV4aXN0aW5nIHN0YXRlIGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhpc1xuLy8gbWV0aG9kIHJldHVybnMge0Bjb2RlIER9IGFmdGVyIGFkZGluZyBpdCB0byB0aGUgREZBLlxuLy9cbi8vIDxwPklmIHtAY29kZSBEfSBpcyB7QGxpbmsgLy9FUlJPUn0sIHRoaXMgbWV0aG9kIHJldHVybnMge0BsaW5rIC8vRVJST1J9IGFuZFxuLy8gZG9lcyBub3QgY2hhbmdlIHRoZSBERkEuPC9wPlxuLy9cbi8vIEBwYXJhbSBkZmEgVGhlIGRmYVxuLy8gQHBhcmFtIEQgVGhlIERGQSBzdGF0ZSB0byBhZGRcbi8vIEByZXR1cm4gVGhlIHN0YXRlIHN0b3JlZCBpbiB0aGUgREZBLiBUaGlzIHdpbGwgYmUgZWl0aGVyIHRoZSBleGlzdGluZ1xuLy8gc3RhdGUgaWYge0Bjb2RlIER9IGlzIGFscmVhZHkgaW4gdGhlIERGQSwgb3Ige0Bjb2RlIER9IGl0c2VsZiBpZiB0aGVcbi8vIHN0YXRlIHdhcyBub3QgYWxyZWFkeSBwcmVzZW50LlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBU3RhdGUgPSBmdW5jdGlvbihkZmEsIEQpIHtcbiAgICBpZiAoRCA9PSBBVE5TaW11bGF0b3IuRVJST1IpIHtcbiAgICAgICAgcmV0dXJuIEQ7XG4gICAgfVxuICAgIHZhciBleGlzdGluZyA9IGRmYS5zdGF0ZXMuZ2V0KEQpO1xuICAgIGlmKGV4aXN0aW5nIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIEQuc3RhdGVOdW1iZXIgPSBkZmEuc3RhdGVzLmxlbmd0aDtcbiAgICBpZiAoISBELmNvbmZpZ3MucmVhZE9ubHkpIHtcbiAgICAgICAgRC5jb25maWdzLm9wdGltaXplQ29uZmlncyh0aGlzKTtcbiAgICAgICAgRC5jb25maWdzLnNldFJlYWRvbmx5KHRydWUpO1xuICAgIH1cbiAgICBkZmEuc3RhdGVzLmFkZChEKTtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImFkZGluZyBuZXcgREZBIHN0YXRlOiBcIiArIEQpO1xuICAgIH1cbiAgICByZXR1cm4gRDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24oZGZhLCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMucmV0cnlfZGVidWcpIHtcbiAgICAgICAgdmFyIGludGVydmFsID0gbmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCArIDEpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCBkZWNpc2lvbj1cIiArIGRmYS5kZWNpc2lvbiArIFwiOlwiICsgY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgaW5wdXQ9XCIgKyB0aGlzLnBhcnNlci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQoaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlci5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQodGhpcy5wYXJzZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5ID0gZnVuY3Rpb24oZGZhLCBwcmVkaWN0aW9uLCBjb25maWdzLCBzdGFydEluZGV4LCBzdG9wSW5kZXgpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLnJldHJ5X2RlYnVnKSB7XG4gICAgICAgIHZhciBpbnRlcnZhbCA9IG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXggKyAxKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgZGVjaXNpb249XCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIiArIGNvbmZpZ3MgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIGlucHV0PVwiICsgdGhpcy5wYXJzZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KGludGVydmFsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJzZXIuZ2V0RXJyb3JMaXN0ZW5lckRpc3BhdGNoKCkucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KHRoaXMucGFyc2VyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncyk7XG4gICAgfVxufTtcblxuLy8gSWYgY29udGV4dCBzZW5zaXRpdmUgcGFyc2luZywgd2Uga25vdyBpdCdzIGFtYmlndWl0eSBub3QgY29uZmxpY3QvL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihkZmEsIEQsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzICkge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMucmV0cnlfZGVidWcpIHtcbiAgICAgICAgdmFyIGludGVydmFsID0gbmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCArIDEpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlcG9ydEFtYmlndWl0eSBcIiArIGFtYmlnQWx0cyArIFwiOlwiICsgY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgaW5wdXQ9XCIgKyB0aGlzLnBhcnNlci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQoaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlci5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKS5yZXBvcnRBbWJpZ3VpdHkodGhpcy5wYXJzZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKTtcbiAgICB9XG59O1xuXG5leHBvcnRzLlBhcnNlckFUTlNpbXVsYXRvciA9IFBhcnNlckFUTlNpbXVsYXRvcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cbi8vXG4vLyBUaGlzIGVudW1lcmF0aW9uIGRlZmluZXMgdGhlIHByZWRpY3Rpb24gbW9kZXMgYXZhaWxhYmxlIGluIEFOVExSIDQgYWxvbmcgd2l0aFxuLy8gdXRpbGl0eSBtZXRob2RzIGZvciBhbmFseXppbmcgY29uZmlndXJhdGlvbiBzZXRzIGZvciBjb25mbGljdHMgYW5kL29yXG4vLyBhbWJpZ3VpdGllcy5cblxudmFyIFNldCA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5TZXQ7XG52YXIgTWFwID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLk1hcDtcbnZhciBCaXRTZXQgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuQml0U2V0O1xudmFyIEFsdERpY3QgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuQWx0RGljdDtcbnZhciBBVE4gPSByZXF1aXJlKCcuL0FUTicpLkFUTjtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5BVE5Db25maWdTZXQ7XG52YXIgQVROQ29uZmlnID0gcmVxdWlyZSgnLi9BVE5Db25maWcnKS5BVE5Db25maWc7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgSGFzaCA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5IYXNoO1xudmFyIGhhc2hTdHVmZiA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5oYXNoU3R1ZmY7XG52YXIgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuZXF1YWxBcnJheXM7XG5cbmZ1bmN0aW9uIFByZWRpY3Rpb25Nb2RlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLy9cbi8vIFRoZSBTTEwoKikgcHJlZGljdGlvbiBtb2RlLiBUaGlzIHByZWRpY3Rpb24gbW9kZSBpZ25vcmVzIHRoZSBjdXJyZW50XG4vLyBwYXJzZXIgY29udGV4dCB3aGVuIG1ha2luZyBwcmVkaWN0aW9ucy4gVGhpcyBpcyB0aGUgZmFzdGVzdCBwcmVkaWN0aW9uXG4vLyBtb2RlLCBhbmQgcHJvdmlkZXMgY29ycmVjdCByZXN1bHRzIGZvciBtYW55IGdyYW1tYXJzLiBUaGlzIHByZWRpY3Rpb25cbi8vIG1vZGUgaXMgbW9yZSBwb3dlcmZ1bCB0aGFuIHRoZSBwcmVkaWN0aW9uIG1vZGUgcHJvdmlkZWQgYnkgQU5UTFIgMywgYnV0XG4vLyBtYXkgcmVzdWx0IGluIHN5bnRheCBlcnJvcnMgZm9yIGdyYW1tYXIgYW5kIGlucHV0IGNvbWJpbmF0aW9ucyB3aGljaCBhcmVcbi8vIG5vdCBTTEwuXG4vL1xuLy8gPHA+XG4vLyBXaGVuIHVzaW5nIHRoaXMgcHJlZGljdGlvbiBtb2RlLCB0aGUgcGFyc2VyIHdpbGwgZWl0aGVyIHJldHVybiBhIGNvcnJlY3Rcbi8vIHBhcnNlIHRyZWUgKGkuZS4gdGhlIHNhbWUgcGFyc2UgdHJlZSB0aGF0IHdvdWxkIGJlIHJldHVybmVkIHdpdGggdGhlXG4vLyB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBtb2RlKSwgb3IgaXQgd2lsbCByZXBvcnQgYSBzeW50YXggZXJyb3IuIElmIGFcbi8vIHN5bnRheCBlcnJvciBpcyBlbmNvdW50ZXJlZCB3aGVuIHVzaW5nIHRoZSB7QGxpbmsgLy9TTEx9IHByZWRpY3Rpb24gbW9kZSxcbi8vIGl0IG1heSBiZSBkdWUgdG8gZWl0aGVyIGFuIGFjdHVhbCBzeW50YXggZXJyb3IgaW4gdGhlIGlucHV0IG9yIGluZGljYXRlXG4vLyB0aGF0IHRoZSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIGdyYW1tYXIgYW5kIGlucHV0IHJlcXVpcmVzIHRoZSBtb3JlXG4vLyBwb3dlcmZ1bCB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBhYmlsaXRpZXMgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLlNMTCA9IDA7XG4vL1xuLy8gVGhlIExMKCopIHByZWRpY3Rpb24gbW9kZS4gVGhpcyBwcmVkaWN0aW9uIG1vZGUgYWxsb3dzIHRoZSBjdXJyZW50IHBhcnNlclxuLy8gY29udGV4dCB0byBiZSB1c2VkIGZvciByZXNvbHZpbmcgU0xMIGNvbmZsaWN0cyB0aGF0IG9jY3VyIGR1cmluZ1xuLy8gcHJlZGljdGlvbi4gVGhpcyBpcyB0aGUgZmFzdGVzdCBwcmVkaWN0aW9uIG1vZGUgdGhhdCBndWFyYW50ZWVzIGNvcnJlY3Rcbi8vIHBhcnNlIHJlc3VsdHMgZm9yIGFsbCBjb21iaW5hdGlvbnMgb2YgZ3JhbW1hcnMgd2l0aCBzeW50YWN0aWNhbGx5IGNvcnJlY3Rcbi8vIGlucHV0cy5cbi8vXG4vLyA8cD5cbi8vIFdoZW4gdXNpbmcgdGhpcyBwcmVkaWN0aW9uIG1vZGUsIHRoZSBwYXJzZXIgd2lsbCBtYWtlIGNvcnJlY3QgZGVjaXNpb25zXG4vLyBmb3IgYWxsIHN5bnRhY3RpY2FsbHktY29ycmVjdCBncmFtbWFyIGFuZCBpbnB1dCBjb21iaW5hdGlvbnMuIEhvd2V2ZXIsIGluXG4vLyBjYXNlcyB3aGVyZSB0aGUgZ3JhbW1hciBpcyB0cnVseSBhbWJpZ3VvdXMgdGhpcyBwcmVkaWN0aW9uIG1vZGUgbWlnaHQgbm90XG4vLyByZXBvcnQgYSBwcmVjaXNlIGFuc3dlciBmb3IgPGVtPmV4YWN0bHkgd2hpY2g8L2VtPiBhbHRlcm5hdGl2ZXMgYXJlXG4vLyBhbWJpZ3VvdXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBwcmVkaWN0aW9uIG1vZGUgZG9lcyBub3QgcHJvdmlkZSBhbnkgZ3VhcmFudGVlcyBmb3IgcHJlZGljdGlvblxuLy8gYmVoYXZpb3IgZm9yIHN5bnRhY3RpY2FsbHktaW5jb3JyZWN0IGlucHV0cy48L3A+XG4vL1xuUHJlZGljdGlvbk1vZGUuTEwgPSAxO1xuLy9cbi8vIFRoZSBMTCgqKSBwcmVkaWN0aW9uIG1vZGUgd2l0aCBleGFjdCBhbWJpZ3VpdHkgZGV0ZWN0aW9uLiBJbiBhZGRpdGlvbiB0b1xuLy8gdGhlIGNvcnJlY3RuZXNzIGd1YXJhbnRlZXMgcHJvdmlkZWQgYnkgdGhlIHtAbGluayAvL0xMfSBwcmVkaWN0aW9uIG1vZGUsXG4vLyB0aGlzIHByZWRpY3Rpb24gbW9kZSBpbnN0cnVjdHMgdGhlIHByZWRpY3Rpb24gYWxnb3JpdGhtIHRvIGRldGVybWluZSB0aGVcbi8vIGNvbXBsZXRlIGFuZCBleGFjdCBzZXQgb2YgYW1iaWd1b3VzIGFsdGVybmF0aXZlcyBmb3IgZXZlcnkgYW1iaWd1b3VzXG4vLyBkZWNpc2lvbiBlbmNvdW50ZXJlZCB3aGlsZSBwYXJzaW5nLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBwcmVkaWN0aW9uIG1vZGUgbWF5IGJlIHVzZWQgZm9yIGRpYWdub3NpbmcgYW1iaWd1aXRpZXMgZHVyaW5nXG4vLyBncmFtbWFyIGRldmVsb3BtZW50LiBEdWUgdG8gdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIG9mIGNhbGN1bGF0aW5nIHNldHNcbi8vIG9mIGFtYmlndW91cyBhbHRlcm5hdGl2ZXMsIHRoaXMgcHJlZGljdGlvbiBtb2RlIHNob3VsZCBiZSBhdm9pZGVkIHdoZW5cbi8vIHRoZSBleGFjdCByZXN1bHRzIGFyZSBub3QgbmVjZXNzYXJ5LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLkxMX0VYQUNUX0FNQklHX0RFVEVDVElPTiA9IDI7XG5cblxuLy9cbi8vIENvbXB1dGVzIHRoZSBTTEwgcHJlZGljdGlvbiB0ZXJtaW5hdGlvbiBjb25kaXRpb24uXG4vL1xuLy8gPHA+XG4vLyBUaGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgU0xMIHByZWRpY3Rpb24gdGVybWluYXRpb24gY29uZGl0aW9uIGZvciBib3RoIG9mXG4vLyB0aGUgZm9sbG93aW5nIGNhc2VzLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+VGhlIHVzdWFsIFNMTCtMTCBmYWxsYmFjayB1cG9uIFNMTCBjb25mbGljdDwvbGk+XG4vLyA8bGk+UHVyZSBTTEwgd2l0aG91dCBMTCBmYWxsYmFjazwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIDxwPjxzdHJvbmc+Q09NQklORUQgU0xMK0xMIFBBUlNJTkc8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+V2hlbiBMTC1mYWxsYmFjayBpcyBlbmFibGVkIHVwb24gU0xMIGNvbmZsaWN0LCBjb3JyZWN0IHByZWRpY3Rpb25zIGFyZVxuLy8gZW5zdXJlZCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uIGlzIGNvbXB1dGVkIGJ5IHRoaXNcbi8vIG1ldGhvZC4gRHVlIHRvIHRoZSBzdWJzdGFudGlhbGx5IGhpZ2hlciBjb3N0IG9mIExMIHByZWRpY3Rpb24sIHRoZVxuLy8gcHJlZGljdGlvbiBzaG91bGQgb25seSBmYWxsIGJhY2sgdG8gTEwgd2hlbiB0aGUgYWRkaXRpb25hbCBsb29rYWhlYWRcbi8vIGNhbm5vdCBsZWFkIHRvIGEgdW5pcXVlIFNMTCBwcmVkaWN0aW9uLjwvcD5cbi8vXG4vLyA8cD5Bc3N1bWluZyBjb21iaW5lZCBTTEwrTEwgcGFyc2luZywgYW4gU0xMIGNvbmZpZ3VyYXRpb24gc2V0IHdpdGggb25seVxuLy8gY29uZmxpY3Rpbmcgc3Vic2V0cyBzaG91bGQgZmFsbCBiYWNrIHRvIGZ1bGwgTEwsIGV2ZW4gaWYgdGhlXG4vLyBjb25maWd1cmF0aW9uIHNldHMgZG9uJ3QgcmVzb2x2ZSB0byB0aGUgc2FtZSBhbHRlcm5hdGl2ZSAoZS5nLlxuLy8ge0Bjb2RlIHsxLDJ9fSBhbmQge0Bjb2RlIHszLDR9fS4gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG5vbi1jb25mbGljdGluZ1xuLy8gY29uZmlndXJhdGlvbiwgU0xMIGNvdWxkIGNvbnRpbnVlIHdpdGggdGhlIGhvcGVzIHRoYXQgbW9yZSBsb29rYWhlYWQgd2lsbFxuLy8gcmVzb2x2ZSB2aWEgb25lIG9mIHRob3NlIG5vbi1jb25mbGljdGluZyBjb25maWd1cmF0aW9ucy48L3A+XG4vL1xuLy8gPHA+SGVyZSdzIHRoZSBwcmVkaWN0aW9uIHRlcm1pbmF0aW9uIHJ1bGUgdGhlbTogU0xMIChmb3IgU0xMK0xMIHBhcnNpbmcpXG4vLyBzdG9wcyB3aGVuIGl0IHNlZXMgb25seSBjb25mbGljdGluZyBjb25maWd1cmF0aW9uIHN1YnNldHMuIEluIGNvbnRyYXN0LFxuLy8gZnVsbCBMTCBrZWVwcyBnb2luZyB3aGVuIHRoZXJlIGlzIHVuY2VydGFpbnR5LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkhFVVJJU1RJQzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5BcyBhIGhldXJpc3RpYywgd2Ugc3RvcCBwcmVkaWN0aW9uIHdoZW4gd2Ugc2VlIGFueSBjb25mbGljdGluZyBzdWJzZXRcbi8vIHVubGVzcyB3ZSBzZWUgYSBzdGF0ZSB0aGF0IG9ubHkgaGFzIG9uZSBhbHRlcm5hdGl2ZSBhc3NvY2lhdGVkIHdpdGggaXQuXG4vLyBUaGUgc2luZ2xlLWFsdC1zdGF0ZSB0aGluZyBsZXRzIHByZWRpY3Rpb24gY29udGludWUgdXBvbiBydWxlcyBsaWtlXG4vLyAob3RoZXJ3aXNlLCBpdCB3b3VsZCBhZG1pdCBkZWZlYXQgdG9vIHNvb24pOjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV0uIHMgOiAoSUQgfCBJRCBJRD8pICc7JyA7fTwvcD5cbi8vXG4vLyA8cD5XaGVuIHRoZSBBVE4gc2ltdWxhdGlvbiByZWFjaGVzIHRoZSBzdGF0ZSBiZWZvcmUge0Bjb2RlICc7J30sIGl0IGhhcyBhXG4vLyBERkEgc3RhdGUgdGhhdCBsb29rcyBsaWtlOiB7QGNvZGUgWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV19LiBOYXR1cmFsbHlcbi8vIHtAY29kZSAxMnwxfFtdfSBhbmQge0Bjb2RlIDEyfDJ8W119IGNvbmZsaWN0LCBidXQgd2UgY2Fubm90IHN0b3Bcbi8vIHByb2Nlc3NpbmcgdGhpcyBub2RlIGJlY2F1c2UgYWx0ZXJuYXRpdmUgdG8gaGFzIGFub3RoZXIgd2F5IHRvIGNvbnRpbnVlLFxuLy8gdmlhIHtAY29kZSBbNnwyfFtdXX0uPC9wPlxuLy9cbi8vIDxwPkl0IGFsc28gbGV0J3MgdXMgY29udGludWUgZm9yIHRoaXMgcnVsZTo8L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIFsxfDF8W10sIDF8MnxbXSwgOHwzfFtdXSBhIDogQSB8IEEgfCBBIEIgO308L3A+XG4vL1xuLy8gPHA+QWZ0ZXIgbWF0Y2hpbmcgaW5wdXQgQSwgd2UgcmVhY2ggdGhlIHN0b3Agc3RhdGUgZm9yIHJ1bGUgQSwgc3RhdGUgMS5cbi8vIFN0YXRlIDggaXMgdGhlIHN0YXRlIHJpZ2h0IGJlZm9yZSBCLiBDbGVhcmx5IGFsdGVybmF0aXZlcyAxIGFuZCAyXG4vLyBjb25mbGljdCBhbmQgbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgc2VwYXJhdGUgdGhlIHR3by5cbi8vIEhvd2V2ZXIsIGFsdGVybmF0aXZlIDMgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIGFuZCBzbyB3ZSBkbyBub3Qgc3RvcFxuLy8gd29ya2luZyBvbiB0aGlzIHN0YXRlLiBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2UncmUgY29uY2VybmVkIHdpdGhcbi8vIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlcy4gSGVyZSBhbHQgMyBpcyBub3Rcbi8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29uZmxpY3RpbmcgY29uZmlncywgYnV0IHNpbmNlIHdlIGNhbiBjb250aW51ZVxuLy8gbG9va2luZyBmb3IgaW5wdXQgcmVhc29uYWJseSwgZG9uJ3QgZGVjbGFyZSB0aGUgc3RhdGUgZG9uZS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5QVVJFIFNMTCBQQVJTSU5HPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlRvIGhhbmRsZSBwdXJlIFNMTCBwYXJzaW5nLCBhbGwgd2UgaGF2ZSB0byBkbyBpcyBtYWtlIHN1cmUgdGhhdCB3ZVxuLy8gY29tYmluZSBzdGFjayBjb250ZXh0cyBmb3IgY29uZmlndXJhdGlvbnMgdGhhdCBkaWZmZXIgb25seSBieSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlLiBGcm9tIHRoZXJlLCB3ZSBjYW4gZG8gdGhlIHVzdWFsIFNMTCB0ZXJtaW5hdGlvbiBoZXVyaXN0aWMuPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+UFJFRElDQVRFUyBJTiBTTEwrTEwgUEFSU0lORzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5TTEwgZGVjaXNpb25zIGRvbid0IGV2YWx1YXRlIHByZWRpY2F0ZXMgdW50aWwgYWZ0ZXIgdGhleSByZWFjaCBERkEgc3RvcFxuLy8gc3RhdGVzIGJlY2F1c2UgdGhleSBuZWVkIHRvIGNyZWF0ZSB0aGUgREZBIGNhY2hlIHRoYXQgd29ya3MgaW4gYWxsXG4vLyBzZW1hbnRpYyBzaXR1YXRpb25zLiBJbiBjb250cmFzdCwgZnVsbCBMTCBldmFsdWF0ZXMgcHJlZGljYXRlcyBjb2xsZWN0ZWRcbi8vIGR1cmluZyBzdGFydCBzdGF0ZSBjb21wdXRhdGlvbiBzbyBpdCBjYW4gaWdub3JlIHByZWRpY2F0ZXMgdGhlcmVhZnRlci5cbi8vIFRoaXMgbWVhbnMgdGhhdCBTTEwgdGVybWluYXRpb24gZGV0ZWN0aW9uIGNhbiB0b3RhbGx5IGlnbm9yZSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlcy48L3A+XG4vL1xuLy8gPHA+SW1wbGVtZW50YXRpb24td2lzZSwge0BsaW5rIEFUTkNvbmZpZ1NldH0gY29tYmluZXMgc3RhY2sgY29udGV4dHMgYnV0IG5vdFxuLy8gc2VtYW50aWMgcHJlZGljYXRlIGNvbnRleHRzIHNvIHdlIG1pZ2h0IHNlZSB0d28gY29uZmlndXJhdGlvbnMgbGlrZSB0aGVcbi8vIGZvbGxvd2luZy48L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIChzLCAxLCB4LCB7fSksIChzLCAxLCB4Jywge3B9KX08L3A+XG4vL1xuLy8gPHA+QmVmb3JlIHRlc3RpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgYWdhaW5zdCBvdGhlcnMsIHdlIGhhdmUgdG8gbWVyZ2Vcbi8vIHtAY29kZSB4fSBhbmQge0Bjb2RlIHgnfSAod2l0aG91dCBtb2RpZnlpbmcgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zKS5cbi8vIEZvciBleGFtcGxlLCB3ZSB0ZXN0IHtAY29kZSAoeCt4Jyk9PXgnJ30gd2hlbiBsb29raW5nIGZvciBjb25mbGljdHMgaW5cbi8vIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMuPC9wPlxuLy9cbi8vIDxwPntAY29kZSAocywgMSwgeCwge30pLCAocywgMSwgeCcsIHtwfSksIChzLCAyLCB4JycsIHt9KX08L3A+XG4vL1xuLy8gPHA+SWYgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IGhhcyBwcmVkaWNhdGVzIChhcyBpbmRpY2F0ZWQgYnlcbi8vIHtAbGluayBBVE5Db25maWdTZXQvL2hhc1NlbWFudGljQ29udGV4dH0pLCB0aGlzIGFsZ29yaXRobSBtYWtlcyBhIGNvcHkgb2Zcbi8vIHRoZSBjb25maWd1cmF0aW9ucyB0byBzdHJpcCBvdXQgYWxsIG9mIHRoZSBwcmVkaWNhdGVzIHNvIHRoYXQgYSBzdGFuZGFyZFxuLy8ge0BsaW5rIEFUTkNvbmZpZ1NldH0gd2lsbCBtZXJnZSBldmVyeXRoaW5nIGlnbm9yaW5nIHByZWRpY2F0ZXMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLmhhc1NMTENvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uID0gZnVuY3Rpb24oIG1vZGUsIGNvbmZpZ3MpIHtcbiAgICAvLyBDb25maWdzIGluIHJ1bGUgc3RvcCBzdGF0ZXMgaW5kaWNhdGUgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb25cbiAgICAvLyBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2Ygc3RhcnQgcnVsZSAoZnVsbCBjb250ZXh0KS4gSWYgYWxsXG4gICAgLy8gY29uZmlncyBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGVuIG5vbmUgb2YgdGhlIGNvbmZpZ3VyYXRpb25zIGlzIGFibGVcbiAgICAvLyB0byBtYXRjaCBhZGRpdGlvbmFsIGlucHV0IHNvIHdlIHRlcm1pbmF0ZSBwcmVkaWN0aW9uLlxuICAgIC8vXG4gICAgaWYgKFByZWRpY3Rpb25Nb2RlLmFsbENvbmZpZ3NJblJ1bGVTdG9wU3RhdGVzKGNvbmZpZ3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBwdXJlIFNMTCBtb2RlIHBhcnNpbmdcbiAgICBpZiAobW9kZSA9PT0gUHJlZGljdGlvbk1vZGUuU0xMKSB7XG4gICAgICAgIC8vIERvbid0IGJvdGhlciB3aXRoIGNvbWJpbmluZyBjb25maWdzIGZyb20gZGlmZmVyZW50IHNlbWFudGljXG4gICAgICAgIC8vIGNvbnRleHRzIGlmIHdlIGNhbiBmYWlsIG92ZXIgdG8gZnVsbCBMTDsgY29zdHMgbW9yZSB0aW1lXG4gICAgICAgIC8vIHNpbmNlIHdlJ2xsIG9mdGVuIGZhaWwgb3ZlciBhbnl3YXkuXG4gICAgICAgIGlmIChjb25maWdzLmhhc1NlbWFudGljQ29udGV4dCkge1xuICAgICAgICAgICAgLy8gZHVwIGNvbmZpZ3MsIHRvc3Npbmcgb3V0IHNlbWFudGljIHByZWRpY2F0ZXNcbiAgICAgICAgICAgIHZhciBkdXAgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgICAgICAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICAgICAgXHR2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3NlbWFudGljQ29udGV4dDpTZW1hbnRpY0NvbnRleHQuTk9ORX0sIGMpO1xuICAgICAgICAgICAgICAgIGR1cC5hZGQoYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWdzID0gZHVwO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB3ZSBoYXZlIGNvbWJpbmVkIGNvbnRleHRzIGZvciBjb25maWdzIHdpdGggZGlzc2ltaWxhciBwcmVkc1xuICAgIH1cbiAgICAvLyBwdXJlIFNMTCBvciBjb21iaW5lZCBTTEwrTEwgbW9kZSBwYXJzaW5nXG4gICAgdmFyIGFsdHNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMoY29uZmlncyk7XG4gICAgcmV0dXJuIFByZWRpY3Rpb25Nb2RlLmhhc0NvbmZsaWN0aW5nQWx0U2V0KGFsdHNldHMpICYmICFQcmVkaWN0aW9uTW9kZS5oYXNTdGF0ZUFzc29jaWF0ZWRXaXRoT25lQWx0KGNvbmZpZ3MpO1xufTtcblxuLy8gQ2hlY2tzIGlmIGFueSBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSBpcyBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0uIENvbmZpZ3VyYXRpb25zIG1lZXRpbmcgdGhpcyBjb25kaXRpb24gaGF2ZSByZWFjaGVkXG4vLyB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2Ygc3RhcnQgcnVsZSAoZnVsbFxuLy8gY29udGV4dCkuXG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHRvIHRlc3Rcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGFueSBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSBpcyBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG5QcmVkaWN0aW9uTW9kZS5oYXNDb25maWdJblJ1bGVTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWdzKSB7XG5cdGZvcih2YXIgaT0wO2k8Y29uZmlncy5pdGVtcy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBDaGVja3MgaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8ge0BsaW5rIFJ1bGVTdG9wU3RhdGV9LiBDb25maWd1cmF0aW9ucyBtZWV0aW5nIHRoaXMgY29uZGl0aW9uIGhhdmUgcmVhY2hlZFxuLy8gdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHN0YXJ0IHJ1bGUgKGZ1bGxcbi8vIGNvbnRleHQpLlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIHRoZSBjb25maWd1cmF0aW9uIHNldCB0byB0ZXN0XG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBhbGwgY29uZmlndXJhdGlvbnMgaW4ge0Bjb2RlIGNvbmZpZ3N9IGFyZSBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG5QcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0Zm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmICghKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vXG4vLyBGdWxsIExMIHByZWRpY3Rpb24gdGVybWluYXRpb24uXG4vL1xuLy8gPHA+Q2FuIHdlIHN0b3AgbG9va2luZyBhaGVhZCBkdXJpbmcgQVROIHNpbXVsYXRpb24gb3IgaXMgdGhlcmUgc29tZVxuLy8gdW5jZXJ0YWludHkgYXMgdG8gd2hpY2ggYWx0ZXJuYXRpdmUgd2Ugd2lsbCB1bHRpbWF0ZWx5IHBpY2ssIGFmdGVyXG4vLyBjb25zdW1pbmcgbW9yZSBpbnB1dD8gRXZlbiBpZiB0aGVyZSBhcmUgcGFydGlhbCBjb25mbGljdHMsIHdlIG1pZ2h0IGtub3dcbi8vIHRoYXQgZXZlcnl0aGluZyBpcyBnb2luZyB0byByZXNvbHZlIHRvIHRoZSBzYW1lIG1pbmltdW0gYWx0ZXJuYXRpdmUuIFRoYXRcbi8vIG1lYW5zIHdlIGNhbiBzdG9wIHNpbmNlIG5vIG1vcmUgbG9va2FoZWFkIHdpbGwgY2hhbmdlIHRoYXQgZmFjdC4gT24gdGhlXG4vLyBvdGhlciBoYW5kLCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBjb25mbGljdHMgdGhhdCByZXNvbHZlIHRvIGRpZmZlcmVudFxuLy8gbWluaW11bXMuIFRoYXQgbWVhbnMgd2UgbmVlZCBtb3JlIGxvb2sgYWhlYWQgdG8gZGVjaWRlIHdoaWNoIG9mIHRob3NlXG4vLyBhbHRlcm5hdGl2ZXMgd2Ugc2hvdWxkIHByZWRpY3QuPC9wPlxuLy9cbi8vIDxwPlRoZSBiYXNpYyBpZGVhIGlzIHRvIHNwbGl0IHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMge0Bjb2RlIEN9LCBpbnRvXG4vLyBjb25mbGljdGluZyBzdWJzZXRzIHtAY29kZSAocywgXywgY3R4LCBfKX0gYW5kIHNpbmdsZXRvbiBzdWJzZXRzIHdpdGhcbi8vIG5vbi1jb25mbGljdGluZyBjb25maWd1cmF0aW9ucy4gVHdvIGNvbmZpZ3VyYXRpb25zIGNvbmZsaWN0IGlmIHRoZXkgaGF2ZVxuLy8gaWRlbnRpY2FsIHtAbGluayBBVE5Db25maWcvL3N0YXRlfSBhbmQge0BsaW5rIEFUTkNvbmZpZy8vY29udGV4dH0gdmFsdWVzXG4vLyBidXQgZGlmZmVyZW50IHtAbGluayBBVE5Db25maWcvL2FsdH0gdmFsdWUsIGUuZy4ge0Bjb2RlIChzLCBpLCBjdHgsIF8pfVxuLy8gYW5kIHtAY29kZSAocywgaiwgY3R4LCBfKX0gZm9yIHtAY29kZSBpIT1qfS48L3A+XG4vL1xuLy8gPHA+UmVkdWNlIHRoZXNlIGNvbmZpZ3VyYXRpb24gc3Vic2V0cyB0byB0aGUgc2V0IG9mIHBvc3NpYmxlIGFsdGVybmF0aXZlcy5cbi8vIFlvdSBjYW4gY29tcHV0ZSB0aGUgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpbiBvbmUgcGFzcyBhcyBmb2xsb3dzOjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgQV9zLGN0eCA9IHtpIHwgKHMsIGksIGN0eCwgXyl9fSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGluXG4vLyB7QGNvZGUgQ30gaG9sZGluZyB7QGNvZGUgc30gYW5kIHtAY29kZSBjdHh9IGZpeGVkLjwvcD5cbi8vXG4vLyA8cD5PciBpbiBwc2V1ZG8tY29kZSwgZm9yIGVhY2ggY29uZmlndXJhdGlvbiB7QGNvZGUgY30gaW4ge0Bjb2RlIEN9OjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gbWFwW2NdIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH0gLy8gbWFwIGhhc2gvZXF1YWxzIHVzZXMgcyBhbmQgeCwgbm90XG4vLyBhbHQgYW5kIG5vdCBwcmVkXG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5UaGUgdmFsdWVzIGluIHtAY29kZSBtYXB9IGFyZSB0aGUgc2V0IG9mIHtAY29kZSBBX3MsY3R4fSBzZXRzLjwvcD5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgfEFfcyxjdHh8PTF9IHRoZW4gdGhlcmUgaXMgbm8gY29uZmxpY3QgYXNzb2NpYXRlZCB3aXRoXG4vLyB7QGNvZGUgc30gYW5kIHtAY29kZSBjdHh9LjwvcD5cbi8vXG4vLyA8cD5SZWR1Y2UgdGhlIHN1YnNldHMgdG8gc2luZ2xldG9ucyBieSBjaG9vc2luZyBhIG1pbmltdW0gb2YgZWFjaCBzdWJzZXQuIElmXG4vLyB0aGUgdW5pb24gb2YgdGhlc2UgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpcyBhIHNpbmdsZXRvbiwgdGhlbiBubyBhbW91bnQgb2Zcbi8vIG1vcmUgbG9va2FoZWFkIHdpbGwgaGVscCB1cy4gV2Ugd2lsbCBhbHdheXMgcGljayB0aGF0IGFsdGVybmF0aXZlLiBJZixcbi8vIGhvd2V2ZXIsIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUsIHRoZW4gd2UgYXJlIHVuY2VydGFpbiB3aGljaFxuLy8gYWx0ZXJuYXRpdmUgdG8gcHJlZGljdCBhbmQgbXVzdCBjb250aW51ZSBsb29raW5nIGZvciByZXNvbHV0aW9uLiBXZSBtYXlcbi8vIG9yIG1heSBub3QgZGlzY292ZXIgYW4gYW1iaWd1aXR5IGluIHRoZSBmdXR1cmUsIGV2ZW4gaWYgdGhlcmUgYXJlIG5vXG4vLyBjb25mbGljdGluZyBzdWJzZXRzIHRoaXMgcm91bmQuPC9wPlxuLy9cbi8vIDxwPlRoZSBiaWdnZXN0IHNpbiBpcyB0byB0ZXJtaW5hdGUgZWFybHkgYmVjYXVzZSBpdCBtZWFucyB3ZSd2ZSBtYWRlIGFcbi8vIGRlY2lzaW9uIGJ1dCB3ZXJlIHVuY2VydGFpbiBhcyB0byB0aGUgZXZlbnR1YWwgb3V0Y29tZS4gV2UgaGF2ZW4ndCB1c2VkXG4vLyBlbm91Z2ggbG9va2FoZWFkLiBPbiB0aGUgb3RoZXIgaGFuZCwgYW5ub3VuY2luZyBhIGNvbmZsaWN0IHRvbyBsYXRlIGlzIG5vXG4vLyBiaWcgZGVhbDsgeW91IHdpbGwgc3RpbGwgaGF2ZSB0aGUgY29uZmxpY3QuIEl0J3MganVzdCBpbmVmZmljaWVudC4gSXRcbi8vIG1pZ2h0IGV2ZW4gbG9vayB1bnRpbCB0aGUgZW5kIG9mIGZpbGUuPC9wPlxuLy9cbi8vIDxwPk5vIHNwZWNpYWwgY29uc2lkZXJhdGlvbiBmb3Igc2VtYW50aWMgcHJlZGljYXRlcyBpcyByZXF1aXJlZCBiZWNhdXNlXG4vLyBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQgb24tdGhlLWZseSBmb3IgZnVsbCBMTCBwcmVkaWN0aW9uLCBlbnN1cmluZyB0aGF0XG4vLyBubyBjb25maWd1cmF0aW9uIGNvbnRhaW5zIGEgc2VtYW50aWMgY29udGV4dCBkdXJpbmcgdGhlIHRlcm1pbmF0aW9uXG4vLyBjaGVjay48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5DT05GTElDVElORyBDT05GSUdTPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlR3byBjb25maWd1cmF0aW9ucyB7QGNvZGUgKHMsIGksIHgpfSBhbmQge0Bjb2RlIChzLCBqLCB4Jyl9LCBjb25mbGljdFxuLy8gd2hlbiB7QGNvZGUgaSE9an0gYnV0IHtAY29kZSB4PXgnfS4gQmVjYXVzZSB3ZSBtZXJnZSBhbGxcbi8vIHtAY29kZSAocywgaSwgXyl9IGNvbmZpZ3VyYXRpb25zIHRvZ2V0aGVyLCB0aGF0IG1lYW5zIHRoYXQgdGhlcmUgYXJlIGF0XG4vLyBtb3N0IHtAY29kZSBufSBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggc3RhdGUge0Bjb2RlIHN9IGZvclxuLy8ge0Bjb2RlIG59IHBvc3NpYmxlIGFsdGVybmF0aXZlcyBpbiB0aGUgZGVjaXNpb24uIFRoZSBtZXJnZWQgc3RhY2tzXG4vLyBjb21wbGljYXRlIHRoZSBjb21wYXJpc29uIG9mIGNvbmZpZ3VyYXRpb24gY29udGV4dHMge0Bjb2RlIHh9IGFuZFxuLy8ge0Bjb2RlIHgnfS4gU2FtIGNoZWNrcyB0byBzZWUgaWYgb25lIGlzIGEgc3Vic2V0IG9mIHRoZSBvdGhlciBieSBjYWxsaW5nXG4vLyBtZXJnZSBhbmQgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZSBtZXJnZWQgcmVzdWx0IGlzIGVpdGhlciB7QGNvZGUgeH0gb3Jcbi8vIHtAY29kZSB4J30uIElmIHRoZSB7QGNvZGUgeH0gYXNzb2NpYXRlZCB3aXRoIGxvd2VzdCBhbHRlcm5hdGl2ZSB7QGNvZGUgaX1cbi8vIGlzIHRoZSBzdXBlcnNldCwgdGhlbiB7QGNvZGUgaX0gaXMgdGhlIG9ubHkgcG9zc2libGUgcHJlZGljdGlvbiBzaW5jZSB0aGVcbi8vIG90aGVycyByZXNvbHZlIHRvIHtAY29kZSBtaW4oaSl9IGFzIHdlbGwuIEhvd2V2ZXIsIGlmIHtAY29kZSB4fSBpc1xuLy8gYXNzb2NpYXRlZCB3aXRoIHtAY29kZSBqPml9IHRoZW4gYXQgbGVhc3Qgb25lIHN0YWNrIGNvbmZpZ3VyYXRpb24gZm9yXG4vLyB7QGNvZGUgan0gaXMgbm90IGluIGNvbmZsaWN0IHdpdGggYWx0ZXJuYXRpdmUge0Bjb2RlIGl9LiBUaGUgYWxnb3JpdGhtXG4vLyBzaG91bGQga2VlcCBnb2luZywgbG9va2luZyBmb3IgbW9yZSBsb29rYWhlYWQgZHVlIHRvIHRoZSB1bmNlcnRhaW50eS48L3A+XG4vL1xuLy8gPHA+Rm9yIHNpbXBsaWNpdHksIEknbSBkb2luZyBhIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4ge0Bjb2RlIHh9IGFuZFxuLy8ge0Bjb2RlIHgnfSB0aGF0IGxldHMgdGhlIGFsZ29yaXRobSBjb250aW51ZSB0byBjb25zdW1lIGxvb2thaGVhZCBsb25nZXJcbi8vIHRoYW4gbmVjZXNzYXJ5LiBUaGUgcmVhc29uIEkgbGlrZSB0aGUgZXF1YWxpdHkgaXMgb2YgY291cnNlIHRoZVxuLy8gc2ltcGxpY2l0eSBidXQgYWxzbyBiZWNhdXNlIHRoYXQgaXMgdGhlIHRlc3QgeW91IG5lZWQgdG8gZGV0ZWN0IHRoZVxuLy8gYWx0ZXJuYXRpdmVzIHRoYXQgYXJlIGFjdHVhbGx5IGluIGNvbmZsaWN0LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkNPTlRJTlVFL1NUT1AgUlVMRTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Db250aW51ZSBpZiB1bmlvbiBvZiByZXNvbHZlZCBhbHRlcm5hdGl2ZSBzZXRzIGZyb20gbm9uLWNvbmZsaWN0aW5nIGFuZFxuLy8gY29uZmxpY3RpbmcgYWx0ZXJuYXRpdmUgc3Vic2V0cyBoYXMgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZS4gV2UgYXJlXG4vLyB1bmNlcnRhaW4gYWJvdXQgd2hpY2ggYWx0ZXJuYXRpdmUgdG8gcHJlZGljdC48L3A+XG4vL1xuLy8gPHA+VGhlIGNvbXBsZXRlIHNldCBvZiBhbHRlcm5hdGl2ZXMsIHtAY29kZSBbaSBmb3IgKF8saSxfKV19LCB0ZWxscyB1cyB3aGljaFxuLy8gYWx0ZXJuYXRpdmVzIGFyZSBzdGlsbCBpbiB0aGUgcnVubmluZyBmb3IgdGhlIGFtb3VudCBvZiBpbnB1dCB3ZSd2ZVxuLy8gY29uc3VtZWQgYXQgdGhpcyBwb2ludC4gVGhlIGNvbmZsaWN0aW5nIHNldHMgbGV0IHVzIHRvIHN0cmlwIGF3YXlcbi8vIGNvbmZpZ3VyYXRpb25zIHRoYXQgd29uJ3QgbGVhZCB0byBtb3JlIHN0YXRlcyBiZWNhdXNlIHdlIHJlc29sdmVcbi8vIGNvbmZsaWN0cyB0byB0aGUgY29uZmlndXJhdGlvbiB3aXRoIGEgbWluaW11bSBhbHRlcm5hdGUgZm9yIHRoZVxuLy8gY29uZmxpY3Rpbmcgc2V0LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkNBU0VTPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDx1bD5cbi8vXG4vLyA8bGk+bm8gY29uZmxpY3RzIGFuZCBtb3JlIHRoYW4gMSBhbHRlcm5hdGl2ZSBpbiBzZXQgPSZndDsgY29udGludWU8L2xpPlxuLy9cbi8vIDxsaT4ge0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMsIDMsIHopfSxcbi8vIHtAY29kZSAocycsIDEsIHkpfSwge0Bjb2RlIChzJywgMiwgeSl9IHlpZWxkcyBub24tY29uZmxpY3Rpbmcgc2V0XG4vLyB7QGNvZGUgezN9fSBVIGNvbmZsaWN0aW5nIHNldHMge0Bjb2RlIG1pbih7MSwyfSl9IFUge0Bjb2RlIG1pbih7MSwyfSl9ID1cbi8vIHtAY29kZSB7MSwzfX0gPSZndDsgY29udGludWVcbi8vIDwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMSwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMiwgeSl9LCB7QGNvZGUgKHMnJywgMSwgeil9IHlpZWxkcyBub24tY29uZmxpY3Rpbmcgc2V0XG4vLyB7QGNvZGUgezF9fSBVIGNvbmZsaWN0aW5nIHNldHMge0Bjb2RlIG1pbih7MSwyfSl9IFUge0Bjb2RlIG1pbih7MSwyfSl9ID1cbi8vIHtAY29kZSB7MX19ID0mZ3Q7IHN0b3AgYW5kIHByZWRpY3QgMTwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMSwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMiwgeSl9IHlpZWxkcyBjb25mbGljdGluZywgcmVkdWNlZCBzZXRzIHtAY29kZSB7MX19IFVcbi8vIHtAY29kZSB7MX19ID0ge0Bjb2RlIHsxfX0gPSZndDsgc3RvcCBhbmQgcHJlZGljdCAxLCBjYW4gYW5ub3VuY2Vcbi8vIGFtYmlndWl0eSB7QGNvZGUgezEsMn19PC9saT5cbi8vXG4vLyA8bGk+e0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMnLCAyLCB5KX0sXG4vLyB7QGNvZGUgKHMnLCAzLCB5KX0geWllbGRzIGNvbmZsaWN0aW5nLCByZWR1Y2VkIHNldHMge0Bjb2RlIHsxfX0gVVxuLy8ge0Bjb2RlIHsyfX0gPSB7QGNvZGUgezEsMn19ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8bGk+e0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMnLCAzLCB5KX0sXG4vLyB7QGNvZGUgKHMnLCA0LCB5KX0geWllbGRzIGNvbmZsaWN0aW5nLCByZWR1Y2VkIHNldHMge0Bjb2RlIHsxfX0gVVxuLy8ge0Bjb2RlIHszfX0gPSB7QGNvZGUgezEsM319ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8L3VsPlxuLy9cbi8vIDxwPjxzdHJvbmc+RVhBQ1QgQU1CSUdVSVRZIERFVEVDVElPTjwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5JZiBhbGwgc3RhdGVzIHJlcG9ydCB0aGUgc2FtZSBjb25mbGljdGluZyBzZXQgb2YgYWx0ZXJuYXRpdmVzLCB0aGVuIHdlXG4vLyBrbm93IHdlIGhhdmUgdGhlIGV4YWN0IGFtYmlndWl0eSBzZXQuPC9wPlxuLy9cbi8vIDxwPjxjb2RlPnxBXzxlbT5pPC9lbT58Jmd0OzE8L2NvZGU+IGFuZFxuLy8gPGNvZGU+QV88ZW0+aTwvZW0+ID0gQV88ZW0+ajwvZW0+PC9jb2RlPiBmb3IgYWxsIDxlbT5pPC9lbT4sIDxlbT5qPC9lbT4uPC9wPlxuLy9cbi8vIDxwPkluIG90aGVyIHdvcmRzLCB3ZSBjb250aW51ZSBleGFtaW5pbmcgbG9va2FoZWFkIHVudGlsIGFsbCB7QGNvZGUgQV9pfVxuLy8gaGF2ZSBtb3JlIHRoYW4gb25lIGFsdGVybmF0aXZlIGFuZCBhbGwge0Bjb2RlIEFfaX0gYXJlIHRoZSBzYW1lLiBJZlxuLy8ge0Bjb2RlIEE9e3sxLDJ9LCB7MSwzfX19LCB0aGVuIHJlZ3VsYXIgTEwgcHJlZGljdGlvbiB3b3VsZCB0ZXJtaW5hdGVcbi8vIGJlY2F1c2UgdGhlIHJlc29sdmVkIHNldCBpcyB7QGNvZGUgezF9fS4gVG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHJlYWxcbi8vIGFtYmlndWl0eSBpcywgd2UgaGF2ZSB0byBrbm93IHdoZXRoZXIgdGhlIGFtYmlndWl0eSBpcyBiZXR3ZWVuIG9uZSBhbmRcbi8vIHR3byBvciBvbmUgYW5kIHRocmVlIHNvIHdlIGtlZXAgZ29pbmcuIFdlIGNhbiBvbmx5IHN0b3AgcHJlZGljdGlvbiB3aGVuXG4vLyB3ZSBuZWVkIGV4YWN0IGFtYmlndWl0eSBkZXRlY3Rpb24gd2hlbiB0aGUgc2V0cyBsb29rIGxpa2Vcbi8vIHtAY29kZSBBPXt7MSwyfX19IG9yIHtAY29kZSB7ezEsMn0sezEsMn19fSwgZXRjLi4uPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHJldHVybiBQcmVkaWN0aW9uTW9kZS5nZXRTaW5nbGVWaWFibGVBbHQoYWx0c2V0cyk7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBldmVyeSBhbHRlcm5hdGl2ZSBzdWJzZXQgaW4ge0Bjb2RlIGFsdHNldHN9IGNvbnRhaW5zIG1vcmVcbi8vIHRoYW4gb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBldmVyeSB7QGxpbmsgQml0U2V0fSBpbiB7QGNvZGUgYWx0c2V0c30gaGFzXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gJmd0OyAxLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy9cblByZWRpY3Rpb25Nb2RlLmFsbFN1YnNldHNDb25mbGljdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICByZXR1cm4gISBQcmVkaWN0aW9uTW9kZS5oYXNOb25Db25mbGljdGluZ0FsdFNldChhbHRzZXRzKTtcbn07XG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBhbnkgc2luZ2xlIGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnNcbi8vIGV4YWN0bHkgb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnMgYSB7QGxpbmsgQml0U2V0fSB3aXRoXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gMSwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5oYXNOb25Db25mbGljdGluZ0FsdFNldCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIGlmIChhbHRzLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBhbnkgc2luZ2xlIGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnNcbi8vIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUuXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHtAY29kZSBhbHRzZXRzfSBjb250YWlucyBhIHtAbGluayBCaXRTZXR9IHdpdGhcbi8vIHtAbGluayBCaXRTZXQvL2NhcmRpbmFsaXR5IGNhcmRpbmFsaXR5fSAmZ3Q7IDEsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuUHJlZGljdGlvbk1vZGUuaGFzQ29uZmxpY3RpbmdBbHRTZXQgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG5cdGZvcih2YXIgaT0wO2k8YWx0c2V0cy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGFsdHMgPSBhbHRzZXRzW2ldO1xuICAgICAgICBpZiAoYWx0cy5sZW5ndGg+MSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblx0fVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vXG4vLyBEZXRlcm1pbmVzIGlmIGV2ZXJ5IGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gaXMgZXF1aXZhbGVudC5cbi8vXG4vLyBAcGFyYW0gYWx0c2V0cyBhIGNvbGxlY3Rpb24gb2YgYWx0ZXJuYXRpdmUgc3Vic2V0c1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgZXZlcnkgbWVtYmVyIG9mIHtAY29kZSBhbHRzZXRzfSBpcyBlcXVhbCB0byB0aGVcbi8vIG90aGVycywgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzRXF1YWwgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG4gICAgdmFyIGZpcnN0ID0gbnVsbDtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIGlmIChmaXJzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmlyc3QgPSBhbHRzO1xuICAgICAgICB9IGVsc2UgaWYgKGFsdHMhPT1maXJzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vXG4vLyBSZXR1cm5zIHRoZSB1bmlxdWUgYWx0ZXJuYXRpdmUgcHJlZGljdGVkIGJ5IGFsbCBhbHRlcm5hdGl2ZSBzdWJzZXRzIGluXG4vLyB7QGNvZGUgYWx0c2V0c30uIElmIG5vIHN1Y2ggYWx0ZXJuYXRpdmUgZXhpc3RzLCB0aGlzIG1ldGhvZCByZXR1cm5zXG4vLyB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0VW5pcXVlQWx0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHZhciBhbGwgPSBQcmVkaWN0aW9uTW9kZS5nZXRBbHRzKGFsdHNldHMpO1xuICAgIGlmIChhbGwubGVuZ3RoPT09MSkge1xuICAgICAgICByZXR1cm4gYWxsLm1pblZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgfVxufTtcblxuLy8gR2V0cyB0aGUgY29tcGxldGUgc2V0IG9mIHJlcHJlc2VudGVkIGFsdGVybmF0aXZlcyBmb3IgYSBjb2xsZWN0aW9uIG9mXG4vLyBhbHRlcm5hdGl2ZSBzdWJzZXRzLiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB1bmlvbiBvZiBlYWNoIHtAbGluayBCaXRTZXR9XG4vLyBpbiB7QGNvZGUgYWx0c2V0c30uXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4gdGhlIHNldCBvZiByZXByZXNlbnRlZCBhbHRlcm5hdGl2ZXMgaW4ge0Bjb2RlIGFsdHNldHN9XG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0QWx0cyA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgYWxsID0gbmV3IEJpdFNldCgpO1xuICAgIGFsdHNldHMubWFwKCBmdW5jdGlvbihhbHRzKSB7IGFsbC5vcihhbHRzKTsgfSk7XG4gICAgcmV0dXJuIGFsbDtcbn07XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGNvbmZsaWN0aW5nIGFsdCBzdWJzZXRzIGZyb20gYSBjb25maWd1cmF0aW9uIHNldC5cbi8vIEZvciBlYWNoIGNvbmZpZ3VyYXRpb24ge0Bjb2RlIGN9IGluIHtAY29kZSBjb25maWdzfTpcbi8vXG4vLyA8cHJlPlxuLy8gbWFwW2NdIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH0gLy8gbWFwIGhhc2gvZXF1YWxzIHVzZXMgcyBhbmQgeCwgbm90XG4vLyBhbHQgYW5kIG5vdCBwcmVkXG4vLyA8L3ByZT5cblxuUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBjb25maWdUb0FsdHMgPSBuZXcgTWFwKCk7XG4gICAgY29uZmlnVG9BbHRzLmhhc2hGdW5jdGlvbiA9IGZ1bmN0aW9uKGNmZykgeyBoYXNoU3R1ZmYoY2ZnLnN0YXRlLnN0YXRlTnVtYmVyLCBjZmcuY29udGV4dCk7IH07XG4gICAgY29uZmlnVG9BbHRzLmVxdWFsc0Z1bmN0aW9uID0gZnVuY3Rpb24oYzEsIGMyKSB7IHJldHVybiBjMS5zdGF0ZS5zdGF0ZU51bWJlcj09YzIuc3RhdGUuc3RhdGVOdW1iZXIgJiYgYzEuY29udGV4dC5lcXVhbHMoYzIuY29udGV4dCk7fVxuICAgIGNvbmZpZ3MuaXRlbXMubWFwKGZ1bmN0aW9uKGNmZykge1xuICAgICAgICB2YXIgYWx0cyA9IGNvbmZpZ1RvQWx0cy5nZXQoY2ZnKTtcbiAgICAgICAgaWYgKGFsdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdHMgPSBuZXcgQml0U2V0KCk7XG4gICAgICAgICAgICBjb25maWdUb0FsdHMucHV0KGNmZywgYWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgYWx0cy5hZGQoY2ZnLmFsdCk7XG5cdH0pO1xuICAgIHJldHVybiBjb25maWdUb0FsdHMuZ2V0VmFsdWVzKCk7XG59O1xuXG4vL1xuLy8gR2V0IGEgbWFwIGZyb20gc3RhdGUgdG8gYWx0IHN1YnNldCBmcm9tIGEgY29uZmlndXJhdGlvbiBzZXQuIEZvciBlYWNoXG4vLyBjb25maWd1cmF0aW9uIHtAY29kZSBjfSBpbiB7QGNvZGUgY29uZmlnc306XG4vL1xuLy8gPHByZT5cbi8vIG1hcFtjLntAbGluayBBVE5Db25maWcvL3N0YXRlIHN0YXRlfV0gVT0gYy57QGxpbmsgQVROQ29uZmlnLy9hbHQgYWx0fVxuLy8gPC9wcmU+XG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0U3RhdGVUb0FsdE1hcCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgbSA9IG5ldyBBbHREaWN0KCk7XG4gICAgY29uZmlncy5pdGVtcy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgYWx0cyA9IG0uZ2V0KGMuc3RhdGUpO1xuICAgICAgICBpZiAoYWx0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0cyA9IG5ldyBCaXRTZXQoKTtcbiAgICAgICAgICAgIG0ucHV0KGMuc3RhdGUsIGFsdHMpO1xuICAgICAgICB9XG4gICAgICAgIGFsdHMuYWRkKGMuYWx0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbn07XG5cblByZWRpY3Rpb25Nb2RlLmhhc1N0YXRlQXNzb2NpYXRlZFdpdGhPbmVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIHZhbHVlcyA9IFByZWRpY3Rpb25Nb2RlLmdldFN0YXRlVG9BbHRNYXAoY29uZmlncykudmFsdWVzKCk7XG4gICAgZm9yKHZhciBpPTA7aTx2YWx1ZXMubGVuZ3RoO2krKykge1xuICAgICAgICBpZiAodmFsdWVzW2ldLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblByZWRpY3Rpb25Nb2RlLmdldFNpbmdsZVZpYWJsZUFsdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gbnVsbDtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIHZhciBtaW5BbHQgPSBhbHRzLm1pblZhbHVlKCk7XG4gICAgICAgIGlmKHJlc3VsdD09PW51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1pbkFsdDtcbiAgICAgICAgfSBlbHNlIGlmKHJlc3VsdCE9PW1pbkFsdCkgeyAvLyBtb3JlIHRoYW4gMSB2aWFibGUgYWx0XG4gICAgICAgICAgICByZXR1cm4gQVROLklOVkFMSURfQUxUX05VTUJFUjtcbiAgICAgICAgfVxuXHR9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydHMuUHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZTtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyBBIHRyZWUgc3RydWN0dXJlIHVzZWQgdG8gcmVjb3JkIHRoZSBzZW1hbnRpYyBjb250ZXh0IGluIHdoaWNoXG4vLyAgYW4gQVROIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQuICBJdCdzIGVpdGhlciBhIHNpbmdsZSBwcmVkaWNhdGUsXG4vLyAgYSBjb25qdW5jdGlvbiB7QGNvZGUgcDEmJnAyfSwgb3IgYSBzdW0gb2YgcHJvZHVjdHMge0Bjb2RlIHAxfHxwMn0uXG4vL1xuLy8gIDxwPkkgaGF2ZSBzY29wZWQgdGhlIHtAbGluayBBTkR9LCB7QGxpbmsgT1J9LCBhbmQge0BsaW5rIFByZWRpY2F0ZX0gc3ViY2xhc3NlcyBvZlxuLy8gIHtAbGluayBTZW1hbnRpY0NvbnRleHR9IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBvdXRlciBjbGFzcy48L3A+XG4vL1xuXG52YXIgU2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLlNldDtcbnZhciBIYXNoID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkhhc2g7XG5cbmZ1bmN0aW9uIFNlbWFudGljQ29udGV4dCgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNlbWFudGljQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbi8vIEZvciBjb250ZXh0IGluZGVwZW5kZW50IHByZWRpY2F0ZXMsIHdlIGV2YWx1YXRlIHRoZW0gd2l0aG91dCBhIGxvY2FsXG4vLyBjb250ZXh0IChpLmUuLCBudWxsIGNvbnRleHQpLiBUaGF0IHdheSwgd2UgY2FuIGV2YWx1YXRlIHRoZW0gd2l0aG91dFxuLy8gaGF2aW5nIHRvIGNyZWF0ZSBwcm9wZXIgcnVsZS1zcGVjaWZpYyBjb250ZXh0IGR1cmluZyBwcmVkaWN0aW9uIChhc1xuLy8gb3Bwb3NlZCB0byB0aGUgcGFyc2VyLCB3aGljaCBjcmVhdGVzIHRoZW0gbmF0dXJhbGx5KS4gSW4gYSBwcmFjdGljYWxcbi8vIHNlbnNlLCB0aGlzIGF2b2lkcyBhIGNhc3QgZXhjZXB0aW9uIGZyb20gUnVsZUNvbnRleHQgdG8gbXlydWxlQ29udGV4dC5cbi8vXG4vLyA8cD5Gb3IgY29udGV4dCBkZXBlbmRlbnQgcHJlZGljYXRlcywgd2UgbXVzdCBwYXNzIGluIGEgbG9jYWwgY29udGV4dCBzbyB0aGF0XG4vLyByZWZlcmVuY2VzIHN1Y2ggYXMgJGFyZyBldmFsdWF0ZSBwcm9wZXJseSBhcyBfbG9jYWxjdHguYXJnLiBXZSBvbmx5XG4vLyBjYXB0dXJlIGNvbnRleHQgZGVwZW5kZW50IHByZWRpY2F0ZXMgaW4gdGhlIGNvbnRleHQgaW4gd2hpY2ggd2UgYmVnaW5cbi8vIHByZWRpY3Rpb24sIHNvIHdlIHBhc3NlZCBpbiB0aGUgb3V0ZXIgY29udGV4dCBoZXJlIGluIGNhc2Ugb2YgY29udGV4dFxuLy8gZGVwZW5kZW50IHByZWRpY2F0ZSBldmFsdWF0aW9uLjwvcD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcbn07XG5cbi8vXG4vLyBFdmFsdWF0ZSB0aGUgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGZvciB0aGUgY29udGV4dCBhbmQgcmVkdWNlIHRoZSByZXN1bHQuXG4vL1xuLy8gQHBhcmFtIHBhcnNlciBUaGUgcGFyc2VyIGluc3RhbmNlLlxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgY3VycmVudCBwYXJzZXIgY29udGV4dCBvYmplY3QuXG4vLyBAcmV0dXJuIFRoZSBzaW1wbGlmaWVkIHNlbWFudGljIGNvbnRleHQgYWZ0ZXIgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZVxuLy8gZXZhbHVhdGVkLCB3aGljaCB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy5cbi8vIDx1bD5cbi8vIDxsaT57QGxpbmsgLy9OT05FfTogaWYgdGhlIHByZWRpY2F0ZSBzaW1wbGlmaWVzIHRvIHtAY29kZSB0cnVlfSBhZnRlclxuLy8gcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQuPC9saT5cbi8vIDxsaT57QGNvZGUgbnVsbH06IGlmIHRoZSBwcmVkaWNhdGUgc2ltcGxpZmllcyB0byB7QGNvZGUgZmFsc2V9IGFmdGVyXG4vLyBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPGxpPntAY29kZSB0aGlzfTogaWYgdGhlIHNlbWFudGljIGNvbnRleHQgaXMgbm90IGNoYW5nZWQgYXMgYSByZXN1bHQgb2Zcbi8vIHByZWNlZGVuY2UgcHJlZGljYXRlIGV2YWx1YXRpb24uPC9saT5cbi8vIDxsaT5BIG5vbi17QGNvZGUgbnVsbH0ge0BsaW5rIFNlbWFudGljQ29udGV4dH06IHRoZSBuZXcgc2ltcGxpZmllZFxuLy8gc2VtYW50aWMgY29udGV4dCBhZnRlciBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPC91bD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwgfHwgYSA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQU5EKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuU2VtYW50aWNDb250ZXh0Lm9yQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBTZW1hbnRpY0NvbnRleHQuTk9ORTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbmV3IE9SKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuZnVuY3Rpb24gUHJlZGljYXRlKHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXggPT09IHVuZGVmaW5lZCA/IC0xIDogcnVsZUluZGV4O1xuXHR0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleCA9PT0gdW5kZWZpbmVkID8gLTEgOiBwcmVkSW5kZXg7XG5cdHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBpc0N0eERlcGVuZGVudDsgLy8gZS5nLiwgJGkgcmVmIGluIHByZWRcblx0cmV0dXJuIHRoaXM7XG59XG5cblByZWRpY2F0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNlbWFudGljQ29udGV4dC5wcm90b3R5cGUpO1xuUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZTtcblxuLy9UaGUgZGVmYXVsdCB7QGxpbmsgU2VtYW50aWNDb250ZXh0fSwgd2hpY2ggaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG9cbi8vYSBwcmVkaWNhdGUgb2YgdGhlIGZvcm0ge0Bjb2RlIHt0cnVlfT99LlxuLy9cblNlbWFudGljQ29udGV4dC5OT05FID0gbmV3IFByZWRpY2F0ZSgpO1xuXG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbihwYXJzZXIsIG91dGVyQ29udGV4dCkge1xuXHR2YXIgbG9jYWxjdHggPSB0aGlzLmlzQ3R4RGVwZW5kZW50ID8gb3V0ZXJDb250ZXh0IDogbnVsbDtcblx0cmV0dXJuIHBhcnNlci5zZW1wcmVkKGxvY2FsY3R4LCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5wcmVkSW5kZXgpO1xufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aGFzaC51cGRhdGUodGhpcy5ydWxlSW5kZXgsIHRoaXMucHJlZEluZGV4LCB0aGlzLmlzQ3R4RGVwZW5kZW50KTtcbn07XG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFByZWRpY2F0ZSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiZcblx0XHRcdFx0dGhpcy5wcmVkSW5kZXggPT09IG90aGVyLnByZWRJbmRleCAmJlxuXHRcdFx0XHR0aGlzLmlzQ3R4RGVwZW5kZW50ID09PSBvdGhlci5pc0N0eERlcGVuZGVudDtcblx0fVxufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIgKyB0aGlzLnJ1bGVJbmRleCArIFwiOlwiICsgdGhpcy5wcmVkSW5kZXggKyBcIn0/XCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlKHByZWNlZGVuY2UpIHtcblx0U2VtYW50aWNDb250ZXh0LmNhbGwodGhpcyk7XG5cdHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCA/IDAgOiBwcmVjZWRlbmNlO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWNlZGVuY2VQcmVkaWNhdGU7XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHBhcnNlci5wcmVjcHJlZChvdXRlckNvbnRleHQsIHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5ldmFsUHJlY2VkZW5jZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGlmIChwYXJzZXIucHJlY3ByZWQob3V0ZXJDb250ZXh0LCB0aGlzLnByZWNlZGVuY2UpKSB7XG5cdFx0cmV0dXJuIFNlbWFudGljQ29udGV4dC5OT05FO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb21wYXJlVG8gPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlIC0gb3RoZXIucHJlY2VkZW5jZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKDMxKTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQcmVjZWRlbmNlUHJlZGljYXRlKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlID09PSBvdGhlci5wcmVjZWRlbmNlO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIrdGhpcy5wcmVjZWRlbmNlK1wiPj1wcmVjfT9cIjtcbn07XG5cblxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLmZpbHRlclByZWNlZGVuY2VQcmVkaWNhdGVzID0gZnVuY3Rpb24oc2V0KSB7XG5cdHZhciByZXN1bHQgPSBbXTtcblx0c2V0LnZhbHVlcygpLm1hcCggZnVuY3Rpb24oY29udGV4dCkge1xuXHRcdGlmIChjb250ZXh0IGluc3RhbmNlb2YgUHJlY2VkZW5jZVByZWRpY2F0ZSkge1xuXHRcdFx0cmVzdWx0LnB1c2goY29udGV4dCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgbm9uZSBvZiB0aGUgY29udGFpbmVkIGNvbnRleHRzXG4vLyBpcyBmYWxzZS5cbi8vXG5mdW5jdGlvbiBBTkQoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIEFORCkge1xuXHRcdGEub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRcdG9wZXJhbmRzLmFkZChvKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvcGVyYW5kcy5hZGQoYSk7XG5cdH1cblx0aWYgKGIgaW5zdGFuY2VvZiBBTkQpIHtcblx0XHRiLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0XHRvcGVyYW5kcy5hZGQobyk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3BlcmFuZHMuYWRkKGIpO1xuXHR9XG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgbG93ZXN0IHByZWNlZGVuY2Vcblx0XHR2YXIgcmVkdWNlZCA9IG51bGw7XG5cdFx0cHJlY2VkZW5jZVByZWRpY2F0ZXMubWFwKCBmdW5jdGlvbihwKSB7XG5cdFx0XHRpZihyZWR1Y2VkPT09bnVsbCB8fCBwLnByZWNlZGVuY2U8cmVkdWNlZC5wcmVjZWRlbmNlKSB7XG5cdFx0XHRcdHJlZHVjZWQgPSBwO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9wZXJhbmRzLmFkZChyZWR1Y2VkKTtcblx0fVxuXHR0aGlzLm9wbmRzID0gb3BlcmFuZHMudmFsdWVzKCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5BTkQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZW1hbnRpY0NvbnRleHQucHJvdG90eXBlKTtcbkFORC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBTkQ7XG5cbkFORC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFORCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMub3BuZHMgPT09IG90aGVyLm9wbmRzO1xuXHR9XG59O1xuXG5BTkQucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMub3BuZHMsIFwiQU5EXCIpO1xufTtcbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuQU5ELnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICghdGhpcy5vcG5kc1tpXS5ldmFsdWF0ZShwYXJzZXIsIG91dGVyQ29udGV4dCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG5BTkQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBudWxsKSB7XG5cdFx0XHQvLyBUaGUgQU5EIGNvbnRleHQgaXMgZmFsc2UgaWYgYW55IGVsZW1lbnQgaXMgZmFsc2Vcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gZWxzZSBpZiAoZXZhbHVhdGVkICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gUmVkdWNlIHRoZSByZXN1bHQgYnkgc2tpcHBpbmcgdHJ1ZSBlbGVtZW50c1xuXHRcdFx0b3BlcmFuZHMucHVzaChldmFsdWF0ZWQpO1xuXHRcdH1cblx0fVxuXHRpZiAoIWRpZmZlcnMpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRpZiAob3BlcmFuZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gYWxsIGVsZW1lbnRzIHdlcmUgdHJ1ZSwgc28gdGhlIEFORCBjb250ZXh0IGlzIHRydWVcblx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdH1cblx0dmFyIHJlc3VsdCA9IG51bGw7XG5cdG9wZXJhbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KHJlc3VsdCwgbyk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuQU5ELnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHRoaXMub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRzICs9IFwiJiYgXCIgKyBvLnRvU3RyaW5nKCk7XG5cdH0pO1xuXHRyZXR1cm4gcy5sZW5ndGggPiAzID8gcy5zbGljZSgzKSA6IHM7XG59O1xuXG4vL1xuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgYXQgbGVhc3Qgb25lIG9mIHRoZSBjb250YWluZWRcbi8vIGNvbnRleHRzIGlzIHRydWUuXG4vL1xuZnVuY3Rpb24gT1IoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0YS5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChhKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0Yi5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChiKTtcblx0fVxuXG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgaGlnaGVzdCBwcmVjZWRlbmNlXG5cdFx0dmFyIHMgPSBwcmVjZWRlbmNlUHJlZGljYXRlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHJldHVybiBhLmNvbXBhcmVUbyhiKTtcblx0XHR9KTtcblx0XHR2YXIgcmVkdWNlZCA9IHNbcy5sZW5ndGgtMV07XG5cdFx0b3BlcmFuZHMuYWRkKHJlZHVjZWQpO1xuXHR9XG5cdHRoaXMub3BuZHMgPSBvcGVyYW5kcy52YWx1ZXMoKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9SLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5PUi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPUjtcblxuT1IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIE9SKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5vcG5kcyA9PT0gb3RoZXIub3BuZHM7XG5cdH1cbn07XG5cbk9SLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLm9wbmRzLCBcIk9SXCIpO1xufTtcblxuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuT1IucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wbmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHRoaXMub3BuZHNbaV0uZXZhbHVhdGUocGFyc2VyLCBvdXRlckNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuT1IucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gVGhlIE9SIGNvbnRleHQgaXMgdHJ1ZSBpZiBhbnkgZWxlbWVudCBpcyB0cnVlXG5cdFx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdFx0fSBlbHNlIGlmIChldmFsdWF0ZWQgIT09IG51bGwpIHtcblx0XHRcdC8vIFJlZHVjZSB0aGUgcmVzdWx0IGJ5IHNraXBwaW5nIGZhbHNlIGVsZW1lbnRzXG5cdFx0XHRvcGVyYW5kcy5wdXNoKGV2YWx1YXRlZCk7XG5cdFx0fVxuXHR9XG5cdGlmICghZGlmZmVycykge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGlmIChvcGVyYW5kcy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBhbGwgZWxlbWVudHMgd2VyZSBmYWxzZSwgc28gdGhlIE9SIGNvbnRleHQgaXMgZmFsc2Vcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbnVsbDtcblx0b3BlcmFuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRyZXR1cm4gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQocmVzdWx0LCBvKTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5PUi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiO1xuXHR0aGlzLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cyArPSBcInx8IFwiICsgby50b1N0cmluZygpO1xuXHR9KTtcblx0cmV0dXJuIHMubGVuZ3RoID4gMyA/IHMuc2xpY2UoMykgOiBzO1xufTtcblxuZXhwb3J0cy5TZW1hbnRpY0NvbnRleHQgPSBTZW1hbnRpY0NvbnRleHQ7XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGUgPSBQcmVjZWRlbmNlUHJlZGljYXRlO1xuZXhwb3J0cy5QcmVkaWNhdGUgPSBQcmVkaWNhdGU7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyAgQW4gQVROIHRyYW5zaXRpb24gYmV0d2VlbiBhbnkgdHdvIEFUTiBzdGF0ZXMuICBTdWJjbGFzc2VzIGRlZmluZVxuLy8gIGF0b20sIHNldCwgZXBzaWxvbiwgYWN0aW9uLCBwcmVkaWNhdGUsIHJ1bGUgdHJhbnNpdGlvbnMuXG4vL1xuLy8gIDxwPlRoaXMgaXMgYSBvbmUgd2F5IGxpbmsuICBJdCBlbWFuYXRlcyBmcm9tIGEgc3RhdGUgKHVzdWFsbHkgdmlhIGEgbGlzdCBvZlxuLy8gIHRyYW5zaXRpb25zKSBhbmQgaGFzIGEgdGFyZ2V0IHN0YXRlLjwvcD5cbi8vXG4vLyAgPHA+U2luY2Ugd2UgbmV2ZXIgaGF2ZSB0byBjaGFuZ2UgdGhlIEFUTiB0cmFuc2l0aW9ucyBvbmNlIHdlIGNvbnN0cnVjdCBpdCxcbi8vICB3ZSBjYW4gZml4IHRoZXNlIHRyYW5zaXRpb25zIGFzIHNwZWNpZmljIGNsYXNzZXMuIFRoZSBERkEgdHJhbnNpdGlvbnNcbi8vICBvbiB0aGUgb3RoZXIgaGFuZCBuZWVkIHRvIHVwZGF0ZSB0aGUgbGFiZWxzIGFzIGl0IGFkZHMgdHJhbnNpdGlvbnMgdG9cbi8vICB0aGUgc3RhdGVzLiBXZSdsbCB1c2UgdGhlIHRlcm0gRWRnZSBmb3IgdGhlIERGQSB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb21cbi8vICBBVE4gdHJhbnNpdGlvbnMuPC9wPlxuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgUHJlZGljYXRlID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5QcmVkaWNhdGU7XG52YXIgUHJlY2VkZW5jZVByZWRpY2F0ZSA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuUHJlY2VkZW5jZVByZWRpY2F0ZTtcblxuZnVuY3Rpb24gVHJhbnNpdGlvbiAodGFyZ2V0KSB7XG4gICAgLy8gVGhlIHRhcmdldCBvZiB0aGlzIHRyYW5zaXRpb24uXG4gICAgaWYgKHRhcmdldD09PXVuZGVmaW5lZCB8fCB0YXJnZXQ9PT1udWxsKSB7XG4gICAgICAgIHRocm93IFwidGFyZ2V0IGNhbm5vdCBiZSBudWxsLlwiO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAvLyBBcmUgd2UgZXBzaWxvbiwgYWN0aW9uLCBzZW1wcmVkP1xuICAgIHRoaXMuaXNFcHNpbG9uID0gZmFsc2U7XG4gICAgdGhpcy5sYWJlbCA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG4gICAgLy8gY29uc3RhbnRzIGZvciBzZXJpYWxpemF0aW9uXG5UcmFuc2l0aW9uLkVQU0lMT04gPSAxO1xuVHJhbnNpdGlvbi5SQU5HRSA9IDI7XG5UcmFuc2l0aW9uLlJVTEUgPSAzO1xuVHJhbnNpdGlvbi5QUkVESUNBVEUgPSA0OyAvLyBlLmcuLCB7aXNUeXBlKGlucHV0LkxUKDEpKX0/XG5UcmFuc2l0aW9uLkFUT00gPSA1O1xuVHJhbnNpdGlvbi5BQ1RJT04gPSA2O1xuVHJhbnNpdGlvbi5TRVQgPSA3OyAvLyB+KEF8Qikgb3IgfmF0b20sIHdpbGRjYXJkLCB3aGljaCBjb252ZXJ0IHRvIG5leHQgMlxuVHJhbnNpdGlvbi5OT1RfU0VUID0gODtcblRyYW5zaXRpb24uV0lMRENBUkQgPSA5O1xuVHJhbnNpdGlvbi5QUkVDRURFTkNFID0gMTA7XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvbk5hbWVzID0gW1xuICAgICAgICAgICAgXCJJTlZBTElEXCIsXG4gICAgICAgICAgICBcIkVQU0lMT05cIixcbiAgICAgICAgICAgIFwiUkFOR0VcIixcbiAgICAgICAgICAgIFwiUlVMRVwiLFxuICAgICAgICAgICAgXCJQUkVESUNBVEVcIixcbiAgICAgICAgICAgIFwiQVRPTVwiLFxuICAgICAgICAgICAgXCJBQ1RJT05cIixcbiAgICAgICAgICAgIFwiU0VUXCIsXG4gICAgICAgICAgICBcIk5PVF9TRVRcIixcbiAgICAgICAgICAgIFwiV0lMRENBUkRcIixcbiAgICAgICAgICAgIFwiUFJFQ0VERU5DRVwiXG4gICAgICAgIF07XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvblR5cGVzID0ge1xuICAgICAgICBFcHNpbG9uVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5FUFNJTE9OLFxuICAgICAgICBSYW5nZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUkFOR0UsXG4gICAgICAgIFJ1bGVUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLlJVTEUsXG4gICAgICAgIFByZWRpY2F0ZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUFJFRElDQVRFLFxuICAgICAgICBBdG9tVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5BVE9NLFxuICAgICAgICBBY3Rpb25UcmFuc2l0aW9uOiBUcmFuc2l0aW9uLkFDVElPTixcbiAgICAgICAgU2V0VHJhbnNpdGlvbjogVHJhbnNpdGlvbi5TRVQsXG4gICAgICAgIE5vdFNldFRyYW5zaXRpb246IFRyYW5zaXRpb24uTk9UX1NFVCxcbiAgICAgICAgV2lsZGNhcmRUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLldJTERDQVJELFxuICAgICAgICBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5QUkVDRURFTkNFXG4gICAgfTtcblxuXG4vLyBUT0RPOiBtYWtlIGFsbCB0cmFuc2l0aW9ucyBzZXRzPyBubywgc2hvdWxkIHJlbW92ZSBzZXQgZWRnZXNcbmZ1bmN0aW9uIEF0b21UcmFuc2l0aW9uKHRhcmdldCwgbGFiZWwpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMubGFiZWxfID0gbGFiZWw7IC8vIFRoZSB0b2tlbiB0eXBlIG9yIGNoYXJhY3RlciB2YWx1ZTsgb3IsIHNpZ25pZmllcyBzcGVjaWFsIGxhYmVsLlxuICAgIHRoaXMubGFiZWwgPSB0aGlzLm1ha2VMYWJlbCgpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFUT007XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQXRvbVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbVRyYW5zaXRpb247XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICBzLmFkZE9uZSh0aGlzLmxhYmVsXyk7XG4gICAgcmV0dXJuIHM7XG59O1xuXG5BdG9tVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbF8gPT09IHN5bWJvbDtcbn07XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5sYWJlbF87XG59O1xuXG5mdW5jdGlvbiBSdWxlVHJhbnNpdGlvbihydWxlU3RhcnQsIHJ1bGVJbmRleCwgcHJlY2VkZW5jZSwgZm9sbG93U3RhdGUpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHJ1bGVTdGFydCk7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXg7IC8vIHB0ciB0byB0aGUgcnVsZSBkZWZpbml0aW9uIG9iamVjdCBmb3IgdGhpcyBydWxlIHJlZlxuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5mb2xsb3dTdGF0ZSA9IGZvbGxvd1N0YXRlOyAvLyB3aGF0IG5vZGUgdG8gYmVnaW4gY29tcHV0YXRpb25zIGZvbGxvd2luZyByZWYgdG8gcnVsZVxuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlJVTEU7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcblJ1bGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVUcmFuc2l0aW9uO1xuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5cbmZ1bmN0aW9uIEVwc2lsb25UcmFuc2l0aW9uKHRhcmdldCwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybikge1xuXHRUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5FUFNJTE9OO1xuICAgIHRoaXMuaXNFcHNpbG9uID0gdHJ1ZTtcbiAgICB0aGlzLm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSBvdXRlcm1vc3RQcmVjZWRlbmNlUmV0dXJuO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbkVwc2lsb25UcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVwc2lsb25UcmFuc2l0aW9uO1xuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuRXBzaWxvblRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcImVwc2lsb25cIjtcbn07XG5cbmZ1bmN0aW9uIFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIHN0YXJ0LCBzdG9wKSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5SQU5HRTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5zdG9wID0gc3RvcDtcbiAgICB0aGlzLmxhYmVsID0gdGhpcy5tYWtlTGFiZWwoKTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmdlVHJhbnNpdGlvbjtcblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHMuYWRkUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5zdG9wKTtcbiAgICByZXR1cm4gcztcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gc3ltYm9sID49IHRoaXMuc3RhcnQgJiYgc3ltYm9sIDw9IHRoaXMuc3RvcDtcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0YXJ0KSArIFwiJy4uJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0b3ApICsgXCInXCI7XG59O1xuXG5mdW5jdGlvbiBBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlBSRURJQ0FURTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleDtcbiAgICB0aGlzLmlzQ3R4RGVwZW5kZW50ID0gaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUuZ2V0UHJlZGljYXRlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBuZXcgUHJlZGljYXRlKHRoaXMucnVsZUluZGV4LCB0aGlzLnByZWRJbmRleCwgdGhpcy5pc0N0eERlcGVuZGVudCk7XG59O1xuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwcmVkX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMucHJlZEluZGV4O1xufTtcblxuZnVuY3Rpb24gQWN0aW9uVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgsIGlzQ3R4RGVwZW5kZW50KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFDVElPTjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg9PT11bmRlZmluZWQgPyAtMSA6IGFjdGlvbkluZGV4O1xuICAgIHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudD09PXVuZGVmaW5lZCA/IGZhbHNlIDogaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BY3Rpb25UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY3Rpb25UcmFuc2l0aW9uO1xuXG5cbkFjdGlvblRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiYWN0aW9uX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMuYWN0aW9uSW5kZXg7XG59O1xuXG5cbi8vIEEgdHJhbnNpdGlvbiBjb250YWluaW5nIGEgc2V0IG9mIHZhbHVlcy5cbmZ1bmN0aW9uIFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlNFVDtcbiAgICBpZiAoc2V0ICE9PXVuZGVmaW5lZCAmJiBzZXQgIT09bnVsbCkge1xuICAgICAgICB0aGlzLmxhYmVsID0gc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFiZWwgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgdGhpcy5sYWJlbC5hZGRPbmUoVG9rZW4uSU5WQUxJRF9UWVBFKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5TZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNldFRyYW5zaXRpb247XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwuY29udGFpbnMoc3ltYm9sKTtcbn07XG5cblxuU2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwudG9TdHJpbmcoKTtcbn07XG5cbmZ1bmN0aW9uIE5vdFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0U2V0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCwgc2V0KTtcblx0dGhpcy5zZXJpYWxpemF0aW9uVHlwZSA9IFRyYW5zaXRpb24uTk9UX1NFVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZXRUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5Ob3RTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vdFNldFRyYW5zaXRpb247XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHN5bWJvbCA+PSBtaW5Wb2NhYlN5bWJvbCAmJiBzeW1ib2wgPD0gbWF4Vm9jYWJTeW1ib2wgJiZcblx0XHRcdCFTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzLmNhbGwodGhpcywgc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgbWF4Vm9jYWJTeW1ib2wpO1xufTtcblxuTm90U2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuICd+JyArIFNldFRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyk7XG59O1xuXG5mdW5jdGlvbiBXaWxkY2FyZFRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5XSUxEQ0FSRDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXaWxkY2FyZFRyYW5zaXRpb247XG5cblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBzeW1ib2wgPj0gbWluVm9jYWJTeW1ib2wgJiYgc3ltYm9sIDw9IG1heFZvY2FiU3ltYm9sO1xufTtcblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIuXCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHByZWNlZGVuY2UpIHtcblx0QWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5QUkVDRURFTkNFO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5nZXRQcmVkaWNhdGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlKHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucHJlY2VkZW5jZSArIFwiID49IF9wXCI7XG59O1xuXG5leHBvcnRzLlRyYW5zaXRpb24gPSBUcmFuc2l0aW9uO1xuZXhwb3J0cy5BdG9tVHJhbnNpdGlvbiA9IEF0b21UcmFuc2l0aW9uO1xuZXhwb3J0cy5TZXRUcmFuc2l0aW9uID0gU2V0VHJhbnNpdGlvbjtcbmV4cG9ydHMuTm90U2V0VHJhbnNpdGlvbiA9IE5vdFNldFRyYW5zaXRpb247XG5leHBvcnRzLlJ1bGVUcmFuc2l0aW9uID0gUnVsZVRyYW5zaXRpb247XG5leHBvcnRzLkFjdGlvblRyYW5zaXRpb24gPSBBY3Rpb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5FcHNpbG9uVHJhbnNpdGlvbiA9IEVwc2lsb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5SYW5nZVRyYW5zaXRpb24gPSBSYW5nZVRyYW5zaXRpb247XG5leHBvcnRzLldpbGRjYXJkVHJhbnNpdGlvbiA9IFdpbGRjYXJkVHJhbnNpdGlvbjtcbmV4cG9ydHMuUHJlZGljYXRlVHJhbnNpdGlvbiA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydHMuQVROID0gcmVxdWlyZSgnLi9BVE4nKS5BVE47XG5leHBvcnRzLkFUTkRlc2VyaWFsaXplciA9IHJlcXVpcmUoJy4vQVRORGVzZXJpYWxpemVyJykuQVRORGVzZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vTGV4ZXJBVE5TaW11bGF0b3InKS5MZXhlckFUTlNpbXVsYXRvcjtcbmV4cG9ydHMuUGFyc2VyQVROU2ltdWxhdG9yID0gcmVxdWlyZSgnLi9QYXJzZXJBVE5TaW11bGF0b3InKS5QYXJzZXJBVE5TaW11bGF0b3I7XG5leHBvcnRzLlByZWRpY3Rpb25Nb2RlID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uTW9kZScpLlByZWRpY3Rpb25Nb2RlO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFNldCA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5TZXQ7XG52YXIgREZBU3RhdGUgPSByZXF1aXJlKCcuL0RGQVN0YXRlJykuREZBU3RhdGU7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gcmVxdWlyZSgnLi4vYXRuL0FUTlN0YXRlJykuU3Rhckxvb3BFbnRyeVN0YXRlO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBERkFTZXJpYWxpemVyID0gcmVxdWlyZSgnLi9ERkFTZXJpYWxpemVyJykuREZBU2VyaWFsaXplcjtcbnZhciBMZXhlckRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5MZXhlckRGQVNlcmlhbGl6ZXI7XG5cblxuXG5mdW5jdGlvbiBERkEoYXRuU3RhcnRTdGF0ZSwgZGVjaXNpb24pIHtcblx0aWYgKGRlY2lzaW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRkZWNpc2lvbiA9IDA7XG5cdH1cblx0Ly8gRnJvbSB3aGljaCBBVE4gc3RhdGUgZGlkIHdlIGNyZWF0ZSB0aGlzIERGQT9cblx0dGhpcy5hdG5TdGFydFN0YXRlID0gYXRuU3RhcnRTdGF0ZTtcblx0dGhpcy5kZWNpc2lvbiA9IGRlY2lzaW9uO1xuXHQvLyBBIHNldCBvZiBhbGwgREZBIHN0YXRlcy4gVXNlIHtAbGluayBNYXB9IHNvIHdlIGNhbiBnZXQgb2xkIHN0YXRlIGJhY2tcblx0Ly8gKHtAbGluayBTZXR9IG9ubHkgYWxsb3dzIHlvdSB0byBzZWUgaWYgaXQncyB0aGVyZSkuXG5cdHRoaXMuX3N0YXRlcyA9IG5ldyBTZXQoKTtcblx0dGhpcy5zMCA9IG51bGw7XG5cdC8vIHtAY29kZSB0cnVlfSBpZiB0aGlzIERGQSBpcyBmb3IgYSBwcmVjZWRlbmNlIGRlY2lzaW9uOyBvdGhlcndpc2UsXG5cdC8vIHtAY29kZSBmYWxzZX0uIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmllbGQgZm9yIHtAbGluayAvL2lzUHJlY2VkZW5jZURmYX0sXG5cdC8vIHtAbGluayAvL3NldFByZWNlZGVuY2VEZmF9LlxuXHR0aGlzLnByZWNlZGVuY2VEZmEgPSBmYWxzZTtcbiAgICBpZiAoYXRuU3RhcnRTdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSlcbiAgICB7XG4gICAgICAgIGlmIChhdG5TdGFydFN0YXRlLmlzUHJlY2VkZW5jZURlY2lzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnByZWNlZGVuY2VEZmEgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHByZWNlZGVuY2VTdGF0ZSA9IG5ldyBERkFTdGF0ZShudWxsLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLmVkZ2VzID0gW107XG4gICAgICAgICAgICBwcmVjZWRlbmNlU3RhdGUuaXNBY2NlcHRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLnJlcXVpcmVzRnVsbENvbnRleHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuczAgPSBwcmVjZWRlbmNlU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBHZXQgdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHNwZWNpZmljIHByZWNlZGVuY2UgdmFsdWUuXG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2UgVGhlIGN1cnJlbnQgcHJlY2VkZW5jZS5cbi8vIEByZXR1cm4gVGhlIHN0YXJ0IHN0YXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwcmVjZWRlbmNlLCBvclxuLy8ge0Bjb2RlIG51bGx9IGlmIG5vIHN0YXJ0IHN0YXRlIGV4aXN0cyBmb3IgdGhlIHNwZWNpZmllZCBwcmVjZWRlbmNlLlxuLy9cbi8vIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgaXMgbm90IGEgcHJlY2VkZW5jZSBERkEuXG4vLyBAc2VlIC8vaXNQcmVjZWRlbmNlRGZhKClcblxuREZBLnByb3RvdHlwZS5nZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKHByZWNlZGVuY2UpIHtcblx0aWYgKCEodGhpcy5wcmVjZWRlbmNlRGZhKSkge1xuXHRcdHRocm93IChcIk9ubHkgcHJlY2VkZW5jZSBERkFzIG1heSBjb250YWluIGEgcHJlY2VkZW5jZSBzdGFydCBzdGF0ZS5cIik7XG5cdH1cblx0Ly8gczAuZWRnZXMgaXMgbmV2ZXIgbnVsbCBmb3IgYSBwcmVjZWRlbmNlIERGQVxuXHRpZiAocHJlY2VkZW5jZSA8IDAgfHwgcHJlY2VkZW5jZSA+PSB0aGlzLnMwLmVkZ2VzLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiB0aGlzLnMwLmVkZ2VzW3ByZWNlZGVuY2VdIHx8IG51bGw7XG59O1xuXG4vLyBTZXQgdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHNwZWNpZmljIHByZWNlZGVuY2UgdmFsdWUuXG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2UgVGhlIGN1cnJlbnQgcHJlY2VkZW5jZS5cbi8vIEBwYXJhbSBzdGFydFN0YXRlIFRoZSBzdGFydCBzdGF0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWRcbi8vIHByZWNlZGVuY2UuXG4vL1xuLy8gQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhpcyBpcyBub3QgYSBwcmVjZWRlbmNlIERGQS5cbi8vIEBzZWUgLy9pc1ByZWNlZGVuY2VEZmEoKVxuLy9cbkRGQS5wcm90b3R5cGUuc2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwcmVjZWRlbmNlLCBzdGFydFN0YXRlKSB7XG5cdGlmICghKHRoaXMucHJlY2VkZW5jZURmYSkpIHtcblx0XHR0aHJvdyAoXCJPbmx5IHByZWNlZGVuY2UgREZBcyBtYXkgY29udGFpbiBhIHByZWNlZGVuY2Ugc3RhcnQgc3RhdGUuXCIpO1xuXHR9XG5cdGlmIChwcmVjZWRlbmNlIDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIHN5bmNocm9uaXphdGlvbiBvbiBzMCBoZXJlIGlzIG9rLiB3aGVuIHRoZSBERkEgaXMgdHVybmVkIGludG8gYVxuXHQvLyBwcmVjZWRlbmNlIERGQSwgczAgd2lsbCBiZSBpbml0aWFsaXplZCBvbmNlIGFuZCBub3QgdXBkYXRlZCBhZ2FpblxuXHQvLyBzMC5lZGdlcyBpcyBuZXZlciBudWxsIGZvciBhIHByZWNlZGVuY2UgREZBXG5cdHRoaXMuczAuZWRnZXNbcHJlY2VkZW5jZV0gPSBzdGFydFN0YXRlO1xufTtcblxuLy9cbi8vIFNldHMgd2hldGhlciB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkEuIElmIHRoZSBzcGVjaWZpZWQgdmFsdWUgZGlmZmVyc1xuLy8gZnJvbSB0aGUgY3VycmVudCBERkEgY29uZmlndXJhdGlvbiwgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSB0YWtlbjtcbi8vIG90aGVyd2lzZSBubyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBjdXJyZW50IERGQS5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+VGhlIHtAbGluayAvL3N0YXRlc30gbWFwIGlzIGNsZWFyZWQ8L2xpPlxuLy8gPGxpPklmIHtAY29kZSBwcmVjZWRlbmNlRGZhfSBpcyB7QGNvZGUgZmFsc2V9LCB0aGUgaW5pdGlhbCBzdGF0ZVxuLy8ge0BsaW5rIC8vczB9IGlzIHNldCB0byB7QGNvZGUgbnVsbH07IG90aGVyd2lzZSwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbi8vIHtAbGluayBERkFTdGF0ZX0gd2l0aCBhbiBlbXB0eSBvdXRnb2luZyB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBhcnJheSB0b1xuLy8gc3RvcmUgdGhlIHN0YXJ0IHN0YXRlcyBmb3IgaW5kaXZpZHVhbCBwcmVjZWRlbmNlIHZhbHVlcy48L2xpPlxuLy8gPGxpPlRoZSB7QGxpbmsgLy9wcmVjZWRlbmNlRGZhfSBmaWVsZCBpcyB1cGRhdGVkPC9saT5cbi8vIDwvdWw+XG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2VEZmEge0Bjb2RlIHRydWV9IGlmIHRoaXMgaXMgYSBwcmVjZWRlbmNlIERGQTsgb3RoZXJ3aXNlLFxuLy8ge0Bjb2RlIGZhbHNlfVxuXG5ERkEucHJvdG90eXBlLnNldFByZWNlZGVuY2VEZmEgPSBmdW5jdGlvbihwcmVjZWRlbmNlRGZhKSB7XG5cdGlmICh0aGlzLnByZWNlZGVuY2VEZmEhPT1wcmVjZWRlbmNlRGZhKSB7XG5cdFx0dGhpcy5fc3RhdGVzID0gbmV3IERGQVN0YXRlc1NldCgpO1xuXHRcdGlmIChwcmVjZWRlbmNlRGZhKSB7XG5cdFx0XHR2YXIgcHJlY2VkZW5jZVN0YXRlID0gbmV3IERGQVN0YXRlKG51bGwsIG5ldyBBVE5Db25maWdTZXQoKSk7XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUuZWRnZXMgPSBbXTtcblx0XHRcdHByZWNlZGVuY2VTdGF0ZS5pc0FjY2VwdFN0YXRlID0gZmFsc2U7XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUucmVxdWlyZXNGdWxsQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zMCA9IHByZWNlZGVuY2VTdGF0ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zMCA9IG51bGw7XG5cdFx0fVxuXHRcdHRoaXMucHJlY2VkZW5jZURmYSA9IHByZWNlZGVuY2VEZmE7XG5cdH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShERkEucHJvdG90eXBlLCBcInN0YXRlc1wiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZXM7XG5cdH1cbn0pO1xuXG4vLyBSZXR1cm4gYSBsaXN0IG9mIGFsbCBzdGF0ZXMgaW4gdGhpcyBERkEsIG9yZGVyZWQgYnkgc3RhdGUgbnVtYmVyLlxuREZBLnByb3RvdHlwZS5zb3J0ZWRTdGF0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGxpc3QgPSB0aGlzLl9zdGF0ZXMudmFsdWVzKCk7XG5cdHJldHVybiBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xuXHRcdHJldHVybiBhLnN0YXRlTnVtYmVyIC0gYi5zdGF0ZU51bWJlcjtcblx0fSk7XG59O1xuXG5ERkEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24obGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRpZiAodGhpcy5zMCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHZhciBzZXJpYWxpemVyID0gbmV3IERGQVNlcmlhbGl6ZXIodGhpcywgbGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZXIudG9TdHJpbmcoKTtcbn07XG5cbkRGQS5wcm90b3R5cGUudG9MZXhlclN0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5zMCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHZhciBzZXJpYWxpemVyID0gbmV3IExleGVyREZBU2VyaWFsaXplcih0aGlzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZXIudG9TdHJpbmcoKTtcbn07XG5cbmV4cG9ydHMuREZBID0gREZBO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBBIERGQSB3YWxrZXIgdGhhdCBrbm93cyBob3cgdG8gZHVtcCB0aGVtIHRvIHNlcmlhbGl6ZWQgc3RyaW5ncy4jL1xuXG5cbmZ1bmN0aW9uIERGQVNlcmlhbGl6ZXIoZGZhLCBsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dGhpcy5kZmEgPSBkZmE7XG5cdHRoaXMubGl0ZXJhbE5hbWVzID0gbGl0ZXJhbE5hbWVzIHx8IFtdO1xuXHR0aGlzLnN5bWJvbGljTmFtZXMgPSBzeW1ib2xpY05hbWVzIHx8IFtdO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuREZBU2VyaWFsaXplci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgIGlmKHRoaXMuZGZhLnMwID09PSBudWxsKSB7XG4gICAgICAgcmV0dXJuIG51bGw7XG4gICB9XG4gICB2YXIgYnVmID0gXCJcIjtcbiAgIHZhciBzdGF0ZXMgPSB0aGlzLmRmYS5zb3J0ZWRTdGF0ZXMoKTtcbiAgIGZvcih2YXIgaT0wO2k8c3RhdGVzLmxlbmd0aDtpKyspIHtcbiAgICAgICB2YXIgcyA9IHN0YXRlc1tpXTtcbiAgICAgICBpZihzLmVkZ2VzIT09bnVsbCkge1xuICAgICAgICAgICAgdmFyIG4gPSBzLmVkZ2VzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcih2YXIgaj0wO2o8bjtqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9IHMuZWRnZXNbal0gfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBpZih0IT09bnVsbCAmJiB0LnN0YXRlTnVtYmVyICE9PSAweDdGRkZGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQodGhpcy5nZXRTdGF0ZVN0cmluZyhzKSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQoXCItXCIpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0RWRnZUxhYmVsKGopKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdChcIi0+XCIpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0U3RhdGVTdHJpbmcodCkpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KCdcXG4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgfVxuICAgfVxuICAgcmV0dXJuIGJ1Zi5sZW5ndGg9PT0wID8gbnVsbCA6IGJ1Zjtcbn07XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldEVkZ2VMYWJlbCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZiAoaT09PTApIHtcbiAgICAgICAgcmV0dXJuIFwiRU9GXCI7XG4gICAgfSBlbHNlIGlmKHRoaXMubGl0ZXJhbE5hbWVzICE9PW51bGwgfHwgdGhpcy5zeW1ib2xpY05hbWVzIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXRlcmFsTmFtZXNbaS0xXSB8fCB0aGlzLnN5bWJvbGljTmFtZXNbaS0xXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShpLTEpO1xuICAgIH1cbn07XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldFN0YXRlU3RyaW5nID0gZnVuY3Rpb24ocykge1xuICAgIHZhciBiYXNlU3RhdGVTdHIgPSAoIHMuaXNBY2NlcHRTdGF0ZSA/IFwiOlwiIDogXCJcIikgKyBcInNcIiArIHMuc3RhdGVOdW1iZXIgKyAoIHMucmVxdWlyZXNGdWxsQ29udGV4dCA/IFwiXlwiIDogXCJcIik7XG4gICAgaWYocy5pc0FjY2VwdFN0YXRlKSB7XG4gICAgICAgIGlmIChzLnByZWRpY2F0ZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHIgKyBcIj0+XCIgKyBzLnByZWRpY2F0ZXMudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHIgKyBcIj0+XCIgKyBzLnByZWRpY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHI7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gTGV4ZXJERkFTZXJpYWxpemVyKGRmYSkge1xuXHRERkFTZXJpYWxpemVyLmNhbGwodGhpcywgZGZhLCBudWxsKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERGQVNlcmlhbGl6ZXIucHJvdG90eXBlKTtcbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckRGQVNlcmlhbGl6ZXI7XG5cbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUuZ2V0RWRnZUxhYmVsID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpICsgXCInXCI7XG59O1xuXG5leHBvcnRzLkRGQVNlcmlhbGl6ZXIgPSBERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckRGQVNlcmlhbGl6ZXIgPSBMZXhlckRGQVNlcmlhbGl6ZXI7XG5cbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBIYXNoID0gVXRpbHMuSGFzaDtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG5cbi8vIE1hcCBhIHByZWRpY2F0ZSB0byBhIHByZWRpY3RlZCBhbHRlcm5hdGl2ZS4vLy9cblxuZnVuY3Rpb24gUHJlZFByZWRpY3Rpb24ocHJlZCwgYWx0KSB7XG5cdHRoaXMuYWx0ID0gYWx0O1xuXHR0aGlzLnByZWQgPSBwcmVkO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUHJlZFByZWRpY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcIihcIiArIHRoaXMucHJlZCArIFwiLCBcIiArIHRoaXMuYWx0ICsgXCIpXCI7XG59O1xuXG4vLyBBIERGQSBzdGF0ZSByZXByZXNlbnRzIGEgc2V0IG9mIHBvc3NpYmxlIEFUTiBjb25maWd1cmF0aW9ucy5cbi8vIEFzIEFobywgU2V0aGksIFVsbG1hbiBwLiAxMTcgc2F5cyBcIlRoZSBERkEgdXNlcyBpdHMgc3RhdGVcbi8vIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIHN0YXRlcyB0aGUgQVROIGNhbiBiZSBpbiBhZnRlclxuLy8gcmVhZGluZyBlYWNoIGlucHV0IHN5bWJvbC4gVGhhdCBpcyB0byBzYXksIGFmdGVyIHJlYWRpbmdcbi8vIGlucHV0IGExYTIuLmFuLCB0aGUgREZBIGlzIGluIGEgc3RhdGUgdGhhdCByZXByZXNlbnRzIHRoZVxuLy8gc3Vic2V0IFQgb2YgdGhlIHN0YXRlcyBvZiB0aGUgQVROIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZVxuLy8gQVROJ3Mgc3RhcnQgc3RhdGUgYWxvbmcgc29tZSBwYXRoIGxhYmVsZWQgYTFhMi4uYW4uXCJcbi8vIEluIGNvbnZlbnRpb25hbCBORkEmcmFycjtERkEgY29udmVyc2lvbiwgdGhlcmVmb3JlLCB0aGUgc3Vic2V0IFRcbi8vIHdvdWxkIGJlIGEgYml0c2V0IHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIHN0YXRlcyB0aGVcbi8vIEFUTiBjb3VsZCBiZSBpbi4gV2UgbmVlZCB0byB0cmFjayB0aGUgYWx0IHByZWRpY3RlZCBieSBlYWNoXG4vLyBzdGF0ZSBhcyB3ZWxsLCBob3dldmVyLiBNb3JlIGltcG9ydGFudGx5LCB3ZSBuZWVkIHRvIG1haW50YWluXG4vLyBhIHN0YWNrIG9mIHN0YXRlcywgdHJhY2tpbmcgdGhlIGNsb3N1cmUgb3BlcmF0aW9ucyBhcyB0aGV5XG4vLyBqdW1wIGZyb20gcnVsZSB0byBydWxlLCBlbXVsYXRpbmcgcnVsZSBpbnZvY2F0aW9ucyAobWV0aG9kIGNhbGxzKS5cbi8vIEkgaGF2ZSB0byBhZGQgYSBzdGFjayB0byBzaW11bGF0ZSB0aGUgcHJvcGVyIGxvb2thaGVhZCBzZXF1ZW5jZXMgZm9yXG4vLyB0aGUgdW5kZXJseWluZyBMTCBncmFtbWFyIGZyb20gd2hpY2ggdGhlIEFUTiB3YXMgZGVyaXZlZC5cbi8vXG4vLyA8cD5JIHVzZSBhIHNldCBvZiBBVE5Db25maWcgb2JqZWN0cyBub3Qgc2ltcGxlIHN0YXRlcy4gQW4gQVROQ29uZmlnXG4vLyBpcyBib3RoIGEgc3RhdGUgKGFsYSBub3JtYWwgY29udmVyc2lvbikgYW5kIGEgUnVsZUNvbnRleHQgZGVzY3JpYmluZ1xuLy8gdGhlIGNoYWluIG9mIHJ1bGVzIChpZiBhbnkpIGZvbGxvd2VkIHRvIGFycml2ZSBhdCB0aGF0IHN0YXRlLjwvcD5cbi8vXG4vLyA8cD5BIERGQSBzdGF0ZSBtYXkgaGF2ZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgcGFydGljdWxhciBzdGF0ZSxcbi8vIGJ1dCB3aXRoIGRpZmZlcmVudCBBVE4gY29udGV4dHMgKHdpdGggc2FtZSBvciBkaWZmZXJlbnQgYWx0cylcbi8vIG1lYW5pbmcgdGhhdCBzdGF0ZSB3YXMgcmVhY2hlZCB2aWEgYSBkaWZmZXJlbnQgc2V0IG9mIHJ1bGUgaW52b2NhdGlvbnMuPC9wPlxuLy8gL1xuXG5mdW5jdGlvbiBERkFTdGF0ZShzdGF0ZU51bWJlciwgY29uZmlncykge1xuXHRpZiAoc3RhdGVOdW1iZXIgPT09IG51bGwpIHtcblx0XHRzdGF0ZU51bWJlciA9IC0xO1xuXHR9XG5cdGlmIChjb25maWdzID09PSBudWxsKSB7XG5cdFx0Y29uZmlncyA9IG5ldyBBVE5Db25maWdTZXQoKTtcblx0fVxuXHR0aGlzLnN0YXRlTnVtYmVyID0gc3RhdGVOdW1iZXI7XG5cdHRoaXMuY29uZmlncyA9IGNvbmZpZ3M7XG5cdC8vIHtAY29kZSBlZGdlc1tzeW1ib2xdfSBwb2ludHMgdG8gdGFyZ2V0IG9mIHN5bWJvbC4gU2hpZnQgdXAgYnkgMSBzbyAoLTEpXG5cdC8vIHtAbGluayBUb2tlbi8vRU9GfSBtYXBzIHRvIHtAY29kZSBlZGdlc1swXX0uXG5cdHRoaXMuZWRnZXMgPSBudWxsO1xuXHR0aGlzLmlzQWNjZXB0U3RhdGUgPSBmYWxzZTtcblx0Ly8gaWYgYWNjZXB0IHN0YXRlLCB3aGF0IHR0eXBlIGRvIHdlIG1hdGNoIG9yIGFsdCBkbyB3ZSBwcmVkaWN0P1xuXHQvLyBUaGlzIGlzIHNldCB0byB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9IHdoZW4ge0BsaW5rXG5cdC8vIC8vcHJlZGljYXRlc317QGNvZGUgIT1udWxsfSBvclxuXHQvLyB7QGxpbmsgLy9yZXF1aXJlc0Z1bGxDb250ZXh0fS5cblx0dGhpcy5wcmVkaWN0aW9uID0gMDtcblx0dGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID0gbnVsbDtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhpcyBzdGF0ZSB3YXMgY3JlYXRlZCBkdXJpbmcgU0xMIHByZWRpY3Rpb24gdGhhdFxuXHQvLyBkaXNjb3ZlcmVkIGEgY29uZmxpY3QgYmV0d2VlbiB0aGUgY29uZmlndXJhdGlvbnMgaW4gdGhlIHN0YXRlLiBGdXR1cmVcblx0Ly8ge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvci8vZXhlY0FUTn0gaW52b2NhdGlvbnMgaW1tZWRpYXRlbHkganVtcGVkIGRvaW5nXG5cdC8vIGZ1bGwgY29udGV4dCBwcmVkaWN0aW9uIGlmIHRoaXMgZmllbGQgaXMgdHJ1ZS5cblx0dGhpcy5yZXF1aXJlc0Z1bGxDb250ZXh0ID0gZmFsc2U7XG5cdC8vIER1cmluZyBTTEwgcGFyc2luZywgdGhpcyBpcyBhIGxpc3Qgb2YgcHJlZGljYXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlXG5cdC8vIEFUTiBjb25maWd1cmF0aW9ucyBvZiB0aGUgREZBIHN0YXRlLiBXaGVuIHdlIGhhdmUgcHJlZGljYXRlcyxcblx0Ly8ge0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0gaXMge0Bjb2RlIGZhbHNlfSBzaW5jZSBmdWxsIGNvbnRleHRcblx0Ly8gcHJlZGljdGlvbiBldmFsdWF0ZXMgcHJlZGljYXRlc1xuXHQvLyBvbi10aGUtZmx5LiBJZiB0aGlzIGlzIG5vdCBudWxsLCB0aGVuIHtAbGluayAvL3ByZWRpY3Rpb259IGlzXG5cdC8vIHtAbGluayBBVE4vL0lOVkFMSURfQUxUX05VTUJFUn0uXG5cdC8vXG5cdC8vIDxwPldlIG9ubHkgdXNlIHRoZXNlIGZvciBub24te0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0gYnV0XG5cdC8vIGNvbmZsaWN0aW5nIHN0YXRlcy4gVGhhdFxuXHQvLyBtZWFucyB3ZSBrbm93IGZyb20gdGhlIGNvbnRleHQgKGl0J3MgJCBvciB3ZSBkb24ndCBkaXAgaW50byBvdXRlclxuXHQvLyBjb250ZXh0KSB0aGF0IGl0J3MgYW4gYW1iaWd1aXR5IG5vdCBhIGNvbmZsaWN0LjwvcD5cblx0Ly9cblx0Ly8gPHA+VGhpcyBsaXN0IGlzIGNvbXB1dGVkIGJ5IHtAbGlua1xuXHQvLyBQYXJzZXJBVE5TaW11bGF0b3IvL3ByZWRpY2F0ZURGQVN0YXRlfS48L3A+XG5cdHRoaXMucHJlZGljYXRlcyA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBHZXQgdGhlIHNldCBvZiBhbGwgYWx0cyBtZW50aW9uZWQgYnkgYWxsIEFUTiBjb25maWd1cmF0aW9ucyBpbiB0aGlzXG4vLyBERkEgc3RhdGUuXG5ERkFTdGF0ZS5wcm90b3R5cGUuZ2V0QWx0U2V0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBhbHRzID0gbmV3IFNldCgpO1xuXHRpZiAodGhpcy5jb25maWdzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjID0gdGhpcy5jb25maWdzW2ldO1xuXHRcdFx0YWx0cy5hZGQoYy5hbHQpO1xuXHRcdH1cblx0fVxuXHRpZiAoYWx0cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYWx0cztcblx0fVxufTtcblxuLy8gVHdvIHtAbGluayBERkFTdGF0ZX0gaW5zdGFuY2VzIGFyZSBlcXVhbCBpZiB0aGVpciBBVE4gY29uZmlndXJhdGlvbiBzZXRzXG4vLyBhcmUgdGhlIHNhbWUuIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2VlIGlmIGEgc3RhdGUgYWxyZWFkeSBleGlzdHMuXG4vL1xuLy8gPHA+QmVjYXVzZSB0aGUgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBhbmQgbnVtYmVyIG9mIEFUTiBjb25maWd1cmF0aW9ucyBhcmVcbi8vIGZpbml0ZSwgdGhlcmUgaXMgYSBmaW5pdGUgbnVtYmVyIG9mIERGQSBzdGF0ZXMgdGhhdCBjYW4gYmUgcHJvY2Vzc2VkLlxuLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc2hvdyB0aGF0IHRoZSBhbGdvcml0aG0gdGVybWluYXRlcy48L3A+XG4vL1xuLy8gPHA+Q2Fubm90IHRlc3QgdGhlIERGQSBzdGF0ZSBudW1iZXJzIGhlcmUgYmVjYXVzZSBpblxuLy8ge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvci8vYWRkREZBU3RhdGV9IHdlIG5lZWQgdG8ga25vdyBpZiBhbnkgb3RoZXIgc3RhdGVcbi8vIGV4aXN0cyB0aGF0IGhhcyB0aGlzIGV4YWN0IHNldCBvZiBBVE4gY29uZmlndXJhdGlvbnMuIFRoZVxuLy8ge0BsaW5rIC8vc3RhdGVOdW1iZXJ9IGlzIGlycmVsZXZhbnQuPC9wPlxuREZBU3RhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdC8vIGNvbXBhcmUgc2V0IG9mIEFUTiBjb25maWd1cmF0aW9ucyBpbiB0aGlzIHNldCB3aXRoIG90aGVyXG5cdHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuXHRcdFx0KG90aGVyIGluc3RhbmNlb2YgREZBU3RhdGUgJiZcblx0XHRcdFx0dGhpcy5jb25maWdzLmVxdWFscyhvdGhlci5jb25maWdzKSk7XG59O1xuXG5ERkFTdGF0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiICsgdGhpcy5zdGF0ZU51bWJlciArIFwiOlwiICsgdGhpcy5jb25maWdzO1xuXHRpZih0aGlzLmlzQWNjZXB0U3RhdGUpIHtcbiAgICAgICAgcyA9IHMgKyBcIj0+XCI7XG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZXMgIT09IG51bGwpXG4gICAgICAgICAgICBzID0gcyArIHRoaXMucHJlZGljYXRlcztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcyA9IHMgKyB0aGlzLnByZWRpY3Rpb247XG4gICAgfVxuXHRyZXR1cm4gcztcbn07XG5cbkRGQVN0YXRlLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG5cdGhhc2gudXBkYXRlKHRoaXMuY29uZmlncyk7XG5cdGlmKHRoaXMuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGVzICE9PSBudWxsKVxuICAgICAgICAgICAgaGFzaC51cGRhdGUodGhpcy5wcmVkaWNhdGVzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGFzaC51cGRhdGUodGhpcy5wcmVkaWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5leHBvcnRzLkRGQVN0YXRlID0gREZBU3RhdGU7XG5leHBvcnRzLlByZWRQcmVkaWN0aW9uID0gUHJlZFByZWRpY3Rpb247XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydHMuREZBID0gcmVxdWlyZSgnLi9ERkEnKS5ERkE7XG5leHBvcnRzLkRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5ERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5MZXhlckRGQVNlcmlhbGl6ZXI7XG5leHBvcnRzLlByZWRQcmVkaWN0aW9uID0gcmVxdWlyZSgnLi9ERkFTdGF0ZScpLlByZWRQcmVkaWN0aW9uO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yTGlzdGVuZXJ9IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5XG4vLyBjZXJ0YWluIHBvdGVudGlhbCBjb3JyZWN0bmVzcyBhbmQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgaW4gZ3JhbW1hcnMuIFwiUmVwb3J0c1wiXG4vLyBhcmUgbWFkZSBieSBjYWxsaW5nIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfSB3aXRoIHRoZSBhcHByb3ByaWF0ZVxuLy8gbWVzc2FnZS5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+PGI+QW1iaWd1aXRpZXM8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgbW9yZSB0aGFuIG9uZSBwYXRoIHRocm91Z2ggdGhlXG4vLyBncmFtbWFyIGNhbiBtYXRjaCB0aGUgaW5wdXQuPC9saT5cbi8vIDxsaT48Yj5XZWFrIGNvbnRleHQgc2Vuc2l0aXZpdHk8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgZnVsbC1jb250ZXh0XG4vLyBwcmVkaWN0aW9uIHJlc29sdmVkIGFuIFNMTCBjb25mbGljdCB0byBhIHVuaXF1ZSBhbHRlcm5hdGl2ZSB3aGljaCBlcXVhbGVkIHRoZVxuLy8gbWluaW11bSBhbHRlcm5hdGl2ZSBvZiB0aGUgU0xMIGNvbmZsaWN0LjwvbGk+XG4vLyA8bGk+PGI+U3Ryb25nIChmb3JjZWQpIGNvbnRleHQgc2Vuc2l0aXZpdHk8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgdGhlXG4vLyBmdWxsLWNvbnRleHQgcHJlZGljdGlvbiByZXNvbHZlZCBhbiBTTEwgY29uZmxpY3QgdG8gYSB1bmlxdWUgYWx0ZXJuYXRpdmUsXG4vLyA8ZW0+YW5kPC9lbT4gdGhlIG1pbmltdW0gYWx0ZXJuYXRpdmUgb2YgdGhlIFNMTCBjb25mbGljdCB3YXMgZm91bmQgdG8gbm90IGJlXG4vLyBhIHRydWx5IHZpYWJsZSBhbHRlcm5hdGl2ZS4gVHdvLXN0YWdlIHBhcnNpbmcgY2Fubm90IGJlIHVzZWQgZm9yIGlucHV0cyB3aGVyZVxuLy8gdGhpcyBzaXR1YXRpb24gb2NjdXJzLjwvbGk+XG4vLyA8L3VsPlxuXG52YXIgQml0U2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkJpdFNldDtcbnZhciBFcnJvckxpc3RlbmVyID0gcmVxdWlyZSgnLi9FcnJvckxpc3RlbmVyJykuRXJyb3JMaXN0ZW5lcjtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoJy4vLi4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcblxuZnVuY3Rpb24gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIoZXhhY3RPbmx5KSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0ZXhhY3RPbmx5ID0gZXhhY3RPbmx5IHx8IHRydWU7XG5cdC8vIHdoZXRoZXIgYWxsIGFtYmlndWl0aWVzIG9yIG9ubHkgZXhhY3QgYW1iaWd1aXRpZXMgYXJlIHJlcG9ydGVkLlxuXHR0aGlzLmV4YWN0T25seSA9IGV4YWN0T25seTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsXG5cdFx0c3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG5cdGlmICh0aGlzLmV4YWN0T25seSAmJiAhZXhhY3QpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG1zZyA9IFwicmVwb3J0QW1iaWd1aXR5IGQ9XCIgK1xuXHRcdFx0dGhpcy5nZXREZWNpc2lvbkRlc2NyaXB0aW9uKHJlY29nbml6ZXIsIGRmYSkgK1xuXHRcdFx0XCI6IGFtYmlnQWx0cz1cIiArXG5cdFx0XHR0aGlzLmdldENvbmZsaWN0aW5nQWx0cyhhbWJpZ0FsdHMsIGNvbmZpZ3MpICtcblx0XHRcdFwiLCBpbnB1dD0nXCIgK1xuXHRcdFx0cmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQobmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkpICsgXCInXCI7XG5cdHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnKTtcbn07XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQgPSBmdW5jdGlvbihcblx0XHRyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKSB7XG5cdHZhciBtc2cgPSBcInJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCBkPVwiICtcblx0XHRcdHRoaXMuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbihyZWNvZ25pemVyLCBkZmEpICtcblx0XHRcdFwiLCBpbnB1dD0nXCIgK1xuXHRcdFx0cmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQobmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkpICsgXCInXCI7XG5cdHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnKTtcbn07XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgPSBmdW5jdGlvbihcblx0XHRyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncykge1xuXHR2YXIgbXNnID0gXCJyZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgZD1cIiArXG5cdFx0XHR0aGlzLmdldERlY2lzaW9uRGVzY3JpcHRpb24ocmVjb2duaXplciwgZGZhKSArXG5cdFx0XHRcIiwgaW5wdXQ9J1wiICtcblx0XHRcdHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXgpKSArIFwiJ1wiO1xuXHRyZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZyk7XG59O1xuXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSkge1xuXHR2YXIgZGVjaXNpb24gPSBkZmEuZGVjaXNpb247XG5cdHZhciBydWxlSW5kZXggPSBkZmEuYXRuU3RhcnRTdGF0ZS5ydWxlSW5kZXg7XG5cblx0dmFyIHJ1bGVOYW1lcyA9IHJlY29nbml6ZXIucnVsZU5hbWVzO1xuXHRpZiAocnVsZUluZGV4IDwgMCB8fCBydWxlSW5kZXggPj0gcnVsZU5hbWVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBcIlwiICsgZGVjaXNpb247XG5cdH1cblx0dmFyIHJ1bGVOYW1lID0gcnVsZU5hbWVzW3J1bGVJbmRleF0gfHwgbnVsbDtcblx0aWYgKHJ1bGVOYW1lID09PSBudWxsIHx8IHJ1bGVOYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiICsgZGVjaXNpb247XG5cdH1cblx0cmV0dXJuIFwiXCIgKyBkZWNpc2lvbiArIFwiIChcIiArIHJ1bGVOYW1lICsgXCIpXCI7XG59O1xuXG4vL1xuLy8gQ29tcHV0ZXMgdGhlIHNldCBvZiBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzIGZyb20gYVxuLy8gY29uZmlndXJhdGlvbiBzZXQsIGlmIHRoYXQgaW5mb3JtYXRpb24gd2FzIG5vdCBhbHJlYWR5IHByb3ZpZGVkIGJ5IHRoZVxuLy8gcGFyc2VyLlxuLy9cbi8vIEBwYXJhbSByZXBvcnRlZEFsdHMgVGhlIHNldCBvZiBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzLCBhc1xuLy8gcmVwb3J0ZWQgYnkgdGhlIHBhcnNlci5cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgY29uZmlndXJhdGlvbiBzZXQuXG4vLyBAcmV0dXJuIFJldHVybnMge0Bjb2RlIHJlcG9ydGVkQWx0c30gaWYgaXQgaXMgbm90IHtAY29kZSBudWxsfSwgb3RoZXJ3aXNlXG4vLyByZXR1cm5zIHRoZSBzZXQgb2YgYWx0ZXJuYXRpdmVzIHJlcHJlc2VudGVkIGluIHtAY29kZSBjb25maWdzfS5cbi8vXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzID0gZnVuY3Rpb24ocmVwb3J0ZWRBbHRzLCBjb25maWdzKSB7XG5cdGlmIChyZXBvcnRlZEFsdHMgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gcmVwb3J0ZWRBbHRzO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQml0U2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlncy5pdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdC5hZGQoY29uZmlncy5pdGVtc1tpXS5hbHQpO1xuXHR9XG5cdHJldHVybiBcIntcIiArIHJlc3VsdC52YWx1ZXMoKS5qb2luKFwiLCBcIikgKyBcIn1cIjtcbn07XG5cbmV4cG9ydHMuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIgPSBEaWFnbm9zdGljRXJyb3JMaXN0ZW5lcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBQcm92aWRlcyBhbiBlbXB0eSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yTGlzdGVuZXJ9LiBUaGVcbi8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBtZXRob2QgZG9lcyBub3RoaW5nLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYXNcbi8vIG5lY2Vzc2FyeS5cblxuZnVuY3Rpb24gRXJyb3JMaXN0ZW5lcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnN5bnRheEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSkge1xufTtcblxuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QW1iaWd1aXR5ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGV4YWN0LCBhbWJpZ0FsdHMsIGNvbmZpZ3MpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKSB7XG59O1xuXG5mdW5jdGlvbiBDb25zb2xlRXJyb3JMaXN0ZW5lcigpIHtcblx0RXJyb3JMaXN0ZW5lci5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQ29uc29sZUVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvckxpc3RlbmVyLnByb3RvdHlwZSk7XG5Db25zb2xlRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zb2xlRXJyb3JMaXN0ZW5lcjtcblxuLy9cbi8vIFByb3ZpZGVzIGEgZGVmYXVsdCBpbnN0YW5jZSBvZiB7QGxpbmsgQ29uc29sZUVycm9yTGlzdGVuZXJ9LlxuLy9cbkNvbnNvbGVFcnJvckxpc3RlbmVyLklOU1RBTkNFID0gbmV3IENvbnNvbGVFcnJvckxpc3RlbmVyKCk7XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIHByaW50cyBtZXNzYWdlcyB0byB7QGxpbmsgU3lzdGVtLy9lcnJ9IGNvbnRhaW5pbmcgdGhlXG4vLyB2YWx1ZXMgb2Yge0Bjb2RlIGxpbmV9LCB7QGNvZGUgY2hhclBvc2l0aW9uSW5MaW5lfSwgYW5kIHtAY29kZSBtc2d9IHVzaW5nXG4vLyB0aGUgZm9sbG93aW5nIGZvcm1hdC48L3A+XG4vL1xuLy8gPHByZT5cbi8vIGxpbmUgPGVtPmxpbmU8L2VtPjo8ZW0+Y2hhclBvc2l0aW9uSW5MaW5lPC9lbT4gPGVtPm1zZzwvZW0+XG4vLyA8L3ByZT5cbi8vXG5Db25zb2xlRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKSB7XG4gICAgY29uc29sZS5lcnJvcihcImxpbmUgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW4gKyBcIiBcIiArIG1zZyk7XG59O1xuXG5mdW5jdGlvbiBQcm94eUVycm9yTGlzdGVuZXIoZGVsZWdhdGVzKSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgICBpZiAoZGVsZWdhdGVzPT09bnVsbCkge1xuICAgICAgICB0aHJvdyBcImRlbGVnYXRlc1wiO1xuICAgIH1cbiAgICB0aGlzLmRlbGVnYXRlcyA9IGRlbGVnYXRlcztcblx0cmV0dXJuIHRoaXM7XG59XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yTGlzdGVuZXIucHJvdG90eXBlKTtcblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm94eUVycm9yTGlzdGVuZXI7XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKSB7XG4gICAgdGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5zeW50YXhFcnJvcihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEFtYmlndWl0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG4gICAgdGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5yZXBvcnRBbWJpZ3VpdHkocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGV4YWN0LCBhbWJpZ0FsdHMsIGNvbmZpZ3MpOyB9KTtcbn07XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGNvbmZsaWN0aW5nQWx0cywgY29uZmlncykge1xuXHR0aGlzLmRlbGVnYXRlcy5tYXAoZnVuY3Rpb24oZCkgeyBkLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dChyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKSB7XG5cdHRoaXMuZGVsZWdhdGVzLm1hcChmdW5jdGlvbihkKSB7IGQucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKTsgfSk7XG59O1xuXG5leHBvcnRzLkVycm9yTGlzdGVuZXIgPSBFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5Db25zb2xlRXJyb3JMaXN0ZW5lciA9IENvbnNvbGVFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5Qcm94eUVycm9yTGlzdGVuZXIgPSBQcm94eUVycm9yTGlzdGVuZXI7XG5cbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgRXJyb3JzID0gcmVxdWlyZSgnLi9FcnJvcnMnKTtcbnZhciBOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IEVycm9ycy5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcbnZhciBJbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gRXJyb3JzLklucHV0TWlzbWF0Y2hFeGNlcHRpb247XG52YXIgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gRXJyb3JzLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbnZhciBQYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbiA9IEVycm9ycy5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbjtcbnZhciBBVE5TdGF0ZSA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTlN0YXRlJykuQVROU3RhdGU7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEVycm9yU3RyYXRlZ3koKSB7XG5cbn1cblxuRXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXIgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmluRXJyb3JSZWNvdmVyeU1vZGUgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplcil7XG59O1xuXG5cblxuLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5fSB1c2VkIGZvclxuLy8gZXJyb3IgcmVwb3J0aW5nIGFuZCByZWNvdmVyeSBpbiBBTlRMUiBwYXJzZXJzLlxuLy9cbmZ1bmN0aW9uIERlZmF1bHRFcnJvclN0cmF0ZWd5KCkge1xuXHRFcnJvclN0cmF0ZWd5LmNhbGwodGhpcyk7XG4gICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVycm9yIHN0cmF0ZWd5IGlzIGN1cnJlbnRseSBcInJlY292ZXJpbmcgZnJvbSBhblxuICAgIC8vIGVycm9yXCIuIFRoaXMgaXMgdXNlZCB0byBzdXBwcmVzcyByZXBvcnRpbmcgbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hpbGVcbiAgICAvLyBhdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSBhIGRldGVjdGVkIHN5bnRheCBlcnJvci5cbiAgICAvL1xuICAgIC8vIEBzZWUgLy9pbkVycm9yUmVjb3ZlcnlNb2RlXG4gICAgLy9cbiAgICB0aGlzLmVycm9yUmVjb3ZlcnlNb2RlID0gZmFsc2U7XG5cbiAgICAvLyBUaGUgaW5kZXggaW50byB0aGUgaW5wdXQgc3RyZWFtIHdoZXJlIHRoZSBsYXN0IGVycm9yIG9jY3VycmVkLlxuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIHdoZXJlIGFuIGVycm9yIGlzIGZvdW5kXG4gICAgLy8gYnV0IG5vIHRva2VuIGlzIGNvbnN1bWVkIGR1cmluZyByZWNvdmVyeS4uLmFub3RoZXIgZXJyb3IgaXMgZm91bmQsXG4gICAgLy8gYWQgbmF1c2V1bS4gVGhpcyBpcyBhIGZhaWxzYWZlIG1lY2hhbmlzbSB0byBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdFxuICAgIC8vIG9uZSB0b2tlbi90cmVlIG5vZGUgaXMgY29uc3VtZWQgZm9yIHR3byBlcnJvcnMuXG4gICAgLy9cbiAgICB0aGlzLmxhc3RFcnJvckluZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0RXJyb3JTdGF0ZXMgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yU3RyYXRlZ3kucHJvdG90eXBlKTtcbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERlZmF1bHRFcnJvclN0cmF0ZWd5O1xuXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMge0BsaW5rIC8vZW5kRXJyb3JDb25kaXRpb259IHRvXG4vLyBlbnN1cmUgdGhhdCB0aGUgaGFuZGxlciBpcyBub3QgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS48L3A+XG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lbmRFcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSB3aGVuIGEgcmVjb2duaXRpb25cbi8vIGV4Y2VwdGlvbiBpcyByZXBvcnRlZC5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmJlZ2luRXJyb3JDb25kaXRpb24gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lcnJvclJlY292ZXJ5TW9kZSA9IHRydWU7XG59O1xuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuaW5FcnJvclJlY292ZXJ5TW9kZSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclJlY292ZXJ5TW9kZTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gbGVhdmUgZXJyb3IgcmVjb3ZlcnkgbW9kZSBhZnRlciByZWNvdmVyaW5nIGZyb21cbi8vIGEgcmVjb2duaXRpb24gZXhjZXB0aW9uLlxuLy9cbi8vIEBwYXJhbSByZWNvZ25pemVyXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmVuZEVycm9yQ29uZGl0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHRoaXMuZXJyb3JSZWNvdmVyeU1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IC0xO1xufTtcblxuLy9cbi8vIHtAaW5oZXJpdERvY31cbi8vXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMge0BsaW5rIC8vZW5kRXJyb3JDb25kaXRpb259LjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVwb3J0TWF0Y2ggPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lbmRFcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgaGFuZGxlciBpcyBhbHJlYWR5XG4vLyBpbiBlcnJvciByZWNvdmVyeSBtb2RlLiBPdGhlcndpc2UsIGl0IGNhbGxzIHtAbGluayAvL2JlZ2luRXJyb3JDb25kaXRpb259XG4vLyBhbmQgZGlzcGF0Y2hlcyB0aGUgcmVwb3J0aW5nIHRhc2sgYmFzZWQgb24gdGhlIHJ1bnRpbWUgdHlwZSBvZiB7QGNvZGUgZX1cbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+e0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0Tm9WaWFibGVBbHRlcm5hdGl2ZX08L2xpPlxuLy8gPGxpPntAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0SW5wdXRNaXNtYXRjaH08L2xpPlxuLy8gPGxpPntAbGluayBGYWlsZWRQcmVkaWNhdGVFeGNlcHRpb259OiBEaXNwYXRjaGVzIHRoZSBjYWxsIHRvXG4vLyB7QGxpbmsgLy9yZXBvcnRGYWlsZWRQcmVkaWNhdGV9PC9saT5cbi8vIDxsaT5BbGwgb3RoZXIgdHlwZXM6IGNhbGxzIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfSB0byByZXBvcnRcbi8vIHRoZSBleGNlcHRpb248L2xpPlxuLy8gPC91bD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVwb3J0RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIGFuIGVycm9yIGFuZCBoYXZlIG5vdCBtYXRjaGVkIGEgdG9rZW5cbiAgIC8vIHlldCBzdWNjZXNzZnVsbHksIGRvbid0IHJlcG9ydCBhbnkgZXJyb3JzLlxuICAgIGlmKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47IC8vIGRvbid0IHJlcG9ydCBzcHVyaW91cyBlcnJvcnNcbiAgICB9XG4gICAgdGhpcy5iZWdpbkVycm9yQ29uZGl0aW9uKHJlY29nbml6ZXIpO1xuICAgIGlmICggZSBpbnN0YW5jZW9mIE5vVmlhYmxlQWx0RXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUocmVjb2duaXplciwgZSk7XG4gICAgfSBlbHNlIGlmICggZSBpbnN0YW5jZW9mIElucHV0TWlzbWF0Y2hFeGNlcHRpb24gKSB7XG4gICAgICAgIHRoaXMucmVwb3J0SW5wdXRNaXNtYXRjaChyZWNvZ25pemVyLCBlKTtcbiAgICB9IGVsc2UgaWYgKCBlIGluc3RhbmNlb2YgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydEZhaWxlZFByZWRpY2F0ZShyZWNvZ25pemVyLCBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcInVua25vd24gcmVjb2duaXRpb24gZXJyb3IgdHlwZTogXCIgKyBlLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICBjb25zb2xlLmxvZyhlLnN0YWNrKTtcbiAgICAgICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhlLmdldE9mZmVuZGluZ1Rva2VuKCksIGUuZ2V0TWVzc2FnZSgpLCBlKTtcbiAgICB9XG59O1xuLy9cbi8vIHtAaW5oZXJpdERvY31cbi8vXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXN5bmNocm9uaXplcyB0aGUgcGFyc2VyIGJ5IGNvbnN1bWluZyB0b2tlbnNcbi8vIHVudGlsIHdlIGZpbmQgb25lIGluIHRoZSByZXN5bmNocm9uaXphdGlvbiBzZXQtLWxvb3NlbHkgdGhlIHNldCBvZiB0b2tlbnNcbi8vIHRoYXQgY2FuIGZvbGxvdyB0aGUgY3VycmVudCBydWxlLjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICBpZiAodGhpcy5sYXN0RXJyb3JJbmRleD09PXJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKS5pbmRleCAmJlxuICAgICAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyAhPT0gbnVsbCAmJiB0aGlzLmxhc3RFcnJvclN0YXRlcy5pbmRleE9mKHJlY29nbml6ZXIuc3RhdGUpPj0wKSB7XG5cdFx0Ly8gdWggb2gsIGFub3RoZXIgZXJyb3IgYXQgc2FtZSB0b2tlbiBpbmRleCBhbmQgcHJldmlvdXNseS12aXNpdGVkXG5cdFx0Ly8gc3RhdGUgaW4gQVROOyBtdXN0IGJlIGEgY2FzZSB3aGVyZSBMVCgxKSBpcyBpbiB0aGUgcmVjb3Zlcnlcblx0XHQvLyB0b2tlbiBzZXQgc28gbm90aGluZyBnb3QgY29uc3VtZWQuIENvbnN1bWUgYSBzaW5nbGUgdG9rZW5cblx0XHQvLyBhdCBsZWFzdCB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3A7IHRoaXMgaXMgYSBmYWlsc2FmZS5cblx0XHRyZWNvZ25pemVyLmNvbnN1bWUoKTtcbiAgICB9XG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IHJlY29nbml6ZXIuX2lucHV0LmluZGV4O1xuICAgIGlmICh0aGlzLmxhc3RFcnJvclN0YXRlcyA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmxhc3RFcnJvclN0YXRlcy5wdXNoKHJlY29nbml6ZXIuc3RhdGUpO1xuICAgIHZhciBmb2xsb3dTZXQgPSB0aGlzLmdldEVycm9yUmVjb3ZlcnlTZXQocmVjb2duaXplcik7XG4gICAgdGhpcy5jb25zdW1lVW50aWwocmVjb2duaXplciwgZm9sbG93U2V0KTtcbn07XG5cbi8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3N5bmN9IG1ha2VzIHN1cmVcbi8vIHRoYXQgdGhlIGN1cnJlbnQgbG9va2FoZWFkIHN5bWJvbCBpcyBjb25zaXN0ZW50IHdpdGggd2hhdCB3ZXJlIGV4cGVjdGluZ1xuLy8gYXQgdGhpcyBwb2ludCBpbiB0aGUgQVROLiBZb3UgY2FuIGNhbGwgdGhpcyBhbnl0aW1lIGJ1dCBBTlRMUiBvbmx5XG4vLyBnZW5lcmF0ZXMgY29kZSB0byBjaGVjayBiZWZvcmUgc3VicnVsZXMvbG9vcHMgYW5kIGVhY2ggaXRlcmF0aW9uLlxuLy9cbi8vIDxwPkltcGxlbWVudHMgSmltIElkbGUncyBtYWdpYyBzeW5jIG1lY2hhbmlzbSBpbiBjbG9zdXJlcyBhbmQgb3B0aW9uYWxcbi8vIHN1YnJ1bGVzLiBFLmcuLDwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gYSA6IHN5bmMgKCBzdHVmZiBzeW5jICkqIDtcbi8vIHN5bmMgOiB7Y29uc3VtZSB0byB3aGF0IGNhbiBmb2xsb3cgc3luY30gO1xuLy8gPC9wcmU+XG4vL1xuLy8gQXQgdGhlIHN0YXJ0IG9mIGEgc3ViIHJ1bGUgdXBvbiBlcnJvciwge0BsaW5rIC8vc3luY30gcGVyZm9ybXMgc2luZ2xlXG4vLyB0b2tlbiBkZWxldGlvbiwgaWYgcG9zc2libGUuIElmIGl0IGNhbid0IGRvIHRoYXQsIGl0IGJhaWxzIG9uIHRoZSBjdXJyZW50XG4vLyBydWxlIGFuZCB1c2VzIHRoZSBkZWZhdWx0IGVycm9yIHJlY292ZXJ5LCB3aGljaCBjb25zdW1lcyB1bnRpbCB0aGVcbi8vIHJlc3luY2hyb25pemF0aW9uIHNldCBvZiB0aGUgY3VycmVudCBydWxlLlxuLy9cbi8vIDxwPklmIHRoZSBzdWIgcnVsZSBpcyBvcHRpb25hbCAoe0Bjb2RlICguLi4pP30sIHtAY29kZSAoLi4uKSp9LCBvciBibG9ja1xuLy8gd2l0aCBhbiBlbXB0eSBhbHRlcm5hdGl2ZSksIHRoZW4gdGhlIGV4cGVjdGVkIHNldCBpbmNsdWRlcyB3aGF0IGZvbGxvd3Ncbi8vIHRoZSBzdWJydWxlLjwvcD5cbi8vXG4vLyA8cD5EdXJpbmcgbG9vcCBpdGVyYXRpb24sIGl0IGNvbnN1bWVzIHVudGlsIGl0IHNlZXMgYSB0b2tlbiB0aGF0IGNhbiBzdGFydCBhXG4vLyBzdWIgcnVsZSBvciB3aGF0IGZvbGxvd3MgbG9vcC4gWWVzLCB0aGF0IGlzIHByZXR0eSBhZ2dyZXNzaXZlLiBXZSBvcHQgdG9cbi8vIHN0YXkgaW4gdGhlIGxvb3AgYXMgbG9uZyBhcyBwb3NzaWJsZS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5PUklHSU5TPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlByZXZpb3VzIHZlcnNpb25zIG9mIEFOVExSIGRpZCBhIHBvb3Igam9iIG9mIHRoZWlyIHJlY292ZXJ5IHdpdGhpbiBsb29wcy5cbi8vIEEgc2luZ2xlIG1pc21hdGNoIHRva2VuIG9yIG1pc3NpbmcgdG9rZW4gd291bGQgZm9yY2UgdGhlIHBhcnNlciB0byBiYWlsXG4vLyBvdXQgb2YgdGhlIGVudGlyZSBydWxlcyBzdXJyb3VuZGluZyB0aGUgbG9vcC4gU28sIGZvciBydWxlPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBjbGFzc0RlZiA6ICdjbGFzcycgSUQgJ3snIG1lbWJlciogJ30nXG4vLyA8L3ByZT5cbi8vXG4vLyBpbnB1dCB3aXRoIGFuIGV4dHJhIHRva2VuIGJldHdlZW4gbWVtYmVycyB3b3VsZCBmb3JjZSB0aGUgcGFyc2VyIHRvXG4vLyBjb25zdW1lIHVudGlsIGl0IGZvdW5kIHRoZSBuZXh0IGNsYXNzIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gdGhlIG5leHRcbi8vIG1lbWJlciBkZWZpbml0aW9uIG9mIHRoZSBjdXJyZW50IGNsYXNzLlxuLy9cbi8vIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBjb3N0IGEgbGl0dGxlIGJpdCBvZiBlZmZvcnQgYmVjYXVzZSB0aGUgcGFyc2VyIGhhcyB0b1xuLy8gY29tcGFyZSB0b2tlbiBzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsb29wIGFuZCBhdCBlYWNoIGl0ZXJhdGlvbi4gSWYgZm9yXG4vLyBzb21lIHJlYXNvbiBzcGVlZCBpcyBzdWZmZXJpbmcgZm9yIHlvdSwgeW91IGNhbiB0dXJuIG9mZiB0aGlzXG4vLyBmdW5jdGlvbmFsaXR5IGJ5IHNpbXBseSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIGFzIGEgYmxhbmsgeyB9LjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICAvLyBJZiBhbHJlYWR5IHJlY292ZXJpbmcsIGRvbid0IHRyeSB0byBzeW5jXG4gICAgaWYgKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBzID0gcmVjb2duaXplci5faW50ZXJwLmF0bi5zdGF0ZXNbcmVjb2duaXplci5zdGF0ZV07XG4gICAgdmFyIGxhID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIC8vIHRyeSBjaGVhcGVyIHN1YnNldCBmaXJzdDsgbWlnaHQgZ2V0IGx1Y2t5LiBzZWVtcyB0byBzaGF2ZSBhIHdlZSBiaXQgb2ZmXG4gICAgdmFyIG5leHRUb2tlbnMgPSByZWNvZ25pemVyLmF0bi5uZXh0VG9rZW5zKHMpO1xuICAgIGlmIChuZXh0VG9rZW5zLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pIHx8IG5leHRUb2tlbnMuY29udGFpbnMobGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChzLnN0YXRlVHlwZSkge1xuICAgIGNhc2UgQVROU3RhdGUuQkxPQ0tfU1RBUlQ6XG4gICAgY2FzZSBBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUOlxuICAgIGNhc2UgQVROU3RhdGUuUExVU19CTE9DS19TVEFSVDpcbiAgICBjYXNlIEFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWTpcbiAgICAgICAvLyByZXBvcnQgZXJyb3IgYW5kIHJlY292ZXIgaWYgcG9zc2libGVcbiAgICAgICAgaWYoIHRoaXMuc2luZ2xlVG9rZW5EZWxldGlvbihyZWNvZ25pemVyKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSBBVE5TdGF0ZS5QTFVTX0xPT1BfQkFDSzpcbiAgICBjYXNlIEFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLOlxuICAgICAgICB0aGlzLnJlcG9ydFVud2FudGVkVG9rZW4ocmVjb2duaXplcik7XG4gICAgICAgIHZhciBleHBlY3RpbmcgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgZXhwZWN0aW5nLmFkZFNldChyZWNvZ25pemVyLmdldEV4cGVjdGVkVG9rZW5zKCkpO1xuICAgICAgICB2YXIgd2hhdEZvbGxvd3NMb29wSXRlcmF0aW9uT3JSdWxlID0gZXhwZWN0aW5nLmFkZFNldCh0aGlzLmdldEVycm9yUmVjb3ZlcnlTZXQocmVjb2duaXplcikpO1xuICAgICAgICB0aGlzLmNvbnN1bWVVbnRpbChyZWNvZ25pemVyLCB3aGF0Rm9sbG93c0xvb3BJdGVyYXRpb25PclJ1bGUpO1xuICAgICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgICAvLyBkbyBub3RoaW5nIGlmIHdlIGNhbid0IGlkZW50aWZ5IHRoZSBleGFjdCBraW5kIG9mIEFUTiBzdGF0ZVxuICAgIH1cbn07XG5cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIHRva2VucyA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKTtcbiAgICB2YXIgaW5wdXQ7XG4gICAgaWYodG9rZW5zICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChlLnN0YXJ0VG9rZW4udHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dCA9IHRva2Vucy5nZXRUZXh0KG5ldyBJbnRlcnZhbChlLnN0YXJ0VG9rZW4udG9rZW5JbmRleCwgZS5vZmZlbmRpbmdUb2tlbi50b2tlbkluZGV4KSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dCA9IFwiPHVua25vd24gaW5wdXQ+XCI7XG4gICAgfVxuICAgIHZhciBtc2cgPSBcIm5vIHZpYWJsZSBhbHRlcm5hdGl2ZSBhdCBpbnB1dCBcIiArIHRoaXMuZXNjYXBlV1NBbmRRdW90ZShpbnB1dCk7XG4gICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhtc2csIGUub2ZmZW5kaW5nVG9rZW4sIGUpO1xufTtcblxuLy9cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYW5cbi8vIHtAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydElucHV0TWlzbWF0Y2ggPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIG1zZyA9IFwibWlzbWF0Y2hlZCBpbnB1dCBcIiArIHRoaXMuZ2V0VG9rZW5FcnJvckRpc3BsYXkoZS5vZmZlbmRpbmdUb2tlbikgK1xuICAgICAgICAgIFwiIGV4cGVjdGluZyBcIiArIGUuZ2V0RXhwZWN0ZWRUb2tlbnMoKS50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgZS5vZmZlbmRpbmdUb2tlbiwgZSk7XG59O1xuXG4vL1xuLy8gVGhpcyBpcyBjYWxsZWQgYnkge0BsaW5rIC8vcmVwb3J0RXJyb3J9IHdoZW4gdGhlIGV4Y2VwdGlvbiBpcyBhXG4vLyB7QGxpbmsgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEZhaWxlZFByZWRpY2F0ZSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICB2YXIgcnVsZU5hbWUgPSByZWNvZ25pemVyLnJ1bGVOYW1lc1tyZWNvZ25pemVyLl9jdHgucnVsZUluZGV4XTtcbiAgICB2YXIgbXNnID0gXCJydWxlIFwiICsgcnVsZU5hbWUgKyBcIiBcIiArIGUubWVzc2FnZTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgZS5vZmZlbmRpbmdUb2tlbiwgZSk7XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmVwb3J0IGEgc3ludGF4IGVycm9yIHdoaWNoIHJlcXVpcmVzIHRoZSByZW1vdmFsXG4vLyBvZiBhIHRva2VuIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gQXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGVcbi8vIGVycm9uZW91cyBzeW1ib2wgaXMgY3VycmVudCB7QGNvZGUgTFQoMSl9IHN5bWJvbCBhbmQgaGFzIG5vdCB5ZXQgYmVlblxuLy8gcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uIFdoZW4gdGhpcyBtZXRob2QgcmV0dXJucyxcbi8vIHtAY29kZSByZWNvZ25pemVyfSBpcyBpbiBlcnJvciByZWNvdmVyeSBtb2RlLlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHtAbGluayAvL3NpbmdsZVRva2VuRGVsZXRpb259IGlkZW50aWZpZXNcbi8vIHNpbmdsZS10b2tlbiBkZWxldGlvbiBhcyBhIHZpYWJsZSByZWNvdmVyeSBzdHJhdGVneSBmb3IgYSBtaXNtYXRjaGVkXG4vLyBpbnB1dCBlcnJvci48L3A+XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeSBpblxuLy8gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSwgZm9sbG93ZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIFBhcnNlci8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydFVud2FudGVkVG9rZW4gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgaWYgKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICB2YXIgdCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgdmFyIHRva2VuTmFtZSA9IHRoaXMuZ2V0VG9rZW5FcnJvckRpc3BsYXkodCk7XG4gICAgdmFyIGV4cGVjdGluZyA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlbnMocmVjb2duaXplcik7XG4gICAgdmFyIG1zZyA9IFwiZXh0cmFuZW91cyBpbnB1dCBcIiArIHRva2VuTmFtZSArIFwiIGV4cGVjdGluZyBcIiArXG4gICAgICAgIGV4cGVjdGluZy50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgdCwgbnVsbCk7XG59O1xuLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJlcG9ydCBhIHN5bnRheCBlcnJvciB3aGljaCByZXF1aXJlcyB0aGVcbi8vIGluc2VydGlvbiBvZiBhIG1pc3NpbmcgdG9rZW4gaW50byB0aGUgaW5wdXQgc3RyZWFtLiBBdCB0aGUgdGltZSB0aGlzXG4vLyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgbWlzc2luZyB0b2tlbiBoYXMgbm90IHlldCBiZWVuIGluc2VydGVkLiBXaGVuIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zLCB7QGNvZGUgcmVjb2duaXplcn0gaXMgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS5cbi8vXG4vLyA8cD5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB7QGxpbmsgLy9zaW5nbGVUb2tlbkluc2VydGlvbn0gaWRlbnRpZmllc1xuLy8gc2luZ2xlLXRva2VuIGluc2VydGlvbiBhcyBhIHZpYWJsZSByZWNvdmVyeSBzdHJhdGVneSBmb3IgYSBtaXNtYXRjaGVkXG4vLyBpbnB1dCBlcnJvci48L3A+XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeSBpblxuLy8gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSwgZm9sbG93ZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIFBhcnNlci8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE1pc3NpbmdUb2tlbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoIHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICB2YXIgdCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgdmFyIGV4cGVjdGluZyA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlbnMocmVjb2duaXplcik7XG4gICAgdmFyIG1zZyA9IFwibWlzc2luZyBcIiArIGV4cGVjdGluZy50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKSArXG4gICAgICAgICAgXCIgYXQgXCIgKyB0aGlzLmdldFRva2VuRXJyb3JEaXNwbGF5KHQpO1xuICAgIHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnLCB0LCBudWxsKTtcbn07XG5cbi8vIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSB0aGUgbWlzbWF0Y2hlZCBpbnB1dFxuLy8gYnkgdXNpbmcgc2luZ2xlIHRva2VuIGluc2VydGlvbiBhbmQgZGVsZXRpb24gYXMgZGVzY3JpYmVkIGJlbG93LiBJZiB0aGVcbi8vIHJlY292ZXJ5IGF0dGVtcHQgZmFpbHMsIHRoaXMgbWV0aG9kIHRocm93cyBhblxuLy8ge0BsaW5rIElucHV0TWlzbWF0Y2hFeGNlcHRpb259LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkVYVFJBIFRPS0VOPC9zdHJvbmc+IChzaW5nbGUgdG9rZW4gZGVsZXRpb24pPC9wPlxuLy9cbi8vIDxwPntAY29kZSBMQSgxKX0gaXMgbm90IHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLiBJZiB7QGNvZGUgTEEoMil9IGhhcyB0aGVcbi8vIHJpZ2h0IHRva2VuLCBob3dldmVyLCB0aGVuIGFzc3VtZSB7QGNvZGUgTEEoMSl9IGlzIHNvbWUgZXh0cmEgc3B1cmlvdXNcbi8vIHRva2VuIGFuZCBkZWxldGUgaXQuIFRoZW4gY29uc3VtZSBhbmQgcmV0dXJuIHRoZSBuZXh0IHRva2VuICh3aGljaCB3YXNcbi8vIHRoZSB7QGNvZGUgTEEoMil9IHRva2VuKSBhcyB0aGUgc3VjY2Vzc2Z1bCByZXN1bHQgb2YgdGhlIG1hdGNoIG9wZXJhdGlvbi48L3A+XG4vL1xuLy8gPHA+VGhpcyByZWNvdmVyeSBzdHJhdGVneSBpcyBpbXBsZW1lbnRlZCBieSB7QGxpbmtcbi8vIC8vc2luZ2xlVG9rZW5EZWxldGlvbn0uPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+TUlTU0lORyBUT0tFTjwvc3Ryb25nPiAoc2luZ2xlIHRva2VuIGluc2VydGlvbik8L3A+XG4vL1xuLy8gPHA+SWYgY3VycmVudCB0b2tlbiAoYXQge0Bjb2RlIExBKDEpfSkgaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgY291bGQgY29tZVxuLy8gYWZ0ZXIgdGhlIGV4cGVjdGVkIHtAY29kZSBMQSgxKX0gdG9rZW4sIHRoZW4gYXNzdW1lIHRoZSB0b2tlbiBpcyBtaXNzaW5nXG4vLyBhbmQgdXNlIHRoZSBwYXJzZXIncyB7QGxpbmsgVG9rZW5GYWN0b3J5fSB0byBjcmVhdGUgaXQgb24gdGhlIGZseS4gVGhlXG4vLyBcImluc2VydGlvblwiIGlzIHBlcmZvcm1lZCBieSByZXR1cm5pbmcgdGhlIGNyZWF0ZWQgdG9rZW4gYXMgdGhlIHN1Y2Nlc3NmdWxcbi8vIHJlc3VsdCBvZiB0aGUgbWF0Y2ggb3BlcmF0aW9uLjwvcD5cbi8vXG4vLyA8cD5UaGlzIHJlY292ZXJ5IHN0cmF0ZWd5IGlzIGltcGxlbWVudGVkIGJ5IHtAbGlua1xuLy8gLy9zaW5nbGVUb2tlbkluc2VydGlvbn0uPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+RVhBTVBMRTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Gb3IgZXhhbXBsZSwgSW5wdXQge0Bjb2RlIGk9KDM7fSBpcyBjbGVhcmx5IG1pc3NpbmcgdGhlIHtAY29kZSAnKSd9LiBXaGVuXG4vLyB0aGUgcGFyc2VyIHJldHVybnMgZnJvbSB0aGUgbmVzdGVkIGNhbGwgdG8ge0Bjb2RlIGV4cHJ9LCBpdCB3aWxsIGhhdmVcbi8vIGNhbGwgY2hhaW46PC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBzdGF0ICZyYXJyOyBleHByICZyYXJyOyBhdG9tXG4vLyA8L3ByZT5cbi8vXG4vLyBhbmQgaXQgd2lsbCBiZSB0cnlpbmcgdG8gbWF0Y2ggdGhlIHtAY29kZSAnKSd9IGF0IHRoaXMgcG9pbnQgaW4gdGhlXG4vLyBkZXJpdmF0aW9uOlxuLy9cbi8vIDxwcmU+XG4vLyA9Jmd0OyBJRCAnPScgJygnIElOVCAnKScgKCcrJyBhdG9tKSogJzsnXG4vLyBeXG4vLyA8L3ByZT5cbi8vXG4vLyBUaGUgYXR0ZW1wdCB0byBtYXRjaCB7QGNvZGUgJyknfSB3aWxsIGZhaWwgd2hlbiBpdCBzZWVzIHtAY29kZSAnOyd9IGFuZFxuLy8gY2FsbCB7QGxpbmsgLy9yZWNvdmVySW5saW5lfS4gVG8gcmVjb3ZlciwgaXQgc2VlcyB0aGF0IHtAY29kZSBMQSgxKT09JzsnfVxuLy8gaXMgaW4gdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW4gZm9sbG93IHRoZSB7QGNvZGUgJyknfSB0b2tlbiByZWZlcmVuY2Vcbi8vIGluIHJ1bGUge0Bjb2RlIGF0b219LiBJdCBjYW4gYXNzdW1lIHRoYXQgeW91IGZvcmdvdCB0aGUge0Bjb2RlICcpJ30uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gU0lOR0xFIFRPS0VOIERFTEVUSU9OXG4gICAgdmFyIG1hdGNoZWRTeW1ib2wgPSB0aGlzLnNpbmdsZVRva2VuRGVsZXRpb24ocmVjb2duaXplcik7XG4gICAgaWYgKG1hdGNoZWRTeW1ib2wgIT09IG51bGwpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBkZWxldGVkIHRoZSBleHRyYSB0b2tlbi5cbiAgICAgICAgLy8gbm93LCBtb3ZlIHBhc3QgdHR5cGUgdG9rZW4gYXMgaWYgYWxsIHdlcmUgb2tcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgICAgIHJldHVybiBtYXRjaGVkU3ltYm9sO1xuICAgIH1cbiAgICAvLyBTSU5HTEUgVE9LRU4gSU5TRVJUSU9OXG4gICAgaWYgKHRoaXMuc2luZ2xlVG9rZW5JbnNlcnRpb24ocmVjb2duaXplcikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWlzc2luZ1N5bWJvbChyZWNvZ25pemVyKTtcbiAgICB9XG4gICAgLy8gZXZlbiB0aGF0IGRpZG4ndCB3b3JrOyBtdXN0IHRocm93IHRoZSBleGNlcHRpb25cbiAgICB0aHJvdyBuZXcgSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBzaW5nbGUtdG9rZW4gaW5zZXJ0aW9uIGlubGluZSBlcnJvciByZWNvdmVyeVxuLy8gc3RyYXRlZ3kuIEl0IGlzIGNhbGxlZCBieSB7QGxpbmsgLy9yZWNvdmVySW5saW5lfSBpZiB0aGUgc2luZ2xlLXRva2VuXG4vLyBkZWxldGlvbiBzdHJhdGVneSBmYWlscyB0byByZWNvdmVyIGZyb20gdGhlIG1pc21hdGNoZWQgaW5wdXQuIElmIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zIHtAY29kZSB0cnVlfSwge0Bjb2RlIHJlY29nbml6ZXJ9IHdpbGwgYmUgaW4gZXJyb3IgcmVjb3Zlcnlcbi8vIG1vZGUuXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBzaW5nbGUtdG9rZW4gaW5zZXJ0aW9uIGlzIHZpYWJsZSBieVxuLy8gY2hlY2tpbmcgaWYgdGhlIHtAY29kZSBMQSgxKX0gaW5wdXQgc3ltYm9sIGNvdWxkIGJlIHN1Y2Nlc3NmdWxseSBtYXRjaGVkXG4vLyBpZiBpdCB3ZXJlIGluc3RlYWQgdGhlIHtAY29kZSBMQSgyKX0gc3ltYm9sLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zXG4vLyB7QGNvZGUgdHJ1ZX0sIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuZCBpbnNlcnRpbmcgYVxuLy8gdG9rZW4gd2l0aCB0aGUgY29ycmVjdCB0eXBlIHRvIHByb2R1Y2UgdGhpcyBiZWhhdmlvci48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgc2luZ2xlLXRva2VuIGluc2VydGlvbiBpcyBhIHZpYWJsZSByZWNvdmVyeVxuLy8gc3RyYXRlZ3kgZm9yIHRoZSBjdXJyZW50IG1pc21hdGNoZWQgaW5wdXQsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnNpbmdsZVRva2VuSW5zZXJ0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBjdXJyZW50U3ltYm9sVHlwZSA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MQSgxKTtcbiAgICAvLyBpZiBjdXJyZW50IHRva2VuIGlzIGNvbnNpc3RlbnQgd2l0aCB3aGF0IGNvdWxkIGNvbWUgYWZ0ZXIgY3VycmVudFxuICAgIC8vIEFUTiBzdGF0ZSwgdGhlbiB3ZSBrbm93IHdlJ3JlIG1pc3NpbmcgYSB0b2tlbjsgZXJyb3IgcmVjb3ZlcnlcbiAgICAvLyBpcyBmcmVlIHRvIGNvbmp1cmUgdXAgYW5kIGluc2VydCB0aGUgbWlzc2luZyB0b2tlblxuICAgIHZhciBhdG4gPSByZWNvZ25pemVyLl9pbnRlcnAuYXRuO1xuICAgIHZhciBjdXJyZW50U3RhdGUgPSBhdG4uc3RhdGVzW3JlY29nbml6ZXIuc3RhdGVdO1xuICAgIHZhciBuZXh0ID0gY3VycmVudFN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldDtcbiAgICB2YXIgZXhwZWN0aW5nQXRMTDIgPSBhdG4ubmV4dFRva2VucyhuZXh0LCByZWNvZ25pemVyLl9jdHgpO1xuICAgIGlmIChleHBlY3RpbmdBdExMMi5jb250YWlucyhjdXJyZW50U3ltYm9sVHlwZSkgKXtcbiAgICAgICAgdGhpcy5yZXBvcnRNaXNzaW5nVG9rZW4ocmVjb2duaXplcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBzaW5nbGUtdG9rZW4gZGVsZXRpb24gaW5saW5lIGVycm9yIHJlY292ZXJ5XG4vLyBzdHJhdGVneS4gSXQgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlY292ZXJJbmxpbmV9IHRvIGF0dGVtcHQgdG8gcmVjb3ZlclxuLy8gZnJvbSBtaXNtYXRjaGVkIGlucHV0LiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIG51bGwsIHRoZSBwYXJzZXIgYW5kIGVycm9yXG4vLyBoYW5kbGVyIHN0YXRlIHdpbGwgbm90IGhhdmUgY2hhbmdlZC4gSWYgdGhpcyBtZXRob2QgcmV0dXJucyBub24tbnVsbCxcbi8vIHtAY29kZSByZWNvZ25pemVyfSB3aWxsIDxlbT5ub3Q8L2VtPiBiZSBpbiBlcnJvciByZWNvdmVyeSBtb2RlIHNpbmNlIHRoZVxuLy8gcmV0dXJuZWQgdG9rZW4gd2FzIGEgc3VjY2Vzc2Z1bCBtYXRjaC5cbi8vXG4vLyA8cD5JZiB0aGUgc2luZ2xlLXRva2VuIGRlbGV0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoaXMgbWV0aG9kIGNhbGxzXG4vLyB7QGxpbmsgLy9yZXBvcnRVbndhbnRlZFRva2VufSB0byByZXBvcnQgdGhlIGVycm9yLCBmb2xsb3dlZCBieVxuLy8ge0BsaW5rIFBhcnNlci8vY29uc3VtZX0gdG8gYWN0dWFsbHkgXCJkZWxldGVcIiB0aGUgZXh0cmFuZW91cyB0b2tlbi4gVGhlbixcbi8vIGJlZm9yZSByZXR1cm5pbmcge0BsaW5rIC8vcmVwb3J0TWF0Y2h9IGlzIGNhbGxlZCB0byBzaWduYWwgYSBzdWNjZXNzZnVsXG4vLyBtYXRjaC48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHJldHVybiB0aGUgc3VjY2Vzc2Z1bGx5IG1hdGNoZWQge0BsaW5rIFRva2VufSBpbnN0YW5jZSBpZiBzaW5nbGUtdG9rZW5cbi8vIGRlbGV0aW9uIHN1Y2Nlc3NmdWxseSByZWNvdmVycyBmcm9tIHRoZSBtaXNtYXRjaGVkIGlucHV0LCBvdGhlcndpc2Vcbi8vIHtAY29kZSBudWxsfVxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5zaW5nbGVUb2tlbkRlbGV0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBuZXh0VG9rZW5UeXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDIpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIGlmIChleHBlY3RpbmcuY29udGFpbnMobmV4dFRva2VuVHlwZSkpIHtcbiAgICAgICAgdGhpcy5yZXBvcnRVbndhbnRlZFRva2VuKHJlY29nbml6ZXIpO1xuICAgICAgICAvLyBwcmludChcInJlY292ZXJGcm9tTWlzbWF0Y2hlZFRva2VuIGRlbGV0aW5nIFwiIFxcXG4gICAgICAgIC8vICsgc3RyKHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MVCgxKSkgXFxcbiAgICAgICAgLy8gKyBcIiBzaW5jZSBcIiArIHN0cihyZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoMikpIFxcXG4gICAgICAgIC8vICsgXCIgaXMgd2hhdCB3ZSB3YW50XCIsIGZpbGU9c3lzLnN0ZGVycilcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7IC8vIHNpbXBseSBkZWxldGUgZXh0cmEgdG9rZW5cbiAgICAgICAgLy8gd2Ugd2FudCB0byByZXR1cm4gdGhlIHRva2VuIHdlJ3JlIGFjdHVhbGx5IG1hdGNoaW5nXG4gICAgICAgIHZhciBtYXRjaGVkU3ltYm9sID0gcmVjb2duaXplci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yZXBvcnRNYXRjaChyZWNvZ25pemVyKTsgLy8gd2Uga25vdyBjdXJyZW50IHRva2VuIGlzIGNvcnJlY3RcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRTeW1ib2w7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLy8gQ29uanVyZSB1cCBhIG1pc3NpbmcgdG9rZW4gZHVyaW5nIGVycm9yIHJlY292ZXJ5LlxuLy9cbi8vIFRoZSByZWNvZ25pemVyIGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSBzaW5nbGUgbWlzc2luZ1xuLy8gc3ltYm9scy4gQnV0LCBhY3Rpb25zIG1pZ2h0IHJlZmVyIHRvIHRoYXQgbWlzc2luZyBzeW1ib2wuXG4vLyBGb3IgZXhhbXBsZSwgeD1JRCB7ZigkeCk7fS4gVGhlIGFjdGlvbiBjbGVhcmx5IGFzc3VtZXNcbi8vIHRoYXQgdGhlcmUgaGFzIGJlZW4gYW4gaWRlbnRpZmllciBtYXRjaGVkIHByZXZpb3VzbHkgYW5kIHRoYXRcbi8vICR4IHBvaW50cyBhdCB0aGF0IHRva2VuLiBJZiB0aGF0IHRva2VuIGlzIG1pc3NpbmcsIGJ1dFxuLy8gdGhlIG5leHQgdG9rZW4gaW4gdGhlIHN0cmVhbSBpcyB3aGF0IHdlIHdhbnQgd2UgYXNzdW1lIHRoYXRcbi8vIHRoaXMgdG9rZW4gaXMgbWlzc2luZyBhbmQgd2Uga2VlcCBnb2luZy4gQmVjYXVzZSB3ZVxuLy8gaGF2ZSB0byByZXR1cm4gc29tZSB0b2tlbiB0byByZXBsYWNlIHRoZSBtaXNzaW5nIHRva2VuLFxuLy8gd2UgaGF2ZSB0byBjb25qdXJlIG9uZSB1cC4gVGhpcyBtZXRob2QgZ2l2ZXMgdGhlIHVzZXIgY29udHJvbFxuLy8gb3ZlciB0aGUgdG9rZW5zIHJldHVybmVkIGZvciBtaXNzaW5nIHRva2Vucy4gTW9zdGx5LFxuLy8geW91IHdpbGwgd2FudCB0byBjcmVhdGUgc29tZXRoaW5nIHNwZWNpYWwgZm9yIGlkZW50aWZpZXJcbi8vIHRva2Vucy4gRm9yIGxpdGVyYWxzIHN1Y2ggYXMgJ3snIGFuZCAnLCcsIHRoZSBkZWZhdWx0XG4vLyBhY3Rpb24gaW4gdGhlIHBhcnNlciBvciB0cmVlIHBhcnNlciB3b3Jrcy4gSXQgc2ltcGx5IGNyZWF0ZXNcbi8vIGEgQ29tbW9uVG9rZW4gb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuIFRoZSB0ZXh0IHdpbGwgYmUgdGhlIHRva2VuLlxuLy8gSWYgeW91IGNoYW5nZSB3aGF0IHRva2VucyBtdXN0IGJlIGNyZWF0ZWQgYnkgdGhlIGxleGVyLFxuLy8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB0b2tlbnMuXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmdldE1pc3NpbmdTeW1ib2wgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdmFyIGN1cnJlbnRTeW1ib2wgPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIHZhciBleHBlY3RlZFRva2VuVHlwZSA9IGV4cGVjdGluZy5maXJzdCgpOyAvLyBnZXQgYW55IGVsZW1lbnRcbiAgICB2YXIgdG9rZW5UZXh0O1xuICAgIGlmIChleHBlY3RlZFRva2VuVHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICB0b2tlblRleHQgPSBcIjxtaXNzaW5nIEVPRj5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlblRleHQgPSBcIjxtaXNzaW5nIFwiICsgcmVjb2duaXplci5saXRlcmFsTmFtZXNbZXhwZWN0ZWRUb2tlblR5cGVdICsgXCI+XCI7XG4gICAgfVxuICAgIHZhciBjdXJyZW50ID0gY3VycmVudFN5bWJvbDtcbiAgICB2YXIgbG9va2JhY2sgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoLTEpO1xuICAgIGlmIChjdXJyZW50LnR5cGU9PT1Ub2tlbi5FT0YgJiYgbG9va2JhY2sgIT09IG51bGwpIHtcbiAgICAgICAgY3VycmVudCA9IGxvb2tiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb2duaXplci5nZXRUb2tlbkZhY3RvcnkoKS5jcmVhdGUoY3VycmVudC5zb3VyY2UsXG4gICAgICAgIGV4cGVjdGVkVG9rZW5UeXBlLCB0b2tlblRleHQsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCxcbiAgICAgICAgLTEsIC0xLCBjdXJyZW50LmxpbmUsIGN1cnJlbnQuY29sdW1uKTtcbn07XG5cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gcmVjb2duaXplci5nZXRFeHBlY3RlZFRva2VucygpO1xufTtcblxuLy8gSG93IHNob3VsZCBhIHRva2VuIGJlIGRpc3BsYXllZCBpbiBhbiBlcnJvciBtZXNzYWdlPyBUaGUgZGVmYXVsdFxuLy8gaXMgdG8gZGlzcGxheSBqdXN0IHRoZSB0ZXh0LCBidXQgZHVyaW5nIGRldmVsb3BtZW50IHlvdSBtaWdodFxuLy8gd2FudCB0byBoYXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIHNwaXQgb3V0LiBPdmVycmlkZSBpbiB0aGF0IGNhc2Vcbi8vIHRvIHVzZSB0LnRvU3RyaW5nKCkgKHdoaWNoLCBmb3IgQ29tbW9uVG9rZW4sIGR1bXBzIGV2ZXJ5dGhpbmcgYWJvdXRcbi8vIHRoZSB0b2tlbikuIFRoaXMgaXMgYmV0dGVyIHRoYW4gZm9yY2luZyB5b3UgdG8gb3ZlcnJpZGUgYSBtZXRob2QgaW5cbi8vIHlvdXIgdG9rZW4gb2JqZWN0cyBiZWNhdXNlIHlvdSBkb24ndCBoYXZlIHRvIGdvIG1vZGlmeSB5b3VyIGxleGVyXG4vLyBzbyB0aGF0IGl0IGNyZWF0ZXMgYSBuZXcgSmF2YSB0eXBlLlxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRUb2tlbkVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAodCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCI8bm8gdG9rZW4+XCI7XG4gICAgfVxuICAgIHZhciBzID0gdC50ZXh0O1xuICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgIGlmICh0LnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHMgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gXCI8XCIgKyB0LnR5cGUgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lc2NhcGVXU0FuZFF1b3RlKHMpO1xufTtcblxuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmVzY2FwZVdTQW5kUXVvdGUgPSBmdW5jdGlvbihzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFxuL2csXCJcXFxcblwiKTtcbiAgICBzID0gcy5yZXBsYWNlKC9cXHIvZyxcIlxcXFxyXCIpO1xuICAgIHMgPSBzLnJlcGxhY2UoL1xcdC9nLFwiXFxcXHRcIik7XG4gICAgcmV0dXJuIFwiJ1wiICsgcyArIFwiJ1wiO1xufTtcblxuLy8gQ29tcHV0ZSB0aGUgZXJyb3IgcmVjb3Zlcnkgc2V0IGZvciB0aGUgY3VycmVudCBydWxlLiBEdXJpbmdcbi8vIHJ1bGUgaW52b2NhdGlvbiwgdGhlIHBhcnNlciBwdXNoZXMgdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW5cbi8vIGZvbGxvdyB0aGF0IHJ1bGUgcmVmZXJlbmNlIG9uIHRoZSBzdGFjazsgdGhpcyBhbW91bnRzIHRvXG4vLyBjb21wdXRpbmcgRklSU1Qgb2Ygd2hhdCBmb2xsb3dzIHRoZSBydWxlIHJlZmVyZW5jZSBpbiB0aGVcbi8vIGVuY2xvc2luZyBydWxlLiBTZWUgTGluZWFyQXBwcm94aW1hdG9yLkZJUlNUKCkuXG4vLyBUaGlzIGxvY2FsIGZvbGxvdyBzZXQgb25seSBpbmNsdWRlcyB0b2tlbnNcbi8vIGZyb20gd2l0aGluIHRoZSBydWxlOyBpLmUuLCB0aGUgRklSU1QgY29tcHV0YXRpb24gZG9uZSBieVxuLy8gQU5UTFIgc3RvcHMgYXQgdGhlIGVuZCBvZiBhIHJ1bGUuXG4vL1xuLy8gRVhBTVBMRVxuLy9cbi8vIFdoZW4geW91IGZpbmQgYSBcIm5vIHZpYWJsZSBhbHQgZXhjZXB0aW9uXCIsIHRoZSBpbnB1dCBpcyBub3Rcbi8vIGNvbnNpc3RlbnQgd2l0aCBhbnkgb2YgdGhlIGFsdGVybmF0aXZlcyBmb3IgcnVsZSByLiBUaGUgYmVzdFxuLy8gdGhpbmcgdG8gZG8gaXMgdG8gY29uc3VtZSB0b2tlbnMgdW50aWwgeW91IHNlZSBzb21ldGhpbmcgdGhhdFxuLy8gY2FuIGxlZ2FsbHkgZm9sbG93IGEgY2FsbCB0byByLy9vciogYW55IHJ1bGUgdGhhdCBjYWxsZWQgci5cbi8vIFlvdSBkb24ndCB3YW50IHRoZSBleGFjdCBzZXQgb2YgdmlhYmxlIG5leHQgdG9rZW5zIGJlY2F1c2UgdGhlXG4vLyBpbnB1dCBtaWdodCBqdXN0IGJlIG1pc3NpbmcgYSB0b2tlbi0teW91IG1pZ2h0IGNvbnN1bWUgdGhlXG4vLyByZXN0IG9mIHRoZSBpbnB1dCBsb29raW5nIGZvciBvbmUgb2YgdGhlIG1pc3NpbmcgdG9rZW5zLlxuLy9cbi8vIENvbnNpZGVyIGdyYW1tYXI6XG4vL1xuLy8gYSA6ICdbJyBiICddJ1xuLy8gfCAnKCcgYiAnKSdcbi8vIDtcbi8vIGIgOiBjICdeJyBJTlQgO1xuLy8gYyA6IElEXG4vLyB8IElOVFxuLy8gO1xuLy9cbi8vIEF0IGVhY2ggcnVsZSBpbnZvY2F0aW9uLCB0aGUgc2V0IG9mIHRva2VucyB0aGF0IGNvdWxkIGZvbGxvd1xuLy8gdGhhdCBydWxlIGlzIHB1c2hlZCBvbiBhIHN0YWNrLiBIZXJlIGFyZSB0aGUgdmFyaW91c1xuLy8gY29udGV4dC1zZW5zaXRpdmUgZm9sbG93IHNldHM6XG4vL1xuLy8gRk9MTE9XKGIxX2luX2EpID0gRklSU1QoJ10nKSA9ICddJ1xuLy8gRk9MTE9XKGIyX2luX2EpID0gRklSU1QoJyknKSA9ICcpJ1xuLy8gRk9MTE9XKGNfaW5fYikgPSBGSVJTVCgnXicpID0gJ14nXG4vL1xuLy8gVXBvbiBlcnJvbmVvdXMgaW5wdXQgXCJbXVwiLCB0aGUgY2FsbCBjaGFpbiBpc1xuLy9cbi8vIGEgLT4gYiAtPiBjXG4vL1xuLy8gYW5kLCBoZW5jZSwgdGhlIGZvbGxvdyBjb250ZXh0IHN0YWNrIGlzOlxuLy9cbi8vIGRlcHRoIGZvbGxvdyBzZXQgc3RhcnQgb2YgcnVsZSBleGVjdXRpb25cbi8vIDAgPEVPRj4gYSAoZnJvbSBtYWluKCkpXG4vLyAxICddJyBiXG4vLyAyICdeJyBjXG4vL1xuLy8gTm90aWNlIHRoYXQgJyknIGlzIG5vdCBpbmNsdWRlZCwgYmVjYXVzZSBiIHdvdWxkIGhhdmUgdG8gaGF2ZVxuLy8gYmVlbiBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCBjb250ZXh0IGluIHJ1bGUgYSBmb3IgJyknIHRvIGJlXG4vLyBpbmNsdWRlZC5cbi8vXG4vLyBGb3IgZXJyb3IgcmVjb3ZlcnksIHdlIGNhbm5vdCBjb25zaWRlciBGT0xMT1coYylcbi8vIChjb250ZXh0LXNlbnNpdGl2ZSBvciBvdGhlcndpc2UpLiBXZSBuZWVkIHRoZSBjb21iaW5lZCBzZXQgb2Zcbi8vIGFsbCBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1cgc2V0cy0tdGhlIHNldCBvZiBhbGwgdG9rZW5zIHRoYXRcbi8vIGNvdWxkIGZvbGxvdyBhbnkgcmVmZXJlbmNlIGluIHRoZSBjYWxsIGNoYWluLiBXZSBuZWVkIHRvXG4vLyByZXN5bmMgdG8gb25lIG9mIHRob3NlIHRva2Vucy4gTm90ZSB0aGF0IEZPTExPVyhjKT0nXicgYW5kIGlmXG4vLyB3ZSByZXN5bmMnZCB0byB0aGF0IHRva2VuLCB3ZSdkIGNvbnN1bWUgdW50aWwgRU9GLiBXZSBuZWVkIHRvXG4vLyBzeW5jIHRvIGNvbnRleHQtc2Vuc2l0aXZlIEZPTExPV3MgZm9yIGEsIGIsIGFuZCBjOiB7J10nLCdeJ30uXG4vLyBJbiB0aGlzIGNhc2UsIGZvciBpbnB1dCBcIltdXCIsIExBKDEpIGlzICddJyBhbmQgaW4gdGhlIHNldCwgc28gd2Ugd291bGRcbi8vIG5vdCBjb25zdW1lIGFueXRoaW5nLiBBZnRlciBwcmludGluZyBhbiBlcnJvciwgcnVsZSBjIHdvdWxkXG4vLyByZXR1cm4gbm9ybWFsbHkuIFJ1bGUgYiB3b3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ14nIHRob3VnaC5cbi8vIEF0IHRoaXMgcG9pbnQsIGl0IGdldHMgYSBtaXNtYXRjaGVkIHRva2VuIGVycm9yIGFuZCB0aHJvd3MgYW5cbi8vIGV4Y2VwdGlvbiAoc2luY2UgTEEoMSkgaXMgbm90IGluIHRoZSB2aWFibGUgZm9sbG93aW5nIHRva2VuXG4vLyBzZXQpLiBUaGUgcnVsZSBleGNlcHRpb24gaGFuZGxlciB0cmllcyB0byByZWNvdmVyLCBidXQgZmluZHNcbi8vIHRoZSBzYW1lIHJlY292ZXJ5IHNldCBhbmQgZG9lc24ndCBjb25zdW1lIGFueXRoaW5nLiBSdWxlIGJcbi8vIGV4aXRzIG5vcm1hbGx5IHJldHVybmluZyB0byBydWxlIGEuIE5vdyBpdCBmaW5kcyB0aGUgJ10nIChhbmRcbi8vIHdpdGggdGhlIHN1Y2Nlc3NmdWwgbWF0Y2ggZXhpdHMgZXJyb3JSZWNvdmVyeSBtb2RlKS5cbi8vXG4vLyBTbywgeW91IGNhbiBzZWUgdGhhdCB0aGUgcGFyc2VyIHdhbGtzIHVwIHRoZSBjYWxsIGNoYWluIGxvb2tpbmdcbi8vIGZvciB0aGUgdG9rZW4gdGhhdCB3YXMgYSBtZW1iZXIgb2YgdGhlIHJlY292ZXJ5IHNldC5cbi8vXG4vLyBFcnJvcnMgYXJlIG5vdCBnZW5lcmF0ZWQgaW4gZXJyb3JSZWNvdmVyeSBtb2RlLlxuLy9cbi8vIEFOVExSJ3MgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIGJhc2VkIHVwb24gb3JpZ2luYWwgaWRlYXM6XG4vL1xuLy8gXCJBbGdvcml0aG1zICsgRGF0YSBTdHJ1Y3R1cmVzID0gUHJvZ3JhbXNcIiBieSBOaWtsYXVzIFdpcnRoXG4vL1xuLy8gYW5kXG4vL1xuLy8gXCJBIG5vdGUgb24gZXJyb3IgcmVjb3ZlcnkgaW4gcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2Vyc1wiOlxuLy8gaHR0cDovL3BvcnRhbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD05NDc5MDIuOTQ3OTA1XG4vL1xuLy8gTGF0ZXIsIEpvc2VmIEdyb3NjaCBoYWQgc29tZSBnb29kIGlkZWFzOlxuLy9cbi8vIFwiRWZmaWNpZW50IGFuZCBDb21mb3J0YWJsZSBFcnJvciBSZWNvdmVyeSBpbiBSZWN1cnNpdmUgRGVzY2VudFxuLy8gUGFyc2Vyc1wiOlxuLy8gZnRwOi8vd3d3LmNvY29sYWIuY29tL3Byb2R1Y3RzL2NvY2t0YWlsL2RvY2E0LnBzL2VsbC5wcy56aXBcbi8vXG4vLyBMaWtlIEdyb3NjaCBJIGltcGxlbWVudCBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1cgc2V0cyB0aGF0IGFyZSBjb21iaW5lZFxuLy8gYXQgcnVuLXRpbWUgdXBvbiBlcnJvciB0byBhdm9pZCBvdmVyaGVhZCBkdXJpbmcgcGFyc2luZy5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuZ2V0RXJyb3JSZWNvdmVyeVNldCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICB2YXIgYXRuID0gcmVjb2duaXplci5faW50ZXJwLmF0bjtcbiAgICB2YXIgY3R4ID0gcmVjb2duaXplci5fY3R4O1xuICAgIHZhciByZWNvdmVyU2V0ID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgd2hpbGUgKGN0eCAhPT0gbnVsbCAmJiBjdHguaW52b2tpbmdTdGF0ZT49MCkge1xuICAgICAgICAvLyBjb21wdXRlIHdoYXQgZm9sbG93cyB3aG8gaW52b2tlZCB1c1xuICAgICAgICB2YXIgaW52b2tpbmdTdGF0ZSA9IGF0bi5zdGF0ZXNbY3R4Lmludm9raW5nU3RhdGVdO1xuICAgICAgICB2YXIgcnQgPSBpbnZva2luZ1N0YXRlLnRyYW5zaXRpb25zWzBdO1xuICAgICAgICB2YXIgZm9sbG93ID0gYXRuLm5leHRUb2tlbnMocnQuZm9sbG93U3RhdGUpO1xuICAgICAgICByZWNvdmVyU2V0LmFkZFNldChmb2xsb3cpO1xuICAgICAgICBjdHggPSBjdHgucGFyZW50Q3R4O1xuICAgIH1cbiAgICByZWNvdmVyU2V0LnJlbW92ZU9uZShUb2tlbi5FUFNJTE9OKTtcbiAgICByZXR1cm4gcmVjb3ZlclNldDtcbn07XG5cbi8vIENvbnN1bWUgdG9rZW5zIHVudGlsIG9uZSBtYXRjaGVzIHRoZSBnaXZlbiB0b2tlbiBzZXQuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5jb25zdW1lVW50aWwgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBzZXQpIHtcbiAgICB2YXIgdHR5cGUgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTEEoMSk7XG4gICAgd2hpbGUoIHR0eXBlICE9PSBUb2tlbi5FT0YgJiYgIXNldC5jb250YWlucyh0dHlwZSkpIHtcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgICAgIHR0eXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIH1cbn07XG5cbi8vXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3l9IHJlc3BvbmRzIHRvIHN5bnRheCBlcnJvcnNcbi8vIGJ5IGltbWVkaWF0ZWx5IGNhbmNlbGluZyB0aGUgcGFyc2Ugb3BlcmF0aW9uIHdpdGggYVxuLy8ge0BsaW5rIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9ufS4gVGhlIGltcGxlbWVudGF0aW9uIGVuc3VyZXMgdGhhdCB0aGVcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vZXhjZXB0aW9ufSBmaWVsZCBpcyBzZXQgZm9yIGFsbCBwYXJzZSB0cmVlIG5vZGVzXG4vLyB0aGF0IHdlcmUgbm90IGNvbXBsZXRlZCBwcmlvciB0byBlbmNvdW50ZXJpbmcgdGhlIGVycm9yLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBlcnJvciBzdHJhdGVneSBpcyB1c2VmdWwgaW4gdGhlIGZvbGxvd2luZyBzY2VuYXJpb3MuPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT48c3Ryb25nPlR3by1zdGFnZSBwYXJzaW5nOjwvc3Ryb25nPiBUaGlzIGVycm9yIHN0cmF0ZWd5IGFsbG93cyB0aGUgZmlyc3Rcbi8vIHN0YWdlIG9mIHR3by1zdGFnZSBwYXJzaW5nIHRvIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBpZiBhbiBlcnJvciBpc1xuLy8gZW5jb3VudGVyZWQsIGFuZCBpbW1lZGlhdGVseSBmYWxsIGJhY2sgdG8gdGhlIHNlY29uZCBzdGFnZS4gSW4gYWRkaXRpb24gdG9cbi8vIGF2b2lkaW5nIHdhc3RlZCB3b3JrIGJ5IGF0dGVtcHRpbmcgdG8gcmVjb3ZlciBmcm9tIGVycm9ycyBoZXJlLCB0aGUgZW1wdHlcbi8vIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBCYWlsRXJyb3JTdHJhdGVneS8vc3luY30gaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mXG4vLyB0aGUgZmlyc3Qgc3RhZ2UuPC9saT5cbi8vIDxsaT48c3Ryb25nPlNpbGVudCB2YWxpZGF0aW9uOjwvc3Ryb25nPiBXaGVuIHN5bnRheCBlcnJvcnMgYXJlIG5vdCBiZWluZ1xuLy8gcmVwb3J0ZWQgb3IgbG9nZ2VkLCBhbmQgdGhlIHBhcnNlIHJlc3VsdCBpcyBzaW1wbHkgaWdub3JlZCBpZiBlcnJvcnMgb2NjdXIsXG4vLyB0aGUge0BsaW5rIEJhaWxFcnJvclN0cmF0ZWd5fSBhdm9pZHMgd2FzdGluZyB3b3JrIG9uIHJlY292ZXJpbmcgZnJvbSBlcnJvcnNcbi8vIHdoZW4gdGhlIHJlc3VsdCB3aWxsIGJlIGlnbm9yZWQgZWl0aGVyIHdheS48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyA8cD5cbi8vIHtAY29kZSBteXBhcnNlci5zZXRFcnJvckhhbmRsZXIobmV3IEJhaWxFcnJvclN0cmF0ZWd5KCkpO308L3A+XG4vL1xuLy8gQHNlZSBQYXJzZXIvL3NldEVycm9ySGFuZGxlcihBTlRMUkVycm9yU3RyYXRlZ3kpXG4vL1xuZnVuY3Rpb24gQmFpbEVycm9yU3RyYXRlZ3koKSB7XG5cdERlZmF1bHRFcnJvclN0cmF0ZWd5LmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZSk7XG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYWlsRXJyb3JTdHJhdGVneTtcblxuLy8gSW5zdGVhZCBvZiByZWNvdmVyaW5nIGZyb20gZXhjZXB0aW9uIHtAY29kZSBlfSwgcmUtdGhyb3cgaXQgd3JhcHBlZFxuLy8gaW4gYSB7QGxpbmsgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb259IHNvIGl0IGlzIG5vdCBjYXVnaHQgYnkgdGhlXG4vLyBydWxlIGZ1bmN0aW9uIGNhdGNoZXMuIFVzZSB7QGxpbmsgRXhjZXB0aW9uLy9nZXRDYXVzZSgpfSB0byBnZXQgdGhlXG4vLyBvcmlnaW5hbCB7QGxpbmsgUmVjb2duaXRpb25FeGNlcHRpb259LlxuLy9cbkJhaWxFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZWNvdmVyID0gZnVuY3Rpb24ocmVjb2duaXplciwgZSkge1xuICAgIHZhciBjb250ZXh0ID0gcmVjb2duaXplci5fY3R4O1xuICAgIHdoaWxlIChjb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gZTtcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50Q3R4O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24oZSk7XG59O1xuXG4vLyBNYWtlIHN1cmUgd2UgZG9uJ3QgYXR0ZW1wdCB0byByZWNvdmVyIGlubGluZTsgaWYgdGhlIHBhcnNlclxuLy8gc3VjY2Vzc2Z1bGx5IHJlY292ZXJzLCBpdCB3b24ndCB0aHJvdyBhbiBleGNlcHRpb24uXG4vL1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5yZWNvdmVyKHJlY29nbml6ZXIsIG5ldyBJbnB1dE1pc21hdGNoRXhjZXB0aW9uKHJlY29nbml6ZXIpKTtcbn07XG5cbi8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBhdHRlbXB0IHRvIHJlY292ZXIgZnJvbSBwcm9ibGVtcyBpbiBzdWJydWxlcy4vL1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gcGFzc1xufTtcblxuZXhwb3J0cy5CYWlsRXJyb3JTdHJhdGVneSA9IEJhaWxFcnJvclN0cmF0ZWd5O1xuZXhwb3J0cy5EZWZhdWx0RXJyb3JTdHJhdGVneSA9IERlZmF1bHRFcnJvclN0cmF0ZWd5O1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBUaGUgcm9vdCBvZiB0aGUgQU5UTFIgZXhjZXB0aW9uIGhpZXJhcmNoeS4gSW4gZ2VuZXJhbCwgQU5UTFIgdHJhY2tzIGp1c3Rcbi8vICAzIGtpbmRzIG9mIGVycm9yczogcHJlZGljdGlvbiBlcnJvcnMsIGZhaWxlZCBwcmVkaWNhdGUgZXJyb3JzLCBhbmRcbi8vICBtaXNtYXRjaGVkIGlucHV0IGVycm9ycy4gSW4gZWFjaCBjYXNlLCB0aGUgcGFyc2VyIGtub3dzIHdoZXJlIGl0IGlzXG4vLyAgaW4gdGhlIGlucHV0LCB3aGVyZSBpdCBpcyBpbiB0aGUgQVROLCB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrLFxuLy8gIGFuZCB3aGF0IGtpbmQgb2YgcHJvYmxlbSBvY2N1cnJlZC5cblxudmFyIFByZWRpY2F0ZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuLy4uL2F0bi9UcmFuc2l0aW9uJykuUHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUmVjb2duaXRpb25FeGNlcHRpb24ocGFyYW1zKSB7XG5cdEVycm9yLmNhbGwodGhpcyk7XG5cdGlmICghIUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlY29nbml0aW9uRXhjZXB0aW9uKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcblx0fVxuXHR0aGlzLm1lc3NhZ2UgPSBwYXJhbXMubWVzc2FnZTtcbiAgICB0aGlzLnJlY29nbml6ZXIgPSBwYXJhbXMucmVjb2duaXplcjtcbiAgICB0aGlzLmlucHV0ID0gcGFyYW1zLmlucHV0O1xuICAgIHRoaXMuY3R4ID0gcGFyYW1zLmN0eDtcbiAgICAvLyBUaGUgY3VycmVudCB7QGxpbmsgVG9rZW59IHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuIFNpbmNlIG5vdCBhbGwgc3RyZWFtc1xuICAgIC8vIHN1cHBvcnQgYWNjZXNzaW5nIHN5bWJvbHMgYnkgaW5kZXgsIHdlIGhhdmUgdG8gdHJhY2sgdGhlIHtAbGluayBUb2tlbn1cbiAgICAvLyBpbnN0YW5jZSBpdHNlbGYuXG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IG51bGw7XG4gICAgLy8gR2V0IHRoZSBBVE4gc3RhdGUgbnVtYmVyIHRoZSBwYXJzZXIgd2FzIGluIGF0IHRoZSB0aW1lIHRoZSBlcnJvclxuICAgIC8vIG9jY3VycmVkLiBGb3Ige0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSBhbmRcbiAgICAvLyB7QGxpbmsgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbn0gZXhjZXB0aW9ucywgdGhpcyBpcyB0aGVcbiAgICAvLyB7QGxpbmsgRGVjaXNpb25TdGF0ZX0gbnVtYmVyLiBGb3Igb3RoZXJzLCBpdCBpcyB0aGUgc3RhdGUgd2hvc2Ugb3V0Z29pbmdcbiAgICAvLyBlZGdlIHdlIGNvdWxkbid0IG1hdGNoLlxuICAgIHRoaXMub2ZmZW5kaW5nU3RhdGUgPSAtMTtcbiAgICBpZiAodGhpcy5yZWNvZ25pemVyIT09bnVsbCkge1xuICAgICAgICB0aGlzLm9mZmVuZGluZ1N0YXRlID0gdGhpcy5yZWNvZ25pemVyLnN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjb2duaXRpb25FeGNlcHRpb247XG5cbi8vIDxwPklmIHRoZSBzdGF0ZSBudW1iZXIgaXMgbm90IGtub3duLCB0aGlzIG1ldGhvZCByZXR1cm5zIC0xLjwvcD5cblxuLy9cbi8vIEdldHMgdGhlIHNldCBvZiBpbnB1dCBzeW1ib2xzIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGZvbGxvdyB0aGVcbi8vIHByZXZpb3VzbHkgbWF0Y2hlZCBzeW1ib2wgYXQgdGhlIHRpbWUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93bi5cbi8vXG4vLyA8cD5JZiB0aGUgc2V0IG9mIGV4cGVjdGVkIHRva2VucyBpcyBub3Qga25vd24gYW5kIGNvdWxkIG5vdCBiZSBjb21wdXRlZCxcbi8vIHRoaXMgbWV0aG9kIHJldHVybnMge0Bjb2RlIG51bGx9LjwvcD5cbi8vXG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgdG9rZW4gdHlwZXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBmb2xsb3cgdGhlIGN1cnJlbnRcbi8vIHN0YXRlIGluIHRoZSBBVE4sIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS5cbi8vIC9cblJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnJlY29nbml6ZXIhPT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY29nbml6ZXIuYXRuLmdldEV4cGVjdGVkVG9rZW5zKHRoaXMub2ZmZW5kaW5nU3RhdGUsIHRoaXMuY3R4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5SZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xufTtcblxuZnVuY3Rpb24gTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbihsZXhlciwgaW5wdXQsIHN0YXJ0SW5kZXgsIGRlYWRFbmRDb25maWdzKSB7XG5cdFJlY29nbml0aW9uRXhjZXB0aW9uLmNhbGwodGhpcywge21lc3NhZ2U6XCJcIiwgcmVjb2duaXplcjpsZXhlciwgaW5wdXQ6aW5wdXQsIGN0eDpudWxsfSk7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICB0aGlzLmRlYWRFbmRDb25maWdzID0gZGVhZEVuZENvbmZpZ3M7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuXG5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzeW1ib2wgPSBcIlwiO1xuICAgIGlmICh0aGlzLnN0YXJ0SW5kZXggPj0gMCAmJiB0aGlzLnN0YXJ0SW5kZXggPCB0aGlzLmlucHV0LnNpemUpIHtcbiAgICAgICAgc3ltYm9sID0gdGhpcy5pbnB1dC5nZXRUZXh0KCh0aGlzLnN0YXJ0SW5kZXgsdGhpcy5zdGFydEluZGV4KSk7XG4gICAgfVxuICAgIHJldHVybiBcIkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb25cIiArIHN5bWJvbDtcbn07XG5cbi8vIEluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgY291bGQgbm90IGRlY2lkZSB3aGljaCBvZiB0d28gb3IgbW9yZSBwYXRoc1xuLy8gdG8gdGFrZSBiYXNlZCB1cG9uIHRoZSByZW1haW5pbmcgaW5wdXQuIEl0IHRyYWNrcyB0aGUgc3RhcnRpbmcgdG9rZW5cbi8vIG9mIHRoZSBvZmZlbmRpbmcgaW5wdXQgYW5kIGFsc28ga25vd3Mgd2hlcmUgdGhlIHBhcnNlciB3YXNcbi8vIGluIHRoZSB2YXJpb3VzIHBhdGhzIHdoZW4gdGhlIGVycm9yLiBSZXBvcnRlZCBieSByZXBvcnROb1ZpYWJsZUFsdGVybmF0aXZlKClcbi8vXG5mdW5jdGlvbiBOb1ZpYWJsZUFsdEV4Y2VwdGlvbihyZWNvZ25pemVyLCBpbnB1dCwgc3RhcnRUb2tlbiwgb2ZmZW5kaW5nVG9rZW4sIGRlYWRFbmRDb25maWdzLCBjdHgpIHtcblx0Y3R4ID0gY3R4IHx8IHJlY29nbml6ZXIuX2N0eDtcblx0b2ZmZW5kaW5nVG9rZW4gPSBvZmZlbmRpbmdUb2tlbiB8fCByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuXHRzdGFydFRva2VuID0gc3RhcnRUb2tlbiB8fCByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpbnB1dCA9IGlucHV0IHx8IHJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKTtcblx0UmVjb2duaXRpb25FeGNlcHRpb24uY2FsbCh0aGlzLCB7bWVzc2FnZTpcIlwiLCByZWNvZ25pemVyOnJlY29nbml6ZXIsIGlucHV0OmlucHV0LCBjdHg6Y3R4fSk7XG4gICAgLy8gV2hpY2ggY29uZmlndXJhdGlvbnMgZGlkIHdlIHRyeSBhdCBpbnB1dC5pbmRleCgpIHRoYXQgY291bGRuJ3QgbWF0Y2hcblx0Ly8gaW5wdXQuTFQoMSk/Ly9cbiAgICB0aGlzLmRlYWRFbmRDb25maWdzID0gZGVhZEVuZENvbmZpZ3M7XG4gICAgLy8gVGhlIHRva2VuIG9iamVjdCBhdCB0aGUgc3RhcnQgaW5kZXg7IHRoZSBpbnB1dCBzdHJlYW0gbWlnaHRcbiAgICAvLyBub3QgYmUgYnVmZmVyaW5nIHRva2VucyBzbyBnZXQgYSByZWZlcmVuY2UgdG8gaXQuIChBdCB0aGVcbiAgICAvLyB0aW1lIHRoZSBlcnJvciBvY2N1cnJlZCwgb2YgY291cnNlIHRoZSBzdHJlYW0gbmVlZHMgdG8ga2VlcCBhXG4gICAgLy8gYnVmZmVyIGFsbCBvZiB0aGUgdG9rZW5zIGJ1dCBsYXRlciB3ZSBtaWdodCBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhvc2UuKVxuICAgIHRoaXMuc3RhcnRUb2tlbiA9IHN0YXJ0VG9rZW47XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IG9mZmVuZGluZ1Rva2VuO1xufVxuXG5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSk7XG5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuLy8gVGhpcyBzaWduaWZpZXMgYW55IGtpbmQgb2YgbWlzbWF0Y2hlZCBpbnB1dCBleGNlcHRpb25zIHN1Y2ggYXNcbi8vIHdoZW4gdGhlIGN1cnJlbnQgaW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHRva2VuLlxuLy9cbmZ1bmN0aW9uIElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcikge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOlwiXCIsIHJlY29nbml6ZXI6cmVjb2duaXplciwgaW5wdXQ6cmVjb2duaXplci5nZXRJbnB1dFN0cmVhbSgpLCBjdHg6cmVjb2duaXplci5fY3R4fSk7XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG59XG5cbklucHV0TWlzbWF0Y2hFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuXG4vLyBBIHNlbWFudGljIHByZWRpY2F0ZSBmYWlsZWQgZHVyaW5nIHZhbGlkYXRpb24uIFZhbGlkYXRpb24gb2YgcHJlZGljYXRlc1xuLy8gb2NjdXJzIHdoZW4gbm9ybWFsbHkgcGFyc2luZyB0aGUgYWx0ZXJuYXRpdmUganVzdCBsaWtlIG1hdGNoaW5nIGEgdG9rZW4uXG4vLyBEaXNhbWJpZ3VhdGluZyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBvY2N1cnMgd2hlbiB3ZSB0ZXN0IGEgcHJlZGljYXRlIGR1cmluZ1xuLy8gcHJlZGljdGlvbi5cblxuZnVuY3Rpb24gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHJlY29nbml6ZXIsIHByZWRpY2F0ZSwgbWVzc2FnZSkge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOnRoaXMuZm9ybWF0TWVzc2FnZShwcmVkaWNhdGUsbWVzc2FnZSB8fCBudWxsKSwgcmVjb2duaXplcjpyZWNvZ25pemVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OnJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKSwgY3R4OnJlY29nbml6ZXIuX2N0eH0pO1xuICAgIHZhciBzID0gcmVjb2duaXplci5faW50ZXJwLmF0bi5zdGF0ZXNbcmVjb2duaXplci5zdGF0ZV07XG4gICAgdmFyIHRyYW5zID0gcy50cmFuc2l0aW9uc1swXTtcbiAgICBpZiAodHJhbnMgaW5zdGFuY2VvZiBQcmVkaWNhdGVUcmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMucnVsZUluZGV4ID0gdHJhbnMucnVsZUluZGV4O1xuICAgICAgICB0aGlzLnByZWRpY2F0ZUluZGV4ID0gdHJhbnMucHJlZEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucnVsZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGVJbmRleCA9IDA7XG4gICAgfVxuICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgIHRoaXMub2ZmZW5kaW5nVG9rZW4gPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcblxuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZS5mb3JtYXRNZXNzYWdlID0gZnVuY3Rpb24ocHJlZGljYXRlLCBtZXNzYWdlKSB7XG4gICAgaWYgKG1lc3NhZ2UgIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJmYWlsZWQgcHJlZGljYXRlOiB7XCIgKyBwcmVkaWNhdGUgKyBcIn0/XCI7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24oKSB7XG5cdEVycm9yLmNhbGwodGhpcyk7XG5cdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uO1xuXG5leHBvcnRzLlJlY29nbml0aW9uRXhjZXB0aW9uID0gUmVjb2duaXRpb25FeGNlcHRpb247XG5leHBvcnRzLk5vVmlhYmxlQWx0RXhjZXB0aW9uID0gTm9WaWFibGVBbHRFeGNlcHRpb247XG5leHBvcnRzLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbjtcbmV4cG9ydHMuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uO1xuZXhwb3J0cy5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbiA9IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5leHBvcnRzLlJlY29nbml0aW9uRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5SZWNvZ25pdGlvbkV4Y2VwdGlvbjtcbmV4cG9ydHMuTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL0Vycm9ycycpLk5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5JbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuZXhwb3J0cy5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24gPSByZXF1aXJlKCcuL0Vycm9ycycpLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbmV4cG9ydHMuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL0RpYWdub3N0aWNFcnJvckxpc3RlbmVyJykuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7XG5leHBvcnRzLkJhaWxFcnJvclN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9FcnJvclN0cmF0ZWd5JykuQmFpbEVycm9yU3RyYXRlZ3k7XG5leHBvcnRzLkVycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL0Vycm9yTGlzdGVuZXInKS5FcnJvckxpc3RlbmVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZXhwb3J0cy5hdG4gPSByZXF1aXJlKCcuL2F0bi9pbmRleCcpO1xuZXhwb3J0cy5jb2RlcG9pbnRhdCA9IHJlcXVpcmUoJy4vcG9seWZpbGxzL2NvZGVwb2ludGF0Jyk7XG5leHBvcnRzLmRmYSA9IHJlcXVpcmUoJy4vZGZhL2luZGV4Jyk7XG5leHBvcnRzLmZyb21jb2RlcG9pbnQgPSByZXF1aXJlKCcuL3BvbHlmaWxscy9mcm9tY29kZXBvaW50Jyk7XG5leHBvcnRzLnRyZWUgPSByZXF1aXJlKCcuL3RyZWUvaW5kZXgnKTtcbmV4cG9ydHMuZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yL2luZGV4Jyk7XG5leHBvcnRzLlRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuZXhwb3J0cy5DaGFyU3RyZWFtcyA9IHJlcXVpcmUoJy4vQ2hhclN0cmVhbXMnKS5DaGFyU3RyZWFtcztcbmV4cG9ydHMuQ29tbW9uVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuQ29tbW9uVG9rZW47XG5leHBvcnRzLklucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xuZXhwb3J0cy5GaWxlU3RyZWFtID0gcmVxdWlyZSgnLi9GaWxlU3RyZWFtJykuRmlsZVN0cmVhbTtcbmV4cG9ydHMuQ29tbW9uVG9rZW5TdHJlYW0gPSByZXF1aXJlKCcuL0NvbW1vblRva2VuU3RyZWFtJykuQ29tbW9uVG9rZW5TdHJlYW07XG5leHBvcnRzLkxleGVyID0gcmVxdWlyZSgnLi9MZXhlcicpLkxleGVyO1xuZXhwb3J0cy5QYXJzZXIgPSByZXF1aXJlKCcuL1BhcnNlcicpLlBhcnNlcjtcbnZhciBwYyA9IHJlcXVpcmUoJy4vUHJlZGljdGlvbkNvbnRleHQnKTtcbmV4cG9ydHMuUHJlZGljdGlvbkNvbnRleHRDYWNoZSA9IHBjLlByZWRpY3Rpb25Db250ZXh0Q2FjaGU7XG5leHBvcnRzLlBhcnNlclJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi9QYXJzZXJSdWxlQ29udGV4dCcpLlBhcnNlclJ1bGVDb250ZXh0O1xuZXhwb3J0cy5JbnRlcnZhbCA9IHJlcXVpcmUoJy4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcbmV4cG9ydHMuVXRpbHMgPSByZXF1aXJlKCcuL1V0aWxzJyk7XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2NvZGVwb2ludGF0IHYwLjIuMCBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KSB7XG5cdChmdW5jdGlvbigpIHtcblx0XHQndXNlIHN0cmljdCc7IC8vIG5lZWRlZCB0byBzdXBwb3J0IGBhcHBseWAvYGNhbGxgIHdpdGggYHVuZGVmaW5lZGAvYG51bGxgXG5cdFx0dmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gSUUgOCBvbmx5IHN1cHBvcnRzIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG9uIERPTSBlbGVtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG9iamVjdCA9IHt9O1xuXHRcdFx0XHR2YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gJGRlZmluZVByb3BlcnR5KG9iamVjdCwgb2JqZWN0LCBvYmplY3QpICYmICRkZWZpbmVQcm9wZXJ0eTtcblx0XHRcdH0gY2F0Y2goZXJyb3IpIHt9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0oKSk7XG5cdFx0dmFyIGNvZGVQb2ludEF0ID0gZnVuY3Rpb24ocG9zaXRpb24pIHtcblx0XHRcdGlmICh0aGlzID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKCk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuXHRcdFx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRcdFx0Ly8gYFRvSW50ZWdlcmBcblx0XHRcdHZhciBpbmRleCA9IHBvc2l0aW9uID8gTnVtYmVyKHBvc2l0aW9uKSA6IDA7XG5cdFx0XHRpZiAoaW5kZXggIT0gaW5kZXgpIHsgLy8gYmV0dGVyIGBpc05hTmBcblx0XHRcdFx0aW5kZXggPSAwO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQWNjb3VudCBmb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzOlxuXHRcdFx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzaXplKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBHZXQgdGhlIGZpcnN0IGNvZGUgdW5pdFxuXHRcdFx0dmFyIGZpcnN0ID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpO1xuXHRcdFx0dmFyIHNlY29uZDtcblx0XHRcdGlmICggLy8gY2hlY2sgaWYgaXTigJlzIHRoZSBzdGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdGZpcnN0ID49IDB4RDgwMCAmJiBmaXJzdCA8PSAweERCRkYgJiYgLy8gaGlnaCBzdXJyb2dhdGVcblx0XHRcdFx0c2l6ZSA+IGluZGV4ICsgMSAvLyB0aGVyZSBpcyBhIG5leHQgY29kZSB1bml0XG5cdFx0XHQpIHtcblx0XHRcdFx0c2Vjb25kID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcblx0XHRcdFx0aWYgKHNlY29uZCA+PSAweERDMDAgJiYgc2Vjb25kIDw9IDB4REZGRikgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdFx0cmV0dXJuIChmaXJzdCAtIDB4RDgwMCkgKiAweDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmaXJzdDtcblx0XHR9O1xuXHRcdGlmIChkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0ZGVmaW5lUHJvcGVydHkoU3RyaW5nLnByb3RvdHlwZSwgJ2NvZGVQb2ludEF0Jywge1xuXHRcdFx0XHQndmFsdWUnOiBjb2RlUG9pbnRBdCxcblx0XHRcdFx0J2NvbmZpZ3VyYWJsZSc6IHRydWUsXG5cdFx0XHRcdCd3cml0YWJsZSc6IHRydWVcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0ID0gY29kZVBvaW50QXQ7XG5cdFx0fVxuXHR9KCkpO1xufVxuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9mcm9tY29kZXBvaW50IHYwLjIuMSBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcuZnJvbUNvZGVQb2ludCkge1xuXHQoZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gSUUgOCBvbmx5IHN1cHBvcnRzIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG9uIERPTSBlbGVtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG9iamVjdCA9IHt9O1xuXHRcdFx0XHR2YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gJGRlZmluZVByb3BlcnR5KG9iamVjdCwgb2JqZWN0LCBvYmplY3QpICYmICRkZWZpbmVQcm9wZXJ0eTtcblx0XHRcdH0gY2F0Y2goZXJyb3IpIHt9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0oKSk7XG5cdFx0dmFyIHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cdFx0dmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblx0XHR2YXIgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uKF8pIHtcblx0XHRcdHZhciBNQVhfU0laRSA9IDB4NDAwMDtcblx0XHRcdHZhciBjb2RlVW5pdHMgPSBbXTtcblx0XHRcdHZhciBoaWdoU3Vycm9nYXRlO1xuXHRcdFx0dmFyIGxvd1N1cnJvZ2F0ZTtcblx0XHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdFx0dmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRpZiAoIWxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gJyc7XG5cdFx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0XHR2YXIgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWlzRmluaXRlKGNvZGVQb2ludCkgfHwgLy8gYE5hTmAsIGArSW5maW5pdHlgLCBvciBgLUluZmluaXR5YFxuXHRcdFx0XHRcdGNvZGVQb2ludCA8IDAgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHRcdFx0Y29kZVBvaW50ID4gMHgxMEZGRkYgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHRcdFx0Zmxvb3IoY29kZVBvaW50KSAhPSBjb2RlUG9pbnQgLy8gbm90IGFuIGludGVnZXJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCBjb2RlIHBvaW50OiAnICsgY29kZVBvaW50KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY29kZVBvaW50IDw9IDB4RkZGRikgeyAvLyBCTVAgY29kZSBwb2ludFxuXHRcdFx0XHRcdGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XG5cdFx0XHRcdH0gZWxzZSB7IC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdFx0Y29kZVBvaW50IC09IDB4MTAwMDA7XG5cdFx0XHRcdFx0aGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgMHhEODAwO1xuXHRcdFx0XHRcdGxvd1N1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgJSAweDQwMCkgKyAweERDMDA7XG5cdFx0XHRcdFx0Y29kZVVuaXRzLnB1c2goaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5kZXggKyAxID09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cyk7XG5cdFx0XHRcdFx0Y29kZVVuaXRzLmxlbmd0aCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0XHRpZiAoZGVmaW5lUHJvcGVydHkpIHtcblx0XHRcdGRlZmluZVByb3BlcnR5KFN0cmluZywgJ2Zyb21Db2RlUG9pbnQnLCB7XG5cdFx0XHRcdCd2YWx1ZSc6IGZyb21Db2RlUG9pbnQsXG5cdFx0XHRcdCdjb25maWd1cmFibGUnOiB0cnVlLFxuXHRcdFx0XHQnd3JpdGFibGUnOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0U3RyaW5nLmZyb21Db2RlUG9pbnQgPSBmcm9tQ29kZVBvaW50O1xuXHRcdH1cblx0fSgpKTtcbn1cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vLyBUaGUgYmFzaWMgbm90aW9uIG9mIGEgdHJlZSBoYXMgYSBwYXJlbnQsIGEgcGF5bG9hZCwgYW5kIGEgbGlzdCBvZiBjaGlsZHJlbi5cbi8vICBJdCBpcyB0aGUgbW9zdCBhYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGFsbCB0aGUgdHJlZXMgdXNlZCBieSBBTlRMUi5cbi8vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IG5ldyBJbnRlcnZhbCgtMSwgLTIpO1xudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMuanMnKTtcblxuXG5mdW5jdGlvbiBUcmVlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gU3ludGF4VHJlZSgpIHtcblx0VHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3ludGF4VHJlZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyZWUucHJvdG90eXBlKTtcblN5bnRheFRyZWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ludGF4VHJlZTtcblxuZnVuY3Rpb24gUGFyc2VUcmVlKCkge1xuXHRTeW50YXhUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTeW50YXhUcmVlLnByb3RvdHlwZSk7XG5QYXJzZVRyZWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VUcmVlO1xuXG5mdW5jdGlvbiBSdWxlTm9kZSgpIHtcblx0UGFyc2VUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlTm9kZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcnNlVHJlZS5wcm90b3R5cGUpO1xuUnVsZU5vZGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUnVsZU5vZGU7XG5cbmZ1bmN0aW9uIFRlcm1pbmFsTm9kZSgpIHtcblx0UGFyc2VUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5UZXJtaW5hbE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWUucHJvdG90eXBlKTtcblRlcm1pbmFsTm9kZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXJtaW5hbE5vZGU7XG5cbmZ1bmN0aW9uIEVycm9yTm9kZSgpIHtcblx0VGVybWluYWxOb2RlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5FcnJvck5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGUucHJvdG90eXBlKTtcbkVycm9yTm9kZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvck5vZGU7XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZVZpc2l0b3IoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWVWaXNpdG9yLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uKGN0eCkge1xuIFx0aWYgKEFycmF5LmlzQXJyYXkoY3R4KSkge1xuXHRcdHJldHVybiBjdHgubWFwKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQuYWNjZXB0KHRoaXMpO1xuICAgICAgICB9LCB0aGlzKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY3R4LmFjY2VwdCh0aGlzKTtcblx0fVxufTtcblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRDaGlsZHJlbiA9IGZ1bmN0aW9uKGN0eCkge1xuXHRpZiAoY3R4LmNoaWxkcmVuKSB7XG5cdFx0cmV0dXJuIHRoaXMudmlzaXQoY3R4LmNoaWxkcmVuKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG5QYXJzZVRyZWVWaXNpdG9yLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRFcnJvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5cbmZ1bmN0aW9uIFBhcnNlVHJlZUxpc3RlbmVyKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLnZpc2l0VGVybWluYWwgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUudmlzaXRFcnJvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFdmVyeVJ1bGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUuZXhpdEV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbn07XG5cbmZ1bmN0aW9uIFRlcm1pbmFsTm9kZUltcGwoc3ltYm9sKSB7XG5cdFRlcm1pbmFsTm9kZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnBhcmVudEN0eCA9IG51bGw7XG5cdHRoaXMuc3ltYm9sID0gc3ltYm9sO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRlcm1pbmFsTm9kZS5wcm90b3R5cGUpO1xuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXJtaW5hbE5vZGVJbXBsO1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRTeW1ib2wgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnBhcmVudEN0eDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFBheWxvYWQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuc3ltYm9sID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG5cdH1cblx0dmFyIHRva2VuSW5kZXggPSB0aGlzLnN5bWJvbC50b2tlbkluZGV4O1xuXHRyZXR1cm4gbmV3IEludGVydmFsKHRva2VuSW5kZXgsIHRva2VuSW5kZXgpO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gMDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKHZpc2l0b3IpIHtcblx0cmV0dXJuIHZpc2l0b3IudmlzaXRUZXJtaW5hbCh0aGlzKTtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sLnRleHQ7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5zeW1ib2wudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5zeW1ib2wudGV4dDtcblx0fVxufTtcblxuLy8gUmVwcmVzZW50cyBhIHRva2VuIHRoYXQgd2FzIGNvbnN1bWVkIGR1cmluZyByZXN5bmNocm9uaXphdGlvblxuLy8gcmF0aGVyIHRoYW4gZHVyaW5nIGEgdmFsaWQgbWF0Y2ggb3BlcmF0aW9uLiBGb3IgZXhhbXBsZSxcbi8vIHdlIHdpbGwgY3JlYXRlIHRoaXMga2luZCBvZiBhIG5vZGUgZHVyaW5nIHNpbmdsZSB0b2tlbiBpbnNlcnRpb25cbi8vIGFuZCBkZWxldGlvbiBhcyB3ZWxsIGFzIGR1cmluZyBcImNvbnN1bWUgdW50aWwgZXJyb3IgcmVjb3Zlcnkgc2V0XCJcbi8vIHVwb24gbm8gdmlhYmxlIGFsdGVybmF0aXZlIGV4Y2VwdGlvbnMuXG5cbmZ1bmN0aW9uIEVycm9yTm9kZUltcGwodG9rZW4pIHtcblx0VGVybWluYWxOb2RlSW1wbC5jYWxsKHRoaXMsIHRva2VuKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZSk7XG5FcnJvck5vZGVJbXBsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yTm9kZUltcGw7XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlLmlzRXJyb3JOb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0cnVlO1xufTtcblxuRXJyb3JOb2RlSW1wbC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24odmlzaXRvcikge1xuXHRyZXR1cm4gdmlzaXRvci52aXNpdEVycm9yTm9kZSh0aGlzKTtcbn07XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZVdhbGtlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlVHJlZVdhbGtlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uKGxpc3RlbmVyLCB0KSB7XG5cdHZhciBlcnJvck5vZGUgPSB0IGluc3RhbmNlb2YgRXJyb3JOb2RlIHx8XG5cdFx0XHQodC5pc0Vycm9yTm9kZSAhPT0gdW5kZWZpbmVkICYmIHQuaXNFcnJvck5vZGUoKSk7XG5cdGlmIChlcnJvck5vZGUpIHtcblx0XHRsaXN0ZW5lci52aXNpdEVycm9yTm9kZSh0KTtcblx0fSBlbHNlIGlmICh0IGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0bGlzdGVuZXIudmlzaXRUZXJtaW5hbCh0KTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmVudGVyUnVsZShsaXN0ZW5lciwgdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0LmdldENoaWxkQ291bnQoKTsgaSsrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0LmdldENoaWxkKGkpO1xuXHRcdFx0dGhpcy53YWxrKGxpc3RlbmVyLCBjaGlsZCk7XG5cdFx0fVxuXHRcdHRoaXMuZXhpdFJ1bGUobGlzdGVuZXIsIHQpO1xuXHR9XG59O1xuLy9cbi8vIFRoZSBkaXNjb3Zlcnkgb2YgYSBydWxlIG5vZGUsIGludm9sdmVzIHNlbmRpbmcgdHdvIGV2ZW50czogdGhlIGdlbmVyaWNcbi8vIHtAbGluayBQYXJzZVRyZWVMaXN0ZW5lci8vZW50ZXJFdmVyeVJ1bGV9IGFuZCBhXG4vLyB7QGxpbmsgUnVsZUNvbnRleHR9LXNwZWNpZmljIGV2ZW50LiBGaXJzdCB3ZSB0cmlnZ2VyIHRoZSBnZW5lcmljIGFuZCB0aGVuXG4vLyB0aGUgcnVsZSBzcGVjaWZpYy4gV2UgdG8gdGhlbSBpbiByZXZlcnNlIG9yZGVyIHVwb24gZmluaXNoaW5nIHRoZSBub2RlLlxuLy9cblBhcnNlVHJlZVdhbGtlci5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIsIHIpIHtcblx0dmFyIGN0eCA9IHIuZ2V0UnVsZUNvbnRleHQoKTtcblx0bGlzdGVuZXIuZW50ZXJFdmVyeVJ1bGUoY3R4KTtcblx0Y3R4LmVudGVyUnVsZShsaXN0ZW5lcik7XG59O1xuXG5QYXJzZVRyZWVXYWxrZXIucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIsIHIpIHtcblx0dmFyIGN0eCA9IHIuZ2V0UnVsZUNvbnRleHQoKTtcblx0Y3R4LmV4aXRSdWxlKGxpc3RlbmVyKTtcblx0bGlzdGVuZXIuZXhpdEV2ZXJ5UnVsZShjdHgpO1xufTtcblxuUGFyc2VUcmVlV2Fsa2VyLkRFRkFVTFQgPSBuZXcgUGFyc2VUcmVlV2Fsa2VyKCk7XG5cbmV4cG9ydHMuUnVsZU5vZGUgPSBSdWxlTm9kZTtcbmV4cG9ydHMuRXJyb3JOb2RlID0gRXJyb3JOb2RlO1xuZXhwb3J0cy5UZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGU7XG5leHBvcnRzLkVycm9yTm9kZUltcGwgPSBFcnJvck5vZGVJbXBsO1xuZXhwb3J0cy5UZXJtaW5hbE5vZGVJbXBsID0gVGVybWluYWxOb2RlSW1wbDtcbmV4cG9ydHMuUGFyc2VUcmVlTGlzdGVuZXIgPSBQYXJzZVRyZWVMaXN0ZW5lcjtcbmV4cG9ydHMuUGFyc2VUcmVlVmlzaXRvciA9IFBhcnNlVHJlZVZpc2l0b3I7XG5leHBvcnRzLlBhcnNlVHJlZVdhbGtlciA9IFBhcnNlVHJlZVdhbGtlcjtcbmV4cG9ydHMuSU5WQUxJRF9JTlRFUlZBTCA9IElOVkFMSURfSU5URVJWQUw7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSdWxlTm9kZSA9IHJlcXVpcmUoJy4vVHJlZScpLlJ1bGVOb2RlO1xudmFyIEVycm9yTm9kZSA9IHJlcXVpcmUoJy4vVHJlZScpLkVycm9yTm9kZTtcbnZhciBUZXJtaW5hbE5vZGUgPSByZXF1aXJlKCcuL1RyZWUnKS5UZXJtaW5hbE5vZGU7XG52YXIgUGFyc2VyUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1BhcnNlclJ1bGVDb250ZXh0JykuUGFyc2VyUnVsZUNvbnRleHQ7XG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgSU5WQUxJRF9BTFRfTlVNQkVSID0gcmVxdWlyZSgnLi8uLi9hdG4vQVROJykuSU5WQUxJRF9BTFRfTlVNQkVSO1xuXG5cbi8qKiBBIHNldCBvZiB1dGlsaXR5IHJvdXRpbmVzIHVzZWZ1bCBmb3IgYWxsIGtpbmRzIG9mIEFOVExSIHRyZWVzLiAqL1xuZnVuY3Rpb24gVHJlZXMoKSB7XG59XG5cbi8vIFByaW50IG91dCBhIHdob2xlIHRyZWUgaW4gTElTUCBmb3JtLiB7QGxpbmsgLy9nZXROb2RlVGV4dH0gaXMgdXNlZCBvbiB0aGVcbi8vICBub2RlIHBheWxvYWRzIHRvIGdldCB0aGUgdGV4dCBmb3IgdGhlIG5vZGVzLiAgRGV0ZWN0XG4vLyAgcGFyc2UgdHJlZXMgYW5kIGV4dHJhY3QgZGF0YSBhcHByb3ByaWF0ZWx5LlxuVHJlZXMudG9TdHJpbmdUcmVlID0gZnVuY3Rpb24odHJlZSwgcnVsZU5hbWVzLCByZWNvZykge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0cmVjb2cgPSByZWNvZyB8fCBudWxsO1xuICAgIGlmKHJlY29nIT09bnVsbCkge1xuICAgICAgIHJ1bGVOYW1lcyA9IHJlY29nLnJ1bGVOYW1lcztcbiAgICB9XG4gICAgdmFyIHMgPSBUcmVlcy5nZXROb2RlVGV4dCh0cmVlLCBydWxlTmFtZXMpO1xuICAgIHMgPSBVdGlscy5lc2NhcGVXaGl0ZXNwYWNlKHMsIGZhbHNlKTtcbiAgICB2YXIgYyA9IHRyZWUuZ2V0Q2hpbGRDb3VudCgpO1xuICAgIGlmKGM9PT0wKSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICB2YXIgcmVzID0gXCIoXCIgKyBzICsgJyAnO1xuICAgIGlmKGM+MCkge1xuICAgICAgICBzID0gVHJlZXMudG9TdHJpbmdUcmVlKHRyZWUuZ2V0Q2hpbGQoMCksIHJ1bGVOYW1lcyk7XG4gICAgICAgIHJlcyA9IHJlcy5jb25jYXQocyk7XG4gICAgfVxuICAgIGZvcih2YXIgaT0xO2k8YztpKyspIHtcbiAgICAgICAgcyA9IFRyZWVzLnRvU3RyaW5nVHJlZSh0cmVlLmdldENoaWxkKGkpLCBydWxlTmFtZXMpO1xuICAgICAgICByZXMgPSByZXMuY29uY2F0KCcgJyArIHMpO1xuICAgIH1cbiAgICByZXMgPSByZXMuY29uY2F0KFwiKVwiKTtcbiAgICByZXR1cm4gcmVzO1xufTtcblxuVHJlZXMuZ2V0Tm9kZVRleHQgPSBmdW5jdGlvbih0LCBydWxlTmFtZXMsIHJlY29nKSB7XG5cdHJ1bGVOYW1lcyA9IHJ1bGVOYW1lcyB8fCBudWxsO1xuXHRyZWNvZyA9IHJlY29nIHx8IG51bGw7XG4gICAgaWYocmVjb2chPT1udWxsKSB7XG4gICAgICAgIHJ1bGVOYW1lcyA9IHJlY29nLnJ1bGVOYW1lcztcbiAgICB9XG4gICAgaWYocnVsZU5hbWVzIT09bnVsbCkge1xuICAgICAgIGlmICh0IGluc3RhbmNlb2YgUnVsZUNvbnRleHQpIHtcbiAgICAgICAgICAgdmFyIGFsdE51bWJlciA9IHQuZ2V0QWx0TnVtYmVyKCk7XG4gICAgICAgICAgIGlmICggYWx0TnVtYmVyIT1JTlZBTElEX0FMVF9OVU1CRVIgKSB7XG4gICAgICAgICAgICAgICByZXR1cm4gcnVsZU5hbWVzW3QucnVsZUluZGV4XStcIjpcIithbHROdW1iZXI7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lc1t0LnJ1bGVJbmRleF07XG4gICAgICAgfSBlbHNlIGlmICggdCBpbnN0YW5jZW9mIEVycm9yTm9kZSkge1xuICAgICAgICAgICByZXR1cm4gdC50b1N0cmluZygpO1xuICAgICAgIH0gZWxzZSBpZih0IGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgIGlmKHQuc3ltYm9sIT09bnVsbCkge1xuICAgICAgICAgICAgICAgcmV0dXJuIHQuc3ltYm9sLnRleHQ7XG4gICAgICAgICAgIH1cbiAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vIHJlY29nIGZvciBydWxlIG5hbWVzXG4gICAgdmFyIHBheWxvYWQgPSB0LmdldFBheWxvYWQoKTtcbiAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIFRva2VuICkge1xuICAgICAgIHJldHVybiBwYXlsb2FkLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0LmdldFBheWxvYWQoKS50b1N0cmluZygpO1xufTtcblxuXG4vLyBSZXR1cm4gb3JkZXJlZCBsaXN0IG9mIGFsbCBjaGlsZHJlbiBvZiB0aGlzIG5vZGVcblRyZWVzLmdldENoaWxkcmVuID0gZnVuY3Rpb24odCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXHRmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuXHRcdGxpc3QucHVzaCh0LmdldENoaWxkKGkpKTtcblx0fVxuXHRyZXR1cm4gbGlzdDtcbn07XG5cbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIGFuY2VzdG9ycyBvZiB0aGlzIG5vZGUuICBUaGUgZmlyc3Qgbm9kZSBvZlxuLy8gIGxpc3QgaXMgdGhlIHJvb3QgYW5kIHRoZSBsYXN0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcyBub2RlLlxuLy9cblRyZWVzLmdldEFuY2VzdG9ycyA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdCA9IHQuZ2V0UGFyZW50KCk7XG4gICAgd2hpbGUodCE9PW51bGwpIHtcbiAgICAgICAgYW5jZXN0b3JzID0gW3RdLmNvbmNhdChhbmNlc3RvcnMpO1xuICAgICAgICB0ID0gdC5nZXRQYXJlbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9ycztcbn07XG5cblRyZWVzLmZpbmRBbGxUb2tlbk5vZGVzID0gZnVuY3Rpb24odCwgdHR5cGUpIHtcbiAgICByZXR1cm4gVHJlZXMuZmluZEFsbE5vZGVzKHQsIHR0eXBlLCB0cnVlKTtcbn07XG5cblRyZWVzLmZpbmRBbGxSdWxlTm9kZXMgPSBmdW5jdGlvbih0LCBydWxlSW5kZXgpIHtcblx0cmV0dXJuIFRyZWVzLmZpbmRBbGxOb2Rlcyh0LCBydWxlSW5kZXgsIGZhbHNlKTtcbn07XG5cblRyZWVzLmZpbmRBbGxOb2RlcyA9IGZ1bmN0aW9uKHQsIGluZGV4LCBmaW5kVG9rZW5zKSB7XG5cdHZhciBub2RlcyA9IFtdO1xuXHRUcmVlcy5fZmluZEFsbE5vZGVzKHQsIGluZGV4LCBmaW5kVG9rZW5zLCBub2Rlcyk7XG5cdHJldHVybiBub2Rlcztcbn07XG5cblRyZWVzLl9maW5kQWxsTm9kZXMgPSBmdW5jdGlvbih0LCBpbmRleCwgZmluZFRva2Vucywgbm9kZXMpIHtcblx0Ly8gY2hlY2sgdGhpcyBub2RlICh0aGUgcm9vdCkgZmlyc3Rcblx0aWYoZmluZFRva2VucyAmJiAodCBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkpIHtcblx0XHRpZih0LnN5bWJvbC50eXBlPT09aW5kZXgpIHtcblx0XHRcdG5vZGVzLnB1c2godCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYoIWZpbmRUb2tlbnMgJiYgKHQgaW5zdGFuY2VvZiBQYXJzZXJSdWxlQ29udGV4dCkpIHtcblx0XHRpZih0LnJ1bGVJbmRleD09PWluZGV4KSB7XG5cdFx0XHRub2Rlcy5wdXNoKHQpO1xuXHRcdH1cblx0fVxuXHQvLyBjaGVjayBjaGlsZHJlblxuXHRmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuXHRcdFRyZWVzLl9maW5kQWxsTm9kZXModC5nZXRDaGlsZChpKSwgaW5kZXgsIGZpbmRUb2tlbnMsIG5vZGVzKTtcblx0fVxufTtcblxuVHJlZXMuZGVzY2VuZGFudHMgPSBmdW5jdGlvbih0KSB7XG5cdHZhciBub2RlcyA9IFt0XTtcbiAgICBmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuICAgICAgICBub2RlcyA9IG5vZGVzLmNvbmNhdChUcmVlcy5kZXNjZW5kYW50cyh0LmdldENoaWxkKGkpKSk7XG4gICAgfVxuICAgIHJldHVybiBub2Rlcztcbn07XG5cblxuZXhwb3J0cy5UcmVlcyA9IFRyZWVzOyIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRyZWUgPSByZXF1aXJlKCcuL1RyZWUnKTtcbmV4cG9ydHMuVHJlZXMgPSByZXF1aXJlKCcuL1RyZWVzJykuVHJlZXM7XG5leHBvcnRzLlJ1bGVOb2RlID0gVHJlZS5SdWxlTm9kZTtcbmV4cG9ydHMuUGFyc2VUcmVlTGlzdGVuZXIgPSBUcmVlLlBhcnNlVHJlZUxpc3RlbmVyO1xuZXhwb3J0cy5QYXJzZVRyZWVWaXNpdG9yID0gVHJlZS5QYXJzZVRyZWVWaXNpdG9yO1xuZXhwb3J0cy5QYXJzZVRyZWVXYWxrZXIgPSBUcmVlLlBhcnNlVHJlZVdhbGtlcjtcbiIsIiIsIi8qKlxuICogQGxpY2Vuc2UgQ29tcGxleC5qcyB2Mi4wLjExIDExLzAyLzIwMTZcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZylcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICoqL1xuXG4vKipcbiAqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyB0aGUgbWFuaXB1bGF0aW9uIG9mIGNvbXBsZXggbnVtYmVycy5cbiAqIFlvdSBjYW4gcGFzcyBhIGNvbXBsZXggbnVtYmVyIGluIGRpZmZlcmVudCBmb3JtYXRzLiBFaXRoZXIgYXMgb2JqZWN0LCBkb3VibGUsIHN0cmluZyBvciB0d28gaW50ZWdlciBwYXJhbWV0ZXJzLlxuICpcbiAqIE9iamVjdCBmb3JtXG4gKiB7IHJlOiA8cmVhbD4sIGltOiA8aW1hZ2luYXJ5PiB9XG4gKiB7IGFyZzogPGFuZ2xlPiwgYWJzOiA8cmFkaXVzPiB9XG4gKiB7IHBoaTogPGFuZ2xlPiwgcjogPHJhZGl1cz4gfVxuICpcbiAqIEFycmF5IC8gVmVjdG9yIGZvcm1cbiAqIFsgcmVhbCwgaW1hZ2luYXJ5IF1cbiAqXG4gKiBEb3VibGUgZm9ybVxuICogOTkuMyAtIFNpbmdsZSBkb3VibGUgdmFsdWVcbiAqXG4gKiBTdHJpbmcgZm9ybVxuICogJzIzLjEzMzcnIC0gU2ltcGxlIHJlYWwgbnVtYmVyXG4gKiAnMTUrM2knIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXJcbiAqICczLWknIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXJcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIHZhciBjID0gbmV3IENvbXBsZXgoJzk5LjMrOGknKTtcbiAqIGMubXVsKHtyOiAzLCBpOiA5fSkuZGl2KDQuOSkuc3ViKDMsIDIpO1xuICpcbiAqL1xuXG4oZnVuY3Rpb24ocm9vdCkge1xuXG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgY29zaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKSAqIDAuNTtcbiAgfTtcblxuICB2YXIgc2luaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKE1hdGguZXhwKHgpIC0gTWF0aC5leHAoLXgpKSAqIDAuNTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBjb3MoeCkgLSAxIHVzaW5nIFRheWxvciBzZXJpZXMgaWYgeCBpcyBzbWFsbC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlcn0gY29zKHgpIC0gMVxuICAgKi9cblxuICB2YXIgY29zbTEgPSBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5QSS80O1xuICAgIGlmICh4IDwgLWxpbWl0IHx8IHggPiBsaW1pdCkge1xuICAgICAgcmV0dXJuIChNYXRoLmNvcyh4KSAtIDEuMCk7XG4gICAgfVxuXG4gICAgdmFyIHh4ID0geCAqIHg7XG4gICAgcmV0dXJuIHh4ICpcbiAgICAgICgtMC41ICsgeHggKlxuICAgICAgICAoMS8yNCArIHh4ICpcbiAgICAgICAgICAoLTEvNzIwICsgeHggKlxuICAgICAgICAgICAgKDEvNDAzMjAgKyB4eCAqXG4gICAgICAgICAgICAgICgtMS8zNjI4ODAwICsgeHggKlxuICAgICAgICAgICAgICAgICgxLzQ3OTAwMTQ2MDAgKyB4eCAqXG4gICAgICAgICAgICAgICAgICAoLTEvODcxNzgyOTEyMDAgKyB4eCAqXG4gICAgICAgICAgICAgICAgICAgICgxLzIwOTIyNzg5ODg4MDAwKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICB9O1xuXG4gIHZhciBoeXBvdCA9IGZ1bmN0aW9uKHgsIHkpIHtcblxuICAgIHZhciBhID0gTWF0aC5hYnMoeCk7XG4gICAgdmFyIGIgPSBNYXRoLmFicyh5KTtcblxuICAgIGlmIChhIDwgMzAwMCAmJiBiIDwgMzAwMCkge1xuICAgICAgcmV0dXJuIE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgICB9XG5cbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgIGEgPSBiO1xuICAgICAgYiA9IHggLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0geSAvIHg7XG4gICAgfVxuICAgIHJldHVybiBhICogTWF0aC5zcXJ0KDEgKyBiICogYik7XG4gIH07XG5cbiAgdmFyIHBhcnNlcl9leGl0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgU3ludGF4RXJyb3IoJ0ludmFsaWQgUGFyYW0nKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBsb2coc3FydChhXjIrYl4yKSkgaW4gYSB3YXkgdG8gYXZvaWQgb3ZlcmZsb3dzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBsb2dIeXBvdChhLCBiKSB7XG5cbiAgICB2YXIgX2EgPSBNYXRoLmFicyhhKTtcbiAgICB2YXIgX2IgPSBNYXRoLmFicyhiKTtcblxuICAgIGlmIChhID09PSAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coX2IpO1xuICAgIH1cblxuICAgIGlmIChiID09PSAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coX2EpO1xuICAgIH1cblxuICAgIGlmIChfYSA8IDMwMDAgJiYgX2IgPCAzMDAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coYSAqIGEgKyBiICogYikgKiAwLjU7XG4gICAgfVxuXG4gICAgLyogSSBnb3QgNCBpZGVhcyB0byBjb21wdXRlIHRoaXMgcHJvcGVydHkgd2l0aG91dCBvdmVyZmxvdzpcbiAgICAgKlxuICAgICAqIFRlc3RpbmcgMTAwMDAwMCB0aW1lcyB3aXRoIHJhbmRvbSBzYW1wbGVzIGZvciBhLGIg4oiIIFsxLCAxMDAwMDAwMDAwXSBhZ2FpbnN0IGEgYmlnIGRlY2ltYWwgbGlicmFyeSB0byBnZXQgYW4gZXJyb3IgZXN0aW1hdGVcbiAgICAgKlxuICAgICAqIDEuIE9ubHkgZWxpbWluYXRlIHRoZSBzcXVhcmUgcm9vdDogKE9WRVJBTEwgRVJST1I6IDMuOTEyMjQ4MzAzMDk1MTExNmUtMTEpXG5cbiAgICAgTWF0aC5sb2coYSAqIGEgKyBiICogYikgLyAyXG5cbiAgICAgKlxuICAgICAqXG4gICAgICogMi4gVHJ5IHRvIHVzZSB0aGUgbm9uLW92ZXJmbG93aW5nIHB5dGhhZ29yYXM6IChPVkVSQUxMIEVSUk9SOiA4Ljg4OTc2MDAzOTIxMDE1OWUtMTApXG5cbiAgICAgdmFyIGZuID0gZnVuY3Rpb24oYSwgYikge1xuICAgICBhID0gTWF0aC5hYnMoYSk7XG4gICAgIGIgPSBNYXRoLmFicyhiKTtcbiAgICAgdmFyIHQgPSBNYXRoLm1pbihhLCBiKTtcbiAgICAgYSA9IE1hdGgubWF4KGEsIGIpO1xuICAgICB0ID0gdCAvIGE7XG5cbiAgICAgcmV0dXJuIE1hdGgubG9nKGEpICsgTWF0aC5sb2coMSArIHQgKiB0KSAvIDI7XG4gICAgIH07XG5cbiAgICAgKiAzLiBBYnVzZSB0aGUgaWRlbnRpdHkgY29zKGF0YW4oeS94KSA9IHggLyBzcXJ0KHheMit5XjIpOiAoT1ZFUkFMTCBFUlJPUjogMy40NzgwMTc4NzM3MDM3MjA0ZS0xMClcblxuICAgICBNYXRoLmxvZyhhIC8gTWF0aC5jb3MoTWF0aC5hdGFuMihiLCBhKSkpXG5cbiAgICAgKiA0LiBVc2UgMy4gYW5kIGFwcGx5IGxvZyBydWxlczogKE9WRVJBTEwgRVJST1I6IDEuMjAxNDA4NzUwMjYyMDg5NmUtOSlcblxuICAgICBNYXRoLmxvZyhhKSAtIE1hdGgubG9nKE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKVxuXG4gICAgICovXG5cbiAgICByZXR1cm4gTWF0aC5sb2coYSAvIE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKTtcbiAgfVxuXG4gIHZhciBwYXJzZSA9IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgIHZhciB6ID0geydyZSc6IDAsICdpbSc6IDB9O1xuXG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCB8fCBhID09PSBudWxsKSB7XG4gICAgICB6WydyZSddID1cbiAgICAgICAgICAgICAgelsnaW0nXSA9IDA7XG4gICAgfSBlbHNlIGlmIChiICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHpbJ3JlJ10gPSBhO1xuICAgICAgelsnaW0nXSA9IGI7XG4gICAgfSBlbHNlXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBhKSB7XG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcblxuICAgICAgICAgIGlmICgnaW0nIGluIGEgJiYgJ3JlJyBpbiBhKSB7XG4gICAgICAgICAgICB6WydyZSddID0gYVsncmUnXTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydpbSddO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJ2FicycgaW4gYSAmJiAnYXJnJyBpbiBhKSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhWydhYnMnXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ2FyZyddKSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydhYnMnXSAqIE1hdGguY29zKGFbJ2FyZyddKTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydhYnMnXSAqIE1hdGguc2luKGFbJ2FyZyddKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCdyJyBpbiBhICYmICdwaGknIGluIGEpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFbJ3InXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ3BoaSddKSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydyJ10gKiBNYXRoLmNvcyhhWydwaGknXSk7XG4gICAgICAgICAgICB6WydpbSddID0gYVsnciddICogTWF0aC5zaW4oYVsncGhpJ10pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYS5sZW5ndGggPT09IDIpIHsgLy8gUXVpY2sgYXJyYXkgY2hlY2tcbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWzBdO1xuICAgICAgICAgICAgelsnaW0nXSA9IGFbMV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG5cbiAgICAgICAgICB6WydpbSddID0gLyogdm9pZCAqL1xuICAgICAgICAgICAgICAgICAgelsncmUnXSA9IDA7XG5cbiAgICAgICAgICB2YXIgdG9rZW5zID0gYS5tYXRjaCgvXFxkK1xcLj9cXGQqZVsrLV0/XFxkK3xcXGQrXFwuP1xcZCp8XFwuXFxkK3wuL2cpO1xuICAgICAgICAgIHZhciBwbHVzID0gMTtcbiAgICAgICAgICB2YXIgbWludXMgPSAwO1xuXG4gICAgICAgICAgaWYgKHRva2VucyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgICAgICB2YXIgYyA9IHRva2Vuc1tpXTtcblxuICAgICAgICAgICAgaWYgKGMgPT09ICcgJyB8fCBjID09PSAnXFx0JyB8fCBjID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAvKiB2b2lkICovXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICcrJykge1xuICAgICAgICAgICAgICBwbHVzKys7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICctJykge1xuICAgICAgICAgICAgICBtaW51cysrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnaScgfHwgYyA9PT0gJ0knKSB7XG5cbiAgICAgICAgICAgICAgaWYgKHBsdXMgKyBtaW51cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodG9rZW5zW2kgKyAxXSAhPT0gJyAnICYmICFpc05hTih0b2tlbnNbaSArIDFdKSkge1xuICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgdG9rZW5zW2kgKyAxXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgJzEnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwbHVzID0gbWludXMgPSAwO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPT09IDAgfHwgaXNOYU4oYykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRva2Vuc1tpICsgMV0gPT09ICdpJyB8fCB0b2tlbnNbaSArIDFdID09PSAnSScpIHtcbiAgICAgICAgICAgICAgICB6WydpbSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIGMpO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB6WydyZSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIGMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBsdXMgPSBtaW51cyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RpbGwgc29tZXRoaW5nIG9uIHRoZSBzdGFja1xuICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPiAwKSB7XG4gICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHpbJ2ltJ10gPSAwO1xuICAgICAgICAgIHpbJ3JlJ10gPSBhO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgIH1cblxuICAgIGlmIChpc05hTih6WydyZSddKSB8fCBpc05hTih6WydpbSddKSkge1xuICAgICAgLy8gSWYgYSBjYWxjdWxhdGlvbiBpcyBOYU4sIHdlIHRyZWF0IGl0IGFzIE5hTiBhbmQgZG9uJ3QgdGhyb3dcbiAgICAgIC8vcGFyc2VyX2V4aXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gejtcbiAgfTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKi9cbiAgZnVuY3Rpb24gQ29tcGxleChhLCBiKSB7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29tcGxleCkpIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChhLCBiKTtcbiAgICB9XG5cbiAgICB2YXIgeiA9IHBhcnNlKGEsIGIpO1xuXG4gICAgdGhpc1sncmUnXSA9IHpbJ3JlJ107XG4gICAgdGhpc1snaW0nXSA9IHpbJ2ltJ107XG4gIH1cblxuICBDb21wbGV4LnByb3RvdHlwZSA9IHtcblxuICAgICdyZSc6IDAsXG4gICAgJ2ltJzogMCxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHNpZ24gb2YgYSBjb21wbGV4IG51bWJlciwgd2hpY2ggaXMgYSBub3JtYWxpemVkIGNvbXBsZXhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzaWduJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhYnMgPSB0aGlzWydhYnMnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gLyBhYnMsXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLyBhYnMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhZGQnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIEluZmluaXR5ICsgSW5maW5pdHkgPSBOYU5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5ICsgeiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSBJbmZpbml0eSB9XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdGhpc1sncmUnXSArIHpbJ3JlJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gKyB6WydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3VidHJhY3RzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzdWInOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIEluZmluaXR5IC0gSW5maW5pdHkgPSBOYU5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5IC0geiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSBJbmZpbml0eSB9XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdGhpc1sncmUnXSAtIHpbJ3JlJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLSB6WydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnbXVsJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICAvLyBJbmZpbml0eSAqIDAgPSBOYU5cbiAgICAgIGlmICgodGhpc1snaXNJbmZpbml0ZSddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNJbmZpbml0ZSddKCkpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydOQU4nXTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5maW5pdHkgKiB6ID0gSW5maW5pdHkgeyB3aGVyZSB6ICE9IDAgfVxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpIHx8IHpbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG9ydCBjaXJjdWl0IGZvciByZWFsIHZhbHVlc1xuICAgICAgaWYgKHpbJ2ltJ10gPT09IDAgJiYgdGhpc1snaW0nXSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSAqIHpbJ3JlJ10sIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKiB6WydyZSddIC0gdGhpc1snaW0nXSAqIHpbJ2ltJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKiB6WydpbSddICsgdGhpc1snaW0nXSAqIHpbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGVzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdkaXYnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIDAgLyAwID0gTmFOIGFuZCBJbmZpbml0eSAvIEluZmluaXR5ID0gTmFOXG4gICAgICBpZiAoKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzSW5maW5pdGUnXSgpICYmIHpbJ2lzSW5maW5pdGUnXSgpKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5IC8gMCA9IEluZmluaXR5XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNaZXJvJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgLy8gMCAvIEluZmluaXR5ID0gMFxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ1pFUk8nXTtcbiAgICAgIH1cblxuICAgICAgYSA9IHRoaXNbJ3JlJ107XG4gICAgICBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIGMgPSB6WydyZSddO1xuICAgICAgdmFyIGQgPSB6WydpbSddO1xuICAgICAgdmFyIHQsIHg7XG5cbiAgICAgIGlmICgwID09PSBkKSB7XG4gICAgICAgIC8vIERpdmlzb3IgaXMgcmVhbFxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGMsIGIgLyBjKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE1hdGguYWJzKGMpIDwgTWF0aC5hYnMoZCkpIHtcblxuICAgICAgICB4ID0gYyAvIGQ7XG4gICAgICAgIHQgPSBjICogeCArIGQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgIChhICogeCArIGIpIC8gdCxcbiAgICAgICAgICAgICAgICAoYiAqIHggLSBhKSAvIHQpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHggPSBkIC8gYztcbiAgICAgICAgdCA9IGQgKiB4ICsgYztcblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgKGEgKyBiICogeCkgLyB0LFxuICAgICAgICAgICAgICAgIChiIC0gYSAqIHgpIC8gdCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgdHdvIGNvbXBsZXggbnVtYmVyc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3Bvdyc6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgdmFyIHogPSBuZXcgQ29tcGxleChhLCBiKTtcblxuICAgICAgYSA9IHRoaXNbJ3JlJ107XG4gICAgICBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKHpbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ09ORSddO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZXhwb25lbnQgaXMgcmVhbFxuICAgICAgaWYgKHpbJ2ltJ10gPT09IDApIHtcblxuICAgICAgICBpZiAoYiA9PT0gMCAmJiBhID49IDApIHtcblxuICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLnBvdyhhLCB6WydyZSddKSwgMCk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChhID09PSAwKSB7IC8vIElmIGJhc2UgaXMgZnVsbHkgaW1hZ2luYXJ5XG5cbiAgICAgICAgICBzd2l0Y2ggKCh6WydyZSddICUgNCArIDQpICUgNCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5wb3coYiwgelsncmUnXSksIDApO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgTWF0aC5wb3coYiwgelsncmUnXSkpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoLU1hdGgucG93KGIsIHpbJ3JlJ10pLCAwKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC1NYXRoLnBvdyhiLCB6WydyZSddKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEkgY291bGRuJ3QgZmluZCBhIGdvb2QgZm9ybXVsYSwgc28gaGVyZSBpcyBhIGRlcml2YXRpb24gYW5kIG9wdGltaXphdGlvblxuICAgICAgICpcbiAgICAgICAqIHpfMV56XzIgPSAoYSArIGJpKV4oYyArIGRpKVxuICAgICAgICogICAgICAgICA9IGV4cCgoYyArIGRpKSAqIGxvZyhhICsgYmkpXG4gICAgICAgKiAgICAgICAgID0gcG93KGFeMiArIGJeMiwgKGMgKyBkaSkgLyAyKSAqIGV4cChpKGMgKyBkaSlhdGFuMihiLCBhKSlcbiAgICAgICAqID0+Li4uXG4gICAgICAgKiBSZSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogY29zKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKiBJbSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogc2luKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKlxuICAgICAgICogPT4uLi5cbiAgICAgICAqIFJlID0gZXhwKGMgKiBsb2coc3FydChhXjIgKyBiXjIpKSAtIGQgKiBhdGFuMihiLCBhKSkgKiBjb3MoZCAqIGxvZyhzcXJ0KGFeMiArIGJeMikpICsgYyAqIGF0YW4yKGIsIGEpKVxuICAgICAgICogSW0gPSBleHAoYyAqIGxvZyhzcXJ0KGFeMiArIGJeMikpIC0gZCAqIGF0YW4yKGIsIGEpKSAqIHNpbihkICogbG9nKHNxcnQoYV4yICsgYl4yKSkgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKlxuICAgICAgICogPT5cbiAgICAgICAqIFJlID0gZXhwKGMgKiBsb2dzcTIgLSBkICogYXJnKHpfMSkpICogY29zKGQgKiBsb2dzcTIgKyBjICogYXJnKHpfMSkpXG4gICAgICAgKiBJbSA9IGV4cChjICogbG9nc3EyIC0gZCAqIGFyZyh6XzEpKSAqIHNpbihkICogbG9nc3EyICsgYyAqIGFyZyh6XzEpKVxuICAgICAgICpcbiAgICAgICAqL1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwICYmIHpbJ3JlJ10gPiAwICYmIHpbJ2ltJ10gPj0gMCkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnWkVSTyddO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXJnID0gTWF0aC5hdGFuMihiLCBhKTtcbiAgICAgIHZhciBsb2ggPSBsb2dIeXBvdChhLCBiKTtcblxuICAgICAgYSA9IE1hdGguZXhwKHpbJ3JlJ10gKiBsb2ggLSB6WydpbSddICogYXJnKTtcbiAgICAgIGIgPSB6WydpbSddICogbG9oICsgelsncmUnXSAqIGFyZztcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgYSAqIE1hdGguY29zKGIpLFxuICAgICAgICAgICAgICBhICogTWF0aC5zaW4oYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc3F1YXJlIHJvb3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzcXJ0JzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcbiAgICAgIHZhciByID0gdGhpc1snYWJzJ10oKTtcblxuICAgICAgdmFyIHJlLCBpbTtcblxuICAgICAgaWYgKGEgPj0gMCkge1xuXG4gICAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguc3FydChhKSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZSA9IDAuNSAqIE1hdGguc3FydCgyLjAgKiAociArIGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlID0gTWF0aC5hYnMoYikgLyBNYXRoLnNxcnQoMiAqIChyIC0gYSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSA8PSAwKSB7XG4gICAgICAgIGltID0gMC41ICogTWF0aC5zcXJ0KDIuMCAqIChyIC0gYSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0gPSBNYXRoLmFicyhiKSAvIE1hdGguc3FydCgyICogKHIgKyBhKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChyZSwgYiA8IDAgPyAtaW0gOiBpbSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2V4cCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgdG1wID0gTWF0aC5leHAodGhpc1sncmUnXSk7XG5cbiAgICAgIGlmICh0aGlzWydpbSddID09PSAwKSB7XG4gICAgICAgIC8vcmV0dXJuIG5ldyBDb21wbGV4KHRtcCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRtcCAqIE1hdGguY29zKHRoaXNbJ2ltJ10pLFxuICAgICAgICAgICAgICB0bXAgKiBNYXRoLnNpbih0aGlzWydpbSddKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudCBhbmQgc3VidHJhY3RzIG9uZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG1vcmUgYWNjdXJhdGUgdGhhbiBgQ29tcGxleCh4KS5leHAoKS5zdWIoMSlgIGlmXG4gICAgICogYHhgIGlzIHNtYWxsLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2V4cG0xJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8qKlxuICAgICAgICogZXhwKGEgKyBpKmIpIC0gMVxuICAgICAgID0gZXhwKGEpICogKGNvcyhiKSArIGoqc2luKGIpKSAtIDFcbiAgICAgICA9IGV4cG0xKGEpKmNvcyhiKSArIGNvc20xKGIpICsgaipleHAoYSkqc2luKGIpXG4gICAgICAgKi9cblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguZXhwbTEoYSkgKiBNYXRoLmNvcyhiKSArIGNvc20xKGIpLFxuICAgICAgICAgICAgICBNYXRoLmV4cChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2xvZyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwICYmIGEgPiAwKSB7XG4gICAgICAgIC8vcmV0dXJuIG5ldyBDb21wbGV4KE1hdGgubG9nKGEpLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBsb2dIeXBvdChhLCBiKSxcbiAgICAgICAgICAgICAgTWF0aC5hdGFuMihiLCBhKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICAnYWJzJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBoeXBvdCh0aGlzWydyZSddLCB0aGlzWydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhbmdsZSBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgJ2FyZyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gTWF0aC5hdGFuMih0aGlzWydpbSddLCB0aGlzWydyZSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBzaW5lIG9mIHRoZSBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3Npbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzaW4oYykgPSAoZV5iIC0gZV4oLWIpKSAvICgyaSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSxcbiAgICAgICAgICAgICAgTWF0aC5jb3MoYSkgKiBzaW5oKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb3NpbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3MnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY29zKHopID0gKGVeYiArIGVeKC1iKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIGNvc2goYiksXG4gICAgICAgICAgICAgIC1NYXRoLnNpbihhKSAqIHNpbmgoYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHRhbmdlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICd0YW4nOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gdGFuKGMpID0gKGVeKGNpKSAtIGVeKC1jaSkpIC8gKGkoZV4oY2kpICsgZV4oLWNpKSkpXG5cbiAgICAgIHZhciBhID0gMiAqIHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IDIgKiB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcyhhKSArIGNvc2goYik7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYSkgLyBkLFxuICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY290YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY290JzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvdChjKSA9IGkoZV4oY2kpICsgZV4oLWNpKSkgLyAoZV4oY2kpIC0gZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IE1hdGguY29zKGEpIC0gY29zaChiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAtTWF0aC5zaW4oYSkgLyBkLFxuICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgc2VjYW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2VjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHNlYyhjKSA9IDIgLyAoZV4oY2kpICsgZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSAwLjUgKiBjb3NoKDIgKiBiKSArIDAuNSAqIE1hdGguY29zKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIGNvc2goYikgLyBkLFxuICAgICAgICAgICAgICBNYXRoLnNpbihhKSAqIHNpbmgoYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb3NlY2Fuc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2NzYyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjc2MoYykgPSAyaSAvIChlXihjaSkgLSBlXigtY2kpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IDAuNSAqIGNvc2goMiAqIGIpIC0gMC41ICogTWF0aC5jb3MoMiAqIGEpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSAvIGQsXG4gICAgICAgICAgICAgIC1NYXRoLmNvcyhhKSAqIHNpbmgoYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNpbnVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNpbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhc2luKGMpID0gLWkgKiBsb2coY2kgKyBzcXJ0KDEgLSBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHZhciB0MSA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBiICogYiAtIGEgKiBhICsgMSxcbiAgICAgICAgICAgICAgLTIgKiBhICogYilbJ3NxcnQnXSgpO1xuXG4gICAgICB2YXIgdDIgPSBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdDFbJ3JlJ10gLSBiLFxuICAgICAgICAgICAgICB0MVsnaW0nXSArIGEpWydsb2cnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodDJbJ2ltJ10sIC10MlsncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyBjb3NpbnVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvcyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY29zKGMpID0gaSAqIGxvZyhjIC0gaSAqIHNxcnQoMSAtIGNeMikpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIHQxID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGIgKiBiIC0gYSAqIGEgKyAxLFxuICAgICAgICAgICAgICAtMiAqIGEgKiBiKVsnc3FydCddKCk7XG5cbiAgICAgIHZhciB0MiA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICB0MVsncmUnXSAtIGIsXG4gICAgICAgICAgICAgIHQxWydpbSddICsgYSlbJ2xvZyddKCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLlBJIC8gMiAtIHQyWydpbSddLCB0MlsncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyB0YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXRhbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhdGFuKGMpID0gaSAvIDIgbG9nKChpICsgeCkgLyAoaSAtIHgpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwKSB7XG5cbiAgICAgICAgaWYgKGIgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGIgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC1JbmZpbml0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArICgxLjAgLSBiKSAqICgxLjAgLSBiKTtcblxuICAgICAgdmFyIHQxID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICgxIC0gYiAqIGIgLSBhICogYSkgLyBkLFxuICAgICAgICAgICAgICAtMiAqIGEgLyBkKS5sb2coKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC0wLjUgKiB0MVsnaW0nXSwgMC41ICogdDFbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY290YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvdCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY290KGMpID0gaSAvIDIgbG9nKChjIC0gaSkgLyAoYyArIGkpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmF0YW4yKDEsIGEpLCAwKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuICAgICAgcmV0dXJuIChkICE9PSAwKVxuICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIGEgLyBkLFxuICAgICAgICAgICAgICAgICAgICAgIC1iIC8gZCkuYXRhbigpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IDApID8gYSAvIDAgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IC1iIC8gMCA6IDApLmF0YW4oKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNlY2FudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2FzZWMnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNlYyhjKSA9IC1pICogbG9nKDEgLyBjICsgc3FydCgxIC0gaSAvIGNeMikpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7XG4gICAgICByZXR1cm4gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgYSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgLWIgLyBkKS5hY29zKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvcygpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY29zZWNhbnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY3NjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjc2MoYykgPSAtaSAqIGxvZyhpIC8gYyArIHNxcnQoMSAtIDEgLyBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguUEkgLyAyLCBJbmZpbml0eSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW4oKVxuICAgICAgICAgICAgICA6IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChhICE9PSAwKSA/IGEgLyAwIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hc2luKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBzaW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2luaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzaW5oKGMpID0gKGVeYyAtIGVeLWMpIC8gMlxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgc2luaChhKSAqIE1hdGguY29zKGIpLFxuICAgICAgICAgICAgICBjb3NoKGEpICogTWF0aC5zaW4oYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggY29zaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Nvc2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY29zaChjKSA9IChlXmMgKyBlXi1jKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGNvc2goYSkgKiBNYXRoLmNvcyhiKSxcbiAgICAgICAgICAgICAgc2luaChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IHRhbmhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICd0YW5oJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHRhbmgoYykgPSAoZV5jIC0gZV4tYykgLyAoZV5jICsgZV4tYylcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IGNvc2goYSkgKyBNYXRoLmNvcyhiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBzaW5oKGEpIC8gZCxcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGNvdGhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3RoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvdGgoYykgPSAoZV5jICsgZV4tYykgLyAoZV5jIC0gZV4tYylcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IGNvc2goYSkgLSBNYXRoLmNvcyhiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBzaW5oKGEpIC8gZCxcbiAgICAgICAgICAgICAgLU1hdGguc2luKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBjb3RoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY3NjaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjc2NoKGMpID0gMiAvIChlXmMgLSBlXi1jKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IE1hdGguY29zKDIgKiBiKSAtIGNvc2goMiAqIGEpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIC0yICogc2luaChhKSAqIE1hdGguY29zKGIpIC8gZCxcbiAgICAgICAgICAgICAgMiAqIGNvc2goYSkgKiBNYXRoLnNpbihiKSAvIGQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc2VjaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3NlY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gc2VjaChjKSA9IDIgLyAoZV5jICsgZV4tYylcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcygyICogYikgKyBjb3NoKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAyICogY29zaChhKSAqIE1hdGguY29zKGIpIC8gZCxcbiAgICAgICAgICAgICAgLTIgKiBzaW5oKGEpICogTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzaW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNpbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNpbmgoYykgPSBsb2coYyArIHNxcnQoY14yICsgMSkpXG5cbiAgICAgIHZhciB0bXAgPSB0aGlzWydpbSddO1xuICAgICAgdGhpc1snaW0nXSA9IC10aGlzWydyZSddO1xuICAgICAgdGhpc1sncmUnXSA9IHRtcDtcbiAgICAgIHZhciByZXMgPSB0aGlzWydhc2luJ10oKTtcblxuICAgICAgdGhpc1sncmUnXSA9IC10aGlzWydpbSddO1xuICAgICAgdGhpc1snaW0nXSA9IHRtcDtcbiAgICAgIHRtcCA9IHJlc1sncmUnXTtcblxuICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTtcbiAgICAgIHJlc1snaW0nXSA9IHRtcDtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhc2luaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Fjb3NoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjb3NoKGMpID0gbG9nKGMgKyBzcXJ0KGNeMiAtIDEpKVxuXG4gICAgICB2YXIgcmVzID0gdGhpc1snYWNvcyddKCk7XG4gICAgICBpZiAocmVzWydpbSddIDw9IDApIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlc1sncmUnXTtcbiAgICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTtcbiAgICAgICAgcmVzWydpbSddID0gdG1wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlc1snaW0nXTtcbiAgICAgICAgcmVzWydpbSddID0gLXJlc1sncmUnXTtcbiAgICAgICAgcmVzWydyZSddID0gdG1wO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGF0YW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXRhbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXRhbmgoYykgPSBsb2coKDErYykgLyAoMS1jKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIG5vSU0gPSBhID4gMSAmJiBiID09PSAwO1xuICAgICAgdmFyIG9uZU1pbnVzID0gMSAtIGE7XG4gICAgICB2YXIgb25lUGx1cyA9IDEgKyBhO1xuICAgICAgdmFyIGQgPSBvbmVNaW51cyAqIG9uZU1pbnVzICsgYiAqIGI7XG5cbiAgICAgIHZhciB4ID0gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKG9uZVBsdXMgKiBvbmVNaW51cyAtIGIgKiBiKSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgKiBvbmVNaW51cyArIG9uZVBsdXMgKiBiKSAvIGQpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IC0xKSA/IChhIC8gMCkgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IChiIC8gMCkgOiAwKTtcblxuICAgICAgdmFyIHRlbXAgPSB4WydyZSddO1xuICAgICAgeFsncmUnXSA9IGxvZ0h5cG90KHhbJ3JlJ10sIHhbJ2ltJ10pIC8gMjtcbiAgICAgIHhbJ2ltJ10gPSBNYXRoLmF0YW4yKHhbJ2ltJ10sIHRlbXApIC8gMjtcbiAgICAgIGlmIChub0lNKSB7XG4gICAgICAgIHhbJ2ltJ10gPSAteFsnaW0nXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYWNvdGhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY290aCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY290aChjKSA9IGxvZygoYysxKSAvIChjLTEpKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCBNYXRoLlBJIC8gMik7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmF0YW5oKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXRhbmgoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFjc2NoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNzY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYWNzY2goYykgPSBsb2coKDErc3FydCgxK2NeMikpL2MpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGIgPT09IDApIHtcblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgKGEgIT09IDApXG4gICAgICAgICAgICAgICAgPyBNYXRoLmxvZyhhICsgTWF0aC5zcXJ0KGEgKiBhICsgMSkpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSwgMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW5oKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXNpbmgoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzZWNoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNlY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNlY2goYykgPSBsb2coKDErc3FydCgxLWNeMikpL2MpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFjb3NoKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvc2goKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGludmVyc2UgMS96XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnaW52ZXJzZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyAxIC8gMCA9IEluZmluaXR5IGFuZCAxIC8gSW5maW5pdHkgPSAwXG4gICAgICBpZiAodGhpc1snaXNaZXJvJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydaRVJPJ107XG4gICAgICB9XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGQsIC1iIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbXBsZXggY29uanVnYXRlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY29uanVnYXRlJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh0aGlzWydyZSddLCAtdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5lZ2F0ZWQgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICduZWcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC10aGlzWydyZSddLCAtdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjZWlsJzogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5jZWlsKHRoaXNbJ3JlJ10gKiBwbGFjZXMpIC8gcGxhY2VzLFxuICAgICAgICAgICAgICBNYXRoLmNlaWwodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGbG9vcnMgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Zsb29yJzogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydyZSddICogcGxhY2VzKSAvIHBsYWNlcyxcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydpbSddICogcGxhY2VzKSAvIHBsYWNlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdyb3VuZCc6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGgucm91bmQodGhpc1sncmUnXSAqIHBsYWNlcykgLyBwbGFjZXMsXG4gICAgICAgICAgICAgIE1hdGgucm91bmQodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogbmV3IENvbXBsZXgoSW5maW5pdHkpLmVxdWFscyhJbmZpbml0eSkgPT09IGZhbHNlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICAnZXF1YWxzJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICByZXR1cm4gTWF0aC5hYnMoelsncmUnXSAtIHRoaXNbJ3JlJ10pIDw9IENvbXBsZXhbJ0VQU0lMT04nXSAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyh6WydpbSddIC0gdGhpc1snaW0nXSkgPD0gQ29tcGxleFsnRVBTSUxPTiddO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjbG9uZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSwgdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBzdHJpbmcgb2YgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICAndG9TdHJpbmcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIHJldCA9ICcnO1xuXG4gICAgICBpZiAodGhpc1snaXNOYU4nXSgpKSB7XG4gICAgICAgIHJldHVybiAnTmFOJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuICcwJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiAnSW5maW5pdHknO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSAhPT0gMCkge1xuICAgICAgICByZXQgKz0gYTtcbiAgICAgIH1cblxuICAgICAgaWYgKGIgIT09IDApIHtcblxuICAgICAgICBpZiAoYSAhPT0gMCkge1xuICAgICAgICAgIHJldCArPSBiIDwgMCA/ICcgLSAnIDogJyArICc7XG4gICAgICAgIH0gZWxzZSBpZiAoYiA8IDApIHtcbiAgICAgICAgICByZXQgKz0gJy0nO1xuICAgICAgICB9XG5cbiAgICAgICAgYiA9IE1hdGguYWJzKGIpO1xuXG4gICAgICAgIGlmICgxICE9PSBiKSB7XG4gICAgICAgICAgcmV0ICs9IGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0ICs9ICdpJztcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXQpXG4gICAgICAgIHJldHVybiAnMCc7XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgYXMgYSB2ZWN0b3JcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICAgKi9cbiAgICAndG9WZWN0b3InOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIFt0aGlzWydyZSddLCB0aGlzWydpbSddXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHJlYWwgdmFsdWUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9XG4gICAgICovXG4gICAgJ3ZhbHVlT2YnOiBmdW5jdGlvbigpIHtcblxuICAgICAgaWYgKHRoaXNbJ2ltJ10gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbJ3JlJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxleCBudW1iZXIgaXMgbm90IG9uIHRoZSBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc05hTic6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGlzTmFOKHRoaXNbJ3JlJ10pIHx8IGlzTmFOKHRoaXNbJ2ltJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgY29tcGxleCBudW1iZXIgaXMgYXQgdGhlIHplcm8gcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc1plcm8nOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh0aGlzWydyZSddID09PSAwIHx8IHRoaXNbJ3JlJ10gPT09IC0wKSAmJlxuICAgICAgICAgICAgICAodGhpc1snaW0nXSA9PT0gMCB8fCB0aGlzWydpbSddID09PSAtMClcbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxleCBudW1iZXIgaXMgbm90IGF0IHRoZSBpbmZpbml0eSBwb2xlIG9mIHRoZVxuICAgICAqIFJpZW1hbm4gc3BoZXJlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgJ2lzRmluaXRlJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXNGaW5pdGUodGhpc1sncmUnXSkgJiYgaXNGaW5pdGUodGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBjb21wbGV4IG51bWJlciBpcyBhdCB0aGUgaW5maW5pdHkgcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc0luZmluaXRlJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gISh0aGlzWydpc05hTiddKCkgfHwgdGhpc1snaXNGaW5pdGUnXSgpKTtcbiAgICB9XG4gIH07XG5cbiAgQ29tcGxleFsnWkVSTyddID0gbmV3IENvbXBsZXgoMCwgMCk7XG4gIENvbXBsZXhbJ09ORSddID0gbmV3IENvbXBsZXgoMSwgMCk7XG4gIENvbXBsZXhbJ0knXSA9IG5ldyBDb21wbGV4KDAsIDEpO1xuICBDb21wbGV4WydQSSddID0gbmV3IENvbXBsZXgoTWF0aC5QSSwgMCk7XG4gIENvbXBsZXhbJ0UnXSA9IG5ldyBDb21wbGV4KE1hdGguRSwgMCk7XG4gIENvbXBsZXhbJ0lORklOSVRZJ10gPSBuZXcgQ29tcGxleChJbmZpbml0eSwgSW5maW5pdHkpO1xuICBDb21wbGV4WydOQU4nXSA9IG5ldyBDb21wbGV4KE5hTiwgTmFOKTtcbiAgQ29tcGxleFsnRVBTSUxPTiddID0gMWUtMTY7XG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gQ29tcGxleDtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsndmFsdWUnOiB0cnVlfSk7XG4gICAgQ29tcGxleFsnZGVmYXVsdCddID0gQ29tcGxleDtcbiAgICBDb21wbGV4WydDb21wbGV4J10gPSBDb21wbGV4O1xuICAgIG1vZHVsZVsnZXhwb3J0cyddID0gQ29tcGxleDtcbiAgfSBlbHNlIHtcbiAgICByb290WydDb21wbGV4J10gPSBDb21wbGV4O1xuICB9XG5cbn0pKHRoaXMpO1xuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsU2NvcGUpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBkZWNpbWFsLmpzIHYxMC4yLjBcclxuICAgKiAgQW4gYXJiaXRyYXJ5LXByZWNpc2lvbiBEZWNpbWFsIHR5cGUgZm9yIEphdmFTY3JpcHQuXHJcbiAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWtlTWNsL2RlY2ltYWwuanNcclxuICAgKiAgQ29weXJpZ2h0IChjKSAyMDE5IE1pY2hhZWwgTWNsYXVnaGxpbiA8TThjaDg4bEBnbWFpbC5jb20+XHJcbiAgICogIE1JVCBMaWNlbmNlXHJcbiAgICovXHJcblxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRURJVEFCTEUgREVGQVVMVFMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG5cclxuXHJcbiAgICAvLyBUaGUgbWF4aW11bSBleHBvbmVudCBtYWduaXR1ZGUuXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIGB0b0V4cE5lZ2AsIGB0b0V4cFBvc2AsIGBtaW5FYCBhbmQgYG1heEVgLlxyXG4gIHZhciBFWFBfTElNSVQgPSA5ZTE1LCAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDllMTVcclxuXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIGBwcmVjaXNpb25gLCBhbmQgb24gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0b1xyXG4gICAgLy8gYHRvRGVjaW1hbFBsYWNlc2AsIGB0b0V4cG9uZW50aWFsYCwgYHRvRml4ZWRgLCBgdG9QcmVjaXNpb25gIGFuZCBgdG9TaWduaWZpY2FudERpZ2l0c2AuXHJcbiAgICBNQVhfRElHSVRTID0gMWU5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gMWU5XHJcblxyXG4gICAgLy8gQmFzZSBjb252ZXJzaW9uIGFscGhhYmV0LlxyXG4gICAgTlVNRVJBTFMgPSAnMDEyMzQ1Njc4OWFiY2RlZicsXHJcblxyXG4gICAgLy8gVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDEwICgxMDI1IGRpZ2l0cykuXHJcbiAgICBMTjEwID0gJzIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNDg4NjI4NzcyOTc2MDMzMzI3OTAwOTY3NTcyNjA5Njc3MzUyNDgwMjM1OTk3MjA1MDg5NTk4Mjk4MzQxOTY3Nzg0MDQyMjg2MjQ4NjMzNDA5NTI1NDY1MDgyODA2NzU2NjY2Mjg3MzY5MDk4NzgxNjg5NDgyOTA3MjA4MzI1NTU0NjgwODQzNzk5ODk0ODI2MjMzMTk4NTI4MzkzNTA1MzA4OTY1Mzc3NzMyNjI4ODQ2MTYzMzY2MjIyMjg3Njk4MjE5ODg2NzQ2NTQzNjY3NDc0NDA0MjQzMjc0MzY1MTU1MDQ4OTM0MzE0OTM5MzkxNDc5NjE5NDA0NDAwMjIyMTA1MTAxNzE0MTc0ODAwMzY4ODA4NDAxMjY0NzA4MDY4NTU2Nzc0MzIxNjIyODM1NTIyMDExNDgwNDY2MzcxNTY1OTEyMTM3MzQ1MDc0Nzg1Njk0NzY4MzQ2MzYxNjc5MjEwMTgwNjQ0NTA3MDY0ODAwMDI3NzUwMjY4NDkxNjc0NjU1MDU4Njg1NjkzNTY3MzQyMDY3MDU4MTEzNjQyOTIyNDU1NDQwNTc1ODkyNTcyNDIwODI0MTMxNDY5NTY4OTAxNjc1ODk0MDI1Njc3NjMxMTM1NjkxOTI5MjAzMzM3NjU4NzE0MTY2MDIzMDEwNTcwMzA4OTYzNDU3MjA3NTQ0MDM3MDg0NzQ2OTk0MDE2ODI2OTI4MjgwODQ4MTE4NDI4OTMxNDg0ODUyNDk0ODY0NDg3MTkyNzgwOTY3NjI3MTI3NTc3NTM5NzAyNzY2ODYwNTk1MjQ5NjcxNjY3NDE4MzQ4NTcwNDQyMjUwNzE5Nzk2NTAwNDcxNDk1MTA1MDQ5MjIxNDc3NjU2NzYzNjkzODY2Mjk3Njk3OTUyMjExMDcxODI2NDU0OTczNDc3MjY2MjQyNTcwOTQyOTMyMjU4Mjc5ODUwMjU4NTUwOTc4NTI2NTM4MzIwNzYwNjcyNjMxNzE2NDMwOTUwNTk5NTA4NzgwNzUyMzcxMDMzMzEwMTE5Nzg1NzU0NzMzMTU0MTQyMTgwODQyNzU0Mzg2MzU5MTc3ODExNzA1NDMwOTgyNzQ4MjM4NTA0NTY0ODAxOTA5NTYxMDI5OTI5MTgyNDMxODIzNzUyNTM1NzcwOTc1MDUzOTU2NTE4NzY5NzUxMDM3NDk3MDg4ODY5MjE4MDIwNTE4OTMzOTUwNzIzODUzOTIwNTE0NDYzNDE5NzI2NTI4NzI4Njk2NTExMDg2MjU3MTQ5MjE5ODg0OTk3ODc0ODg3Mzc3MTM0NTY4NjIwOTE2NzA1OCcsXHJcblxyXG4gICAgLy8gUGkgKDEwMjUgZGlnaXRzKS5cclxuICAgIFBJID0gJzMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTA1ODIwOTc0OTQ0NTkyMzA3ODE2NDA2Mjg2MjA4OTk4NjI4MDM0ODI1MzQyMTE3MDY3OTgyMTQ4MDg2NTEzMjgyMzA2NjQ3MDkzODQ0NjA5NTUwNTgyMjMxNzI1MzU5NDA4MTI4NDgxMTE3NDUwMjg0MTAyNzAxOTM4NTIxMTA1NTU5NjQ0NjIyOTQ4OTU0OTMwMzgxOTY0NDI4ODEwOTc1NjY1OTMzNDQ2MTI4NDc1NjQ4MjMzNzg2NzgzMTY1MjcxMjAxOTA5MTQ1NjQ4NTY2OTIzNDYwMzQ4NjEwNDU0MzI2NjQ4MjEzMzkzNjA3MjYwMjQ5MTQxMjczNzI0NTg3MDA2NjA2MzE1NTg4MTc0ODgxNTIwOTIwOTYyODI5MjU0MDkxNzE1MzY0MzY3ODkyNTkwMzYwMDExMzMwNTMwNTQ4ODIwNDY2NTIxMzg0MTQ2OTUxOTQxNTExNjA5NDMzMDU3MjcwMzY1NzU5NTkxOTUzMDkyMTg2MTE3MzgxOTMyNjExNzkzMTA1MTE4NTQ4MDc0NDYyMzc5OTYyNzQ5NTY3MzUxODg1NzUyNzI0ODkxMjI3OTM4MTgzMDExOTQ5MTI5ODMzNjczMzYyNDQwNjU2NjQzMDg2MDIxMzk0OTQ2Mzk1MjI0NzM3MTkwNzAyMTc5ODYwOTQzNzAyNzcwNTM5MjE3MTc2MjkzMTc2NzUyMzg0Njc0ODE4NDY3NjY5NDA1MTMyMDAwNTY4MTI3MTQ1MjYzNTYwODI3Nzg1NzcxMzQyNzU3Nzg5NjA5MTczNjM3MTc4NzIxNDY4NDQwOTAxMjI0OTUzNDMwMTQ2NTQ5NTg1MzcxMDUwNzkyMjc5Njg5MjU4OTIzNTQyMDE5OTU2MTEyMTI5MDIxOTYwODY0MDM0NDE4MTU5ODEzNjI5Nzc0NzcxMzA5OTYwNTE4NzA3MjExMzQ5OTk5OTk4MzcyOTc4MDQ5OTUxMDU5NzMxNzMyODE2MDk2MzE4NTk1MDI0NDU5NDU1MzQ2OTA4MzAyNjQyNTIyMzA4MjUzMzQ0Njg1MDM1MjYxOTMxMTg4MTcxMDEwMDAzMTM3ODM4NzUyODg2NTg3NTMzMjA4MzgxNDIwNjE3MTc3NjY5MTQ3MzAzNTk4MjUzNDkwNDI4NzU1NDY4NzMxMTU5NTYyODYzODgyMzUzNzg3NTkzNzUxOTU3NzgxODU3NzgwNTMyMTcxMjI2ODA2NjEzMDAxOTI3ODc2NjExMTk1OTA5MjE2NDIwMTk4OTM4MDk1MjU3MjAxMDY1NDg1ODYzMjc4OScsXHJcblxyXG5cclxuICAgIC8vIFRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBvZiB0aGUgRGVjaW1hbCBjb25zdHJ1Y3Rvci5cclxuICAgIERFRkFVTFRTID0ge1xyXG5cclxuICAgICAgLy8gVGhlc2UgdmFsdWVzIG11c3QgYmUgaW50ZWdlcnMgd2l0aGluIHRoZSBzdGF0ZWQgcmFuZ2VzIChpbmNsdXNpdmUpLlxyXG4gICAgICAvLyBNb3N0IG9mIHRoZXNlIHZhbHVlcyBjYW4gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyB0aGUgYERlY2ltYWwuY29uZmlnYCBtZXRob2QuXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSByZXN1bHQgb2YgYSBjYWxjdWxhdGlvbiBvciBiYXNlIGNvbnZlcnNpb24uXHJcbiAgICAgIC8vIEUuZy4gYERlY2ltYWwuY29uZmlnKHsgcHJlY2lzaW9uOiAyMCB9KTtgXHJcbiAgICAgIHByZWNpc2lvbjogMjAsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYX0RJR0lUU1xyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIGBwcmVjaXNpb25gLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBST1VORF9VUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIFJPVU5EX0RPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIFJPVU5EX0NFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBST1VORF9IQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBST1VORF9IQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIFJPVU5EX0hBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgLy9cclxuICAgICAgLy8gRS5nLlxyXG4gICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IDQ7YFxyXG4gICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IERlY2ltYWwuUk9VTkRfSEFMRl9VUDtgXHJcbiAgICAgIHJvdW5kaW5nOiA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOFxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAgMCBUaGUgcmVtYWluZGVyIGlzIHBvc2l0aXZlIGlmIHRoZSBkaXZpZGVuZCBpcyBuZWdhdGl2ZSwgZWxzZSBpcyBuZWdhdGl2ZS5cclxuICAgICAgLy8gRE9XTiAgICAgICAxIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZW5kIChKYXZhU2NyaXB0ICUpLlxyXG4gICAgICAvLyBGTE9PUiAgICAgIDMgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aXNvciAoUHl0aG9uICUpLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gIDYgVGhlIElFRUUgNzU0IHJlbWFpbmRlciBmdW5jdGlvbi5cclxuICAgICAgLy8gRVVDTElEICAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS4gQWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBUcnVuY2F0ZWQgZGl2aXNpb24gKDEpLCBmbG9vcmVkIGRpdmlzaW9uICgzKSwgdGhlIElFRUUgNzU0IHJlbWFpbmRlciAoNiksIGFuZCBFdWNsaWRpYW5cclxuICAgICAgLy8gZGl2aXNpb24gKDkpIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uIFRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzb1xyXG4gICAgICAvLyBiZSB1c2VkLCBidXQgdGhleSBtYXkgbm90IGdpdmUgdXNlZnVsIHJlc3VsdHMuXHJcbiAgICAgIG1vZHVsbzogMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIGB0b1N0cmluZ2AgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAtN1xyXG4gICAgICB0b0V4cE5lZzogLTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIC1FWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYWJvdmUgd2hpY2ggYHRvU3RyaW5nYCByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBKYXZhU2NyaXB0IG51bWJlcnM6IDIxXHJcbiAgICAgIHRvRXhwUG9zOiAgMjEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gRVhQX0xJTUlUXHJcblxyXG4gICAgICAvLyBUaGUgbWluaW11bSBleHBvbmVudCB2YWx1ZSwgYmVuZWF0aCB3aGljaCB1bmRlcmZsb3cgdG8gemVybyBvY2N1cnMuXHJcbiAgICAgIC8vIEphdmFTY3JpcHQgbnVtYmVyczogLTMyNCAgKDVlLTMyNClcclxuICAgICAgbWluRTogLUVYUF9MSU1JVCwgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLUVYUF9MSU1JVFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgbWF4RTogRVhQX0xJTUlULCAgICAgICAgICAgICAgICAgICAgICAgLy8gMSB0byBFWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIGlmIGF2YWlsYWJsZS5cclxuICAgICAgY3J5cHRvOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZS9mYWxzZVxyXG4gICAgfSxcclxuXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBPRiBFRElUQUJMRSBERUZBVUxUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXHJcblxyXG5cclxuICAgIERlY2ltYWwsIGluZXhhY3QsIG5vQ29uZmxpY3QsIHF1YWRyYW50LFxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlLFxyXG5cclxuICAgIGRlY2ltYWxFcnJvciA9ICdbRGVjaW1hbEVycm9yXSAnLFxyXG4gICAgaW52YWxpZEFyZ3VtZW50ID0gZGVjaW1hbEVycm9yICsgJ0ludmFsaWQgYXJndW1lbnQ6ICcsXHJcbiAgICBwcmVjaXNpb25MaW1pdEV4Y2VlZGVkID0gZGVjaW1hbEVycm9yICsgJ1ByZWNpc2lvbiBsaW1pdCBleGNlZWRlZCcsXHJcbiAgICBjcnlwdG9VbmF2YWlsYWJsZSA9IGRlY2ltYWxFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnLFxyXG5cclxuICAgIG1hdGhmbG9vciA9IE1hdGguZmxvb3IsXHJcbiAgICBtYXRocG93ID0gTWF0aC5wb3csXHJcblxyXG4gICAgaXNCaW5hcnkgPSAvXjBiKFswMV0rKFxcLlswMV0qKT98XFwuWzAxXSspKHBbKy1dP1xcZCspPyQvaSxcclxuICAgIGlzSGV4ID0gL14weChbMC05YS1mXSsoXFwuWzAtOWEtZl0qKT98XFwuWzAtOWEtZl0rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc09jdGFsID0gL14wbyhbMC03XSsoXFwuWzAtN10qKT98XFwuWzAtN10rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc0RlY2ltYWwgPSAvXihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShlWystXT9cXGQrKT8kL2ksXHJcblxyXG4gICAgQkFTRSA9IDFlNyxcclxuICAgIExPR19CQVNFID0gNyxcclxuICAgIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxLFxyXG5cclxuICAgIExOMTBfUFJFQ0lTSU9OID0gTE4xMC5sZW5ndGggLSAxLFxyXG4gICAgUElfUFJFQ0lTSU9OID0gUEkubGVuZ3RoIC0gMSxcclxuXHJcbiAgICAvLyBEZWNpbWFsLnByb3RvdHlwZSBvYmplY3RcclxuICAgIFAgPSB7IG5hbWU6ICdbb2JqZWN0IERlY2ltYWxdJyB9O1xyXG5cclxuXHJcbiAgLy8gRGVjaW1hbCBwcm90b3R5cGUgbWV0aG9kc1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgYWJzb2x1dGVWYWx1ZSAgICAgICAgICAgICBhYnNcclxuICAgKiAgY2VpbFxyXG4gICAqICBjb21wYXJlZFRvICAgICAgICAgICAgICAgIGNtcFxyXG4gICAqICBjb3NpbmUgICAgICAgICAgICAgICAgICAgIGNvc1xyXG4gICAqICBjdWJlUm9vdCAgICAgICAgICAgICAgICAgIGNicnRcclxuICAgKiAgZGVjaW1hbFBsYWNlcyAgICAgICAgICAgICBkcFxyXG4gICAqICBkaXZpZGVkQnkgICAgICAgICAgICAgICAgIGRpdlxyXG4gICAqICBkaXZpZGVkVG9JbnRlZ2VyQnkgICAgICAgIGRpdlRvSW50XHJcbiAgICogIGVxdWFscyAgICAgICAgICAgICAgICAgICAgZXFcclxuICAgKiAgZmxvb3JcclxuICAgKiAgZ3JlYXRlclRoYW4gICAgICAgICAgICAgICBndFxyXG4gICAqICBncmVhdGVyVGhhbk9yRXF1YWxUbyAgICAgIGd0ZVxyXG4gICAqICBoeXBlcmJvbGljQ29zaW5lICAgICAgICAgIGNvc2hcclxuICAgKiAgaHlwZXJib2xpY1NpbmUgICAgICAgICAgICBzaW5oXHJcbiAgICogIGh5cGVyYm9saWNUYW5nZW50ICAgICAgICAgdGFuaFxyXG4gICAqICBpbnZlcnNlQ29zaW5lICAgICAgICAgICAgIGFjb3NcclxuICAgKiAgaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgICBhY29zaFxyXG4gICAqICBpbnZlcnNlSHlwZXJib2xpY1NpbmUgICAgIGFzaW5oXHJcbiAgICogIGludmVyc2VIeXBlcmJvbGljVGFuZ2VudCAgYXRhbmhcclxuICAgKiAgaW52ZXJzZVNpbmUgICAgICAgICAgICAgICBhc2luXHJcbiAgICogIGludmVyc2VUYW5nZW50ICAgICAgICAgICAgYXRhblxyXG4gICAqICBpc0Zpbml0ZVxyXG4gICAqICBpc0ludGVnZXIgICAgICAgICAgICAgICAgIGlzSW50XHJcbiAgICogIGlzTmFOXHJcbiAgICogIGlzTmVnYXRpdmUgICAgICAgICAgICAgICAgaXNOZWdcclxuICAgKiAgaXNQb3NpdGl2ZSAgICAgICAgICAgICAgICBpc1Bvc1xyXG4gICAqICBpc1plcm9cclxuICAgKiAgbGVzc1RoYW4gICAgICAgICAgICAgICAgICBsdFxyXG4gICAqICBsZXNzVGhhbk9yRXF1YWxUbyAgICAgICAgIGx0ZVxyXG4gICAqICBsb2dhcml0aG0gICAgICAgICAgICAgICAgIGxvZ1xyXG4gICAqICBbbWF4aW11bV0gICAgICAgICAgICAgICAgIFttYXhdXHJcbiAgICogIFttaW5pbXVtXSAgICAgICAgICAgICAgICAgW21pbl1cclxuICAgKiAgbWludXMgICAgICAgICAgICAgICAgICAgICBzdWJcclxuICAgKiAgbW9kdWxvICAgICAgICAgICAgICAgICAgICBtb2RcclxuICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgICBleHBcclxuICAgKiAgbmF0dXJhbExvZ2FyaXRobSAgICAgICAgICBsblxyXG4gICAqICBuZWdhdGVkICAgICAgICAgICAgICAgICAgIG5lZ1xyXG4gICAqICBwbHVzICAgICAgICAgICAgICAgICAgICAgIGFkZFxyXG4gICAqICBwcmVjaXNpb24gICAgICAgICAgICAgICAgIHNkXHJcbiAgICogIHJvdW5kXHJcbiAgICogIHNpbmUgICAgICAgICAgICAgICAgICAgICAgc2luXHJcbiAgICogIHNxdWFyZVJvb3QgICAgICAgICAgICAgICAgc3FydFxyXG4gICAqICB0YW5nZW50ICAgICAgICAgICAgICAgICAgIHRhblxyXG4gICAqICB0aW1lcyAgICAgICAgICAgICAgICAgICAgIG11bFxyXG4gICAqICB0b0JpbmFyeVxyXG4gICAqICB0b0RlY2ltYWxQbGFjZXMgICAgICAgICAgIHRvRFBcclxuICAgKiAgdG9FeHBvbmVudGlhbFxyXG4gICAqICB0b0ZpeGVkXHJcbiAgICogIHRvRnJhY3Rpb25cclxuICAgKiAgdG9IZXhhZGVjaW1hbCAgICAgICAgICAgICB0b0hleFxyXG4gICAqICB0b05lYXJlc3RcclxuICAgKiAgdG9OdW1iZXJcclxuICAgKiAgdG9PY3RhbFxyXG4gICAqICB0b1Bvd2VyICAgICAgICAgICAgICAgICAgIHBvd1xyXG4gICAqICB0b1ByZWNpc2lvblxyXG4gICAqICB0b1NpZ25pZmljYW50RGlnaXRzICAgICAgIHRvU0RcclxuICAgKiAgdG9TdHJpbmdcclxuICAgKiAgdHJ1bmNhdGVkICAgICAgICAgICAgICAgICB0cnVuY1xyXG4gICAqICB2YWx1ZU9mICAgICAgICAgICAgICAgICAgIHRvSlNPTlxyXG4gICAqL1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5hYnNvbHV0ZVZhbHVlID0gUC5hYnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xyXG4gICAgaWYgKHgucyA8IDApIHgucyA9IDE7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgd2hvbGUgbnVtYmVyIGluIHRoZVxyXG4gICAqIGRpcmVjdGlvbiBvZiBwb3NpdGl2ZSBJbmZpbml0eS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY2VpbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKSwgdGhpcy5lICsgMSwgMik7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuXHJcbiAgICogICAxICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogIC0xICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogICAwICAgIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSxcclxuICAgKiAgIE5hTiAgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBEZWNpbWFsIGlzIE5hTi5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY29tcGFyZWRUbyA9IFAuY21wID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHZhciBpLCBqLCB4ZEwsIHlkTCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIHhkID0geC5kLFxyXG4gICAgICB5ZCA9ICh5ID0gbmV3IHguY29uc3RydWN0b3IoeSkpLmQsXHJcbiAgICAgIHhzID0geC5zLFxyXG4gICAgICB5cyA9IHkucztcclxuXHJcbiAgICAvLyBFaXRoZXIgTmFOIG9yIMKxSW5maW5pdHk/XHJcbiAgICBpZiAoIXhkIHx8ICF5ZCkge1xyXG4gICAgICByZXR1cm4gIXhzIHx8ICF5cyA/IE5hTiA6IHhzICE9PSB5cyA/IHhzIDogeGQgPT09IHlkID8gMCA6ICF4ZCBeIHhzIDwgMCA/IDEgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFaXRoZXIgemVybz9cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSByZXR1cm4geGRbMF0gPyB4cyA6IHlkWzBdID8gLXlzIDogMDtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoeHMgIT09IHlzKSByZXR1cm4geHM7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBleHBvbmVudHMuXHJcbiAgICBpZiAoeC5lICE9PSB5LmUpIHJldHVybiB4LmUgPiB5LmUgXiB4cyA8IDAgPyAxIDogLTE7XHJcblxyXG4gICAgeGRMID0geGQubGVuZ3RoO1xyXG4gICAgeWRMID0geWQubGVuZ3RoO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICBmb3IgKGkgPSAwLCBqID0geGRMIDwgeWRMID8geGRMIDogeWRMOyBpIDwgajsgKytpKSB7XHJcbiAgICAgIGlmICh4ZFtpXSAhPT0geWRbaV0pIHJldHVybiB4ZFtpXSA+IHlkW2ldIF4geHMgPCAwID8gMSA6IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbXBhcmUgbGVuZ3Rocy5cclxuICAgIHJldHVybiB4ZEwgPT09IHlkTCA/IDAgOiB4ZEwgPiB5ZEwgXiB4cyA8IDAgPyAxIDogLTE7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLTEsIDFdXHJcbiAgICpcclxuICAgKiBjb3MoMCkgICAgICAgICA9IDFcclxuICAgKiBjb3MoLTApICAgICAgICA9IDFcclxuICAgKiBjb3MoSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIGNvcygtSW5maW5pdHkpID0gTmFOXHJcbiAgICogY29zKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY29zaW5lID0gUC5jb3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmQpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgIC8vIGNvcygwKSA9IGNvcygtMCkgPSAxXHJcbiAgICBpZiAoIXguZFswXSkgcmV0dXJuIG5ldyBDdG9yKDEpO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoeC5lLCB4LnNkKCkpICsgTE9HX0JBU0U7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0gY29zaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gMyA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGN1YmUgcm9vdCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqICBjYnJ0KDApICA9ICAwXHJcbiAgICogIGNicnQoLTApID0gLTBcclxuICAgKiAgY2JydCgxKSAgPSAgMVxyXG4gICAqICBjYnJ0KC0xKSA9IC0xXHJcbiAgICogIGNicnQoTikgID0gIE5cclxuICAgKiAgY2JydCgtSSkgPSAtSVxyXG4gICAqICBjYnJ0KEkpICA9ICBJXHJcbiAgICpcclxuICAgKiBNYXRoLmNicnQoeCkgPSAoeCA8IDAgPyAtTWF0aC5wb3coLXgsIDEvMykgOiBNYXRoLnBvdyh4LCAxLzMpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5jdWJlUm9vdCA9IFAuY2JydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBlLCBtLCBuLCByLCByZXAsIHMsIHNkLCB0LCB0MywgdDNwbHVzeCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgIHMgPSB4LnMgKiBtYXRocG93KHgucyAqIHgsIDEgLyAzKTtcclxuXHJcbiAgICAgLy8gTWF0aC5jYnJ0IHVuZGVyZmxvdy9vdmVyZmxvdz9cclxuICAgICAvLyBQYXNzIHggdG8gTWF0aC5wb3cgYXMgaW50ZWdlciwgdGhlbiBhZGp1c3QgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQuXHJcbiAgICBpZiAoIXMgfHwgTWF0aC5hYnMocykgPT0gMSAvIDApIHtcclxuICAgICAgbiA9IGRpZ2l0c1RvU3RyaW5nKHguZCk7XHJcbiAgICAgIGUgPSB4LmU7XHJcblxyXG4gICAgICAvLyBBZGp1c3QgbiBleHBvbmVudCBzbyBpdCBpcyBhIG11bHRpcGxlIG9mIDMgYXdheSBmcm9tIHggZXhwb25lbnQuXHJcbiAgICAgIGlmIChzID0gKGUgLSBuLmxlbmd0aCArIDEpICUgMykgbiArPSAocyA9PSAxIHx8IHMgPT0gLTIgPyAnMCcgOiAnMDAnKTtcclxuICAgICAgcyA9IG1hdGhwb3cobiwgMSAvIDMpO1xyXG5cclxuICAgICAgLy8gUmFyZWx5LCBlIG1heSBiZSBvbmUgbGVzcyB0aGFuIHRoZSByZXN1bHQgZXhwb25lbnQgdmFsdWUuXHJcbiAgICAgIGUgPSBtYXRoZmxvb3IoKGUgKyAxKSAvIDMpIC0gKGUgJSAzID09IChlIDwgMCA/IC0xIDogMikpO1xyXG5cclxuICAgICAgaWYgKHMgPT0gMSAvIDApIHtcclxuICAgICAgICBuID0gJzVlJyArIGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbiA9IHMudG9FeHBvbmVudGlhbCgpO1xyXG4gICAgICAgIG4gPSBuLnNsaWNlKDAsIG4uaW5kZXhPZignZScpICsgMSkgKyBlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByID0gbmV3IEN0b3Iobik7XHJcbiAgICAgIHIucyA9IHgucztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHIgPSBuZXcgQ3RvcihzLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNkID0gKGUgPSBDdG9yLnByZWNpc2lvbikgKyAzO1xyXG5cclxuICAgIC8vIEhhbGxleSdzIG1ldGhvZC5cclxuICAgIC8vIFRPRE8/IENvbXBhcmUgTmV3dG9uJ3MgbWV0aG9kLlxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gcjtcclxuICAgICAgdDMgPSB0LnRpbWVzKHQpLnRpbWVzKHQpO1xyXG4gICAgICB0M3BsdXN4ID0gdDMucGx1cyh4KTtcclxuICAgICAgciA9IGRpdmlkZSh0M3BsdXN4LnBsdXMoeCkudGltZXModCksIHQzcGx1c3gucGx1cyh0MyksIHNkICsgMiwgMSk7XHJcblxyXG4gICAgICAvLyBUT0RPPyBSZXBsYWNlIHdpdGggZm9yLWxvb3AgYW5kIGNoZWNrUm91bmRpbmdEaWdpdHMuXHJcbiAgICAgIGlmIChkaWdpdHNUb1N0cmluZyh0LmQpLnNsaWNlKDAsIHNkKSA9PT0gKG4gPSBkaWdpdHNUb1N0cmluZyhyLmQpKS5zbGljZSgwLCBzZCkpIHtcclxuICAgICAgICBuID0gbi5zbGljZShzZCAtIDMsIHNkICsgMSk7XHJcblxyXG4gICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgOTk5OSBvciA0OTk5XHJcbiAgICAgICAgLy8gLCBpLmUuIGFwcHJvYWNoaW5nIGEgcm91bmRpbmcgYm91bmRhcnksIGNvbnRpbnVlIHRoZSBpdGVyYXRpb24uXHJcbiAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHtcclxuXHJcbiAgICAgICAgICAvLyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIGNoZWNrIHRvIHNlZSBpZiByb3VuZGluZyB1cCBnaXZlcyB0aGUgZXhhY3QgcmVzdWx0IGFzIHRoZVxyXG4gICAgICAgICAgLy8gbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0LlxyXG4gICAgICAgICAgaWYgKCFyZXApIHtcclxuICAgICAgICAgICAgZmluYWxpc2UodCwgZSArIDEsIDApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudGltZXModCkudGltZXModCkuZXEoeCkpIHtcclxuICAgICAgICAgICAgICByID0gdDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNkICs9IDQ7XHJcbiAgICAgICAgICByZXAgPSAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0cyBhcmUgbnVsbCwgMHswLDR9IG9yIDUwezAsM30sIGNoZWNrIGZvciBhbiBleGFjdCByZXN1bHQuXHJcbiAgICAgICAgICAvLyBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5LlxyXG4gICAgICAgICAgaWYgKCErbiB8fCAhK24uc2xpY2UoMSkgJiYgbi5jaGFyQXQoMCkgPT0gJzUnKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHIsIGUgKyAxLCAxKTtcclxuICAgICAgICAgICAgbSA9ICFyLnRpbWVzKHIpLnRpbWVzKHIpLmVxKHgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgZSwgQ3Rvci5yb3VuZGluZywgbSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZGVjaW1hbFBsYWNlcyA9IFAuZHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdyxcclxuICAgICAgZCA9IHRoaXMuZCxcclxuICAgICAgbiA9IE5hTjtcclxuXHJcbiAgICBpZiAoZCkge1xyXG4gICAgICB3ID0gZC5sZW5ndGggLSAxO1xyXG4gICAgICBuID0gKHcgLSBtYXRoZmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpKSAqIExPR19CQVNFO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCB3b3JkLlxyXG4gICAgICB3ID0gZFt3XTtcclxuICAgICAgaWYgKHcpIGZvciAoOyB3ICUgMTAgPT0gMDsgdyAvPSAxMCkgbi0tO1xyXG4gICAgICBpZiAobiA8IDApIG4gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuIC8gMCA9IElcclxuICAgKiAgbiAvIE4gPSBOXHJcbiAgICogIG4gLyBJID0gMFxyXG4gICAqICAwIC8gbiA9IDBcclxuICAgKiAgMCAvIDAgPSBOXHJcbiAgICogIDAgLyBOID0gTlxyXG4gICAqICAwIC8gSSA9IDBcclxuICAgKiAgTiAvIG4gPSBOXHJcbiAgICogIE4gLyAwID0gTlxyXG4gICAqICBOIC8gTiA9IE5cclxuICAgKiAgTiAvIEkgPSBOXHJcbiAgICogIEkgLyBuID0gSVxyXG4gICAqICBJIC8gMCA9IElcclxuICAgKiAgSSAvIE4gPSBOXHJcbiAgICogIEkgLyBJID0gTlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBkaXZpZGVkIGJ5IGB5YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmRpdmlkZWRCeSA9IFAuZGl2ID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiBkaXZpZGUodGhpcywgbmV3IHRoaXMuY29uc3RydWN0b3IoeSkpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbFxyXG4gICAqIGJ5IHRoZSB2YWx1ZSBvZiBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZGl2aWRlZFRvSW50ZWdlckJ5ID0gUC5kaXZUb0ludCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKGRpdmlkZSh4LCBuZXcgQ3Rvcih5KSwgMCwgMSwgMSksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmVxdWFscyA9IFAuZXEgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY21wKHkpID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBhIHdob2xlIG51bWJlciBpbiB0aGVcclxuICAgKiBkaXJlY3Rpb24gb2YgbmVnYXRpdmUgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmZsb29yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpLCB0aGlzLmUgKyAxLCAzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgYHlgLCBvdGhlcndpc2UgcmV0dXJuXHJcbiAgICogZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmdyZWF0ZXJUaGFuID0gUC5ndCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jbXAoeSkgPiAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZ3JlYXRlclRoYW5PckVxdWFsVG8gPSBQLmd0ZSA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgayA9IHRoaXMuY21wKHkpO1xyXG4gICAgcmV0dXJuIGsgPT0gMSB8fCBrID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFsxLCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGNvc2goeCkgPSAxICsgeF4yLzIhICsgeF40LzQhICsgeF42LzYhICsgLi4uXHJcbiAgICpcclxuICAgKiBjb3NoKDApICAgICAgICAgPSAxXHJcbiAgICogY29zaCgtMCkgICAgICAgID0gMVxyXG4gICAqIGNvc2goSW5maW5pdHkpICA9IEluZmluaXR5XHJcbiAgICogY29zaCgtSW5maW5pdHkpID0gSW5maW5pdHlcclxuICAgKiBjb3NoKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqICB4ICAgICAgICB0aW1lIHRha2VuIChtcykgICByZXN1bHRcclxuICAgKiAxMDAwICAgICAgOSAgICAgICAgICAgICAgICAgOS44NTAzNTU1NzAwODUyMzQ5Njk0ZSs0MzNcclxuICAgKiAxMDAwMCAgICAgMjUgICAgICAgICAgICAgICAgNC40MDM0MDkxMTI4MzE0NjA3OTM2ZSs0MzQyXHJcbiAgICogMTAwMDAwICAgIDE3MSAgICAgICAgICAgICAgIDEuNDAzMzMxNjgwMjEzMDYxNTg5N2UrNDM0MjlcclxuICAgKiAxMDAwMDAwICAgMzgxNyAgICAgICAgICAgICAgMS41MTY2MDc2OTg0MDEwNDM3NzI1ZSs0MzQyOTRcclxuICAgKiAxMDAwMDAwMCAgYWJhbmRvbmVkIGFmdGVyIDIgbWludXRlIHdhaXRcclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2YgY29zaCh4KSA9IDAuNSAqIChleHAoeCkgKyBleHAoLXgpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5oeXBlcmJvbGljQ29zaW5lID0gUC5jb3NoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGssIG4sIHByLCBybSwgbGVuLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIG9uZSA9IG5ldyBDdG9yKDEpO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeC5zID8gMSAvIDAgOiBOYU4pO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBvbmU7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyA0O1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcbiAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogY29zKDR4KSA9IDEgLSA4Y29zXjIoeCkgKyA4Y29zXjQoeCkgKyAxXHJcbiAgICAvLyBpLmUuIGNvcyh4KSA9IDEgLSBjb3NeMih4LzQpKDggLSA4Y29zXjIoeC80KSlcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICAvLyBUT0RPPyBFc3RpbWF0aW9uIHJldXNlZCBmcm9tIGNvc2luZSgpIGFuZCBtYXkgbm90IGJlIG9wdGltYWwgaGVyZS5cclxuICAgIGlmIChsZW4gPCAzMikge1xyXG4gICAgICBrID0gTWF0aC5jZWlsKGxlbiAvIDMpO1xyXG4gICAgICBuID0gKDEgLyB0aW55UG93KDQsIGspKS50b1N0cmluZygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgayA9IDE2O1xyXG4gICAgICBuID0gJzIuMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNWUtMTAnO1xyXG4gICAgfVxyXG5cclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMSwgeC50aW1lcyhuKSwgbmV3IEN0b3IoMSksIHRydWUpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICB2YXIgY29zaDJfeCxcclxuICAgICAgaSA9IGssXHJcbiAgICAgIGQ4ID0gbmV3IEN0b3IoOCk7XHJcbiAgICBmb3IgKDsgaS0tOykge1xyXG4gICAgICBjb3NoMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IG9uZS5taW51cyhjb3NoMl94LnRpbWVzKGQ4Lm1pbnVzKGNvc2gyX3gudGltZXMoZDgpKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZSh4LCBDdG9yLnByZWNpc2lvbiA9IHByLCBDdG9yLnJvdW5kaW5nID0gcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgdGhlIHZhbHVlIGluIHJhZGlhbnMgb2YgdGhpc1xyXG4gICAqIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIHNpbmgoeCkgPSB4ICsgeF4zLzMhICsgeF41LzUhICsgeF43LzchICsgLi4uXHJcbiAgICpcclxuICAgKiBzaW5oKDApICAgICAgICAgPSAwXHJcbiAgICogc2luaCgtMCkgICAgICAgID0gLTBcclxuICAgKiBzaW5oKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqIHNpbmgoLUluZmluaXR5KSA9IC1JbmZpbml0eVxyXG4gICAqIHNpbmgoTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogeCAgICAgICAgdGltZSB0YWtlbiAobXMpXHJcbiAgICogMTAgICAgICAgMiBtc1xyXG4gICAqIDEwMCAgICAgIDUgbXNcclxuICAgKiAxMDAwICAgICAxNCBtc1xyXG4gICAqIDEwMDAwICAgIDgyIG1zXHJcbiAgICogMTAwMDAwICAgODg2IG1zICAgICAgICAgICAgMS40MDMzMzE2ODAyMTMwNjE1ODk3ZSs0MzQyOVxyXG4gICAqIDIwMDAwMCAgIDI2MTMgbXNcclxuICAgKiAzMDAwMDAgICA1NDA3IG1zXHJcbiAgICogNDAwMDAwICAgODgyNCBtc1xyXG4gICAqIDUwMDAwMCAgIDEzMDI2IG1zICAgICAgICAgIDguNzA4MDY0MzYxMjcxODA4NDEyOWUrMjE3MTQ2XHJcbiAgICogMTAwMDAwMCAgNDg1NDMgbXNcclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2Ygc2luaCh4KSA9IDAuNSAqIChleHAoeCkgLSBleHAoLXgpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5oeXBlcmJvbGljU2luZSA9IFAuc2luaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBrLCBwciwgcm0sIGxlbixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIE1hdGgubWF4KHguZSwgeC5zZCgpKSArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGxlbiA9IHguZC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGxlbiA8IDMpIHtcclxuICAgICAgeCA9IHRheWxvclNlcmllcyhDdG9yLCAyLCB4LCB4LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBBbHRlcm5hdGl2ZSBhcmd1bWVudCByZWR1Y3Rpb246IHNpbmgoM3gpID0gc2luaCh4KSgzICsgNHNpbmheMih4KSlcclxuICAgICAgLy8gaS5lLiBzaW5oKHgpID0gc2luaCh4LzMpKDMgKyA0c2luaF4yKHgvMykpXHJcbiAgICAgIC8vIDMgbXVsdGlwbGljYXRpb25zIGFuZCAxIGFkZGl0aW9uXHJcblxyXG4gICAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb246IHNpbmgoNXgpID0gc2luaCh4KSg1ICsgc2luaF4yKHgpKDIwICsgMTZzaW5oXjIoeCkpKVxyXG4gICAgICAvLyBpLmUuIHNpbmgoeCkgPSBzaW5oKHgvNSkoNSArIHNpbmheMih4LzUpKDIwICsgMTZzaW5oXjIoeC81KSkpXHJcbiAgICAgIC8vIDQgbXVsdGlwbGljYXRpb25zIGFuZCAyIGFkZGl0aW9uc1xyXG5cclxuICAgICAgLy8gRXN0aW1hdGUgdGhlIG9wdGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHVzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLlxyXG4gICAgICBrID0gMS40ICogTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgIGsgPSBrID4gMTYgPyAxNiA6IGsgfCAwO1xyXG5cclxuICAgICAgeCA9IHgudGltZXMoMSAvIHRpbnlQb3coNSwgaykpO1xyXG4gICAgICB4ID0gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgsIHRydWUpO1xyXG5cclxuICAgICAgLy8gUmV2ZXJzZSBhcmd1bWVudCByZWR1Y3Rpb25cclxuICAgICAgdmFyIHNpbmgyX3gsXHJcbiAgICAgICAgZDUgPSBuZXcgQ3Rvcig1KSxcclxuICAgICAgICBkMTYgPSBuZXcgQ3RvcigxNiksXHJcbiAgICAgICAgZDIwID0gbmV3IEN0b3IoMjApO1xyXG4gICAgICBmb3IgKDsgay0tOykge1xyXG4gICAgICAgIHNpbmgyX3ggPSB4LnRpbWVzKHgpO1xyXG4gICAgICAgIHggPSB4LnRpbWVzKGQ1LnBsdXMoc2luaDJfeC50aW1lcyhkMTYudGltZXMoc2luaDJfeCkucGx1cyhkMjApKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCwgcHIsIHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXNcclxuICAgKiBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy0xLCAxXVxyXG4gICAqXHJcbiAgICogdGFuaCh4KSA9IHNpbmgoeCkgLyBjb3NoKHgpXHJcbiAgICpcclxuICAgKiB0YW5oKDApICAgICAgICAgPSAwXHJcbiAgICogdGFuaCgtMCkgICAgICAgID0gLTBcclxuICAgKiB0YW5oKEluZmluaXR5KSAgPSAxXHJcbiAgICogdGFuaCgtSW5maW5pdHkpID0gLTFcclxuICAgKiB0YW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaHlwZXJib2xpY1RhbmdlbnQgPSBQLnRhbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3Rvcih4LnMpO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDc7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICByZXR1cm4gZGl2aWRlKHguc2luaCgpLCB4LmNvc2goKSwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIChpbnZlcnNlIGNvc2luZSkgaW4gcmFkaWFucyBvZiB0aGUgdmFsdWUgb2ZcclxuICAgKiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstMSwgMV1cclxuICAgKiBSYW5nZTogWzAsIHBpXVxyXG4gICAqXHJcbiAgICogYWNvcyh4KSA9IHBpLzIgLSBhc2luKHgpXHJcbiAgICpcclxuICAgKiBhY29zKDApICAgICAgID0gcGkvMlxyXG4gICAqIGFjb3MoLTApICAgICAgPSBwaS8yXHJcbiAgICogYWNvcygxKSAgICAgICA9IDBcclxuICAgKiBhY29zKC0xKSAgICAgID0gcGlcclxuICAgKiBhY29zKDEvMikgICAgID0gcGkvM1xyXG4gICAqIGFjb3MoLTEvMikgICAgPSAyKnBpLzNcclxuICAgKiBhY29zKHx4fCA+IDEpID0gTmFOXHJcbiAgICogYWNvcyhOYU4pICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlQ29zaW5lID0gUC5hY29zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGhhbGZQaSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBrID0geC5hYnMoKS5jbXAoMSksXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb24sXHJcbiAgICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICBpZiAoayAhPT0gLTEpIHtcclxuICAgICAgcmV0dXJuIGsgPT09IDBcclxuICAgICAgICAvLyB8eHwgaXMgMVxyXG4gICAgICAgID8geC5pc05lZygpID8gZ2V0UGkoQ3RvciwgcHIsIHJtKSA6IG5ldyBDdG9yKDApXHJcbiAgICAgICAgLy8gfHh8ID4gMSBvciB4IGlzIE5hTlxyXG4gICAgICAgIDogbmV3IEN0b3IoTmFOKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgLy8gVE9ETz8gU3BlY2lhbCBjYXNlIGFjb3MoMC41KSA9IHBpLzMgYW5kIGFjb3MoLTAuNSkgPSAyKnBpLzNcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgNjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSB4LmFzaW4oKTtcclxuICAgIGhhbGZQaSA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gaGFsZlBpLm1pbnVzKHgpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIGNvc2luZSBpbiByYWRpYW5zIG9mIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWzEsIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbMCwgSW5maW5pdHldXHJcbiAgICpcclxuICAgKiBhY29zaCh4KSA9IGxuKHggKyBzcXJ0KHheMiAtIDEpKVxyXG4gICAqXHJcbiAgICogYWNvc2goeCA8IDEpICAgICA9IE5hTlxyXG4gICAqIGFjb3NoKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhY29zaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBhY29zaCgtSW5maW5pdHkpID0gTmFOXHJcbiAgICogYWNvc2goMCkgICAgICAgICA9IE5hTlxyXG4gICAqIGFjb3NoKC0wKSAgICAgICAgPSBOYU5cclxuICAgKiBhY29zaCgxKSAgICAgICAgID0gMFxyXG4gICAqIGFjb3NoKC0xKSAgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgPSBQLmFjb3NoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICh4Lmx0ZSgxKSkgcmV0dXJuIG5ldyBDdG9yKHguZXEoMSkgPyAwIDogTmFOKTtcclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heChNYXRoLmFicyh4LmUpLCB4LnNkKCkpICsgNDtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICB4ID0geC50aW1lcyh4KS5taW51cygxKS5zcXJ0KCkucGx1cyh4KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LmxuKCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZVxyXG4gICAqIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogYXNpbmgoeCkgPSBsbih4ICsgc3FydCh4XjIgKyAxKSlcclxuICAgKlxyXG4gICAqIGFzaW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhc2luaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBhc2luaCgtSW5maW5pdHkpID0gLUluZmluaXR5XHJcbiAgICogYXNpbmgoMCkgICAgICAgICA9IDBcclxuICAgKiBhc2luaCgtMCkgICAgICAgID0gLTBcclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUh5cGVyYm9saWNTaW5lID0gUC5hc2luaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSB8fCB4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyAyICogTWF0aC5tYXgoTWF0aC5hYnMoeC5lKSwgeC5zZCgpKSArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgeCA9IHgudGltZXMoeCkucGx1cygxKS5zcXJ0KCkucGx1cyh4KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LmxuKCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBpbiByYWRpYW5zIG9mIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy0xLCAxXVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGF0YW5oKHgpID0gMC41ICogbG4oKDEgKyB4KSAvICgxIC0geCkpXHJcbiAgICpcclxuICAgKiBhdGFuaCh8eHwgPiAxKSAgID0gTmFOXHJcbiAgICogYXRhbmgoTmFOKSAgICAgICA9IE5hTlxyXG4gICAqIGF0YW5oKEluZmluaXR5KSAgPSBOYU5cclxuICAgKiBhdGFuaCgtSW5maW5pdHkpID0gTmFOXHJcbiAgICogYXRhbmgoMCkgICAgICAgICA9IDBcclxuICAgKiBhdGFuaCgtMCkgICAgICAgID0gLTBcclxuICAgKiBhdGFuaCgxKSAgICAgICAgID0gSW5maW5pdHlcclxuICAgKiBhdGFuaCgtMSkgICAgICAgID0gLUluZmluaXR5XHJcbiAgICpcclxuICAgKi9cclxuICBQLmludmVyc2VIeXBlcmJvbGljVGFuZ2VudCA9IFAuYXRhbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLCB3cHIsIHhzZCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmUgPj0gMCkgcmV0dXJuIG5ldyBDdG9yKHguYWJzKCkuZXEoMSkgPyB4LnMgLyAwIDogeC5pc1plcm8oKSA/IHggOiBOYU4pO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB4c2QgPSB4LnNkKCk7XHJcblxyXG4gICAgaWYgKE1hdGgubWF4KHhzZCwgcHIpIDwgMiAqIC14LmUgLSAxKSByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHByLCBybSwgdHJ1ZSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgPSB4c2QgLSB4LmU7XHJcblxyXG4gICAgeCA9IGRpdmlkZSh4LnBsdXMoMSksIG5ldyBDdG9yKDEpLm1pbnVzKHgpLCB3cHIgKyBwciwgMSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5sbigpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIHgudGltZXMoMC41KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjc2luZSAoaW52ZXJzZSBzaW5lKSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstcGkvMiwgcGkvMl1cclxuICAgKlxyXG4gICAqIGFzaW4oeCkgPSAyKmF0YW4oeC8oMSArIHNxcnQoMSAtIHheMikpKVxyXG4gICAqXHJcbiAgICogYXNpbigwKSAgICAgICA9IDBcclxuICAgKiBhc2luKC0wKSAgICAgID0gLTBcclxuICAgKiBhc2luKDEvMikgICAgID0gcGkvNlxyXG4gICAqIGFzaW4oLTEvMikgICAgPSAtcGkvNlxyXG4gICAqIGFzaW4oMSkgICAgICAgPSBwaS8yXHJcbiAgICogYXNpbigtMSkgICAgICA9IC1waS8yXHJcbiAgICogYXNpbih8eHwgPiAxKSA9IE5hTlxyXG4gICAqIGFzaW4oTmFOKSAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2YgVGF5bG9yIHNlcmllcy5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZVNpbmUgPSBQLmFzaW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgaGFsZlBpLCBrLFxyXG4gICAgICBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIGsgPSB4LmFicygpLmNtcCgxKTtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKGsgIT09IC0xKSB7XHJcblxyXG4gICAgICAvLyB8eHwgaXMgMVxyXG4gICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgIGhhbGZQaSA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcbiAgICAgICAgaGFsZlBpLnMgPSB4LnM7XHJcbiAgICAgICAgcmV0dXJuIGhhbGZQaTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gfHh8ID4gMSBvciB4IGlzIE5hTlxyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPPyBTcGVjaWFsIGNhc2UgYXNpbigxLzIpID0gcGkvNiBhbmQgYXNpbigtMS8yKSA9IC1waS82XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5kaXYobmV3IEN0b3IoMSkubWludXMoeC50aW1lcyh4KSkuc3FydCgpLnBsdXMoMSkpLmF0YW4oKTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LnRpbWVzKDIpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IChpbnZlcnNlIHRhbmdlbnQpIGluIHJhZGlhbnMgb2YgdGhlIHZhbHVlXHJcbiAgICogb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1waS8yLCBwaS8yXVxyXG4gICAqXHJcbiAgICogYXRhbih4KSA9IHggLSB4XjMvMyArIHheNS81IC0geF43LzcgKyAuLi5cclxuICAgKlxyXG4gICAqIGF0YW4oMCkgICAgICAgICA9IDBcclxuICAgKiBhdGFuKC0wKSAgICAgICAgPSAtMFxyXG4gICAqIGF0YW4oMSkgICAgICAgICA9IHBpLzRcclxuICAgKiBhdGFuKC0xKSAgICAgICAgPSAtcGkvNFxyXG4gICAqIGF0YW4oSW5maW5pdHkpICA9IHBpLzJcclxuICAgKiBhdGFuKC1JbmZpbml0eSkgPSAtcGkvMlxyXG4gICAqIGF0YW4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlVGFuZ2VudCA9IFAuYXRhbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBpLCBqLCBrLCBuLCBweCwgdCwgciwgd3ByLCB4MixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcclxuICAgICAgaWYgKCF4LnMpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG4gICAgICBpZiAocHIgKyA0IDw9IFBJX1BSRUNJU0lPTikge1xyXG4gICAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjUpO1xyXG4gICAgICAgIHIucyA9IHgucztcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh4LmlzWmVybygpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuICAgIH0gZWxzZSBpZiAoeC5hYnMoKS5lcSgxKSAmJiBwciArIDQgPD0gUElfUFJFQ0lTSU9OKSB7XHJcbiAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjI1KTtcclxuICAgICAgci5zID0geC5zO1xyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwciA9IHByICsgMTA7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICAvLyBUT0RPPyBpZiAoeCA+PSAxICYmIHByIDw9IFBJX1BSRUNJU0lPTikgYXRhbih4KSA9IGhhbGZQaSAqIHgucyAtIGF0YW4oMSAvIHgpO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvblxyXG4gICAgLy8gRW5zdXJlIHx4fCA8IDAuNDJcclxuICAgIC8vIGF0YW4oeCkgPSAyICogYXRhbih4IC8gKDEgKyBzcXJ0KDEgKyB4XjIpKSlcclxuXHJcbiAgICBrID0gTWF0aC5taW4oMjgsIHdwciAvIExPR19CQVNFICsgMiB8IDApO1xyXG5cclxuICAgIGZvciAoaSA9IGs7IGk7IC0taSkgeCA9IHguZGl2KHgudGltZXMoeCkucGx1cygxKS5zcXJ0KCkucGx1cygxKSk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICBqID0gTWF0aC5jZWlsKHdwciAvIExPR19CQVNFKTtcclxuICAgIG4gPSAxO1xyXG4gICAgeDIgPSB4LnRpbWVzKHgpO1xyXG4gICAgciA9IG5ldyBDdG9yKHgpO1xyXG4gICAgcHggPSB4O1xyXG5cclxuICAgIC8vIGF0YW4oeCkgPSB4IC0geF4zLzMgKyB4XjUvNSAtIHheNy83ICsgLi4uXHJcbiAgICBmb3IgKDsgaSAhPT0gLTE7KSB7XHJcbiAgICAgIHB4ID0gcHgudGltZXMoeDIpO1xyXG4gICAgICB0ID0gci5taW51cyhweC5kaXYobiArPSAyKSk7XHJcblxyXG4gICAgICBweCA9IHB4LnRpbWVzKHgyKTtcclxuICAgICAgciA9IHQucGx1cyhweC5kaXYobiArPSAyKSk7XHJcblxyXG4gICAgICBpZiAoci5kW2pdICE9PSB2b2lkIDApIGZvciAoaSA9IGo7IHIuZFtpXSA9PT0gdC5kW2ldICYmIGktLTspO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrKSByID0gci50aW1lcygyIDw8IChrIC0gMSkpO1xyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNGaW5pdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmQ7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBhbiBpbnRlZ2VyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc0ludGVnZXIgPSBQLmlzSW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5kICYmIG1hdGhmbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmQubGVuZ3RoIC0gMjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNOYU4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMucztcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc05lZ2F0aXZlID0gUC5pc05lZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgcG9zaXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmlzUG9zaXRpdmUgPSBQLmlzUG9zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucyA+IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyAwIG9yIC0wLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmQgJiYgdGhpcy5kWzBdID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIGB5YCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA8IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHlgLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5sZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA8IDE7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCB0byB0aGUgc3BlY2lmaWVkIGJhc2UsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogSWYgbm8gYmFzZSBpcyBzcGVjaWZpZWQsIHJldHVybiBsb2dbMTBdKGFyZykuXHJcbiAgICpcclxuICAgKiBsb2dbYmFzZV0oYXJnKSA9IGxuKGFyZykgLyBsbihiYXNlKVxyXG4gICAqXHJcbiAgICogVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0bHkgcm91bmRlZCBpZiB0aGUgYmFzZSBvZiB0aGUgbG9nIGlzIDEwLCBhbmQgJ2FsbW9zdCBhbHdheXMnXHJcbiAgICogb3RoZXJ3aXNlOlxyXG4gICAqXHJcbiAgICogRGVwZW5kaW5nIG9uIHRoZSByb3VuZGluZyBtb2RlLCB0aGUgcmVzdWx0IG1heSBiZSBpbmNvcnJlY3RseSByb3VuZGVkIGlmIHRoZSBmaXJzdCBmaWZ0ZWVuXHJcbiAgICogcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OTk5OTk5OTk5OTkgb3IgWzUwXTAwMDAwMDAwMDAwMDAwLiBJbiB0aGF0IGNhc2UsIHRoZSBtYXhpbXVtIGVycm9yXHJcbiAgICogYmV0d2VlbiB0aGUgcmVzdWx0IGFuZCB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0IHdpbGwgYmUgb25lIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuXHJcbiAgICpcclxuICAgKiBsb2dbLWJdKGEpICAgICAgID0gTmFOXHJcbiAgICogbG9nWzBdKGEpICAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1sxXShhKSAgICAgICAgPSBOYU5cclxuICAgKiBsb2dbTmFOXShhKSAgICAgID0gTmFOXHJcbiAgICogbG9nW0luZmluaXR5XShhKSA9IE5hTlxyXG4gICAqIGxvZ1tiXSgwKSAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiBsb2dbYl0oLTApICAgICAgID0gLUluZmluaXR5XHJcbiAgICogbG9nW2JdKC1hKSAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1tiXSgxKSAgICAgICAgPSAwXHJcbiAgICogbG9nW2JdKEluZmluaXR5KSA9IEluZmluaXR5XHJcbiAgICogbG9nW2JdKE5hTikgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogW2Jhc2VdIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBiYXNlIG9mIHRoZSBsb2dhcml0aG0uXHJcbiAgICpcclxuICAgKi9cclxuICBQLmxvZ2FyaXRobSA9IFAubG9nID0gZnVuY3Rpb24gKGJhc2UpIHtcclxuICAgIHZhciBpc0Jhc2UxMCwgZCwgZGVub21pbmF0b3IsIGssIGluZiwgbnVtLCBzZCwgcixcclxuICAgICAgYXJnID0gdGhpcyxcclxuICAgICAgQ3RvciA9IGFyZy5jb25zdHJ1Y3RvcixcclxuICAgICAgcHIgPSBDdG9yLnByZWNpc2lvbixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBndWFyZCA9IDU7XHJcblxyXG4gICAgLy8gRGVmYXVsdCBiYXNlIGlzIDEwLlxyXG4gICAgaWYgKGJhc2UgPT0gbnVsbCkge1xyXG4gICAgICBiYXNlID0gbmV3IEN0b3IoMTApO1xyXG4gICAgICBpc0Jhc2UxMCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiYXNlID0gbmV3IEN0b3IoYmFzZSk7XHJcbiAgICAgIGQgPSBiYXNlLmQ7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJhc2UgaXMgbmVnYXRpdmUsIG9yIG5vbi1maW5pdGUsIG9yIGlzIDAgb3IgMS5cclxuICAgICAgaWYgKGJhc2UucyA8IDAgfHwgIWQgfHwgIWRbMF0gfHwgYmFzZS5lcSgxKSkgcmV0dXJuIG5ldyBDdG9yKE5hTik7XHJcblxyXG4gICAgICBpc0Jhc2UxMCA9IGJhc2UuZXEoMTApO1xyXG4gICAgfVxyXG5cclxuICAgIGQgPSBhcmcuZDtcclxuXHJcbiAgICAvLyBJcyBhcmcgbmVnYXRpdmUsIG5vbi1maW5pdGUsIDAgb3IgMT9cclxuICAgIGlmIChhcmcucyA8IDAgfHwgIWQgfHwgIWRbMF0gfHwgYXJnLmVxKDEpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3RvcihkICYmICFkWzBdID8gLTEgLyAwIDogYXJnLnMgIT0gMSA/IE5hTiA6IGQgPyAwIDogMSAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIGEgbm9uLXRlcm1pbmF0aW5nIGRlY2ltYWwgZXhwYW5zaW9uIGlmIGJhc2UgaXMgMTAgYW5kIGFyZyBpcyBub3QgYW5cclxuICAgIC8vIGludGVnZXIgcG93ZXIgb2YgMTAuXHJcbiAgICBpZiAoaXNCYXNlMTApIHtcclxuICAgICAgaWYgKGQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGluZiA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChrID0gZFswXTsgayAlIDEwID09PSAwOykgayAvPSAxMDtcclxuICAgICAgICBpbmYgPSBrICE9PSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIHNkID0gcHIgKyBndWFyZDtcclxuICAgIG51bSA9IG5hdHVyYWxMb2dhcml0aG0oYXJnLCBzZCk7XHJcbiAgICBkZW5vbWluYXRvciA9IGlzQmFzZTEwID8gZ2V0TG4xMChDdG9yLCBzZCArIDEwKSA6IG5hdHVyYWxMb2dhcml0aG0oYmFzZSwgc2QpO1xyXG5cclxuICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIDUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgciA9IGRpdmlkZShudW0sIGRlbm9taW5hdG9yLCBzZCwgMSk7XHJcblxyXG4gICAgLy8gSWYgYXQgYSByb3VuZGluZyBib3VuZGFyeSwgaS5lLiB0aGUgcmVzdWx0J3Mgcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OSBvciBbNTBdMDAwMCxcclxuICAgIC8vIGNhbGN1bGF0ZSAxMCBmdXJ0aGVyIGRpZ2l0cy5cclxuICAgIC8vXHJcbiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIGtub3duIHRvIGhhdmUgYW4gaW5maW5pdGUgZGVjaW1hbCBleHBhbnNpb24sIHJlcGVhdCB0aGlzIHVudGlsIGl0IGlzIGNsZWFyXHJcbiAgICAvLyB0aGF0IHRoZSByZXN1bHQgaXMgYWJvdmUgb3IgYmVsb3cgdGhlIGJvdW5kYXJ5LiBPdGhlcndpc2UsIGlmIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSAxMFxyXG4gICAgLy8gZnVydGhlciBkaWdpdHMsIHRoZSBsYXN0IDE0IGFyZSBuaW5lcywgcm91bmQgdXAgYW5kIGFzc3VtZSB0aGUgcmVzdWx0IGlzIGV4YWN0LlxyXG4gICAgLy8gQWxzbyBhc3N1bWUgdGhlIHJlc3VsdCBpcyBleGFjdCBpZiB0aGUgbGFzdCAxNCBhcmUgemVyby5cclxuICAgIC8vXHJcbiAgICAvLyBFeGFtcGxlIG9mIGEgcmVzdWx0IHRoYXQgd2lsbCBiZSBpbmNvcnJlY3RseSByb3VuZGVkOlxyXG4gICAgLy8gbG9nWzEwNDg1NzZdKDQ1MDM1OTk2MjczNzA1MDIpID0gMi42MDAwMDAwMDAwMDAwMDAwOTYxMDI3OTUxMTQ0NDc0Ni4uLlxyXG4gICAgLy8gVGhlIGFib3ZlIHJlc3VsdCBjb3JyZWN0bHkgcm91bmRlZCB1c2luZyBST1VORF9DRUlMIHRvIDEgZGVjaW1hbCBwbGFjZSBzaG91bGQgYmUgMi43LCBidXQgaXRcclxuICAgIC8vIHdpbGwgYmUgZ2l2ZW4gYXMgMi42IGFzIHRoZXJlIGFyZSAxNSB6ZXJvcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcmVxdWVzdGVkIGRlY2ltYWwgcGxhY2UsIHNvXHJcbiAgICAvLyB0aGUgZXhhY3QgcmVzdWx0IHdvdWxkIGJlIGFzc3VtZWQgdG8gYmUgMi42LCB3aGljaCByb3VuZGVkIHVzaW5nIFJPVU5EX0NFSUwgdG8gMSBkZWNpbWFsXHJcbiAgICAvLyBwbGFjZSBpcyBzdGlsbCAyLjYuXHJcbiAgICBpZiAoY2hlY2tSb3VuZGluZ0RpZ2l0cyhyLmQsIGsgPSBwciwgcm0pKSB7XHJcblxyXG4gICAgICBkbyB7XHJcbiAgICAgICAgc2QgKz0gMTA7XHJcbiAgICAgICAgbnVtID0gbmF0dXJhbExvZ2FyaXRobShhcmcsIHNkKTtcclxuICAgICAgICBkZW5vbWluYXRvciA9IGlzQmFzZTEwID8gZ2V0TG4xMChDdG9yLCBzZCArIDEwKSA6IG5hdHVyYWxMb2dhcml0aG0oYmFzZSwgc2QpO1xyXG4gICAgICAgIHIgPSBkaXZpZGUobnVtLCBkZW5vbWluYXRvciwgc2QsIDEpO1xyXG5cclxuICAgICAgICBpZiAoIWluZikge1xyXG5cclxuICAgICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQsIGFzIHRoZSBmaXJzdCBtYXkgYmUgNC5cclxuICAgICAgICAgIGlmICgrZGlnaXRzVG9TdHJpbmcoci5kKS5zbGljZShrICsgMSwgayArIDE1KSArIDEgPT0gMWUxNCkge1xyXG4gICAgICAgICAgICByID0gZmluYWxpc2UociwgcHIgKyAxLCAwKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gd2hpbGUgKGNoZWNrUm91bmRpbmdEaWdpdHMoci5kLCBrICs9IDEwLCBybSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzIGFuZCB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICBQLm1heCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoYXJndW1lbnRzLCB0aGlzKTtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLmNvbnN0cnVjdG9yLCBhcmd1bWVudHMsICdsdCcpO1xyXG4gIH07XHJcbiAgICovXHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMgYW5kIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gIFAubWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChhcmd1bWVudHMsIHRoaXMpO1xyXG4gICAgcmV0dXJuIG1heE9yTWluKHRoaXMuY29uc3RydWN0b3IsIGFyZ3VtZW50cywgJ2d0Jyk7XHJcbiAgfTtcclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogIG4gLSAwID0gblxyXG4gICAqICBuIC0gTiA9IE5cclxuICAgKiAgbiAtIEkgPSAtSVxyXG4gICAqICAwIC0gbiA9IC1uXHJcbiAgICogIDAgLSAwID0gMFxyXG4gICAqICAwIC0gTiA9IE5cclxuICAgKiAgMCAtIEkgPSAtSVxyXG4gICAqICBOIC0gbiA9IE5cclxuICAgKiAgTiAtIDAgPSBOXHJcbiAgICogIE4gLSBOID0gTlxyXG4gICAqICBOIC0gSSA9IE5cclxuICAgKiAgSSAtIG4gPSBJXHJcbiAgICogIEkgLSAwID0gSVxyXG4gICAqICBJIC0gTiA9IE5cclxuICAgKiAgSSAtIEkgPSBOXHJcbiAgICpcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG1pbnVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLm1pbnVzID0gUC5zdWIgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGQsIGUsIGksIGosIGssIGxlbiwgcHIsIHJtLCB4ZCwgeGUsIHhMVHksIHlkLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyBub3QgZmluaXRlLi4uXHJcbiAgICBpZiAoIXguZCB8fCAheS5kKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHkgbmVnYXRlZCBpZiB4IGlzIGZpbml0ZSBhbmQgeSBpcyDCsUluZmluaXR5LlxyXG4gICAgICBlbHNlIGlmICh4LmQpIHkucyA9IC15LnM7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIGZpbml0ZSBhbmQgeCBpcyDCsUluZmluaXR5LlxyXG4gICAgICAvLyBSZXR1cm4geCBpZiBib3RoIGFyZSDCsUluZmluaXR5IHdpdGggZGlmZmVyZW50IHNpZ25zLlxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJvdGggYXJlIMKxSW5maW5pdHkgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG4gICAgICBlbHNlIHkgPSBuZXcgQ3Rvcih5LmQgfHwgeC5zICE9PSB5LnMgPyB4IDogTmFOKTtcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHNpZ25zIGRpZmZlci4uLlxyXG4gICAgaWYgKHgucyAhPSB5LnMpIHtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgICAgcmV0dXJuIHgucGx1cyh5KTtcclxuICAgIH1cclxuXHJcbiAgICB4ZCA9IHguZDtcclxuICAgIHlkID0geS5kO1xyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICAvLyBJZiBlaXRoZXIgaXMgemVyby4uLlxyXG4gICAgaWYgKCF4ZFswXSB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgIC8vIFJldHVybiB5IG5lZ2F0ZWQgaWYgeCBpcyB6ZXJvIGFuZCB5IGlzIG5vbi16ZXJvLlxyXG4gICAgICBpZiAoeWRbMF0pIHkucyA9IC15LnM7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8gYW5kIHggaXMgbm9uLXplcm8uXHJcbiAgICAgIGVsc2UgaWYgKHhkWzBdKSB5ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAvLyBGcm9tIElFRUUgNzU0ICgyMDA4KSA2LjM6IDAgLSAwID0gLTAgLSAtMCA9IC0wIHdoZW4gcm91bmRpbmcgdG8gLUluZmluaXR5LlxyXG4gICAgICBlbHNlIHJldHVybiBuZXcgQ3RvcihybSA9PT0gMyA/IC0wIDogMCk7XHJcblxyXG4gICAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB4IGFuZCB5IGFyZSBmaW5pdGUsIG5vbi16ZXJvIG51bWJlcnMgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBiYXNlIDFlNyBleHBvbmVudHMuXHJcbiAgICBlID0gbWF0aGZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgIHhlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKTtcclxuXHJcbiAgICB4ZCA9IHhkLnNsaWNlKCk7XHJcbiAgICBrID0geGUgLSBlO1xyXG5cclxuICAgIC8vIElmIGJhc2UgMWU3IGV4cG9uZW50cyBkaWZmZXIuLi5cclxuICAgIGlmIChrKSB7XHJcbiAgICAgIHhMVHkgPSBrIDwgMDtcclxuXHJcbiAgICAgIGlmICh4TFR5KSB7XHJcbiAgICAgICAgZCA9IHhkO1xyXG4gICAgICAgIGsgPSAtaztcclxuICAgICAgICBsZW4gPSB5ZC5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZCA9IHlkO1xyXG4gICAgICAgIGUgPSB4ZTtcclxuICAgICAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE51bWJlcnMgd2l0aCBtYXNzaXZlbHkgZGlmZmVyZW50IGV4cG9uZW50cyB3b3VsZCByZXN1bHQgaW4gYSB2ZXJ5IGhpZ2ggbnVtYmVyIG9mXHJcbiAgICAgIC8vIHplcm9zIG5lZWRpbmcgdG8gYmUgcHJlcGVuZGVkLCBidXQgdGhpcyBjYW4gYmUgYXZvaWRlZCB3aGlsZSBzdGlsbCBlbnN1cmluZyBjb3JyZWN0XHJcbiAgICAgIC8vIHJvdW5kaW5nIGJ5IGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgemVyb3MgdG8gYE1hdGguY2VpbChwciAvIExPR19CQVNFKSArIDJgLlxyXG4gICAgICBpID0gTWF0aC5tYXgoTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMjtcclxuXHJcbiAgICAgIGlmIChrID4gaSkge1xyXG4gICAgICAgIGsgPSBpO1xyXG4gICAgICAgIGQubGVuZ3RoID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuXHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgICBmb3IgKGkgPSBrOyBpLS07KSBkLnB1c2goMCk7XHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG5cclxuICAgIC8vIEJhc2UgMWU3IGV4cG9uZW50cyBlcXVhbC5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBDaGVjayBkaWdpdHMgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG5cclxuICAgICAgaSA9IHhkLmxlbmd0aDtcclxuICAgICAgbGVuID0geWQubGVuZ3RoO1xyXG4gICAgICB4TFR5ID0gaSA8IGxlbjtcclxuICAgICAgaWYgKHhMVHkpIGxlbiA9IGk7XHJcblxyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoeGRbaV0gIT0geWRbaV0pIHtcclxuICAgICAgICAgIHhMVHkgPSB4ZFtpXSA8IHlkW2ldO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBrID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeExUeSkge1xyXG4gICAgICBkID0geGQ7XHJcbiAgICAgIHhkID0geWQ7XHJcbiAgICAgIHlkID0gZDtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgIH1cclxuXHJcbiAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gQXBwZW5kIHplcm9zIHRvIGB4ZGAgaWYgc2hvcnRlci5cclxuICAgIC8vIERvbid0IGFkZCB6ZXJvcyB0byBgeWRgIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Rpb24gb25seSBuZWVkcyB0byBzdGFydCBhdCBgeWRgIGxlbmd0aC5cclxuICAgIGZvciAoaSA9IHlkLmxlbmd0aCAtIGxlbjsgaSA+IDA7IC0taSkgeGRbbGVuKytdID0gMDtcclxuXHJcbiAgICAvLyBTdWJ0cmFjdCB5ZCBmcm9tIHhkLlxyXG4gICAgZm9yIChpID0geWQubGVuZ3RoOyBpID4gazspIHtcclxuXHJcbiAgICAgIGlmICh4ZFstLWldIDwgeWRbaV0pIHtcclxuICAgICAgICBmb3IgKGogPSBpOyBqICYmIHhkWy0tal0gPT09IDA7KSB4ZFtqXSA9IEJBU0UgLSAxO1xyXG4gICAgICAgIC0teGRbal07XHJcbiAgICAgICAgeGRbaV0gKz0gQkFTRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeGRbaV0gLT0geWRbaV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yICg7IHhkWy0tbGVuXSA9PT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICBmb3IgKDsgeGRbMF0gPT09IDA7IHhkLnNoaWZ0KCkpIC0tZTtcclxuXHJcbiAgICAvLyBaZXJvP1xyXG4gICAgaWYgKCF4ZFswXSkgcmV0dXJuIG5ldyBDdG9yKHJtID09PSAzID8gLTAgOiAwKTtcclxuXHJcbiAgICB5LmQgPSB4ZDtcclxuICAgIHkuZSA9IGdldEJhc2UxMEV4cG9uZW50KHhkLCBlKTtcclxuXHJcbiAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgIG4gJSAwID0gIE5cclxuICAgKiAgIG4gJSBOID0gIE5cclxuICAgKiAgIG4gJSBJID0gIG5cclxuICAgKiAgIDAgJSBuID0gIDBcclxuICAgKiAgLTAgJSBuID0gLTBcclxuICAgKiAgIDAgJSAwID0gIE5cclxuICAgKiAgIDAgJSBOID0gIE5cclxuICAgKiAgIDAgJSBJID0gIDBcclxuICAgKiAgIE4gJSBuID0gIE5cclxuICAgKiAgIE4gJSAwID0gIE5cclxuICAgKiAgIE4gJSBOID0gIE5cclxuICAgKiAgIE4gJSBJID0gIE5cclxuICAgKiAgIEkgJSBuID0gIE5cclxuICAgKiAgIEkgJSAwID0gIE5cclxuICAgKiAgIEkgJSBOID0gIE5cclxuICAgKiAgIEkgJSBJID0gIE5cclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgbW9kdWxvIGB5YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBUaGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIG1vZHVsbyBtb2RlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5tb2R1bG8gPSBQLm1vZCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgcSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIHkgPSBuZXcgQ3Rvcih5KTtcclxuXHJcbiAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgwrFJbmZpbml0eSBvciBOYU4sIG9yIHkgaXMgTmFOIG9yIMKxMC5cclxuICAgIGlmICgheC5kIHx8ICF5LnMgfHwgeS5kICYmICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgIC8vIFJldHVybiB4IGlmIHkgaXMgwrFJbmZpbml0eSBvciB4IGlzIMKxMC5cclxuICAgIGlmICgheS5kIHx8IHguZCAmJiAheC5kWzBdKSB7XHJcbiAgICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgQ3Rvci5wcmVjaXNpb24sIEN0b3Iucm91bmRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFByZXZlbnQgcm91bmRpbmcgb2YgaW50ZXJtZWRpYXRlIGNhbGN1bGF0aW9ucy5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKEN0b3IubW9kdWxvID09IDkpIHtcclxuXHJcbiAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAvLyByZXN1bHQgPSB4IC0gcSAqIHkgICAgd2hlcmUgIDAgPD0gcmVzdWx0IDwgYWJzKHkpXHJcbiAgICAgIHEgPSBkaXZpZGUoeCwgeS5hYnMoKSwgMCwgMywgMSk7XHJcbiAgICAgIHEucyAqPSB5LnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBxID0gZGl2aWRlKHgsIHksIDAsIEN0b3IubW9kdWxvLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBxID0gcS50aW1lcyh5KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHgubWludXMocSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCxcclxuICAgKiBpLmUuIHRoZSBiYXNlIGUgcmFpc2VkIHRvIHRoZSBwb3dlciB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmF0dXJhbEV4cG9uZW50aWFsID0gUC5leHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmF0dXJhbEV4cG9uZW50aWFsKHRoaXMpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLFxyXG4gICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmF0dXJhbExvZ2FyaXRobSA9IFAubG4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmF0dXJhbExvZ2FyaXRobSh0aGlzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG5lZ2F0ZWQsIGkuZS4gYXMgaWYgbXVsdGlwbGllZCBieVxyXG4gICAqIC0xLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5uZWdhdGVkID0gUC5uZWcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xyXG4gICAgeC5zID0gLXgucztcclxuICAgIHJldHVybiBmaW5hbGlzZSh4KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgbiArIDAgPSBuXHJcbiAgICogIG4gKyBOID0gTlxyXG4gICAqICBuICsgSSA9IElcclxuICAgKiAgMCArIG4gPSBuXHJcbiAgICogIDAgKyAwID0gMFxyXG4gICAqICAwICsgTiA9IE5cclxuICAgKiAgMCArIEkgPSBJXHJcbiAgICogIE4gKyBuID0gTlxyXG4gICAqICBOICsgMCA9IE5cclxuICAgKiAgTiArIE4gPSBOXHJcbiAgICogIE4gKyBJID0gTlxyXG4gICAqICBJICsgbiA9IElcclxuICAgKiAgSSArIDAgPSBJXHJcbiAgICogIEkgKyBOID0gTlxyXG4gICAqICBJICsgSSA9IElcclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcGx1cyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5wbHVzID0gUC5hZGQgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGNhcnJ5LCBkLCBlLCBpLCBrLCBsZW4sIHByLCBybSwgeGQsIHlkLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyBub3QgZmluaXRlLi4uXHJcbiAgICBpZiAoIXguZCB8fCAheS5kKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyBmaW5pdGUgYW5kIHggaXMgwrFJbmZpbml0eS5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIHRoZSBzYW1lIHNpZ24uXHJcbiAgICAgIC8vIFJldHVybiBOYU4gaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIGRpZmZlcmVudCBzaWducy5cclxuICAgICAgLy8gUmV0dXJuIHkgaWYgeCBpcyBmaW5pdGUgYW5kIHkgaXMgwrFJbmZpbml0eS5cclxuICAgICAgZWxzZSBpZiAoIXguZCkgeSA9IG5ldyBDdG9yKHkuZCB8fCB4LnMgPT09IHkucyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgcmV0dXJuIHk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8vIElmIHNpZ25zIGRpZmZlci4uLlxyXG4gICAgaWYgKHgucyAhPSB5LnMpIHtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgICAgcmV0dXJuIHgubWludXMoeSk7XHJcbiAgICB9XHJcblxyXG4gICAgeGQgPSB4LmQ7XHJcbiAgICB5ZCA9IHkuZDtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgLy8gSWYgZWl0aGVyIGlzIHplcm8uLi5cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8uXHJcbiAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8uXHJcbiAgICAgIGlmICgheWRbMF0pIHkgPSBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIHByLCBybSkgOiB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHggYW5kIHkgYXJlIGZpbml0ZSwgbm9uLXplcm8gbnVtYmVycyB3aXRoIHRoZSBzYW1lIHNpZ24uXHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIGJhc2UgMWU3IGV4cG9uZW50cy5cclxuICAgIGsgPSBtYXRoZmxvb3IoeC5lIC8gTE9HX0JBU0UpO1xyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgeGQgPSB4ZC5zbGljZSgpO1xyXG4gICAgaSA9IGsgLSBlO1xyXG5cclxuICAgIC8vIElmIGJhc2UgMWU3IGV4cG9uZW50cyBkaWZmZXIuLi5cclxuICAgIGlmIChpKSB7XHJcblxyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBkID0geGQ7XHJcbiAgICAgICAgaSA9IC1pO1xyXG4gICAgICAgIGxlbiA9IHlkLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkID0geWQ7XHJcbiAgICAgICAgZSA9IGs7XHJcbiAgICAgICAgbGVuID0geGQubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBMaW1pdCBudW1iZXIgb2YgemVyb3MgcHJlcGVuZGVkIHRvIG1heChjZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMS5cclxuICAgICAgayA9IE1hdGguY2VpbChwciAvIExPR19CQVNFKTtcclxuICAgICAgbGVuID0gayA+IGxlbiA/IGsgKyAxIDogbGVuICsgMTtcclxuXHJcbiAgICAgIGlmIChpID4gbGVuKSB7XHJcbiAgICAgICAgaSA9IGxlbjtcclxuICAgICAgICBkLmxlbmd0aCA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBOb3RlOiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy5cclxuICAgICAgZC5yZXZlcnNlKCk7XHJcbiAgICAgIGZvciAoOyBpLS07KSBkLnB1c2goMCk7XHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxlbiA9IHhkLmxlbmd0aDtcclxuICAgIGkgPSB5ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gSWYgeWQgaXMgbG9uZ2VyIHRoYW4geGQsIHN3YXAgeGQgYW5kIHlkIHNvIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5LlxyXG4gICAgaWYgKGxlbiAtIGkgPCAwKSB7XHJcbiAgICAgIGkgPSBsZW47XHJcbiAgICAgIGQgPSB5ZDtcclxuICAgICAgeWQgPSB4ZDtcclxuICAgICAgeGQgPSBkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9ubHkgc3RhcnQgYWRkaW5nIGF0IHlkLmxlbmd0aCAtIDEgYXMgdGhlIGZ1cnRoZXIgZGlnaXRzIG9mIHhkIGNhbiBiZSBsZWZ0IGFzIHRoZXkgYXJlLlxyXG4gICAgZm9yIChjYXJyeSA9IDA7IGk7KSB7XHJcbiAgICAgIGNhcnJ5ID0gKHhkWy0taV0gPSB4ZFtpXSArIHlkW2ldICsgY2FycnkpIC8gQkFTRSB8IDA7XHJcbiAgICAgIHhkW2ldICU9IEJBU0U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhcnJ5KSB7XHJcbiAgICAgIHhkLnVuc2hpZnQoY2FycnkpO1xyXG4gICAgICArK2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgemVybywgYXMgK3ggKyAreSAhPSAwICYmIC14ICsgLXkgIT0gMFxyXG4gICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7IHhkWy0tbGVuXSA9PSAwOykgeGQucG9wKCk7XHJcblxyXG4gICAgeS5kID0geGQ7XHJcbiAgICB5LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgZSk7XHJcblxyXG4gICAgcmV0dXJuIGV4dGVybmFsID8gZmluYWxpc2UoeSwgcHIsIHJtKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBbel0ge2Jvb2xlYW58bnVtYmVyfSBXaGV0aGVyIHRvIGNvdW50IGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvczogdHJ1ZSwgZmFsc2UsIDEgb3IgMC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uICh6KSB7XHJcbiAgICB2YXIgayxcclxuICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgaWYgKHogIT09IHZvaWQgMCAmJiB6ICE9PSAhIXogJiYgeiAhPT0gMSAmJiB6ICE9PSAwKSB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyB6KTtcclxuXHJcbiAgICBpZiAoeC5kKSB7XHJcbiAgICAgIGsgPSBnZXRQcmVjaXNpb24oeC5kKTtcclxuICAgICAgaWYgKHogJiYgeC5lICsgMSA+IGspIGsgPSB4LmUgKyAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgayA9IE5hTjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaztcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSB3aG9sZSBudW1iZXIgdXNpbmdcclxuICAgKiByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnJvdW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHguZSArIDEsIEN0b3Iucm91bmRpbmcpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzaW5lIG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstMSwgMV1cclxuICAgKlxyXG4gICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi5cclxuICAgKlxyXG4gICAqIHNpbigwKSAgICAgICAgID0gMFxyXG4gICAqIHNpbigtMCkgICAgICAgID0gLTBcclxuICAgKiBzaW4oSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIHNpbigtSW5maW5pdHkpID0gTmFOXHJcbiAgICogc2luKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuc2luZSA9IFAuc2luID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyBMT0dfQkFTRTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSBzaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID4gMiA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGlzIERlY2ltYWwsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogIHNxcnQoLW4pID0gIE5cclxuICAgKiAgc3FydChOKSAgPSAgTlxyXG4gICAqICBzcXJ0KC1JKSA9ICBOXHJcbiAgICogIHNxcnQoSSkgID0gIElcclxuICAgKiAgc3FydCgwKSAgPSAgMFxyXG4gICAqICBzcXJ0KC0wKSA9IC0wXHJcbiAgICpcclxuICAgKi9cclxuICBQLnNxdWFyZVJvb3QgPSBQLnNxcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbSwgbiwgc2QsIHIsIHJlcCwgdCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIGQgPSB4LmQsXHJcbiAgICAgIGUgPSB4LmUsXHJcbiAgICAgIHMgPSB4LnMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIE5lZ2F0aXZlL05hTi9JbmZpbml0eS96ZXJvP1xyXG4gICAgaWYgKHMgIT09IDEgfHwgIWQgfHwgIWRbMF0pIHtcclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCFzIHx8IHMgPCAwICYmICghZCB8fCBkWzBdKSA/IE5hTiA6IGQgPyB4IDogMSAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgIHMgPSBNYXRoLnNxcnQoK3gpO1xyXG5cclxuICAgIC8vIE1hdGguc3FydCB1bmRlcmZsb3cvb3ZlcmZsb3c/XHJcbiAgICAvLyBQYXNzIHggdG8gTWF0aC5zcXJ0IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7XHJcbiAgICAgIG4gPSBkaWdpdHNUb1N0cmluZyhkKTtcclxuXHJcbiAgICAgIGlmICgobi5sZW5ndGggKyBlKSAlIDIgPT0gMCkgbiArPSAnMCc7XHJcbiAgICAgIHMgPSBNYXRoLnNxcnQobik7XHJcbiAgICAgIGUgPSBtYXRoZmxvb3IoKGUgKyAxKSAvIDIpIC0gKGUgPCAwIHx8IGUgJSAyKTtcclxuXHJcbiAgICAgIGlmIChzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9ICcxZScgKyBlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgciA9IG5ldyBDdG9yKG4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgciA9IG5ldyBDdG9yKHMudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2QgPSAoZSA9IEN0b3IucHJlY2lzaW9uKSArIDM7XHJcblxyXG4gICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLlxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gcjtcclxuICAgICAgciA9IHQucGx1cyhkaXZpZGUoeCwgdCwgc2QgKyAyLCAxKSkudGltZXMoMC41KTtcclxuXHJcbiAgICAgIC8vIFRPRE8/IFJlcGxhY2Ugd2l0aCBmb3ItbG9vcCBhbmQgY2hlY2tSb3VuZGluZ0RpZ2l0cy5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgc2QpID09PSAobiA9IGRpZ2l0c1RvU3RyaW5nKHIuZCkpLnNsaWNlKDAsIHNkKSkge1xyXG4gICAgICAgIG4gPSBuLnNsaWNlKHNkIC0gMywgc2QgKyAxKTtcclxuXHJcbiAgICAgICAgLy8gVGhlIDR0aCByb3VuZGluZyBkaWdpdCBtYXkgYmUgaW4gZXJyb3IgYnkgLTEgc28gaWYgdGhlIDQgcm91bmRpbmcgZGlnaXRzIGFyZSA5OTk5IG9yXHJcbiAgICAgICAgLy8gNDk5OSwgaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5LCBjb250aW51ZSB0aGUgaXRlcmF0aW9uLlxyXG4gICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgLy8gT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCBjaGVjayB0byBzZWUgaWYgcm91bmRpbmcgdXAgZ2l2ZXMgdGhlIGV4YWN0IHJlc3VsdCBhcyB0aGVcclxuICAgICAgICAgIC8vIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHQsIGUgKyAxLCAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzZCArPSA0O1xyXG4gICAgICAgICAgcmVwID0gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgYW4gZXhhY3QgcmVzdWx0LlxyXG4gICAgICAgICAgLy8gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykge1xyXG5cclxuICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICBmaW5hbGlzZShyLCBlICsgMSwgMSk7XHJcbiAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHIsIGUsIEN0b3Iucm91bmRpbmcsIG0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogdGFuKDApICAgICAgICAgPSAwXHJcbiAgICogdGFuKC0wKSAgICAgICAgPSAtMFxyXG4gICAqIHRhbihJbmZpbml0eSkgID0gTmFOXHJcbiAgICogdGFuKC1JbmZpbml0eSkgPSBOYU5cclxuICAgKiB0YW4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50YW5nZW50ID0gUC50YW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDEwO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcblxyXG4gICAgeCA9IHguc2luKCk7XHJcbiAgICB4LnMgPSAxO1xyXG4gICAgeCA9IGRpdmlkZSh4LCBuZXcgQ3RvcigxKS5taW51cyh4LnRpbWVzKHgpKS5zcXJ0KCksIHByICsgMTAsIDApO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gNCA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuICogMCA9IDBcclxuICAgKiAgbiAqIE4gPSBOXHJcbiAgICogIG4gKiBJID0gSVxyXG4gICAqICAwICogbiA9IDBcclxuICAgKiAgMCAqIDAgPSAwXHJcbiAgICogIDAgKiBOID0gTlxyXG4gICAqICAwICogSSA9IE5cclxuICAgKiAgTiAqIG4gPSBOXHJcbiAgICogIE4gKiAwID0gTlxyXG4gICAqICBOICogTiA9IE5cclxuICAgKiAgTiAqIEkgPSBOXHJcbiAgICogIEkgKiBuID0gSVxyXG4gICAqICBJICogMCA9IE5cclxuICAgKiAgSSAqIE4gPSBOXHJcbiAgICogIEkgKiBJID0gSVxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhpcyBEZWNpbWFsIHRpbWVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRpbWVzID0gUC5tdWwgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGNhcnJ5LCBlLCBpLCBrLCByLCByTCwgdCwgeGRMLCB5ZEwsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIHlkID0gKHkgPSBuZXcgQ3Rvcih5KSkuZDtcclxuXHJcbiAgICB5LnMgKj0geC5zO1xyXG5cclxuICAgICAvLyBJZiBlaXRoZXIgaXMgTmFOLCDCsUluZmluaXR5IG9yIMKxMC4uLlxyXG4gICAgaWYgKCF4ZCB8fCAheGRbMF0gfHwgIXlkIHx8ICF5ZFswXSkge1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCF5LnMgfHwgeGQgJiYgIXhkWzBdICYmICF5ZCB8fCB5ZCAmJiAheWRbMF0gJiYgIXhkXHJcblxyXG4gICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTi5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgwrEwIGFuZCB5IGlzIMKxSW5maW5pdHksIG9yIHkgaXMgwrEwIGFuZCB4IGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgPyBOYU5cclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiBlaXRoZXIgaXMgwrEwLlxyXG4gICAgICAgIDogIXhkIHx8ICF5ZCA/IHkucyAvIDAgOiB5LnMgKiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKSArIG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICB4ZEwgPSB4ZC5sZW5ndGg7XHJcbiAgICB5ZEwgPSB5ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gRW5zdXJlIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5LlxyXG4gICAgaWYgKHhkTCA8IHlkTCkge1xyXG4gICAgICByID0geGQ7XHJcbiAgICAgIHhkID0geWQ7XHJcbiAgICAgIHlkID0gcjtcclxuICAgICAgckwgPSB4ZEw7XHJcbiAgICAgIHhkTCA9IHlkTDtcclxuICAgICAgeWRMID0gckw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGlzZSB0aGUgcmVzdWx0IGFycmF5IHdpdGggemVyb3MuXHJcbiAgICByID0gW107XHJcbiAgICByTCA9IHhkTCArIHlkTDtcclxuICAgIGZvciAoaSA9IHJMOyBpLS07KSByLnB1c2goMCk7XHJcblxyXG4gICAgLy8gTXVsdGlwbHkhXHJcbiAgICBmb3IgKGkgPSB5ZEw7IC0taSA+PSAwOykge1xyXG4gICAgICBjYXJyeSA9IDA7XHJcbiAgICAgIGZvciAoayA9IHhkTCArIGk7IGsgPiBpOykge1xyXG4gICAgICAgIHQgPSByW2tdICsgeWRbaV0gKiB4ZFtrIC0gaSAtIDFdICsgY2Fycnk7XHJcbiAgICAgICAgcltrLS1dID0gdCAlIEJBU0UgfCAwO1xyXG4gICAgICAgIGNhcnJ5ID0gdCAvIEJBU0UgfCAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByW2tdID0gKHJba10gKyBjYXJyeSkgJSBCQVNFIHwgMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKDsgIXJbLS1yTF07KSByLnBvcCgpO1xyXG5cclxuICAgIGlmIChjYXJyeSkgKytlO1xyXG4gICAgZWxzZSByLnNoaWZ0KCk7XHJcblxyXG4gICAgeS5kID0gcjtcclxuICAgIHkuZSA9IGdldEJhc2UxMEV4cG9uZW50KHIsIGUpO1xyXG5cclxuICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgMiwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9CaW5hcnkgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICByZXR1cm4gdG9TdHJpbmdCaW5hcnkodGhpcywgMiwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIGBkcGBcclxuICAgKiBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAgb3IgYHJvdW5kaW5nYCBpZiBgcm1gIGlzIG9taXR0ZWQuXHJcbiAgICpcclxuICAgKiBJZiBgZHBgIGlzIG9taXR0ZWQsIHJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9EZWNpbWFsUGxhY2VzID0gUC50b0RQID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcbiAgICBpZiAoZHAgPT09IHZvaWQgMCkgcmV0dXJuIHg7XHJcblxyXG4gICAgY2hlY2tJbnQzMihkcCwgMCwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHgsIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBleHBvbmVudGlhbCBub3RhdGlvbiByb3VuZGVkIHRvXHJcbiAgICogYGRwYCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgIHZhciBzdHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoZHAgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrSW50MzIoZHAsIDAsIE1BWF9ESUdJVFMpO1xyXG5cclxuICAgICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgICAgZWxzZSBjaGVja0ludDMyKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgIHggPSBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgZHAgKyAxLCBybSk7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHRydWUsIGRwICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSA/ICctJyArIHN0ciA6IHN0cjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaW4gbm9ybWFsIChmaXhlZC1wb2ludCkgbm90YXRpb24gdG9cclxuICAgKiBgZHBgIGZpeGVkIGRlY2ltYWwgcGxhY2VzIGFuZCByb3VuZGVkIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYCBvciBgcm91bmRpbmdgIGlmIGBybWAgaXNcclxuICAgKiBvbWl0dGVkLlxyXG4gICAqXHJcbiAgICogQXMgd2l0aCBKYXZhU2NyaXB0IG51bWJlcnMsICgtMCkudG9GaXhlZCgwKSBpcyAnMCcsIGJ1dCBlLmcuICgtMC4wMDAwMSkudG9GaXhlZCgwKSBpcyAnLTAnLlxyXG4gICAqXHJcbiAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLCBidXQgKC0wLjEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgKiAoLTApLnRvRml4ZWQoMSkgaXMgJzAuMCcsIGJ1dCAoLTAuMDEpLnRvRml4ZWQoMSkgaXMgJy0wLjAnLlxyXG4gICAqICgtMCkudG9GaXhlZCgzKSBpcyAnMC4wMDAnLlxyXG4gICAqICgtMC41KS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRml4ZWQgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICB2YXIgc3RyLCB5LFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKGRwID09PSB2b2lkIDApIHtcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKGRwLCAwLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB5ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh5LCBmYWxzZSwgZHAgKyB5LmUgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUbyBkZXRlcm1pbmUgd2hldGhlciB0byBhZGQgdGhlIG1pbnVzIHNpZ24gbG9vayBhdCB0aGUgdmFsdWUgYmVmb3JlIGl0IHdhcyByb3VuZGVkLFxyXG4gICAgLy8gaS5lLiBsb29rIGF0IGB4YCByYXRoZXIgdGhhbiBgeWAuXHJcbiAgICByZXR1cm4geC5pc05lZygpICYmICF4LmlzWmVybygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBhcyBhIHNpbXBsZSBmcmFjdGlvbiB3aXRoIGFuIGludGVnZXJcclxuICAgKiBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICpcclxuICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIG1heGltdW1cclxuICAgKiBkZW5vbWluYXRvci4gSWYgYSBtYXhpbXVtIGRlbm9taW5hdG9yIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZW5vbWluYXRvciB3aWxsIGJlIHRoZSBsb3dlc3RcclxuICAgKiB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS5cclxuICAgKlxyXG4gICAqIFttYXhEXSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBNYXhpbXVtIGRlbm9taW5hdG9yLiBJbnRlZ2VyID49IDEgYW5kIDwgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRnJhY3Rpb24gPSBmdW5jdGlvbiAobWF4RCkge1xyXG4gICAgdmFyIGQsIGQwLCBkMSwgZDIsIGUsIGssIG4sIG4wLCBuMSwgcHIsIHEsIHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICB4ZCA9IHguZCxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4ZCkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIG4xID0gZDAgPSBuZXcgQ3RvcigxKTtcclxuICAgIGQxID0gbjAgPSBuZXcgQ3RvcigwKTtcclxuXHJcbiAgICBkID0gbmV3IEN0b3IoZDEpO1xyXG4gICAgZSA9IGQuZSA9IGdldFByZWNpc2lvbih4ZCkgLSB4LmUgLSAxO1xyXG4gICAgayA9IGUgJSBMT0dfQkFTRTtcclxuICAgIGQuZFswXSA9IG1hdGhwb3coMTAsIGsgPCAwID8gTE9HX0JBU0UgKyBrIDogayk7XHJcblxyXG4gICAgaWYgKG1heEQgPT0gbnVsbCkge1xyXG5cclxuICAgICAgLy8gZCBpcyAxMCoqZSwgdGhlIG1pbmltdW0gbWF4LWRlbm9taW5hdG9yIG5lZWRlZC5cclxuICAgICAgbWF4RCA9IGUgPiAwID8gZCA6IG4xO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbiA9IG5ldyBDdG9yKG1heEQpO1xyXG4gICAgICBpZiAoIW4uaXNJbnQoKSB8fCBuLmx0KG4xKSkgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgbik7XHJcbiAgICAgIG1heEQgPSBuLmd0KGQpID8gKGUgPiAwID8gZCA6IG4xKSA6IG47XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIG4gPSBuZXcgQ3RvcihkaWdpdHNUb1N0cmluZyh4ZCkpO1xyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIEN0b3IucHJlY2lzaW9uID0gZSA9IHhkLmxlbmd0aCAqIExPR19CQVNFICogMjtcclxuXHJcbiAgICBmb3IgKDs7KSAge1xyXG4gICAgICBxID0gZGl2aWRlKG4sIGQsIDAsIDEsIDEpO1xyXG4gICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICBpZiAoZDIuY21wKG1heEQpID09IDEpIGJyZWFrO1xyXG4gICAgICBkMCA9IGQxO1xyXG4gICAgICBkMSA9IGQyO1xyXG4gICAgICBkMiA9IG4xO1xyXG4gICAgICBuMSA9IG4wLnBsdXMocS50aW1lcyhkMikpO1xyXG4gICAgICBuMCA9IGQyO1xyXG4gICAgICBkMiA9IGQ7XHJcbiAgICAgIGQgPSBuLm1pbnVzKHEudGltZXMoZDIpKTtcclxuICAgICAgbiA9IGQyO1xyXG4gICAgfVxyXG5cclxuICAgIGQyID0gZGl2aWRlKG1heEQubWludXMoZDApLCBkMSwgMCwgMSwgMSk7XHJcbiAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgIGQwID0gZDAucGx1cyhkMi50aW1lcyhkMSkpO1xyXG4gICAgbjAucyA9IG4xLnMgPSB4LnM7XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGZyYWN0aW9uIGlzIGNsb3NlciB0byB4LCBuMC9kMCBvciBuMS9kMT9cclxuICAgIHIgPSBkaXZpZGUobjEsIGQxLCBlLCAxKS5taW51cyh4KS5hYnMoKS5jbXAoZGl2aWRlKG4wLCBkMCwgZSwgMSkubWludXMoeCkuYWJzKCkpIDwgMVxyXG4gICAgICAgID8gW24xLCBkMV0gOiBbbjAsIGQwXTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBiYXNlIDE2LCByb3VuZCB0byBgc2RgIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBvcHRpb25hbCBgc2RgIGFyZ3VtZW50IGlzIHByZXNlbnQgdGhlbiByZXR1cm4gYmluYXJ5IGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b0hleGFkZWNpbWFsID0gUC50b0hleCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHJldHVybiB0b1N0cmluZ0JpbmFyeSh0aGlzLCAxNiwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm5zIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgYHlgIGluIHRoZSBkaXJlY3Rpb24gb2Ygcm91bmRpbmdcclxuICAgKiBtb2RlIGBybWAsIG9yIGBEZWNpbWFsLnJvdW5kaW5nYCBpZiBgcm1gIGlzIG9taXR0ZWQsIHRvIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYWx3YXlzIGhhdmUgdGhlIHNhbWUgc2lnbiBhcyB0aGlzIERlY2ltYWwsIHVubGVzcyBlaXRoZXIgdGhpcyBEZWNpbWFsXHJcbiAgICogb3IgYHlgIGlzIE5hTiwgaW4gd2hpY2ggY2FzZSB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYWxzbyBiZSBOYU4uXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdmFsdWUgb2YgYHByZWNpc2lvbmAuXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBtYWduaXR1ZGUgdG8gcm91bmQgdG8gYSBtdWx0aXBsZSBvZi5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBub3QgYW4gaW50ZWdlcjoge3JtfSdcclxuICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBvdXQgb2YgcmFuZ2U6IHtybX0nXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvTmVhcmVzdCA9IGZ1bmN0aW9uICh5LCBybSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgaWYgKHkgPT0gbnVsbCkge1xyXG5cclxuICAgICAgLy8gSWYgeCBpcyBub3QgZmluaXRlLCByZXR1cm4geC5cclxuICAgICAgaWYgKCF4LmQpIHJldHVybiB4O1xyXG5cclxuICAgICAgeSA9IG5ldyBDdG9yKDEpO1xyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB5ID0gbmV3IEN0b3IoeSk7XHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiB4IGlzIG5vdCBmaW5pdGUsIHJldHVybiB4IGlmIHkgaXMgbm90IE5hTiwgZWxzZSBOYU4uXHJcbiAgICAgIGlmICgheC5kKSByZXR1cm4geS5zID8geCA6IHk7XHJcblxyXG4gICAgICAvLyBJZiB5IGlzIG5vdCBmaW5pdGUsIHJldHVybiBJbmZpbml0eSB3aXRoIHRoZSBzaWduIG9mIHggaWYgeSBpcyBJbmZpbml0eSwgZWxzZSBOYU4uXHJcbiAgICAgIGlmICgheS5kKSB7XHJcbiAgICAgICAgaWYgKHkucykgeS5zID0geC5zO1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgeSBpcyBub3QgemVybywgY2FsY3VsYXRlIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHkgdG8geC5cclxuICAgIGlmICh5LmRbMF0pIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgeCA9IGRpdmlkZSh4LCB5LCAwLCBybSwgMSkudGltZXMoeSk7XHJcbiAgICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgICAgZmluYWxpc2UoeCk7XHJcblxyXG4gICAgLy8gSWYgeSBpcyB6ZXJvLCByZXR1cm4gemVybyB3aXRoIHRoZSBzaWduIG9mIHguXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB5LnMgPSB4LnM7XHJcbiAgICAgIHggPSB5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4O1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGNvbnZlcnRlZCB0byBhIG51bWJlciBwcmltaXRpdmUuXHJcbiAgICogWmVybyBrZWVwcyBpdHMgc2lnbi5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gK3RoaXM7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgOCwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9PY3RhbCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHJldHVybiB0b1N0cmluZ0JpbmFyeSh0aGlzLCA4LCBzZCwgcm0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcmFpc2VkIHRvIHRoZSBwb3dlciBgeWAsIHJvdW5kZWRcclxuICAgKiB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogRUNNQVNjcmlwdCBjb21wbGlhbnQuXHJcbiAgICpcclxuICAgKiAgIHBvdyh4LCBOYU4pICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyh4LCDCsTApICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMVxyXG5cclxuICAgKiAgIHBvdyhOYU4sIG5vbi16ZXJvKSAgICAgICAgICAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyhhYnMoeCkgPiAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArSW5maW5pdHlcclxuICAgKiAgIHBvdyhhYnMoeCkgPiAxLCAtSW5maW5pdHkpICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KGFicyh4KSA9PSAxLCDCsUluZmluaXR5KSAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyhhYnMoeCkgPCAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KGFicyh4KSA8IDEsIC1JbmZpbml0eSkgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KCtJbmZpbml0eSwgeSA+IDApICAgICAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KCtJbmZpbml0eSwgeSA8IDApICAgICAgICAgICAgICAgICA9ICswXHJcbiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA+IDApICAgICAgID0gLUluZmluaXR5XHJcbiAgICogICBwb3coLUluZmluaXR5LCBldmVuIGludGVnZXIgPiAwKSAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA8IDApICAgICAgID0gLTBcclxuICAgKiAgIHBvdygtSW5maW5pdHksIGV2ZW4gaW50ZWdlciA8IDApICAgICAgPSArMFxyXG4gICAqICAgcG93KCswLCB5ID4gMCkgICAgICAgICAgICAgICAgICAgICAgICA9ICswXHJcbiAgICogICBwb3coKzAsIHkgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coLTAsIG9kZCBpbnRlZ2VyID4gMCkgICAgICAgICAgICAgID0gLTBcclxuICAgKiAgIHBvdygtMCwgZXZlbiBpbnRlZ2VyID4gMCkgICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KC0wLCBvZGQgaW50ZWdlciA8IDApICAgICAgICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICAgcG93KC0wLCBldmVuIGludGVnZXIgPCAwKSAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KGZpbml0ZSB4IDwgMCwgZmluaXRlIG5vbi1pbnRlZ2VyKSA9IE5hTlxyXG4gICAqXHJcbiAgICogRm9yIG5vbi1pbnRlZ2VyIG9yIHZlcnkgbGFyZ2UgZXhwb25lbnRzIHBvdyh4LCB5KSBpcyBjYWxjdWxhdGVkIHVzaW5nXHJcbiAgICpcclxuICAgKiAgIHheeSA9IGV4cCh5KmxuKHgpKVxyXG4gICAqXHJcbiAgICogQXNzdW1pbmcgdGhlIGZpcnN0IDE1IHJvdW5kaW5nIGRpZ2l0cyBhcmUgZWFjaCBlcXVhbGx5IGxpa2VseSB0byBiZSBhbnkgZGlnaXQgMC05LCB0aGVcclxuICAgKiBwcm9iYWJpbGl0eSBvZiBhbiBpbmNvcnJlY3RseSByb3VuZGVkIHJlc3VsdFxyXG4gICAqIFAoWzQ5XTl7MTR9IHwgWzUwXTB7MTR9KSA9IDIgKiAwLjIgKiAxMF4tMTQgPSA0ZS0xNSA9IDEvMi41ZSsxNFxyXG4gICAqIGkuZS4gMSBpbiAyNTAsMDAwLDAwMCwwMDAsMDAwXHJcbiAgICpcclxuICAgKiBJZiBhIHJlc3VsdCBpcyBpbmNvcnJlY3RseSByb3VuZGVkIHRoZSBtYXhpbXVtIGVycm9yIHdpbGwgYmUgMSB1bHAgKHVuaXQgaW4gbGFzdCBwbGFjZSkuXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBwb3dlciB0byB3aGljaCB0byByYWlzZSB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvUG93ZXIgPSBQLnBvdyA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgZSwgaywgcHIsIHIsIHJtLCBzLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHluID0gKyh5ID0gbmV3IEN0b3IoeSkpO1xyXG5cclxuICAgIC8vIEVpdGhlciDCsUluZmluaXR5LCBOYU4gb3IgwrEwP1xyXG4gICAgaWYgKCF4LmQgfHwgIXkuZCB8fCAheC5kWzBdIHx8ICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihtYXRocG93KCt4LCB5bikpO1xyXG5cclxuICAgIHggPSBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBpZiAoeC5lcSgxKSkgcmV0dXJuIHg7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICBpZiAoeS5lcSgxKSkgcmV0dXJuIGZpbmFsaXNlKHgsIHByLCBybSk7XHJcblxyXG4gICAgLy8geSBleHBvbmVudFxyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgLy8gSWYgeSBpcyBhIHNtYWxsIGludGVnZXIgdXNlIHRoZSAnZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcnIGFsZ29yaXRobS5cclxuICAgIGlmIChlID49IHkuZC5sZW5ndGggLSAxICYmIChrID0geW4gPCAwID8gLXluIDogeW4pIDw9IE1BWF9TQUZFX0lOVEVHRVIpIHtcclxuICAgICAgciA9IGludFBvdyhDdG9yLCB4LCBrLCBwcik7XHJcbiAgICAgIHJldHVybiB5LnMgPCAwID8gbmV3IEN0b3IoMSkuZGl2KHIpIDogZmluYWxpc2UociwgcHIsIHJtKTtcclxuICAgIH1cclxuXHJcbiAgICBzID0geC5zO1xyXG5cclxuICAgIC8vIGlmIHggaXMgbmVnYXRpdmVcclxuICAgIGlmIChzIDwgMCkge1xyXG5cclxuICAgICAgLy8gaWYgeSBpcyBub3QgYW4gaW50ZWdlclxyXG4gICAgICBpZiAoZSA8IHkuZC5sZW5ndGggLSAxKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJlc3VsdCBpcyBwb3NpdGl2ZSBpZiB4IGlzIG5lZ2F0aXZlIGFuZCB0aGUgbGFzdCBkaWdpdCBvZiBpbnRlZ2VyIHkgaXMgZXZlbi5cclxuICAgICAgaWYgKCh5LmRbZV0gJiAxKSA9PSAwKSBzID0gMTtcclxuXHJcbiAgICAgIC8vIGlmIHguZXEoLTEpXHJcbiAgICAgIGlmICh4LmUgPT0gMCAmJiB4LmRbMF0gPT0gMSAmJiB4LmQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICB4LnMgPSBzO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXN0aW1hdGUgcmVzdWx0IGV4cG9uZW50LlxyXG4gICAgLy8geF55ID0gMTBeZSwgIHdoZXJlIGUgPSB5ICogbG9nMTAoeClcclxuICAgIC8vIGxvZzEwKHgpID0gbG9nMTAoeF9zaWduaWZpY2FuZCkgKyB4X2V4cG9uZW50XHJcbiAgICAvLyBsb2cxMCh4X3NpZ25pZmljYW5kKSA9IGxuKHhfc2lnbmlmaWNhbmQpIC8gbG4oMTApXHJcbiAgICBrID0gbWF0aHBvdygreCwgeW4pO1xyXG4gICAgZSA9IGsgPT0gMCB8fCAhaXNGaW5pdGUoaylcclxuICAgICAgPyBtYXRoZmxvb3IoeW4gKiAoTWF0aC5sb2coJzAuJyArIGRpZ2l0c1RvU3RyaW5nKHguZCkpIC8gTWF0aC5MTjEwICsgeC5lICsgMSkpXHJcbiAgICAgIDogbmV3IEN0b3IoayArICcnKS5lO1xyXG5cclxuICAgIC8vIEV4cG9uZW50IGVzdGltYXRlIG1heSBiZSBpbmNvcnJlY3QgZS5nLiB4OiAwLjk5OTk5OTk5OTk5OTk5OTk5OSwgeTogMi4yOSwgZTogMCwgci5lOiAtMS5cclxuXHJcbiAgICAvLyBPdmVyZmxvdy91bmRlcmZsb3c/XHJcbiAgICBpZiAoZSA+IEN0b3IubWF4RSArIDEgfHwgZSA8IEN0b3IubWluRSAtIDEpIHJldHVybiBuZXcgQ3RvcihlID4gMCA/IHMgLyAwIDogMCk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSB4LnMgPSAxO1xyXG5cclxuICAgIC8vIEVzdGltYXRlIHRoZSBleHRyYSBndWFyZCBkaWdpdHMgbmVlZGVkIHRvIGVuc3VyZSBmaXZlIGNvcnJlY3Qgcm91bmRpbmcgZGlnaXRzIGZyb21cclxuICAgIC8vIG5hdHVyYWxMb2dhcml0aG0oeCkuIEV4YW1wbGUgb2YgZmFpbHVyZSB3aXRob3V0IHRoZXNlIGV4dHJhIGRpZ2l0cyAocHJlY2lzaW9uOiAxMCk6XHJcbiAgICAvLyBuZXcgRGVjaW1hbCgyLjMyNDU2KS5wb3coJzIwODc5ODc0MzY1MzQ1NjYuNDY0MTEnKVxyXG4gICAgLy8gc2hvdWxkIGJlIDEuMTYyMzc3ODIzZSs3NjQ5MTQ5MDUxNzM4MTUsIGJ1dCBpcyAxLjE2MjM1NTgyM2UrNzY0OTE0OTA1MTczODE1XHJcbiAgICBrID0gTWF0aC5taW4oMTIsIChlICsgJycpLmxlbmd0aCk7XHJcblxyXG4gICAgLy8gciA9IHheeSA9IGV4cCh5KmxuKHgpKVxyXG4gICAgciA9IG5hdHVyYWxFeHBvbmVudGlhbCh5LnRpbWVzKG5hdHVyYWxMb2dhcml0aG0oeCwgcHIgKyBrKSksIHByKTtcclxuXHJcbiAgICAvLyByIG1heSBiZSBJbmZpbml0eSwgZS5nLiAoMC45OTk5OTk5OTk5OTk5OTk5KS5wb3coLTFlKzQwKVxyXG4gICAgaWYgKHIuZCkge1xyXG5cclxuICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIHJlcXVpcmVkIHByZWNpc2lvbiBwbHVzIGZpdmUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgICByID0gZmluYWxpc2UociwgcHIgKyA1LCAxKTtcclxuXHJcbiAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIFs0OV05OTk5IG9yIFs1MF0wMDAwIGluY3JlYXNlIHRoZSBwcmVjaXNpb24gYnkgMTAgYW5kIHJlY2FsY3VsYXRlXHJcbiAgICAgIC8vIHRoZSByZXN1bHQuXHJcbiAgICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHIuZCwgcHIsIHJtKSkge1xyXG4gICAgICAgIGUgPSBwciArIDEwO1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgaW5jcmVhc2VkIHByZWNpc2lvbiBwbHVzIGZpdmUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgICAgIHIgPSBmaW5hbGlzZShuYXR1cmFsRXhwb25lbnRpYWwoeS50aW1lcyhuYXR1cmFsTG9nYXJpdGhtKHgsIGUgKyBrKSksIGUpLCBlICsgNSwgMSk7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQgKHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdCBtYXkgYmUgNCBvciA5KS5cclxuICAgICAgICBpZiAoK2RpZ2l0c1RvU3RyaW5nKHIuZCkuc2xpY2UocHIgKyAxLCBwciArIDE1KSArIDEgPT0gMWUxNCkge1xyXG4gICAgICAgICAgciA9IGZpbmFsaXNlKHIsIHByICsgMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgci5zID0gcztcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBgc2RgIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIFJldHVybiBleHBvbmVudGlhbCBub3RhdGlvbiBpZiBgc2RgIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50XHJcbiAgICogdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gbm9ybWFsIG5vdGF0aW9uLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHZhciBzdHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoc2QgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB4LmUgPD0gQ3Rvci50b0V4cE5lZyB8fCB4LmUgPj0gQ3Rvci50b0V4cFBvcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB4ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIHNkLCBybSk7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHNkIDw9IHguZSB8fCB4LmUgPD0gQ3Rvci50b0V4cE5lZywgc2QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBgc2RgXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYCwgb3IgdG8gYHByZWNpc2lvbmAgYW5kIGByb3VuZGluZ2AgcmVzcGVjdGl2ZWx5IGlmXHJcbiAgICogb21pdHRlZC5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqICd0b1NEKCkgZGlnaXRzIG91dCBvZiByYW5nZToge3NkfSdcclxuICAgKiAndG9TRCgpIGRpZ2l0cyBub3QgYW4gaW50ZWdlcjoge3NkfSdcclxuICAgKiAndG9TRCgpIHJvdW5kaW5nIG1vZGUgbm90IGFuIGludGVnZXI6IHtybX0nXHJcbiAgICogJ3RvU0QoKSByb3VuZGluZyBtb2RlIG91dCBvZiByYW5nZToge3JtfSdcclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9TaWduaWZpY2FudERpZ2l0cyA9IFAudG9TRCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKHNkID09PSB2b2lkIDApIHtcclxuICAgICAgc2QgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgICBpZiAocm0gPT09IHZvaWQgMCkgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhpcyBEZWNpbWFsIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhblxyXG4gICAqIGB0b0V4cFBvc2AsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIGB0b0V4cE5lZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgeC5lIDw9IEN0b3IudG9FeHBOZWcgfHwgeC5lID49IEN0b3IudG9FeHBQb3MpO1xyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCB0cnVuY2F0ZWQgdG8gYSB3aG9sZSBudW1iZXIuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRydW5jYXRlZCA9IFAudHJ1bmMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyksIHRoaXMuZSArIDEsIDEpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKiBVbmxpa2UgYHRvU3RyaW5nYCwgbmVnYXRpdmUgemVybyB3aWxsIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24uXHJcbiAgICpcclxuICAgKi9cclxuICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHguZSA8PSBDdG9yLnRvRXhwTmVnIHx8IHguZSA+PSBDdG9yLnRvRXhwUG9zKTtcclxuXHJcbiAgICByZXR1cm4geC5pc05lZygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gIC8vIEFkZCBhbGlhc2VzIHRvIG1hdGNoIEJpZ0RlY2ltYWwgbWV0aG9kIG5hbWVzLlxyXG4gIC8vIFAuYWRkID0gUC5wbHVzO1xyXG4gIFAuc3VidHJhY3QgPSBQLm1pbnVzO1xyXG4gIFAubXVsdGlwbHkgPSBQLnRpbWVzO1xyXG4gIFAuZGl2aWRlID0gUC5kaXY7XHJcbiAgUC5yZW1haW5kZXIgPSBQLm1vZDtcclxuICBQLmNvbXBhcmVUbyA9IFAuY21wO1xyXG4gIFAubmVnYXRlID0gUC5uZWc7XHJcbiAgICovXHJcblxyXG5cclxuICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBEZWNpbWFsLnByb3RvdHlwZSAoUCkgYW5kL29yIERlY2ltYWwgbWV0aG9kcywgYW5kIHRoZWlyIGNhbGxlcnMuXHJcblxyXG5cclxuICAvKlxyXG4gICAqICBkaWdpdHNUb1N0cmluZyAgICAgICAgICAgUC5jdWJlUm9vdCwgUC5sb2dhcml0aG0sIFAuc3F1YXJlUm9vdCwgUC50b0ZyYWN0aW9uLCBQLnRvUG93ZXIsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pdGVUb1N0cmluZywgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtXHJcbiAgICogIGNoZWNrSW50MzIgICAgICAgICAgICAgICBQLnRvRGVjaW1hbFBsYWNlcywgUC50b0V4cG9uZW50aWFsLCBQLnRvRml4ZWQsIFAudG9OZWFyZXN0LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50b1ByZWNpc2lvbiwgUC50b1NpZ25pZmljYW50RGlnaXRzLCB0b1N0cmluZ0JpbmFyeSwgcmFuZG9tXHJcbiAgICogIGNoZWNrUm91bmRpbmdEaWdpdHMgICAgICBQLmxvZ2FyaXRobSwgUC50b1Bvd2VyLCBuYXR1cmFsRXhwb25lbnRpYWwsIG5hdHVyYWxMb2dhcml0aG1cclxuICAgKiAgY29udmVydEJhc2UgICAgICAgICAgICAgIHRvU3RyaW5nQmluYXJ5LCBwYXJzZU90aGVyXHJcbiAgICogIGNvcyAgICAgICAgICAgICAgICAgICAgICBQLmNvc1xyXG4gICAqICBkaXZpZGUgICAgICAgICAgICAgICAgICAgUC5hdGFuaCwgUC5jdWJlUm9vdCwgUC5kaXZpZGVkQnksIFAuZGl2aWRlZFRvSW50ZWdlckJ5LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIFAubW9kdWxvLCBQLnNxdWFyZVJvb3QsIFAudGFuLCBQLnRhbmgsIFAudG9GcmFjdGlvbixcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCB0b1N0cmluZ0JpbmFyeSwgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF5bG9yU2VyaWVzLCBhdGFuMiwgcGFyc2VPdGhlclxyXG4gICAqICBmaW5hbGlzZSAgICAgICAgICAgICAgICAgUC5hYnNvbHV0ZVZhbHVlLCBQLmF0YW4sIFAuYXRhbmgsIFAuY2VpbCwgUC5jb3MsIFAuY29zaCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAuY3ViZVJvb3QsIFAuZGl2aWRlZFRvSW50ZWdlckJ5LCBQLmZsb29yLCBQLmxvZ2FyaXRobSwgUC5taW51cyxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAubW9kdWxvLCBQLm5lZ2F0ZWQsIFAucGx1cywgUC5yb3VuZCwgUC5zaW4sIFAuc2luaCwgUC5zcXVhcmVSb290LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50YW4sIFAudGltZXMsIFAudG9EZWNpbWFsUGxhY2VzLCBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCBQLnRvUG93ZXIsIFAudG9QcmVjaXNpb24sIFAudG9TaWduaWZpY2FudERpZ2l0cyxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudHJ1bmNhdGVkLCBkaXZpZGUsIGdldExuMTAsIGdldFBpLCBuYXR1cmFsRXhwb25lbnRpYWwsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBuYXR1cmFsTG9nYXJpdGhtLCBjZWlsLCBmbG9vciwgcm91bmQsIHRydW5jXHJcbiAgICogIGZpbml0ZVRvU3RyaW5nICAgICAgICAgICBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCwgUC50b1ByZWNpc2lvbiwgUC50b1N0cmluZywgUC52YWx1ZU9mLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdCaW5hcnlcclxuICAgKiAgZ2V0QmFzZTEwRXhwb25lbnQgICAgICAgIFAubWludXMsIFAucGx1cywgUC50aW1lcywgcGFyc2VPdGhlclxyXG4gICAqICBnZXRMbjEwICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIG5hdHVyYWxMb2dhcml0aG1cclxuICAgKiAgZ2V0UGkgICAgICAgICAgICAgICAgICAgIFAuYWNvcywgUC5hc2luLCBQLmF0YW4sIHRvTGVzc1RoYW5IYWxmUGksIGF0YW4yXHJcbiAgICogIGdldFByZWNpc2lvbiAgICAgICAgICAgICBQLnByZWNpc2lvbiwgUC50b0ZyYWN0aW9uXHJcbiAgICogIGdldFplcm9TdHJpbmcgICAgICAgICAgICBkaWdpdHNUb1N0cmluZywgZmluaXRlVG9TdHJpbmdcclxuICAgKiAgaW50UG93ICAgICAgICAgICAgICAgICAgIFAudG9Qb3dlciwgcGFyc2VPdGhlclxyXG4gICAqICBpc09kZCAgICAgICAgICAgICAgICAgICAgdG9MZXNzVGhhbkhhbGZQaVxyXG4gICAqICBtYXhPck1pbiAgICAgICAgICAgICAgICAgbWF4LCBtaW5cclxuICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgIFAubmF0dXJhbEV4cG9uZW50aWFsLCBQLnRvUG93ZXJcclxuICAgKiAgbmF0dXJhbExvZ2FyaXRobSAgICAgICAgIFAuYWNvc2gsIFAuYXNpbmgsIFAuYXRhbmgsIFAubG9nYXJpdGhtLCBQLm5hdHVyYWxMb2dhcml0aG0sXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRvUG93ZXIsIG5hdHVyYWxFeHBvbmVudGlhbFxyXG4gICAqICBub25GaW5pdGVUb1N0cmluZyAgICAgICAgZmluaXRlVG9TdHJpbmcsIHRvU3RyaW5nQmluYXJ5XHJcbiAgICogIHBhcnNlRGVjaW1hbCAgICAgICAgICAgICBEZWNpbWFsXHJcbiAgICogIHBhcnNlT3RoZXIgICAgICAgICAgICAgICBEZWNpbWFsXHJcbiAgICogIHNpbiAgICAgICAgICAgICAgICAgICAgICBQLnNpblxyXG4gICAqICB0YXlsb3JTZXJpZXMgICAgICAgICAgICAgUC5jb3NoLCBQLnNpbmgsIGNvcywgc2luXHJcbiAgICogIHRvTGVzc1RoYW5IYWxmUGkgICAgICAgICBQLmNvcywgUC5zaW5cclxuICAgKiAgdG9TdHJpbmdCaW5hcnkgICAgICAgICAgIFAudG9CaW5hcnksIFAudG9IZXhhZGVjaW1hbCwgUC50b09jdGFsXHJcbiAgICogIHRydW5jYXRlICAgICAgICAgICAgICAgICBpbnRQb3dcclxuICAgKlxyXG4gICAqICBUaHJvd3M6ICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIFAucHJlY2lzaW9uLCBQLnRvRnJhY3Rpb24sIGNoZWNrSW50MzIsIGdldExuMTAsIGdldFBpLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbExvZ2FyaXRobSwgY29uZmlnLCBwYXJzZU90aGVyLCByYW5kb20sIERlY2ltYWxcclxuICAgKi9cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGRpZ2l0c1RvU3RyaW5nKGQpIHtcclxuICAgIHZhciBpLCBrLCB3cyxcclxuICAgICAgaW5kZXhPZkxhc3RXb3JkID0gZC5sZW5ndGggLSAxLFxyXG4gICAgICBzdHIgPSAnJyxcclxuICAgICAgdyA9IGRbMF07XHJcblxyXG4gICAgaWYgKGluZGV4T2ZMYXN0V29yZCA+IDApIHtcclxuICAgICAgc3RyICs9IHc7XHJcbiAgICAgIGZvciAoaSA9IDE7IGkgPCBpbmRleE9mTGFzdFdvcmQ7IGkrKykge1xyXG4gICAgICAgIHdzID0gZFtpXSArICcnO1xyXG4gICAgICAgIGsgPSBMT0dfQkFTRSAtIHdzLmxlbmd0aDtcclxuICAgICAgICBpZiAoaykgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICAgICAgc3RyICs9IHdzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3ID0gZFtpXTtcclxuICAgICAgd3MgPSB3ICsgJyc7XHJcbiAgICAgIGsgPSBMT0dfQkFTRSAtIHdzLmxlbmd0aDtcclxuICAgICAgaWYgKGspIHN0ciArPSBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIGlmICh3ID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAnMCc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zIG9mIGxhc3Qgdy5cclxuICAgIGZvciAoOyB3ICUgMTAgPT09IDA7KSB3IC89IDEwO1xyXG5cclxuICAgIHJldHVybiBzdHIgKyB3O1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGNoZWNrSW50MzIoaSwgbWluLCBtYXgpIHtcclxuICAgIGlmIChpICE9PSB+fmkgfHwgaSA8IG1pbiB8fCBpID4gbWF4KSB7XHJcbiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIGkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ2hlY2sgNSByb3VuZGluZyBkaWdpdHMgaWYgYHJlcGVhdGluZ2AgaXMgbnVsbCwgNCBvdGhlcndpc2UuXHJcbiAgICogYHJlcGVhdGluZyA9PSBudWxsYCBpZiBjYWxsZXIgaXMgYGxvZ2Agb3IgYHBvd2AsXHJcbiAgICogYHJlcGVhdGluZyAhPSBudWxsYCBpZiBjYWxsZXIgaXMgYG5hdHVyYWxMb2dhcml0aG1gIG9yIGBuYXR1cmFsRXhwb25lbnRpYWxgLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNoZWNrUm91bmRpbmdEaWdpdHMoZCwgaSwgcm0sIHJlcGVhdGluZykge1xyXG4gICAgdmFyIGRpLCBrLCByLCByZDtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgYXJyYXkgZC5cclxuICAgIGZvciAoayA9IGRbMF07IGsgPj0gMTA7IGsgLz0gMTApIC0taTtcclxuXHJcbiAgICAvLyBJcyB0aGUgcm91bmRpbmcgZGlnaXQgaW4gdGhlIGZpcnN0IHdvcmQgb2YgZD9cclxuICAgIGlmICgtLWkgPCAwKSB7XHJcbiAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgIGRpID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRpID0gTWF0aC5jZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcbiAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaSBpcyB0aGUgaW5kZXggKDAgLSA2KSBvZiB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAvLyBFLmcuIGlmIHdpdGhpbiB0aGUgd29yZCAzNDg3NTYzIHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdCBpcyA1LFxyXG4gICAgLy8gdGhlbiBpID0gNCwgayA9IDEwMDAsIHJkID0gMzQ4NzU2MyAlIDEwMDAgPSA1NjNcclxuICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpO1xyXG4gICAgcmQgPSBkW2RpXSAlIGsgfCAwO1xyXG5cclxuICAgIGlmIChyZXBlYXRpbmcgPT0gbnVsbCkge1xyXG4gICAgICBpZiAoaSA8IDMpIHtcclxuICAgICAgICBpZiAoaSA9PSAwKSByZCA9IHJkIC8gMTAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMCB8IDA7XHJcbiAgICAgICAgciA9IHJtIDwgNCAmJiByZCA9PSA5OTk5OSB8fCBybSA+IDMgJiYgcmQgPT0gNDk5OTkgfHwgcmQgPT0gNTAwMDAgfHwgcmQgPT0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gKHJtIDwgNCAmJiByZCArIDEgPT0gayB8fCBybSA+IDMgJiYgcmQgKyAxID09IGsgLyAyKSAmJlxyXG4gICAgICAgICAgKGRbZGkgKyAxXSAvIGsgLyAxMDAgfCAwKSA9PSBtYXRocG93KDEwLCBpIC0gMikgLSAxIHx8XHJcbiAgICAgICAgICAgIChyZCA9PSBrIC8gMiB8fCByZCA9PSAwKSAmJiAoZFtkaSArIDFdIC8gayAvIDEwMCB8IDApID09IDA7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpIDwgNCkge1xyXG4gICAgICAgIGlmIChpID09IDApIHJkID0gcmQgLyAxMDAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMDAgfCAwO1xyXG4gICAgICAgIGVsc2UgaWYgKGkgPT0gMikgcmQgPSByZCAvIDEwIHwgMDtcclxuICAgICAgICByID0gKHJlcGVhdGluZyB8fCBybSA8IDQpICYmIHJkID09IDk5OTkgfHwgIXJlcGVhdGluZyAmJiBybSA+IDMgJiYgcmQgPT0gNDk5OTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gKChyZXBlYXRpbmcgfHwgcm0gPCA0KSAmJiByZCArIDEgPT0gayB8fFxyXG4gICAgICAgICghcmVwZWF0aW5nICYmIHJtID4gMykgJiYgcmQgKyAxID09IGsgLyAyKSAmJlxyXG4gICAgICAgICAgKGRbZGkgKyAxXSAvIGsgLyAxMDAwIHwgMCkgPT0gbWF0aHBvdygxMCwgaSAtIDMpIC0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENvbnZlcnQgc3RyaW5nIG9mIGBiYXNlSW5gIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYGJhc2VPdXRgLlxyXG4gIC8vIEVnLiBjb252ZXJ0QmFzZSgnMjU1JywgMTAsIDE2KSByZXR1cm5zIFsxNSwgMTVdLlxyXG4gIC8vIEVnLiBjb252ZXJ0QmFzZSgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gIGZ1bmN0aW9uIGNvbnZlcnRCYXNlKHN0ciwgYmFzZUluLCBiYXNlT3V0KSB7XHJcbiAgICB2YXIgaixcclxuICAgICAgYXJyID0gWzBdLFxyXG4gICAgICBhcnJMLFxyXG4gICAgICBpID0gMCxcclxuICAgICAgc3RyTCA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgZm9yICg7IGkgPCBzdHJMOykge1xyXG4gICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07KSBhcnJbYXJyTF0gKj0gYmFzZUluO1xyXG4gICAgICBhcnJbMF0gKz0gTlVNRVJBTFMuaW5kZXhPZihzdHIuY2hhckF0KGkrKykpO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PT0gdm9pZCAwKSBhcnJbaiArIDFdID0gMDtcclxuICAgICAgICAgIGFycltqICsgMV0gKz0gYXJyW2pdIC8gYmFzZU91dCB8IDA7XHJcbiAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyLnJldmVyc2UoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIGNvcyh4KSA9IDEgLSB4XjIvMiEgKyB4XjQvNCEgLSAuLi5cclxuICAgKiB8eHwgPCBwaS8yXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3NpbmUoQ3RvciwgeCkge1xyXG4gICAgdmFyIGssIHksXHJcbiAgICAgIGxlbiA9IHguZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gQXJndW1lbnQgcmVkdWN0aW9uOiBjb3MoNHgpID0gOCooY29zXjQoeCkgLSBjb3NeMih4KSkgKyAxXHJcbiAgICAvLyBpLmUuIGNvcyh4KSA9IDgqKGNvc140KHgvNCkgLSBjb3NeMih4LzQpKSArIDFcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICBpZiAobGVuIDwgMzIpIHtcclxuICAgICAgayA9IE1hdGguY2VpbChsZW4gLyAzKTtcclxuICAgICAgeSA9ICgxIC8gdGlueVBvdyg0LCBrKSkudG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGsgPSAxNjtcclxuICAgICAgeSA9ICcyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwJztcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiArPSBrO1xyXG5cclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMSwgeC50aW1lcyh5KSwgbmV3IEN0b3IoMSkpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICBmb3IgKHZhciBpID0gazsgaS0tOykge1xyXG4gICAgICB2YXIgY29zMnggPSB4LnRpbWVzKHgpO1xyXG4gICAgICB4ID0gY29zMngudGltZXMoY29zMngpLm1pbnVzKGNvczJ4KS50aW1lcyg4KS5wbHVzKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uIC09IGs7XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBQZXJmb3JtIGRpdmlzaW9uIGluIHRoZSBzcGVjaWZpZWQgYmFzZS5cclxuICAgKi9cclxuICB2YXIgZGl2aWRlID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAvLyBBc3N1bWVzIG5vbi16ZXJvIHggYW5kIGssIGFuZCBoZW5jZSBub24temVybyByZXN1bHQuXHJcbiAgICBmdW5jdGlvbiBtdWx0aXBseUludGVnZXIoeCwgaywgYmFzZSkge1xyXG4gICAgICB2YXIgdGVtcCxcclxuICAgICAgICBjYXJyeSA9IDAsXHJcbiAgICAgICAgaSA9IHgubGVuZ3RoO1xyXG5cclxuICAgICAgZm9yICh4ID0geC5zbGljZSgpOyBpLS07KSB7XHJcbiAgICAgICAgdGVtcCA9IHhbaV0gKiBrICsgY2Fycnk7XHJcbiAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlIHwgMDtcclxuICAgICAgICBjYXJyeSA9IHRlbXAgLyBiYXNlIHwgMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNhcnJ5KSB4LnVuc2hpZnQoY2FycnkpO1xyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGFyZShhLCBiLCBhTCwgYkwpIHtcclxuICAgICAgdmFyIGksIHI7XHJcblxyXG4gICAgICBpZiAoYUwgIT0gYkwpIHtcclxuICAgICAgICByID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGkgPSByID0gMDsgaSA8IGFMOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgciA9IGFbaV0gPiBiW2ldID8gMSA6IC0xO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLlxyXG4gICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICBhW2FMXSAtPSBpO1xyXG4gICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7XHJcbiAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOykgYS5zaGlmdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAoeCwgeSwgcHIsIHJtLCBkcCwgYmFzZSkge1xyXG4gICAgICB2YXIgY21wLCBlLCBpLCBrLCBsb2dCYXNlLCBtb3JlLCBwcm9kLCBwcm9kTCwgcSwgcWQsIHJlbSwgcmVtTCwgcmVtMCwgc2QsIHQsIHhpLCB4TCwgeWQwLFxyXG4gICAgICAgIHlMLCB5eixcclxuICAgICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgICBzaWduID0geC5zID09IHkucyA/IDEgOiAtMSxcclxuICAgICAgICB4ZCA9IHguZCxcclxuICAgICAgICB5ZCA9IHkuZDtcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4sIEluZmluaXR5IG9yIDA/XHJcbiAgICAgIGlmICgheGQgfHwgIXhkWzBdIHx8ICF5ZCB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBDdG9yKC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgIXgucyB8fCAheS5zIHx8ICh4ZCA/IHlkICYmIHhkWzBdID09IHlkWzBdIDogIXlkKSA/IE5hTiA6XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIDAgb3IgeSBpcyDCsUluZmluaXR5LCBvciByZXR1cm4gwrFJbmZpbml0eSBhcyB5IGlzIDAuXHJcbiAgICAgICAgICB4ZCAmJiB4ZFswXSA9PSAwIHx8ICF5ZCA/IHNpZ24gKiAwIDogc2lnbiAvIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYmFzZSkge1xyXG4gICAgICAgIGxvZ0Jhc2UgPSAxO1xyXG4gICAgICAgIGUgPSB4LmUgLSB5LmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgICAgbG9nQmFzZSA9IExPR19CQVNFO1xyXG4gICAgICAgIGUgPSBtYXRoZmxvb3IoeC5lIC8gbG9nQmFzZSkgLSBtYXRoZmxvb3IoeS5lIC8gbG9nQmFzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHlMID0geWQubGVuZ3RoO1xyXG4gICAgICB4TCA9IHhkLmxlbmd0aDtcclxuICAgICAgcSA9IG5ldyBDdG9yKHNpZ24pO1xyXG4gICAgICBxZCA9IHEuZCA9IFtdO1xyXG5cclxuICAgICAgLy8gUmVzdWx0IGV4cG9uZW50IG1heSBiZSBvbmUgbGVzcyB0aGFuIGUuXHJcbiAgICAgIC8vIFRoZSBkaWdpdCBhcnJheSBvZiBhIERlY2ltYWwgZnJvbSB0b1N0cmluZ0JpbmFyeSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChpID0gMDsgeWRbaV0gPT0gKHhkW2ldIHx8IDApOyBpKyspO1xyXG5cclxuICAgICAgaWYgKHlkW2ldID4gKHhkW2ldIHx8IDApKSBlLS07XHJcblxyXG4gICAgICBpZiAocHIgPT0gbnVsbCkge1xyXG4gICAgICAgIHNkID0gcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZHApIHtcclxuICAgICAgICBzZCA9IHByICsgKHguZSAtIHkuZSkgKyAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNkID0gcHI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzZCA8IDApIHtcclxuICAgICAgICBxZC5wdXNoKDEpO1xyXG4gICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHByZWNpc2lvbiBpbiBudW1iZXIgb2YgYmFzZSAxMCBkaWdpdHMgdG8gYmFzZSAxZTcgZGlnaXRzLlxyXG4gICAgICAgIHNkID0gc2QgLyBsb2dCYXNlICsgMiB8IDA7XHJcbiAgICAgICAgaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIGRpdmlzb3IgPCAxZTdcclxuICAgICAgICBpZiAoeUwgPT0gMSkge1xyXG4gICAgICAgICAgayA9IDA7XHJcbiAgICAgICAgICB5ZCA9IHlkWzBdO1xyXG4gICAgICAgICAgc2QrKztcclxuXHJcbiAgICAgICAgICAvLyBrIGlzIHRoZSBjYXJyeS5cclxuICAgICAgICAgIGZvciAoOyAoaSA8IHhMIHx8IGspICYmIHNkLS07IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gayAqIGJhc2UgKyAoeGRbaV0gfHwgMCk7XHJcbiAgICAgICAgICAgIHFkW2ldID0gdCAvIHlkIHwgMDtcclxuICAgICAgICAgICAgayA9IHQgJSB5ZCB8IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbW9yZSA9IGsgfHwgaSA8IHhMO1xyXG5cclxuICAgICAgICAvLyBkaXZpc29yID49IDFlN1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gTm9ybWFsaXNlIHhkIGFuZCB5ZCBzbyBoaWdoZXN0IG9yZGVyIGRpZ2l0IG9mIHlkIGlzID49IGJhc2UvMlxyXG4gICAgICAgICAgayA9IGJhc2UgLyAoeWRbMF0gKyAxKSB8IDA7XHJcblxyXG4gICAgICAgICAgaWYgKGsgPiAxKSB7XHJcbiAgICAgICAgICAgIHlkID0gbXVsdGlwbHlJbnRlZ2VyKHlkLCBrLCBiYXNlKTtcclxuICAgICAgICAgICAgeGQgPSBtdWx0aXBseUludGVnZXIoeGQsIGssIGJhc2UpO1xyXG4gICAgICAgICAgICB5TCA9IHlkLmxlbmd0aDtcclxuICAgICAgICAgICAgeEwgPSB4ZC5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeGkgPSB5TDtcclxuICAgICAgICAgIHJlbSA9IHhkLnNsaWNlKDAsIHlMKTtcclxuICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuXHJcbiAgICAgICAgICBmb3IgKDsgcmVtTCA8IHlMOykgcmVtW3JlbUwrK10gPSAwO1xyXG5cclxuICAgICAgICAgIHl6ID0geWQuc2xpY2UoKTtcclxuICAgICAgICAgIHl6LnVuc2hpZnQoMCk7XHJcbiAgICAgICAgICB5ZDAgPSB5ZFswXTtcclxuXHJcbiAgICAgICAgICBpZiAoeWRbMV0gPj0gYmFzZSAvIDIpICsreWQwO1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgayA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgY21wID0gY29tcGFyZSh5ZCwgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wIDwgMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIGsuXHJcbiAgICAgICAgICAgICAgcmVtMCA9IHJlbVswXTtcclxuICAgICAgICAgICAgICBpZiAoeUwgIT0gcmVtTCkgcmVtMCA9IHJlbTAgKiBiYXNlICsgKHJlbVsxXSB8fCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gayB3aWxsIGJlIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgayA9IHJlbTAgLyB5ZDAgfCAwO1xyXG5cclxuICAgICAgICAgICAgICAvLyAgQWxnb3JpdGhtOlxyXG4gICAgICAgICAgICAgIC8vICAxLiBwcm9kdWN0ID0gZGl2aXNvciAqIHRyaWFsIGRpZ2l0IChrKVxyXG4gICAgICAgICAgICAgIC8vICAyLiBpZiBwcm9kdWN0ID4gcmVtYWluZGVyOiBwcm9kdWN0IC09IGRpdmlzb3IsIGstLVxyXG4gICAgICAgICAgICAgIC8vICAzLiByZW1haW5kZXIgLT0gcHJvZHVjdFxyXG4gICAgICAgICAgICAgIC8vICA0LiBpZiBwcm9kdWN0IHdhcyA8IHJlbWFpbmRlciBhdCAyOlxyXG4gICAgICAgICAgICAgIC8vICAgIDUuIGNvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvclxyXG4gICAgICAgICAgICAgIC8vICAgIDYuIElmIHJlbWFpbmRlciA+IGRpdmlzb3I6IHJlbWFpbmRlciAtPSBkaXZpc29yLCBrKytcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGsgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoayA+PSBiYXNlKSBrID0gYmFzZSAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHByb2QgPSBtdWx0aXBseUludGVnZXIoeWQsIGssIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgY21wID0gY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID4gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGstLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChwcm9kLCB5TCA8IHByb2RMID8geXogOiB5ZCwgcHJvZEwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY21wIGlzIC0xLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgayBpcyAwLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbXBhcmUgeWQgYW5kIHJlbSBhZ2FpbiBiZWxvdywgc28gY2hhbmdlIGNtcCB0byAxXHJcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBpdC4gSWYgayBpcyAxIHRoZXJlIGlzIGEgbmVlZCB0byBjb21wYXJlIHlkIGFuZCByZW0gYWdhaW4gYmVsb3cuXHJcbiAgICAgICAgICAgICAgICBpZiAoayA9PSAwKSBjbXAgPSBrID0gMTtcclxuICAgICAgICAgICAgICAgIHByb2QgPSB5ZC5zbGljZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kLnVuc2hpZnQoMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCBwcm9kLCByZW1MLCBiYXNlKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCBwcmV2aW91cyByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCBuZXcgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgY21wID0gY29tcGFyZSh5ZCwgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IG5ldyByZW1haW5kZXIsIHN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICBpZiAoY21wIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICBrKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHlMIDwgcmVtTCA/IHl6IDogeWQsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgaysrO1xyXG4gICAgICAgICAgICAgIHJlbSA9IFswXTtcclxuICAgICAgICAgICAgfSAgICAvLyBpZiBjbXAgPT09IDEsIGsgd2lsbCBiZSAwXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5leHQgZGlnaXQsIGssIHRvIHRoZSByZXN1bHQgYXJyYXkuXHJcbiAgICAgICAgICAgIHFkW2krK10gPSBrO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChjbXAgJiYgcmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4ZFt4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGRbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gd2hpbGUgKCh4aSsrIDwgeEwgfHwgcmVtWzBdICE9PSB2b2lkIDApICYmIHNkLS0pO1xyXG5cclxuICAgICAgICAgIG1vcmUgPSByZW1bMF0gIT09IHZvaWQgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExlYWRpbmcgemVybz9cclxuICAgICAgICBpZiAoIXFkWzBdKSBxZC5zaGlmdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBsb2dCYXNlIGlzIDEgd2hlbiBkaXZpZGUgaXMgYmVpbmcgdXNlZCBmb3IgYmFzZSBjb252ZXJzaW9uLlxyXG4gICAgICBpZiAobG9nQmFzZSA9PSAxKSB7XHJcbiAgICAgICAgcS5lID0gZTtcclxuICAgICAgICBpbmV4YWN0ID0gbW9yZTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFkWzBdLlxyXG4gICAgICAgIGZvciAoaSA9IDEsIGsgPSBxZFswXTsgayA+PSAxMDsgayAvPSAxMCkgaSsrO1xyXG4gICAgICAgIHEuZSA9IGkgKyBlICogbG9nQmFzZSAtIDE7XHJcblxyXG4gICAgICAgIGZpbmFsaXNlKHEsIGRwID8gcHIgKyBxLmUgKyAxIDogcHIsIHJtLCBtb3JlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHE7XHJcbiAgICB9O1xyXG4gIH0pKCk7XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJvdW5kIGB4YCB0byBgc2RgIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICogQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgKi9cclxuICAgZnVuY3Rpb24gZmluYWxpc2UoeCwgc2QsIHJtLCBpc1RydW5jYXRlZCkge1xyXG4gICAgdmFyIGRpZ2l0cywgaSwgaiwgaywgcmQsIHJvdW5kVXAsIHcsIHhkLCB4ZGksXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIERvbid0IHJvdW5kIGlmIHNkIGlzIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgb3V0OiBpZiAoc2QgIT0gbnVsbCkge1xyXG4gICAgICB4ZCA9IHguZDtcclxuXHJcbiAgICAgIC8vIEluZmluaXR5L05hTi5cclxuICAgICAgaWYgKCF4ZCkgcmV0dXJuIHg7XHJcblxyXG4gICAgICAvLyByZDogdGhlIHJvdW5kaW5nIGRpZ2l0LCBpLmUuIHRoZSBkaWdpdCBhZnRlciB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgLy8gdzogdGhlIHdvcmQgb2YgeGQgY29udGFpbmluZyByZCwgYSBiYXNlIDFlNyBudW1iZXIuXHJcbiAgICAgIC8vIHhkaTogdGhlIGluZGV4IG9mIHcgd2l0aGluIHhkLlxyXG4gICAgICAvLyBkaWdpdHM6IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuXHJcbiAgICAgIC8vIGk6IHdoYXQgd291bGQgYmUgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiB3IGlmIGFsbCB0aGUgbnVtYmVycyB3ZXJlIDcgZGlnaXRzIGxvbmcgKGkuZS4gaWZcclxuICAgICAgLy8gdGhleSBoYWQgbGVhZGluZyB6ZXJvcylcclxuICAgICAgLy8gajogaWYgPiAwLCB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiB3IChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuXHJcbiAgICAgIC8vIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkgeGQuXHJcbiAgICAgIGZvciAoZGlnaXRzID0gMSwgayA9IHhkWzBdOyBrID49IDEwOyBrIC89IDEwKSBkaWdpdHMrKztcclxuICAgICAgaSA9IHNkIC0gZGlnaXRzO1xyXG5cclxuICAgICAgLy8gSXMgdGhlIHJvdW5kaW5nIGRpZ2l0IGluIHRoZSBmaXJzdCB3b3JkIG9mIHhkP1xyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBpICs9IExPR19CQVNFO1xyXG4gICAgICAgIGogPSBzZDtcclxuICAgICAgICB3ID0geGRbeGRpID0gMF07XHJcblxyXG4gICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3LlxyXG4gICAgICAgIHJkID0gdyAvIG1hdGhwb3coMTAsIGRpZ2l0cyAtIGogLSAxKSAlIDEwIHwgMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ZGkgPSBNYXRoLmNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTtcclxuICAgICAgICBrID0geGQubGVuZ3RoO1xyXG4gICAgICAgIGlmICh4ZGkgPj0gaykge1xyXG4gICAgICAgICAgaWYgKGlzVHJ1bmNhdGVkKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBOZWVkZWQgYnkgYG5hdHVyYWxFeHBvbmVudGlhbGAsIGBuYXR1cmFsTG9nYXJpdGhtYCBhbmQgYHNxdWFyZVJvb3RgLlxyXG4gICAgICAgICAgICBmb3IgKDsgaysrIDw9IHhkaTspIHhkLnB1c2goMCk7XHJcbiAgICAgICAgICAgIHcgPSByZCA9IDA7XHJcbiAgICAgICAgICAgIGRpZ2l0cyA9IDE7XHJcbiAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyAxO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3ID0gayA9IHhkW3hkaV07XHJcblxyXG4gICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuXHJcbiAgICAgICAgICBmb3IgKGRpZ2l0cyA9IDE7IGsgPj0gMTA7IGsgLz0gMTApIGRpZ2l0cysrO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIHcuXHJcbiAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIHcsIGFkanVzdGVkIGZvciBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcgaXMgZ2l2ZW4gYnkgTE9HX0JBU0UgLSBkaWdpdHMuXHJcbiAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgZGlnaXRzO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3LlxyXG4gICAgICAgICAgcmQgPSBqIDwgMCA/IDAgOiB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaiAtIDEpICUgMTAgfCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQXJlIHRoZXJlIGFueSBub24temVybyBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0P1xyXG4gICAgICBpc1RydW5jYXRlZCA9IGlzVHJ1bmNhdGVkIHx8IHNkIDwgMCB8fFxyXG4gICAgICAgIHhkW3hkaSArIDFdICE9PSB2b2lkIDAgfHwgKGogPCAwID8gdyA6IHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSkpO1xyXG5cclxuICAgICAgLy8gVGhlIGV4cHJlc3Npb24gYHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSlgIHJldHVybnMgYWxsIHRoZSBkaWdpdHMgb2YgdyB0byB0aGUgcmlnaHRcclxuICAgICAgLy8gb2YgdGhlIGRpZ2l0IGF0IChsZWZ0LXRvLXJpZ2h0KSBpbmRleCBqLCBlLmcuIGlmIHcgaXMgOTA4NzE0IGFuZCBqIGlzIDIsIHRoZSBleHByZXNzaW9uXHJcbiAgICAgIC8vIHdpbGwgZ2l2ZSA3MTQuXHJcblxyXG4gICAgICByb3VuZFVwID0gcm0gPCA0XHJcbiAgICAgICAgPyAocmQgfHwgaXNUcnVuY2F0ZWQpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgaXNUcnVuY2F0ZWQgfHwgcm0gPT0gNiAmJlxyXG5cclxuICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBvZGQuXHJcbiAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaikgOiAwIDogeGRbeGRpIC0gMV0pICUgMTApICYgMSB8fFxyXG4gICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICBpZiAoc2QgPCAxIHx8ICF4ZFswXSkge1xyXG4gICAgICAgIHhkLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgaWYgKHJvdW5kVXApIHtcclxuXHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHNkIHRvIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgc2QgLT0geC5lICsgMTtcclxuXHJcbiAgICAgICAgICAvLyAxLCAwLjEsIDAuMDEsIDAuMDAxLCAwLjAwMDEgZXRjLlxyXG4gICAgICAgICAgeGRbMF0gPSBtYXRocG93KDEwLCAoTE9HX0JBU0UgLSBzZCAlIExPR19CQVNFKSAlIExPR19CQVNFKTtcclxuICAgICAgICAgIHguZSA9IC1zZCB8fCAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHhkWzBdID0geC5lID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgZXhjZXNzIGRpZ2l0cy5cclxuICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgIHhkLmxlbmd0aCA9IHhkaTtcclxuICAgICAgICBrID0gMTtcclxuICAgICAgICB4ZGktLTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ZC5sZW5ndGggPSB4ZGkgKyAxO1xyXG4gICAgICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpO1xyXG5cclxuICAgICAgICAvLyBFLmcuIDU2NzAwIGJlY29tZXMgNTYwMDAgaWYgNyBpcyB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgLy8gaiA+IDAgbWVhbnMgaSA+IG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcuXHJcbiAgICAgICAgeGRbeGRpXSA9IGogPiAwID8gKHcgLyBtYXRocG93KDEwLCBkaWdpdHMgLSBqKSAlIG1hdGhwb3coMTAsIGopIHwgMCkgKiBrIDogMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJvdW5kVXApIHtcclxuICAgICAgICBmb3IgKDs7KSB7XHJcblxyXG4gICAgICAgICAgLy8gSXMgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaW4gdGhlIGZpcnN0IHdvcmQgb2YgeGQ/XHJcbiAgICAgICAgICBpZiAoeGRpID09IDApIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhkWzBdIGJlZm9yZSBrIGlzIGFkZGVkLlxyXG4gICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0geGRbMF07IGogPj0gMTA7IGogLz0gMTApIGkrKztcclxuICAgICAgICAgICAgaiA9IHhkWzBdICs9IGs7XHJcbiAgICAgICAgICAgIGZvciAoayA9IDE7IGogPj0gMTA7IGogLz0gMTApIGsrKztcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGkgIT0gayB0aGUgbGVuZ3RoIGhhcyBpbmNyZWFzZWQuXHJcbiAgICAgICAgICAgIGlmIChpICE9IGspIHtcclxuICAgICAgICAgICAgICB4LmUrKztcclxuICAgICAgICAgICAgICBpZiAoeGRbMF0gPT0gQkFTRSkgeGRbMF0gPSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHhkW3hkaV0gKz0gaztcclxuICAgICAgICAgICAgaWYgKHhkW3hkaV0gIT0gQkFTRSkgYnJlYWs7XHJcbiAgICAgICAgICAgIHhkW3hkaS0tXSA9IDA7XHJcbiAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSB4ZC5sZW5ndGg7IHhkWy0taV0gPT09IDA7KSB4ZC5wb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXh0ZXJuYWwpIHtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoeC5lID4gQ3Rvci5tYXhFKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgICAgeC5lID0gTmFOO1xyXG5cclxuICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICB9IGVsc2UgaWYgKHguZSA8IEN0b3IubWluRSkge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgeC5kID0gWzBdO1xyXG4gICAgICAgIC8vIEN0b3IudW5kZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgfSAvLyBlbHNlIEN0b3IudW5kZXJmbG93ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gZmluaXRlVG9TdHJpbmcoeCwgaXNFeHAsIHNkKSB7XHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSkgcmV0dXJuIG5vbkZpbml0ZVRvU3RyaW5nKHgpO1xyXG4gICAgdmFyIGssXHJcbiAgICAgIGUgPSB4LmUsXHJcbiAgICAgIHN0ciA9IGRpZ2l0c1RvU3RyaW5nKHguZCksXHJcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGlzRXhwKSB7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHtcclxuICAgICAgICBzdHIgPSBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpICsgZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgICAgfSBlbHNlIGlmIChsZW4gPiAxKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0gc3RyICsgKHguZSA8IDAgPyAnZScgOiAnZSsnKSArIHguZTtcclxuICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuICAgICAgc3RyID0gJzAuJyArIGdldFplcm9TdHJpbmcoLWUgLSAxKSArIHN0cjtcclxuICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBsZW4pID4gMCkgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICB9IGVsc2UgaWYgKGUgPj0gbGVuKSB7XHJcbiAgICAgIHN0ciArPSBnZXRaZXJvU3RyaW5nKGUgKyAxIC0gbGVuKTtcclxuICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBlIC0gMSkgPiAwKSBzdHIgPSBzdHIgKyAnLicgKyBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKChrID0gZSArIDEpIDwgbGVuKSBzdHIgPSBzdHIuc2xpY2UoMCwgaykgKyAnLicgKyBzdHIuc2xpY2Uoayk7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHtcclxuICAgICAgICBpZiAoZSArIDEgPT09IGxlbikgc3RyICs9ICcuJztcclxuICAgICAgICBzdHIgKz0gZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50IGZyb20gdGhlIGJhc2UgMWU3IGV4cG9uZW50LlxyXG4gIGZ1bmN0aW9uIGdldEJhc2UxMEV4cG9uZW50KGRpZ2l0cywgZSkge1xyXG4gICAgdmFyIHcgPSBkaWdpdHNbMF07XHJcblxyXG4gICAgLy8gQWRkIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuXHJcbiAgICBmb3IgKCBlICo9IExPR19CQVNFOyB3ID49IDEwOyB3IC89IDEwKSBlKys7XHJcbiAgICByZXR1cm4gZTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRMbjEwKEN0b3IsIHNkLCBwcikge1xyXG4gICAgaWYgKHNkID4gTE4xMF9QUkVDSVNJT04pIHtcclxuXHJcbiAgICAgIC8vIFJlc2V0IGdsb2JhbCBzdGF0ZSBpbiBjYXNlIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LlxyXG4gICAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICAgIGlmIChwcikgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgICAgdGhyb3cgRXJyb3IocHJlY2lzaW9uTGltaXRFeGNlZWRlZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoTE4xMCksIHNkLCAxLCB0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRQaShDdG9yLCBzZCwgcm0pIHtcclxuICAgIGlmIChzZCA+IFBJX1BSRUNJU0lPTikgdGhyb3cgRXJyb3IocHJlY2lzaW9uTGltaXRFeGNlZWRlZCk7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoUEkpLCBzZCwgcm0sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdldFByZWNpc2lvbihkaWdpdHMpIHtcclxuICAgIHZhciB3ID0gZGlnaXRzLmxlbmd0aCAtIDEsXHJcbiAgICAgIGxlbiA9IHcgKiBMT0dfQkFTRSArIDE7XHJcblxyXG4gICAgdyA9IGRpZ2l0c1t3XTtcclxuXHJcbiAgICAvLyBJZiBub24temVyby4uLlxyXG4gICAgaWYgKHcpIHtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3Qgd29yZC5cclxuICAgICAgZm9yICg7IHcgJSAxMCA9PSAwOyB3IC89IDEwKSBsZW4tLTtcclxuXHJcbiAgICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3Qgd29yZC5cclxuICAgICAgZm9yICh3ID0gZGlnaXRzWzBdOyB3ID49IDEwOyB3IC89IDEwKSBsZW4rKztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGVuO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdldFplcm9TdHJpbmcoaykge1xyXG4gICAgdmFyIHpzID0gJyc7XHJcbiAgICBmb3IgKDsgay0tOykgenMgKz0gJzAnO1xyXG4gICAgcmV0dXJuIHpzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIERlY2ltYWwgYHhgIHRvIHRoZSBwb3dlciBgbmAsIHdoZXJlIGBuYCBpcyBhblxyXG4gICAqIGludGVnZXIgb2YgdHlwZSBudW1iZXIuXHJcbiAgICpcclxuICAgKiBJbXBsZW1lbnRzICdleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZycuIENhbGxlZCBieSBgcG93YCBhbmQgYHBhcnNlT3RoZXJgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaW50UG93KEN0b3IsIHgsIG4sIHByKSB7XHJcbiAgICB2YXIgaXNUcnVuY2F0ZWQsXHJcbiAgICAgIHIgPSBuZXcgQ3RvcigxKSxcclxuXHJcbiAgICAgIC8vIE1heCBuIG9mIDkwMDcxOTkyNTQ3NDA5OTEgdGFrZXMgNTMgbG9vcCBpdGVyYXRpb25zLlxyXG4gICAgICAvLyBNYXhpbXVtIGRpZ2l0cyBhcnJheSBsZW5ndGg7IGxlYXZlcyBbMjgsIDM0XSBndWFyZCBkaWdpdHMuXHJcbiAgICAgIGsgPSBNYXRoLmNlaWwocHIgLyBMT0dfQkFTRSArIDQpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICBpZiAobiAlIDIpIHtcclxuICAgICAgICByID0gci50aW1lcyh4KTtcclxuICAgICAgICBpZiAodHJ1bmNhdGUoci5kLCBrKSkgaXNUcnVuY2F0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuID0gbWF0aGZsb29yKG4gLyAyKTtcclxuICAgICAgaWYgKG4gPT09IDApIHtcclxuXHJcbiAgICAgICAgLy8gVG8gZW5zdXJlIGNvcnJlY3Qgcm91bmRpbmcgd2hlbiByLmQgaXMgdHJ1bmNhdGVkLCBpbmNyZW1lbnQgdGhlIGxhc3Qgd29yZCBpZiBpdCBpcyB6ZXJvLlxyXG4gICAgICAgIG4gPSByLmQubGVuZ3RoIC0gMTtcclxuICAgICAgICBpZiAoaXNUcnVuY2F0ZWQgJiYgci5kW25dID09PSAwKSArK3IuZFtuXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgeCA9IHgudGltZXMoeCk7XHJcbiAgICAgIHRydW5jYXRlKHguZCwgayk7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGlzT2RkKG4pIHtcclxuICAgIHJldHVybiBuLmRbbi5kLmxlbmd0aCAtIDFdICYgMTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIEhhbmRsZSBgbWF4YCBhbmQgYG1pbmAuIGBsdGd0YCBpcyAnbHQnIG9yICdndCcuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbWF4T3JNaW4oQ3RvciwgYXJncywgbHRndCkge1xyXG4gICAgdmFyIHksXHJcbiAgICAgIHggPSBuZXcgQ3RvcihhcmdzWzBdKSxcclxuICAgICAgaSA9IDA7XHJcblxyXG4gICAgZm9yICg7ICsraSA8IGFyZ3MubGVuZ3RoOykge1xyXG4gICAgICB5ID0gbmV3IEN0b3IoYXJnc1tpXSk7XHJcbiAgICAgIGlmICgheS5zKSB7XHJcbiAgICAgICAgeCA9IHk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSBpZiAoeFtsdGd0XSh5KSkge1xyXG4gICAgICAgIHggPSB5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBleHBvbmVudGlhbCBvZiBgeGAgcm91bmRlZCB0byBgc2RgIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzLlxyXG4gICAqXHJcbiAgICogVGF5bG9yL01hY2xhdXJpbiBzZXJpZXMuXHJcbiAgICpcclxuICAgKiBleHAoeCkgPSB4XjAvMCEgKyB4XjEvMSEgKyB4XjIvMiEgKyB4XjMvMyEgKyAuLi5cclxuICAgKlxyXG4gICAqIEFyZ3VtZW50IHJlZHVjdGlvbjpcclxuICAgKiAgIFJlcGVhdCB4ID0geCAvIDMyLCBrICs9IDUsIHVudGlsIHx4fCA8IDAuMVxyXG4gICAqICAgZXhwKHgpID0gZXhwKHggLyAyXmspXigyXmspXHJcbiAgICpcclxuICAgKiBQcmV2aW91c2x5LCB0aGUgYXJndW1lbnQgd2FzIGluaXRpYWxseSByZWR1Y2VkIGJ5XHJcbiAgICogZXhwKHgpID0gZXhwKHIpICogMTBeayAgd2hlcmUgciA9IHggLSBrICogbG4xMCwgayA9IGZsb29yKHggLyBsbjEwKVxyXG4gICAqIHRvIGZpcnN0IHB1dCByIGluIHRoZSByYW5nZSBbMCwgbG4xMF0sIGJlZm9yZSBkaXZpZGluZyBieSAzMiB1bnRpbCB8eHwgPCAwLjEsIGJ1dCB0aGlzIHdhc1xyXG4gICAqIGZvdW5kIHRvIGJlIHNsb3dlciB0aGFuIGp1c3QgZGl2aWRpbmcgcmVwZWF0ZWRseSBieSAzMiBhcyBhYm92ZS5cclxuICAgKlxyXG4gICAqIE1heCBpbnRlZ2VyIGFyZ3VtZW50OiBleHAoJzIwNzIzMjY1ODM2OTQ2NDEzJykgPSA2LjNlKzkwMDAwMDAwMDAwMDAwMDBcclxuICAgKiBNaW4gaW50ZWdlciBhcmd1bWVudDogZXhwKCctMjA3MjMyNjU4MzY5NDY0MTEnKSA9IDEuMmUtOTAwMDAwMDAwMDAwMDAwMFxyXG4gICAqIChNYXRoIG9iamVjdCBpbnRlZ2VyIG1pbi9tYXg6IE1hdGguZXhwKDcwOSkgPSA4LjJlKzMwNywgTWF0aC5leHAoLTc0NSkgPSA1ZS0zMjQpXHJcbiAgICpcclxuICAgKiAgZXhwKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqICBleHAoLUluZmluaXR5KSA9IDBcclxuICAgKiAgZXhwKE5hTikgICAgICAgPSBOYU5cclxuICAgKiAgZXhwKMKxMCkgICAgICAgID0gMVxyXG4gICAqXHJcbiAgICogIGV4cCh4KSBpcyBub24tdGVybWluYXRpbmcgZm9yIGFueSBmaW5pdGUsIG5vbi16ZXJvIHguXHJcbiAgICpcclxuICAgKiAgVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0bHkgcm91bmRlZC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG5hdHVyYWxFeHBvbmVudGlhbCh4LCBzZCkge1xyXG4gICAgdmFyIGRlbm9taW5hdG9yLCBndWFyZCwgaiwgcG93LCBzdW0sIHQsIHdwcixcclxuICAgICAgcmVwID0gMCxcclxuICAgICAgaSA9IDAsXHJcbiAgICAgIGsgPSAwLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG5cclxuICAgIC8vIDAvTmFOL0luZmluaXR5P1xyXG4gICAgaWYgKCF4LmQgfHwgIXguZFswXSB8fCB4LmUgPiAxNykge1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKHguZFxyXG4gICAgICAgID8gIXguZFswXSA/IDEgOiB4LnMgPCAwID8gMCA6IDEgLyAwXHJcbiAgICAgICAgOiB4LnMgPyB4LnMgPCAwID8gMCA6IHggOiAwIC8gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgd3ByID0gcHI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3cHIgPSBzZDtcclxuICAgIH1cclxuXHJcbiAgICB0ID0gbmV3IEN0b3IoMC4wMzEyNSk7XHJcblxyXG4gICAgLy8gd2hpbGUgYWJzKHgpID49IDAuMVxyXG4gICAgd2hpbGUgKHguZSA+IC0yKSB7XHJcblxyXG4gICAgICAvLyB4ID0geCAvIDJeNVxyXG4gICAgICB4ID0geC50aW1lcyh0KTtcclxuICAgICAgayArPSA1O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVzZSAyICogbG9nMTAoMl5rKSArIDUgKGVtcGlyaWNhbGx5IGRlcml2ZWQpIHRvIGVzdGltYXRlIHRoZSBpbmNyZWFzZSBpbiBwcmVjaXNpb25cclxuICAgIC8vIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpcnN0IDQgcm91bmRpbmcgZGlnaXRzIGFyZSBjb3JyZWN0LlxyXG4gICAgZ3VhcmQgPSBNYXRoLmxvZyhtYXRocG93KDIsIGspKSAvIE1hdGguTE4xMCAqIDIgKyA1IHwgMDtcclxuICAgIHdwciArPSBndWFyZDtcclxuICAgIGRlbm9taW5hdG9yID0gcG93ID0gc3VtID0gbmV3IEN0b3IoMSk7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwcjtcclxuXHJcbiAgICBmb3IgKDs7KSB7XHJcbiAgICAgIHBvdyA9IGZpbmFsaXNlKHBvdy50aW1lcyh4KSwgd3ByLCAxKTtcclxuICAgICAgZGVub21pbmF0b3IgPSBkZW5vbWluYXRvci50aW1lcygrK2kpO1xyXG4gICAgICB0ID0gc3VtLnBsdXMoZGl2aWRlKHBvdywgZGVub21pbmF0b3IsIHdwciwgMSkpO1xyXG5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgd3ByKSA9PT0gZGlnaXRzVG9TdHJpbmcoc3VtLmQpLnNsaWNlKDAsIHdwcikpIHtcclxuICAgICAgICBqID0gaztcclxuICAgICAgICB3aGlsZSAoai0tKSBzdW0gPSBmaW5hbGlzZShzdW0udGltZXMoc3VtKSwgd3ByLCAxKTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgWzQ5XTk5OS5cclxuICAgICAgICAvLyBJZiBzbywgcmVwZWF0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZVxyXG4gICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDE4LCByb3VuZGluZzogMVxyXG4gICAgICAgIC8vIGV4cCgxOC40MDQyNzI0NjI1OTUwMzQwODM1Njc3OTM5MTk4NDM3NjEpID0gOTgzNzI1NjAuMTIyOTk5OTk5OSAoc2hvdWxkIGJlIDk4MzcyNTYwLjEyMylcclxuICAgICAgICAvLyBgd3ByIC0gZ3VhcmRgIGlzIHRoZSBpbmRleCBvZiBmaXJzdCByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBpZiAoc2QgPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgIGlmIChyZXAgPCAzICYmIGNoZWNrUm91bmRpbmdEaWdpdHMoc3VtLmQsIHdwciAtIGd1YXJkLCBybSwgcmVwKSkge1xyXG4gICAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHdwciArPSAxMDtcclxuICAgICAgICAgICAgZGVub21pbmF0b3IgPSBwb3cgPSB0ID0gbmV3IEN0b3IoMSk7XHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgICByZXArKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGlzZShzdW0sIEN0b3IucHJlY2lzaW9uID0gcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN1bSA9IHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYHhgIHJvdW5kZWQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cy5cclxuICAgKlxyXG4gICAqICBsbigtbikgICAgICAgID0gTmFOXHJcbiAgICogIGxuKDApICAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiAgbG4oLTApICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICBsbigxKSAgICAgICAgID0gMFxyXG4gICAqICBsbihJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiAgbG4oLUluZmluaXR5KSA9IE5hTlxyXG4gICAqICBsbihOYU4pICAgICAgID0gTmFOXHJcbiAgICpcclxuICAgKiAgbG4obikgKG4gIT0gMSkgaXMgbm9uLXRlcm1pbmF0aW5nLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbmF0dXJhbExvZ2FyaXRobSh5LCBzZCkge1xyXG4gICAgdmFyIGMsIGMwLCBkZW5vbWluYXRvciwgZSwgbnVtZXJhdG9yLCByZXAsIHN1bSwgdCwgd3ByLCB4MSwgeDIsXHJcbiAgICAgIG4gPSAxLFxyXG4gICAgICBndWFyZCA9IDEwLFxyXG4gICAgICB4ID0geSxcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmcsXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcblxyXG4gICAgLy8gSXMgeCBuZWdhdGl2ZSBvciBJbmZpbml0eSwgTmFOLCAwIG9yIDE/XHJcbiAgICBpZiAoeC5zIDwgMCB8fCAheGQgfHwgIXhkWzBdIHx8ICF4LmUgJiYgeGRbMF0gPT0gMSAmJiB4ZC5sZW5ndGggPT0gMSkge1xyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoeGQgJiYgIXhkWzBdID8gLTEgLyAwIDogeC5zICE9IDEgPyBOYU4gOiB4ZCA/IDAgOiB4KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2QgPT0gbnVsbCkge1xyXG4gICAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG4gICAgICB3cHIgPSBwcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdwciA9IHNkO1xyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gd3ByICs9IGd1YXJkO1xyXG4gICAgYyA9IGRpZ2l0c1RvU3RyaW5nKHhkKTtcclxuICAgIGMwID0gYy5jaGFyQXQoMCk7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKGUgPSB4LmUpIDwgMS41ZTE1KSB7XHJcblxyXG4gICAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICAgIC8vIFRoZSBzZXJpZXMgY29udmVyZ2VzIGZhc3RlciB0aGUgY2xvc2VyIHRoZSBhcmd1bWVudCBpcyB0byAxLCBzbyB1c2luZ1xyXG4gICAgICAvLyBsbihhXmIpID0gYiAqIGxuKGEpLCAgIGxuKGEpID0gbG4oYV5iKSAvIGJcclxuICAgICAgLy8gbXVsdGlwbHkgdGhlIGFyZ3VtZW50IGJ5IGl0c2VsZiB1bnRpbCB0aGUgbGVhZGluZyBkaWdpdHMgb2YgdGhlIHNpZ25pZmljYW5kIGFyZSA3LCA4LCA5LFxyXG4gICAgICAvLyAxMCwgMTEsIDEyIG9yIDEzLCByZWNvcmRpbmcgdGhlIG51bWJlciBvZiBtdWx0aXBsaWNhdGlvbnMgc28gdGhlIHN1bSBvZiB0aGUgc2VyaWVzIGNhblxyXG4gICAgICAvLyBsYXRlciBiZSBkaXZpZGVkIGJ5IHRoaXMgbnVtYmVyLCB0aGVuIHNlcGFyYXRlIG91dCB0aGUgcG93ZXIgb2YgMTAgdXNpbmdcclxuICAgICAgLy8gbG4oYSoxMF5iKSA9IGxuKGEpICsgYipsbigxMCkuXHJcblxyXG4gICAgICAvLyBtYXggbiBpcyAyMSAoZ2l2ZXMgMC45LCAxLjAgb3IgMS4xKSAoOWUxNSAvIDIxID0gNC4yZTE0KS5cclxuICAgICAgLy93aGlsZSAoYzAgPCA5ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDEpIHtcclxuICAgICAgLy8gbWF4IG4gaXMgNiAoZ2l2ZXMgMC43IC0gMS4zKVxyXG4gICAgICB3aGlsZSAoYzAgPCA3ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDMpIHtcclxuICAgICAgICB4ID0geC50aW1lcyh5KTtcclxuICAgICAgICBjID0gZGlnaXRzVG9TdHJpbmcoeC5kKTtcclxuICAgICAgICBjMCA9IGMuY2hhckF0KDApO1xyXG4gICAgICAgIG4rKztcclxuICAgICAgfVxyXG5cclxuICAgICAgZSA9IHguZTtcclxuXHJcbiAgICAgIGlmIChjMCA+IDEpIHtcclxuICAgICAgICB4ID0gbmV3IEN0b3IoJzAuJyArIGMpO1xyXG4gICAgICAgIGUrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gbmV3IEN0b3IoYzAgKyAnLicgKyBjLnNsaWNlKDEpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIFRoZSBhcmd1bWVudCByZWR1Y3Rpb24gbWV0aG9kIGFib3ZlIG1heSByZXN1bHQgaW4gb3ZlcmZsb3cgaWYgdGhlIGFyZ3VtZW50IHkgaXMgYSBtYXNzaXZlXHJcbiAgICAgIC8vIG51bWJlciB3aXRoIGV4cG9uZW50ID49IDE1MDAwMDAwMDAwMDAwMDAgKDllMTUgLyA2ID0gMS41ZTE1KSwgc28gaW5zdGVhZCByZWNhbGwgdGhpc1xyXG4gICAgICAvLyBmdW5jdGlvbiB1c2luZyBsbih4KjEwXmUpID0gbG4oeCkgKyBlKmxuKDEwKS5cclxuICAgICAgdCA9IGdldExuMTAoQ3Rvciwgd3ByICsgMiwgcHIpLnRpbWVzKGUgKyAnJyk7XHJcbiAgICAgIHggPSBuYXR1cmFsTG9nYXJpdGhtKG5ldyBDdG9yKGMwICsgJy4nICsgYy5zbGljZSgxKSksIHdwciAtIGd1YXJkKS5wbHVzKHQpO1xyXG4gICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG5cclxuICAgICAgcmV0dXJuIHNkID09IG51bGwgPyBmaW5hbGlzZSh4LCBwciwgcm0sIGV4dGVybmFsID0gdHJ1ZSkgOiB4O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHgxIGlzIHggcmVkdWNlZCB0byBhIHZhbHVlIG5lYXIgMS5cclxuICAgIHgxID0geDtcclxuXHJcbiAgICAvLyBUYXlsb3Igc2VyaWVzLlxyXG4gICAgLy8gbG4oeSkgPSBsbigoMSArIHgpLygxIC0geCkpID0gMih4ICsgeF4zLzMgKyB4XjUvNSArIHheNy83ICsgLi4uKVxyXG4gICAgLy8gd2hlcmUgeCA9ICh5IC0gMSkvKHkgKyAxKSAgICAofHh8IDwgMSlcclxuICAgIHN1bSA9IG51bWVyYXRvciA9IHggPSBkaXZpZGUoeC5taW51cygxKSwgeC5wbHVzKDEpLCB3cHIsIDEpO1xyXG4gICAgeDIgPSBmaW5hbGlzZSh4LnRpbWVzKHgpLCB3cHIsIDEpO1xyXG4gICAgZGVub21pbmF0b3IgPSAzO1xyXG5cclxuICAgIGZvciAoOzspIHtcclxuICAgICAgbnVtZXJhdG9yID0gZmluYWxpc2UobnVtZXJhdG9yLnRpbWVzKHgyKSwgd3ByLCAxKTtcclxuICAgICAgdCA9IHN1bS5wbHVzKGRpdmlkZShudW1lcmF0b3IsIG5ldyBDdG9yKGRlbm9taW5hdG9yKSwgd3ByLCAxKSk7XHJcblxyXG4gICAgICBpZiAoZGlnaXRzVG9TdHJpbmcodC5kKS5zbGljZSgwLCB3cHIpID09PSBkaWdpdHNUb1N0cmluZyhzdW0uZCkuc2xpY2UoMCwgd3ByKSkge1xyXG4gICAgICAgIHN1bSA9IHN1bS50aW1lcygyKTtcclxuXHJcbiAgICAgICAgLy8gUmV2ZXJzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLiBDaGVjayB0aGF0IGUgaXMgbm90IDAgYmVjYXVzZSwgYmVzaWRlcyBwcmV2ZW50aW5nIGFuXHJcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgY2FsY3VsYXRpb24sIC0wICsgMCA9ICswIGFuZCB0byBlbnN1cmUgY29ycmVjdCByb3VuZGluZyAtMCBuZWVkcyB0byBzdGF5IC0wLlxyXG4gICAgICAgIGlmIChlICE9PSAwKSBzdW0gPSBzdW0ucGx1cyhnZXRMbjEwKEN0b3IsIHdwciArIDIsIHByKS50aW1lcyhlICsgJycpKTtcclxuICAgICAgICBzdW0gPSBkaXZpZGUoc3VtLCBuZXcgQ3RvcihuKSwgd3ByLCAxKTtcclxuXHJcbiAgICAgICAgLy8gSXMgcm0gPiAzIGFuZCB0aGUgZmlyc3QgNCByb3VuZGluZyBkaWdpdHMgNDk5OSwgb3Igcm0gPCA0IChvciB0aGUgc3VtbWF0aW9uIGhhc1xyXG4gICAgICAgIC8vIGJlZW4gcmVwZWF0ZWQgcHJldmlvdXNseSkgYW5kIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyA5OTk5P1xyXG4gICAgICAgIC8vIElmIHNvLCByZXN0YXJ0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZVxyXG4gICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDEyLCByb3VuZGluZzogMVxyXG4gICAgICAgIC8vIGxuKDEzNTUyMDAyOC42MTI2MDkxNzE0MjY1MzgxNTMzKSA9IDE4LjcyNDYyOTk5OTkgd2hlbiBpdCBzaG91bGQgYmUgMTguNzI0NjMuXHJcbiAgICAgICAgLy8gYHdwciAtIGd1YXJkYCBpcyB0aGUgaW5kZXggb2YgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHN1bS5kLCB3cHIgLSBndWFyZCwgcm0sIHJlcCkpIHtcclxuICAgICAgICAgICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgKz0gZ3VhcmQ7XHJcbiAgICAgICAgICAgIHQgPSBudW1lcmF0b3IgPSB4ID0gZGl2aWRlKHgxLm1pbnVzKDEpLCB4MS5wbHVzKDEpLCB3cHIsIDEpO1xyXG4gICAgICAgICAgICB4MiA9IGZpbmFsaXNlKHgudGltZXMoeCksIHdwciwgMSk7XHJcbiAgICAgICAgICAgIGRlbm9taW5hdG9yID0gcmVwID0gMTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGlzZShzdW0sIEN0b3IucHJlY2lzaW9uID0gcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN1bSA9IHQ7XHJcbiAgICAgIGRlbm9taW5hdG9yICs9IDI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gwrFJbmZpbml0eSwgTmFOLlxyXG4gIGZ1bmN0aW9uIG5vbkZpbml0ZVRvU3RyaW5nKHgpIHtcclxuICAgIC8vIFVuc2lnbmVkLlxyXG4gICAgcmV0dXJuIFN0cmluZyh4LnMgKiB4LnMgLyAwKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIHN0cmluZyBgc3RyYC5cclxuICAgKi9cclxuICBmdW5jdGlvbiBwYXJzZURlY2ltYWwoeCwgc3RyKSB7XHJcbiAgICB2YXIgZSwgaSwgbGVuO1xyXG5cclxuICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuXHJcbiAgICAvLyBFeHBvbmVudGlhbCBmb3JtP1xyXG4gICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgZXhwb25lbnQuXHJcbiAgICAgIGlmIChlIDwgMCkgZSA9IGk7XHJcbiAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSk7XHJcbiAgICB9IGVsc2UgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICBlID0gc3RyLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy5cclxuICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IHN0ci5jaGFyQ29kZUF0KGxlbiAtIDEpID09PSA0ODsgLS1sZW4pO1xyXG4gICAgc3RyID0gc3RyLnNsaWNlKGksIGxlbik7XHJcblxyXG4gICAgaWYgKHN0cikge1xyXG4gICAgICBsZW4gLT0gaTtcclxuICAgICAgeC5lID0gZSA9IGUgLSBpIC0gMTtcclxuICAgICAgeC5kID0gW107XHJcblxyXG4gICAgICAvLyBUcmFuc2Zvcm0gYmFzZVxyXG5cclxuICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgLy8gaSBpcyB3aGVyZSB0byBzbGljZSBzdHIgdG8gZ2V0IHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuXHJcbiAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgIGlmIChlIDwgMCkgaSArPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgIGlmIChpIDwgbGVuKSB7XHJcbiAgICAgICAgaWYgKGkpIHguZC5wdXNoKCtzdHIuc2xpY2UoMCwgaSkpO1xyXG4gICAgICAgIGZvciAobGVuIC09IExPR19CQVNFOyBpIDwgbGVuOykgeC5kLnB1c2goK3N0ci5zbGljZShpLCBpICs9IExPR19CQVNFKSk7XHJcbiAgICAgICAgc3RyID0gc3RyLnNsaWNlKGkpO1xyXG4gICAgICAgIGkgPSBMT0dfQkFTRSAtIHN0ci5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoOyBpLS07KSBzdHIgKz0gJzAnO1xyXG4gICAgICB4LmQucHVzaCgrc3RyKTtcclxuXHJcbiAgICAgIGlmIChleHRlcm5hbCkge1xyXG5cclxuICAgICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgICBpZiAoeC5lID4geC5jb25zdHJ1Y3Rvci5tYXhFKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgeC5lID0gTmFOO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgICAgfSBlbHNlIGlmICh4LmUgPCB4LmNvbnN0cnVjdG9yLm1pbkUpIHtcclxuXHJcbiAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIC8vIHguY29uc3RydWN0b3IudW5kZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgICB9IC8vIGVsc2UgeC5jb25zdHJ1Y3Rvci51bmRlcmZsb3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIFplcm8uXHJcbiAgICAgIHguZSA9IDA7XHJcbiAgICAgIHguZCA9IFswXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIGEgc3RyaW5nIGBzdHJgLCB3aGljaCBpcyBub3QgYSBkZWNpbWFsIHZhbHVlLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBhcnNlT3RoZXIoeCwgc3RyKSB7XHJcbiAgICB2YXIgYmFzZSwgQ3RvciwgZGl2aXNvciwgaSwgaXNGbG9hdCwgbGVuLCBwLCB4ZCwgeGU7XHJcblxyXG4gICAgaWYgKHN0ciA9PT0gJ0luZmluaXR5JyB8fCBzdHIgPT09ICdOYU4nKSB7XHJcbiAgICAgIGlmICghK3N0cikgeC5zID0gTmFOO1xyXG4gICAgICB4LmUgPSBOYU47XHJcbiAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0hleC50ZXN0KHN0cikpICB7XHJcbiAgICAgIGJhc2UgPSAxNjtcclxuICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzQmluYXJ5LnRlc3Qoc3RyKSkgIHtcclxuICAgICAgYmFzZSA9IDI7XHJcbiAgICB9IGVsc2UgaWYgKGlzT2N0YWwudGVzdChzdHIpKSAge1xyXG4gICAgICBiYXNlID0gODtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSXMgdGhlcmUgYSBiaW5hcnkgZXhwb25lbnQgcGFydD9cclxuICAgIGkgPSBzdHIuc2VhcmNoKC9wL2kpO1xyXG5cclxuICAgIGlmIChpID4gMCkge1xyXG4gICAgICBwID0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMiwgaSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHIgPSBzdHIuc2xpY2UoMik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29udmVydCBgc3RyYCBhcyBhbiBpbnRlZ2VyIHRoZW4gZGl2aWRlIHRoZSByZXN1bHQgYnkgYGJhc2VgIHJhaXNlZCB0byBhIHBvd2VyIHN1Y2ggdGhhdCB0aGVcclxuICAgIC8vIGZyYWN0aW9uIHBhcnQgd2lsbCBiZSByZXN0b3JlZC5cclxuICAgIGkgPSBzdHIuaW5kZXhPZignLicpO1xyXG4gICAgaXNGbG9hdCA9IGkgPj0gMDtcclxuICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmIChpc0Zsb2F0KSB7XHJcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG4gICAgICBpID0gbGVuIC0gaTtcclxuXHJcbiAgICAgIC8vIGxvZ1sxMF0oMTYpID0gMS4yMDQxLi4uICwgbG9nWzEwXSg4OCkgPSAxLjk0NDQuLi4uXHJcbiAgICAgIGRpdmlzb3IgPSBpbnRQb3coQ3RvciwgbmV3IEN0b3IoYmFzZSksIGksIGkgKiAyKTtcclxuICAgIH1cclxuXHJcbiAgICB4ZCA9IGNvbnZlcnRCYXNlKHN0ciwgYmFzZSwgQkFTRSk7XHJcbiAgICB4ZSA9IHhkLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yIChpID0geGU7IHhkW2ldID09PSAwOyAtLWkpIHhkLnBvcCgpO1xyXG4gICAgaWYgKGkgPCAwKSByZXR1cm4gbmV3IEN0b3IoeC5zICogMCk7XHJcbiAgICB4LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgeGUpO1xyXG4gICAgeC5kID0geGQ7XHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEF0IHdoYXQgcHJlY2lzaW9uIHRvIHBlcmZvcm0gdGhlIGRpdmlzaW9uIHRvIGVuc3VyZSBleGFjdCBjb252ZXJzaW9uP1xyXG4gICAgLy8gbWF4RGVjaW1hbEludGVnZXJQYXJ0RGlnaXRDb3VudCA9IGNlaWwobG9nWzEwXShiKSAqIG90aGVyQmFzZUludGVnZXJQYXJ0RGlnaXRDb3VudClcclxuICAgIC8vIGxvZ1sxMF0oMikgPSAwLjMwMTAzLCBsb2dbMTBdKDgpID0gMC45MDMwOSwgbG9nWzEwXSgxNikgPSAxLjIwNDEyXHJcbiAgICAvLyBFLmcuIGNlaWwoMS4yICogMykgPSA0LCBzbyB1cCB0byA0IGRlY2ltYWwgZGlnaXRzIGFyZSBuZWVkZWQgdG8gcmVwcmVzZW50IDMgaGV4IGludCBkaWdpdHMuXHJcbiAgICAvLyBtYXhEZWNpbWFsRnJhY3Rpb25QYXJ0RGlnaXRDb3VudCA9IHtIZXg6NHxPY3Q6M3xCaW46MX0gKiBvdGhlckJhc2VGcmFjdGlvblBhcnREaWdpdENvdW50XHJcbiAgICAvLyBUaGVyZWZvcmUgdXNpbmcgNCAqIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHN0ciB3aWxsIGFsd2F5cyBiZSBlbm91Z2guXHJcbiAgICBpZiAoaXNGbG9hdCkgeCA9IGRpdmlkZSh4LCBkaXZpc29yLCBsZW4gKiA0KTtcclxuXHJcbiAgICAvLyBNdWx0aXBseSBieSB0aGUgYmluYXJ5IGV4cG9uZW50IHBhcnQgaWYgcHJlc2VudC5cclxuICAgIGlmIChwKSB4ID0geC50aW1lcyhNYXRoLmFicyhwKSA8IDU0ID8gbWF0aHBvdygyLCBwKSA6IERlY2ltYWwucG93KDIsIHApKTtcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi5cclxuICAgKiB8eHwgPCBwaS8yXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzaW5lKEN0b3IsIHgpIHtcclxuICAgIHZhciBrLFxyXG4gICAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZW4gPCAzKSByZXR1cm4gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgpO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogc2luKDV4KSA9IDE2KnNpbl41KHgpIC0gMjAqc2luXjMoeCkgKyA1KnNpbih4KVxyXG4gICAgLy8gaS5lLiBzaW4oeCkgPSAxNipzaW5eNSh4LzUpIC0gMjAqc2luXjMoeC81KSArIDUqc2luKHgvNSlcclxuICAgIC8vIGFuZCAgc2luKHgpID0gc2luKHgvNSkoNSArIHNpbl4yKHgvNSkoMTZzaW5eMih4LzUpIC0gMjApKVxyXG5cclxuICAgIC8vIEVzdGltYXRlIHRoZSBvcHRpbXVtIG51bWJlciBvZiB0aW1lcyB0byB1c2UgdGhlIGFyZ3VtZW50IHJlZHVjdGlvbi5cclxuICAgIGsgPSAxLjQgKiBNYXRoLnNxcnQobGVuKTtcclxuICAgIGsgPSBrID4gMTYgPyAxNiA6IGsgfCAwO1xyXG5cclxuICAgIHggPSB4LnRpbWVzKDEgLyB0aW55UG93KDUsIGspKTtcclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMiwgeCwgeCk7XHJcblxyXG4gICAgLy8gUmV2ZXJzZSBhcmd1bWVudCByZWR1Y3Rpb25cclxuICAgIHZhciBzaW4yX3gsXHJcbiAgICAgIGQ1ID0gbmV3IEN0b3IoNSksXHJcbiAgICAgIGQxNiA9IG5ldyBDdG9yKDE2KSxcclxuICAgICAgZDIwID0gbmV3IEN0b3IoMjApO1xyXG4gICAgZm9yICg7IGstLTspIHtcclxuICAgICAgc2luMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IHgudGltZXMoZDUucGx1cyhzaW4yX3gudGltZXMoZDE2LnRpbWVzKHNpbjJfeCkubWludXMoZDIwKSkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvLyBDYWxjdWxhdGUgVGF5bG9yIHNlcmllcyBmb3IgYGNvc2AsIGBjb3NoYCwgYHNpbmAgYW5kIGBzaW5oYC5cclxuICBmdW5jdGlvbiB0YXlsb3JTZXJpZXMoQ3RvciwgbiwgeCwgeSwgaXNIeXBlcmJvbGljKSB7XHJcbiAgICB2YXIgaiwgdCwgdSwgeDIsXHJcbiAgICAgIGkgPSAxLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBrID0gTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcbiAgICB4MiA9IHgudGltZXMoeCk7XHJcbiAgICB1ID0gbmV3IEN0b3IoeSk7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gZGl2aWRlKHUudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7XHJcbiAgICAgIHUgPSBpc0h5cGVyYm9saWMgPyB5LnBsdXModCkgOiB5Lm1pbnVzKHQpO1xyXG4gICAgICB5ID0gZGl2aWRlKHQudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7XHJcbiAgICAgIHQgPSB1LnBsdXMoeSk7XHJcblxyXG4gICAgICBpZiAodC5kW2tdICE9PSB2b2lkIDApIHtcclxuICAgICAgICBmb3IgKGogPSBrOyB0LmRbal0gPT09IHUuZFtqXSAmJiBqLS07KTtcclxuICAgICAgICBpZiAoaiA9PSAtMSkgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGogPSB1O1xyXG4gICAgICB1ID0geTtcclxuICAgICAgeSA9IHQ7XHJcbiAgICAgIHQgPSBqO1xyXG4gICAgICBpKys7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgdC5kLmxlbmd0aCA9IGsgKyAxO1xyXG5cclxuICAgIHJldHVybiB0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4cG9uZW50IGUgbXVzdCBiZSBwb3NpdGl2ZSBhbmQgbm9uLXplcm8uXHJcbiAgZnVuY3Rpb24gdGlueVBvdyhiLCBlKSB7XHJcbiAgICB2YXIgbiA9IGI7XHJcbiAgICB3aGlsZSAoLS1lKSBuICo9IGI7XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG5cclxuICAvLyBSZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YCByZWR1Y2VkIHRvIGxlc3MgdGhhbiBvciBlcXVhbCB0byBoYWxmIHBpLlxyXG4gIGZ1bmN0aW9uIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkge1xyXG4gICAgdmFyIHQsXHJcbiAgICAgIGlzTmVnID0geC5zIDwgMCxcclxuICAgICAgcGkgPSBnZXRQaShDdG9yLCBDdG9yLnByZWNpc2lvbiwgMSksXHJcbiAgICAgIGhhbGZQaSA9IHBpLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgeCA9IHguYWJzKCk7XHJcblxyXG4gICAgaWYgKHgubHRlKGhhbGZQaSkpIHtcclxuICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDQgOiAxO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcbiAgICB0ID0geC5kaXZUb0ludChwaSk7XHJcblxyXG4gICAgaWYgKHQuaXNaZXJvKCkpIHtcclxuICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDMgOiAyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgeCA9IHgubWludXModC50aW1lcyhwaSkpO1xyXG5cclxuICAgICAgLy8gMCA8PSB4IDwgcGlcclxuICAgICAgaWYgKHgubHRlKGhhbGZQaSkpIHtcclxuICAgICAgICBxdWFkcmFudCA9IGlzT2RkKHQpID8gKGlzTmVnID8gMiA6IDMpIDogKGlzTmVnID8gNCA6IDEpO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBxdWFkcmFudCA9IGlzT2RkKHQpID8gKGlzTmVnID8gMSA6IDQpIDogKGlzTmVnID8gMyA6IDIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4Lm1pbnVzKHBpKS5hYnMoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgRGVjaW1hbCBgeGAgYXMgYSBzdHJpbmcgaW4gYmFzZSBgYmFzZU91dGAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IGluY2x1ZGUgYSBiaW5hcnkgZXhwb25lbnQgc3VmZml4LlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRvU3RyaW5nQmluYXJ5KHgsIGJhc2VPdXQsIHNkLCBybSkge1xyXG4gICAgdmFyIGJhc2UsIGUsIGksIGssIGxlbiwgcm91bmRVcCwgc3RyLCB4ZCwgeSxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIGlzRXhwID0gc2QgIT09IHZvaWQgMDtcclxuXHJcbiAgICBpZiAoaXNFeHApIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZCA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcclxuICAgICAgc3RyID0gbm9uRmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4KTtcclxuICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyk7XHJcblxyXG4gICAgICAvLyBVc2UgZXhwb25lbnRpYWwgbm90YXRpb24gYWNjb3JkaW5nIHRvIGB0b0V4cFBvc2AgYW5kIGB0b0V4cE5lZ2A/IE5vLCBidXQgaWYgcmVxdWlyZWQ6XHJcbiAgICAgIC8vIG1heEJpbmFyeUV4cG9uZW50ID0gZmxvb3IoKGRlY2ltYWxFeHBvbmVudCArIDEpICogbG9nWzJdKDEwKSlcclxuICAgICAgLy8gbWluQmluYXJ5RXhwb25lbnQgPSBmbG9vcihkZWNpbWFsRXhwb25lbnQgKiBsb2dbMl0oMTApKVxyXG4gICAgICAvLyBsb2dbMl0oMTApID0gMy4zMjE5MjgwOTQ4ODczNjIzNDc4NzAzMTk0Mjk0ODkzOTAxNzU4NjRcclxuXHJcbiAgICAgIGlmIChpc0V4cCkge1xyXG4gICAgICAgIGJhc2UgPSAyO1xyXG4gICAgICAgIGlmIChiYXNlT3V0ID09IDE2KSB7XHJcbiAgICAgICAgICBzZCA9IHNkICogNCAtIDM7XHJcbiAgICAgICAgfSBlbHNlIGlmIChiYXNlT3V0ID09IDgpIHtcclxuICAgICAgICAgIHNkID0gc2QgKiAzIC0gMjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZSA9IGJhc2VPdXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBhbiBpbnRlZ2VyIHRoZW4gZGl2aWRlIHRoZSByZXN1bHQgYnkgaXRzIGJhc2UgcmFpc2VkIHRvIGEgcG93ZXIgc3VjaFxyXG4gICAgICAvLyB0aGF0IHRoZSBmcmFjdGlvbiBwYXJ0IHdpbGwgYmUgcmVzdG9yZWQuXHJcblxyXG4gICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgIHkgPSBuZXcgQ3RvcigxKTtcclxuICAgICAgICB5LmUgPSBzdHIubGVuZ3RoIC0gaTtcclxuICAgICAgICB5LmQgPSBjb252ZXJ0QmFzZShmaW5pdGVUb1N0cmluZyh5KSwgMTAsIGJhc2UpO1xyXG4gICAgICAgIHkuZSA9IHkuZC5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhkID0gY29udmVydEJhc2Uoc3RyLCAxMCwgYmFzZSk7XHJcbiAgICAgIGUgPSBsZW4gPSB4ZC5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoOyB4ZFstLWxlbl0gPT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgICAgaWYgKCF4ZFswXSkge1xyXG4gICAgICAgIHN0ciA9IGlzRXhwID8gJzBwKzAnIDogJzAnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgZS0tO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEN0b3IoeCk7XHJcbiAgICAgICAgICB4LmQgPSB4ZDtcclxuICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICB4ID0gZGl2aWRlKHgsIHksIHNkLCBybSwgMCwgYmFzZSk7XHJcbiAgICAgICAgICB4ZCA9IHguZDtcclxuICAgICAgICAgIGUgPSB4LmU7XHJcbiAgICAgICAgICByb3VuZFVwID0gaW5leGFjdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgaSA9IHhkW3NkXTtcclxuICAgICAgICBrID0gYmFzZSAvIDI7XHJcbiAgICAgICAgcm91bmRVcCA9IHJvdW5kVXAgfHwgeGRbc2QgKyAxXSAhPT0gdm9pZCAwO1xyXG5cclxuICAgICAgICByb3VuZFVwID0gcm0gPCA0XHJcbiAgICAgICAgICA/IChpICE9PSB2b2lkIDAgfHwgcm91bmRVcCkgJiYgKHJtID09PSAwIHx8IHJtID09PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgIDogaSA+IGsgfHwgaSA9PT0gayAmJiAocm0gPT09IDQgfHwgcm91bmRVcCB8fCBybSA9PT0gNiAmJiB4ZFtzZCAtIDFdICYgMSB8fFxyXG4gICAgICAgICAgICBybSA9PT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICB4ZC5sZW5ndGggPSBzZDtcclxuXHJcbiAgICAgICAgaWYgKHJvdW5kVXApIHtcclxuXHJcbiAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgbWVhbiB0aGUgcHJldmlvdXMgZGlnaXQgaGFzIHRvIGJlIHJvdW5kZWQgdXAgYW5kIHNvIG9uLlxyXG4gICAgICAgICAgZm9yICg7ICsreGRbLS1zZF0gPiBiYXNlIC0gMTspIHtcclxuICAgICAgICAgICAgeGRbc2RdID0gMDtcclxuICAgICAgICAgICAgaWYgKCFzZCkge1xyXG4gICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICB4ZC51bnNoaWZ0KDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7ICF4ZFtsZW4gLSAxXTsgLS1sZW4pO1xyXG5cclxuICAgICAgICAvLyBFLmcuIFs0LCAxMSwgMTVdIGJlY29tZXMgNGJmLlxyXG4gICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDwgbGVuOyBpKyspIHN0ciArPSBOVU1FUkFMUy5jaGFyQXQoeGRbaV0pO1xyXG5cclxuICAgICAgICAvLyBBZGQgYmluYXJ5IGV4cG9uZW50IHN1ZmZpeD9cclxuICAgICAgICBpZiAoaXNFeHApIHtcclxuICAgICAgICAgIGlmIChsZW4gPiAxKSB7XHJcbiAgICAgICAgICAgIGlmIChiYXNlT3V0ID09IDE2IHx8IGJhc2VPdXQgPT0gOCkge1xyXG4gICAgICAgICAgICAgIGkgPSBiYXNlT3V0ID09IDE2ID8gNCA6IDM7XHJcbiAgICAgICAgICAgICAgZm9yICgtLWxlbjsgbGVuICUgaTsgbGVuKyspIHN0ciArPSAnMCc7XHJcbiAgICAgICAgICAgICAgeGQgPSBjb252ZXJ0QmFzZShzdHIsIGJhc2UsIGJhc2VPdXQpO1xyXG4gICAgICAgICAgICAgIGZvciAobGVuID0geGQubGVuZ3RoOyAheGRbbGVuIC0gMV07IC0tbGVuKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8geGRbMF0gd2lsbCBhbHdheXMgYmUgYmUgMVxyXG4gICAgICAgICAgICAgIGZvciAoaSA9IDEsIHN0ciA9ICcxLic7IGkgPCBsZW47IGkrKykgc3RyICs9IE5VTUVSQUxTLmNoYXJBdCh4ZFtpXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHN0ciA9ICBzdHIgKyAoZSA8IDAgPyAncCcgOiAncCsnKSArIGU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG4gICAgICAgICAgZm9yICg7ICsrZTspIHN0ciA9ICcwJyArIHN0cjtcclxuICAgICAgICAgIHN0ciA9ICcwLicgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgrK2UgPiBsZW4pIGZvciAoZSAtPSBsZW47IGUtLSA7KSBzdHIgKz0gJzAnO1xyXG4gICAgICAgICAgZWxzZSBpZiAoZSA8IGxlbikgc3RyID0gc3RyLnNsaWNlKDAsIGUpICsgJy4nICsgc3RyLnNsaWNlKGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0gKGJhc2VPdXQgPT0gMTYgPyAnMHgnIDogYmFzZU91dCA9PSAyID8gJzBiJyA6IGJhc2VPdXQgPT0gOCA/ICcwbycgOiAnJykgKyBzdHI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHgucyA8IDAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRG9lcyBub3Qgc3RyaXAgdHJhaWxpbmcgemVyb3MuXHJcbiAgZnVuY3Rpb24gdHJ1bmNhdGUoYXJyLCBsZW4pIHtcclxuICAgIGlmIChhcnIubGVuZ3RoID4gbGVuKSB7XHJcbiAgICAgIGFyci5sZW5ndGggPSBsZW47XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIERlY2ltYWwgbWV0aG9kc1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgYWJzXHJcbiAgICogIGFjb3NcclxuICAgKiAgYWNvc2hcclxuICAgKiAgYWRkXHJcbiAgICogIGFzaW5cclxuICAgKiAgYXNpbmhcclxuICAgKiAgYXRhblxyXG4gICAqICBhdGFuaFxyXG4gICAqICBhdGFuMlxyXG4gICAqICBjYnJ0XHJcbiAgICogIGNlaWxcclxuICAgKiAgY2xvbmVcclxuICAgKiAgY29uZmlnXHJcbiAgICogIGNvc1xyXG4gICAqICBjb3NoXHJcbiAgICogIGRpdlxyXG4gICAqICBleHBcclxuICAgKiAgZmxvb3JcclxuICAgKiAgaHlwb3RcclxuICAgKiAgbG5cclxuICAgKiAgbG9nXHJcbiAgICogIGxvZzJcclxuICAgKiAgbG9nMTBcclxuICAgKiAgbWF4XHJcbiAgICogIG1pblxyXG4gICAqICBtb2RcclxuICAgKiAgbXVsXHJcbiAgICogIHBvd1xyXG4gICAqICByYW5kb21cclxuICAgKiAgcm91bmRcclxuICAgKiAgc2V0XHJcbiAgICogIHNpZ25cclxuICAgKiAgc2luXHJcbiAgICogIHNpbmhcclxuICAgKiAgc3FydFxyXG4gICAqICBzdWJcclxuICAgKiAgdGFuXHJcbiAgICogIHRhbmhcclxuICAgKiAgdHJ1bmNcclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFicyh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWJzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIGluIHJhZGlhbnMgb2YgYHhgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWNvcyh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWNvcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGB4YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFjb3NoKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5hY29zaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHN1bSBvZiBgeGAgYW5kIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWRkKHgsIHkpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5wbHVzKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY3NpbmUgaW4gcmFkaWFucyBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXNpbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYXNpbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBgeGAsIHJvdW5kZWQgdG9cclxuICAgKiBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhc2luaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYXNpbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IGluIHJhZGlhbnMgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGF0YW4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmF0YW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYHhgLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXRhbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmF0YW5oKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjdGFuZ2VudCBpbiByYWRpYW5zIG9mIGB5L3hgIGluIHRoZSByYW5nZSAtcGkgdG8gcGlcclxuICAgKiAoaW5jbHVzaXZlKSwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1waSwgcGldXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSB5LWNvb3JkaW5hdGUuXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgeC1jb29yZGluYXRlLlxyXG4gICAqXHJcbiAgICogYXRhbjIowrEwLCAtMCkgICAgICAgICAgICAgICA9IMKxcGlcclxuICAgKiBhdGFuMijCsTAsICswKSAgICAgICAgICAgICAgID0gwrEwXHJcbiAgICogYXRhbjIowrEwLCAteCkgICAgICAgICAgICAgICA9IMKxcGkgZm9yIHggPiAwXHJcbiAgICogYXRhbjIowrEwLCB4KSAgICAgICAgICAgICAgICA9IMKxMCBmb3IgeCA+IDBcclxuICAgKiBhdGFuMigteSwgwrEwKSAgICAgICAgICAgICAgID0gLXBpLzIgZm9yIHkgPiAwXHJcbiAgICogYXRhbjIoeSwgwrEwKSAgICAgICAgICAgICAgICA9IHBpLzIgZm9yIHkgPiAwXHJcbiAgICogYXRhbjIowrF5LCAtSW5maW5pdHkpICAgICAgICA9IMKxcGkgZm9yIGZpbml0ZSB5ID4gMFxyXG4gICAqIGF0YW4yKMKxeSwgK0luZmluaXR5KSAgICAgICAgPSDCsTAgZm9yIGZpbml0ZSB5ID4gMFxyXG4gICAqIGF0YW4yKMKxSW5maW5pdHksIHgpICAgICAgICAgPSDCsXBpLzIgZm9yIGZpbml0ZSB4XHJcbiAgICogYXRhbjIowrFJbmZpbml0eSwgLUluZmluaXR5KSA9IMKxMypwaS80XHJcbiAgICogYXRhbjIowrFJbmZpbml0eSwgK0luZmluaXR5KSA9IMKxcGkvNFxyXG4gICAqIGF0YW4yKE5hTiwgeCkgPSBOYU5cclxuICAgKiBhdGFuMih5LCBOYU4pID0gTmFOXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhdGFuMih5LCB4KSB7XHJcbiAgICB5ID0gbmV3IHRoaXMoeSk7XHJcbiAgICB4ID0gbmV3IHRoaXMoeCk7XHJcbiAgICB2YXIgcixcclxuICAgICAgcHIgPSB0aGlzLnByZWNpc2lvbixcclxuICAgICAgcm0gPSB0aGlzLnJvdW5kaW5nLFxyXG4gICAgICB3cHIgPSBwciArIDQ7XHJcblxyXG4gICAgLy8gRWl0aGVyIE5hTlxyXG4gICAgaWYgKCF5LnMgfHwgIXgucykge1xyXG4gICAgICByID0gbmV3IHRoaXMoTmFOKTtcclxuXHJcbiAgICAvLyBCb3RoIMKxSW5maW5pdHlcclxuICAgIH0gZWxzZSBpZiAoIXkuZCAmJiAheC5kKSB7XHJcbiAgICAgIHIgPSBnZXRQaSh0aGlzLCB3cHIsIDEpLnRpbWVzKHgucyA+IDAgPyAwLjI1IDogMC43NSk7XHJcbiAgICAgIHIucyA9IHkucztcclxuXHJcbiAgICAvLyB4IGlzIMKxSW5maW5pdHkgb3IgeSBpcyDCsTBcclxuICAgIH0gZWxzZSBpZiAoIXguZCB8fCB5LmlzWmVybygpKSB7XHJcbiAgICAgIHIgPSB4LnMgPCAwID8gZ2V0UGkodGhpcywgcHIsIHJtKSA6IG5ldyB0aGlzKDApO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8geSBpcyDCsUluZmluaXR5IG9yIHggaXMgwrEwXHJcbiAgICB9IGVsc2UgaWYgKCF5LmQgfHwgeC5pc1plcm8oKSkge1xyXG4gICAgICByID0gZ2V0UGkodGhpcywgd3ByLCAxKS50aW1lcygwLjUpO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8gQm90aCBub24temVybyBhbmQgZmluaXRlXHJcbiAgICB9IGVsc2UgaWYgKHgucyA8IDApIHtcclxuICAgICAgdGhpcy5wcmVjaXNpb24gPSB3cHI7XHJcbiAgICAgIHRoaXMucm91bmRpbmcgPSAxO1xyXG4gICAgICByID0gdGhpcy5hdGFuKGRpdmlkZSh5LCB4LCB3cHIsIDEpKTtcclxuICAgICAgeCA9IGdldFBpKHRoaXMsIHdwciwgMSk7XHJcbiAgICAgIHRoaXMucHJlY2lzaW9uID0gcHI7XHJcbiAgICAgIHRoaXMucm91bmRpbmcgPSBybTtcclxuICAgICAgciA9IHkucyA8IDAgPyByLm1pbnVzKHgpIDogci5wbHVzKHgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgciA9IHRoaXMuYXRhbihkaXZpZGUoeSwgeCwgd3ByLCAxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgY3ViZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjYnJ0KHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jYnJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmRlZCB0byBhbiBpbnRlZ2VyIHVzaW5nIGBST1VORF9DRUlMYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNlaWwoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDb25maWd1cmUgZ2xvYmFsIHNldHRpbmdzIGZvciBhIERlY2ltYWwgY29uc3RydWN0b3IuXHJcbiAgICpcclxuICAgKiBgb2JqYCBpcyBhbiBvYmplY3Qgd2l0aCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsXHJcbiAgICpcclxuICAgKiAgIHByZWNpc2lvbiAge251bWJlcn1cclxuICAgKiAgIHJvdW5kaW5nICAge251bWJlcn1cclxuICAgKiAgIHRvRXhwTmVnICAge251bWJlcn1cclxuICAgKiAgIHRvRXhwUG9zICAge251bWJlcn1cclxuICAgKiAgIG1heEUgICAgICAge251bWJlcn1cclxuICAgKiAgIG1pbkUgICAgICAge251bWJlcn1cclxuICAgKiAgIG1vZHVsbyAgICAge251bWJlcn1cclxuICAgKiAgIGNyeXB0byAgICAge2Jvb2xlYW58bnVtYmVyfVxyXG4gICAqICAgZGVmYXVsdHMgICB7dHJ1ZX1cclxuICAgKlxyXG4gICAqIEUuZy4gRGVjaW1hbC5jb25maWcoeyBwcmVjaXNpb246IDIwLCByb3VuZGluZzogNCB9KVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY29uZmlnKG9iaikge1xyXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHRocm93IEVycm9yKGRlY2ltYWxFcnJvciArICdPYmplY3QgZXhwZWN0ZWQnKTtcclxuICAgIHZhciBpLCBwLCB2LFxyXG4gICAgICB1c2VEZWZhdWx0cyA9IG9iai5kZWZhdWx0cyA9PT0gdHJ1ZSxcclxuICAgICAgcHMgPSBbXHJcbiAgICAgICAgJ3ByZWNpc2lvbicsIDEsIE1BWF9ESUdJVFMsXHJcbiAgICAgICAgJ3JvdW5kaW5nJywgMCwgOCxcclxuICAgICAgICAndG9FeHBOZWcnLCAtRVhQX0xJTUlULCAwLFxyXG4gICAgICAgICd0b0V4cFBvcycsIDAsIEVYUF9MSU1JVCxcclxuICAgICAgICAnbWF4RScsIDAsIEVYUF9MSU1JVCxcclxuICAgICAgICAnbWluRScsIC1FWFBfTElNSVQsIDAsXHJcbiAgICAgICAgJ21vZHVsbycsIDAsIDlcclxuICAgICAgXTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgaWYgKHAgPSBwc1tpXSwgdXNlRGVmYXVsdHMpIHRoaXNbcF0gPSBERUZBVUxUU1twXTtcclxuICAgICAgaWYgKCh2ID0gb2JqW3BdKSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgaWYgKG1hdGhmbG9vcih2KSA9PT0gdiAmJiB2ID49IHBzW2kgKyAxXSAmJiB2IDw9IHBzW2kgKyAyXSkgdGhpc1twXSA9IHY7XHJcbiAgICAgICAgZWxzZSB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyBwICsgJzogJyArIHYpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHAgPSAnY3J5cHRvJywgdXNlRGVmYXVsdHMpIHRoaXNbcF0gPSBERUZBVUxUU1twXTtcclxuICAgIGlmICgodiA9IG9ialtwXSkgIT09IHZvaWQgMCkge1xyXG4gICAgICBpZiAodiA9PT0gdHJ1ZSB8fCB2ID09PSBmYWxzZSB8fCB2ID09PSAwIHx8IHYgPT09IDEpIHtcclxuICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvICYmXHJcbiAgICAgICAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIHx8IGNyeXB0by5yYW5kb21CeXRlcykpIHtcclxuICAgICAgICAgICAgdGhpc1twXSA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihjcnlwdG9VbmF2YWlsYWJsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXNbcF0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgcCArICc6ICcgKyB2KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3MoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmNvcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGB4YCwgcm91bmRlZCB0byBwcmVjaXNpb25cclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3NoKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jb3NoKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIERlY2ltYWwgY29uc3RydWN0b3Igd2l0aCB0aGUgc2FtZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgYXMgdGhpcyBEZWNpbWFsXHJcbiAgICogY29uc3RydWN0b3IuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjbG9uZShvYmopIHtcclxuICAgIHZhciBpLCBwLCBwcztcclxuXHJcbiAgICAvKlxyXG4gICAgICogVGhlIERlY2ltYWwgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogdiB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBEZWNpbWFsKHYpIHtcclxuICAgICAgdmFyIGUsIGksIHQsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBEZWNpbWFsIGNhbGxlZCB3aXRob3V0IG5ldy5cclxuICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIERlY2ltYWwpKSByZXR1cm4gbmV3IERlY2ltYWwodik7XHJcblxyXG4gICAgICAvLyBSZXRhaW4gYSByZWZlcmVuY2UgdG8gdGhpcyBEZWNpbWFsIGNvbnN0cnVjdG9yLCBhbmQgc2hhZG93IERlY2ltYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yXHJcbiAgICAgIC8vIHdoaWNoIHBvaW50cyB0byBPYmplY3QuXHJcbiAgICAgIHguY29uc3RydWN0b3IgPSBEZWNpbWFsO1xyXG5cclxuICAgICAgLy8gRHVwbGljYXRlLlxyXG4gICAgICBpZiAodiBpbnN0YW5jZW9mIERlY2ltYWwpIHtcclxuICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgIGlmIChleHRlcm5hbCkge1xyXG4gICAgICAgICAgaWYgKCF2LmQgfHwgdi5lID4gRGVjaW1hbC5tYXhFKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgICAgeC5lID0gTmFOO1xyXG4gICAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBEZWNpbWFsLm1pbkUpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5kID0gdi5kLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgIHguZCA9IHYuZCA/IHYuZC5zbGljZSgpIDogdi5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0ID0gdHlwZW9mIHY7XHJcblxyXG4gICAgICBpZiAodCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAodiA9PT0gMCkge1xyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2IDwgMCkge1xyXG4gICAgICAgICAgdiA9IC12O1xyXG4gICAgICAgICAgeC5zID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHgucyA9IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYXN0IHBhdGggZm9yIHNtYWxsIGludGVnZXJzLlxyXG4gICAgICAgIGlmICh2ID09PSB+fnYgJiYgdiA8IDFlNykge1xyXG4gICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTApIGUrKztcclxuXHJcbiAgICAgICAgICBpZiAoZXh0ZXJuYWwpIHtcclxuICAgICAgICAgICAgaWYgKGUgPiBEZWNpbWFsLm1heEUpIHtcclxuICAgICAgICAgICAgICB4LmUgPSBOYU47XHJcbiAgICAgICAgICAgICAgeC5kID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlIDwgRGVjaW1hbC5taW5FKSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgICAgICB4LmQgPSBbMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgICAgICB4LmQgPSBbdl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgIHguZCA9IFt2XTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LCBOYU4uXHJcbiAgICAgICAgfSBlbHNlIGlmICh2ICogMCAhPT0gMCkge1xyXG4gICAgICAgICAgaWYgKCF2KSB4LnMgPSBOYU47XHJcbiAgICAgICAgICB4LmUgPSBOYU47XHJcbiAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRGVjaW1hbCh4LCB2LnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0ICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHYpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBNaW51cyBzaWduP1xyXG4gICAgICBpZiAoKGkgPSB2LmNoYXJDb2RlQXQoMCkpID09PSA0NSkge1xyXG4gICAgICAgIHYgPSB2LnNsaWNlKDEpO1xyXG4gICAgICAgIHgucyA9IC0xO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFBsdXMgc2lnbj9cclxuICAgICAgICBpZiAoaSA9PT0gNDMpIHYgPSB2LnNsaWNlKDEpO1xyXG4gICAgICAgIHgucyA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBpc0RlY2ltYWwudGVzdCh2KSA/IHBhcnNlRGVjaW1hbCh4LCB2KSA6IHBhcnNlT3RoZXIoeCwgdik7XHJcbiAgICB9XHJcblxyXG4gICAgRGVjaW1hbC5wcm90b3R5cGUgPSBQO1xyXG5cclxuICAgIERlY2ltYWwuUk9VTkRfVVAgPSAwO1xyXG4gICAgRGVjaW1hbC5ST1VORF9ET1dOID0gMTtcclxuICAgIERlY2ltYWwuUk9VTkRfQ0VJTCA9IDI7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0ZMT09SID0gMztcclxuICAgIERlY2ltYWwuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRE9XTiA9IDU7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTiA9IDY7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRkxPT1IgPSA4O1xyXG4gICAgRGVjaW1hbC5FVUNMSUQgPSA5O1xyXG5cclxuICAgIERlY2ltYWwuY29uZmlnID0gRGVjaW1hbC5zZXQgPSBjb25maWc7XHJcbiAgICBEZWNpbWFsLmNsb25lID0gY2xvbmU7XHJcbiAgICBEZWNpbWFsLmlzRGVjaW1hbCA9IGlzRGVjaW1hbEluc3RhbmNlO1xyXG5cclxuICAgIERlY2ltYWwuYWJzID0gYWJzO1xyXG4gICAgRGVjaW1hbC5hY29zID0gYWNvcztcclxuICAgIERlY2ltYWwuYWNvc2ggPSBhY29zaDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5hZGQgPSBhZGQ7XHJcbiAgICBEZWNpbWFsLmFzaW4gPSBhc2luO1xyXG4gICAgRGVjaW1hbC5hc2luaCA9IGFzaW5oOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmF0YW4gPSBhdGFuO1xyXG4gICAgRGVjaW1hbC5hdGFuaCA9IGF0YW5oOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmF0YW4yID0gYXRhbjI7XHJcbiAgICBEZWNpbWFsLmNicnQgPSBjYnJ0OyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwuY2VpbCA9IGNlaWw7XHJcbiAgICBEZWNpbWFsLmNvcyA9IGNvcztcclxuICAgIERlY2ltYWwuY29zaCA9IGNvc2g7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5kaXYgPSBkaXY7XHJcbiAgICBEZWNpbWFsLmV4cCA9IGV4cDtcclxuICAgIERlY2ltYWwuZmxvb3IgPSBmbG9vcjtcclxuICAgIERlY2ltYWwuaHlwb3QgPSBoeXBvdDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5sbiA9IGxuO1xyXG4gICAgRGVjaW1hbC5sb2cgPSBsb2c7XHJcbiAgICBEZWNpbWFsLmxvZzEwID0gbG9nMTA7ICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwubG9nMiA9IGxvZzI7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5tYXggPSBtYXg7XHJcbiAgICBEZWNpbWFsLm1pbiA9IG1pbjtcclxuICAgIERlY2ltYWwubW9kID0gbW9kO1xyXG4gICAgRGVjaW1hbC5tdWwgPSBtdWw7XHJcbiAgICBEZWNpbWFsLnBvdyA9IHBvdztcclxuICAgIERlY2ltYWwucmFuZG9tID0gcmFuZG9tO1xyXG4gICAgRGVjaW1hbC5yb3VuZCA9IHJvdW5kO1xyXG4gICAgRGVjaW1hbC5zaWduID0gc2lnbjsgICAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLnNpbiA9IHNpbjtcclxuICAgIERlY2ltYWwuc2luaCA9IHNpbmg7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5zcXJ0ID0gc3FydDtcclxuICAgIERlY2ltYWwuc3ViID0gc3ViO1xyXG4gICAgRGVjaW1hbC50YW4gPSB0YW47XHJcbiAgICBEZWNpbWFsLnRhbmggPSB0YW5oOyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwudHJ1bmMgPSB0cnVuYzsgICAgICAgIC8vIEVTNlxyXG5cclxuICAgIGlmIChvYmogPT09IHZvaWQgMCkgb2JqID0ge307XHJcbiAgICBpZiAob2JqKSB7XHJcbiAgICAgIGlmIChvYmouZGVmYXVsdHMgIT09IHRydWUpIHtcclxuICAgICAgICBwcyA9IFsncHJlY2lzaW9uJywgJ3JvdW5kaW5nJywgJ3RvRXhwTmVnJywgJ3RvRXhwUG9zJywgJ21heEUnLCAnbWluRScsICdtb2R1bG8nLCAnY3J5cHRvJ107XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBzLmxlbmd0aDspIGlmICghb2JqLmhhc093blByb3BlcnR5KHAgPSBwc1tpKytdKSkgb2JqW3BdID0gdGhpc1twXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIERlY2ltYWwuY29uZmlnKG9iaik7XHJcblxyXG4gICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgZGl2aWRlZCBieSBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGRpdih4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuZGl2KHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIHBvd2VyIHRvIHdoaWNoIHRvIHJhaXNlIHRoZSBiYXNlIG9mIHRoZSBuYXR1cmFsIGxvZy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGV4cCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuZXhwKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmQgdG8gYW4gaW50ZWdlciB1c2luZyBgUk9VTkRfRkxPT1JgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gZmxvb3IoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHN1bSBvZiB0aGUgc3F1YXJlcyBvZiB0aGUgYXJndW1lbnRzLFxyXG4gICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIGh5cG90KGEsIGIsIC4uLikgPSBzcXJ0KGFeMiArIGJeMiArIC4uLilcclxuICAgKlxyXG4gICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaHlwb3QoKSB7XHJcbiAgICB2YXIgaSwgbixcclxuICAgICAgdCA9IG5ldyB0aGlzKDApO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7KSB7XHJcbiAgICAgIG4gPSBuZXcgdGhpcyhhcmd1bWVudHNbaSsrXSk7XHJcbiAgICAgIGlmICghbi5kKSB7XHJcbiAgICAgICAgaWYgKG4ucykge1xyXG4gICAgICAgICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKDEgLyAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdCA9IG47XHJcbiAgICAgIH0gZWxzZSBpZiAodC5kKSB7XHJcbiAgICAgICAgdCA9IHQucGx1cyhuLnRpbWVzKG4pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdC5zcXJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaXMgYSBEZWNpbWFsIGluc3RhbmNlICh3aGVyZSBEZWNpbWFsIGlzIGFueSBEZWNpbWFsIGNvbnN0cnVjdG9yKSxcclxuICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaXNEZWNpbWFsSW5zdGFuY2Uob2JqKSB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRGVjaW1hbCB8fCBvYmogJiYgb2JqLm5hbWUgPT09ICdbb2JqZWN0IERlY2ltYWxdJyB8fCBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbG4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbG9nIG9mIGB4YCB0byB0aGUgYmFzZSBgeWAsIG9yIHRvIGJhc2UgMTAgaWYgbm8gYmFzZVxyXG4gICAqIGlzIHNwZWNpZmllZCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogbG9nW3ldKHgpXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBhcmd1bWVudCBvZiB0aGUgbG9nYXJpdGhtLlxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIGJhc2Ugb2YgdGhlIGxvZ2FyaXRobS5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZyh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkubG9nKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGJhc2UgMiBsb2dhcml0aG0gb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZzIoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZygyKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbG9nMTAoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZygxMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtYXgoKSB7XHJcbiAgICByZXR1cm4gbWF4T3JNaW4odGhpcywgYXJndW1lbnRzLCAnbHQnKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1pbigpIHtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLCBhcmd1bWVudHMsICdndCcpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG1vZHVsbyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1vZCh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkubW9kKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG11bHRpcGxpZWQgYnkgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtdWwoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLm11bCh5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCByYWlzZWQgdG8gdGhlIHBvd2VyIGB5YCwgcm91bmRlZCB0byBwcmVjaXNpb25cclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgYmFzZS5cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBleHBvbmVudC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBvdyh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkucG93KHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJucyBhIG5ldyBEZWNpbWFsIHdpdGggYSByYW5kb20gdmFsdWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxLCBhbmQgd2l0aFxyXG4gICAqIGBzZGAsIG9yIGBEZWNpbWFsLnByZWNpc2lvbmAgaWYgYHNkYCBpcyBvbWl0dGVkLCBzaWduaWZpY2FudCBkaWdpdHMgKG9yIGxlc3MgaWYgdHJhaWxpbmcgemVyb3NcclxuICAgKiBhcmUgcHJvZHVjZWQpLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDAgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiByYW5kb20oc2QpIHtcclxuICAgIHZhciBkLCBlLCBrLCBuLFxyXG4gICAgICBpID0gMCxcclxuICAgICAgciA9IG5ldyB0aGlzKDEpLFxyXG4gICAgICByZCA9IFtdO1xyXG5cclxuICAgIGlmIChzZCA9PT0gdm9pZCAwKSBzZCA9IHRoaXMucHJlY2lzaW9uO1xyXG4gICAgZWxzZSBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICBrID0gTWF0aC5jZWlsKHNkIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIGlmICghdGhpcy5jcnlwdG8pIHtcclxuICAgICAgZm9yICg7IGkgPCBrOykgcmRbaSsrXSA9IE1hdGgucmFuZG9tKCkgKiAxZTcgfCAwO1xyXG5cclxuICAgIC8vIEJyb3dzZXJzIHN1cHBvcnRpbmcgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5cclxuICAgIH0gZWxzZSBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG4gICAgICBkID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoaykpO1xyXG5cclxuICAgICAgZm9yICg7IGkgPCBrOykge1xyXG4gICAgICAgIG4gPSBkW2ldO1xyXG5cclxuICAgICAgICAvLyAwIDw9IG4gPCA0Mjk0OTY3Mjk2XHJcbiAgICAgICAgLy8gUHJvYmFiaWxpdHkgbiA+PSA0LjI5ZTksIGlzIDQ5NjcyOTYgLyA0Mjk0OTY3Mjk2ID0gMC4wMDExNiAoMSBpbiA4NjUpLlxyXG4gICAgICAgIGlmIChuID49IDQuMjllOSkge1xyXG4gICAgICAgICAgZFtpXSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIDAgPD0gbiA8PSA0Mjg5OTk5OTk5XHJcbiAgICAgICAgICAvLyAwIDw9IChuICUgMWU3KSA8PSA5OTk5OTk5XHJcbiAgICAgICAgICByZFtpKytdID0gbiAlIDFlNztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBOb2RlLmpzIHN1cHBvcnRpbmcgY3J5cHRvLnJhbmRvbUJ5dGVzLlxyXG4gICAgfSBlbHNlIGlmIChjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcclxuXHJcbiAgICAgIC8vIGJ1ZmZlclxyXG4gICAgICBkID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGsgKj0gNCk7XHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgIC8vIDAgPD0gbiA8IDIxNDc0ODM2NDhcclxuICAgICAgICBuID0gZFtpXSArIChkW2kgKyAxXSA8PCA4KSArIChkW2kgKyAyXSA8PCAxNikgKyAoKGRbaSArIDNdICYgMHg3ZikgPDwgMjQpO1xyXG5cclxuICAgICAgICAvLyBQcm9iYWJpbGl0eSBuID49IDIuMTRlOSwgaXMgNzQ4MzY0OCAvIDIxNDc0ODM2NDggPSAwLjAwMzUgKDEgaW4gMjg2KS5cclxuICAgICAgICBpZiAobiA+PSAyLjE0ZTkpIHtcclxuICAgICAgICAgIGNyeXB0by5yYW5kb21CeXRlcyg0KS5jb3B5KGQsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gMCA8PSBuIDw9IDIxMzk5OTk5OTlcclxuICAgICAgICAgIC8vIDAgPD0gKG4gJSAxZTcpIDw9IDk5OTk5OTlcclxuICAgICAgICAgIHJkLnB1c2gobiAlIDFlNyk7XHJcbiAgICAgICAgICBpICs9IDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpID0gayAvIDQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihjcnlwdG9VbmF2YWlsYWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgayA9IHJkWy0taV07XHJcbiAgICBzZCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRyYWlsaW5nIGRpZ2l0cyB0byB6ZXJvcyBhY2NvcmRpbmcgdG8gc2QuXHJcbiAgICBpZiAoayAmJiBzZCkge1xyXG4gICAgICBuID0gbWF0aHBvdygxMCwgTE9HX0JBU0UgLSBzZCk7XHJcbiAgICAgIHJkW2ldID0gKGsgLyBuIHwgMCkgKiBuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB3b3JkcyB3aGljaCBhcmUgemVyby5cclxuICAgIGZvciAoOyByZFtpXSA9PT0gMDsgaS0tKSByZC5wb3AoKTtcclxuXHJcbiAgICAvLyBaZXJvP1xyXG4gICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgIGUgPSAwO1xyXG4gICAgICByZCA9IFswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGUgPSAtMTtcclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHdvcmRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgIGZvciAoOyByZFswXSA9PT0gMDsgZSAtPSBMT0dfQkFTRSkgcmQuc2hpZnQoKTtcclxuXHJcbiAgICAgIC8vIENvdW50IHRoZSBkaWdpdHMgb2YgdGhlIGZpcnN0IHdvcmQgb2YgcmQgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoayA9IDEsIG4gPSByZFswXTsgbiA+PSAxMDsgbiAvPSAxMCkgaysrO1xyXG5cclxuICAgICAgLy8gQWRqdXN0IHRoZSBleHBvbmVudCBmb3IgbGVhZGluZyB6ZXJvcyBvZiB0aGUgZmlyc3Qgd29yZCBvZiByZC5cclxuICAgICAgaWYgKGsgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGs7XHJcbiAgICB9XHJcblxyXG4gICAgci5lID0gZTtcclxuICAgIHIuZCA9IHJkO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIHJvdW5kZWQgdG8gYW4gaW50ZWdlciB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBUbyBlbXVsYXRlIGBNYXRoLnJvdW5kYCwgc2V0IHJvdW5kaW5nIHRvIDcgKFJPVU5EX0hBTEZfQ0VJTCkuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiByb3VuZCh4KSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCA9IG5ldyB0aGlzKHgpLCB4LmUgKyAxLCB0aGlzLnJvdW5kaW5nKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVyblxyXG4gICAqICAgMSAgICBpZiB4ID4gMCxcclxuICAgKiAgLTEgICAgaWYgeCA8IDAsXHJcbiAgICogICAwICAgIGlmIHggaXMgMCxcclxuICAgKiAgLTAgICAgaWYgeCBpcyAtMCxcclxuICAgKiAgIE5hTiAgb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzaWduKHgpIHtcclxuICAgIHggPSBuZXcgdGhpcyh4KTtcclxuICAgIHJldHVybiB4LmQgPyAoeC5kWzBdID8geC5zIDogMCAqIHgucykgOiB4LnMgfHwgTmFOO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zaW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuc2luaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzcXJ0KHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zcXJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgbWludXMgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzdWIoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnN1Yih5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRhbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkudGFuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRhbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnRhbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRydW5jKHgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZSh4ID0gbmV3IHRoaXMoeCksIHguZSArIDEsIDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENyZWF0ZSBhbmQgY29uZmlndXJlIGluaXRpYWwgRGVjaW1hbCBjb25zdHJ1Y3Rvci5cclxuICBEZWNpbWFsID0gY2xvbmUoREVGQVVMVFMpO1xyXG5cclxuICBEZWNpbWFsWydkZWZhdWx0J10gPSBEZWNpbWFsLkRlY2ltYWwgPSBEZWNpbWFsO1xyXG5cclxuICAvLyBDcmVhdGUgdGhlIGludGVybmFsIGNvbnN0YW50cyBmcm9tIHRoZWlyIHN0cmluZyB2YWx1ZXMuXHJcbiAgTE4xMCA9IG5ldyBEZWNpbWFsKExOMTApO1xyXG4gIFBJID0gbmV3IERlY2ltYWwoUEkpO1xyXG5cclxuXHJcbiAgLy8gRXhwb3J0LlxyXG5cclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgICB9KTtcclxuXHJcbiAgLy8gTm9kZSBhbmQgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cy5cclxuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJykge1xyXG4gICAgICBQW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gUC50b1N0cmluZztcclxuICAgICAgUFtTeW1ib2wudG9TdHJpbmdUYWddID0gJ0RlY2ltYWwnO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gRGVjaW1hbDtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxTY29wZSkge1xyXG4gICAgICBnbG9iYWxTY29wZSA9IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYgJiYgc2VsZi5zZWxmID09IHNlbGYgPyBzZWxmIDogd2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIG5vQ29uZmxpY3QgPSBnbG9iYWxTY29wZS5EZWNpbWFsO1xyXG4gICAgRGVjaW1hbC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBnbG9iYWxTY29wZS5EZWNpbWFsID0gbm9Db25mbGljdDtcclxuICAgICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgICB9O1xyXG5cclxuICAgIGdsb2JhbFNjb3BlLkRlY2ltYWwgPSBEZWNpbWFsO1xyXG4gIH1cclxufSkodGhpcyk7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBNYXAgdGhlIGNoYXJhY3RlcnMgdG8gZXNjYXBlIHRvIHRoZWlyIGVzY2FwZWQgdmFsdWVzLiBUaGUgbGlzdCBpcyBkZXJpdmVkXG4vLyBmcm9tIGh0dHA6Ly93d3cuY2VzcGVkZXMub3JnL2Jsb2cvODUvaG93LXRvLWVzY2FwZS1sYXRleC1zcGVjaWFsLWNoYXJhY3RlcnNcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIGRlZmF1bHRFc2NhcGVzID0ge1xuICBcIntcIjogXCJcXFxce1wiLFxuICBcIn1cIjogXCJcXFxcfVwiLFxuICBcIlxcXFxcIjogXCJcXFxcdGV4dGJhY2tzbGFzaHt9XCIsXG4gIFwiI1wiOiBcIlxcXFwjXCIsXG4gICQ6IFwiXFxcXCRcIixcbiAgXCIlXCI6IFwiXFxcXCVcIixcbiAgXCImXCI6IFwiXFxcXCZcIixcbiAgXCJeXCI6IFwiXFxcXHRleHRhc2NpaWNpcmN1bXt9XCIsXG4gIF86IFwiXFxcXF9cIixcbiAgXCJ+XCI6IFwiXFxcXHRleHRhc2NpaXRpbGRle31cIlxufTtcbnZhciBmb3JtYXRFc2NhcGVzID0ge1xuICBcIlxcdTIwMTNcIjogXCJcXFxcLS1cIixcbiAgXCJcXHUyMDE0XCI6IFwiXFxcXC0tLVwiLFxuICBcIiBcIjogXCJ+XCIsXG4gIFwiXFx0XCI6IFwiXFxcXHFxdWFke31cIixcbiAgXCJcXHJcXG5cIjogXCJcXFxcbmV3bGluZXt9XCIsXG4gIFwiXFxuXCI6IFwiXFxcXG5ld2xpbmV7fVwiXG59O1xuXG52YXIgZGVmYXVsdEVzY2FwZU1hcEZuID0gZnVuY3Rpb24gZGVmYXVsdEVzY2FwZU1hcEZuKGRlZmF1bHRFc2NhcGVzLCBmb3JtYXRFc2NhcGVzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgZGVmYXVsdEVzY2FwZXMsIGZvcm1hdEVzY2FwZXMpO1xufTtcblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBMYVRlWCBkb2N1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gYmUgZXNjYXBlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLnByZXNlcnZlRm9ybWF0dGluZyB3aGV0aGVyIGZvcm1hdHRpbmcgZXNjYXBlcyBzaG91bGRcbiAqICBiZSBwZXJmb3JtZWQgKGRlZmF1bHQ6IGZhbHNlKS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtcy5lc2NhcGVNYXBGbiB0aGUgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBlc2NhcGUgbWFwcy5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIExhVGVYLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpID0gX3JlZi5wcmVzZXJ2ZUZvcm1hdHRpbmcsXG4gICAgICBwcmVzZXJ2ZUZvcm1hdHRpbmcgPSBfcmVmJHByZXNlcnZlRm9ybWF0dGkgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpLFxuICAgICAgX3JlZiRlc2NhcGVNYXBGbiA9IF9yZWYuZXNjYXBlTWFwRm4sXG4gICAgICBlc2NhcGVNYXBGbiA9IF9yZWYkZXNjYXBlTWFwRm4gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRFc2NhcGVNYXBGbiA6IF9yZWYkZXNjYXBlTWFwRm47XG5cbiAgdmFyIHJ1bm5pbmdTdHIgPSBTdHJpbmcoc3RyKTtcbiAgdmFyIHJlc3VsdCA9IFwiXCI7XG5cbiAgdmFyIGVzY2FwZXMgPSBlc2NhcGVNYXBGbihfZXh0ZW5kcyh7fSwgZGVmYXVsdEVzY2FwZXMpLCBwcmVzZXJ2ZUZvcm1hdHRpbmcgPyBfZXh0ZW5kcyh7fSwgZm9ybWF0RXNjYXBlcykgOiB7fSk7XG4gIHZhciBlc2NhcGVLZXlzID0gT2JqZWN0LmtleXMoZXNjYXBlcyk7IC8vIGFzIGl0IGlzIHJldXNlZCBsYXRlciBvblxuXG4gIC8vIEFsZ29yaXRobTogR28gdGhyb3VnaCB0aGUgc3RyaW5nIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIsIGlmIGl0IG1hdGNoZXNcbiAgLy8gd2l0aCBvbmUgb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGVuIHdlJ2xsIHJlcGxhY2UgaXQgd2l0aCB0aGUgZXNjYXBlZFxuICAvLyB2ZXJzaW9uLlxuXG4gIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgIHZhciBzcGVjaWFsQ2hhckZvdW5kID0gZmFsc2U7XG4gICAgZXNjYXBlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXksIGluZGV4KSB7XG4gICAgICBpZiAoc3BlY2lhbENoYXJGb3VuZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocnVubmluZ1N0ci5sZW5ndGggPj0ga2V5Lmxlbmd0aCAmJiBydW5uaW5nU3RyLnNsaWNlKDAsIGtleS5sZW5ndGgpID09PSBrZXkpIHtcbiAgICAgICAgcmVzdWx0ICs9IGVzY2FwZXNbZXNjYXBlS2V5c1tpbmRleF1dO1xuICAgICAgICBydW5uaW5nU3RyID0gcnVubmluZ1N0ci5zbGljZShrZXkubGVuZ3RoLCBydW5uaW5nU3RyLmxlbmd0aCk7XG4gICAgICAgIHNwZWNpYWxDaGFyRm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghc3BlY2lhbENoYXJGb3VuZCkge1xuICAgICAgcmVzdWx0ICs9IHJ1bm5pbmdTdHIuc2xpY2UoMCwgMSk7XG4gICAgICBydW5uaW5nU3RyID0gcnVubmluZ1N0ci5zbGljZSgxLCBydW5uaW5nU3RyLmxlbmd0aCk7XG4gICAgfVxuICB9O1xuXG4gIHdoaWxlIChydW5uaW5nU3RyKSB7XG4gICAgX2xvb3AoKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTsiLCIvKipcbiAqIEBsaWNlbnNlIEZyYWN0aW9uLmpzIHY0LjAuMTIgMDkvMDkvMjAxNVxuICogaHR0cDovL3d3dy54YXJnLm9yZy8yMDE0LzAzL3JhdGlvbmFsLW51bWJlcnMtaW4tamF2YXNjcmlwdC9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZylcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICoqL1xuXG5cbi8qKlxuICpcbiAqIFRoaXMgY2xhc3Mgb2ZmZXJzIHRoZSBwb3NzaWJpbGl0eSB0byBjYWxjdWxhdGUgZnJhY3Rpb25zLlxuICogWW91IGNhbiBwYXNzIGEgZnJhY3Rpb24gaW4gZGlmZmVyZW50IGZvcm1hdHMuIEVpdGhlciBhcyBhcnJheSwgYXMgZG91YmxlLCBhcyBzdHJpbmcgb3IgYXMgYW4gaW50ZWdlci5cbiAqXG4gKiBBcnJheS9PYmplY3QgZm9ybVxuICogWyAwID0+IDxub21pbmF0b3I+LCAxID0+IDxkZW5vbWluYXRvcj4gXVxuICogWyBuID0+IDxub21pbmF0b3I+LCBkID0+IDxkZW5vbWluYXRvcj4gXVxuICpcbiAqIEludGVnZXIgZm9ybVxuICogLSBTaW5nbGUgaW50ZWdlciB2YWx1ZVxuICpcbiAqIERvdWJsZSBmb3JtXG4gKiAtIFNpbmdsZSBkb3VibGUgdmFsdWVcbiAqXG4gKiBTdHJpbmcgZm9ybVxuICogMTIzLjQ1NiAtIGEgc2ltcGxlIGRvdWJsZVxuICogMTIzLzQ1NiAtIGEgc3RyaW5nIGZyYWN0aW9uXG4gKiAxMjMuJzQ1NicgLSBhIGRvdWJsZSB3aXRoIHJlcGVhdGluZyBkZWNpbWFsIHBsYWNlc1xuICogMTIzLig0NTYpIC0gc3lub255bVxuICogMTIzLjQ1JzYnIC0gYSBkb3VibGUgd2l0aCByZXBlYXRpbmcgbGFzdCBwbGFjZVxuICogMTIzLjQ1KDYpIC0gc3lub255bVxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogdmFyIGYgPSBuZXcgRnJhY3Rpb24oXCI5LjQnMzEnXCIpO1xuICogZi5tdWwoWy00LCAzXSkuZGl2KDQuOSk7XG4gKlxuICovXG5cbihmdW5jdGlvbihyb290KSB7XG5cbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgLy8gTWF4aW11bSBzZWFyY2ggZGVwdGggZm9yIGN5Y2xpYyByYXRpb25hbCBudW1iZXJzLiAyMDAwIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoLlxuICAvLyBFeGFtcGxlOiAxLzcgPSAwLigxNDI4NTcpIGhhcyA2IHJlcGVhdGluZyBkZWNpbWFsIHBsYWNlcy5cbiAgLy8gSWYgTUFYX0NZQ0xFX0xFTiBnZXRzIHJlZHVjZWQsIGxvbmcgY3ljbGVzIHdpbGwgbm90IGJlIGRldGVjdGVkIGFuZCB0b1N0cmluZygpIG9ubHkgZ2V0cyB0aGUgZmlyc3QgMTAgZGlnaXRzXG4gIHZhciBNQVhfQ1lDTEVfTEVOID0gMjAwMDtcblxuICAvLyBQYXJzZWQgZGF0YSB0byBhdm9pZCBjYWxsaW5nIFwibmV3XCIgYWxsIHRoZSB0aW1lXG4gIHZhciBQID0ge1xuICAgIFwic1wiOiAxLFxuICAgIFwiblwiOiAwLFxuICAgIFwiZFwiOiAxXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobmFtZSkge1xuXG4gICAgZnVuY3Rpb24gZXJyb3JDb25zdHJ1Y3RvcigpIHtcbiAgICAgIHZhciB0ZW1wID0gRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHRlbXBbJ25hbWUnXSA9IHRoaXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgICB0aGlzWydzdGFjayddID0gdGVtcFsnc3RhY2snXTtcbiAgICAgIHRoaXNbJ21lc3NhZ2UnXSA9IHRlbXBbJ21lc3NhZ2UnXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFcnJvciBjb25zdHJ1Y3RvclxuICAgICAqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gSW50ZXJtZWRpYXRlSW5oZXJpdG9yKCkge31cbiAgICBJbnRlcm1lZGlhdGVJbmhlcml0b3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuICAgIGVycm9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IEludGVybWVkaWF0ZUluaGVyaXRvcigpO1xuXG4gICAgcmV0dXJuIGVycm9yQ29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgRGl2aXNpb25CeVplcm8gPSBGcmFjdGlvblsnRGl2aXNpb25CeVplcm8nXSA9IGNyZWF0ZUVycm9yKCdEaXZpc2lvbkJ5WmVybycpO1xuICB2YXIgSW52YWxpZFBhcmFtZXRlciA9IEZyYWN0aW9uWydJbnZhbGlkUGFyYW1ldGVyJ10gPSBjcmVhdGVFcnJvcignSW52YWxpZFBhcmFtZXRlcicpO1xuXG4gIGZ1bmN0aW9uIGFzc2lnbihuLCBzKSB7XG5cbiAgICBpZiAoaXNOYU4obiA9IHBhcnNlSW50KG4sIDEwKSkpIHtcbiAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG4gICAgfVxuICAgIHJldHVybiBuICogcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRocm93SW52YWxpZFBhcmFtKCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyKCk7XG4gIH1cblxuICB2YXIgcGFyc2UgPSBmdW5jdGlvbihwMSwgcDIpIHtcblxuICAgIHZhciBuID0gMCwgZCA9IDEsIHMgPSAxO1xuICAgIHZhciB2ID0gMCwgdyA9IDAsIHggPSAwLCB5ID0gMSwgeiA9IDE7XG5cbiAgICB2YXIgQSA9IDAsIEIgPSAxO1xuICAgIHZhciBDID0gMSwgRCA9IDE7XG5cbiAgICB2YXIgTiA9IDEwMDAwMDAwO1xuICAgIHZhciBNO1xuXG4gICAgaWYgKHAxID09PSB1bmRlZmluZWQgfHwgcDEgPT09IG51bGwpIHtcbiAgICAgIC8qIHZvaWQgKi9cbiAgICB9IGVsc2UgaWYgKHAyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG4gPSBwMTtcbiAgICAgIGQgPSBwMjtcbiAgICAgIHMgPSBuICogZDtcbiAgICB9IGVsc2VcbiAgICAgIHN3aXRjaCAodHlwZW9mIHAxKSB7XG5cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKFwiZFwiIGluIHAxICYmIFwiblwiIGluIHAxKSB7XG4gICAgICAgICAgICBuID0gcDFbXCJuXCJdO1xuICAgICAgICAgICAgZCA9IHAxW1wiZFwiXTtcbiAgICAgICAgICAgIGlmIChcInNcIiBpbiBwMSlcbiAgICAgICAgICAgICAgbiAqPSBwMVtcInNcIl07XG4gICAgICAgICAgfSBlbHNlIGlmICgwIGluIHAxKSB7XG4gICAgICAgICAgICBuID0gcDFbMF07XG4gICAgICAgICAgICBpZiAoMSBpbiBwMSlcbiAgICAgICAgICAgICAgZCA9IHAxWzFdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd0ludmFsaWRQYXJhbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzID0gbiAqIGQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHAxIDwgMCkge1xuICAgICAgICAgICAgcyA9IHAxO1xuICAgICAgICAgICAgcDEgPSAtcDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHAxICUgMSA9PT0gMCkge1xuICAgICAgICAgICAgbiA9IHAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAocDEgPiAwKSB7IC8vIGNoZWNrIGZvciAhPSAwLCBzY2FsZSB3b3VsZCBiZWNvbWUgTmFOIChsb2coMCkpLCB3aGljaCBjb252ZXJnZXMgcmVhbGx5IHNsb3dcblxuICAgICAgICAgICAgaWYgKHAxID49IDEpIHtcbiAgICAgICAgICAgICAgeiA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKDEgKyBNYXRoLmxvZyhwMSkgLyBNYXRoLkxOMTApKTtcbiAgICAgICAgICAgICAgcDEgLz0gejtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXNpbmcgRmFyZXkgU2VxdWVuY2VzXG4gICAgICAgICAgICAvLyBodHRwOi8vd3d3LmpvaG5kY29vay5jb20vYmxvZy8yMDEwLzEwLzIwL2Jlc3QtcmF0aW9uYWwtYXBwcm94aW1hdGlvbi9cblxuICAgICAgICAgICAgd2hpbGUgKEIgPD0gTiAmJiBEIDw9IE4pIHtcbiAgICAgICAgICAgICAgTSA9IChBICsgQykgLyAoQiArIEQpO1xuXG4gICAgICAgICAgICAgIGlmIChwMSA9PT0gTSkge1xuICAgICAgICAgICAgICAgIGlmIChCICsgRCA8PSBOKSB7XG4gICAgICAgICAgICAgICAgICBuID0gQSArIEM7XG4gICAgICAgICAgICAgICAgICBkID0gQiArIEQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChEID4gQikge1xuICAgICAgICAgICAgICAgICAgbiA9IEM7XG4gICAgICAgICAgICAgICAgICBkID0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbiA9IEE7XG4gICAgICAgICAgICAgICAgICBkID0gQjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGlmIChwMSA+IE0pIHtcbiAgICAgICAgICAgICAgICAgIEEgKz0gQztcbiAgICAgICAgICAgICAgICAgIEIgKz0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQyArPSBBO1xuICAgICAgICAgICAgICAgICAgRCArPSBCO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChCID4gTikge1xuICAgICAgICAgICAgICAgICAgbiA9IEM7XG4gICAgICAgICAgICAgICAgICBkID0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbiA9IEE7XG4gICAgICAgICAgICAgICAgICBkID0gQjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG4gKj0gejtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHAxKSB8fCBpc05hTihwMikpIHtcbiAgICAgICAgICAgIGQgPSBuID0gTmFOO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBCID0gcDEubWF0Y2goL1xcZCt8Li9nKTtcblxuICAgICAgICAgIGlmIChCID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3dJbnZhbGlkUGFyYW0oKTtcblxuICAgICAgICAgIGlmIChCW0FdID09PSAnLScpIHsvLyBDaGVjayBmb3IgbWludXMgc2lnbiBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgICBzID0gLTE7XG4gICAgICAgICAgICBBKys7XG4gICAgICAgICAgfSBlbHNlIGlmIChCW0FdID09PSAnKycpIHsvLyBDaGVjayBmb3IgcGx1cyBzaWduIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICAgIEErKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQi5sZW5ndGggPT09IEEgKyAxKSB7IC8vIENoZWNrIGlmIGl0J3MganVzdCBhIHNpbXBsZSBudW1iZXIgXCIxMjM0XCJcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBKytdLCBzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDFdID09PSAnLicgfHwgQltBXSA9PT0gJy4nKSB7IC8vIENoZWNrIGlmIGl0J3MgYSBkZWNpbWFsIG51bWJlclxuXG4gICAgICAgICAgICBpZiAoQltBXSAhPT0gJy4nKSB7IC8vIEhhbmRsZSAwLjUgYW5kIC41XG4gICAgICAgICAgICAgIHYgPSBhc3NpZ24oQltBKytdLCBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEErKztcblxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGRlY2ltYWwgcGxhY2VzXG4gICAgICAgICAgICBpZiAoQSArIDEgPT09IEIubGVuZ3RoIHx8IEJbQSArIDFdID09PSAnKCcgJiYgQltBICsgM10gPT09ICcpJyB8fCBCW0EgKyAxXSA9PT0gXCInXCIgJiYgQltBICsgM10gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7XG4gICAgICAgICAgICAgIHkgPSBNYXRoLnBvdygxMCwgQltBXS5sZW5ndGgpO1xuICAgICAgICAgICAgICBBKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciByZXBlYXRpbmcgcGxhY2VzXG4gICAgICAgICAgICBpZiAoQltBXSA9PT0gJygnICYmIEJbQSArIDJdID09PSAnKScgfHwgQltBXSA9PT0gXCInXCIgJiYgQltBICsgMl0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgIHggPSBhc3NpZ24oQltBICsgMV0sIHMpO1xuICAgICAgICAgICAgICB6ID0gTWF0aC5wb3coMTAsIEJbQSArIDFdLmxlbmd0aCkgLSAxO1xuICAgICAgICAgICAgICBBICs9IDM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDFdID09PSAnLycgfHwgQltBICsgMV0gPT09ICc6JykgeyAvLyBDaGVjayBmb3IgYSBzaW1wbGUgZnJhY3Rpb24gXCIxMjMvNDU2XCIgb3IgXCIxMjM6NDU2XCJcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7XG4gICAgICAgICAgICB5ID0gYXNzaWduKEJbQSArIDJdLCAxKTtcbiAgICAgICAgICAgIEEgKz0gMztcbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDNdID09PSAnLycgJiYgQltBICsgMV0gPT09ICcgJykgeyAvLyBDaGVjayBmb3IgYSBjb21wbGV4IGZyYWN0aW9uIFwiMTIzIDEvMlwiXG4gICAgICAgICAgICB2ID0gYXNzaWduKEJbQV0sIHMpO1xuICAgICAgICAgICAgdyA9IGFzc2lnbihCW0EgKyAyXSwgcyk7XG4gICAgICAgICAgICB5ID0gYXNzaWduKEJbQSArIDRdLCAxKTtcbiAgICAgICAgICAgIEEgKz0gNTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQi5sZW5ndGggPD0gQSkgeyAvLyBDaGVjayBmb3IgbW9yZSB0b2tlbnMgb24gdGhlIHN0YWNrXG4gICAgICAgICAgICBkID0geSAqIHo7XG4gICAgICAgICAgICBzID0gLyogdm9pZCAqL1xuICAgICAgICAgICAgICAgICAgICBuID0geCArIGQgKiB2ICsgeiAqIHc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggb24gZXJyb3IgKi9cbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG4gICAgICB9XG5cbiAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IERpdmlzaW9uQnlaZXJvKCk7XG4gICAgfVxuXG4gICAgUFtcInNcIl0gPSBzIDwgMCA/IC0xIDogMTtcbiAgICBQW1wiblwiXSA9IE1hdGguYWJzKG4pO1xuICAgIFBbXCJkXCJdID0gTWF0aC5hYnMoZCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbW9kcG93KGIsIGUsIG0pIHtcblxuICAgIHZhciByID0gMTtcbiAgICBmb3IgKDsgZSA+IDA7IGIgPSAoYiAqIGIpICUgbSwgZSA+Pj0gMSkge1xuXG4gICAgICBpZiAoZSAmIDEpIHtcbiAgICAgICAgciA9IChyICogYikgJSBtO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gY3ljbGVMZW4obiwgZCkge1xuXG4gICAgZm9yICg7IGQgJSAyID09PSAwO1xuICAgICAgICAgICAgZCAvPSAyKSB7XG4gICAgfVxuXG4gICAgZm9yICg7IGQgJSA1ID09PSAwO1xuICAgICAgICAgICAgZCAvPSA1KSB7XG4gICAgfVxuXG4gICAgaWYgKGQgPT09IDEpIC8vIENhdGNoIG5vbi1jeWNsaWMgbnVtYmVyc1xuICAgICAgcmV0dXJuIDA7XG5cbiAgICAvLyBJZiB3ZSB3b3VsZCBsaWtlIHRvIGNvbXB1dGUgcmVhbGx5IGxhcmdlIG51bWJlcnMgcXVpY2tlciwgd2UgY291bGQgbWFrZSB1c2Ugb2YgRmVybWF0J3MgbGl0dGxlIHRoZW9yZW06XG4gICAgLy8gMTBeKGQtMSkgJSBkID09IDFcbiAgICAvLyBIb3dldmVyLCB3ZSBkb24ndCBuZWVkIHN1Y2ggbGFyZ2UgbnVtYmVycyBhbmQgTUFYX0NZQ0xFX0xFTiBzaG91bGQgYmUgdGhlIGNhcHN0b25lLFxuICAgIC8vIGFzIHdlIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSBudW1iZXJzIHRvIHN0cmluZ3MuXG5cbiAgICB2YXIgcmVtID0gMTAgJSBkO1xuICAgIHZhciB0ID0gMTtcblxuICAgIGZvciAoOyByZW0gIT09IDE7IHQrKykge1xuICAgICAgcmVtID0gcmVtICogMTAgJSBkO1xuXG4gICAgICBpZiAodCA+IE1BWF9DWUNMRV9MRU4pXG4gICAgICAgIHJldHVybiAwOyAvLyBSZXR1cm5pbmcgMCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3QgcHJpbnQgaXQgYXMgYSBjeWNsaWMgbnVtYmVyLiBJdCdzIGxpa2VseSB0aGF0IHRoZSBhbnN3ZXIgaXMgYGQtMWBcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG4gIH1cblxuXG4gICAgIGZ1bmN0aW9uIGN5Y2xlU3RhcnQobiwgZCwgbGVuKSB7XG5cbiAgICB2YXIgcmVtMSA9IDE7XG4gICAgdmFyIHJlbTIgPSBtb2Rwb3coMTAsIGxlbiwgZCk7XG5cbiAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDMwMDsgdCsrKSB7IC8vIHMgPCB+bG9nMTAoTnVtYmVyLk1BWF9WQUxVRSlcbiAgICAgIC8vIFNvbHZlIDEwXnMgPT0gMTBeKHMrdCkgKG1vZCBkKVxuXG4gICAgICBpZiAocmVtMSA9PT0gcmVtMilcbiAgICAgICAgcmV0dXJuIHQ7XG5cbiAgICAgIHJlbTEgPSByZW0xICogMTAgJSBkO1xuICAgICAgcmVtMiA9IHJlbTIgKiAxMCAlIGQ7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2NkKGEsIGIpIHtcblxuICAgIGlmICghYSlcbiAgICAgIHJldHVybiBiO1xuICAgIGlmICghYilcbiAgICAgIHJldHVybiBhO1xuXG4gICAgd2hpbGUgKDEpIHtcbiAgICAgIGEgJT0gYjtcbiAgICAgIGlmICghYSlcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgICBiICU9IGE7XG4gICAgICBpZiAoIWIpXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTW9kdWxlIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge251bWJlcnxGcmFjdGlvbj19IGFcbiAgICogQHBhcmFtIHtudW1iZXI9fSBiXG4gICAqL1xuICBmdW5jdGlvbiBGcmFjdGlvbihhLCBiKSB7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnJhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKGEsIGIpO1xuICAgIH1cblxuICAgIHBhcnNlKGEsIGIpO1xuXG4gICAgaWYgKEZyYWN0aW9uWydSRURVQ0UnXSkge1xuICAgICAgYSA9IGdjZChQW1wiZFwiXSwgUFtcIm5cIl0pOyAvLyBBYnVzZSBhXG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSAxO1xuICAgIH1cblxuICAgIHRoaXNbXCJzXCJdID0gUFtcInNcIl07XG4gICAgdGhpc1tcIm5cIl0gPSBQW1wiblwiXSAvIGE7XG4gICAgdGhpc1tcImRcIl0gPSBQW1wiZFwiXSAvIGE7XG4gIH1cblxuICAvKipcbiAgICogQm9vbGVhbiBnbG9iYWwgdmFyaWFibGUgdG8gYmUgYWJsZSB0byBkaXNhYmxlIGF1dG9tYXRpYyByZWR1Y3Rpb24gb2YgdGhlIGZyYWN0aW9uXG4gICAqXG4gICAqL1xuICBGcmFjdGlvblsnUkVEVUNFJ10gPSAxO1xuXG4gIEZyYWN0aW9uLnByb3RvdHlwZSA9IHtcblxuICAgIFwic1wiOiAxLFxuICAgIFwiblwiOiAwLFxuICAgIFwiZFwiOiAxLFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgdmFsdWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oLTQpLmFicygpID0+IDRcbiAgICAgKiovXG4gICAgXCJhYnNcIjogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24odGhpc1tcIm5cIl0sIHRoaXNbXCJkXCJdKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW52ZXJ0cyB0aGUgc2lnbiBvZiB0aGUgY3VycmVudCBmcmFjdGlvblxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigtNCkubmVnKCkgPT4gNFxuICAgICAqKi9cbiAgICBcIm5lZ1wiOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbigtdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSwgdGhpc1tcImRcIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byByYXRpb25hbCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKHtuOiAyLCBkOiAzfSkuYWRkKFwiMTQuOVwiKSA9PiA0NjcgLyAzMFxuICAgICAqKi9cbiAgICBcImFkZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAqIFBbXCJkXCJdICsgUFtcInNcIl0gKiB0aGlzW1wiZFwiXSAqIFBbXCJuXCJdLFxuICAgICAgICAgICAgICB0aGlzW1wiZFwiXSAqIFBbXCJkXCJdXG4gICAgICAgICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN1YnRyYWN0cyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbih7bjogMiwgZDogM30pLmFkZChcIjE0LjlcIikgPT4gLTQyNyAvIDMwXG4gICAgICoqL1xuICAgIFwic3ViXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcImRcIl0gLSBQW1wic1wiXSAqIHRoaXNbXCJkXCJdICogUFtcIm5cIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIi0xNy4oMzQ1KVwiKS5tdWwoMykgPT4gNTc3NiAvIDExMVxuICAgICAqKi9cbiAgICBcIm11bFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiBQW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcIm5cIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGl2aWRlcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIi0xNy4oMzQ1KVwiKS5pbnZlcnNlKCkuZGl2KDMpXG4gICAgICoqL1xuICAgIFwiZGl2XCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIFBbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSxcbiAgICAgICAgICAgICAgdGhpc1tcImRcIl0gKiBQW1wiblwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3RcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oXCItMTcuKDM0NSlcIikuY2xvbmUoKVxuICAgICAqKi9cbiAgICBcImNsb25lXCI6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgbW9kdWxvIG9mIHR3byByYXRpb25hbCBudW1iZXJzIC0gYSBtb3JlIHByZWNpc2UgZm1vZFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbignNC4oMyknKS5tb2QoWzcsIDhdKSA9PiAoMTMvMykgJSAoNy84KSA9ICg1LzYpXG4gICAgICoqL1xuICAgIFwibW9kXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbJ24nXSkgfHwgaXNOYU4odGhpc1snZCddKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICUgdGhpc1tcImRcIl0sIDEpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIGlmICgwID09PSBQW1wiblwiXSAmJiAwID09PSB0aGlzW1wiZFwiXSkge1xuICAgICAgICBGcmFjdGlvbigwLCAwKTsgLy8gVGhyb3cgRGl2aXNpb25CeVplcm9cbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAqIEZpcnN0IHNpbGx5IGF0dGVtcHQsIGtpbmRhIHNsb3dcbiAgICAgICAqXG4gICAgICAgcmV0dXJuIHRoYXRbXCJzdWJcIl0oe1xuICAgICAgIFwiblwiOiBudW1bXCJuXCJdICogTWF0aC5mbG9vcigodGhpcy5uIC8gdGhpcy5kKSAvIChudW0ubiAvIG51bS5kKSksXG4gICAgICAgXCJkXCI6IG51bVtcImRcIl0sXG4gICAgICAgXCJzXCI6IHRoaXNbXCJzXCJdXG4gICAgICAgfSk7Ki9cblxuICAgICAgLypcbiAgICAgICAqIE5ldyBhdHRlbXB0OiBhMSAvIGIxID0gYTIgLyBiMiAqIHEgKyByXG4gICAgICAgKiA9PiBiMiAqIGExID0gYTIgKiBiMSAqIHEgKyBiMSAqIGIyICogclxuICAgICAgICogPT4gKGIyICogYTEgJSBhMiAqIGIxKSAvIChiMSAqIGIyKVxuICAgICAgICovXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIChQW1wiZFwiXSAqIHRoaXNbXCJuXCJdKSAlIChQW1wiblwiXSAqIHRoaXNbXCJkXCJdKSxcbiAgICAgICAgICAgICAgUFtcImRcIl0gKiB0aGlzW1wiZFwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGdjZCBvZiB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbig1LDgpLmdjZCgzLDcpID0+IDEvNTZcbiAgICAgKi9cbiAgICBcImdjZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuXG4gICAgICAvLyBnY2QoYSAvIGIsIGMgLyBkKSA9IGdjZChhLCBjKSAvIGxjbShiLCBkKVxuXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKGdjZChQW1wiblwiXSwgdGhpc1tcIm5cIl0pICogZ2NkKFBbXCJkXCJdLCB0aGlzW1wiZFwiXSksIFBbXCJkXCJdICogdGhpc1tcImRcIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGxjbSBvZiB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbig1LDgpLmxjbSgzLDcpID0+IDE1XG4gICAgICovXG4gICAgXCJsY21cIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcblxuICAgICAgLy8gbGNtKGEgLyBiLCBjIC8gZCkgPSBsY20oYSwgYykgLyBnY2QoYiwgZClcblxuICAgICAgaWYgKFBbXCJuXCJdID09PSAwICYmIHRoaXNbXCJuXCJdID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFBbXCJuXCJdICogdGhpc1tcIm5cIl0sIGdjZChQW1wiblwiXSwgdGhpc1tcIm5cIl0pICogZ2NkKFBbXCJkXCJdLCB0aGlzW1wiZFwiXSkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBjZWlsIG9mIGEgcmF0aW9uYWwgbnVtYmVyXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLmNlaWwoKSA9PiAoNSAvIDEpXG4gICAgICoqL1xuICAgIFwiY2VpbFwiOiBmdW5jdGlvbihwbGFjZXMpIHtcblxuICAgICAgcGxhY2VzID0gTWF0aC5wb3coMTAsIHBsYWNlcyB8fCAwKTtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbXCJuXCJdKSB8fCBpc05hTih0aGlzW1wiZFwiXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihOYU4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLmNlaWwocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgZmxvb3Igb2YgYSByYXRpb25hbCBudW1iZXJcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oJzQuKDMpJykuZmxvb3IoKSA9PiAoNCAvIDEpXG4gICAgICoqL1xuICAgIFwiZmxvb3JcIjogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIGlmIChpc05hTih0aGlzW1wiblwiXSkgfHwgaXNOYU4odGhpc1tcImRcIl0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTmFOKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5mbG9vcihwbGFjZXMgKiB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdIC8gdGhpc1tcImRcIl0pLCBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3VuZHMgYSByYXRpb25hbCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLnJvdW5kKCkgPT4gKDQgLyAxKVxuICAgICAqKi9cbiAgICBcInJvdW5kXCI6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1tcIm5cIl0pIHx8IGlzTmFOKHRoaXNbXCJkXCJdKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE1hdGgucm91bmQocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW52ZXJzZSBvZiB0aGUgZnJhY3Rpb24sIG1lYW5zIG51bWVyYXRvciBhbmQgZGVudW1lcmF0b3IgYXJlIGV4Y2hhbmdlZFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihbLTMsIDRdKS5pbnZlcnNlKCkgPT4gLTQgLyAzXG4gICAgICoqL1xuICAgIFwiaW52ZXJzZVwiOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzW1wic1wiXSAqIHRoaXNbXCJkXCJdLCB0aGlzW1wiblwiXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGZyYWN0aW9uIHRvIHNvbWUgaW50ZWdlciBleHBvbmVudFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigtMSwyKS5wb3coLTMpID0+IC04XG4gICAgICovXG4gICAgXCJwb3dcIjogZnVuY3Rpb24obSkge1xuXG4gICAgICBpZiAobSA8IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLnBvdyh0aGlzWydzJ10gKiB0aGlzW1wiZFwiXSwgLW0pLCBNYXRoLnBvdyh0aGlzW1wiblwiXSwgLW0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5wb3codGhpc1sncyddICogdGhpc1tcIm5cIl0sIG0pLCBNYXRoLnBvdyh0aGlzW1wiZFwiXSwgbSkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oMTkuNikuZXF1YWxzKFs5OCwgNV0pO1xuICAgICAqKi9cbiAgICBcImVxdWFsc1wiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSA9PT0gUFtcInNcIl0gKiBQW1wiblwiXSAqIHRoaXNbXCJkXCJdOyAvLyBTYW1lIGFzIGNvbXBhcmUoKSA9PT0gMFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oMTkuNikuZXF1YWxzKFs5OCwgNV0pO1xuICAgICAqKi9cbiAgICBcImNvbXBhcmVcIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIHZhciB0ID0gKHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSAtIFBbXCJzXCJdICogUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSk7XG4gICAgICByZXR1cm4gKDAgPCB0KSAtICh0IDwgMCk7XG4gICAgfSxcblxuICAgIFwic2ltcGxpZnlcIjogZnVuY3Rpb24oZXBzKSB7XG5cbiAgICAgIC8vIEZpcnN0IG5haXZlIGltcGxlbWVudGF0aW9uLCBuZWVkcyBpbXByb3ZlbWVudFxuXG4gICAgICBpZiAoaXNOYU4odGhpc1snbiddKSB8fCBpc05hTih0aGlzWydkJ10pKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udCA9IHRoaXNbJ2FicyddKClbJ3RvQ29udGludWVkJ10oKTtcblxuICAgICAgZXBzID0gZXBzIHx8IDAuMDAxO1xuXG4gICAgICBmdW5jdGlvbiByZWMoYSkge1xuICAgICAgICBpZiAoYS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihhWzBdKTtcbiAgICAgICAgcmV0dXJuIHJlYyhhLnNsaWNlKDEpKVsnaW52ZXJzZSddKClbJ2FkZCddKGFbMF0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlYyhjb250LnNsaWNlKDAsIGkgKyAxKSk7XG4gICAgICAgIGlmICh0bXBbJ3N1YiddKHRoaXNbJ2FicyddKCkpWydhYnMnXSgpLnZhbHVlT2YoKSA8IGVwcykge1xuICAgICAgICAgIHJldHVybiB0bXBbJ211bCddKHRoaXNbJ3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgZGl2aXNpYmxlXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKDE5LjYpLmRpdmlzaWJsZSgxLjUpO1xuICAgICAqL1xuICAgIFwiZGl2aXNpYmxlXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gISghKFBbXCJuXCJdICogdGhpc1tcImRcIl0pIHx8ICgodGhpc1tcIm5cIl0gKiBQW1wiZFwiXSkgJSAoUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSkpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZyYWN0aW9uXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMTAwLic5MTgyMydcIikudmFsdWVPZigpID0+IDEwMC45MTgyMzkxODIzOTE4M1xuICAgICAqKi9cbiAgICAndmFsdWVPZic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nLWZyYWN0aW9uIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMS4nMydcIikudG9GcmFjdGlvbigpID0+IFwiNCAxLzNcIlxuICAgICAqKi9cbiAgICAndG9GcmFjdGlvbic6IGZ1bmN0aW9uKGV4Y2x1ZGVXaG9sZSkge1xuXG4gICAgICB2YXIgd2hvbGUsIHN0ciA9IFwiXCI7XG4gICAgICB2YXIgbiA9IHRoaXNbXCJuXCJdO1xuICAgICAgdmFyIGQgPSB0aGlzW1wiZFwiXTtcbiAgICAgIGlmICh0aGlzW1wic1wiXSA8IDApIHtcbiAgICAgICAgc3RyICs9ICctJztcbiAgICAgIH1cblxuICAgICAgaWYgKGQgPT09IDEpIHtcbiAgICAgICAgc3RyICs9IG47XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChleGNsdWRlV2hvbGUgJiYgKHdob2xlID0gTWF0aC5mbG9vcihuIC8gZCkpID4gMCkge1xuICAgICAgICAgIHN0ciArPSB3aG9sZTtcbiAgICAgICAgICBzdHIgKz0gXCIgXCI7XG4gICAgICAgICAgbiAlPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IG47XG4gICAgICAgIHN0ciArPSAnLyc7XG4gICAgICAgIHN0ciArPSBkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxhdGV4IHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMS4nMydcIikudG9MYXRleCgpID0+IFwiXFxmcmFjezR9ezN9XCJcbiAgICAgKiovXG4gICAgJ3RvTGF0ZXgnOiBmdW5jdGlvbihleGNsdWRlV2hvbGUpIHtcblxuICAgICAgdmFyIHdob2xlLCBzdHIgPSBcIlwiO1xuICAgICAgdmFyIG4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBkID0gdGhpc1tcImRcIl07XG4gICAgICBpZiAodGhpc1tcInNcIl0gPCAwKSB7XG4gICAgICAgIHN0ciArPSAnLSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChkID09PSAxKSB7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpZiAoZXhjbHVkZVdob2xlICYmICh3aG9sZSA9IE1hdGguZmxvb3IobiAvIGQpKSA+IDApIHtcbiAgICAgICAgICBzdHIgKz0gd2hvbGU7XG4gICAgICAgICAgbiAlPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IFwiXFxcXGZyYWN7XCI7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgICBzdHIgKz0gJ317JztcbiAgICAgICAgc3RyICs9IGQ7XG4gICAgICAgIHN0ciArPSAnfSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbnRpbnVlZCBmcmFjdGlvbiBlbGVtZW50c1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIjcvOFwiKS50b0NvbnRpbnVlZCgpID0+IFswLDEsN11cbiAgICAgKi9cbiAgICAndG9Db250aW51ZWQnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIHQ7XG4gICAgICB2YXIgYSA9IHRoaXNbJ24nXTtcbiAgICAgIHZhciBiID0gdGhpc1snZCddO1xuICAgICAgdmFyIHJlcyA9IFtdO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1snbiddKSB8fCBpc05hTih0aGlzWydkJ10pKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIGRvIHtcbiAgICAgICAgcmVzLnB1c2goTWF0aC5mbG9vcihhIC8gYikpO1xuICAgICAgICB0ID0gYSAlIGI7XG4gICAgICAgIGEgPSBiO1xuICAgICAgICBiID0gdDtcbiAgICAgIH0gd2hpbGUgKGEgIT09IDEpO1xuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZnJhY3Rpb24gd2l0aCBhbGwgZGlnaXRzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMTAwLic5MTgyMydcIikudG9TdHJpbmcoKSA9PiBcIjEwMC4oOTE4MjMpXCJcbiAgICAgKiovXG4gICAgJ3RvU3RyaW5nJzogZnVuY3Rpb24oZGVjKSB7XG5cbiAgICAgIHZhciBnO1xuICAgICAgdmFyIE4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBEID0gdGhpc1tcImRcIl07XG5cbiAgICAgIGlmIChpc05hTihOKSB8fCBpc05hTihEKSkge1xuICAgICAgICByZXR1cm4gXCJOYU5cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFGcmFjdGlvblsnUkVEVUNFJ10pIHtcbiAgICAgICAgZyA9IGdjZChOLCBEKTtcbiAgICAgICAgTiAvPSBnO1xuICAgICAgICBEIC89IGc7XG4gICAgICB9XG5cbiAgICAgIGRlYyA9IGRlYyB8fCAxNTsgLy8gMTUgPSBkZWNpbWFsIHBsYWNlcyB3aGVuIG5vIHJlcGl0YXRpb25cblxuICAgICAgdmFyIGN5Y0xlbiA9IGN5Y2xlTGVuKE4sIEQpOyAvLyBDeWNsZSBsZW5ndGhcbiAgICAgIHZhciBjeWNPZmYgPSBjeWNsZVN0YXJ0KE4sIEQsIGN5Y0xlbik7IC8vIEN5Y2xlIHN0YXJ0XG5cbiAgICAgIHZhciBzdHIgPSB0aGlzWydzJ10gPT09IC0xID8gXCItXCIgOiBcIlwiO1xuXG4gICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuXG4gICAgICBOICU9IEQ7XG4gICAgICBOICo9IDEwO1xuXG4gICAgICBpZiAoTilcbiAgICAgICAgc3RyICs9IFwiLlwiO1xuXG4gICAgICBpZiAoY3ljTGVuKSB7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y09mZjsgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBcIihcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y0xlbjsgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBcIilcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBkZWM7IE4gJiYgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfTtcblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZVtcImFtZFwiXSkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gRnJhY3Rpb247XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsndmFsdWUnOiB0cnVlfSk7XG4gICAgRnJhY3Rpb25bJ2RlZmF1bHQnXSA9IEZyYWN0aW9uO1xuICAgIEZyYWN0aW9uWydGcmFjdGlvbiddID0gRnJhY3Rpb247XG4gICAgbW9kdWxlWydleHBvcnRzJ10gPSBGcmFjdGlvbjtcbiAgfSBlbHNlIHtcbiAgICByb290WydGcmFjdGlvbiddID0gRnJhY3Rpb247XG4gIH1cblxufSkodGhpcyk7XG4iLCIvKlxyXG4gKiBOYXR1cmFsIFNvcnQgYWxnb3JpdGhtIGZvciBKYXZhc2NyaXB0IC0gVmVyc2lvbiAwLjcgLSBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZVxyXG4gKiBBdXRob3I6IEppbSBQYWxtZXIgKGJhc2VkIG9uIGNodW5raW5nIGlkZWEgZnJvbSBEYXZlIEtvZWxsZSlcclxuICovXHJcbi8qanNoaW50IHVudXNlZDpmYWxzZSAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5hdHVyYWxTb3J0IChhLCBiKSB7XHJcblx0XCJ1c2Ugc3RyaWN0XCI7XHJcblx0dmFyIHJlID0gLyheKFsrXFwtXT8oPzowfFsxLTldXFxkKikoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPyk/JHxeMHhbMC05YS1mXSskfFxcZCspL2dpLFxyXG5cdFx0c3JlID0gLyheWyBdKnxbIF0qJCkvZyxcclxuXHRcdGRyZSA9IC8oXihbXFx3IF0rLD9bXFx3IF0rKT9bXFx3IF0rLD9bXFx3IF0rXFxkKzpcXGQrKDpcXGQrKT9bXFx3IF0/fF5cXGR7MSw0fVtcXC9cXC1dXFxkezEsNH1bXFwvXFwtXVxcZHsxLDR9fF5cXHcrLCBcXHcrIFxcZCssIFxcZHs0fSkvLFxyXG5cdFx0aHJlID0gL14weFswLTlhLWZdKyQvaSxcclxuXHRcdG9yZSA9IC9eMC8sXHJcblx0XHRpID0gZnVuY3Rpb24ocykgeyByZXR1cm4gbmF0dXJhbFNvcnQuaW5zZW5zaXRpdmUgJiYgKCcnICsgcykudG9Mb3dlckNhc2UoKSB8fCAnJyArIHM7IH0sXHJcblx0XHQvLyBjb252ZXJ0IGFsbCB0byBzdHJpbmdzIHN0cmlwIHdoaXRlc3BhY2VcclxuXHRcdHggPSBpKGEpLnJlcGxhY2Uoc3JlLCAnJykgfHwgJycsXHJcblx0XHR5ID0gaShiKS5yZXBsYWNlKHNyZSwgJycpIHx8ICcnLFxyXG5cdFx0Ly8gY2h1bmsvdG9rZW5pemVcclxuXHRcdHhOID0geC5yZXBsYWNlKHJlLCAnXFwwJDFcXDAnKS5yZXBsYWNlKC9cXDAkLywnJykucmVwbGFjZSgvXlxcMC8sJycpLnNwbGl0KCdcXDAnKSxcclxuXHRcdHlOID0geS5yZXBsYWNlKHJlLCAnXFwwJDFcXDAnKS5yZXBsYWNlKC9cXDAkLywnJykucmVwbGFjZSgvXlxcMC8sJycpLnNwbGl0KCdcXDAnKSxcclxuXHRcdC8vIG51bWVyaWMsIGhleCBvciBkYXRlIGRldGVjdGlvblxyXG5cdFx0eEQgPSBwYXJzZUludCh4Lm1hdGNoKGhyZSksIDE2KSB8fCAoeE4ubGVuZ3RoICE9PSAxICYmIHgubWF0Y2goZHJlKSAmJiBEYXRlLnBhcnNlKHgpKSxcclxuXHRcdHlEID0gcGFyc2VJbnQoeS5tYXRjaChocmUpLCAxNikgfHwgeEQgJiYgeS5tYXRjaChkcmUpICYmIERhdGUucGFyc2UoeSkgfHwgbnVsbCxcclxuXHRcdG9GeE5jTCwgb0Z5TmNMO1xyXG5cdC8vIGZpcnN0IHRyeSBhbmQgc29ydCBIZXggY29kZXMgb3IgRGF0ZXNcclxuXHRpZiAoeUQpIHtcclxuXHRcdGlmICggeEQgPCB5RCApIHsgcmV0dXJuIC0xOyB9XHJcblx0XHRlbHNlIGlmICggeEQgPiB5RCApIHsgcmV0dXJuIDE7IH1cclxuXHR9XHJcblx0Ly8gbmF0dXJhbCBzb3J0aW5nIHRocm91Z2ggc3BsaXQgbnVtZXJpYyBzdHJpbmdzIGFuZCBkZWZhdWx0IHN0cmluZ3NcclxuXHRmb3IodmFyIGNMb2M9MCwgbnVtUz1NYXRoLm1heCh4Ti5sZW5ndGgsIHlOLmxlbmd0aCk7IGNMb2MgPCBudW1TOyBjTG9jKyspIHtcclxuXHRcdC8vIGZpbmQgZmxvYXRzIG5vdCBzdGFydGluZyB3aXRoICcwJywgc3RyaW5nIG9yIDAgaWYgbm90IGRlZmluZWQgKENsaW50IFByaWVzdClcclxuXHRcdG9GeE5jTCA9ICEoeE5bY0xvY10gfHwgJycpLm1hdGNoKG9yZSkgJiYgcGFyc2VGbG9hdCh4TltjTG9jXSkgfHwgeE5bY0xvY10gfHwgMDtcclxuXHRcdG9GeU5jTCA9ICEoeU5bY0xvY10gfHwgJycpLm1hdGNoKG9yZSkgJiYgcGFyc2VGbG9hdCh5TltjTG9jXSkgfHwgeU5bY0xvY10gfHwgMDtcclxuXHRcdC8vIGhhbmRsZSBudW1lcmljIHZzIHN0cmluZyBjb21wYXJpc29uIC0gbnVtYmVyIDwgc3RyaW5nIC0gKEt5bGUgQWRhbXMpXHJcblx0XHRpZiAoaXNOYU4ob0Z4TmNMKSAhPT0gaXNOYU4ob0Z5TmNMKSkgeyByZXR1cm4gKGlzTmFOKG9GeE5jTCkpID8gMSA6IC0xOyB9XHJcblx0XHQvLyByZWx5IG9uIHN0cmluZyBjb21wYXJpc29uIGlmIGRpZmZlcmVudCB0eXBlcyAtIGkuZS4gJzAyJyA8IDIgIT0gJzAyJyA8ICcyJ1xyXG5cdFx0ZWxzZSBpZiAodHlwZW9mIG9GeE5jTCAhPT0gdHlwZW9mIG9GeU5jTCkge1xyXG5cdFx0XHRvRnhOY0wgKz0gJyc7XHJcblx0XHRcdG9GeU5jTCArPSAnJztcclxuXHRcdH1cclxuXHRcdGlmIChvRnhOY0wgPCBvRnlOY0wpIHsgcmV0dXJuIC0xOyB9XHJcblx0XHRpZiAob0Z4TmNMID4gb0Z5TmNMKSB7IHJldHVybiAxOyB9XHJcblx0fVxyXG5cdHJldHVybiAwO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmVyc2lvbiA9IGV4cG9ydHMuY3JlYXRlVXBwZXJjYXNlRSA9IGV4cG9ydHMuY3JlYXRlVXBwZXJjYXNlUGkgPSBleHBvcnRzLmNyZWF0ZUkgPSBleHBvcnRzLmNyZWF0ZVNRUlQyID0gZXhwb3J0cy5jcmVhdGVTUVJUMV8yID0gZXhwb3J0cy5jcmVhdGVMT0cxMEUgPSBleHBvcnRzLmNyZWF0ZUxPRzJFID0gZXhwb3J0cy5jcmVhdGVMTjEwID0gZXhwb3J0cy5jcmVhdGVMTjIgPSBleHBvcnRzLmNyZWF0ZVBoaSA9IGV4cG9ydHMuY3JlYXRlRSA9IGV4cG9ydHMuY3JlYXRlVGF1ID0gZXhwb3J0cy5jcmVhdGVQaSA9IGV4cG9ydHMuY3JlYXRlTmFOID0gZXhwb3J0cy5jcmVhdGVJbmZpbml0eSA9IGV4cG9ydHMuY3JlYXRlTnVsbCA9IGV4cG9ydHMuY3JlYXRlRmFsc2UgPSBleHBvcnRzLmNyZWF0ZVRydWUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdmVyc2lvbiA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5cbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vdXRpbHMvYmlnbnVtYmVyL2NvbnN0YW50c1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBjcmVhdGVUcnVlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd0cnVlJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59KTtcbmV4cG9ydHMuY3JlYXRlVHJ1ZSA9IGNyZWF0ZVRydWU7XG52YXIgY3JlYXRlRmFsc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ2ZhbHNlJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZhbHNlID0gY3JlYXRlRmFsc2U7XG52YXIgY3JlYXRlTnVsbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnbnVsbCcsIFtdLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBudWxsO1xufSk7XG5leHBvcnRzLmNyZWF0ZU51bGwgPSBjcmVhdGVOdWxsO1xudmFyIGNyZWF0ZUluZmluaXR5ID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdJbmZpbml0eScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoSW5maW5pdHkpIDogSW5maW5pdHk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSW5maW5pdHkgPSBjcmVhdGVJbmZpbml0eTtcbnZhciBjcmVhdGVOYU4gPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ05hTicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciBjb25maWcgPSBfcmVmMi5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMi5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoTmFOKSA6IE5hTjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOYU4gPSBjcmVhdGVOYU47XG52YXIgY3JlYXRlUGkgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ3BpJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYzLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYzLkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gKDAsIF9jb25zdGFudHMuY3JlYXRlQmlnTnVtYmVyUGkpKEJpZ051bWJlcikgOiBfbnVtYmVyLnBpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVBpID0gY3JlYXRlUGk7XG52YXIgY3JlYXRlVGF1ID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCd0YXUnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgY29uZmlnID0gX3JlZjQuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjQuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJUYXUpKEJpZ051bWJlcikgOiBfbnVtYmVyLnRhdTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYXUgPSBjcmVhdGVUYXU7XG52YXIgY3JlYXRlRSA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnZScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gIHZhciBjb25maWcgPSBfcmVmNS5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmNS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/ICgwLCBfY29uc3RhbnRzLmNyZWF0ZUJpZ051bWJlckUpKEJpZ051bWJlcikgOiBfbnVtYmVyLmU7XG59KTsgLy8gZ29sZGVuIHJhdGlvLCAoMStzcXJ0KDUpKS8yXG5cbmV4cG9ydHMuY3JlYXRlRSA9IGNyZWF0ZUU7XG52YXIgY3JlYXRlUGhpID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdwaGknLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNikge1xuICB2YXIgY29uZmlnID0gX3JlZjYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjYuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJQaGkpKEJpZ051bWJlcikgOiBfbnVtYmVyLnBoaTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQaGkgPSBjcmVhdGVQaGk7XG52YXIgY3JlYXRlTE4yID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdMTjInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNykge1xuICB2YXIgY29uZmlnID0gX3JlZjcuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjcuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDIpLmxuKCkgOiBNYXRoLkxOMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMTjIgPSBjcmVhdGVMTjI7XG52YXIgY3JlYXRlTE4xMCA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnTE4xMCcsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY4KSB7XG4gIHZhciBjb25maWcgPSBfcmVmOC5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmOC5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMTApLmxuKCkgOiBNYXRoLkxOMTA7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE4xMCA9IGNyZWF0ZUxOMTA7XG52YXIgY3JlYXRlTE9HMkUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xPRzJFJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWY5LmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWY5LkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gbmV3IEJpZ051bWJlcigxKS5kaXYobmV3IEJpZ051bWJlcigyKS5sbigpKSA6IE1hdGguTE9HMkU7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE9HMkUgPSBjcmVhdGVMT0cyRTtcbnZhciBjcmVhdGVMT0cxMEUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xPRzEwRScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMCkge1xuICB2YXIgY29uZmlnID0gX3JlZjEwLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYxMC5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMSkuZGl2KG5ldyBCaWdOdW1iZXIoMTApLmxuKCkpIDogTWF0aC5MT0cxMEU7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE9HMTBFID0gY3JlYXRlTE9HMTBFO1xudmFyIGNyZWF0ZVNRUlQxXzIgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4nU1FSVDFfMicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMSkge1xuICB2YXIgY29uZmlnID0gX3JlZjExLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYxMS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoJzAuNScpLnNxcnQoKSA6IE1hdGguU1FSVDFfMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTUVJUMV8yID0gY3JlYXRlU1FSVDFfMjtcbnZhciBjcmVhdGVTUVJUMiA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnU1FSVDInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYxMi5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMTIuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDIpLnNxcnQoKSA6IE1hdGguU1FSVDI7XG59KTtcbmV4cG9ydHMuY3JlYXRlU1FSVDIgPSBjcmVhdGVTUVJUMjtcbnZhciBjcmVhdGVJID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdpJywgWydDb21wbGV4J10sIGZ1bmN0aW9uIChfcmVmMTMpIHtcbiAgdmFyIENvbXBsZXggPSBfcmVmMTMuQ29tcGxleDtcbiAgcmV0dXJuIENvbXBsZXguSTtcbn0pOyAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHY1XG5cbmV4cG9ydHMuY3JlYXRlSSA9IGNyZWF0ZUk7XG52YXIgY3JlYXRlVXBwZXJjYXNlUGkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ1BJJywgWydwaSddLCBmdW5jdGlvbiAoX3JlZjE0KSB7XG4gIHZhciBwaSA9IF9yZWYxNC5waTtcbiAgcmV0dXJuIHBpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVwcGVyY2FzZVBpID0gY3JlYXRlVXBwZXJjYXNlUGk7XG52YXIgY3JlYXRlVXBwZXJjYXNlRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnRScsIFsnZSddLCBmdW5jdGlvbiAoX3JlZjE1KSB7XG4gIHZhciBlID0gX3JlZjE1LmU7XG4gIHJldHVybiBlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVwcGVyY2FzZUUgPSBjcmVhdGVVcHBlcmNhc2VFO1xudmFyIGNyZWF0ZVZlcnNpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ3ZlcnNpb24nLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX3ZlcnNpb24udmVyc2lvbjtcbn0pOyAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgZmFjdG9yeSB3aXRoIGEgZmxhZyByZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlXG4vLyBpZGVhOiBhbGxvdyBwYXNzaW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb24gYXMgNHRoIGFyZ3VtZW50P1xuXG5leHBvcnRzLmNyZWF0ZVZlcnNpb24gPSBjcmVhdGVWZXJzaW9uO1xuXG5mdW5jdGlvbiByZWNyZWF0ZUZhY3RvcnkobmFtZSwgZGVwZW5kZW5jaWVzLCBjcmVhdGUpIHtcbiAgcmV0dXJuICgwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGNyZWF0ZSwge1xuICAgIHJlY3JlYXRlT25Db25maWdDaGFuZ2U6IHRydWVcbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0gdm9pZCAwO1xudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICAvLyBtaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gY29tcGFyZWQgdmFsdWVzLFxuICAvLyB1c2VkIGJ5IGFsbCBjb21wYXJpc29uIGZ1bmN0aW9uc1xuICBlcHNpbG9uOiAxZS0xMixcbiAgLy8gdHlwZSBvZiBkZWZhdWx0IG1hdHJpeCBvdXRwdXQuIENob29zZSAnbWF0cml4JyAoZGVmYXVsdCkgb3IgJ2FycmF5J1xuICBtYXRyaXg6ICdNYXRyaXgnLFxuICAvLyB0eXBlIG9mIGRlZmF1bHQgbnVtYmVyIG91dHB1dC4gQ2hvb3NlICdudW1iZXInIChkZWZhdWx0KSAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uXG4gIG51bWJlcjogJ251bWJlcicsXG4gIC8vIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaW4gQmlnTnVtYmVyc1xuICBwcmVjaXNpb246IDY0LFxuICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSwgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5XG4gIC8vIG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlbiBmYWxzZSAoZGVmYXVsdCksIG91dHB1dCB0eXBlIGNhbiB2YXJ5IGRlcGVuZGluZ1xuICAvLyBvbiBpbnB1dCB2YWx1ZXMuIEZvciBleGFtcGxlIGBtYXRoLnNxcnQoLTQpYCByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuXG4gIC8vIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmQgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuXG4gIHByZWRpY3RhYmxlOiBmYWxzZSxcbiAgLy8gcmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uXG4gIC8vIG51bGwgPSByYW5kb21seSBzZWVkXG4gIHJhbmRvbVNlZWQ6IG51bGxcbn07XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0gREVGQVVMVF9DT05GSUc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xuXG5yZXF1aXJlKFwiLi8uLi91dGlscy9wb2x5ZmlsbHNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgZW1pdHRlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLy4uL3V0aWxzL2VtaXR0ZXJcIikpO1xuXG52YXIgX2ltcG9ydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2ltcG9ydFwiKTtcblxudmFyIF9jb25maWcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb25maWdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX2NvbmZpZzIgPSByZXF1aXJlKFwiLi9jb25maWdcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbi8qKlxuICogQ3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGZyb20gZ2l2ZW4gZmFjdG9yeSBmdW5jdGlvbnMgYW5kIG9wdGlvbmFsbHkgY29uZmlnXG4gKlxuICogVXNhZ2U6XG4gKlxuICogICAgIGNvbnN0IG1hdGhqczEgPSBjcmVhdGUoeyBjcmVhdGVBZGQsIGNyZWF0ZU11bHRpcGx5LCAuLi59KVxuICogICAgIGNvbnN0IGNvbmZpZyA9IHsgbnVtYmVyOiAnQmlnTnVtYmVyJyB9XG4gKiAgICAgY29uc3QgbWF0aGpzMiA9IGNyZWF0ZShhbGwsIGNvbmZpZylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2ZhY3Rvcmllc10gQW4gb2JqZWN0IHdpdGggZmFjdG9yeSBmdW5jdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IGNhbiBjb250YWluIG5lc3RlZCBvYmplY3RzLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBuZXN0ZWQgb2JqZWN0cyB3aWxsIGJlIGZsYXR0ZW5lZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSAgICBBdmFpbGFibGUgb3B0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluaW11bSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkIHZhbHVlcywgdXNlZCBieSBhbGwgY29tcGFyaXNvbiBmdW5jdGlvbnMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ01hdHJpeCcgKGRlZmF1bHQpIG9yICdBcnJheScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBudW1iZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGZvciBCaWdOdW1iZXJzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtib29sZWFufSBwcmVkaWN0YWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5IG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAoZGVmYXVsdCksIG91dHB1dCB0eXBlIGNhbiB2YXJ5IGRlcGVuZGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBpbnB1dCB2YWx1ZXMuIEZvciBleGFtcGxlIGBtYXRoLnNxcnQoLTQpYFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSByYW5kb21TZWVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBzZWVkIGZvciBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gbnVsbCB0byByYW5kb21seSBzZWVkLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIGJhcmUtYm9uZSBtYXRoLmpzIGluc3RhbmNlIGNvbnRhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgIC0gYGltcG9ydGAgdG8gYWRkIG5ldyBmdW5jdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgIC0gYGNvbmZpZ2AgdG8gY2hhbmdlIGNvbmZpZ3VyYXRpb25cbiAqICAgICAgICAgICAgICAgICAgIC0gYG9uYCwgYG9mZmAsIGBvbmNlYCwgYGVtaXRgIGZvciBldmVudHNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGZhY3RvcmllcywgY29uZmlnKSB7XG4gIHZhciBjb25maWdJbnRlcm5hbCA9IF9leHRlbmRzKHt9LCBfY29uZmlnMi5ERUZBVUxUX0NPTkZJRywgY29uZmlnKTsgLy8gc2ltcGxlIHRlc3QgZm9yIEVTNSBzdXBwb3J0XG5cblxuICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VTNSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgSmF2YVNjcmlwdCBlbmdpbmUuICcgKyAnUGxlYXNlIGxvYWQgdGhlIGVzNS1zaGltIGFuZCBlczUtc2hhbSBsaWJyYXJ5IGZvciBjb21wYXRpYmlsaXR5LicpO1xuICB9IC8vIGNyZWF0ZSB0aGUgbWF0aGpzIGluc3RhbmNlXG5cblxuICB2YXIgbWF0aCA9IGVtaXR0ZXIubWl4aW4oe1xuICAgIC8vIG9ubHkgaGVyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgbGVnYWN5IGZhY3RvcnkgZnVuY3Rpb25zXG4gICAgaXNOdW1iZXI6IF9pcy5pc051bWJlcixcbiAgICBpc0NvbXBsZXg6IF9pcy5pc0NvbXBsZXgsXG4gICAgaXNCaWdOdW1iZXI6IF9pcy5pc0JpZ051bWJlcixcbiAgICBpc0ZyYWN0aW9uOiBfaXMuaXNGcmFjdGlvbixcbiAgICBpc1VuaXQ6IF9pcy5pc1VuaXQsXG4gICAgaXNTdHJpbmc6IF9pcy5pc1N0cmluZyxcbiAgICBpc0FycmF5OiBfaXMuaXNBcnJheSxcbiAgICBpc01hdHJpeDogX2lzLmlzTWF0cml4LFxuICAgIGlzQ29sbGVjdGlvbjogX2lzLmlzQ29sbGVjdGlvbixcbiAgICBpc0RlbnNlTWF0cml4OiBfaXMuaXNEZW5zZU1hdHJpeCxcbiAgICBpc1NwYXJzZU1hdHJpeDogX2lzLmlzU3BhcnNlTWF0cml4LFxuICAgIGlzUmFuZ2U6IF9pcy5pc1JhbmdlLFxuICAgIGlzSW5kZXg6IF9pcy5pc0luZGV4LFxuICAgIGlzQm9vbGVhbjogX2lzLmlzQm9vbGVhbixcbiAgICBpc1Jlc3VsdFNldDogX2lzLmlzUmVzdWx0U2V0LFxuICAgIGlzSGVscDogX2lzLmlzSGVscCxcbiAgICBpc0Z1bmN0aW9uOiBfaXMuaXNGdW5jdGlvbixcbiAgICBpc0RhdGU6IF9pcy5pc0RhdGUsXG4gICAgaXNSZWdFeHA6IF9pcy5pc1JlZ0V4cCxcbiAgICBpc09iamVjdDogX2lzLmlzT2JqZWN0LFxuICAgIGlzTnVsbDogX2lzLmlzTnVsbCxcbiAgICBpc1VuZGVmaW5lZDogX2lzLmlzVW5kZWZpbmVkLFxuICAgIGlzQWNjZXNzb3JOb2RlOiBfaXMuaXNBY2Nlc3Nvck5vZGUsXG4gICAgaXNBcnJheU5vZGU6IF9pcy5pc0FycmF5Tm9kZSxcbiAgICBpc0Fzc2lnbm1lbnROb2RlOiBfaXMuaXNBc3NpZ25tZW50Tm9kZSxcbiAgICBpc0Jsb2NrTm9kZTogX2lzLmlzQmxvY2tOb2RlLFxuICAgIGlzQ29uZGl0aW9uYWxOb2RlOiBfaXMuaXNDb25kaXRpb25hbE5vZGUsXG4gICAgaXNDb25zdGFudE5vZGU6IF9pcy5pc0NvbnN0YW50Tm9kZSxcbiAgICBpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUsXG4gICAgaXNGdW5jdGlvbk5vZGU6IF9pcy5pc0Z1bmN0aW9uTm9kZSxcbiAgICBpc0luZGV4Tm9kZTogX2lzLmlzSW5kZXhOb2RlLFxuICAgIGlzTm9kZTogX2lzLmlzTm9kZSxcbiAgICBpc09iamVjdE5vZGU6IF9pcy5pc09iamVjdE5vZGUsXG4gICAgaXNPcGVyYXRvck5vZGU6IF9pcy5pc09wZXJhdG9yTm9kZSxcbiAgICBpc1BhcmVudGhlc2lzTm9kZTogX2lzLmlzUGFyZW50aGVzaXNOb2RlLFxuICAgIGlzUmFuZ2VOb2RlOiBfaXMuaXNSYW5nZU5vZGUsXG4gICAgaXNTeW1ib2xOb2RlOiBfaXMuaXNTeW1ib2xOb2RlLFxuICAgIGlzQ2hhaW46IF9pcy5pc0NoYWluXG4gIH0pOyAvLyBsb2FkIGNvbmZpZyBmdW5jdGlvbiBhbmQgYXBwbHkgcHJvdmlkZWQgY29uZmlnXG5cbiAgbWF0aC5jb25maWcgPSAoMCwgX2NvbmZpZy5jb25maWdGYWN0b3J5KShjb25maWdJbnRlcm5hbCwgbWF0aC5lbWl0KTtcbiAgbWF0aC5leHByZXNzaW9uID0ge1xuICAgIHRyYW5zZm9ybToge30sXG4gICAgbWF0aFdpdGhUcmFuc2Zvcm06IHtcbiAgICAgIGNvbmZpZzogbWF0aC5jb25maWdcbiAgICB9XG4gIH07IC8vIGNhY2hlZCBmYWN0b3JpZXMgYW5kIGluc3RhbmNlcyB1c2VkIGJ5IGZ1bmN0aW9uIGxvYWRcblxuICB2YXIgbGVnYWN5RmFjdG9yaWVzID0gW107XG4gIHZhciBsZWdhY3lJbnN0YW5jZXMgPSBbXTtcbiAgLyoqXG4gICAqIExvYWQgYSBmdW5jdGlvbiBvciBkYXRhIHR5cGUgZnJvbSBhIGZhY3RvcnkuXG4gICAqIElmIHRoZSBmdW5jdGlvbiBvciBkYXRhIHR5cGUgYWxyZWFkeSBleGlzdHMsIHRoZSBleGlzdGluZyBpbnN0YW5jZSBpc1xuICAgKiByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmFjdG9yeVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG5cbiAgZnVuY3Rpb24gbG9hZChmYWN0b3J5KSB7XG4gICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKGZhY3RvcnkpKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeShtYXRoKTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RQcm9wZXJ0eSA9IGZhY3RvcnlbT2JqZWN0LmtleXMoZmFjdG9yeSlbMF1dO1xuXG4gICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKGZpcnN0UHJvcGVydHkpKSB7XG4gICAgICByZXR1cm4gZmlyc3RQcm9wZXJ0eShtYXRoKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfb2JqZWN0LmlzTGVnYWN5RmFjdG9yeSkoZmFjdG9yeSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFjdG9yeSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGB0eXBlYCwgYG5hbWVgLCBhbmQgYGZhY3RvcnlgIGV4cGVjdGVkJywgZmFjdG9yeSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3Rvcnkgb2JqZWN0IHdpdGggcHJvcGVydGllcyBgdHlwZWAsIGBuYW1lYCwgYW5kIGBmYWN0b3J5YCBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGxlZ2FjeUZhY3Rvcmllcy5pbmRleE9mKGZhY3RvcnkpO1xuICAgIHZhciBpbnN0YW5jZTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIGRvZXNuJ3QgeWV0IGV4aXN0XG4gICAgICBpZiAoZmFjdG9yeS5tYXRoID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHBhc3Mgd2l0aCBtYXRoIG5hbWVzcGFjZVxuICAgICAgICBpbnN0YW5jZSA9IGZhY3RvcnkuZmFjdG9yeShtYXRoLnR5cGUsIGNvbmZpZ0ludGVybmFsLCBsb2FkLCBtYXRoLnR5cGVkLCBtYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhbmNlID0gZmFjdG9yeS5mYWN0b3J5KG1hdGgudHlwZSwgY29uZmlnSW50ZXJuYWwsIGxvYWQsIG1hdGgudHlwZWQpO1xuICAgICAgfSAvLyBhcHBlbmQgdG8gdGhlIGNhY2hlXG5cblxuICAgICAgbGVnYWN5RmFjdG9yaWVzLnB1c2goZmFjdG9yeSk7XG4gICAgICBsZWdhY3lJbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFscmVhZHkgZXhpc3RpbmcgZnVuY3Rpb24sIHJldHVybiB0aGUgY2FjaGVkIGluc3RhbmNlXG4gICAgICBpbnN0YW5jZSA9IGxlZ2FjeUluc3RhbmNlc1tpbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgdmFyIGltcG9ydGVkRmFjdG9yaWVzID0ge307IC8vIGxvYWQgdGhlIGltcG9ydCBmdW5jdGlvblxuXG4gIGZ1bmN0aW9uIGxhenlUeXBlZCgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGgudHlwZWQuYXBwbHkobWF0aC50eXBlZCwgYXJncyk7XG4gIH1cblxuICB2YXIgaW50ZXJuYWxJbXBvcnQgPSAoMCwgX2ltcG9ydC5pbXBvcnRGYWN0b3J5KShsYXp5VHlwZWQsIGxvYWQsIG1hdGgsIGltcG9ydGVkRmFjdG9yaWVzKTtcbiAgbWF0aFtcImltcG9ydFwiXSA9IGludGVybmFsSW1wb3J0OyAvLyBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gY29uZmlnLCBpbXBvcnQgYWxsIGZ1bmN0aW9ucyBhZ2FpbiB3aGVuIGNoYW5nZWRcbiAgLy8gVE9ETzogbW92ZSB0aGlzIGxpc3RlbmVyIGludG8gdGhlIGltcG9ydCBmdW5jdGlvbj9cblxuICBtYXRoLm9uKCdjb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9vYmplY3QudmFsdWVzKShpbXBvcnRlZEZhY3RvcmllcykuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgICAgaWYgKGZhY3RvcnkgJiYgZmFjdG9yeS5tZXRhICYmIGZhY3RvcnkubWV0YS5yZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlKSB7XG4gICAgICAgIC8vIEZJWE1FOiBvbmx5IHJlLWNyZWF0ZSB3aGVuIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIHRoZSBzYW1lIGFzIHdhcyBpbml0aWFsbHkgY3JlYXRlZFxuICAgICAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSBmdW5jdGlvbnMvY29uc3RhbnRzIGJlZm9yZSBpbXBvcnRpbmcgdGhlbSBhZ2Fpbj9cbiAgICAgICAgaW50ZXJuYWxJbXBvcnQoZmFjdG9yeSwge1xuICAgICAgICAgIG92ZXJyaWRlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTsgLy8gdGhlIGNyZWF0ZSBmdW5jdGlvbiBleHBvc2VkIG9uIHRoZSBtYXRoanMgaW5zdGFuY2UgaXMgYm91bmQgdG9cbiAgLy8gdGhlIGZhY3RvcnkgZnVuY3Rpb25zIHBhc3NlZCBiZWZvcmVcblxuICBtYXRoLmNyZWF0ZSA9IGNyZWF0ZS5iaW5kKG51bGwsIGZhY3Rvcmllcyk7IC8vIGV4cG9ydCBmYWN0b3J5IGZ1bmN0aW9uXG5cbiAgbWF0aC5mYWN0b3J5ID0gX2ZhY3RvcnkuZmFjdG9yeTsgLy8gaW1wb3J0IHRoZSBmYWN0b3J5IGZ1bmN0aW9ucyBsaWtlIGNyZWF0ZUFkZCBhcyBhbiBhcnJheSBpbnN0ZWFkIG9mIG9iamVjdCxcbiAgLy8gZWxzZSB0aGV5IHdpbGwgZ2V0IGEgZGlmZmVyZW50IG5hbWluZyAoYGNyZWF0ZUFkZGAgaW5zdGVhZCBvZiBgYWRkYCkuXG5cbiAgbWF0aFtcImltcG9ydFwiXSgoMCwgX29iamVjdC52YWx1ZXMpKCgwLCBfb2JqZWN0LmRlZXBGbGF0dGVuKShmYWN0b3JpZXMpKSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG4gIHZhciBtb3ZlZE5hbWVzID0gWyd0eXBlLmlzTnVtYmVyJywgJ3R5cGUuaXNDb21wbGV4JywgJ3R5cGUuaXNCaWdOdW1iZXInLCAndHlwZS5pc0ZyYWN0aW9uJywgJ3R5cGUuaXNVbml0JywgJ3R5cGUuaXNTdHJpbmcnLCAndHlwZS5pc0FycmF5JywgJ3R5cGUuaXNNYXRyaXgnLCAndHlwZS5pc0RlbnNlTWF0cml4JywgJ3R5cGUuaXNTcGFyc2VNYXRyaXgnLCAndHlwZS5pc0NvbGxlY3Rpb24nLCAndHlwZS5pc1JhbmdlJywgJ3R5cGUuaXNJbmRleCcsICd0eXBlLmlzQm9vbGVhbicsICd0eXBlLmlzUmVzdWx0U2V0JywgJ3R5cGUuaXNIZWxwJywgJ3R5cGUuaXNGdW5jdGlvbicsICd0eXBlLmlzRGF0ZScsICd0eXBlLmlzUmVnRXhwJywgJ3R5cGUuaXNPYmplY3QnLCAndHlwZS5pc051bGwnLCAndHlwZS5pc1VuZGVmaW5lZCcsICd0eXBlLmlzQWNjZXNzb3JOb2RlJywgJ3R5cGUuaXNBcnJheU5vZGUnLCAndHlwZS5pc0Fzc2lnbm1lbnROb2RlJywgJ3R5cGUuaXNCbG9ja05vZGUnLCAndHlwZS5pc0NvbmRpdGlvbmFsTm9kZScsICd0eXBlLmlzQ29uc3RhbnROb2RlJywgJ3R5cGUuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ3R5cGUuaXNGdW5jdGlvbk5vZGUnLCAndHlwZS5pc0luZGV4Tm9kZScsICd0eXBlLmlzTm9kZScsICd0eXBlLmlzT2JqZWN0Tm9kZScsICd0eXBlLmlzT3BlcmF0b3JOb2RlJywgJ3R5cGUuaXNQYXJlbnRoZXNpc05vZGUnLCAndHlwZS5pc1JhbmdlTm9kZScsICd0eXBlLmlzU3ltYm9sTm9kZScsICd0eXBlLmlzQ2hhaW4nLCAndHlwZS5CaWdOdW1iZXInLCAndHlwZS5DaGFpbicsICd0eXBlLkNvbXBsZXgnLCAndHlwZS5GcmFjdGlvbicsICd0eXBlLk1hdHJpeCcsICd0eXBlLkRlbnNlTWF0cml4JywgJ3R5cGUuU3BhcnNlTWF0cml4JywgJ3R5cGUuU3BhJywgJ3R5cGUuRmlib25hY2NpSGVhcCcsICd0eXBlLkltbXV0YWJsZURlbnNlTWF0cml4JywgJ3R5cGUuSW5kZXgnLCAndHlwZS5SYW5nZScsICd0eXBlLlJlc3VsdFNldCcsICd0eXBlLlVuaXQnLCAndHlwZS5IZWxwJywgJ3R5cGUuUGFyc2VyJywgJ2V4cHJlc3Npb24ucGFyc2UnLCAnZXhwcmVzc2lvbi5QYXJzZXInLCAnZXhwcmVzc2lvbi5ub2RlLkFjY2Vzc29yTm9kZScsICdleHByZXNzaW9uLm5vZGUuQXJyYXlOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Bc3NpZ25tZW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuQmxvY2tOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Db25kaXRpb25hbE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkNvbnN0YW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuSW5kZXhOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5GdW5jdGlvbk5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk9iamVjdE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk9wZXJhdG9yTm9kZScsICdleHByZXNzaW9uLm5vZGUuUGFyZW50aGVzaXNOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5SYW5nZU5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLlJlbGF0aW9uYWxOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5TeW1ib2xOb2RlJywgJ2pzb24ucmV2aXZlcicsICdlcnJvci5Bcmd1bWVudHNFcnJvcicsICdlcnJvci5EaW1lbnNpb25FcnJvcicsICdlcnJvci5JbmRleEVycm9yJ107XG4gIG1vdmVkTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoZnVsbE5hbWUpIHtcbiAgICB2YXIgcGFydHMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgIHZhciBwYXRoID0gKDAsIF9hcnJheS5pbml0aWFsKShwYXJ0cyk7XG4gICAgdmFyIG5hbWUgPSAoMCwgX2FycmF5Lmxhc3QpKHBhcnRzKTtcbiAgICB2YXIgb2JqID0gKDAsIF9vYmplY3QudHJhdmVyc2UpKG1hdGgsIHBhdGgpO1xuICAgICgwLCBfb2JqZWN0LmxhenkpKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKFwibWF0aC5cIi5jb25jYXQoZnVsbE5hbWUsIFwiIGlzIG1vdmVkIHRvIG1hdGguXCIpLmNvbmNhdChuYW1lLCBcIiBpbiB2Ni4wLjAuIFwiKSArICdQbGVhc2UgdXNlIHRoZSBuZXcgbG9jYXRpb24gaW5zdGVhZC4nKTtcbiAgICAgIHJldHVybiBtYXRoW25hbWVdO1xuICAgIH0pO1xuICB9KTtcbiAgKDAsIF9vYmplY3QubGF6eSkobWF0aC5leHByZXNzaW9uLCAnZG9jcycsIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hdGguZXhwcmVzc2lvbi5kb2NzIGhhcyBiZWVuIG1vdmVkLiAnICsgJ1BsZWFzZSBpbXBvcnQgdmlhIFwiaW1wb3J0IHsgZG9jcyB9IGZyb20gXFwnbWF0aGpzXFwnXCInKTtcbiAgfSk7XG4gIG1hdGguQXJndW1lbnRzRXJyb3IgPSBfQXJndW1lbnRzRXJyb3IuQXJndW1lbnRzRXJyb3I7XG4gIG1hdGguRGltZW5zaW9uRXJyb3IgPSBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3I7XG4gIG1hdGguSW5kZXhFcnJvciA9IF9JbmRleEVycm9yLkluZGV4RXJyb3I7XG4gIHJldHVybiBtYXRoO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25maWdGYWN0b3J5ID0gY29uZmlnRmFjdG9yeTtcbmV4cG9ydHMuTlVNQkVSX09QVElPTlMgPSBleHBvcnRzLk1BVFJJWF9PUFRJT05TID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY29uZmlnMiA9IHJlcXVpcmUoXCIuLi9jb25maWdcIik7XG5cbnZhciBNQVRSSVhfT1BUSU9OUyA9IFsnTWF0cml4JywgJ0FycmF5J107IC8vIHZhbGlkIHZhbHVlcyBmb3Igb3B0aW9uIG1hdHJpeFxuXG5leHBvcnRzLk1BVFJJWF9PUFRJT05TID0gTUFUUklYX09QVElPTlM7XG52YXIgTlVNQkVSX09QVElPTlMgPSBbJ251bWJlcicsICdCaWdOdW1iZXInLCAnRnJhY3Rpb24nXTsgLy8gdmFsaWQgdmFsdWVzIGZvciBvcHRpb24gbnVtYmVyXG5cbmV4cG9ydHMuTlVNQkVSX09QVElPTlMgPSBOVU1CRVJfT1BUSU9OUztcblxuZnVuY3Rpb24gY29uZmlnRmFjdG9yeShjb25maWcsIGVtaXQpIHtcbiAgLyoqXG4gICAqIFNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1hdGguanMsIGFuZCBnZXQgY3VycmVudCBvcHRpb25zLlxuICAgKiBXaWxsIGVtaXQgYSAnY29uZmlnJyBldmVudCwgd2l0aCBhcmd1bWVudHMgKGN1cnIsIHByZXYsIGNoYW5nZXMpLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGEgbWF0aGpzIGluc3RhbmNlIGNyZWF0ZWQgdXNpbmcgYGNyZWF0ZWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29uZmlnKGNvbmZpZzogT2JqZWN0KTogT2JqZWN0XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKlxuICAgKiAgICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnXG4gICAqXG4gICAqICAgICAvLyBjcmVhdGUgYSBtYXRoanMgaW5zdGFuY2VcbiAgICogICAgIGNvbnN0IG1hdGggPSBjcmVhdGUoYWxsKVxuICAgKlxuICAgKiAgICAgbWF0aC5jb25maWcoKS5udW1iZXIgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyAnbnVtYmVyJ1xuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnMC40JykgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyBudW1iZXIgMC40XG4gICAqICAgICBtYXRoLmNvbmZpZyh7bnVtYmVyOiAnRnJhY3Rpb24nfSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJzAuNCcpICAgICAgICAgICAgICAgIC8vIG91dHB1dHMgRnJhY3Rpb24gMi81XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gQXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d29cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB2YWx1ZXMsIHVzZWQgYnkgYWxsIGNvbXBhcmlzb24gZnVuY3Rpb25zLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZyAnTWF0cml4JyAoZGVmYXVsdCkgb3IgJ0FycmF5Jy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbnVtYmVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBwcmVjaXNpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBmb3IgQmlnTnVtYmVycy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gcGFyZW50aGVzaXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gZGlzcGxheSBwYXJlbnRoZXNlcyBpbiBMYVRlWCBhbmQgc3RyaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSByYW5kb21TZWVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIG51bGwgdG8gcmFuZG9tbHkgc2VlZC5cbiAgICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIF9jb25maWcob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB2YXIgcHJldiA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkoY29uZmlnLCBfb2JqZWN0LmNsb25lKTsgLy8gdmFsaWRhdGUgc29tZSBvZiB0aGUgb3B0aW9uc1xuXG4gICAgICB2YWxpZGF0ZU9wdGlvbihvcHRpb25zLCAnbWF0cml4JywgTUFUUklYX09QVElPTlMpO1xuICAgICAgdmFsaWRhdGVPcHRpb24ob3B0aW9ucywgJ251bWJlcicsIE5VTUJFUl9PUFRJT05TKTsgLy8gbWVyZ2Ugb3B0aW9uc1xuXG4gICAgICAoMCwgX29iamVjdC5kZWVwRXh0ZW5kKShjb25maWcsIG9wdGlvbnMpO1xuICAgICAgdmFyIGN1cnIgPSAoMCwgX29iamVjdC5tYXBPYmplY3QpKGNvbmZpZywgX29iamVjdC5jbG9uZSk7XG4gICAgICB2YXIgY2hhbmdlcyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgX29iamVjdC5jbG9uZSk7IC8vIGVtaXQgJ2NvbmZpZycgZXZlbnRcblxuICAgICAgZW1pdCgnY29uZmlnJywgY3VyciwgcHJldiwgY2hhbmdlcyk7XG4gICAgICByZXR1cm4gY3VycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkoY29uZmlnLCBfb2JqZWN0LmNsb25lKTtcbiAgICB9XG4gIH0gLy8gYXR0YWNoIHRoZSB2YWxpZCBvcHRpb25zIHRvIHRoZSBmdW5jdGlvbiBzbyB0aGV5IGNhbiBiZSBleHRlbmRlZFxuXG5cbiAgX2NvbmZpZy5NQVRSSVhfT1BUSU9OUyA9IE1BVFJJWF9PUFRJT05TO1xuICBfY29uZmlnLk5VTUJFUl9PUFRJT05TID0gTlVNQkVSX09QVElPTlM7IC8vIGF0dGFjaCB0aGUgY29uZmlnIHByb3BlcnRpZXMgYXMgcmVhZG9ubHkgcHJvcGVydGllcyB0byB0aGUgY29uZmlnIGZ1bmN0aW9uXG5cbiAgT2JqZWN0LmtleXMoX2NvbmZpZzIuREVGQVVMVF9DT05GSUcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY29uZmlnLCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gY29uZmlnW2tleV07XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIF9jb25maWc7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBBcnJheSBjb250YWlucyBhIHNwZWNpZmljIGl0ZW0uXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59XG4vKipcbiAqIEZpbmQgYSBzdHJpbmcgaW4gYW4gYXJyYXkuIENhc2UgaW5zZW5zaXRpdmUgc2VhcmNoXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1cbiAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggd2hlbiBmb3VuZC4gUmV0dXJucyAtMSB3aGVuIG5vdCBmb3VuZFxuICovXG5cblxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gaS50b0xvd2VyQ2FzZSgpO1xuICB9KS5pbmRleE9mKGl0ZW0udG9Mb3dlckNhc2UoKSk7XG59XG4vKipcbiAqIFZhbGlkYXRlIGFuIG9wdGlvblxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAgICAgICBPYmplY3Qgd2l0aCBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgIE5hbWUgb2YgdGhlIG9wdGlvbiB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gdmFsdWVzICBBcnJheSB3aXRoIHZhbGlkIHZhbHVlcyBmb3IgdGhpcyBvcHRpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uKG9wdGlvbnMsIG5hbWUsIHZhbHVlcykge1xuICBpZiAob3B0aW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkICYmICFjb250YWlucyh2YWx1ZXMsIG9wdGlvbnNbbmFtZV0pKSB7XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4KHZhbHVlcywgb3B0aW9uc1tuYW1lXSk7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAvLyByaWdodCB2YWx1ZSwgd3JvbmcgY2FzaW5nXG4gICAgICAvLyBUT0RPOiBsb3dlciBjYXNlIHZhbHVlcyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHRoaXMgd2FybmluZyBzb21lIGRheS5cbiAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogV3JvbmcgY2FzaW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiLCBzaG91bGQgYmUgXCInICsgdmFsdWVzW2luZGV4XSArICdcIiBpbnN0ZWFkIG9mIFwiJyArIG9wdGlvbnNbbmFtZV0gKyAnXCIuJyk7XG4gICAgICBvcHRpb25zW25hbWVdID0gdmFsdWVzW2luZGV4XTsgLy8gY2hhbmdlIHRoZSBvcHRpb24gdG8gdGhlIHJpZ2h0IGNhc2luZ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bmtub3duIHZhbHVlXG4gICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IFVua25vd24gdmFsdWUgXCInICsgb3B0aW9uc1tuYW1lXSArICdcIiBmb3IgY29uZmlndXJhdGlvbiBvcHRpb24gXCInICsgbmFtZSArICdcIi4gQXZhaWxhYmxlIG9wdGlvbnM6ICcgKyB2YWx1ZXMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsICcpICsgJy4nKTtcbiAgICB9XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZEltcG9ydCA9IGNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQ7XG5cbmZ1bmN0aW9uIGNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZXByZWNhdGVkSW1wb3J0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdsb2JhbCBpbXBvcnQgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGluIHY2LjAuMC4gXFxuJyArICdQbGVhc2UgY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGlmIHlvdSB3YW50IHRvIGltcG9ydCBmdW5jdGlvbnMuIFxcbicgKyAnRXhhbXBsZTpcXG4nICsgJ1xcbicgKyAnICBpbXBvcnQgeyBjcmVhdGUsIGFsbCB9IGZyb20gXFwnbWF0aGpzXFwnO1xcbicgKyAnICBjb25zdCBtYXRoanMgPSBjcmVhdGUoYWxsKTtcXG4nICsgJyAgbWF0aGpzLmltcG9ydCguLi4pO1xcbicpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbXBvcnRGYWN0b3J5ID0gaW1wb3J0RmFjdG9yeTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9Bcmd1bWVudHNFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9Bcmd1bWVudHNFcnJvclwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGltcG9ydEZhY3RvcnkodHlwZWQsIGxvYWQsIG1hdGgsIGltcG9ydGVkRmFjdG9yaWVzKSB7XG4gIC8qKlxuICAgKiBJbXBvcnQgZnVuY3Rpb25zIGZyb20gYW4gb2JqZWN0IG9yIGEgbW9kdWxlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGEgbWF0aGpzIGluc3RhbmNlIGNyZWF0ZWQgdXNpbmcgYGNyZWF0ZWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pbXBvcnQoZnVuY3Rpb25zKVxuICAgKiAgICBtYXRoLmltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAtIGBmdW5jdGlvbnM6IE9iamVjdGBcbiAgICogICBBbiBvYmplY3Qgd2l0aCBmdW5jdGlvbnMgb3IgZmFjdG9yaWVzIHRvIGJlIGltcG9ydGVkLlxuICAgKiAtIGBvcHRpb25zOiBPYmplY3RgIEFuIG9iamVjdCB3aXRoIGltcG9ydCBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAgICogICAtIGBvdmVycmlkZTogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIGV4aXN0aW5nIGZ1bmN0aW9ucyB3aWxsIGJlIG92ZXJ3cml0dGVuLiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKiAgIC0gYHNpbGVudDogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBlcnJvcnMgb24gZHVwbGljYXRlcyBvciBpbnZhbGlkXG4gICAqICAgICB0eXBlcy4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICogICAtIGB3cmFwOiBib29sZWFuYFxuICAgKiAgICAgSWYgdHJ1ZSwgdGhlIGZ1bmN0aW9ucyB3aWxsIGJlIHdyYXBwZWQgaW4gYSB3cmFwcGVyIGZ1bmN0aW9uXG4gICAqICAgICB3aGljaCBjb252ZXJ0cyBkYXRhIHR5cGVzIGxpa2UgTWF0cml4IHRvIHByaW1pdGl2ZSBkYXRhIHR5cGVzIGxpa2UgQXJyYXkuXG4gICAqICAgICBUaGUgd3JhcHBlciBpcyBuZWVkZWQgd2hlbiBleHRlbmRpbmcgbWF0aC5qcyB3aXRoIGxpYnJhcmllcyB3aGljaCBkbyBub3RcbiAgICogICAgIHN1cHBvcnQgdGhlc2UgZGF0YSB0eXBlLiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnXG4gICAqICAgIGltcG9ydCAqIGFzIG51bWJlcnMgZnJvbSAnbnVtYmVycydcbiAgICpcbiAgICogICAgLy8gY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlXG4gICAqICAgIGNvbnN0IG1hdGggPSBjcmVhdGUoYWxsKVxuICAgKlxuICAgKiAgICAvLyBkZWZpbmUgbmV3IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzXG4gICAqICAgIG1hdGguaW1wb3J0KHtcbiAgICogICAgICBteXZhbHVlOiA0MixcbiAgICogICAgICBoZWxsbzogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgIHJldHVybiAnaGVsbG8sICcgKyBuYW1lICsgJyEnXG4gICAqICAgICAgfVxuICAgKiAgICB9KVxuICAgKlxuICAgKiAgICAvLyB1c2UgdGhlIGltcG9ydGVkIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZVxuICAgKiAgICBtYXRoLm15dmFsdWUgKiAyICAgICAgICAgICAgICAgLy8gODRcbiAgICogICAgbWF0aC5oZWxsbygndXNlcicpICAgICAgICAgICAgIC8vICdoZWxsbywgdXNlciEnXG4gICAqXG4gICAqICAgIC8vIGltcG9ydCB0aGUgbnBtIG1vZHVsZSAnbnVtYmVycydcbiAgICogICAgLy8gKG11c3QgYmUgaW5zdGFsbGVkIGZpcnN0IHdpdGggYG5wbSBpbnN0YWxsIG51bWJlcnNgKVxuICAgKiAgICBtYXRoLmltcG9ydChudW1iZXJzLCB7d3JhcDogdHJ1ZX0pXG4gICAqXG4gICAqICAgIG1hdGguZmlib25hY2NpKDcpIC8vIHJldHVybnMgMTNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBBcnJheX0gZnVuY3Rpb25zICBPYmplY3Qgd2l0aCBmdW5jdGlvbnMgdG8gYmUgaW1wb3J0ZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gICAgICAgICAgSW1wb3J0IG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBtYXRoSW1wb3J0KGZ1bmN0aW9ucywgb3B0aW9ucykge1xuICAgIHZhciBudW0gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKG51bSAhPT0gMSAmJiBudW0gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBfQXJndW1lbnRzRXJyb3IuQXJndW1lbnRzRXJyb3IoJ2ltcG9ydCcsIG51bSwgMSwgMik7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgdmFsdWUsIG5hbWUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5pc0xlZ2FjeUZhY3RvcnkpKHZhbHVlKSkge1xuICAgICAgICAvLyBsZWdhY3kgZmFjdG9yaWVzIGRvbid0IGFsd2F5cyBoYXZlIGEgbmFtZSxcbiAgICAgICAgLy8gbGV0J3Mgbm90IGhhbmRsZSB0aGVtIHZpYSB0aGUgbmV3IGZsYXRWYWx1ZXNcbiAgICAgICAgX2ltcG9ydExlZ2FjeUZhY3RvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGZsYXR0ZW5JbXBvcnRzKGZsYXRWYWx1ZXMsIGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIF9uYW1lIGluIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh2YWx1ZSwgX25hbWUpKSB7XG4gICAgICAgICAgICBmbGF0dGVuSW1wb3J0cyhmbGF0VmFsdWVzLCB2YWx1ZVtfbmFtZV0sIF9uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpIHx8IG5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgZmxhdE5hbWUgPSAoMCwgX2ZhY3RvcnkuaXNGYWN0b3J5KSh2YWx1ZSkgPyBpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeSh2YWx1ZSkgPyB2YWx1ZS5mbiArICcudHJhbnNmb3JtJyA6IC8vIFRPRE86IHRoaXMgaXMgdWdseVxuICAgICAgICB2YWx1ZS5mbiA6IG5hbWU7IC8vIHdlIGFsbG93IGltcG9ydGluZyB0aGUgc2FtZSBmdW5jdGlvbiB0d2ljZSBpZiBpdCBwb2ludHMgdG8gdGhlIHNhbWUgaW1wbGVtZW50YXRpb25cblxuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGZsYXRWYWx1ZXMsIGZsYXROYW1lKSAmJiBmbGF0VmFsdWVzW2ZsYXROYW1lXSAhPT0gdmFsdWUgJiYgIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0IFwiJyArIGZsYXROYW1lICsgJ1wiIHR3aWNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmbGF0VmFsdWVzW2ZsYXROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhY3RvcnksIE9iamVjdCwgb3IgQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmbGF0VmFsdWVzID0ge307XG4gICAgZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgZnVuY3Rpb25zKTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gZmxhdFZhbHVlcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShmbGF0VmFsdWVzLCBuYW1lKSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnaW1wb3J0JywgbmFtZSlcbiAgICAgICAgdmFyIHZhbHVlID0gZmxhdFZhbHVlc1tuYW1lXTtcblxuICAgICAgICBpZiAoKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpKSB7XG4gICAgICAgICAgLy8gd2UgaWdub3JlIG5hbWUgaGVyZSBhbmQgZW5mb3JjZSB0aGUgbmFtZSBvZiB0aGUgZmFjdG9yeVxuICAgICAgICAgIC8vIG1heWJlIGF0IHNvbWUgcG9pbnQgd2UgZG8gd2FudCB0byBhbGxvdyBvdmVycmlkaW5nIGl0XG4gICAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGNhbiBpbXBsZW1lbnQgYW4gb3B0aW9uIG92ZXJyaWRlRmFjdG9yeU5hbWVzOiB0cnVlXG4gICAgICAgICAgX2ltcG9ydEZhY3RvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3VwcG9ydGVkVHlwZSh2YWx1ZSkpIHtcbiAgICAgICAgICBfaW1wb3J0KG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWN0b3J5LCBPYmplY3QsIG9yIEFycmF5IGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgbWF0aCBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgU2VlIGltcG9ydCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9uc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnQobmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGZ1bmN0aW9uLCBpdCdzIHRvIGNvbXBsaWNhdGVkIGFuZCBjb250YWlucyBkdXBsaWNhdGUgY29kZVxuICAgIGlmIChvcHRpb25zLndyYXAgJiYgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBjcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZnVuY3Rpb25cbiAgICAgIHZhbHVlID0gX3dyYXAodmFsdWUpO1xuICAgIH0gLy8gdHVybiBhIHBsYWluIGZ1bmN0aW9uIHdpdGggYSB0eXBlZC1mdW5jdGlvbiBzaWduYXR1cmUgaW50byBhIHR5cGVkLWZ1bmN0aW9uXG5cblxuICAgIGlmIChoYXNUeXBlZEZ1bmN0aW9uU2lnbmF0dXJlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB0eXBlZChuYW1lLCBfZGVmaW5lUHJvcGVydHkoe30sIHZhbHVlLnNpZ25hdHVyZSwgdmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKG1hdGhbbmFtZV0pICYmIGlzVHlwZWRGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIGlmIChvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICAgIC8vIGdpdmUgdGhlIHR5cGVkIGZ1bmN0aW9uIHRoZSByaWdodCBuYW1lXG4gICAgICAgIHZhbHVlID0gdHlwZWQobmFtZSwgdmFsdWUuc2lnbmF0dXJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIHR5cGVkIGZ1bmN0aW9uXG4gICAgICAgIHZhbHVlID0gdHlwZWQobWF0aFtuYW1lXSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBtYXRoW25hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaW1wb3J0ZWRGYWN0b3JpZXNbbmFtZV07XG5cbiAgICAgIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpO1xuXG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWF0aFtuYW1lXSA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgIG1hdGhbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBpbXBvcnRlZEZhY3Rvcmllc1tuYW1lXTtcblxuICAgICAgX2ltcG9ydFRyYW5zZm9ybShuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIG1hdGguZW1pdCgnaW1wb3J0JywgbmFtZSwgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybVtuYW1lXSA9IHZhbHVlLnRyYW5zZm9ybTtcblxuICAgICAgaWYgKGFsbG93ZWRJbkV4cHJlc3Npb25zKG5hbWUpKSB7XG4gICAgICAgIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXSA9IHZhbHVlLnRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVtb3ZlIGV4aXN0aW5nIHRyYW5zZm9ybVxuICAgICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm1bbmFtZV07XG5cbiAgICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpIHtcbiAgICBkZWxldGUgbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybVtuYW1lXTtcblxuICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdID0gbWF0aFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHdyYXBwZXIgYSByb3VuZCBhbiBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyB0aGUgYXJndW1lbnRzXG4gICAqIHRvIHRoZWlyIHByaW1pdGl2ZSB2YWx1ZXMgKGxpa2UgY29udmVydCBhIE1hdHJpeCB0byBBcnJheSlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgdGhlIHdyYXBwZWQgZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfd3JhcChmbikge1xuICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgYXJnc1tpXSA9IGFyZyAmJiBhcmcudmFsdWVPZigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4uYXBwbHkobWF0aCwgYXJncyk7XG4gICAgfTtcblxuICAgIGlmIChmbi50cmFuc2Zvcm0pIHtcbiAgICAgIHdyYXBwZXIudHJhbnNmb3JtID0gZm4udHJhbnNmb3JtO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gaW5zdGFuY2Ugb2YgYSBmYWN0b3J5IGludG8gbWF0aC5qc1xuICAgKiBAcGFyYW0ge3tmYWN0b3J5OiBGdW5jdGlvbiwgbmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIG1hdGg6IGJvb2xlYW59fSBmYWN0b3J5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBTZWUgaW1wb3J0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAvLyBUT0RPOiBfaW1wb3J0TGVnYWN5RmFjdG9yeSBpcyBkZXByZWNhdGVkIHNpbmNlIHY2LjAuMCwgY2xlYW4gdXAgc29tZSBkYXlcblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRMZWdhY3lGYWN0b3J5KGZhY3RvcnksIG9wdGlvbnMpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ0ZhY3RvcmllcyBvZiB0eXBlIHsgbmFtZSwgZmFjdG9yeSB9IGFyZSBkZXByZWNhdGVkIHNpbmNlIHY2LiAnICsgJ1BsZWFzZSBjcmVhdGUgeW91ciBmYWN0b3J5IGZ1bmN0aW9ucyB1c2luZyB0aGUgbWF0aC5mYWN0b3J5IGZ1bmN0aW9uLicpO1xuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5Lm5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgbmFtZSA9IGZhY3RvcnkubmFtZTtcbiAgICAgIHZhciBleGlzdGluZ1RyYW5zZm9ybSA9IChuYW1lIGluIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm0pO1xuICAgICAgdmFyIG5hbWVzcGFjZSA9IGZhY3RvcnkucGF0aCA/ICgwLCBfb2JqZWN0LnRyYXZlcnNlKShtYXRoLCBmYWN0b3J5LnBhdGgpIDogbWF0aDtcbiAgICAgIHZhciBleGlzdGluZyA9ICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShuYW1lc3BhY2UsIG5hbWUpID8gbmFtZXNwYWNlW25hbWVdIDogdW5kZWZpbmVkO1xuXG4gICAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbG9hZChmYWN0b3J5KTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNmb3JtcyBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gZmFjdG9yeSBmdW5jdGlvbnMuICcgKyAnUGxlYXNlIGNyZWF0ZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciBpdCB3aXRoIGV4cG9ydHMucGF0aD1cImV4cHJlc3Npb24udHJhbnNmb3JtXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1R5cGVkRnVuY3Rpb24oZXhpc3RpbmcpICYmIGlzVHlwZWRGdW5jdGlvbihpbnN0YW5jZSkpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vdmVycmlkZSkgey8vIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHR5cGVkIGZ1bmN0aW9uIChub3RoaW5nIHRvIGRvKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIG5ldyB0eXBlZCBmdW5jdGlvblxuICAgICAgICAgICAgaW5zdGFuY2UgPSB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0IFwiJyArIG5hbWUgKyAnXCI6IGFscmVhZHkgZXhpc3RzJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChmYWN0b3J5LmxhenkgIT09IGZhbHNlKSB7XG4gICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG5hbWVzcGFjZSwgbmFtZSwgcmVzb2x2ZXIpO1xuXG4gICAgICAgIGlmIChleGlzdGluZ1RyYW5zZm9ybSkge1xuICAgICAgICAgIF9kZWxldGVUcmFuc2Zvcm0obmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZhY3RvcnkucGF0aCA9PT0gJ2V4cHJlc3Npb24udHJhbnNmb3JtJyB8fCBsZWdhY3lGYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZXNwYWNlW25hbWVdID0gcmVzb2x2ZXIoKTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmYWN0b3J5LnBhdGggPT09ICdleHByZXNzaW9uLnRyYW5zZm9ybScgfHwgbGVnYWN5RmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpKSB7XG4gICAgICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSByZXNvbHZlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIga2V5ID0gZmFjdG9yeS5wYXRoID8gZmFjdG9yeS5wYXRoICsgJy4nICsgZmFjdG9yeS5uYW1lIDogZmFjdG9yeS5uYW1lO1xuICAgICAgaW1wb3J0ZWRGYWN0b3JpZXNba2V5XSA9IGZhY3Rvcnk7XG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyLCBmYWN0b3J5LnBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bm5hbWVkIGZhY3RvcnkuXG4gICAgICAvLyBubyBsYXp5IGxvYWRpbmdcbiAgICAgIGxvYWQoZmFjdG9yeSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gaW5zdGFuY2Ugb2YgYSBmYWN0b3J5IGludG8gbWF0aC5qc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHNjb3BlOiBvYmplY3QpfSBmYWN0b3J5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBTZWUgaW1wb3J0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT1mYWN0b3J5Lm5hbWVdIE9wdGlvbmFsIGN1c3RvbSBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2ltcG9ydEZhY3RvcnkoZmFjdG9yeSwgb3B0aW9ucykge1xuICAgIHZhciBuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWN0b3J5LmZuO1xuXG4gICAgaWYgKCgwLCBfYXJyYXkuY29udGFpbnMpKG5hbWUsICcuJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFjdG9yeSBuYW1lIHNob3VsZCBub3QgY29udGFpbiBhIG5lc3RlZCBwYXRoLiAnICsgJ05hbWU6ICcgKyBKU09OLnN0cmluZ2lmeShuYW1lKSk7XG4gICAgfVxuXG4gICAgdmFyIG5hbWVzcGFjZSA9IGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpID8gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybSA6IG1hdGg7XG4gICAgdmFyIGV4aXN0aW5nVHJhbnNmb3JtID0gKG5hbWUgaW4gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybSk7XG4gICAgdmFyIGV4aXN0aW5nID0gKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG5hbWVzcGFjZSwgbmFtZSkgPyBuYW1lc3BhY2VbbmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIC8vIGNvbGxlY3QgYWxsIGRlcGVuZGVuY2llcywgaGFuZGxlIGZpbmRpbmcgYm90aCBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgYW5kIG90aGVyIHNwZWNpYWwgY2FzZXNcbiAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB7fTtcbiAgICAgIGZhY3RvcnkuZGVwZW5kZW5jaWVzLm1hcChfZmFjdG9yeS5zdHJpcE9wdGlvbmFsTm90YXRpb24pLmZvckVhY2goZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHtcbiAgICAgICAgaWYgKCgwLCBfYXJyYXkuY29udGFpbnMpKGRlcGVuZGVuY3ksICcuJykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3RvcnkgZGVwZW5kZW5jeSBzaG91bGQgbm90IGNvbnRhaW4gYSBuZXN0ZWQgcGF0aC4gJyArICdOYW1lOiAnICsgSlNPTi5zdHJpbmdpZnkoZGVwZW5kZW5jeSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09ICdtYXRoJykge1xuICAgICAgICAgIGRlcGVuZGVuY2llcy5tYXRoID0gbWF0aDtcbiAgICAgICAgfSBlbHNlIGlmIChkZXBlbmRlbmN5ID09PSAnbWF0aFdpdGhUcmFuc2Zvcm0nKSB7XG4gICAgICAgICAgZGVwZW5kZW5jaWVzLm1hdGhXaXRoVHJhbnNmb3JtID0gbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtO1xuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09ICdjbGFzc2VzJykge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IganNvbiByZXZpdmVyXG4gICAgICAgICAgZGVwZW5kZW5jaWVzLmNsYXNzZXMgPSBtYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcGVuZGVuY2llc1tkZXBlbmRlbmN5XSA9IG1hdGhbZGVwZW5kZW5jeV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIGluc3RhbmNlID0gLyogI19fUFVSRV9fICovZmFjdG9yeShkZXBlbmRlbmNpZXMpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zZm9ybXMgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGZhY3RvcnkgZnVuY3Rpb25zLiAnICsgJ1BsZWFzZSBjcmVhdGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgaXQgd2l0aCBleHBvcnRzLnBhdGg9XCJleHByZXNzaW9uLnRyYW5zZm9ybVwiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKGV4aXN0aW5nKSAmJiBpc1R5cGVkRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIG1lcmdlIHRoZSBleGlzdGluZyBhbmQgbmV3IHR5cGVkIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgLy8ga2VlcCBleGlzdGluZywgaWdub3JlIGltcG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgfVxuICAgIH07IC8vIFRPRE86IGFkZCB1bml0IHRlc3Qgd2l0aCBub24tbGF6eSBmYWN0b3J5XG5cblxuICAgIGlmICghZmFjdG9yeS5tZXRhIHx8IGZhY3RvcnkubWV0YS5sYXp5ICE9PSBmYWxzZSkge1xuICAgICAgKDAsIF9vYmplY3QubGF6eSkobmFtZXNwYWNlLCBuYW1lLCByZXNvbHZlcik7IC8vIEZJWE1FOiByZW1vdmUgdGhlIGBpZiAoZXhpc3RpbmcgJiZgIGNvbmRpdGlvbiBhZ2Fpbi4gQ2FuIHdlIG1ha2Ugc3VyZSBzdWJzZXQgaXMgbG9hZGVkIGJlZm9yZSBzdWJzZXQudHJhbnNmb3JtPyAoTmFtZSBjb2xsaXNpb24sIGFuZCBubyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgdHdvKVxuXG4gICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgX2RlbGV0ZVRyYW5zZm9ybShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeShmYWN0b3J5KSB8fCBmYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAoMCwgX29iamVjdC5sYXp5KShtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm0sIG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VbbmFtZV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZXNwYWNlW25hbWVdID0gcmVzb2x2ZXIoKTsgLy8gRklYTUU6IHJlbW92ZSB0aGUgYGlmIChleGlzdGluZyAmJmAgY29uZGl0aW9uIGFnYWluLiBDYW4gd2UgbWFrZSBzdXJlIHN1YnNldCBpcyBsb2FkZWQgYmVmb3JlIHN1YnNldC50cmFuc2Zvcm0/IChOYW1lIGNvbGxpc2lvbiwgYW5kIG5vIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB0d28pXG5cbiAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZ1RyYW5zZm9ybSkge1xuICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpIHx8IGZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSkge1xuICAgICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVtuYW1lXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVE9ETzogaW1wcm92ZSBmYWN0b3JpZXMsIHN0b3JlIGEgbGlzdCB3aXRoIGltcG9ydHMgaW5zdGVhZCB3aGljaCBjYW4gYmUgcmUtcGxheWVkXG5cblxuICAgIGltcG9ydGVkRmFjdG9yaWVzW25hbWVdID0gZmFjdG9yeTtcbiAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSB0eXBlIHdoaWNoIGNhbiBiZSBpbXBvcnRlZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCBVbml0IHwgQ29tcGxleH0gb2JqZWN0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaXNTdXBwb3J0ZWRUeXBlKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmplY3QgPT09ICdudW1iZXInIHx8IHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvYmplY3QgPT09ICdib29sZWFuJyB8fCBvYmplY3QgPT09IG51bGwgfHwgKDAsIF9pcy5pc1VuaXQpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0NvbXBsZXgpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikob2JqZWN0KSB8fCAoMCwgX2lzLmlzRnJhY3Rpb24pKG9iamVjdCkgfHwgKDAsIF9pcy5pc01hdHJpeCkob2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KG9iamVjdCk7XG4gIH1cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGdpdmVuIHRoaW5nIGlzIGEgdHlwZWQtZnVuY3Rpb25cbiAgICogQHBhcmFtIHsqfSBmblxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBgZm5gIGlzIGEgdHlwZWQtZnVuY3Rpb25cbiAgICovXG5cblxuICBmdW5jdGlvbiBpc1R5cGVkRnVuY3Rpb24oZm4pIHtcbiAgICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIF90eXBlb2YoZm4uc2lnbmF0dXJlcykgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzVHlwZWRGdW5jdGlvblNpZ25hdHVyZShmbikge1xuICAgIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBmdW5jdGlvbiBhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSB7XG4gICAgcmV0dXJuICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBuYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlZ2FjeUZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkucGF0aCA9PT0gdW5kZWZpbmVkICYmICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBmYWN0b3J5Lm5hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5mbi5pbmRleE9mKCcuJykgPT09IC0xICYmIC8vIEZJWE1FOiBtYWtlIGNoZWNraW5nIG9uIHBhdGggcmVkdW5kYW50LCBjaGVjayBvbiBtZXRhIGRhdGEgaW5zdGVhZFxuICAgICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBmYWN0b3J5LmZuKSAmJiAoIWZhY3RvcnkubWV0YSB8fCAhZmFjdG9yeS5tZXRhLmlzQ2xhc3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNUcmFuc2Zvcm1GdW5jdGlvbkZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5ICE9PSB1bmRlZmluZWQgJiYgZmFjdG9yeS5tZXRhICE9PSB1bmRlZmluZWQgJiYgZmFjdG9yeS5tZXRhLmlzVHJhbnNmb3JtRnVuY3Rpb24gPT09IHRydWUgfHwgZmFsc2U7XG4gIH0gLy8gbmFtZXNwYWNlcyBhbmQgZnVuY3Rpb25zIG5vdCBhdmFpbGFibGUgaW4gdGhlIHBhcnNlciBmb3Igc2FmZXR5IHJlYXNvbnNcblxuXG4gIHZhciB1bnNhZmUgPSB7XG4gICAgZXhwcmVzc2lvbjogdHJ1ZSxcbiAgICB0eXBlOiB0cnVlLFxuICAgIGRvY3M6IHRydWUsXG4gICAgZXJyb3I6IHRydWUsXG4gICAganNvbjogdHJ1ZSxcbiAgICBjaGFpbjogdHJ1ZSAvLyBjaGFpbiBtZXRob2Qgbm90IHN1cHBvcnRlZC4gTm90ZSB0aGF0IHRoZXJlIGlzIGEgdW5pdCBjaGFpbiB0b28uXG5cbiAgfTtcbiAgcmV0dXJuIG1hdGhJbXBvcnQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVR5cGVkID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3R5cGVkRnVuY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJ0eXBlZC1mdW5jdGlvblwiKSk7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqIENyZWF0ZSBhIHR5cGVkLWZ1bmN0aW9uIHdoaWNoIGNoZWNrcyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBhbmRcbiAqIGNhbiBtYXRjaCB0aGVtIGFnYWluc3QgbXVsdGlwbGUgcHJvdmlkZWQgc2lnbmF0dXJlcy4gVGhlIHR5cGVkLWZ1bmN0aW9uXG4gKiBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIGlucHV0cyBpbiBvcmRlciB0byBmaW5kIGEgbWF0Y2hpbmcgc2lnbmF0dXJlLlxuICogVHlwZWQgZnVuY3Rpb25zIHRocm93IGluZm9ybWF0aXZlIGVycm9ycyBpbiBjYXNlIG9mIHdyb25nIGlucHV0IGFyZ3VtZW50cy5cbiAqXG4gKiBTZWUgdGhlIGxpYnJhcnkgW3R5cGVkLWZ1bmN0aW9uXShodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL3R5cGVkLWZ1bmN0aW9uKVxuICogZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24uXG4gKlxuICogU3ludGF4OlxuICpcbiAqICAgICBtYXRoLnR5cGVkKG5hbWUsIHNpZ25hdHVyZXMpIDogZnVuY3Rpb25cbiAqICAgICBtYXRoLnR5cGVkKHNpZ25hdHVyZXMpIDogZnVuY3Rpb25cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBtdWx0aXBsZSB0eXBlcyBwZXIgYXJndW1lbnQgKHR5cGUgdW5pb24pXG4gKiAgICAgY29uc3QgZm4yID0gdHlwZWQoe1xuICogICAgICAgJ251bWJlciB8IGJvb2xlYW4nOiBmdW5jdGlvbiAoYikge1xuICogICAgICAgICByZXR1cm4gJ2IgaXMgYSBudW1iZXIgb3IgYm9vbGVhbidcbiAqICAgICAgIH0sXG4gKiAgICAgICAnc3RyaW5nLCBudW1iZXIgfCBib29sZWFuJzogZnVuY3Rpb24gKGEsIGIpIHtcbiAqICAgICAgICAgcmV0dXJuICdhIGlzIGEgc3RyaW5nLCBiIGlzIGEgbnVtYmVyIG9yIGJvb2xlYW4nXG4gKiAgICAgICB9XG4gKiAgICAgfSlcbiAqXG4gKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBhbiBhbnkgdHlwZSBhcmd1bWVudFxuICogICAgIGNvbnN0IGxvZyA9IHR5cGVkKHtcbiAqICAgICAgICdzdHJpbmcsIGFueSc6IGZ1bmN0aW9uIChldmVudCwgZGF0YSkge1xuICogICAgICAgICBjb25zb2xlLmxvZygnZXZlbnQ6ICcgKyBldmVudCArICcsIGRhdGE6ICcgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAqICAgICAgIH1cbiAqICAgICB9KVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSB0eXBlZC1mdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBmdW5jdGlvbj59IHNpZ25hdHVyZXMgICBPYmplY3Qgd2l0aCBvbmUgb3IgbXVsdGlwbGUgZnVuY3Rpb24gc2lnbmF0dXJlc1xuICogQHJldHVybnMge2Z1bmN0aW9ufSBUaGUgY3JlYXRlZCB0eXBlZC1mdW5jdGlvbi5cbiAqL1xuLy8gcmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxudmFyIF9jcmVhdGVUeXBlZDIgPSBmdW5jdGlvbiBfY3JlYXRlVHlwZWQoKSB7XG4gIC8vIGluaXRpYWxseSwgcmV0dXJuIHRoZSBvcmlnaW5hbCBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxuICAvLyBjb25zZWN1dGl2ZWx5LCByZXR1cm4gYSBuZXcgaW5zdGFuY2UgZnJvbSB0eXBlZC5jcmVhdGUuXG4gIF9jcmVhdGVUeXBlZDIgPSBfdHlwZWRGdW5jdGlvbltcImRlZmF1bHRcIl0uY3JlYXRlO1xuICByZXR1cm4gX3R5cGVkRnVuY3Rpb25bXCJkZWZhdWx0XCJdO1xufTtcblxudmFyIGRlcGVuZGVuY2llcyA9IFsnP0JpZ051bWJlcicsICc/Q29tcGxleCcsICc/RGVuc2VNYXRyaXgnLCAnP0ZyYWN0aW9uJ107XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IHR5cGVkIGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdH0gZGVwZW5kZW5jaWVzICAgT2JqZWN0IHdpdGggZGF0YSB0eXBlcyBsaWtlIENvbXBsZXggYW5kIEJpZ051bWJlclxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5cbnZhciBjcmVhdGVUeXBlZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgndHlwZWQnLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIGNyZWF0ZVR5cGVkKF9yZWYpIHtcbiAgdmFyIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIEZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvLyBUT0RPOiB0eXBlZC1mdW5jdGlvbiBtdXN0IGJlIGFibGUgdG8gc2lsZW50bHkgaWdub3JlIHNpZ25hdHVyZXMgd2l0aCB1bmtub3duIGRhdGEgdHlwZXNcbiAgLy8gZ2V0IGEgbmV3IGluc3RhbmNlIG9mIHR5cGVkLWZ1bmN0aW9uXG4gIHZhciB0eXBlZCA9IF9jcmVhdGVUeXBlZDIoKTsgLy8gZGVmaW5lIGFsbCB0eXBlcy4gVGhlIG9yZGVyIG9mIHRoZSB0eXBlcyBkZXRlcm1pbmVzIGluIHdoaWNoIG9yZGVyIGZ1bmN0aW9uXG4gIC8vIGFyZ3VtZW50cyBhcmUgdHlwZS1jaGVja2VkIChzbyBmb3IgcGVyZm9ybWFuY2UgaXQncyBpbXBvcnRhbnQgdG8gcHV0IHRoZVxuICAvLyBtb3N0IHVzZWQgdHlwZXMgZmlyc3QpLlxuXG5cbiAgdHlwZWQudHlwZXMgPSBbe1xuICAgIG5hbWU6ICdudW1iZXInLFxuICAgIHRlc3Q6IF9pcy5pc051bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ0NvbXBsZXgnLFxuICAgIHRlc3Q6IF9pcy5pc0NvbXBsZXhcbiAgfSwge1xuICAgIG5hbWU6ICdCaWdOdW1iZXInLFxuICAgIHRlc3Q6IF9pcy5pc0JpZ051bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ0ZyYWN0aW9uJyxcbiAgICB0ZXN0OiBfaXMuaXNGcmFjdGlvblxuICB9LCB7XG4gICAgbmFtZTogJ1VuaXQnLFxuICAgIHRlc3Q6IF9pcy5pc1VuaXRcbiAgfSwge1xuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHRlc3Q6IF9pcy5pc1N0cmluZ1xuICB9LCB7XG4gICAgbmFtZTogJ0NoYWluJyxcbiAgICB0ZXN0OiBfaXMuaXNDaGFpblxuICB9LCB7XG4gICAgbmFtZTogJ0FycmF5JyxcbiAgICB0ZXN0OiBfaXMuaXNBcnJheVxuICB9LCB7XG4gICAgbmFtZTogJ01hdHJpeCcsXG4gICAgdGVzdDogX2lzLmlzTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnRGVuc2VNYXRyaXgnLFxuICAgIHRlc3Q6IF9pcy5pc0RlbnNlTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnU3BhcnNlTWF0cml4JyxcbiAgICB0ZXN0OiBfaXMuaXNTcGFyc2VNYXRyaXhcbiAgfSwge1xuICAgIG5hbWU6ICdSYW5nZScsXG4gICAgdGVzdDogX2lzLmlzUmFuZ2VcbiAgfSwge1xuICAgIG5hbWU6ICdJbmRleCcsXG4gICAgdGVzdDogX2lzLmlzSW5kZXhcbiAgfSwge1xuICAgIG5hbWU6ICdib29sZWFuJyxcbiAgICB0ZXN0OiBfaXMuaXNCb29sZWFuXG4gIH0sIHtcbiAgICBuYW1lOiAnUmVzdWx0U2V0JyxcbiAgICB0ZXN0OiBfaXMuaXNSZXN1bHRTZXRcbiAgfSwge1xuICAgIG5hbWU6ICdIZWxwJyxcbiAgICB0ZXN0OiBfaXMuaXNIZWxwXG4gIH0sIHtcbiAgICBuYW1lOiAnZnVuY3Rpb24nLFxuICAgIHRlc3Q6IF9pcy5pc0Z1bmN0aW9uXG4gIH0sIHtcbiAgICBuYW1lOiAnRGF0ZScsXG4gICAgdGVzdDogX2lzLmlzRGF0ZVxuICB9LCB7XG4gICAgbmFtZTogJ1JlZ0V4cCcsXG4gICAgdGVzdDogX2lzLmlzUmVnRXhwXG4gIH0sIHtcbiAgICBuYW1lOiAnbnVsbCcsXG4gICAgdGVzdDogX2lzLmlzTnVsbFxuICB9LCB7XG4gICAgbmFtZTogJ3VuZGVmaW5lZCcsXG4gICAgdGVzdDogX2lzLmlzVW5kZWZpbmVkXG4gIH0sIHtcbiAgICBuYW1lOiAnQWNjZXNzb3JOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBY2Nlc3Nvck5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdBcnJheU5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0FycmF5Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Fzc2lnbm1lbnROb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBc3NpZ25tZW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Jsb2NrTm9kZScsXG4gICAgdGVzdDogX2lzLmlzQmxvY2tOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnQ29uZGl0aW9uYWxOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNDb25kaXRpb25hbE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdDb25zdGFudE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0NvbnN0YW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Z1bmN0aW9uTm9kZScsXG4gICAgdGVzdDogX2lzLmlzRnVuY3Rpb25Ob2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0luZGV4Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzSW5kZXhOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnTm9kZScsXG4gICAgdGVzdDogX2lzLmlzTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ09iamVjdE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc09iamVjdE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdPcGVyYXRvck5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc09wZXJhdG9yTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ1BhcmVudGhlc2lzTm9kZScsXG4gICAgdGVzdDogX2lzLmlzUGFyZW50aGVzaXNOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnUmFuZ2VOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNSYW5nZU5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdTeW1ib2xOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNTeW1ib2xOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnT2JqZWN0JyxcbiAgICB0ZXN0OiBfaXMuaXNPYmplY3RcbiAgfSAvLyBvcmRlciAnT2JqZWN0JyBsYXN0LCBpdCBtYXRjaGVzIG9uIG90aGVyIGNsYXNzZXMgdG9vXG4gIF07XG4gIHR5cGVkLmNvbnZlcnNpb25zID0gW3tcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfSAvLyBub3RlOiBjb252ZXJzaW9uIGZyb20gbnVtYmVyIHRvIEJpZ051bWJlciBjYW4gZmFpbCBpZiB4IGhhcyA+MTUgZGlnaXRzXG5cblxuICAgICAgaWYgKCgwLCBfbnVtYmVyLmRpZ2l0cykoeCkgPiAxNSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgbnVtYmVyIHdpdGggPjE1IHNpZ25pZmljYW50IGRpZ2l0cyB0byBCaWdOdW1iZXIgJyArICcodmFsdWU6ICcgKyB4ICsgJykuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlci4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ251bWJlcicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdudW1iZXInLFxuICAgIHRvOiAnc3RyaW5nJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIHJldHVybiB4ICsgJyc7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ0JpZ051bWJlcicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ0ZyYWN0aW9uJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgRnJhY3Rpb24gdG8gQmlnTnVtYmVyIG9yIHZpY2UgdmVyc2EuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlciBvciBmcmFjdGlvbih4KSB0byBjb252ZXJ0IHRvIEZyYWN0aW9uLicpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdGcmFjdGlvbicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudmFsdWVPZigpLCAwKTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ0ZyYWN0aW9uJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghRnJhY3Rpb24pIHtcbiAgICAgICAgdGhyb3dOb0ZyYWN0aW9uKHgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZiA9IG5ldyBGcmFjdGlvbih4KTtcblxuICAgICAgaWYgKGYudmFsdWVPZigpICE9PSB4KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBpbXBsaWNpdGx5IGNvbnZlcnQgYSBudW1iZXIgdG8gYSBGcmFjdGlvbiB3aGVuIHRoZXJlIHdpbGwgYmUgYSBsb3NzIG9mIHByZWNpc2lvbiAnICsgJyh2YWx1ZTogJyArIHggKyAnKS4gJyArICdVc2UgZnVuY3Rpb24gZnJhY3Rpb24oeCkgdG8gY29udmVydCB0byBGcmFjdGlvbi4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGY7XG4gICAgfVxuICB9LCB7XG4gICAgLy8gRklYTUU6IGFkZCBjb252ZXJzaW9uIGZyb20gRnJhY3Rpb24gdG8gbnVtYmVyLCBmb3IgZXhhbXBsZSBmb3IgYHNxcnQoZnJhY3Rpb24oMSwzKSlgXG4gICAgLy8gIGZyb206ICdGcmFjdGlvbicsXG4gICAgLy8gIHRvOiAnbnVtYmVyJyxcbiAgICAvLyAgY29udmVydDogZnVuY3Rpb24gKHgpIHtcbiAgICAvLyAgICByZXR1cm4geC52YWx1ZU9mKClcbiAgICAvLyAgfVxuICAgIC8vIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ251bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICB2YXIgbiA9IE51bWJlcih4KTtcblxuICAgICAgaWYgKGlzTmFOKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInICsgeCArICdcIiB0byBhIG51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbjtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gQmlnTnVtYmVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ3N0cmluZycsXG4gICAgdG86ICdGcmFjdGlvbicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUZyYWN0aW9uKSB7XG4gICAgICAgIHRocm93Tm9GcmFjdGlvbih4KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gRnJhY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ0NvbXBsZXgnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFDb21wbGV4KSB7XG4gICAgICAgIHRocm93Tm9Db21wbGV4KHgpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBcIicgKyB4ICsgJ1wiIHRvIENvbXBsZXgnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnYm9vbGVhbicsXG4gICAgdG86ICdudW1iZXInLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgcmV0dXJuICt4O1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigreCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ2Jvb2xlYW4nLFxuICAgIHRvOiAnRnJhY3Rpb24nLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFGcmFjdGlvbikge1xuICAgICAgICB0aHJvd05vRnJhY3Rpb24oeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oK3gpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ3N0cmluZycsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHgpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdBcnJheScsXG4gICAgdG86ICdNYXRyaXgnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoYXJyYXkpIHtcbiAgICAgIGlmICghRGVuc2VNYXRyaXgpIHtcbiAgICAgICAgdGhyb3dOb01hdHJpeCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGFycmF5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnTWF0cml4JyxcbiAgICB0bzogJ0FycmF5JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KG1hdHJpeCkge1xuICAgICAgcmV0dXJuIG1hdHJpeC52YWx1ZU9mKCk7XG4gICAgfVxuICB9XTtcbiAgcmV0dXJuIHR5cGVkO1xufSk7XG5leHBvcnRzLmNyZWF0ZVR5cGVkID0gY3JlYXRlVHlwZWQ7XG5cbmZ1bmN0aW9uIHRocm93Tm9CaWdudW1iZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29udmVydCB2YWx1ZSBcIi5jb25jYXQoeCwgXCIgaW50byBhIEJpZ051bWJlcjogbm8gY2xhc3MgJ0JpZ051bWJlcicgcHJvdmlkZWRcIikpO1xufVxuXG5mdW5jdGlvbiB0aHJvd05vQ29tcGxleCh4KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHZhbHVlIFwiLmNvbmNhdCh4LCBcIiBpbnRvIGEgQ29tcGxleCBudW1iZXI6IG5vIGNsYXNzICdDb21wbGV4JyBwcm92aWRlZFwiKSk7XG59XG5cbmZ1bmN0aW9uIHRocm93Tm9NYXRyaXgoKSB7XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgYXJyYXkgaW50byBhIE1hdHJpeDogbm8gY2xhc3MgXFwnRGVuc2VNYXRyaXhcXCcgcHJvdmlkZWQnKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dOb0ZyYWN0aW9uKHgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdmFsdWUgXCIuY29uY2F0KHgsIFwiIGludG8gYSBGcmFjdGlvbiwgbm8gY2xhc3MgJ0ZyYWN0aW9uJyBwcm92aWRlZC5cIikpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFsbCA9IHZvaWQgMDtcblxudmFyIGFsbEZhY3RvcmllcyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIikpO1xuXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDsgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTsgX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyByZXR1cm4gY2FjaGU7IH07IHJldHVybiBjYWNoZTsgfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgX3R5cGVvZihvYmopICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4geyBcImRlZmF1bHRcIjogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7IGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgeyByZXR1cm4gY2FjaGUuZ2V0KG9iaik7IH0gdmFyIG5ld09iaiA9IHt9OyB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7IGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTsgfSBlbHNlIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqW1wiZGVmYXVsdFwiXSA9IG9iajsgaWYgKGNhY2hlKSB7IGNhY2hlLnNldChvYmosIG5ld09iaik7IH0gcmV0dXJuIG5ld09iajsgfVxuXG4vLyBjcmVhdGluZyBhbGwgZmFjdG9yaWVzIGhlcmUgaW4gYSBzZXBhcmF0ZSBmaWxlIGlzIG5lZWRlZCB0byBnZXQgdHJlZS1zaGFraW5nIHdvcmtpbmdcbnZhciBhbGwgPSBhbGxGYWN0b3JpZXM7XG5leHBvcnRzLmFsbCA9IGFsbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnID0gdm9pZCAwO1xuXG52YXIgX2NvbmZpZyA9IHJlcXVpcmUoXCIuLi9jb3JlL2NvbmZpZ1wiKTtcblxudmFyIF9jb25maWcyID0gcmVxdWlyZShcIi4uL2NvcmUvZnVuY3Rpb24vY29uZmlnXCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vLyBjcmVhdGUgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiBjb25maWdcbnZhciBjb25maWcgPSAvKiAjX19QVVJFX18gKi9mdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdsb2JhbCBjb25maWcgaXMgcmVhZG9ubHkuIFxcbicgKyAnUGxlYXNlIGNyZWF0ZSBhIG1hdGhqcyBpbnN0YW5jZSBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gXFxuJyArICdFeGFtcGxlOlxcbicgKyAnXFxuJyArICcgIGltcG9ydCB7IGNyZWF0ZSwgYWxsIH0gZnJvbSBcXCdtYXRoanNcXCc7XFxuJyArICcgIGNvbnN0IG1hdGhqcyA9IGNyZWF0ZShhbGwpO1xcbicgKyAnICBtYXRoanMuY29uZmlnKHsgbnVtYmVyOiBcXCdCaWdOdW1iZXJcXCcgfSk7XFxuJyk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShfY29uZmlnLkRFRkFVTFRfQ09ORklHKTtcbn07XG5cbmV4cG9ydHMuY29uZmlnID0gY29uZmlnO1xuXG5fZXh0ZW5kcyhjb25maWcsIF9jb25maWcuREVGQVVMVF9DT05GSUcsIHtcbiAgTUFUUklYX09QVElPTlM6IF9jb25maWcyLk1BVFJJWF9PUFRJT05TLFxuICBOVU1CRVJfT1BUSU9OUzogX2NvbmZpZzIuTlVNQkVSX09QVElPTlNcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHlwZWREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlc3VsdFNldERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVzdWx0U2V0LlJlc3VsdFNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaWdOdW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb21wbGV4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGcmFjdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSYW5nZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5SYW5nZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZW5zZU1hdHJpeERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjbG9uZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2xvbmUuY2xvbmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbnRlZ2VyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTmVnYXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuaXNOZWdhdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc051bWVyaWNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUG9zaXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1plcm9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOYU5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInR5cGVPZkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHlwZU9mLnR5cGVPZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0eXBlb2ZEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YudHlwZW9mRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdHJpbmcuc3RyaW5nRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvb2xlYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Jvb2xlYW4uYm9vbGVhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaWdudW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGxleERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGxleC5jb21wbGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyYWN0aW9uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BsaXRVbml0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuc3BsaXRVbml0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuYXJ5TWludXNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmFyeVBsdXNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuYXJ5UGx1cy51bmFyeVBsdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWJzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFwcGx5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBcHBseS5hcHBseURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhZGRTY2FsYXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2JydERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2JydC5jYnJ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNlaWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NlaWwuY2VpbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjdWJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDdWJlLmN1YmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHAuZXhwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cG0xRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHBtLmV4cG0xRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpeERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRml4LmZpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbG9vckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmxvb3IuZmxvb3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2NkRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHY2QuZ2NkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxjbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGNtLmxjbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cxMERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nLmxvZzEwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZzJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xvZzIubG9nMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vZC5tb2REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpcGx5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudGhSb290RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdGhSb290Lm50aFJvb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2lnbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2lnbi5zaWduRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNxcnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXVhcmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NxdWFyZS5zcXVhcmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3VidHJhY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInhnY2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1hnY2QueGdjZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3RNdWx0aXBseURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0QW5kRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaXRBbmQuYml0QW5kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJpdE5vdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0Tm90LmJpdE5vdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaXRPckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0T3IuYml0T3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0WG9yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaXRYb3IuYml0WG9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFyZ0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXJnLmFyZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25qRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ltLmltRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZS5yZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vdC5ub3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09yLm9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInhvckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzWG9yLnhvckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmNhdC5jb25jYXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sdW1uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb2x1bW4uY29sdW1uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyb3NzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDcm9zcy5jcm9zc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaWFnRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaWFnLmRpYWdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXllRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeWUuZXllRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlsdGVyLmZpbHRlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbGF0dGVuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGbGF0dGVuLmZsYXR0ZW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9yRWFjaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9yRWFjaC5mb3JFYWNoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZS5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZGVudGl0eURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia3JvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzS3Jvbi5rcm9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFwLm1hcERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbmVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNPbmVzLm9uZXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmFuZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlc2hhcGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc2hhcGUucmVzaGFwZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc2l6ZS5yZXNpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm93RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSb3cucm93RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXVlZXplRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXVlZXplLnNxdWVlemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3Vic2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zcG9zZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjdHJhbnNwb3NlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDdHJhbnNwb3NlLmN0cmFuc3Bvc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiemVyb3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVyZkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXJmLmVyZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNb2RlLm1vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJvZC5wcm9kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZvcm1hdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9ybWF0LmZvcm1hdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcmludERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJpbnQucHJpbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RvLnRvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUHJpbWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzUHJpbWUuaXNQcmltZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudW1lcmljRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyb3VuZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUm91bmQucm91bmREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMb2czLmxvZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cxcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nMXAubG9nMXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibnRoUm9vdHNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc050aFJvb3RzLm50aFJvb3RzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvdFBvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90UG93LmRvdFBvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3REaXZpZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RvdERpdmlkZS5kb3REaXZpZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibHNvbHZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMc29sdmUubHNvbHZlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzb2x2ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXNvbHZlLnVzb2x2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsZWZ0U2hpZnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xlZnRTaGlmdC5sZWZ0U2hpZnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSaWdodEFyaXRoU2hpZnQucmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JpZ2h0TG9nU2hpZnQucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhbmREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FuZC5hbmREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGFyZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wYXJlVGV4dERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuY29tcGFyZVRleHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXF1YWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsVGV4dERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXF1YWxUZXh0LmVxdWFsVGV4dERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzbWFsbGVyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic21hbGxlckVxRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuc21hbGxlckVxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxhcmdlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsYXJnZXJFcURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVlcEVxdWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZWVwRXF1YWwuZGVlcEVxdWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXF1YWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuZXF1YWwudW5lcXVhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic29ydERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU29ydC5zb3J0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1heERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWF4Lm1heERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01pbi5taW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRmlib25hY2NpSGVhcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLkZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3BhRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFDbGFzcy5TcGFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLnVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BhcnNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFyc2Uuc3BhcnNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVuaXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuY3JlYXRlVW5pdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY29zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY29zLmFjb3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNvc2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3NoLmFjb3NoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3QuYWNvdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY290aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNvdGguYWNvdGhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNzY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNzYy5hY3NjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjc2NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY3NjaC5hY3NjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2VjRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc2VjLmFzZWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNlY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzZWNoLmFzZWNoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzaW4uYXNpbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2luaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXNpbmguYXNpbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXRhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbi5hdGFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF0YW4yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdGFuMi5hdGFuMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdGFuaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbmguYXRhbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb3MuY29zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvc2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Nvc2guY29zaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvdC5jb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY290aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ290aC5jb3RoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNzY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ3NjLmNzY0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjc2NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDc2NoLmNzY2hEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VjRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZWMuc2VjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NlY2guc2VjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Npbi5zaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2luaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2luaC5zaW5oRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVGFuLnRhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YW5oRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNUYW5oLnRhbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRDYXJ0ZXNpYW4uc2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXREaXN0aW5jdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2V0RGlzdGluY3Quc2V0RGlzdGluY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldElzU3Vic2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5zZXRJc1N1YnNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldE11bHRpcGxpY2l0eS5zZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0UG93ZXJzZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0LnNldFBvd2Vyc2V0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldFNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFNpemUuc2V0U2l6ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0VW5pb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFVuaW9uLnNldFVuaW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoeXBvdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSHlwb3QuaHlwb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTm9ybS5ub3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90LmRvdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJhY2UudHJhY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW5kZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4LmluZGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FjY2Vzc29yTm9kZS5BY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJyYXlOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUuQXJyYXlOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCbG9ja05vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5CbG9ja05vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25kaXRpb25hbE5vZGUuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbnN0YW50Tm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLkZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kZXhOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUuSW5kZXhOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9iamVjdE5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09iamVjdE5vZGUuT2JqZWN0Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJhbmdlTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLlJhbmdlTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3ltYm9sTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGlsZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGlsZS5jb21waWxlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV2YWx1YXRlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZS5ldmFsdWF0ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJldmFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbC5ldmFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcnNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuUGFyc2VyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2VyLnBhcnNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsdXBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0x1cC5sdXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1FyLnFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNsdURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2x1LnNsdURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsdXNvbHZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMdXNvbHZlLmx1c29sdmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSGVscERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGVscENsYXNzLkhlbHBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2hhaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuQ2hhaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGVscERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGVscC5oZWxwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNoYWluRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDaGFpbi5jaGFpbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RldC5kZXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW52RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVpZ3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VpZ3MuZWlnc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleHBtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHBtMi5leHBtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNxcnRtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXJ0bS5zcXJ0bURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXZpZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzdGFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Rpc3RhbmNlLmRpc3RhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludGVyc2VjdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSW50ZXJzZWN0LmludGVyc2VjdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1bS5zdW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVhbi5tZWFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lZGlhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVkaWFuLm1lZGlhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hZC5tYWREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyaWFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFZhci52YXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVhbnRpbGVTZXFEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0ZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RkLnN0ZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdhbW1hRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHYW1tYS5nYW1tYURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWN0b3JpYWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5mYWN0b3JpYWxEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2Uua2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpbm9taWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aW5vbWlhbC5tdWx0aW5vbWlhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlja1JhbmRvbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5waWNrUmFuZG9tRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhbmRvbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZG9tLnJhbmRvbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5kb21JbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmRvbUludC5yYW5kb21JbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RpcmxpbmdTMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmVsbE51bWJlcnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhdGFsYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NhdGFsYW4uY2F0YWxhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wb3NpdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcG9zaXRpb24uY29tcG9zaXRpb25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2ltcGxpZnlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlcml2YXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZGVyaXZhdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYXRpb25hbGl6ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUucmF0aW9uYWxpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmV2aXZlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmV2aXZlci5yZXZpdmVyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcGxhY2VyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZXBsYWNlci5yZXBsYWNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFLmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlRS5FRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZhbHNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGYWxzZS5mYWxzZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJLmlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5maW5pdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZmluaXR5LkluZmluaXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxOMTBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xOLkxOMTBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTE4yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMTjIuTE4yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxPRzEwRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE9HMTBFLkxPRzEwRURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMT0cyRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE9HMkUuTE9HMkVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFORGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOYU4uTmFORGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51bGxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051bGwubnVsbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwaGlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BoaS5waGlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BpLnBpRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBJRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5QSURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTUVJUMV8yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTUVJUMV8uU1FSVDFfMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTUVJUMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU1FSVC5TUVJUMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YXVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RhdS50YXVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJ1ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJ1ZS50cnVlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZlcnNpb24udmVyc2lvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdG9taWNNYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdG9taWNNYXNzLmF0b21pY01hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXZvZ2Fkcm9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0F2b2dhZHJvLmF2b2dhZHJvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvaHJNYWduZXRvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQm9ock1hZ25ldG9uLmJvaHJNYWduZXRvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJib2hyUmFkaXVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb2hyUmFkaXVzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYm9sdHptYW5uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb2x0em1hbm4uYm9sdHptYW5uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDbGFzc2ljYWxFbGVjdHJvblJhZGl1cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmR1Y3RhbmNlUXVhbnR1bS5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY291bG9tYkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ291bG9tYi5jb3Vsb21iRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRldXRlcm9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VmaW1vdkZhY3Rvci5lZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudC5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVsZWN0cm9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzLmVsZWN0cm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmFyYWRheURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmFyYWRheS5mYXJhZGF5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Zlcm1pQ291cGxpbmcuZmVybWlDb3VwbGluZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlLmZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdhc0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHYXNDb25zdGFudC5nYXNDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdyYXZpdGF0aW9uQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ3Jhdml0eURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzR3Jhdml0eS5ncmF2aXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kuaGFydHJlZUVuZXJneURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2xpdHppbmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0tsaXR6aW5nLmtsaXR6aW5nRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvc2NobWlkdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9zY2htaWR0Lmxvc2NobWlkdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNYWduZXRpY0NvbnN0YW50Lm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFnbmV0aWNGbHV4UXVhbnR1bS5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vbGFyTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9sYXJNYXNzLm1vbGFyTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhck1hc3NDMTJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyTWFzc0MubW9sYXJNYXNzQzEyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyUGxhbmNrQ29uc3RhbnQubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhclZvbHVtZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUubW9sYXJWb2x1bWVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmV1dHJvbk1hc3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05ldXRyb25NYXNzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTnVjbGVhck1hZ25ldG9uLm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZS5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0NvbnN0YW50LnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja0xlbmd0aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tNYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLnBsYW5ja01hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja1RlbXBlcmF0dXJlLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja1RpbWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja1RpbWUucGxhbmNrVGltZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcm90b25NYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQcm90b25NYXNzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVhbnR1bU9mQ2lyY3VsYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1F1YW50dW1PZkNpcmN1bGF0aW9uLnF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVkdWNlZFBsYW5ja0NvbnN0YW50LnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyeWRiZXJnRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSeWRiZXJnLnJ5ZGJlcmdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2Fja3VyVGV0cm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2Fja3VyVGV0cm9kZS5zYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2Vjb25kUmFkaWF0aW9uLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NwZWVkT2ZMaWdodC5zcGVlZE9mTGlnaHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uc3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRob21zb25Dcm9zc1NlY3Rpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24udGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZS52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNXZWFrTWl4aW5nQW5nbGUud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndpZW5EaXNwbGFjZW1lbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1dpZW5EaXNwbGFjZW1lbnQud2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXBwbHlUcmFuc2Zvcm0uYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlsdGVyVHJhbnNmb3JtLmZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JFYWNoVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGb3JFYWNoVHJhbnNmb3JtLmZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4VHJhbnNmb3JtLmluZGV4VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5tYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVhblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5tZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1pblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtLm1pblRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VUcmFuc2Zvcm0ucmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0ucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3Vic2V0VHJhbnNmb3JtLnN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5jb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdGRUcmFuc2Zvcm0uc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1bVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3VtVHJhbnNmb3JtLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0udmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWxsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hbGxGYWN0b3JpZXNBbnkuYWxsO1xuICB9XG59KTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzdWx0U2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDbG9uZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGFzTnVtZXJpY1ZhbHVlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlT2YgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHlwZU9mLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkVHlwZW9mID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RyaW5nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQm9vbGVhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb29sZWFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBsZXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGxpdFVuaXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BsaXRVbml0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FwcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDYnJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NicnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NlaWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3ViZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDdWJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHBtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cG0xLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbG9vciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGbG9vci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2NkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0djZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGNtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xjbS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzEwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2cyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnRoUm9vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdGhSb290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaWduID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3F1YXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1hnY2QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzWGdjZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdEFuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdE5vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXROb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdE9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaXRYb3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0WG9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcmcgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ltLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm90ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzT3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1hvciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbHVtbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Nyb3NzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaWFnID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RpYWcuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0V5ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeWUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpbHRlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZsYXR0ZW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRm9yRWFjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JFYWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSWRlbnRpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0tyb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS3Jvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT25lcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzaGFwZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZXNpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVzaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxdWVlemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3F1ZWV6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDdHJhbnNwb3NlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXJmID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTW9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQcm9kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Byb2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zvcm1hdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JtYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1ByaW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ByaW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUbyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQcmltZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JvdW5kLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2czID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nMXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc050aFJvb3RzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc050aFJvb3RzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3RQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGVmdFNoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSaWdodEFyaXRoU2hpZnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JpZ2h0TG9nU2hpZnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsVGV4dC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVlcEVxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5lcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmVxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTb3J0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NvcnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01pbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaWJvbmFjY2lIZWFwQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRGdW5jdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NwYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3JlYXRlVW5pdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDcmVhdGVVbml0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY29zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjb3NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY290ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjb3RoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3RoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY3NjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjc2MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjc2NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjc2NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2VjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FzZWNoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2luID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FzaW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzaW5oLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0YW4yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29zaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3RoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NzYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NzY2ggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ3NjaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2VjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2VjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2luLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhbmggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldENhcnRlc2lhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldEludGVyc2VjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldE11bHRpcGxpY2l0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRNdWx0aXBsaWNpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFNpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0VW5pb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0h5cG90ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0h5cG90LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RvdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYWNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RyYWNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJyYXlOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmxvY2tOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmRpdGlvbmFsTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNPYmplY3ROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09iamVjdE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21waWxlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBpbGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0V2YWx1YXRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V2YWx1YXRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0x1cCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1FyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1FyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbHUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2x1LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0x1c29sdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIZWxwQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NoYWluQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSGVscCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIZWxwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDaGFpbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWlncyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFaWdzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHBtMiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeHBtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXJ0bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGlzdGFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGlzdGFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01lYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVkaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01lZGlhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFZhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXVhbnRpbGVTZXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9uc1dpdGhSZXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2FtbWEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpbm9taWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGVybXV0YXRpb25zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQaWNrUmFuZG9tID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BpY2tSYW5kb20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmRvbSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmRvbUludCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0aXJsaW5nUyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGlybGluZ1MyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2F0YWxhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDYXRhbGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wb3NpdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wb3NpdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2ltcGxpZnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2ltcGxpZnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Rlcml2YXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVyaXZhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jldml2ZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVwbGFjZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVwbGFjZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlRSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWxzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmZpbml0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmZpbml0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE4xMC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE4yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE9HMTBFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xPRzEwRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE9HMkUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMkUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bGwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGhpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BoaS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VwcGVyY2FzZVBpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VwcGVyY2FzZVBpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTUVJUMV8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU1FSVDFfMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU1FSVCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTUVJUMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVGF1ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RhdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJ1ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNWZXJzaW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZlcnNpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0b21pY01hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXZvZ2Fkcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvaHJNYWduZXRvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvaHJSYWRpdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9oclJhZGl1cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQm9sdHptYW5uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmR1Y3RhbmNlUXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvdWxvbWIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ291bG9tYi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldXRlcm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWZpbW92RmFjdG9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VmaW1vdkZhY3Rvci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFbGVjdHJpY0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFbGVjdHJvbk1hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZW1lbnRhcnlDaGFyZ2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhcmFkYXkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGZXJtaUNvdXBsaW5nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbmVTdHJ1Y3R1cmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHYXNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHYXNDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR3Jhdml0YXRpb25Db25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHcmF2aXR5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dyYXZpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGFydHJlZUVuZXJneS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNLbGl0emluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNLbGl0emluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9zY2htaWR0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvc2NobWlkdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFnbmV0aWNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWduZXRpY0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYWduZXRpY0ZsdXhRdWFudHVtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyTWFzc0MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJNYXNzQzEyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNb2xhclBsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyVm9sdW1lID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyVm9sdW1lLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVjbGVhck1hZ25ldG9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrQ29uc3RhbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja0xlbmd0aCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tMZW5ndGguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja01hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrVGVtcGVyYXR1cmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGVtcGVyYXR1cmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja1RpbWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUHJvdG9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcm90b25NYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUnlkYmVyZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSeWRiZXJnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NhY2t1clRldHJvZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWNvbmRSYWRpYXRpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwZWVkT2ZMaWdodCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGVlZE9mTGlnaHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZWZhbkJvbHR6bWFubiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGhvbXNvbkNyb3NzU2VjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFjdXVtSW1wZWRhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1dlYWtNaXhpbmdBbmdsZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzV2llbkRpc3BsYWNlbWVudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29sdW1uVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbHVtblRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmlsdGVyVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRm9yRWFjaFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JFYWNoVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF4VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNZWFuVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNaW5UcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm93VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jvd1RyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnNldFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uY2F0VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VtVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2FsbEZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuL2FsbEZhY3Rvcmllc0FueS5qc1wiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWJzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWJzRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBYnM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWJzXG59O1xuZXhwb3J0cy5hYnNEZXBlbmRlbmNpZXMgPSBhYnNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNjZXNzb3JOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjY2Vzc29yTm9kZVxufTtcbmV4cG9ydHMuQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzID0gQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY29zRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY29zRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvc1xufTtcbmV4cG9ydHMuYWNvc0RlcGVuZGVuY2llcyA9IGFjb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY29zaERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY29zaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY29zaFxufTtcbmV4cG9ydHMuYWNvc2hEZXBlbmRlbmNpZXMgPSBhY29zaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjb3REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY290XG59O1xuZXhwb3J0cy5hY290RGVwZW5kZW5jaWVzID0gYWNvdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdGhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjb3RoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvdGg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdGhcbn07XG5leHBvcnRzLmFjb3RoRGVwZW5kZW5jaWVzID0gYWNvdGhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjc2NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjc2NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY3NjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2Ncbn07XG5leHBvcnRzLmFjc2NEZXBlbmRlbmNpZXMgPSBhY3NjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY3NjaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjc2NoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjc2NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2NoXG59O1xuZXhwb3J0cy5hY3NjaERlcGVuZGVuY2llcyA9IGFjc2NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFkZERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFkZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBZGRcbn07XG5leHBvcnRzLmFkZERlcGVuZGVuY2llcyA9IGFkZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBZGRTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkU2NhbGFyXG59O1xuZXhwb3J0cy5hZGRTY2FsYXJEZXBlbmRlbmNpZXMgPSBhZGRTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFuZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhbmREZXBlbmRlbmNpZXMgPSB7XG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG5vdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vdC5ub3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFuZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBbmRcbn07XG5leHBvcnRzLmFuZERlcGVuZGVuY2llcyA9IGFuZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXBwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFwcGx5RGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcHBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVxufTtcbmV4cG9ydHMuYXBwbHlEZXBlbmRlbmNpZXMgPSBhcHBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFwcGx5VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcHBseVRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVRyYW5zZm9ybVxufTtcbmV4cG9ydHMuYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXJnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXJnRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJnXG59O1xuZXhwb3J0cy5hcmdEZXBlbmRlbmNpZXMgPSBhcmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFycmF5Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBBcnJheU5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFycmF5Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcnJheU5vZGVcbn07XG5leHBvcnRzLkFycmF5Tm9kZURlcGVuZGVuY2llcyA9IEFycmF5Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNlY0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzZWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlY1xufTtcbmV4cG9ydHMuYXNlY0RlcGVuZGVuY2llcyA9IGFzZWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzZWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhc2VjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzZWNoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzZWNoXG59O1xuZXhwb3J0cy5hc2VjaERlcGVuZGVuY2llcyA9IGFzZWNoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhc2luRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzaW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNpblxufTtcbmV4cG9ydHMuYXNpbkRlcGVuZGVuY2llcyA9IGFzaW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzaW5oRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNpbmhEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzaW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5oXG59O1xuZXhwb3J0cy5hc2luaERlcGVuZGVuY2llcyA9IGFzaW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzc2lnbm1lbnROb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzc2lnbm1lbnROb2RlXG59O1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IEFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbkRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuXG59O1xuZXhwb3J0cy5hdGFuRGVwZW5kZW5jaWVzID0gYXRhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXRhbjJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhdGFuMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUF0YW4yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW4yXG59O1xuZXhwb3J0cy5hdGFuMkRlcGVuZGVuY2llcyA9IGF0YW4yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbmhEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRhbmg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbmhcbn07XG5leHBvcnRzLmF0YW5oRGVwZW5kZW5jaWVzID0gYXRhbmhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdG9taWNNYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0b21pY01hc3Ncbn07XG5leHBvcnRzLmF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSBhdG9taWNNYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdm9nYWRyb0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdm9nYWRybzogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdm9nYWRyb1xufTtcbmV4cG9ydHMuYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSBhdm9nYWRyb0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdGlybGluZ1MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdGlybGluZ1MyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBzdGlybGluZ1MyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJlbGxOdW1iZXJzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJlbGxOdW1iZXJzXG59O1xuZXhwb3J0cy5iZWxsTnVtYmVyc0RlcGVuZGVuY2llcyA9IGJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBCaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZUJpZ051bWJlckNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpZ051bWJlckNsYXNzXG59O1xuZXhwb3J0cy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSBCaWdOdW1iZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpZ251bWJlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpZ251bWJlckRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaWdudW1iZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnbnVtYmVyXG59O1xuZXhwb3J0cy5iaWdudW1iZXJEZXBlbmRlbmNpZXMgPSBiaWdudW1iZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYml0QW5kRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaXRBbmQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0QW5kXG59O1xuZXhwb3J0cy5iaXRBbmREZXBlbmRlbmNpZXMgPSBiaXRBbmREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE5vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdE5vdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0Tm90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE5vdFxufTtcbmV4cG9ydHMuYml0Tm90RGVwZW5kZW5jaWVzID0gYml0Tm90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRPckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdE9yRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJpdE9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE9yXG59O1xuZXhwb3J0cy5iaXRPckRlcGVuZGVuY2llcyA9IGJpdE9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRYb3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBiaXRYb3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0WG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdFhvclxufTtcbmV4cG9ydHMuYml0WG9yRGVwZW5kZW5jaWVzID0gYml0WG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5CbG9ja05vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jlc3VsdFNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBCbG9ja05vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIFJlc3VsdFNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Jlc3VsdFNldC5SZXN1bHRTZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJsb2NrTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVCbG9ja05vZGVcbn07XG5leHBvcnRzLkJsb2NrTm9kZURlcGVuZGVuY2llcyA9IEJsb2NrTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9ock1hZ25ldG9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBib2hyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2hyTWFnbmV0b246IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9ock1hZ25ldG9uXG59O1xuZXhwb3J0cy5ib2hyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSBib2hyTWFnbmV0b25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2hyUmFkaXVzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJvaHJSYWRpdXNcbn07XG5leHBvcnRzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSBib2hyUmFkaXVzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ib2x0em1hbm5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJvbHR6bWFubjogX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2x0em1hbm5cbn07XG5leHBvcnRzLmJvbHR6bWFubkRlcGVuZGVuY2llcyA9IGJvbHR6bWFubkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9vbGVhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvb2xlYW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJvb2xlYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9vbGVhblxufTtcbmV4cG9ydHMuYm9vbGVhbkRlcGVuZGVuY2llcyA9IGJvb2xlYW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNhdGFsYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjYXRhbGFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDYXRhbGFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNhdGFsYW5cbn07XG5leHBvcnRzLmNhdGFsYW5EZXBlbmRlbmNpZXMgPSBjYXRhbGFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYnJ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNicnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNicnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2JydFxufTtcbmV4cG9ydHMuY2JydERlcGVuZGVuY2llcyA9IGNicnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNlaWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm91bmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjZWlsRGVwZW5kZW5jaWVzID0ge1xuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDZWlsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNlaWxcbn07XG5leHBvcnRzLmNlaWxEZXBlbmRlbmNpZXMgPSBjZWlsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jaGFpbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjaGFpbkRlcGVuZGVuY2llcyA9IHtcbiAgQ2hhaW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzLkNoYWluRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDaGFpbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpblxufTtcbmV4cG9ydHMuY2hhaW5EZXBlbmRlbmNpZXMgPSBjaGFpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ2hhaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDaGFpbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlQ2hhaW5DbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpbkNsYXNzXG59O1xuZXhwb3J0cy5DaGFpbkRlcGVuZGVuY2llcyA9IENoYWluRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1c1xufTtcbmV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSBjbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2xvbmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjbG9uZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ2xvbmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xvbmVcbn07XG5leHBvcnRzLmNsb25lRGVwZW5kZW5jaWVzID0gY2xvbmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbHVtbkRlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICByYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb2x1bW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uXG59O1xuZXhwb3J0cy5jb2x1bW5EZXBlbmRlbmNpZXMgPSBjb2x1bW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICByYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb2x1bW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5jb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBjb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tYmluYXRpb25zOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbWJpbmF0aW9uc1xufTtcbmV4cG9ydHMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzID0gY29tYmluYXRpb25zRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwXG59O1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzID0gY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21wYXJlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBhcmVcbn07XG5leHBvcnRzLmNvbXBhcmVEZXBlbmRlbmNpZXMgPSBjb21wYXJlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZU5hdHVyYWw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZU5hdHVyYWxcbn07XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzID0gY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlVGV4dERlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZVRleHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZVRleHRcbn07XG5leHBvcnRzLmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzID0gY29tcGFyZVRleHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBpbGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21waWxlRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21waWxlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBpbGVcbn07XG5leHBvcnRzLmNvbXBpbGVEZXBlbmRlbmNpZXMgPSBjb21waWxlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wbGV4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wbGV4RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBsZXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleFxufTtcbmV4cG9ydHMuY29tcGxleERlcGVuZGVuY2llcyA9IGNvbXBsZXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbXBsZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb21wbGV4RGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVDb21wbGV4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleENsYXNzXG59O1xuZXhwb3J0cy5Db21wbGV4RGVwZW5kZW5jaWVzID0gQ29tcGxleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMsXG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIGlzUG9zaXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmlzUG9zaXRpdmVEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBvc2l0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBvc2l0aW9uXG59O1xuZXhwb3J0cy5jb21wb3NpdGlvbkRlcGVuZGVuY2llcyA9IGNvbXBvc2l0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29uY2F0RGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb25jYXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uY2F0XG59O1xuZXhwb3J0cy5jb25jYXREZXBlbmRlbmNpZXMgPSBjb25jYXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmNhdFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXRUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIENvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29uZGl0aW9uYWxOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbmRpdGlvbmFsTm9kZVxufTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW1cbn07XG5leHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IGNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uakRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmpEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmo6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29ualxufTtcbmV4cG9ydHMuY29uakRlcGVuZGVuY2llcyA9IGNvbmpEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbnN0YW50Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25zdGFudE5vZGVcbn07XG5leHBvcnRzLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyA9IENvbnN0YW50Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29zRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zXG59O1xuZXhwb3J0cy5jb3NEZXBlbmRlbmNpZXMgPSBjb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvc2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3NoRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvc2hcbn07XG5leHBvcnRzLmNvc2hEZXBlbmRlbmNpZXMgPSBjb3NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ290OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdFxufTtcbmV4cG9ydHMuY290RGVwZW5kZW5jaWVzID0gY290RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3RoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY290aERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdGhcbn07XG5leHBvcnRzLmNvdGhEZXBlbmRlbmNpZXMgPSBjb3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3Vsb21iRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3Vsb21iRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ291bG9tYjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3Vsb21iXG59O1xuZXhwb3J0cy5jb3Vsb21iRGVwZW5kZW5jaWVzID0gY291bG9tYkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3JlYXRlVW5pdERlcGVuZGVuY2llcyA9IHtcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDcmVhdGVVbml0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyZWF0ZVVuaXRcbn07XG5leHBvcnRzLmNyZWF0ZVVuaXREZXBlbmRlbmNpZXMgPSBjcmVhdGVVbml0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcm9zc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3Jvc3NEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNyb3NzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyb3NzXG59O1xuZXhwb3J0cy5jcm9zc0RlcGVuZGVuY2llcyA9IGNyb3NzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc2NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjc2NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3NjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY1xufTtcbmV4cG9ydHMuY3NjRGVwZW5kZW5jaWVzID0gY3NjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc2NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3NjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDc2NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY2hcbn07XG5leHBvcnRzLmNzY2hEZXBlbmRlbmNpZXMgPSBjc2NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmogPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25qLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3RyYW5zcG9zZURlcGVuZGVuY2llcyA9IHtcbiAgY29uakRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmouY29uakRlcGVuZGVuY2llcyxcbiAgdHJhbnNwb3NlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3RyYW5zcG9zZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDdHJhbnNwb3NlXG59O1xuZXhwb3J0cy5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gY3RyYW5zcG9zZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3ViZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGN1YmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUN1YmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3ViZVxufTtcbmV4cG9ydHMuY3ViZURlcGVuZGVuY2llcyA9IGN1YmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZXBFcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRlZXBFcXVhbERlcGVuZGVuY2llcyA9IHtcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGVlcEVxdWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlZXBFcXVhbFxufTtcbmV4cG9ydHMuZGVlcEVxdWFsRGVwZW5kZW5jaWVzID0gZGVlcEVxdWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5NYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlbnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVuc2VNYXRyaXhDbGFzc1xufTtcbmV4cG9ydHMuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSBEZW5zZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXZhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0V2YWx1YXRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV2YWxEZXBlbmRlbmNpZXMgPSB7XG4gIGV2YWx1YXRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXZhbHVhdGUuZXZhbHVhdGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlcHJlY2F0ZWRFdmFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRFdmFsXG59O1xuZXhwb3J0cy5ldmFsRGVwZW5kZW5jaWVzID0gZXZhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZW9mRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHlwZW9mRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVEZXByZWNhdGVkVHlwZW9mOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Zcbn07XG5leHBvcnRzLnR5cGVvZkRlcGVuZGVuY2llcyA9IHR5cGVvZkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyRGVwZW5kZW5jaWVzID0ge1xuICB2YXJpYW5jZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXByZWNhdGVkVmFyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRWYXJcbn07XG5leHBvcnRzLnZhckRlcGVuZGVuY2llcyA9IHZhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRlcml2YXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG51bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHNpbXBsaWZ5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2ltcGxpZnkuc2ltcGxpZnlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlcml2YXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVyaXZhdGl2ZVxufTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURlcGVuZGVuY2llcyA9IGRlcml2YXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMdXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGV0RGVwZW5kZW5jaWVzID0ge1xuICBsdXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMdXAubHVwRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGV0XG59O1xuZXhwb3J0cy5kZXREZXBlbmRlbmNpZXMgPSBkZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGV1dGVyb25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURldXRlcm9uTWFzc1xufTtcbmV4cG9ydHMuZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzID0gZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaWFnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGlhZ0RlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURpYWc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlhZ1xufTtcbmV4cG9ydHMuZGlhZ0RlcGVuZGVuY2llcyA9IGRpYWdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpc3RhbmNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkaXN0YW5jZURlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGlzdGFuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlzdGFuY2Vcbn07XG5leHBvcnRzLmRpc3RhbmNlRGVwZW5kZW5jaWVzID0gZGlzdGFuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpdmlkZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRpdmlkZURlcGVuZGVuY2llcyA9IHtcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgaW52RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW52LmludkRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGl2aWRlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZVxufTtcbmV4cG9ydHMuZGl2aWRlRGVwZW5kZW5jaWVzID0gZGl2aWRlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICBudW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtZXJpYy5udW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEaXZpZGVTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGl2aWRlU2NhbGFyXG59O1xuZXhwb3J0cy5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMgPSBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90RGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRG90XG59O1xuZXhwb3J0cy5kb3REZXBlbmRlbmNpZXMgPSBkb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERpdmlkZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90RGl2aWRlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURvdERpdmlkZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3REaXZpZGVcbn07XG5leHBvcnRzLmRvdERpdmlkZURlcGVuZGVuY2llcyA9IGRvdERpdmlkZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRvdE11bHRpcGx5RGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3RNdWx0aXBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RNdWx0aXBseVxufTtcbmV4cG9ydHMuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXMgPSBkb3RNdWx0aXBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90UG93RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkb3RQb3dEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRG90UG93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdFBvd1xufTtcbmV4cG9ydHMuZG90UG93RGVwZW5kZW5jaWVzID0gZG90UG93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVcbn07XG5leHBvcnRzLmVEZXBlbmRlbmNpZXMgPSBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWZpbW92RmFjdG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVmaW1vdkZhY3RvclxufTtcbmV4cG9ydHMuZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzID0gZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5laWdzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0YW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBdGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Nvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Npbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlaWdzRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBhdGFuRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXRhbi5hdGFuRGVwZW5kZW5jaWVzLFxuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb3MuY29zRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzaW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaW4uc2luRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFaWdzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVpZ3Ncbn07XG5leHBvcnRzLmVpZ3NEZXBlbmRlbmNpZXMgPSBlaWdzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWxlY3RyaWNDb25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJpY0NvbnN0YW50XG59O1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZWxlY3Ryb25NYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFbGVjdHJvbk1hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRWxlY3Ryb25NYXNzXG59O1xuZXhwb3J0cy5lbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXMgPSBlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2Vcbn07XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSBlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVxdWFsRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVxdWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVxdWFsXG59O1xuZXhwb3J0cy5lcXVhbERlcGVuZGVuY2llcyA9IGVxdWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcXVhbFNjYWxhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFNjYWxhclxufTtcbmV4cG9ydHMuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMgPSBlcXVhbFNjYWxhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlcXVhbFRleHREZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuY29tcGFyZVRleHREZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVxdWFsVGV4dDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFRleHRcbn07XG5leHBvcnRzLmVxdWFsVGV4dERlcGVuZGVuY2llcyA9IGVxdWFsVGV4dERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJmRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXJmRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcmY6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXJmXG59O1xuZXhwb3J0cy5lcmZEZXBlbmRlbmNpZXMgPSBlcmZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV2YWx1YXRlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXZhbHVhdGVEZXBlbmRlbmNpZXMgPSB7XG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV2YWx1YXRlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUV2YWx1YXRlXG59O1xuZXhwb3J0cy5ldmFsdWF0ZURlcGVuZGVuY2llcyA9IGV2YWx1YXRlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5leHBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV4cDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBcbn07XG5leHBvcnRzLmV4cERlcGVuZGVuY2llcyA9IGV4cERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXhwbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV4cG1EZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIGludkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ludi5pbnZEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV4cG06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbVxufTtcbmV4cG9ydHMuZXhwbURlcGVuZGVuY2llcyA9IGV4cG1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG0xRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBtMURlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFeHBtMTogX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBtMVxufTtcbmV4cG9ydHMuZXhwbTFEZXBlbmRlbmNpZXMgPSBleHBtMURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXllRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXllRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVFeWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXllXG59O1xuZXhwb3J0cy5leWVEZXBlbmRlbmNpZXMgPSBleWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZhY3RvcmlhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNHYW1tYSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0dhbW1hLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhY3RvcmlhbERlcGVuZGVuY2llcyA9IHtcbiAgZ2FtbWFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNHYW1tYS5nYW1tYURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmFjdG9yaWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZhY3RvcmlhbFxufTtcbmV4cG9ydHMuZmFjdG9yaWFsRGVwZW5kZW5jaWVzID0gZmFjdG9yaWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mYWxzZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhbHNlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVGYWxzZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWxzZVxufTtcbmV4cG9ydHMuZmFsc2VEZXBlbmRlbmNpZXMgPSBmYWxzZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFyYWRheURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmFyYWRheURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZhcmFkYXk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFyYWRheVxufTtcbmV4cG9ydHMuZmFyYWRheURlcGVuZGVuY2llcyA9IGZhcmFkYXlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGZXJtaUNvdXBsaW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZlcm1pQ291cGxpbmdcbn07XG5leHBvcnRzLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSBmZXJtaUNvdXBsaW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IHtcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlib25hY2NpSGVhcENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzc1xufTtcbmV4cG9ydHMuRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IEZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpbHRlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpbHRlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlsdGVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlclxufTtcbmV4cG9ydHMuZmlsdGVyRGVwZW5kZW5jaWVzID0gZmlsdGVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmaWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZpbHRlclRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmluZVN0cnVjdHVyZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaW5lU3RydWN0dXJlXG59O1xuZXhwb3J0cy5maW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzID0gZmluZVN0cnVjdHVyZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlyc3RSYWRpYXRpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlyc3RSYWRpYXRpb25cbn07XG5leHBvcnRzLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NlaWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDZWlsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbG9vciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Zsb29yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpeERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBjZWlsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ2VpbC5jZWlsRGVwZW5kZW5jaWVzLFxuICBmbG9vckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Zsb29yLmZsb29yRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGaXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRml4XG59O1xuZXhwb3J0cy5maXhEZXBlbmRlbmNpZXMgPSBmaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsYXR0ZW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZsYXR0ZW5EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZsYXR0ZW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmxhdHRlblxufTtcbmV4cG9ydHMuZmxhdHRlbkRlcGVuZGVuY2llcyA9IGZsYXR0ZW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsb29yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUm91bmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmxvb3JEZXBlbmRlbmNpZXMgPSB7XG4gIHJvdW5kRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUm91bmQucm91bmREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZsb29yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZsb29yXG59O1xuZXhwb3J0cy5mbG9vckRlcGVuZGVuY2llcyA9IGZsb29yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JFYWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZm9yRWFjaERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRm9yRWFjaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVGb3JFYWNoXG59O1xuZXhwb3J0cy5mb3JFYWNoRGVwZW5kZW5jaWVzID0gZm9yRWFjaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZvckVhY2hUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZvcm1hdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvcm1hdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRm9ybWF0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvcm1hdFxufTtcbmV4cG9ydHMuZm9ybWF0RGVwZW5kZW5jaWVzID0gZm9ybWF0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mcmFjdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmcmFjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGcmFjdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvblxufTtcbmV4cG9ydHMuZnJhY3Rpb25EZXBlbmRlbmNpZXMgPSBmcmFjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRnJhY3Rpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBGcmFjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlRnJhY3Rpb25DbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvbkNsYXNzXG59O1xuZXhwb3J0cy5GcmFjdGlvbkRlcGVuZGVuY2llcyA9IEZyYWN0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxufTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGdW5jdGlvbk5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Ob2RlXG59O1xuZXhwb3J0cy5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMgPSBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdhbW1hRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGdhbW1hRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR2FtbWE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR2FtbWFcbn07XG5leHBvcnRzLmdhbW1hRGVwZW5kZW5jaWVzID0gZ2FtbWFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdhc0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnYXNDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdhc0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhc0NvbnN0YW50XG59O1xuZXhwb3J0cy5nYXNDb25zdGFudERlcGVuZGVuY2llcyA9IGdhc0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nY2REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnY2REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVHY2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR2NkXG59O1xuZXhwb3J0cy5nY2REZXBlbmRlbmNpZXMgPSBnY2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ2V0TWF0cml4RGF0YVR5cGVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlXG59O1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcyA9IGdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50XG59O1xuZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0gZ3Jhdml0YXRpb25Db25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ3Jhdml0eURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ3Jhdml0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdyYXZpdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0eVxufTtcbmV4cG9ydHMuZ3Jhdml0eURlcGVuZGVuY2llcyA9IGdyYXZpdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIYXJ0cmVlRW5lcmd5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhcnRyZWVFbmVyZ3lcbn07XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSBoYXJ0cmVlRW5lcmd5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGhhc051bWVyaWNWYWx1ZURlcGVuZGVuY2llcyA9IHtcbiAgaXNOdW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOdW1lcmljLmlzTnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSGFzTnVtZXJpY1ZhbHVlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhc051bWVyaWNWYWx1ZVxufTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzID0gaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oZWxwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoZWxwRGVwZW5kZW5jaWVzID0ge1xuICBIZWxwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSGVscENsYXNzLkhlbHBEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUhlbHA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscFxufTtcbmV4cG9ydHMuaGVscERlcGVuZGVuY2llcyA9IGhlbHBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkhlbHBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBIZWxwRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIZWxwQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscENsYXNzXG59O1xuZXhwb3J0cy5IZWxwRGVwZW5kZW5jaWVzID0gSGVscERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaHlwb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWJzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoeXBvdERlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgaXNQb3NpdGl2ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSHlwb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSHlwb3Rcbn07XG5leHBvcnRzLmh5cG90RGVwZW5kZW5jaWVzID0gaHlwb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJXG59O1xuZXhwb3J0cy5pRGVwZW5kZW5jaWVzID0gaURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaWRlbnRpdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpZGVudGl0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSWRlbnRpdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSWRlbnRpdHlcbn07XG5leHBvcnRzLmlkZW50aXR5RGVwZW5kZW5jaWVzID0gaWRlbnRpdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmltRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUltOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUltXG59O1xuZXhwb3J0cy5pbURlcGVuZGVuY2llcyA9IGltRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzXG59O1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbmRleERlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmRleDogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFxufTtcbmV4cG9ydHMuaW5kZXhEZXBlbmRlbmNpZXMgPSBpbmRleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW5kZXhEZXBlbmRlbmNpZXMgPSB7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleENsYXNzXG59O1xuZXhwb3J0cy5JbmRleERlcGVuZGVuY2llcyA9IEluZGV4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbmRleE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBJbmRleE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIFJhbmdlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5SYW5nZURlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4Tm9kZVxufTtcbmV4cG9ydHMuSW5kZXhOb2RlRGVwZW5kZW5jaWVzID0gSW5kZXhOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmRleFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBpbmRleFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5maW5pdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBJbmZpbml0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmZpbml0eTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmZpbml0eVxufTtcbmV4cG9ydHMuSW5maW5pdHlEZXBlbmRlbmNpZXMgPSBJbmZpbml0eURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW50ZXJzZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludGVyc2VjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnRlcnNlY3Rcbn07XG5leHBvcnRzLmludGVyc2VjdERlcGVuZGVuY2llcyA9IGludGVyc2VjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbnZEZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RldC5kZXREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnZcbn07XG5leHBvcnRzLmludkRlcGVuZGVuY2llcyA9IGludkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bVxufTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IGludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzSW50ZWdlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzSW50ZWdlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNJbnRlZ2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzSW50ZWdlclxufTtcbmV4cG9ydHMuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzID0gaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05hTkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTmFORGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJc05hTjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05hTlxufTtcbmV4cG9ydHMuaXNOYU5EZXBlbmRlbmNpZXMgPSBpc05hTkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzTmVnYXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOZWdhdGl2ZVxufTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyA9IGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNOdW1lcmljOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTnVtZXJpY1xufTtcbmV4cG9ydHMuaXNOdW1lcmljRGVwZW5kZW5jaWVzID0gaXNOdW1lcmljRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaXNQb3NpdGl2ZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNQb3NpdGl2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1Bvc2l0aXZlXG59O1xuZXhwb3J0cy5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzID0gaXNQb3NpdGl2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNQcmltZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzUHJpbWVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzUHJpbWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQcmltZVxufTtcbmV4cG9ydHMuaXNQcmltZURlcGVuZGVuY2llcyA9IGlzUHJpbWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzWmVyb0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzWmVyb0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNaZXJvOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzWmVyb1xufTtcbmV4cG9ydHMuaXNaZXJvRGVwZW5kZW5jaWVzID0gaXNaZXJvRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5rbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEb3REaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTG9nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBrbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGRvdERpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RvdERpdmlkZS5kb3REaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIGxvZ0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xvZy5sb2dEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1bURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1bS5zdW1EZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtsZGl2ZXJnZW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVLbGRpdmVyZ2VuY2Vcbn07XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURlcGVuZGVuY2llcyA9IGtsZGl2ZXJnZW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMua2xpdHppbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGtsaXR6aW5nRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlS2xpdHppbmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xpdHppbmdcbn07XG5leHBvcnRzLmtsaXR6aW5nRGVwZW5kZW5jaWVzID0ga2xpdHppbmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtyb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGtyb25EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtyb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlS3JvblxufTtcbmV4cG9ydHMua3JvbkRlcGVuZGVuY2llcyA9IGtyb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMTBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBMTjEwRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxOMTA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4xMFxufTtcbmV4cG9ydHMuTE4xMERlcGVuZGVuY2llcyA9IExOMTBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExOMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMTjI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4yXG59O1xuZXhwb3J0cy5MTjJEZXBlbmRlbmNpZXMgPSBMTjJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxPRzEwRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExPRzEwRURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMT0cxMEU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE9HMTBFXG59O1xuZXhwb3J0cy5MT0cxMEVEZXBlbmRlbmNpZXMgPSBMT0cxMEVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxPRzJFRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTE9HMkVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlTE9HMkU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE9HMkVcbn07XG5leHBvcnRzLkxPRzJFRGVwZW5kZW5jaWVzID0gTE9HMkVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxhcmdlckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMYXJnZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyXG59O1xuZXhwb3J0cy5sYXJnZXJEZXBlbmRlbmNpZXMgPSBsYXJnZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckVxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbGFyZ2VyRXFEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTGFyZ2VyRXE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyRXFcbn07XG5leHBvcnRzLmxhcmdlckVxRGVwZW5kZW5jaWVzID0gbGFyZ2VyRXFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxjbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbGNtRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMY206IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGNtXG59O1xuZXhwb3J0cy5sY21EZXBlbmRlbmNpZXMgPSBsY21EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxlZnRTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxlZnRTaGlmdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB6ZXJvc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMZWZ0U2hpZnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGVmdFNoaWZ0XG59O1xuZXhwb3J0cy5sZWZ0U2hpZnREZXBlbmRlbmNpZXMgPSBsZWZ0U2hpZnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb2dEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZ1xufTtcbmV4cG9ydHMubG9nRGVwZW5kZW5jaWVzID0gbG9nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxMERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nMTBEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMTA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMTBcbn07XG5leHBvcnRzLmxvZzEwRGVwZW5kZW5jaWVzID0gbG9nMTBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMb2cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nMXBEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbG9nRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTG9nLmxvZ0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMXBcbn07XG5leHBvcnRzLmxvZzFwRGVwZW5kZW5jaWVzID0gbG9nMXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxvZzJEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cyXG59O1xuZXhwb3J0cy5sb2cyRGVwZW5kZW5jaWVzID0gbG9nMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9zY2htaWR0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb3NjaG1pZHREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMb3NjaG1pZHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9zY2htaWR0XG59O1xuZXhwb3J0cy5sb3NjaG1pZHREZXBlbmRlbmNpZXMgPSBsb3NjaG1pZHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxzb2x2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbHNvbHZlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVMc29sdmVcbn07XG5leHBvcnRzLmxzb2x2ZURlcGVuZGVuY2llcyA9IGxzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbHVwRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYUNsYXNzLlNwYURlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMdXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVwXG59O1xuZXhwb3J0cy5sdXBEZXBlbmRlbmNpZXMgPSBsdXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmx1c29sdmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xzb2x2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTHVwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NsdSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGx1c29sdmVEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbHNvbHZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHNvbHZlLmxzb2x2ZURlcGVuZGVuY2llcyxcbiAgbHVwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHVwLmx1cERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgc2x1RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2x1LnNsdURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdXNvbHZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVXNvbHZlLnVzb2x2ZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlTHVzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVMdXNvbHZlXG59O1xuZXhwb3J0cy5sdXNvbHZlRGVwZW5kZW5jaWVzID0gbHVzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWFwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNZWRpYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNZWRpYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFkRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBtYXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXAubWFwRGVwZW5kZW5jaWVzLFxuICBtZWRpYW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNZWRpYW4ubWVkaWFuRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYWQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFkXG59O1xuZXhwb3J0cy5tYWREZXBlbmRlbmNpZXMgPSBtYWREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYWduZXRpY0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljQ29uc3RhbnRcbn07XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSBtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtXG59O1xuZXhwb3J0cy5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0gbWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFwRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFwXG59O1xuZXhwb3J0cy5tYXBEZXBlbmRlbmNpZXMgPSBtYXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFwVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hcFRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWFwVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gbWFwVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIE1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXRyaXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4XG59O1xuZXhwb3J0cy5tYXRyaXhEZXBlbmRlbmNpZXMgPSBtYXRyaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIE1hdHJpeERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLk1hdHJpeERlcGVuZGVuY2llcyA9IE1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXhEZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1heDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXhcbn07XG5leHBvcnRzLm1heERlcGVuZGVuY2llcyA9IG1heERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF4VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1heFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXhUcmFuc2Zvcm1cbn07XG5leHBvcnRzLm1heFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1heFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNZWFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1lYW5cbn07XG5leHBvcnRzLm1lYW5EZXBlbmRlbmNpZXMgPSBtZWFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1lYW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhblRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWVhblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lZGlhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWRpYW5EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlLmNvbXBhcmVEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIHBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1lZGlhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWRpYW5cbn07XG5leHBvcnRzLm1lZGlhbkRlcGVuZGVuY2llcyA9IG1lZGlhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWluRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1pbkRlcGVuZGVuY2llcyA9IHtcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWluOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblxufTtcbmV4cG9ydHMubWluRGVwZW5kZW5jaWVzID0gbWluRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWluVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBzbWFsbGVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlci5zbWFsbGVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNaW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWluVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBtaW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vZERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNb2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kXG59O1xuZXhwb3J0cy5tb2REZXBlbmRlbmNpZXMgPSBtb2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kZVxufTtcbmV4cG9ydHMubW9kZURlcGVuZGVuY2llcyA9IG1vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTW9sYXJNYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzc1xufTtcbmV4cG9ydHMubW9sYXJNYXNzRGVwZW5kZW5jaWVzID0gbW9sYXJNYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NDMTJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyTWFzc0MxMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhck1hc3NDMTJcbn07XG5leHBvcnRzLm1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcyA9IG1vbGFyTWFzc0MxMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudFxufTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IG1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyVm9sdW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyVm9sdW1lXG59O1xuZXhwb3J0cy5tb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IG1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmFjdG9yaWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpbm9taWFsRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc1Bvc2l0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZS5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aW5vbWlhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aW5vbWlhbFxufTtcbmV4cG9ydHMubXVsdGlub21pYWxEZXBlbmRlbmNpZXMgPSBtdWx0aW5vbWlhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU11bHRpcGx5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5XG59O1xuZXhwb3J0cy5tdWx0aXBseURlcGVuZGVuY2llcyA9IG11bHRpcGx5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aXBseVNjYWxhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aXBseVNjYWxhclxufTtcbmV4cG9ydHMubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMgPSBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTmFORGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTmFORGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5hTjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOYU5cbn07XG5leHBvcnRzLk5hTkRlcGVuZGVuY2llcyA9IE5hTkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubmV1dHJvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTmV1dHJvbk1hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTmV1dHJvbk1hc3Ncbn07XG5leHBvcnRzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0gbmV1dHJvbk1hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vZGVcbn07XG5leHBvcnRzLk5vZGVEZXBlbmRlbmNpZXMgPSBOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5vcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbmpEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5vcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTm9ybVxufTtcbmV4cG9ydHMubm9ybURlcGVuZGVuY2llcyA9IG5vcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5vdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTm90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vdFxufTtcbmV4cG9ydHMubm90RGVwZW5kZW5jaWVzID0gbm90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBudGhSb290RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU50aFJvb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnRoUm9vdFxufTtcbmV4cG9ydHMubnRoUm9vdERlcGVuZGVuY2llcyA9IG50aFJvb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm50aFJvb3RzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG50aFJvb3RzRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU50aFJvb3RzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3RzXG59O1xuZXhwb3J0cy5udGhSb290c0RlcGVuZGVuY2llcyA9IG50aFJvb3RzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51Y2xlYXJNYWduZXRvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOdWNsZWFyTWFnbmV0b25cbn07XG5leHBvcnRzLm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcyA9IG51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVsbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bGxEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZU51bGw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVsbFxufTtcbmV4cG9ydHMubnVsbERlcGVuZGVuY2llcyA9IG51bGxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWJlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bWJlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTnVtYmVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bWJlclxufTtcbmV4cG9ydHMubnVtYmVyRGVwZW5kZW5jaWVzID0gbnVtYmVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udW1lcmljRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bWVyaWNEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIG51bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51bWVyaWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtZXJpY1xufTtcbmV4cG9ydHMubnVtZXJpY0RlcGVuZGVuY2llcyA9IG51bWVyaWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk9iamVjdE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgT2JqZWN0Tm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlT2JqZWN0Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVPYmplY3ROb2RlXG59O1xuZXhwb3J0cy5PYmplY3ROb2RlRGVwZW5kZW5jaWVzID0gT2JqZWN0Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub25lc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgb25lc0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVPbmVzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU9uZXNcbn07XG5leHBvcnRzLm9uZXNEZXBlbmRlbmNpZXMgPSBvbmVzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVPcGVyYXRvck5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT3BlcmF0b3JOb2RlXG59O1xuZXhwb3J0cy5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMgPSBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm9yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgb3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlT3I6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT3Jcbn07XG5leHBvcnRzLm9yRGVwZW5kZW5jaWVzID0gb3JEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBhcmVudGhlc2lzTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJlbnRoZXNpc05vZGVcbn07XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyA9IFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGFyc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fzc2lnbm1lbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Jsb2NrTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09iamVjdE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwYXJzZURlcGVuZGVuY2llcyA9IHtcbiAgQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyxcbiAgQXJyYXlOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXJyYXlOb2RlLkFycmF5Tm9kZURlcGVuZGVuY2llcyxcbiAgQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyxcbiAgQmxvY2tOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmxvY2tOb2RlLkJsb2NrTm9kZURlcGVuZGVuY2llcyxcbiAgQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLkNvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyxcbiAgQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyxcbiAgSW5kZXhOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhOb2RlLkluZGV4Tm9kZURlcGVuZGVuY2llcyxcbiAgT2JqZWN0Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09iamVjdE5vZGUuT2JqZWN0Tm9kZURlcGVuZGVuY2llcyxcbiAgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLk9wZXJhdG9yTm9kZURlcGVuZGVuY2llcyxcbiAgUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyxcbiAgUmFuZ2VOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLlJhbmdlTm9kZURlcGVuZGVuY2llcyxcbiAgUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSZWxhdGlvbmFsTm9kZS5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyxcbiAgU3ltYm9sTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuU3ltYm9sTm9kZURlcGVuZGVuY2llcyxcbiAgbnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWVyaWMubnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2Vcbn07XG5leHBvcnRzLnBhcnNlRGVwZW5kZW5jaWVzID0gcGFyc2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBhcnNlckRlcGVuZGVuY2llcyA9IHtcbiAgUGFyc2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuUGFyc2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJzZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyXG59O1xuZXhwb3J0cy5wYXJzZXJEZXBlbmRlbmNpZXMgPSBwYXJzZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcnNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFBhcnNlckRlcGVuZGVuY2llcyA9IHtcbiAgcGFyc2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJzZS5wYXJzZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2VyQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyQ2xhc3Ncbn07XG5leHBvcnRzLlBhcnNlckRlcGVuZGVuY2llcyA9IFBhcnNlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0ge1xuICBjb21wYXJlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzLFxuICBpc05hTkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJ0aXRpb25TZWxlY3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFydGl0aW9uU2VsZWN0XG59O1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMgPSBwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBlcm11dGF0aW9uc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGVybXV0YXRpb25zRGVwZW5kZW5jaWVzID0ge1xuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQZXJtdXRhdGlvbnM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGVybXV0YXRpb25zXG59O1xuZXhwb3J0cy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXMgPSBwZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBoaURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBoaURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQaGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGhpXG59O1xuZXhwb3J0cy5waGlEZXBlbmRlbmNpZXMgPSBwaGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGlEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGlcbn07XG5leHBvcnRzLnBpRGVwZW5kZW5jaWVzID0gcGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpY2tSYW5kb21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwaWNrUmFuZG9tRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQaWNrUmFuZG9tOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpY2tSYW5kb21cbn07XG5leHBvcnRzLnBpY2tSYW5kb21EZXBlbmRlbmNpZXMgPSBwaWNrUmFuZG9tRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0NoYXJnZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBsYW5ja0NoYXJnZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDaGFyZ2Vcbn07XG5leHBvcnRzLnBsYW5ja0NoYXJnZURlcGVuZGVuY2llcyA9IHBsYW5ja0NoYXJnZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrQ29uc3RhbnRcbn07XG5leHBvcnRzLnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gcGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrTGVuZ3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0xlbmd0aFxufTtcbmV4cG9ydHMucGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzID0gcGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrTWFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tNYXNzXG59O1xuZXhwb3J0cy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0gcGxhbmNrTWFzc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmVcbn07XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0gcGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQbGFuY2tUaW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja1RpbWVcbn07XG5leHBvcnRzLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSBwbGFuY2tUaW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wb3dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwb3dEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtYmVyLm51bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUG93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBvd1xufTtcbmV4cG9ydHMucG93RGVwZW5kZW5jaWVzID0gcG93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcmludERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByaW50RGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcmludDogX2ZhY3Rvcmllc0FueS5jcmVhdGVQcmludFxufTtcbmV4cG9ydHMucHJpbnREZXBlbmRlbmNpZXMgPSBwcmludERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByb2REZXBlbmRlbmNpZXMgPSB7XG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVByb2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUHJvZFxufTtcbmV4cG9ydHMucHJvZERlcGVuZGVuY2llcyA9IHByb2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcm90b25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb3Rvbk1hc3Ncbn07XG5leHBvcnRzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSBwcm90b25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5xckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2lnbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxckRlcGVuZGVuY2llcyA9IHtcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgY29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcyxcbiAgY29uakRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmouY29uakRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgaXNaZXJvRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNaZXJvLmlzWmVyb0RlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc2lnbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpZ24uc2lnbkRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlUXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUXJcbn07XG5leHBvcnRzLnFyRGVwZW5kZW5jaWVzID0gcXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxdWFudGlsZVNlcURlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0LnBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUXVhbnRpbGVTZXE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnRpbGVTZXFcbn07XG5leHBvcnRzLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzID0gcXVhbnRpbGVTZXFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uXG59O1xuZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYW5kb21EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmRvbTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb21cbn07XG5leHBvcnRzLnJhbmRvbURlcGVuZGVuY2llcyA9IHJhbmRvbURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tSW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZG9tSW50RGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYW5kb21JbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZG9tSW50XG59O1xuZXhwb3J0cy5yYW5kb21JbnREZXBlbmRlbmNpZXMgPSByYW5kb21JbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmdlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJFcURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXJFcS5zbWFsbGVyRXFEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlXG59O1xuZXhwb3J0cy5yYW5nZURlcGVuZGVuY2llcyA9IHJhbmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SYW5nZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJhbmdlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVSYW5nZUNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlQ2xhc3Ncbn07XG5leHBvcnRzLlJhbmdlRGVwZW5kZW5jaWVzID0gUmFuZ2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlJhbmdlTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSYW5nZU5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZU5vZGVcbn07XG5leHBvcnRzLlJhbmdlTm9kZURlcGVuZGVuY2llcyA9IFJhbmdlTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgYmlnbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmJpZ251bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXJFcS5sYXJnZXJFcURlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlckVxLnNtYWxsZXJFcURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmFuZ2VUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnJhbmdlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gcmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzLFxuICBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzLFxuICBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzLFxuICBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpc1plcm9EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1plcm8uaXNaZXJvRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICBzaW1wbGlmeURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYXRpb25hbGl6ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYXRpb25hbGl6ZVxufTtcbmV4cG9ydHMucmF0aW9uYWxpemVEZXBlbmRlbmNpZXMgPSByYXRpb25hbGl6ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVcbn07XG5leHBvcnRzLnJlRGVwZW5kZW5jaWVzID0gcmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudFxufTtcbmV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gcmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVsYXRpb25hbE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVsYXRpb25hbE5vZGVcbn07XG5leHBvcnRzLlJlbGF0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlcGxhY2VyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVwbGFjZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZVJlcGxhY2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlcGxhY2VyXG59O1xuZXhwb3J0cy5yZXBsYWNlckRlcGVuZGVuY2llcyA9IHJlcGxhY2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNoYXBlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJlc2hhcGVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJlc2hhcGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaGFwZVxufTtcbmV4cG9ydHMucmVzaGFwZURlcGVuZGVuY2llcyA9IHJlc2hhcGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlc2l6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVzaXplRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSZXNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaXplXG59O1xuZXhwb3J0cy5yZXNpemVEZXBlbmRlbmNpZXMgPSByZXNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlJlc3VsdFNldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJlc3VsdFNldERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmVzdWx0U2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc3VsdFNldFxufTtcbmV4cG9ydHMuUmVzdWx0U2V0RGVwZW5kZW5jaWVzID0gUmVzdWx0U2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXZpdmVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmV2aXZlckRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmV2aXZlcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXZpdmVyXG59O1xuZXhwb3J0cy5yZXZpdmVyRGVwZW5kZW5jaWVzID0gcmV2aXZlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1plcm9zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzWmVyb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodEFyaXRoU2hpZnRcbn07XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llcyA9IHJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmlnaHRMb2dTaGlmdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodExvZ1NoaWZ0XG59O1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RGVwZW5kZW5jaWVzID0gcmlnaHRMb2dTaGlmdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm91bmREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3VuZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJvdW5kOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvdW5kXG59O1xuZXhwb3J0cy5yb3VuZERlcGVuZGVuY2llcyA9IHJvdW5kRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3dEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUm93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvd1xufTtcbmV4cG9ydHMucm93RGVwZW5kZW5jaWVzID0gcm93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3dUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUm93VHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvd1RyYW5zZm9ybVxufTtcbmV4cG9ydHMucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gcm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yeWRiZXJnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByeWRiZXJnRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUnlkYmVyZzogX2ZhY3Rvcmllc0FueS5jcmVhdGVSeWRiZXJnXG59O1xuZXhwb3J0cy5yeWRiZXJnRGVwZW5kZW5jaWVzID0gcnlkYmVyZ0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDFfMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbnZhciBTUVJUMV8yRGVwZW5kZW5jaWVzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNRUlQxXzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDFfMlxufTtcbmV4cG9ydHMuU1FSVDFfMkRlcGVuZGVuY2llcyA9IFNRUlQxXzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNRUlQyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgU1FSVDJEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlU1FSVDI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDJcbn07XG5leHBvcnRzLlNRUlQyRGVwZW5kZW5jaWVzID0gU1FSVDJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNhY2t1clRldHJvZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2Fja3VyVGV0cm9kZVxufTtcbmV4cG9ydHMuc2Fja3VyVGV0cm9kZURlcGVuZGVuY2llcyA9IHNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNlY0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjXG59O1xuZXhwb3J0cy5zZWNEZXBlbmRlbmNpZXMgPSBzZWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZWNoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNlY2g6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjaFxufTtcbmV4cG9ydHMuc2VjaERlcGVuZGVuY2llcyA9IHNlY2hEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2Vjb25kUmFkaWF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY29uZFJhZGlhdGlvblxufTtcbmV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldENhcnRlc2lhbkRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldENhcnRlc2lhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRDYXJ0ZXNpYW5cbn07XG5leHBvcnRzLnNldENhcnRlc2lhbkRlcGVuZGVuY2llcyA9IHNldENhcnRlc2lhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldERpZmZlcmVuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0RGlmZmVyZW5jZVxufTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldERpc3RpbmN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldERpc3RpbmN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldERpc3RpbmN0XG59O1xuZXhwb3J0cy5zZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHNldERpc3RpbmN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldEludGVyc2VjdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldEludGVyc2VjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJbnRlcnNlY3Rcbn07XG5leHBvcnRzLnNldEludGVyc2VjdERlcGVuZGVuY2llcyA9IHNldEludGVyc2VjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0SXNTdWJzZXREZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0SXNTdWJzZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0SXNTdWJzZXRcbn07XG5leHBvcnRzLnNldElzU3Vic2V0RGVwZW5kZW5jaWVzID0gc2V0SXNTdWJzZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldE11bHRpcGxpY2l0eURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0TXVsdGlwbGljaXR5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldE11bHRpcGxpY2l0eVxufTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzID0gc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRQb3dlcnNldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRQb3dlcnNldERlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRQb3dlcnNldDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRQb3dlcnNldFxufTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREZXBlbmRlbmNpZXMgPSBzZXRQb3dlcnNldERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U2l6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFNpemVEZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldFNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0U2l6ZVxufTtcbmV4cG9ydHMuc2V0U2l6ZURlcGVuZGVuY2llcyA9IHNldFNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbmNhdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0U3ltRGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb25jYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25jYXQuY29uY2F0RGVwZW5kZW5jaWVzLFxuICBzZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZS5zZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFN5bURpZmZlcmVuY2Vcbn07XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSBzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRVbmlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uY2F0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uY2F0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFVuaW9uRGVwZW5kZW5jaWVzID0ge1xuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbmNhdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmNhdC5jb25jYXREZXBlbmRlbmNpZXMsXG4gIHNldEludGVyc2VjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NldEludGVyc2VjdC5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMsXG4gIHNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldFVuaW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFVuaW9uXG59O1xuZXhwb3J0cy5zZXRVbmlvbkRlcGVuZGVuY2llcyA9IHNldFVuaW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaWduRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaWduRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIEZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgY29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2lnbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaWduXG59O1xuZXhwb3J0cy5zaWduRGVwZW5kZW5jaWVzID0gc2lnbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNaZXJvID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNaZXJvLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbXBsaWZ5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpbXBsaWZ5XG59O1xuZXhwb3J0cy5zaW1wbGlmeURlcGVuZGVuY2llcyA9IHNpbXBsaWZ5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW5cbn07XG5leHBvcnRzLnNpbkRlcGVuZGVuY2llcyA9IHNpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpbmhEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbmg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2luaFxufTtcbmV4cG9ydHMuc2luaERlcGVuZGVuY2llcyA9IHNpbmhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpemVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2l6ZVxufTtcbmV4cG9ydHMuc2l6ZURlcGVuZGVuY2llcyA9IHNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNsdURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzbHVEZXBlbmRlbmNpZXMgPSB7XG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXJFcS5sYXJnZXJFcURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHJhbnNwb3NlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2x1OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNsdVxufTtcbmV4cG9ydHMuc2x1RGVwZW5kZW5jaWVzID0gc2x1RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc21hbGxlckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTbWFsbGVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJcbn07XG5leHBvcnRzLnNtYWxsZXJEZXBlbmRlbmNpZXMgPSBzbWFsbGVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRXFEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzbWFsbGVyRXFEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU21hbGxlckVxOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJFcVxufTtcbmV4cG9ydHMuc21hbGxlckVxRGVwZW5kZW5jaWVzID0gc21hbGxlckVxRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc29ydERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU29ydDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTb3J0XG59O1xuZXhwb3J0cy5zb3J0RGVwZW5kZW5jaWVzID0gc29ydERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3BhRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFNwYURlcGVuZGVuY2llcyA9IHtcbiAgRmlib25hY2NpSGVhcERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcGFDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFDbGFzc1xufTtcbmV4cG9ydHMuU3BhRGVwZW5kZW5jaWVzID0gU3BhRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGFyc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGFyc2VEZXBlbmRlbmNpZXMgPSB7XG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhcnNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZVxufTtcbmV4cG9ydHMuc3BhcnNlRGVwZW5kZW5jaWVzID0gc3BhcnNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIE1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyA9IFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3BlZWRPZkxpZ2h0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcGVlZE9mTGlnaHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BlZWRPZkxpZ2h0XG59O1xuZXhwb3J0cy5zcGVlZE9mTGlnaHREZXBlbmRlbmNpZXMgPSBzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BsaXRVbml0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwbGl0VW5pdFxufTtcbmV4cG9ydHMuc3BsaXRVbml0RGVwZW5kZW5jaWVzID0gc3BsaXRVbml0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcXJ0RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNxcnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydFxufTtcbmV4cG9ydHMuc3FydERlcGVuZGVuY2llcyA9IHNxcnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxcnRtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbnYgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbnYuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01heC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxcnRtRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBpZGVudGl0eURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lkZW50aXR5LmlkZW50aXR5RGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtYXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXgubWF4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzcXJ0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3FydC5zcXJ0RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXJ0bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcXJ0bVxufTtcbmV4cG9ydHMuc3FydG1EZXBlbmRlbmNpZXMgPSBzcXJ0bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3F1YXJlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3F1YXJlRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXVhcmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1YXJlXG59O1xuZXhwb3J0cy5zcXVhcmVEZXBlbmRlbmNpZXMgPSBzcXVhcmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWVlemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxdWVlemVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNxdWVlemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1ZWV6ZVxufTtcbmV4cG9ydHMuc3F1ZWV6ZURlcGVuZGVuY2llcyA9IHNxdWVlemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0ZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNWYXJpYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdGREZXBlbmRlbmNpZXMgPSB7XG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHZhcmlhbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVmFyaWFuY2UudmFyaWFuY2VEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRcbn07XG5leHBvcnRzLnN0ZERlcGVuZGVuY2llcyA9IHN0ZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNWYXJpYW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0ZFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdmFyaWFuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNWYXJpYW5jZS52YXJpYW5jZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3RkVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0ZFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGVmYW5Cb2x0em1hbm5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZWZhbkJvbHR6bWFubjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGVmYW5Cb2x0em1hbm5cbn07XG5leHBvcnRzLnN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0aXJsaW5nUzJEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGZhY3RvcmlhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5mYWN0b3JpYWxEZXBlbmRlbmNpZXMsXG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0aXJsaW5nUzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RpcmxpbmdTMlxufTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRlcGVuZGVuY2llcyA9IHN0aXJsaW5nUzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0cmluZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0cmluZ0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3RyaW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0cmluZ1xufTtcbmV4cG9ydHMuc3RyaW5nRGVwZW5kZW5jaWVzID0gc3RyaW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnNldERlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3Vic2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFxufTtcbmV4cG9ydHMuc3Vic2V0RGVwZW5kZW5jaWVzID0gc3Vic2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJzZXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3Vic2V0VHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJ0cmFjdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnRyYWN0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1YnRyYWN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnRyYWN0XG59O1xuZXhwb3J0cy5zdWJ0cmFjdERlcGVuZGVuY2llcyA9IHN1YnRyYWN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3VtRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTdW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtXG59O1xuZXhwb3J0cy5zdW1EZXBlbmRlbmNpZXMgPSBzdW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdW1UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1bVRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdW1UcmFuc2Zvcm1cbn07XG5leHBvcnRzLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHN1bVRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3ltYm9sTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3ltYm9sTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTeW1ib2xOb2RlXG59O1xuZXhwb3J0cy5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzID0gU3ltYm9sTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdGFuRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlVGFuXG59O1xuZXhwb3J0cy50YW5EZXBlbmRlbmNpZXMgPSB0YW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbmhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0YW5oRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUYW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhbmhcbn07XG5leHBvcnRzLnRhbmhEZXBlbmRlbmNpZXMgPSB0YW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YXVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0YXVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGF1OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhdVxufTtcbmV4cG9ydHMudGF1RGVwZW5kZW5jaWVzID0gdGF1RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uXG59O1xuZXhwb3J0cy50aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0gdGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRvRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUbzogX2ZhY3Rvcmllc0FueS5jcmVhdGVUb1xufTtcbmV4cG9ydHMudG9EZXBlbmRlbmNpZXMgPSB0b0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHJhY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHJhY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVRyYWNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRyYWNlXG59O1xuZXhwb3J0cy50cmFjZURlcGVuZGVuY2llcyA9IHRyYWNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFuc3Bvc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRyYW5zcG9zZURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVHJhbnNwb3NlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRyYW5zcG9zZVxufTtcbmV4cG9ydHMudHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdHJhbnNwb3NlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cnVlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHJ1ZURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlVHJ1ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVUcnVlXG59O1xuZXhwb3J0cy50cnVlRGVwZW5kZW5jaWVzID0gdHJ1ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZU9mRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHlwZU9mRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUeXBlT2Y6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVHlwZU9mXG59O1xuZXhwb3J0cy50eXBlT2ZEZXBlbmRlbmNpZXMgPSB0eXBlT2ZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHR5cGVkRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVR5cGVkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVkXG59O1xuZXhwb3J0cy50eXBlZERlcGVuZGVuY2llcyA9IHR5cGVkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5hcnlNaW51c0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5hcnlNaW51czogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmFyeU1pbnVzXG59O1xuZXhwb3J0cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzID0gdW5hcnlNaW51c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5hcnlQbHVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5hcnlQbHVzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVVuYXJ5UGx1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmFyeVBsdXNcbn07XG5leHBvcnRzLnVuYXJ5UGx1c0RlcGVuZGVuY2llcyA9IHVuYXJ5UGx1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5lcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHVuZXF1YWxEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5lcXVhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmVxdWFsXG59O1xuZXhwb3J0cy51bmVxdWFsRGVwZW5kZW5jaWVzID0gdW5lcXVhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zvcm1hdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm91bmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBVbml0RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBmaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGaXguZml4RGVwZW5kZW5jaWVzLFxuICBmb3JtYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGb3JtYXQuZm9ybWF0RGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1iZXIubnVtYmVyRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbml0Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5pdENsYXNzXG59O1xuZXhwb3J0cy5Vbml0RGVwZW5kZW5jaWVzID0gVW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5pdERlcGVuZGVuY2llcyA9IHtcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbml0RnVuY3Rpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5pdEZ1bmN0aW9uXG59O1xuZXhwb3J0cy51bml0RGVwZW5kZW5jaWVzID0gdW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBFRGVwZW5kZW5jaWVzID0ge1xuICBlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRS5lRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVcHBlcmNhc2VFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVwcGVyY2FzZUVcbn07XG5leHBvcnRzLkVEZXBlbmRlbmNpZXMgPSBFRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QSURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQaSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFBJRGVwZW5kZW5jaWVzID0ge1xuICBwaURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BpLnBpRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVcHBlcmNhc2VQaTogX2ZhY3Rvcmllc0FueS5jcmVhdGVVcHBlcmNhc2VQaVxufTtcbmV4cG9ydHMuUElEZXBlbmRlbmNpZXMgPSBQSURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudXNvbHZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB1c29sdmVEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVXNvbHZlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVzb2x2ZVxufTtcbmV4cG9ydHMudXNvbHZlRGVwZW5kZW5jaWVzID0gdXNvbHZlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhY3V1bUltcGVkYW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVWYWN1dW1JbXBlZGFuY2Vcbn07XG5leHBvcnRzLnZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llcyA9IHZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFwcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXBwbHkuYXBwbHlEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhcmlhbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlXG59O1xuZXhwb3J0cy52YXJpYW5jZURlcGVuZGVuY2llcyA9IHZhcmlhbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FwcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXBwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgYXBwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBcHBseS5hcHBseURlcGVuZGVuY2llcyxcbiAgZGl2aWRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlLmRpdmlkZURlcGVuZGVuY2llcyxcbiAgaXNOYU5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05hTi5pc05hTkRlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnZhcmlhbmNlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnZlcnNpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2ZXJzaW9uRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVWZXJzaW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZlcnNpb25cbn07XG5leHBvcnRzLnZlcnNpb25EZXBlbmRlbmNpZXMgPSB2ZXJzaW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53ZWFrTWl4aW5nQW5nbGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB3ZWFrTWl4aW5nQW5nbGVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlV2Vha01peGluZ0FuZ2xlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVdlYWtNaXhpbmdBbmdsZVxufTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzID0gd2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB3aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlV2llbkRpc3BsYWNlbWVudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVXaWVuRGlzcGxhY2VtZW50XG59O1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0gd2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMueGdjZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgeGdjZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVYZ2NkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVhnY2Rcbn07XG5leHBvcnRzLnhnY2REZXBlbmRlbmNpZXMgPSB4Z2NkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy54b3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB4b3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVhvclxufTtcbmV4cG9ydHMueG9yRGVwZW5kZW5jaWVzID0geG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy56ZXJvc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgemVyb3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWmVyb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlWmVyb3Ncbn07XG5leHBvcnRzLnplcm9zRGVwZW5kZW5jaWVzID0gemVyb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVycm9yID0gZXhwb3J0cy5qc29uID0gZXhwb3J0cy5leHByZXNzaW9uID0gZXhwb3J0cy50eXBlID0gZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mID0gZXhwb3J0cy5kZXByZWNhdGVkVmFyID0gZXhwb3J0cy5kZXByZWNhdGVkSW1wb3J0ID0gZXhwb3J0cy5kZXByZWNhdGVkRXZhbCA9IHZvaWQgMDtcblxudmFyIF9ldmFsID0gcmVxdWlyZShcIi4uL2V4cHJlc3Npb24vZnVuY3Rpb24vZXZhbFwiKTtcblxudmFyIF9kZXByZWNhdGVkSW1wb3J0ID0gcmVxdWlyZShcIi4uL2NvcmUvZnVuY3Rpb24vZGVwcmVjYXRlZEltcG9ydFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgX3R5cGVPZiA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4uL3V0aWxzL2xvZ1wiKTtcblxudmFyIF9wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vcHVyZUZ1bmN0aW9uc0FueS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfaW1wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vaW1wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE5LTA0LTE0XG4vLyBcImRlcHJlY2F0ZWRFdmFsXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwiZXZhbFwiIGluIHRoZSBjb2RlIGNvbXBpbGVkIHRvIEVTNStDb21tb25Kc1xudmFyIGRlcHJlY2F0ZWRFdmFsID0gLyogI19fUFVSRV9fICovKDAsIF9ldmFsLmNyZWF0ZURlcHJlY2F0ZWRFdmFsKSh7XG4gIGV2YWx1YXRlOiBfaW1wdXJlRnVuY3Rpb25zQW55LmV2YWx1YXRlXG59KTsgLy8gXCJkZXByZWNhdGVkSW1wb3J0XCIgaXMgYWxzbyBleHBvc2VkIGFzIFwiaW1wb3J0XCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZEV2YWwgPSBkZXByZWNhdGVkRXZhbDtcbnZhciBkZXByZWNhdGVkSW1wb3J0ID0gLyogI19fUFVSRV9fICovKDAsIF9kZXByZWNhdGVkSW1wb3J0LmNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQpKHt9KTsgLy8gXCJkZXByZWNhdGVkVmFyXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwidmFyXCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZEltcG9ydCA9IGRlcHJlY2F0ZWRJbXBvcnQ7XG52YXIgZGVwcmVjYXRlZFZhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfdmFyaWFuY2UuY3JlYXRlRGVwcmVjYXRlZFZhcikoe1xuICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2Vcbn0pOyAvLyBcImRlcHJlY2F0ZWRUeXBlb2ZcIiBpcyBhbHNvIGV4cG9zZWQgYXMgXCJ0eXBlb2ZcIiBpbiB0aGUgY29kZSBjb21waWxlZCB0byBFUzUrQ29tbW9uSnNcblxuZXhwb3J0cy5kZXByZWNhdGVkVmFyID0gZGVwcmVjYXRlZFZhcjtcbnZhciBkZXByZWNhdGVkVHlwZW9mID0gLyogI19fUFVSRV9fICovKDAsIF90eXBlT2YuY3JlYXRlRGVwcmVjYXRlZFR5cGVvZikoe1xuICB0eXBlT2Y6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVPZlxufSk7XG5leHBvcnRzLmRlcHJlY2F0ZWRUeXBlb2YgPSBkZXByZWNhdGVkVHlwZW9mO1xudmFyIHR5cGUgPSAvKiAjX19QVVJFX18gKi9jcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygndHlwZScsIHtcbiAgaXNOdW1iZXI6IF9pcy5pc051bWJlcixcbiAgaXNDb21wbGV4OiBfaXMuaXNDb21wbGV4LFxuICBpc0JpZ051bWJlcjogX2lzLmlzQmlnTnVtYmVyLFxuICBpc0ZyYWN0aW9uOiBfaXMuaXNGcmFjdGlvbixcbiAgaXNVbml0OiBfaXMuaXNVbml0LFxuICBpc1N0cmluZzogX2lzLmlzU3RyaW5nLFxuICBpc0FycmF5OiBfaXMuaXNBcnJheSxcbiAgaXNNYXRyaXg6IF9pcy5pc01hdHJpeCxcbiAgaXNDb2xsZWN0aW9uOiBfaXMuaXNDb2xsZWN0aW9uLFxuICBpc0RlbnNlTWF0cml4OiBfaXMuaXNEZW5zZU1hdHJpeCxcbiAgaXNTcGFyc2VNYXRyaXg6IF9pcy5pc1NwYXJzZU1hdHJpeCxcbiAgaXNSYW5nZTogX2lzLmlzUmFuZ2UsXG4gIGlzSW5kZXg6IF9pcy5pc0luZGV4LFxuICBpc0Jvb2xlYW46IF9pcy5pc0Jvb2xlYW4sXG4gIGlzUmVzdWx0U2V0OiBfaXMuaXNSZXN1bHRTZXQsXG4gIGlzSGVscDogX2lzLmlzSGVscCxcbiAgaXNGdW5jdGlvbjogX2lzLmlzRnVuY3Rpb24sXG4gIGlzRGF0ZTogX2lzLmlzRGF0ZSxcbiAgaXNSZWdFeHA6IF9pcy5pc1JlZ0V4cCxcbiAgaXNPYmplY3Q6IF9pcy5pc09iamVjdCxcbiAgaXNOdWxsOiBfaXMuaXNOdWxsLFxuICBpc1VuZGVmaW5lZDogX2lzLmlzVW5kZWZpbmVkLFxuICBpc0FjY2Vzc29yTm9kZTogX2lzLmlzQWNjZXNzb3JOb2RlLFxuICBpc0FycmF5Tm9kZTogX2lzLmlzQXJyYXlOb2RlLFxuICBpc0Fzc2lnbm1lbnROb2RlOiBfaXMuaXNBc3NpZ25tZW50Tm9kZSxcbiAgaXNCbG9ja05vZGU6IF9pcy5pc0Jsb2NrTm9kZSxcbiAgaXNDb25kaXRpb25hbE5vZGU6IF9pcy5pc0NvbmRpdGlvbmFsTm9kZSxcbiAgaXNDb25zdGFudE5vZGU6IF9pcy5pc0NvbnN0YW50Tm9kZSxcbiAgaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICBpc0Z1bmN0aW9uTm9kZTogX2lzLmlzRnVuY3Rpb25Ob2RlLFxuICBpc0luZGV4Tm9kZTogX2lzLmlzSW5kZXhOb2RlLFxuICBpc05vZGU6IF9pcy5pc05vZGUsXG4gIGlzT2JqZWN0Tm9kZTogX2lzLmlzT2JqZWN0Tm9kZSxcbiAgaXNPcGVyYXRvck5vZGU6IF9pcy5pc09wZXJhdG9yTm9kZSxcbiAgaXNQYXJlbnRoZXNpc05vZGU6IF9pcy5pc1BhcmVudGhlc2lzTm9kZSxcbiAgaXNSYW5nZU5vZGU6IF9pcy5pc1JhbmdlTm9kZSxcbiAgaXNTeW1ib2xOb2RlOiBfaXMuaXNTeW1ib2xOb2RlLFxuICBpc0NoYWluOiBfaXMuaXNDaGFpbixcbiAgQmlnTnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5CaWdOdW1iZXIsXG4gIENoYWluOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNoYWluLFxuICBDb21wbGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5Db21wbGV4LFxuICBGcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuRnJhY3Rpb24sXG4gIE1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuTWF0cml4LFxuICBEZW5zZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuRGVuc2VNYXRyaXgsXG4gIFNwYXJzZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuU3BhcnNlTWF0cml4LFxuICBTcGE6IF9wdXJlRnVuY3Rpb25zQW55LlNwYSxcbiAgRmlib25hY2NpSGVhcDogX3B1cmVGdW5jdGlvbnNBbnkuRmlib25hY2NpSGVhcCxcbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55LkltbXV0YWJsZURlbnNlTWF0cml4LFxuICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gIFJhbmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5SYW5nZSxcbiAgUmVzdWx0U2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5SZXN1bHRTZXQsXG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIEhlbHA6IF9pbXB1cmVGdW5jdGlvbnNBbnkuSGVscCxcbiAgUGFyc2VyOiBfaW1wdXJlRnVuY3Rpb25zQW55LlBhcnNlclxufSk7XG5leHBvcnRzLnR5cGUgPSB0eXBlO1xudmFyIGV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi9jcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygnZXhwcmVzc2lvbicsIHtcbiAgcGFyc2U6IF9pbXB1cmVGdW5jdGlvbnNBbnkucGFyc2UsXG4gIFBhcnNlcjogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJzZXIsXG4gIG5vZGU6IGNyZWF0ZURlcHJlY2F0ZWRQcm9wZXJ0aWVzKCdleHByZXNzaW9uLm5vZGUnLCB7XG4gICAgQWNjZXNzb3JOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFjY2Vzc29yTm9kZSxcbiAgICBBcnJheU5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQXJyYXlOb2RlLFxuICAgIEFzc2lnbm1lbnROb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFzc2lnbm1lbnROb2RlLFxuICAgIEJsb2NrTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5CbG9ja05vZGUsXG4gICAgQ29uZGl0aW9uYWxOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNvbmRpdGlvbmFsTm9kZSxcbiAgICBDb25zdGFudE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQ29uc3RhbnROb2RlLFxuICAgIEluZGV4Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5JbmRleE5vZGUsXG4gICAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5GdW5jdGlvbk5vZGUsXG4gICAgTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5Ob2RlLFxuICAgIE9iamVjdE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuT2JqZWN0Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuT3BlcmF0b3JOb2RlLFxuICAgIFBhcmVudGhlc2lzTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJlbnRoZXNpc05vZGUsXG4gICAgUmFuZ2VOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LlJhbmdlTm9kZSxcbiAgICBSZWxhdGlvbmFsTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5SZWxhdGlvbmFsTm9kZSxcbiAgICBTeW1ib2xOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LlN5bWJvbE5vZGVcbiAgfSlcbn0pO1xuZXhwb3J0cy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbnZhciBqc29uID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2pzb24nLCB7XG4gIHJldml2ZXI6IF9pbXB1cmVGdW5jdGlvbnNBbnkucmV2aXZlclxufSk7XG5leHBvcnRzLmpzb24gPSBqc29uO1xudmFyIGVycm9yID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2Vycm9yJywge1xuICBBcmd1bWVudHNFcnJvcjogX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yLFxuICBEaW1lbnNpb25FcnJvcjogX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yLFxuICBJbmRleEVycm9yOiBfSW5kZXhFcnJvci5JbmRleEVycm9yXG59KTtcbmV4cG9ydHMuZXJyb3IgPSBlcnJvcjtcblxuZnVuY3Rpb24gY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMocGF0aCwgcHJvcHMpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICgwLCBfb2JqZWN0LmxhenkpKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKFwibWF0aC5cIi5jb25jYXQocGF0aCwgXCIuXCIpLmNvbmNhdChuYW1lLCBcIiBpcyBtb3ZlZCB0byBtYXRoLlwiKS5jb25jYXQobmFtZSwgXCIgaW4gdjYuMC4wLiBcIikgKyAnUGxlYXNlIHVzZSB0aGUgbmV3IGxvY2F0aW9uIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gcHJvcHNbbmFtZV07XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZG9jc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZW1iZWRkZWREb2NzLmVtYmVkZGVkRG9jcztcbiAgfVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmUgPSBleHBvcnRzLmhlbHAgPSBleHBvcnRzLnJhdGlvbmFsaXplID0gZXhwb3J0cy5zaW1wbGlmeSA9IGV4cG9ydHMucGFyc2VyID0gZXhwb3J0cy5jb21waWxlID0gZXhwb3J0cy5IZWxwID0gZXhwb3J0cy5QYXJzZXIgPSBleHBvcnRzLmV2YWx1YXRlID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuRnVuY3Rpb25Ob2RlID0gZXhwb3J0cy5TeW1ib2xOb2RlID0gZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZSA9IGV4cG9ydHMuSW5kZXhOb2RlID0gZXhwb3J0cy5BY2Nlc3Nvck5vZGUgPSBleHBvcnRzLmNoYWluID0gZXhwb3J0cy5GdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gZXhwb3J0cy5SYW5nZU5vZGUgPSBleHBvcnRzLk9wZXJhdG9yTm9kZSA9IGV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlID0gZXhwb3J0cy5yZXZpdmVyID0gZXhwb3J0cy5DaGFpbiA9IGV4cG9ydHMuUmVsYXRpb25hbE5vZGUgPSBleHBvcnRzLlBhcmVudGhlc2lzTm9kZSA9IGV4cG9ydHMuT2JqZWN0Tm9kZSA9IGV4cG9ydHMuQ29uc3RhbnROb2RlID0gZXhwb3J0cy5CbG9ja05vZGUgPSBleHBvcnRzLkFycmF5Tm9kZSA9IGV4cG9ydHMuTm9kZSA9IHZvaWQgMDtcblxudmFyIF9jb25maWdSZWFkb25seSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1JlYWRvbmx5XCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2VtYmVkZGVkRG9jcyA9IHJlcXVpcmUoXCIuLi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9lbWJlZGRlZERvY3NcIik7XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbnZhciBtYXRoID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSB7fTsgLy8gTk9UIHB1cmUhXG5cbnZhciBjbGFzc2VzID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vZGUpKHtcbiAgbWF0aFdpdGhUcmFuc2Zvcm06IG1hdGhXaXRoVHJhbnNmb3JtXG59KTtcbmV4cG9ydHMuTm9kZSA9IE5vZGU7XG52YXIgQXJyYXlOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJyYXlOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5BcnJheU5vZGUgPSBBcnJheU5vZGU7XG52YXIgQmxvY2tOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmxvY2tOb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0XG59KTtcbmV4cG9ydHMuQmxvY2tOb2RlID0gQmxvY2tOb2RlO1xudmFyIENvbnN0YW50Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbnN0YW50Tm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuQ29uc3RhbnROb2RlID0gQ29uc3RhbnROb2RlO1xudmFyIE9iamVjdE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVPYmplY3ROb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5PYmplY3ROb2RlID0gT2JqZWN0Tm9kZTtcbnZhciBQYXJlbnRoZXNpc05vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJlbnRoZXNpc05vZGUpKHtcbiAgTm9kZTogTm9kZVxufSk7XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZSA9IFBhcmVudGhlc2lzTm9kZTtcbnZhciBSZWxhdGlvbmFsTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlbGF0aW9uYWxOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZSA9IFJlbGF0aW9uYWxOb2RlO1xudmFyIENoYWluID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2hhaW5DbGFzcykoe1xuICBtYXRoOiBtYXRoXG59KTtcbmV4cG9ydHMuQ2hhaW4gPSBDaGFpbjtcbnZhciByZXZpdmVyID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmV2aXZlcikoe1xuICBjbGFzc2VzOiBjbGFzc2VzXG59KTtcbmV4cG9ydHMucmV2aXZlciA9IHJldml2ZXI7XG52YXIgQ29uZGl0aW9uYWxOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uZGl0aW9uYWxOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5Db25kaXRpb25hbE5vZGUgPSBDb25kaXRpb25hbE5vZGU7XG52YXIgT3BlcmF0b3JOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlT3BlcmF0b3JOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvck5vZGUgPSBPcGVyYXRvck5vZGU7XG52YXIgUmFuZ2VOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5SYW5nZU5vZGUgPSBSYW5nZU5vZGU7XG52YXIgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IEZ1bmN0aW9uQXNzaWdubWVudE5vZGU7XG52YXIgY2hhaW4gPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpbikoe1xuICBDaGFpbjogQ2hhaW4sXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmNoYWluID0gY2hhaW47XG52YXIgQWNjZXNzb3JOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNjZXNzb3JOb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIHN1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc3Vic2V0XG59KTtcbmV4cG9ydHMuQWNjZXNzb3JOb2RlID0gQWNjZXNzb3JOb2RlO1xudmFyIEluZGV4Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4Tm9kZSkoe1xuICBOb2RlOiBOb2RlLFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIHNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnNpemVcbn0pO1xuZXhwb3J0cy5JbmRleE5vZGUgPSBJbmRleE5vZGU7XG52YXIgQXNzaWdubWVudE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBc3NpZ25tZW50Tm9kZSkoe1xuICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgTm9kZTogTm9kZSxcbiAgc3Vic2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJzZXRcbn0pO1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZSA9IEFzc2lnbm1lbnROb2RlO1xudmFyIFN5bWJvbE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTeW1ib2xOb2RlKSh7XG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIE5vZGU6IE5vZGUsXG4gIG1hdGg6IG1hdGhcbn0pO1xuZXhwb3J0cy5TeW1ib2xOb2RlID0gU3ltYm9sTm9kZTtcbnZhciBGdW5jdGlvbk5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGdW5jdGlvbk5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgbWF0aDogbWF0aFxufSk7XG5leHBvcnRzLkZ1bmN0aW9uTm9kZSA9IEZ1bmN0aW9uTm9kZTtcbnZhciBwYXJzZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlKSh7XG4gIEFjY2Vzc29yTm9kZTogQWNjZXNzb3JOb2RlLFxuICBBcnJheU5vZGU6IEFycmF5Tm9kZSxcbiAgQXNzaWdubWVudE5vZGU6IEFzc2lnbm1lbnROb2RlLFxuICBCbG9ja05vZGU6IEJsb2NrTm9kZSxcbiAgQ29uZGl0aW9uYWxOb2RlOiBDb25kaXRpb25hbE5vZGUsXG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgSW5kZXhOb2RlOiBJbmRleE5vZGUsXG4gIE9iamVjdE5vZGU6IE9iamVjdE5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgUmFuZ2VOb2RlOiBSYW5nZU5vZGUsXG4gIFJlbGF0aW9uYWxOb2RlOiBSZWxhdGlvbmFsTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBudW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5udW1lcmljLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xudmFyIGV2YWx1YXRlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXZhbHVhdGUpKHtcbiAgcGFyc2U6IHBhcnNlLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZSA9IGV2YWx1YXRlO1xudmFyIFBhcnNlciA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlckNsYXNzKSh7XG4gIHBhcnNlOiBwYXJzZVxufSk7XG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjtcbnZhciBIZWxwID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscENsYXNzKSh7XG4gIHBhcnNlOiBwYXJzZVxufSk7XG5leHBvcnRzLkhlbHAgPSBIZWxwO1xudmFyIGNvbXBpbGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21waWxlKSh7XG4gIHBhcnNlOiBwYXJzZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG52YXIgcGFyc2VyID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyKSh7XG4gIFBhcnNlcjogUGFyc2VyLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJzZXIgPSBwYXJzZXI7XG52YXIgc2ltcGxpZnkgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW1wbGlmeSkoe1xuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSxcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBwYXJzZTogcGFyc2UsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLnNpbXBsaWZ5ID0gc2ltcGxpZnk7XG52YXIgcmF0aW9uYWxpemUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYXRpb25hbGl6ZSkoe1xuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSxcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBwYXJzZTogcGFyc2UsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBzaW1wbGlmeTogc2ltcGxpZnksXG4gIHN1YnRyYWN0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJ0cmFjdCxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMucmF0aW9uYWxpemUgPSByYXRpb25hbGl6ZTtcbnZhciBoZWxwID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscCkoe1xuICBIZWxwOiBIZWxwLFxuICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmhlbHAgPSBoZWxwO1xudmFyIGRlcml2YXRpdmUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXJpdmF0aXZlKSh7XG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlLFxuICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG51bWVyaWM6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWVyaWMsXG4gIHBhcnNlOiBwYXJzZSxcbiAgc2ltcGxpZnk6IHNpbXBsaWZ5LFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5kZXJpdmF0aXZlID0gZGVyaXZhdGl2ZTtcblxuX2V4dGVuZHMobWF0aCwge1xuICAndHlwZW9mJzogX3B1cmVGdW5jdGlvbnNBbnkudHlwZU9mLFxuICBleWU6IF9wdXJlRnVuY3Rpb25zQW55LmV5ZSxcbiAgcmV2aXZlcjogcmV2aXZlcixcbiAgXCJmYWxzZVwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fZmFsc2UsXG4gIFwibnVsbFwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fbnVsbCxcbiAgXCJ0cnVlXCI6IF9wdXJlRnVuY3Rpb25zQW55Ll90cnVlLFxuICByZXBsYWNlcjogX3B1cmVGdW5jdGlvbnNBbnkucmVwbGFjZXIsXG4gIGk6IF9wdXJlRnVuY3Rpb25zQW55LmksXG4gIExOMTA6IF9wdXJlRnVuY3Rpb25zQW55LkxOMTAsXG4gIExPRzEwRTogX3B1cmVGdW5jdGlvbnNBbnkuTE9HMTBFLFxuICBOYU46IF9wdXJlRnVuY3Rpb25zQW55Ll9OYU4sXG4gIHBpOiBfcHVyZUZ1bmN0aW9uc0FueS5waSxcbiAgU1FSVDFfMjogX3B1cmVGdW5jdGlvbnNBbnkuU1FSVDFfMixcbiAgdGF1OiBfcHVyZUZ1bmN0aW9uc0FueS50YXUsXG4gIGVmaW1vdkZhY3RvcjogX3B1cmVGdW5jdGlvbnNBbnkuZWZpbW92RmFjdG9yLFxuICBmaW5lU3RydWN0dXJlOiBfcHVyZUZ1bmN0aW9uc0FueS5maW5lU3RydWN0dXJlLFxuICBzYWNrdXJUZXRyb2RlOiBfcHVyZUZ1bmN0aW9uc0FueS5zYWNrdXJUZXRyb2RlLFxuICB3ZWFrTWl4aW5nQW5nbGU6IF9wdXJlRnVuY3Rpb25zQW55LndlYWtNaXhpbmdBbmdsZSxcbiAgZTogX3B1cmVGdW5jdGlvbnNBbnkuZSxcbiAgSW5maW5pdHk6IF9wdXJlRnVuY3Rpb25zQW55Ll9JbmZpbml0eSxcbiAgTE9HMkU6IF9wdXJlRnVuY3Rpb25zQW55LkxPRzJFLFxuICAnUEknOiBfcHVyZUZ1bmN0aW9uc0FueS5waSxcbiAgdmVyc2lvbjogX3B1cmVGdW5jdGlvbnNBbnkudmVyc2lvbixcbiAgJ0UnOiBfcHVyZUZ1bmN0aW9uc0FueS5lLFxuICBwaGk6IF9wdXJlRnVuY3Rpb25zQW55LnBoaSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkLFxuICBpc0ludGVnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmlzSW50ZWdlcixcbiAgaXNOdW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5pc051bWVyaWMsXG4gIGlzUG9zaXRpdmU6IF9wdXJlRnVuY3Rpb25zQW55LmlzUG9zaXRpdmUsXG4gIGlzTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05hTixcbiAgZXF1YWxTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsU2NhbGFyLFxuICBudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWJlcixcbiAgXCJib29sZWFuXCI6IF9wdXJlRnVuY3Rpb25zQW55W1wiYm9vbGVhblwiXSxcbiAgY29tcGxleDogX3B1cmVGdW5jdGlvbnNBbnkuY29tcGxleCxcbiAgc3BsaXRVbml0OiBfcHVyZUZ1bmN0aW9uc0FueS5zcGxpdFVuaXQsXG4gIHVuYXJ5UGx1czogX3B1cmVGdW5jdGlvbnNBbnkudW5hcnlQbHVzLFxuICBhcHBseTogX3B1cmVGdW5jdGlvbnNBbnkuYXBwbHksXG4gIGN1YmU6IF9wdXJlRnVuY3Rpb25zQW55LmN1YmUsXG4gIGV4cG0xOiBfcHVyZUZ1bmN0aW9uc0FueS5leHBtMSxcbiAgbG9nMTA6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzEwLFxuICBtdWx0aXBseVNjYWxhcjogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHlTY2FsYXIsXG4gIHNpZ246IF9wdXJlRnVuY3Rpb25zQW55LnNpZ24sXG4gIHNxdWFyZTogX3B1cmVGdW5jdGlvbnNBbnkuc3F1YXJlLFxuICBiaXROb3Q6IF9wdXJlRnVuY3Rpb25zQW55LmJpdE5vdCxcbiAgYXJnOiBfcHVyZUZ1bmN0aW9uc0FueS5hcmcsXG4gIGltOiBfcHVyZUZ1bmN0aW9uc0FueS5pbSxcbiAgbm90OiBfcHVyZUZ1bmN0aW9uc0FueS5ub3QsXG4gIGZpbHRlcjogX3B1cmVGdW5jdGlvbnNBbnkuZmlsdGVyLFxuICBmb3JFYWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5mb3JFYWNoLFxuICBtYXA6IF9wdXJlRnVuY3Rpb25zQW55Lm1hcCxcbiAgZXJmOiBfcHVyZUZ1bmN0aW9uc0FueS5lcmYsXG4gIGZvcm1hdDogX3B1cmVGdW5jdGlvbnNBbnkuZm9ybWF0LFxuICBpc1ByaW1lOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1ByaW1lLFxuICBhY29zOiBfcHVyZUZ1bmN0aW9uc0FueS5hY29zLFxuICBhY290OiBfcHVyZUZ1bmN0aW9uc0FueS5hY290LFxuICBhY3NjOiBfcHVyZUZ1bmN0aW9uc0FueS5hY3NjLFxuICBhc2VjOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2VjLFxuICBhc2luOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2luLFxuICBhdGFuOiBfcHVyZUZ1bmN0aW9uc0FueS5hdGFuLFxuICBhdGFuaDogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbmgsXG4gIGNvc2g6IF9wdXJlRnVuY3Rpb25zQW55LmNvc2gsXG4gIGNvdGg6IF9wdXJlRnVuY3Rpb25zQW55LmNvdGgsXG4gIGNzY2g6IF9wdXJlRnVuY3Rpb25zQW55LmNzY2gsXG4gIHNlY2g6IF9wdXJlRnVuY3Rpb25zQW55LnNlY2gsXG4gIHNpbmg6IF9wdXJlRnVuY3Rpb25zQW55LnNpbmgsXG4gIHRhbmg6IF9wdXJlRnVuY3Rpb25zQW55LnRhbmgsXG4gIGNoYWluOiBjaGFpbixcbiAgY29tYmluYXRpb25zOiBfcHVyZUZ1bmN0aW9uc0FueS5jb21iaW5hdGlvbnMsXG4gIHBpY2tSYW5kb206IF9wdXJlRnVuY3Rpb25zQW55LnBpY2tSYW5kb20sXG4gIHJhbmRvbUludDogX3B1cmVGdW5jdGlvbnNBbnkucmFuZG9tSW50LFxuICBMTjI6IF9wdXJlRnVuY3Rpb25zQW55LkxOMixcbiAgY2xvbmU6IF9wdXJlRnVuY3Rpb25zQW55LmNsb25lLFxuICBoYXNOdW1lcmljVmFsdWU6IF9wdXJlRnVuY3Rpb25zQW55Lmhhc051bWVyaWNWYWx1ZSxcbiAgdHlwZU9mOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlT2YsXG4gIHN0cmluZzogX3B1cmVGdW5jdGlvbnNBbnkuc3RyaW5nLFxuICBmcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuZnJhY3Rpb24sXG4gIHVuYXJ5TWludXM6IF9wdXJlRnVuY3Rpb25zQW55LnVuYXJ5TWludXMsXG4gIGFkZFNjYWxhcjogX3B1cmVGdW5jdGlvbnNBbnkuYWRkU2NhbGFyLFxuICBleHA6IF9wdXJlRnVuY3Rpb25zQW55LmV4cCxcbiAgbG9nMjogX3B1cmVGdW5jdGlvbnNBbnkubG9nMixcbiAgc3FydDogX3B1cmVGdW5jdGlvbnNBbnkuc3FydCxcbiAgY29uajogX3B1cmVGdW5jdGlvbnNBbnkuY29uaixcbiAgZ2V0TWF0cml4RGF0YVR5cGU6IF9wdXJlRnVuY3Rpb25zQW55LmdldE1hdHJpeERhdGFUeXBlLFxuICBtb2RlOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2RlLFxuICBwcmludDogX3B1cmVGdW5jdGlvbnNBbnkucHJpbnQsXG4gIGFjb3NoOiBfcHVyZUZ1bmN0aW9uc0FueS5hY29zaCxcbiAgYWNzY2g6IF9wdXJlRnVuY3Rpb25zQW55LmFjc2NoLFxuICBhc2luaDogX3B1cmVGdW5jdGlvbnNBbnkuYXNpbmgsXG4gIGNvczogX3B1cmVGdW5jdGlvbnNBbnkuY29zLFxuICBjc2M6IF9wdXJlRnVuY3Rpb25zQW55LmNzYyxcbiAgc2luOiBfcHVyZUZ1bmN0aW9uc0FueS5zaW4sXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IF9wdXJlRnVuY3Rpb25zQW55LmNvbWJpbmF0aW9uc1dpdGhSZXAsXG4gIHJhbmRvbTogX3B1cmVGdW5jdGlvbnNBbnkucmFuZG9tLFxuICBTUVJUMjogX3B1cmVGdW5jdGlvbnNBbnkuU1FSVDIsXG4gIGlzTmVnYXRpdmU6IF9wdXJlRnVuY3Rpb25zQW55LmlzTmVnYXRpdmUsXG4gIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICBjYnJ0OiBfcHVyZUZ1bmN0aW9uc0FueS5jYnJ0LFxuICBnY2Q6IF9wdXJlRnVuY3Rpb25zQW55LmdjZCxcbiAgbW9kOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2QsXG4gIG50aFJvb3Q6IF9wdXJlRnVuY3Rpb25zQW55Lm50aFJvb3QsXG4gIHhnY2Q6IF9wdXJlRnVuY3Rpb25zQW55LnhnY2QsXG4gIGJpdEFuZDogX3B1cmVGdW5jdGlvbnNBbnkuYml0QW5kLFxuICBiaXRYb3I6IF9wdXJlRnVuY3Rpb25zQW55LmJpdFhvcixcbiAgb3I6IF9wdXJlRnVuY3Rpb25zQW55Lm9yLFxuICBjb25jYXQ6IF9wdXJlRnVuY3Rpb25zQW55LmNvbmNhdCxcbiAgZGlhZzogX3B1cmVGdW5jdGlvbnNBbnkuZGlhZyxcbiAgaWRlbnRpdHk6IF9wdXJlRnVuY3Rpb25zQW55LmlkZW50aXR5LFxuICBvbmVzOiBfcHVyZUZ1bmN0aW9uc0FueS5vbmVzLFxuICByZXNoYXBlOiBfcHVyZUZ1bmN0aW9uc0FueS5yZXNoYXBlLFxuICBzaXplOiBfcHVyZUZ1bmN0aW9uc0FueS5zaXplLFxuICBzdWJzZXQ6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnNldCxcbiAgemVyb3M6IF9wdXJlRnVuY3Rpb25zQW55Lnplcm9zLFxuICB0bzogX3B1cmVGdW5jdGlvbnNBbnkudG8sXG4gIHJvdW5kOiBfcHVyZUZ1bmN0aW9uc0FueS5yb3VuZCxcbiAgbGVmdFNoaWZ0OiBfcHVyZUZ1bmN0aW9uc0FueS5sZWZ0U2hpZnQsXG4gIHJpZ2h0TG9nU2hpZnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJpZ2h0TG9nU2hpZnQsXG4gIGNvbXBhcmU6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBhcmUsXG4gIGNvbXBhcmVUZXh0OiBfcHVyZUZ1bmN0aW9uc0FueS5jb21wYXJlVGV4dCxcbiAgc21hbGxlcjogX3B1cmVGdW5jdGlvbnNBbnkuc21hbGxlcixcbiAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gIHVuZXF1YWw6IF9wdXJlRnVuY3Rpb25zQW55LnVuZXF1YWwsXG4gIG1heDogX3B1cmVGdW5jdGlvbnNBbnkubWF4LFxuICBzcGFyc2U6IF9wdXJlRnVuY3Rpb25zQW55LnNwYXJzZSxcbiAgYWNvdGg6IF9wdXJlRnVuY3Rpb25zQW55LmFjb3RoLFxuICBhdGFuMjogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbjIsXG4gIHNlYzogX3B1cmVGdW5jdGlvbnNBbnkuc2VjLFxuICBhZGQ6IF9wdXJlRnVuY3Rpb25zQW55LmFkZCxcbiAgdHJhY2U6IF9wdXJlRnVuY3Rpb25zQW55LnRyYWNlLFxuICBjb21wb3NpdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuY29tcG9zaXRpb24sXG4gIGlzWmVybzogX3B1cmVGdW5jdGlvbnNBbnkuaXNaZXJvLFxuICBhYnM6IF9wdXJlRnVuY3Rpb25zQW55LmFicyxcbiAgZmxvb3I6IF9wdXJlRnVuY3Rpb25zQW55LmZsb29yLFxuICBtdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHksXG4gIGRvdE11bHRpcGx5OiBfcHVyZUZ1bmN0aW9uc0FueS5kb3RNdWx0aXBseSxcbiAgcmU6IF9wdXJlRnVuY3Rpb25zQW55LnJlLFxuICBmbGF0dGVuOiBfcHVyZUZ1bmN0aW9uc0FueS5mbGF0dGVuLFxuICByZXNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnJlc2l6ZSxcbiAgc3F1ZWV6ZTogX3B1cmVGdW5jdGlvbnNBbnkuc3F1ZWV6ZSxcbiAgcHJvZDogX3B1cmVGdW5jdGlvbnNBbnkucHJvZCxcbiAgcG93OiBfcHVyZUZ1bmN0aW9uc0FueS5wb3csXG4gIGRvdFBvdzogX3B1cmVGdW5jdGlvbnNBbnkuZG90UG93LFxuICByaWdodEFyaXRoU2hpZnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJpZ2h0QXJpdGhTaGlmdCxcbiAgY29tcGFyZU5hdHVyYWw6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBhcmVOYXR1cmFsLFxuICBlcXVhbFRleHQ6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsVGV4dCxcbiAgbGFyZ2VyRXE6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlckVxLFxuICBwYXJ0aXRpb25TZWxlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnBhcnRpdGlvblNlbGVjdCxcbiAgbWluOiBfcHVyZUZ1bmN0aW9uc0FueS5taW4sXG4gIGFzZWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2VjaCxcbiAgdGFuOiBfcHVyZUZ1bmN0aW9uc0FueS50YW4sXG4gIHNldFNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnNldFNpemUsXG4gIG5vcm06IF9wdXJlRnVuY3Rpb25zQW55Lm5vcm0sXG4gIHF1YW50aWxlU2VxOiBfcHVyZUZ1bmN0aW9uc0FueS5xdWFudGlsZVNlcSxcbiAgZ2FtbWE6IF9wdXJlRnVuY3Rpb25zQW55LmdhbW1hLFxuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgbGNtOiBfcHVyZUZ1bmN0aW9uc0FueS5sY20sXG4gIGJpdE9yOiBfcHVyZUZ1bmN0aW9uc0FueS5iaXRPcixcbiAga3JvbjogX3B1cmVGdW5jdGlvbnNBbnkua3JvbixcbiAgdHJhbnNwb3NlOiBfcHVyZUZ1bmN0aW9uc0FueS50cmFuc3Bvc2UsXG4gIG51bWVyaWM6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWVyaWMsXG4gIGFuZDogX3B1cmVGdW5jdGlvbnNBbnkuYW5kLFxuICBzbWFsbGVyRXE6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXJFcSxcbiAgc29ydDogX3B1cmVGdW5jdGlvbnNBbnkuc29ydCxcbiAgY290OiBfcHVyZUZ1bmN0aW9uc0FueS5jb3QsXG4gIGRvdDogX3B1cmVGdW5jdGlvbnNBbnkuZG90LFxuICBzdW06IF9wdXJlRnVuY3Rpb25zQW55LnN1bSxcbiAgZmFjdG9yaWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5mYWN0b3JpYWwsXG4gIHBlcm11dGF0aW9uczogX3B1cmVGdW5jdGlvbnNBbnkucGVybXV0YXRpb25zLFxuICBjZWlsOiBfcHVyZUZ1bmN0aW9uc0FueS5jZWlsLFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIGNyb3NzOiBfcHVyZUZ1bmN0aW9uc0FueS5jcm9zcyxcbiAgY3RyYW5zcG9zZTogX3B1cmVGdW5jdGlvbnNBbnkuY3RyYW5zcG9zZSxcbiAgZXF1YWw6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsLFxuICBzZXRDYXJ0ZXNpYW46IF9wdXJlRnVuY3Rpb25zQW55LnNldENhcnRlc2lhbixcbiAgc2V0RGlzdGluY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnNldERpc3RpbmN0LFxuICBzZXRJc1N1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0SXNTdWJzZXQsXG4gIHNldFBvd2Vyc2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zZXRQb3dlcnNldCxcbiAgaW5kZXg6IF9wdXJlRnVuY3Rpb25zQW55LmluZGV4LFxuICBmaXg6IF9wdXJlRnVuY3Rpb25zQW55LmZpeCxcbiAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICBkaXZpZGVTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmRpdmlkZVNjYWxhcixcbiAgbnRoUm9vdHM6IF9wdXJlRnVuY3Rpb25zQW55Lm50aFJvb3RzLFxuICBsc29sdmU6IF9wdXJlRnVuY3Rpb25zQW55Lmxzb2x2ZSxcbiAgZGVlcEVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5kZWVwRXF1YWwsXG4gIHNldERpZmZlcmVuY2U6IF9wdXJlRnVuY3Rpb25zQW55LnNldERpZmZlcmVuY2UsXG4gIHNldE11bHRpcGxpY2l0eTogX3B1cmVGdW5jdGlvbnNBbnkuc2V0TXVsdGlwbGljaXR5LFxuICBoeXBvdDogX3B1cmVGdW5jdGlvbnNBbnkuaHlwb3QsXG4gIGx1cDogX3B1cmVGdW5jdGlvbnNBbnkubHVwLFxuICBzbHU6IF9wdXJlRnVuY3Rpb25zQW55LnNsdSxcbiAgZGV0OiBfcHVyZUZ1bmN0aW9uc0FueS5kZXQsXG4gIGRpc3RhbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXN0YW5jZSxcbiAgc3RpcmxpbmdTMjogX3B1cmVGdW5jdGlvbnNBbnkuc3RpcmxpbmdTMixcbiAgY2F0YWxhbjogX3B1cmVGdW5jdGlvbnNBbnkuY2F0YWxhbixcbiAgeG9yOiBfcHVyZUZ1bmN0aW9uc0FueS54b3IsXG4gIHJvdzogX3B1cmVGdW5jdGlvbnNBbnkucm93LFxuICBkb3REaXZpZGU6IF9wdXJlRnVuY3Rpb25zQW55LmRvdERpdmlkZSxcbiAgY3JlYXRlVW5pdDogX3B1cmVGdW5jdGlvbnNBbnkuY3JlYXRlVW5pdCxcbiAgc2V0U3ltRGlmZmVyZW5jZTogX3B1cmVGdW5jdGlvbnNBbnkuc2V0U3ltRGlmZmVyZW5jZSxcbiAgcXI6IF9wdXJlRnVuY3Rpb25zQW55LnFyLFxuICBpbnY6IF9wdXJlRnVuY3Rpb25zQW55LmludixcbiAgZXhwbTogX3B1cmVGdW5jdGlvbnNBbnkuZXhwbSxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIG1lYW46IF9wdXJlRnVuY3Rpb25zQW55Lm1lYW4sXG4gIHZhcmlhbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS52YXJpYW5jZSxcbiAgc3RkOiBfcHVyZUZ1bmN0aW9uc0FueS5zdGQsXG4gIG11bHRpbm9taWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5tdWx0aW5vbWlhbCxcbiAgYXRvbWljTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuYXRvbWljTWFzcyxcbiAgYm9ock1hZ25ldG9uOiBfcHVyZUZ1bmN0aW9uc0FueS5ib2hyTWFnbmV0b24sXG4gIGJvbHR6bWFubjogX3B1cmVGdW5jdGlvbnNBbnkuYm9sdHptYW5uLFxuICBjb25kdWN0YW5jZVF1YW50dW06IF9wdXJlRnVuY3Rpb25zQW55LmNvbmR1Y3RhbmNlUXVhbnR1bSxcbiAgZGV1dGVyb25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5kZXV0ZXJvbk1hc3MsXG4gIGVsZWN0cm9uTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuZWxlY3Ryb25NYXNzLFxuICBmYXJhZGF5OiBfcHVyZUZ1bmN0aW9uc0FueS5mYXJhZGF5LFxuICBmaXJzdFJhZGlhdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuZmlyc3RSYWRpYXRpb24sXG4gIGdyYXZpdGF0aW9uQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55LmdyYXZpdGF0aW9uQ29uc3RhbnQsXG4gIGhhcnRyZWVFbmVyZ3k6IF9wdXJlRnVuY3Rpb25zQW55LmhhcnRyZWVFbmVyZ3ksXG4gIGtsaXR6aW5nOiBfcHVyZUZ1bmN0aW9uc0FueS5rbGl0emluZyxcbiAgbWFnbmV0aWNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkubWFnbmV0aWNDb25zdGFudCxcbiAgbW9sYXJNYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhck1hc3MsXG4gIG1vbGFyUGxhbmNrQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1vbGFyUGxhbmNrQ29uc3RhbnQsXG4gIG5ldXRyb25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5uZXV0cm9uTWFzcyxcbiAgcGxhbmNrQ2hhcmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tDaGFyZ2UsXG4gIHBsYW5ja0xlbmd0aDogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrTGVuZ3RoLFxuICBwbGFuY2tUZW1wZXJhdHVyZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrVGVtcGVyYXR1cmUsXG4gIHByb3Rvbk1hc3M6IF9wdXJlRnVuY3Rpb25zQW55LnByb3Rvbk1hc3MsXG4gIHJlZHVjZWRQbGFuY2tDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkucmVkdWNlZFBsYW5ja0NvbnN0YW50LFxuICBzZWNvbmRSYWRpYXRpb246IF9wdXJlRnVuY3Rpb25zQW55LnNlY29uZFJhZGlhdGlvbixcbiAgc3RlZmFuQm9sdHptYW5uOiBfcHVyZUZ1bmN0aW9uc0FueS5zdGVmYW5Cb2x0em1hbm4sXG4gIHZhY3V1bUltcGVkYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFjdXVtSW1wZWRhbmNlLFxuICBjb2x1bW46IF9wdXJlRnVuY3Rpb25zQW55LmNvbHVtbixcbiAgdXNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS51c29sdmUsXG4gIHNldEludGVyc2VjdDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0SW50ZXJzZWN0LFxuICBsdXNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS5sdXNvbHZlLFxuICBlaWdzOiBfcHVyZUZ1bmN0aW9uc0FueS5laWdzLFxuICBpbnRlcnNlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LmludGVyc2VjdCxcbiAgJ3Zhcic6IF9wdXJlRnVuY3Rpb25zQW55LnZhcmlhbmNlLFxuICBiZWxsTnVtYmVyczogX3B1cmVGdW5jdGlvbnNBbnkuYmVsbE51bWJlcnMsXG4gIGF2b2dhZHJvOiBfcHVyZUZ1bmN0aW9uc0FueS5hdm9nYWRybyxcbiAgY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM6IF9wdXJlRnVuY3Rpb25zQW55LmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLFxuICBlbGVjdHJpY0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5lbGVjdHJpY0NvbnN0YW50LFxuICBmZXJtaUNvdXBsaW5nOiBfcHVyZUZ1bmN0aW9uc0FueS5mZXJtaUNvdXBsaW5nLFxuICBncmF2aXR5OiBfcHVyZUZ1bmN0aW9uc0FueS5ncmF2aXR5LFxuICBsb3NjaG1pZHQ6IF9wdXJlRnVuY3Rpb25zQW55Lmxvc2NobWlkdCxcbiAgbW9sYXJNYXNzQzEyOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhck1hc3NDMTIsXG4gIG51Y2xlYXJNYWduZXRvbjogX3B1cmVGdW5jdGlvbnNBbnkubnVjbGVhck1hZ25ldG9uLFxuICBwbGFuY2tNYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tNYXNzLFxuICBxdWFudHVtT2ZDaXJjdWxhdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkucXVhbnR1bU9mQ2lyY3VsYXRpb24sXG4gIHNwZWVkT2ZMaWdodDogX3B1cmVGdW5jdGlvbnNBbnkuc3BlZWRPZkxpZ2h0LFxuICB3aWVuRGlzcGxhY2VtZW50OiBfcHVyZUZ1bmN0aW9uc0FueS53aWVuRGlzcGxhY2VtZW50LFxuICBsb2c6IF9wdXJlRnVuY3Rpb25zQW55LmxvZyxcbiAgdW5pdDogX3B1cmVGdW5jdGlvbnNBbnkudW5pdCxcbiAgcGFyc2U6IHBhcnNlLFxuICBldmFsdWF0ZTogZXZhbHVhdGUsXG4gIHNxcnRtOiBfcHVyZUZ1bmN0aW9uc0FueS5zcXJ0bSxcbiAga2xkaXZlcmdlbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5rbGRpdmVyZ2VuY2UsXG4gIGJvaHJSYWRpdXM6IF9wdXJlRnVuY3Rpb25zQW55LmJvaHJSYWRpdXMsXG4gIGVsZW1lbnRhcnlDaGFyZ2U6IF9wdXJlRnVuY3Rpb25zQW55LmVsZW1lbnRhcnlDaGFyZ2UsXG4gIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IF9wdXJlRnVuY3Rpb25zQW55LmludmVyc2VDb25kdWN0YW5jZVF1YW50dW0sXG4gIG1vbGFyVm9sdW1lOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhclZvbHVtZSxcbiAgcGxhbmNrVGltZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrVGltZSxcbiAgdGhvbXNvbkNyb3NzU2VjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkudGhvbXNvbkNyb3NzU2VjdGlvbixcbiAgbG9nMXA6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzFwLFxuICBjb21waWxlOiBjb21waWxlLFxuICBwYXJzZXI6IHBhcnNlcixcbiAgbWVkaWFuOiBfcHVyZUZ1bmN0aW9uc0FueS5tZWRpYW4sXG4gIHNpbXBsaWZ5OiBzaW1wbGlmeSxcbiAgcmF0aW9uYWxpemU6IHJhdGlvbmFsaXplLFxuICBnYXNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkuZ2FzQ29uc3RhbnQsXG4gIHBsYW5ja0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tDb25zdGFudCxcbiAgc2V0VW5pb246IF9wdXJlRnVuY3Rpb25zQW55LnNldFVuaW9uLFxuICBoZWxwOiBoZWxwLFxuICBkZXJpdmF0aXZlOiBkZXJpdmF0aXZlLFxuICBtYWduZXRpY0ZsdXhRdWFudHVtOiBfcHVyZUZ1bmN0aW9uc0FueS5tYWduZXRpY0ZsdXhRdWFudHVtLFxuICAnZXZhbCc6IGV2YWx1YXRlLFxuICBjb3Vsb21iOiBfcHVyZUZ1bmN0aW9uc0FueS5jb3Vsb21iLFxuICBtYWQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1hZCxcbiAgcnlkYmVyZzogX3B1cmVGdW5jdGlvbnNBbnkucnlkYmVyZyxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuX2V4dGVuZHMobWF0aFdpdGhUcmFuc2Zvcm0sIG1hdGgsIHtcbiAgYXBwbHk6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFwcGx5VHJhbnNmb3JtKSh7XG4gICAgaXNJbnRlZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5pc0ludGVnZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBmaWx0ZXI6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlclRyYW5zZm9ybSkoe1xuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWFwOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXBUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGZvckVhY2g6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIG1heDogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4VHJhbnNmb3JtKSh7XG4gICAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBtaW46ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblRyYW5zZm9ybSkoe1xuICAgIHNtYWxsZXI6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBzdWJzZXQ6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFRyYW5zZm9ybSkoe1xuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgY29uY2F0OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXRUcmFuc2Zvcm0pKHtcbiAgICBpc0ludGVnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmlzSW50ZWdlcixcbiAgICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHJhbmdlOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZVRyYW5zZm9ybSkoe1xuICAgIGJpZ251bWJlcjogX3B1cmVGdW5jdGlvbnNBbnkuYmlnbnVtYmVyLFxuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgICBsYXJnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlcixcbiAgICBsYXJnZXJFcTogX3B1cmVGdW5jdGlvbnNBbnkubGFyZ2VyRXEsXG4gICAgc21hbGxlcjogX3B1cmVGdW5jdGlvbnNBbnkuc21hbGxlcixcbiAgICBzbWFsbGVyRXE6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXJFcSxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHN1bTogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtVHJhbnNmb3JtKSh7XG4gICAgYmlnbnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5iaWdudW1iZXIsXG4gICAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGluZGV4OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFRyYW5zZm9ybSkoe1xuICAgIEluZGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbmRleFxuICB9KSxcbiAgY29sdW1uOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb2x1bW5UcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgcm93OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSb3dUcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWVhbjogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhblRyYW5zZm9ybSkoe1xuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgdmFyaWFuY2U6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtKSh7XG4gICAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gICAgYXBwbHk6IF9wdXJlRnVuY3Rpb25zQW55LmFwcGx5LFxuICAgIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICAgIGlzTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05hTixcbiAgICBtdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHksXG4gICAgc3VidHJhY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnRyYWN0LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgc3RkOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRUcmFuc2Zvcm0pKHtcbiAgICBzcXJ0OiBfcHVyZUZ1bmN0aW9uc0FueS5zcXJ0LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZCxcbiAgICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2VcbiAgfSlcbn0pO1xuXG5fZXh0ZW5kcyhjbGFzc2VzLCB7XG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0LFxuICBDb21wbGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5Db21wbGV4LFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIE5vZGU6IE5vZGUsXG4gIEFycmF5Tm9kZTogQXJyYXlOb2RlLFxuICBCbG9ja05vZGU6IEJsb2NrTm9kZSxcbiAgQ29uc3RhbnROb2RlOiBDb25zdGFudE5vZGUsXG4gIE9iamVjdE5vZGU6IE9iamVjdE5vZGUsXG4gIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlLFxuICBSZWxhdGlvbmFsTm9kZTogUmVsYXRpb25hbE5vZGUsXG4gIENoYWluOiBDaGFpbixcbiAgQmlnTnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5CaWdOdW1iZXIsXG4gIE1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuTWF0cml4LFxuICBDb25kaXRpb25hbE5vZGU6IENvbmRpdGlvbmFsTm9kZSxcbiAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gIEZyYWN0aW9uOiBfcHVyZUZ1bmN0aW9uc0FueS5GcmFjdGlvbixcbiAgUmFuZ2VOb2RlOiBSYW5nZU5vZGUsXG4gIERlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5EZW5zZU1hdHJpeCxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgU3BhcnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5TcGFyc2VNYXRyaXgsXG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbW11dGFibGVEZW5zZU1hdHJpeCxcbiAgRmlib25hY2NpSGVhcDogX3B1cmVGdW5jdGlvbnNBbnkuRmlib25hY2NpSGVhcCxcbiAgQWNjZXNzb3JOb2RlOiBBY2Nlc3Nvck5vZGUsXG4gIEluZGV4Tm9kZTogSW5kZXhOb2RlLFxuICBTcGE6IF9wdXJlRnVuY3Rpb25zQW55LlNwYSxcbiAgQXNzaWdubWVudE5vZGU6IEFzc2lnbm1lbnROb2RlLFxuICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGUsXG4gIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICBQYXJzZXI6IFBhcnNlcixcbiAgSGVscDogSGVscFxufSk7XG5cbkNoYWluLmNyZWF0ZVByb3h5KG1hdGgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIF9leHBvcnROYW1lcyA9IHtcbiAgY29uZmlnOiB0cnVlLFxuICBJbmRleEVycm9yOiB0cnVlLFxuICBEaW1lbnNpb25FcnJvcjogdHJ1ZSxcbiAgQXJndW1lbnRzRXJyb3I6IHRydWUsXG4gIGNyZWF0ZTogdHJ1ZSxcbiAgZmFjdG9yeTogdHJ1ZVxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmZpZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uZmlnUmVhZG9ubHkuY29uZmlnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluZGV4RXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0luZGV4RXJyb3IuSW5kZXhFcnJvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEaW1lbnNpb25FcnJvclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJndW1lbnRzRXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3JlYXRlLmNyZWF0ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWN0b3J5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mYWN0b3J5LmZhY3Rvcnk7XG4gIH1cbn0pO1xuXG52YXIgX2NvbmZpZ1JlYWRvbmx5ID0gcmVxdWlyZShcIi4vY29uZmlnUmVhZG9ubHlcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG5PYmplY3Qua2V5cyhfcHVyZUZ1bmN0aW9uc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3B1cmVGdW5jdGlvbnNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfaW1wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vaW1wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuT2JqZWN0LmtleXMoX2ltcHVyZUZ1bmN0aW9uc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2ltcHVyZUZ1bmN0aW9uc0FueVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF90eXBlQ2hlY2tzID0gcmVxdWlyZShcIi4vdHlwZUNoZWNrc1wiKTtcblxuT2JqZWN0LmtleXMoX3R5cGVDaGVja3MpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF90eXBlQ2hlY2tzW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIF9Bcmd1bWVudHNFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9Bcmd1bWVudHNFcnJvclwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBbnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkuZ2VuZXJhdGVkXCIpO1xuXG5PYmplY3Qua2V5cyhfZGVwZW5kZW5jaWVzQW55KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIik7XG5cbk9iamVjdC5rZXlzKF9mYWN0b3JpZXNBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9mYWN0b3JpZXNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfY3JlYXRlID0gcmVxdWlyZShcIi4uL2NvcmUvY3JlYXRlXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9kZXByZWNhdGVkQW55ID0gcmVxdWlyZShcIi4vZGVwcmVjYXRlZEFueVwiKTtcblxuT2JqZWN0LmtleXMoX2RlcHJlY2F0ZWRBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9kZXByZWNhdGVkQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG5leHBvcnRzWyd2YXInXSA9IGV4cG9ydHMuZGVwcmVjYXRlZFZhcjtcbmV4cG9ydHNbJ3R5cGVvZiddID0gZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mO1xuZXhwb3J0c1snZXZhbCddID0gZXhwb3J0cy5kZXByZWNhdGVkRXZhbDtcbmV4cG9ydHNbJ2ltcG9ydCddID0gZXhwb3J0cy5kZXByZWNhdGVkSW1wb3J0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNicnQgPSBleHBvcnRzLm1hdHJpeCA9IGV4cG9ydHMuU3BhcnNlTWF0cml4ID0gZXhwb3J0cy5pc05lZ2F0aXZlID0gZXhwb3J0cy5TUVJUMiA9IGV4cG9ydHMucmFuZG9tID0gZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwID0gZXhwb3J0cy5zaW4gPSBleHBvcnRzLmNzYyA9IGV4cG9ydHMuY29zID0gZXhwb3J0cy5hc2luaCA9IGV4cG9ydHMuYWNzY2ggPSBleHBvcnRzLmFjb3NoID0gZXhwb3J0cy5wcmludCA9IGV4cG9ydHMubW9kZSA9IGV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGUgPSBleHBvcnRzLmNvbmogPSBleHBvcnRzLnNxcnQgPSBleHBvcnRzLmxvZzIgPSBleHBvcnRzLmV4cCA9IGV4cG9ydHMuYWRkU2NhbGFyID0gZXhwb3J0cy51bmFyeU1pbnVzID0gZXhwb3J0cy5mcmFjdGlvbiA9IGV4cG9ydHMuc3RyaW5nID0gZXhwb3J0cy50eXBlT2YgPSBleHBvcnRzLmhhc051bWVyaWNWYWx1ZSA9IGV4cG9ydHMuY2xvbmUgPSBleHBvcnRzLkxOMiA9IGV4cG9ydHMucmFuZG9tSW50ID0gZXhwb3J0cy5waWNrUmFuZG9tID0gZXhwb3J0cy5jb21iaW5hdGlvbnMgPSBleHBvcnRzLnRhbmggPSBleHBvcnRzLnNpbmggPSBleHBvcnRzLnNlY2ggPSBleHBvcnRzLmNzY2ggPSBleHBvcnRzLmNvdGggPSBleHBvcnRzLmNvc2ggPSBleHBvcnRzLmF0YW5oID0gZXhwb3J0cy5hdGFuID0gZXhwb3J0cy5hc2luID0gZXhwb3J0cy5hc2VjID0gZXhwb3J0cy5hY3NjID0gZXhwb3J0cy5hY290ID0gZXhwb3J0cy5hY29zID0gZXhwb3J0cy5pc1ByaW1lID0gZXhwb3J0cy5mb3JtYXQgPSBleHBvcnRzLmVyZiA9IGV4cG9ydHMubWFwID0gZXhwb3J0cy5mb3JFYWNoID0gZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuaW0gPSBleHBvcnRzLmFyZyA9IGV4cG9ydHMuYml0Tm90ID0gZXhwb3J0cy5zcXVhcmUgPSBleHBvcnRzLnNpZ24gPSBleHBvcnRzLm11bHRpcGx5U2NhbGFyID0gZXhwb3J0cy5sb2cxMCA9IGV4cG9ydHMuZXhwbTEgPSBleHBvcnRzLmN1YmUgPSBleHBvcnRzLmFwcGx5ID0gZXhwb3J0cy51bmFyeVBsdXMgPSBleHBvcnRzLnNwbGl0VW5pdCA9IGV4cG9ydHMuY29tcGxleCA9IGV4cG9ydHNbXCJib29sZWFuXCJdID0gZXhwb3J0cy5udW1iZXIgPSBleHBvcnRzLmVxdWFsU2NhbGFyID0gZXhwb3J0cy5pc05hTiA9IGV4cG9ydHMuaXNQb3NpdGl2ZSA9IGV4cG9ydHMuaXNOdW1lcmljID0gZXhwb3J0cy5pc0ludGVnZXIgPSBleHBvcnRzLnR5cGVkID0gZXhwb3J0cy5waGkgPSBleHBvcnRzLkRlbnNlTWF0cml4ID0gZXhwb3J0cy52ZXJzaW9uID0gZXhwb3J0cy5MT0cyRSA9IGV4cG9ydHMuX0luZmluaXR5ID0gZXhwb3J0cy5lID0gZXhwb3J0cy5GcmFjdGlvbiA9IGV4cG9ydHMud2Vha01peGluZ0FuZ2xlID0gZXhwb3J0cy5zYWNrdXJUZXRyb2RlID0gZXhwb3J0cy5maW5lU3RydWN0dXJlID0gZXhwb3J0cy5lZmltb3ZGYWN0b3IgPSBleHBvcnRzLnRhdSA9IGV4cG9ydHMuU1FSVDFfMiA9IGV4cG9ydHMucGkgPSBleHBvcnRzLl9OYU4gPSBleHBvcnRzLkxPRzEwRSA9IGV4cG9ydHMuTE4xMCA9IGV4cG9ydHMuaSA9IGV4cG9ydHMucmVwbGFjZXIgPSBleHBvcnRzLk1hdHJpeCA9IGV4cG9ydHMuQmlnTnVtYmVyID0gZXhwb3J0cy5fdHJ1ZSA9IGV4cG9ydHMuX251bGwgPSBleHBvcnRzLl9mYWxzZSA9IGV4cG9ydHMuZXllID0gZXhwb3J0cy5SYW5nZSA9IGV4cG9ydHMuQ29tcGxleCA9IGV4cG9ydHMuUmVzdWx0U2V0ID0gdm9pZCAwO1xuZXhwb3J0cy54b3IgPSBleHBvcnRzLmNhdGFsYW4gPSBleHBvcnRzLnN0aXJsaW5nUzIgPSBleHBvcnRzLmRpc3RhbmNlID0gZXhwb3J0cy5kZXQgPSBleHBvcnRzLnNsdSA9IGV4cG9ydHMubHVwID0gZXhwb3J0cy5oeXBvdCA9IGV4cG9ydHMuc2V0TXVsdGlwbGljaXR5ID0gZXhwb3J0cy5zZXREaWZmZXJlbmNlID0gZXhwb3J0cy5kZWVwRXF1YWwgPSBleHBvcnRzLmxzb2x2ZSA9IGV4cG9ydHMubnRoUm9vdHMgPSBleHBvcnRzLmRpdmlkZVNjYWxhciA9IGV4cG9ydHMucmFuZ2UgPSBleHBvcnRzLmZpeCA9IGV4cG9ydHMuaW5kZXggPSBleHBvcnRzLnNldFBvd2Vyc2V0ID0gZXhwb3J0cy5zZXRJc1N1YnNldCA9IGV4cG9ydHMuc2V0RGlzdGluY3QgPSBleHBvcnRzLnNldENhcnRlc2lhbiA9IGV4cG9ydHMuSW5kZXggPSBleHBvcnRzLmVxdWFsID0gZXhwb3J0cy5jdHJhbnNwb3NlID0gZXhwb3J0cy5jcm9zcyA9IGV4cG9ydHMuc3VidHJhY3QgPSBleHBvcnRzLmNlaWwgPSBleHBvcnRzLnBlcm11dGF0aW9ucyA9IGV4cG9ydHMuZmFjdG9yaWFsID0gZXhwb3J0cy5zdW0gPSBleHBvcnRzLmRvdCA9IGV4cG9ydHMuY290ID0gZXhwb3J0cy5zb3J0ID0gZXhwb3J0cy5zbWFsbGVyRXEgPSBleHBvcnRzLmFuZCA9IGV4cG9ydHMubnVtZXJpYyA9IGV4cG9ydHMudHJhbnNwb3NlID0gZXhwb3J0cy5rcm9uID0gZXhwb3J0cy5iaXRPciA9IGV4cG9ydHMubGNtID0gZXhwb3J0cy5iaWdudW1iZXIgPSBleHBvcnRzLmdhbW1hID0gZXhwb3J0cy5xdWFudGlsZVNlcSA9IGV4cG9ydHMubm9ybSA9IGV4cG9ydHMuc2V0U2l6ZSA9IGV4cG9ydHMudGFuID0gZXhwb3J0cy5hc2VjaCA9IGV4cG9ydHMuU3BhID0gZXhwb3J0cy5taW4gPSBleHBvcnRzLnBhcnRpdGlvblNlbGVjdCA9IGV4cG9ydHMubGFyZ2VyRXEgPSBleHBvcnRzLmVxdWFsVGV4dCA9IGV4cG9ydHMuY29tcGFyZU5hdHVyYWwgPSBleHBvcnRzLnJpZ2h0QXJpdGhTaGlmdCA9IGV4cG9ydHMuZG90UG93ID0gZXhwb3J0cy5wb3cgPSBleHBvcnRzLnByb2QgPSBleHBvcnRzLnNxdWVlemUgPSBleHBvcnRzLnJlc2l6ZSA9IGV4cG9ydHMuZmxhdHRlbiA9IGV4cG9ydHMucmUgPSBleHBvcnRzLmRvdE11bHRpcGx5ID0gZXhwb3J0cy5tdWx0aXBseSA9IGV4cG9ydHMuZmxvb3IgPSBleHBvcnRzLmFicyA9IGV4cG9ydHMuaXNaZXJvID0gZXhwb3J0cy5jb21wb3NpdGlvbiA9IGV4cG9ydHMudHJhY2UgPSBleHBvcnRzLmFkZCA9IGV4cG9ydHMuc2VjID0gZXhwb3J0cy5hdGFuMiA9IGV4cG9ydHMuYWNvdGggPSBleHBvcnRzLnNwYXJzZSA9IGV4cG9ydHMuRmlib25hY2NpSGVhcCA9IGV4cG9ydHMuSW1tdXRhYmxlRGVuc2VNYXRyaXggPSBleHBvcnRzLm1heCA9IGV4cG9ydHMudW5lcXVhbCA9IGV4cG9ydHMubGFyZ2VyID0gZXhwb3J0cy5zbWFsbGVyID0gZXhwb3J0cy5jb21wYXJlVGV4dCA9IGV4cG9ydHMuY29tcGFyZSA9IGV4cG9ydHMucmlnaHRMb2dTaGlmdCA9IGV4cG9ydHMubGVmdFNoaWZ0ID0gZXhwb3J0cy5yb3VuZCA9IGV4cG9ydHMudG8gPSBleHBvcnRzLnplcm9zID0gZXhwb3J0cy5zdWJzZXQgPSBleHBvcnRzLnNpemUgPSBleHBvcnRzLnJlc2hhcGUgPSBleHBvcnRzLm9uZXMgPSBleHBvcnRzLmlkZW50aXR5ID0gZXhwb3J0cy5kaWFnID0gZXhwb3J0cy5jb25jYXQgPSBleHBvcnRzLm9yID0gZXhwb3J0cy5iaXRYb3IgPSBleHBvcnRzLmJpdEFuZCA9IGV4cG9ydHMueGdjZCA9IGV4cG9ydHMubnRoUm9vdCA9IGV4cG9ydHMubW9kID0gZXhwb3J0cy5nY2QgPSB2b2lkIDA7XG5leHBvcnRzLnJ5ZGJlcmcgPSBleHBvcnRzLm1hZCA9IGV4cG9ydHMuY291bG9tYiA9IGV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bSA9IGV4cG9ydHMuc2V0VW5pb24gPSBleHBvcnRzLnBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5nYXNDb25zdGFudCA9IGV4cG9ydHMubWVkaWFuID0gZXhwb3J0cy5sb2cxcCA9IGV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbiA9IGV4cG9ydHMucGxhbmNrVGltZSA9IGV4cG9ydHMubW9sYXJWb2x1bWUgPSBleHBvcnRzLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSBleHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2UgPSBleHBvcnRzLmJvaHJSYWRpdXMgPSBleHBvcnRzLmtsZGl2ZXJnZW5jZSA9IGV4cG9ydHMuc3FydG0gPSBleHBvcnRzLnVuaXQgPSBleHBvcnRzLmxvZyA9IGV4cG9ydHMud2llbkRpc3BsYWNlbWVudCA9IGV4cG9ydHMuc3BlZWRPZkxpZ2h0ID0gZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbiA9IGV4cG9ydHMucGxhbmNrTWFzcyA9IGV4cG9ydHMubnVjbGVhck1hZ25ldG9uID0gZXhwb3J0cy5tb2xhck1hc3NDMTIgPSBleHBvcnRzLmxvc2NobWlkdCA9IGV4cG9ydHMuZ3Jhdml0eSA9IGV4cG9ydHMuZmVybWlDb3VwbGluZyA9IGV4cG9ydHMuZWxlY3RyaWNDb25zdGFudCA9IGV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSBleHBvcnRzLmF2b2dhZHJvID0gZXhwb3J0cy5iZWxsTnVtYmVycyA9IGV4cG9ydHMuaW50ZXJzZWN0ID0gZXhwb3J0cy5laWdzID0gZXhwb3J0cy5sdXNvbHZlID0gZXhwb3J0cy5zZXRJbnRlcnNlY3QgPSBleHBvcnRzLnVzb2x2ZSA9IGV4cG9ydHMuY29sdW1uID0gZXhwb3J0cy52YWN1dW1JbXBlZGFuY2UgPSBleHBvcnRzLnN0ZWZhbkJvbHR6bWFubiA9IGV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uID0gZXhwb3J0cy5yZWR1Y2VkUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLnByb3Rvbk1hc3MgPSBleHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlID0gZXhwb3J0cy5wbGFuY2tMZW5ndGggPSBleHBvcnRzLnBsYW5ja0NoYXJnZSA9IGV4cG9ydHMubmV1dHJvbk1hc3MgPSBleHBvcnRzLm1vbGFyUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLm1vbGFyTWFzcyA9IGV4cG9ydHMubWFnbmV0aWNDb25zdGFudCA9IGV4cG9ydHMua2xpdHppbmcgPSBleHBvcnRzLmhhcnRyZWVFbmVyZ3kgPSBleHBvcnRzLmdyYXZpdGF0aW9uQ29uc3RhbnQgPSBleHBvcnRzLmZpcnN0UmFkaWF0aW9uID0gZXhwb3J0cy5mYXJhZGF5ID0gZXhwb3J0cy5lbGVjdHJvbk1hc3MgPSBleHBvcnRzLmRldXRlcm9uTWFzcyA9IGV4cG9ydHMuY29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5ib2x0em1hbm4gPSBleHBvcnRzLmJvaHJNYWduZXRvbiA9IGV4cG9ydHMuYXRvbWljTWFzcyA9IGV4cG9ydHMubXVsdGlub21pYWwgPSBleHBvcnRzLnN0ZCA9IGV4cG9ydHMudmFyaWFuY2UgPSBleHBvcnRzLm1lYW4gPSBleHBvcnRzLmRpdmlkZSA9IGV4cG9ydHMuZXhwbSA9IGV4cG9ydHMuaW52ID0gZXhwb3J0cy5xciA9IGV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZSA9IGV4cG9ydHMuY3JlYXRlVW5pdCA9IGV4cG9ydHMuVW5pdCA9IGV4cG9ydHMuZG90RGl2aWRlID0gZXhwb3J0cy5yb3cgPSB2b2lkIDA7XG5cbnZhciBfY29uZmlnUmVhZG9ubHkgPSByZXF1aXJlKFwiLi9jb25maWdSZWFkb25seVwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vZmFjdG9yaWVzQW55XCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJlc3VsdFNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc3VsdFNldCkoe30pO1xuZXhwb3J0cy5SZXN1bHRTZXQgPSBSZXN1bHRTZXQ7XG52YXIgQ29tcGxleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBsZXhDbGFzcykoe30pO1xuZXhwb3J0cy5Db21wbGV4ID0gQ29tcGxleDtcbnZhciBSYW5nZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlQ2xhc3MpKHt9KTtcbmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTtcbnZhciBleWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFeWUpKHt9KTtcbmV4cG9ydHMuZXllID0gZXllO1xuXG52YXIgX2ZhbHNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFsc2UpKHt9KTtcblxuZXhwb3J0cy5fZmFsc2UgPSBfZmFsc2U7XG5cbnZhciBfbnVsbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bGwpKHt9KTtcblxuZXhwb3J0cy5fbnVsbCA9IF9udWxsO1xuXG52YXIgX3RydWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcnVlKSh7fSk7XG5cbmV4cG9ydHMuX3RydWUgPSBfdHJ1ZTtcbnZhciBCaWdOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaWdOdW1iZXJDbGFzcykoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XG52YXIgTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4Q2xhc3MpKHt9KTtcbmV4cG9ydHMuTWF0cml4ID0gTWF0cml4O1xudmFyIHJlcGxhY2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVwbGFjZXIpKHt9KTtcbmV4cG9ydHMucmVwbGFjZXIgPSByZXBsYWNlcjtcbnZhciBpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSSkoe1xuICBDb21wbGV4OiBDb21wbGV4XG59KTtcbmV4cG9ydHMuaSA9IGk7XG52YXIgTE4xMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxOMTApKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLkxOMTAgPSBMTjEwO1xudmFyIExPRzEwRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzEwRSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuTE9HMTBFID0gTE9HMTBFO1xuXG52YXIgX05hTiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5hTikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuZXhwb3J0cy5fTmFOID0gX05hTjtcbnZhciBwaSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5waSA9IHBpO1xudmFyIFNRUlQxXzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTUVJUMV8yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5TUVJUMV8yID0gU1FSVDFfMjtcbnZhciB0YXUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYXUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnRhdSA9IHRhdTtcbnZhciBlZmltb3ZGYWN0b3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFZmltb3ZGYWN0b3IpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVmaW1vdkZhY3RvciA9IGVmaW1vdkZhY3RvcjtcbnZhciBmaW5lU3RydWN0dXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmluZVN0cnVjdHVyZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZSA9IGZpbmVTdHJ1Y3R1cmU7XG52YXIgc2Fja3VyVGV0cm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNhY2t1clRldHJvZGUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnNhY2t1clRldHJvZGUgPSBzYWNrdXJUZXRyb2RlO1xudmFyIHdlYWtNaXhpbmdBbmdsZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVdlYWtNaXhpbmdBbmdsZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlID0gd2Vha01peGluZ0FuZ2xlO1xudmFyIEZyYWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRnJhY3Rpb25DbGFzcykoe30pO1xuZXhwb3J0cy5GcmFjdGlvbiA9IEZyYWN0aW9uO1xudmFyIGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5lID0gZTtcblxudmFyIF9JbmZpbml0eSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZmluaXR5KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuXG5leHBvcnRzLl9JbmZpbml0eSA9IF9JbmZpbml0eTtcbnZhciBMT0cyRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzJFKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MT0cyRSA9IExPRzJFO1xudmFyIHZlcnNpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWZXJzaW9uKSh7fSk7XG5leHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xudmFyIERlbnNlTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVuc2VNYXRyaXhDbGFzcykoe1xuICBNYXRyaXg6IE1hdHJpeFxufSk7XG5leHBvcnRzLkRlbnNlTWF0cml4ID0gRGVuc2VNYXRyaXg7XG52YXIgcGhpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGhpKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5waGkgPSBwaGk7XG52YXIgdHlwZWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUeXBlZCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBGcmFjdGlvbjogRnJhY3Rpb25cbn0pO1xuZXhwb3J0cy50eXBlZCA9IHR5cGVkO1xudmFyIGlzSW50ZWdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzSW50ZWdlcikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXIgPSBpc0ludGVnZXI7XG52YXIgaXNOdW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOdW1lcmljKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTnVtZXJpYyA9IGlzTnVtZXJpYztcbnZhciBpc1Bvc2l0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQb3NpdGl2ZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlID0gaXNQb3NpdGl2ZTtcbnZhciBpc05hTiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTmFOKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTmFOID0gaXNOYU47XG52YXIgZXF1YWxTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFNjYWxhcikoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsU2NhbGFyID0gZXF1YWxTY2FsYXI7XG52YXIgbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtYmVyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm51bWJlciA9IG51bWJlcjtcblxudmFyIF9ib29sZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9vbGVhbikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuXG5leHBvcnRzW1wiYm9vbGVhblwiXSA9IF9ib29sZWFuO1xudmFyIGNvbXBsZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wbGV4KSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbXBsZXggPSBjb21wbGV4O1xudmFyIHNwbGl0VW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwbGl0VW5pdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXQgPSBzcGxpdFVuaXQ7XG52YXIgdW5hcnlQbHVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlQbHVzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVuYXJ5UGx1cyA9IHVuYXJ5UGx1cztcbnZhciBhcHBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFwcGx5KSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hcHBseSA9IGFwcGx5O1xudmFyIGN1YmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDdWJlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmN1YmUgPSBjdWJlO1xudmFyIGV4cG0xID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbTEpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXhwbTEgPSBleHBtMTtcbnZhciBsb2cxMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzEwKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMTAgPSBsb2cxMDtcbnZhciBtdWx0aXBseVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5U2NhbGFyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm11bHRpcGx5U2NhbGFyID0gbXVsdGlwbHlTY2FsYXI7XG52YXIgc2lnbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpZ24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgY29tcGxleDogY29tcGxleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2lnbiA9IHNpZ247XG52YXIgc3F1YXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1YXJlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxdWFyZSA9IHNxdWFyZTtcbnZhciBiaXROb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaXROb3QpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0Tm90ID0gYml0Tm90O1xudmFyIGFyZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFyZykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hcmcgPSBhcmc7XG52YXIgaW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pbSA9IGltO1xudmFyIG5vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5ub3QgPSBub3Q7XG52YXIgZmlsdGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlsdGVyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbnZhciBmb3JFYWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mb3JFYWNoID0gZm9yRWFjaDtcbnZhciBtYXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXApKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWFwID0gbWFwO1xudmFyIGVyZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVyZikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5lcmYgPSBlcmY7XG52YXIgZm9ybWF0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9ybWF0KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbnZhciBpc1ByaW1lID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQcmltZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc1ByaW1lID0gaXNQcmltZTtcbnZhciBhY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvcykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3MgPSBhY29zO1xudmFyIGFjb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY290KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY290ID0gYWNvdDtcbnZhciBhY3NjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNzYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY3NjID0gYWNzYztcbnZhciBhc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hc2VjID0gYXNlYztcbnZhciBhc2luID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNpbikoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzaW4gPSBhc2luO1xudmFyIGF0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmF0YW4gPSBhdGFuO1xudmFyIGF0YW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbmgpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hdGFuaCA9IGF0YW5oO1xudmFyIGNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3NoKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvc2ggPSBjb3NoO1xudmFyIGNvdGggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3RoKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb3RoID0gY290aDtcbnZhciBjc2NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3NjaCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3NjaCA9IGNzY2g7XG52YXIgc2VjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNlY2ggPSBzZWNoO1xudmFyIHNpbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNpbmggPSBzaW5oO1xudmFyIHRhbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRhbmggPSB0YW5oO1xudmFyIGNvbWJpbmF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbWJpbmF0aW9ucykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnMgPSBjb21iaW5hdGlvbnM7XG52YXIgcGlja1JhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpY2tSYW5kb20pKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5waWNrUmFuZG9tID0gcGlja1JhbmRvbTtcbnZhciByYW5kb21JbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb21JbnQpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yYW5kb21JbnQgPSByYW5kb21JbnQ7XG52YXIgTE4yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MTjIgPSBMTjI7XG52YXIgY2xvbmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDbG9uZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jbG9uZSA9IGNsb25lO1xudmFyIGhhc051bWVyaWNWYWx1ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhc051bWVyaWNWYWx1ZSkoe1xuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlID0gaGFzTnVtZXJpY1ZhbHVlO1xudmFyIHR5cGVPZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVPZikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG52YXIgc3RyaW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RyaW5nKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN0cmluZyA9IHN0cmluZztcbnZhciBmcmFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZyYWN0aW9uKSh7XG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZnJhY3Rpb24gPSBmcmFjdGlvbjtcbnZhciB1bmFyeU1pbnVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlNaW51cykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzID0gdW5hcnlNaW51cztcbnZhciBhZGRTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBZGRTY2FsYXIpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWRkU2NhbGFyID0gYWRkU2NhbGFyO1xudmFyIGV4cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5leHAgPSBleHA7XG52YXIgbG9nMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzIpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sb2cyID0gbG9nMjtcbnZhciBzcXJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxcnQgPSBzcXJ0O1xudmFyIGNvbmogPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25qKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbmogPSBjb25qO1xudmFyIGdldE1hdHJpeERhdGFUeXBlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGUpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGUgPSBnZXRNYXRyaXhEYXRhVHlwZTtcbnZhciBtb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kZSkoe1xuICBpc05hTjogaXNOYU4sXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tb2RlID0gbW9kZTtcbnZhciBwcmludCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByaW50KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnByaW50ID0gcHJpbnQ7XG52YXIgYWNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY29zaCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3NoID0gYWNvc2g7XG52YXIgYWNzY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY3NjaCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNzY2ggPSBhY3NjaDtcbnZhciBhc2luaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzaW5oID0gYXNpbmg7XG52YXIgY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvcyA9IGNvcztcbnZhciBjc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDc2MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNzYyA9IGNzYztcbnZhciBzaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2luID0gc2luO1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXAgPSBjb21iaW5hdGlvbnNXaXRoUmVwO1xudmFyIHJhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmRvbSkoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJhbmRvbSA9IHJhbmRvbTtcbnZhciBTUVJUMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNRUlQyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5TUVJUMiA9IFNRUlQyO1xudmFyIGlzTmVnYXRpdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05lZ2F0aXZlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTmVnYXRpdmUgPSBpc05lZ2F0aXZlO1xudmFyIFNwYXJzZU1hdHJpeCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzKSh7XG4gIE1hdHJpeDogTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLlNwYXJzZU1hdHJpeCA9IFNwYXJzZU1hdHJpeDtcbnZhciBtYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXRyaXgpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBNYXRyaXg6IE1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hdHJpeCA9IG1hdHJpeDtcbnZhciBjYnJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2JydCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5jYnJ0ID0gY2JydDtcbnZhciBnY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVHY2QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZ2NkID0gZ2NkO1xudmFyIG1vZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vZCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1vZCA9IG1vZDtcbnZhciBudGhSb290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnRoUm9vdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubnRoUm9vdCA9IG50aFJvb3Q7XG52YXIgeGdjZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVhnY2QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnhnY2QgPSB4Z2NkO1xudmFyIGJpdEFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdEFuZCkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaXRBbmQgPSBiaXRBbmQ7XG52YXIgYml0WG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0WG9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmJpdFhvciA9IGJpdFhvcjtcbnZhciBvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMub3IgPSBvcjtcbnZhciBjb25jYXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXQpKHtcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb25jYXQgPSBjb25jYXQ7XG52YXIgZGlhZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpYWcpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpYWcgPSBkaWFnO1xudmFyIGlkZW50aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSWRlbnRpdHkpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG52YXIgb25lcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9uZXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm9uZXMgPSBvbmVzO1xudmFyIHJlc2hhcGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXNoYXBlKSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucmVzaGFwZSA9IHJlc2hhcGU7XG52YXIgc2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpemUpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2l6ZSA9IHNpemU7XG52YXIgc3Vic2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3Vic2V0KSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zdWJzZXQgPSBzdWJzZXQ7XG52YXIgemVyb3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVaZXJvcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuemVyb3MgPSB6ZXJvcztcbnZhciB0byA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVRvKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50byA9IHRvO1xudmFyIHJvdW5kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm91bmQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5yb3VuZCA9IHJvdW5kO1xudmFyIGxlZnRTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxlZnRTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMubGVmdFNoaWZ0ID0gbGVmdFNoaWZ0O1xudmFyIHJpZ2h0TG9nU2hpZnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodExvZ1NoaWZ0KSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0ID0gcmlnaHRMb2dTaGlmdDtcbnZhciBjb21wYXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBGcmFjdGlvbjogRnJhY3Rpb24sXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZSA9IGNvbXBhcmU7XG52YXIgY29tcGFyZVRleHQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wYXJlVGV4dCkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZVRleHQgPSBjb21wYXJlVGV4dDtcbnZhciBzbWFsbGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU21hbGxlcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNtYWxsZXIgPSBzbWFsbGVyO1xudmFyIGxhcmdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxhcmdlcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxhcmdlciA9IGxhcmdlcjtcbnZhciB1bmVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5lcXVhbCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudW5lcXVhbCA9IHVuZXF1YWw7XG52YXIgbWF4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4KSh7XG4gIGxhcmdlcjogbGFyZ2VyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tYXggPSBtYXg7XG52YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgc21hbGxlcjogc21hbGxlclxufSk7XG5leHBvcnRzLkltbXV0YWJsZURlbnNlTWF0cml4ID0gSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG52YXIgRmlib25hY2NpSGVhcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcykoe1xuICBsYXJnZXI6IGxhcmdlcixcbiAgc21hbGxlcjogc21hbGxlclxufSk7XG5leHBvcnRzLkZpYm9uYWNjaUhlYXAgPSBGaWJvbmFjY2lIZWFwO1xudmFyIHNwYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZSkoe1xuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3BhcnNlID0gc3BhcnNlO1xudmFyIGFjb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdGgpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNvdGggPSBhY290aDtcbnZhciBhdGFuMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW4yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmF0YW4yID0gYXRhbjI7XG52YXIgc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZWMgPSBzZWM7XG52YXIgYWRkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hZGQgPSBhZGQ7XG52YXIgdHJhY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFjZSkoe1xuICBhZGQ6IGFkZCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRyYWNlID0gdHJhY2U7XG52YXIgY29tcG9zaXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wb3NpdGlvbikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBpc1Bvc2l0aXZlOiBpc1Bvc2l0aXZlLFxuICBsYXJnZXI6IGxhcmdlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb24gPSBjb21wb3NpdGlvbjtcbnZhciBpc1plcm8gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1plcm8pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaXNaZXJvID0gaXNaZXJvO1xudmFyIGFicyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFicykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hYnMgPSBhYnM7XG52YXIgZmxvb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGbG9vcikoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHJvdW5kOiByb3VuZCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZmxvb3IgPSBmbG9vcjtcbnZhciBtdWx0aXBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5KSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm11bHRpcGx5ID0gbXVsdGlwbHk7XG52YXIgZG90TXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RNdWx0aXBseSkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5ID0gZG90TXVsdGlwbHk7XG52YXIgcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yZSA9IHJlO1xudmFyIGZsYXR0ZW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGbGF0dGVuKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mbGF0dGVuID0gZmxhdHRlbjtcbnZhciByZXNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXNpemUpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeFxufSk7XG5leHBvcnRzLnJlc2l6ZSA9IHJlc2l6ZTtcbnZhciBzcXVlZXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1ZWV6ZSkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3F1ZWV6ZSA9IHNxdWVlemU7XG52YXIgcHJvZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb2QpKHtcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wcm9kID0gcHJvZDtcbnZhciBwb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQb3cpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBmcmFjdGlvbjogZnJhY3Rpb24sXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgbnVtYmVyOiBudW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnBvdyA9IHBvdztcbnZhciBkb3RQb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RQb3cpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBwb3c6IHBvdyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZG90UG93ID0gZG90UG93O1xudmFyIHJpZ2h0QXJpdGhTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0ID0gcmlnaHRBcml0aFNoaWZ0O1xudmFyIGNvbXBhcmVOYXR1cmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZU5hdHVyYWwpKHtcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZU5hdHVyYWwgPSBjb21wYXJlTmF0dXJhbDtcbnZhciBlcXVhbFRleHQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFRleHQpKHtcbiAgY29tcGFyZVRleHQ6IGNvbXBhcmVUZXh0LFxuICBpc1plcm86IGlzWmVybyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0ID0gZXF1YWxUZXh0O1xudmFyIGxhcmdlckVxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyRXEpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sYXJnZXJFcSA9IGxhcmdlckVxO1xudmFyIHBhcnRpdGlvblNlbGVjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnRpdGlvblNlbGVjdCkoe1xuICBjb21wYXJlOiBjb21wYXJlLFxuICBpc05hTjogaXNOYU4sXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3QgPSBwYXJ0aXRpb25TZWxlY3Q7XG52YXIgbWluID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWluKSh7XG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1pbiA9IG1pbjtcbnZhciBTcGEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFDbGFzcykoe1xuICBGaWJvbmFjY2lIZWFwOiBGaWJvbmFjY2lIZWFwLFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG59KTtcbmV4cG9ydHMuU3BhID0gU3BhO1xudmFyIGFzZWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYXNlY2ggPSBhc2VjaDtcbnZhciB0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudGFuID0gdGFuO1xudmFyIHNldFNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRTaXplKSh7XG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0U2l6ZSA9IHNldFNpemU7XG52YXIgbm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vcm0pKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBjb25qOiBjb25qLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBwb3c6IHBvdyxcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc3FydDogc3FydCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubm9ybSA9IG5vcm07XG52YXIgcXVhbnRpbGVTZXEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVRdWFudGlsZVNlcSkoe1xuICBhZGQ6IGFkZCxcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBwYXJ0aXRpb25TZWxlY3Q6IHBhcnRpdGlvblNlbGVjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucXVhbnRpbGVTZXEgPSBxdWFudGlsZVNlcTtcbnZhciBnYW1tYSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhbW1hKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgcG93OiBwb3csXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmdhbW1hID0gZ2FtbWE7XG52YXIgYmlnbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnbnVtYmVyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXIgPSBiaWdudW1iZXI7XG52YXIgbGNtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTGNtKSh7XG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxjbSA9IGxjbTtcbnZhciBiaXRPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0T3IgPSBiaXRPcjtcbnZhciBrcm9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlS3Jvbikoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5rcm9uID0ga3JvbjtcbnZhciB0cmFuc3Bvc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFuc3Bvc2UpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRyYW5zcG9zZSA9IHRyYW5zcG9zZTtcbnZhciBudW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtZXJpYykoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICBudW1iZXI6IG51bWJlclxufSk7XG5leHBvcnRzLm51bWVyaWMgPSBudW1lcmljO1xudmFyIGFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFuZCkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBub3Q6IG5vdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5hbmQgPSBhbmQ7XG52YXIgc21hbGxlckVxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU21hbGxlckVxKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc21hbGxlckVxID0gc21hbGxlckVxO1xudmFyIHNvcnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTb3J0KSh7XG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNvcnQgPSBzb3J0O1xudmFyIGNvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY290ID0gY290O1xudmFyIGRvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdCkoe1xuICBhZGQ6IGFkZCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3QgPSBkb3Q7XG52YXIgc3VtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtKSh7XG4gIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICBmcmFjdGlvbjogZnJhY3Rpb24sXG4gIGFkZDogYWRkLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN1bSA9IHN1bTtcbnZhciBmYWN0b3JpYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWN0b3JpYWwpKHtcbiAgZ2FtbWE6IGdhbW1hLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mYWN0b3JpYWwgPSBmYWN0b3JpYWw7XG52YXIgcGVybXV0YXRpb25zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGVybXV0YXRpb25zKSh7XG4gIGZhY3RvcmlhbDogZmFjdG9yaWFsLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wZXJtdXRhdGlvbnMgPSBwZXJtdXRhdGlvbnM7XG52YXIgY2VpbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNlaWwpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICByb3VuZDogcm91bmQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNlaWwgPSBjZWlsO1xudmFyIHN1YnRyYWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VidHJhY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcbnZhciBjcm9zcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyb3NzKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3Jvc3MgPSBjcm9zcztcbnZhciBjdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3RyYW5zcG9zZSkoe1xuICBjb25qOiBjb25qLFxuICB0cmFuc3Bvc2U6IHRyYW5zcG9zZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZSA9IGN0cmFuc3Bvc2U7XG52YXIgZXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsID0gZXF1YWw7XG52YXIgSW5kZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleENsYXNzKSh7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBJbW11dGFibGVEZW5zZU1hdHJpeFxufSk7XG5leHBvcnRzLkluZGV4ID0gSW5kZXg7XG52YXIgc2V0Q2FydGVzaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0Q2FydGVzaWFuKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW4gPSBzZXRDYXJ0ZXNpYW47XG52YXIgc2V0RGlzdGluY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaXN0aW5jdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0RGlzdGluY3QgPSBzZXREaXN0aW5jdDtcbnZhciBzZXRJc1N1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldElzU3Vic2V0KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXQgPSBzZXRJc1N1YnNldDtcbnZhciBzZXRQb3dlcnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFBvd2Vyc2V0KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXQgPSBzZXRQb3dlcnNldDtcbnZhciBpbmRleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaW5kZXggPSBpbmRleDtcbnZhciBmaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaXgpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY2VpbDogY2VpbCxcbiAgZmxvb3I6IGZsb29yLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5maXggPSBmaXg7XG52YXIgcmFuZ2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZSkoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbGFyZ2VyOiBsYXJnZXIsXG4gIGxhcmdlckVxOiBsYXJnZXJFcSxcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc21hbGxlckVxOiBzbWFsbGVyRXEsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJhbmdlID0gcmFuZ2U7XG52YXIgZGl2aWRlU2NhbGFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGl2aWRlU2NhbGFyKSh7XG4gIG51bWVyaWM6IG51bWVyaWMsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpdmlkZVNjYWxhciA9IGRpdmlkZVNjYWxhcjtcbnZhciBudGhSb290cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3RzKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm50aFJvb3RzID0gbnRoUm9vdHM7XG52YXIgbHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHNvbHZlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sc29sdmUgPSBsc29sdmU7XG52YXIgZGVlcEVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVlcEVxdWFsKSh7XG4gIGVxdWFsOiBlcXVhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZGVlcEVxdWFsID0gZGVlcEVxdWFsO1xudmFyIHNldERpZmZlcmVuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaWZmZXJlbmNlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlID0gc2V0RGlmZmVyZW5jZTtcbnZhciBzZXRNdWx0aXBsaWNpdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRNdWx0aXBsaWNpdHkpKHtcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHkgPSBzZXRNdWx0aXBsaWNpdHk7XG52YXIgaHlwb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVIeXBvdCkoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBpc1Bvc2l0aXZlOiBpc1Bvc2l0aXZlLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmh5cG90ID0gaHlwb3Q7XG52YXIgbHVwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVwKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhOiBTcGEsXG4gIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4LFxuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZCxcbiAgdW5hcnlNaW51czogdW5hcnlNaW51c1xufSk7XG5leHBvcnRzLmx1cCA9IGx1cDtcbnZhciBzbHUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTbHUpKHtcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBsYXJnZXJFcTogbGFyZ2VyRXEsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0cmFuc3Bvc2U6IHRyYW5zcG9zZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2x1ID0gc2x1O1xudmFyIGRldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURldCkoe1xuICBsdXA6IGx1cCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5kZXQgPSBkZXQ7XG52YXIgZGlzdGFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEaXN0YW5jZSkoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbnZhciBzdGlybGluZ1MyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RpcmxpbmdTMikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBmYWN0b3JpYWw6IGZhY3RvcmlhbCxcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHBvdzogcG93LFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN0aXJsaW5nUzIgPSBzdGlybGluZ1MyO1xudmFyIGNhdGFsYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDYXRhbGFuKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBjb21iaW5hdGlvbnM6IGNvbWJpbmF0aW9ucyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNhdGFsYW4gPSBjYXRhbGFuO1xudmFyIHhvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVhvcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy54b3IgPSB4b3I7XG52YXIgcm93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm93KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHJhbmdlOiByYW5nZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucm93ID0gcm93O1xudmFyIGRvdERpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdERpdmlkZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGUgPSBkb3REaXZpZGU7XG52YXIgVW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRDbGFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsOiBlcXVhbCxcbiAgZml4OiBmaXgsXG4gIGZvcm1hdDogZm9ybWF0LFxuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBudW1iZXI6IG51bWJlcixcbiAgcG93OiBwb3csXG4gIHJvdW5kOiByb3VuZCxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0XG59KTtcbmV4cG9ydHMuVW5pdCA9IFVuaXQ7XG52YXIgY3JlYXRlVW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyZWF0ZVVuaXQpKHtcbiAgVW5pdDogVW5pdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdCA9IGNyZWF0ZVVuaXQ7XG52YXIgc2V0U3ltRGlmZmVyZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFN5bURpZmZlcmVuY2UpKHtcbiAgSW5kZXg6IEluZGV4LFxuICBjb25jYXQ6IGNvbmNhdCxcbiAgc2V0RGlmZmVyZW5jZTogc2V0RGlmZmVyZW5jZSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2UgPSBzZXRTeW1EaWZmZXJlbmNlO1xudmFyIHFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXIpKHtcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbXBsZXg6IGNvbXBsZXgsXG4gIGNvbmo6IGNvbmosXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbDogZXF1YWwsXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgaXNaZXJvOiBpc1plcm8sXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNpZ246IHNpZ24sXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5xciA9IHFyO1xudmFyIGludiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUludikoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRldDogZGV0LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5pbnYgPSBpbnY7XG52YXIgZXhwbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cG0pKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBpZGVudGl0eTogaWRlbnRpdHksXG4gIGludjogaW52LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmV4cG0gPSBleHBtO1xudmFyIGRpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZSkoe1xuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBpbnY6IGludixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZGl2aWRlID0gZGl2aWRlO1xudmFyIG1lYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWFuKSh7XG4gIGFkZDogYWRkLFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWVhbiA9IG1lYW47XG52YXIgdmFyaWFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWYXJpYW5jZSkoe1xuICBhZGQ6IGFkZCxcbiAgYXBwbHk6IGFwcGx5LFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgaXNOYU46IGlzTmFOLFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudmFyaWFuY2UgPSB2YXJpYW5jZTtcbnZhciBzdGQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGQpKHtcbiAgc3FydDogc3FydCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB2YXJpYW5jZTogdmFyaWFuY2Vcbn0pO1xuZXhwb3J0cy5zdGQgPSBzdGQ7XG52YXIgbXVsdGlub21pYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aW5vbWlhbCkoe1xuICBhZGQ6IGFkZCxcbiAgZGl2aWRlOiBkaXZpZGUsXG4gIGZhY3RvcmlhbDogZmFjdG9yaWFsLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNQb3NpdGl2ZTogaXNQb3NpdGl2ZSxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbCA9IG11bHRpbm9taWFsO1xudmFyIGF0b21pY01hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdG9taWNNYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5hdG9taWNNYXNzID0gYXRvbWljTWFzcztcbnZhciBib2hyTWFnbmV0b24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2hyTWFnbmV0b24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvaHJNYWduZXRvbiA9IGJvaHJNYWduZXRvbjtcbnZhciBib2x0em1hbm4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2x0em1hbm4pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvbHR6bWFubiA9IGJvbHR6bWFubjtcbnZhciBjb25kdWN0YW5jZVF1YW50dW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW0pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bSA9IGNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBkZXV0ZXJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXV0ZXJvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmRldXRlcm9uTWFzcyA9IGRldXRlcm9uTWFzcztcbnZhciBlbGVjdHJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZWN0cm9uTWFzcyA9IGVsZWN0cm9uTWFzcztcbnZhciBmYXJhZGF5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFyYWRheSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmFyYWRheSA9IGZhcmFkYXk7XG52YXIgZmlyc3RSYWRpYXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaXJzdFJhZGlhdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmlyc3RSYWRpYXRpb24gPSBmaXJzdFJhZGlhdGlvbjtcbnZhciBncmF2aXRhdGlvbkNvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZ3Jhdml0YXRpb25Db25zdGFudCA9IGdyYXZpdGF0aW9uQ29uc3RhbnQ7XG52YXIgaGFydHJlZUVuZXJneSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhcnRyZWVFbmVyZ3kpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3kgPSBoYXJ0cmVlRW5lcmd5O1xudmFyIGtsaXR6aW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xpdHppbmcpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmtsaXR6aW5nID0ga2xpdHppbmc7XG52YXIgbWFnbmV0aWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnQgPSBtYWduZXRpY0NvbnN0YW50O1xudmFyIG1vbGFyTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubW9sYXJNYXNzID0gbW9sYXJNYXNzO1xudmFyIG1vbGFyUGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhclBsYW5ja0NvbnN0YW50ID0gbW9sYXJQbGFuY2tDb25zdGFudDtcbnZhciBuZXV0cm9uTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5ldXRyb25NYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5uZXV0cm9uTWFzcyA9IG5ldXRyb25NYXNzO1xudmFyIHBsYW5ja0NoYXJnZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0NoYXJnZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrQ2hhcmdlID0gcGxhbmNrQ2hhcmdlO1xudmFyIHBsYW5ja0xlbmd0aCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0xlbmd0aCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrTGVuZ3RoID0gcGxhbmNrTGVuZ3RoO1xudmFyIHBsYW5ja1RlbXBlcmF0dXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlID0gcGxhbmNrVGVtcGVyYXR1cmU7XG52YXIgcHJvdG9uTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb3Rvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnByb3Rvbk1hc3MgPSBwcm90b25NYXNzO1xudmFyIHJlZHVjZWRQbGFuY2tDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gcmVkdWNlZFBsYW5ja0NvbnN0YW50O1xudmFyIHNlY29uZFJhZGlhdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY29uZFJhZGlhdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uID0gc2Vjb25kUmFkaWF0aW9uO1xudmFyIHN0ZWZhbkJvbHR6bWFubiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0ZWZhbkJvbHR6bWFubikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc3RlZmFuQm9sdHptYW5uID0gc3RlZmFuQm9sdHptYW5uO1xudmFyIHZhY3V1bUltcGVkYW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhY3V1bUltcGVkYW5jZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMudmFjdXVtSW1wZWRhbmNlID0gdmFjdXVtSW1wZWRhbmNlO1xudmFyIGNvbHVtbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbHVtbikoe1xuICBJbmRleDogSW5kZXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICByYW5nZTogcmFuZ2UsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbHVtbiA9IGNvbHVtbjtcbnZhciB1c29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVVc29sdmUpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVzb2x2ZSA9IHVzb2x2ZTtcbnZhciBzZXRJbnRlcnNlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJbnRlcnNlY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBJbmRleDogSW5kZXgsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldEludGVyc2VjdCA9IHNldEludGVyc2VjdDtcbnZhciBsdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVzb2x2ZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGxzb2x2ZTogbHNvbHZlLFxuICBsdXA6IGx1cCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHNsdTogc2x1LFxuICB0eXBlZDogdHlwZWQsXG4gIHVzb2x2ZTogdXNvbHZlXG59KTtcbmV4cG9ydHMubHVzb2x2ZSA9IGx1c29sdmU7XG52YXIgZWlncyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVpZ3MpKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgYXRhbjogYXRhbixcbiAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgY29zOiBjb3MsXG4gIGVxdWFsOiBlcXVhbCxcbiAgaW52OiBpbnYsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc2luOiBzaW4sXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZWlncyA9IGVpZ3M7XG52YXIgaW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSW50ZXJzZWN0KSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzbWFsbGVyOiBzbWFsbGVyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmludGVyc2VjdCA9IGludGVyc2VjdDtcbnZhciBiZWxsTnVtYmVycyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJlbGxOdW1iZXJzKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNOZWdhdGl2ZTogaXNOZWdhdGl2ZSxcbiAgc3RpcmxpbmdTMjogc3RpcmxpbmdTMixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnMgPSBiZWxsTnVtYmVycztcbnZhciBhdm9nYWRybyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF2b2dhZHJvKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5hdm9nYWRybyA9IGF2b2dhZHJvO1xudmFyIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM7XG52YXIgZWxlY3RyaWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZWN0cmljQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZWN0cmljQ29uc3RhbnQgPSBlbGVjdHJpY0NvbnN0YW50O1xudmFyIGZlcm1pQ291cGxpbmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGZXJtaUNvdXBsaW5nKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5mZXJtaUNvdXBsaW5nID0gZmVybWlDb3VwbGluZztcbnZhciBncmF2aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0eSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZ3Jhdml0eSA9IGdyYXZpdHk7XG52YXIgbG9zY2htaWR0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9zY2htaWR0KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5sb3NjaG1pZHQgPSBsb3NjaG1pZHQ7XG52YXIgbW9sYXJNYXNzQzEyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJNYXNzQzEyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NDMTIgPSBtb2xhck1hc3NDMTI7XG52YXIgbnVjbGVhck1hZ25ldG9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVjbGVhck1hZ25ldG9uKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b24gPSBudWNsZWFyTWFnbmV0b247XG52YXIgcGxhbmNrTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja01hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja01hc3MgPSBwbGFuY2tNYXNzO1xudmFyIHF1YW50dW1PZkNpcmN1bGF0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnF1YW50dW1PZkNpcmN1bGF0aW9uID0gcXVhbnR1bU9mQ2lyY3VsYXRpb247XG52YXIgc3BlZWRPZkxpZ2h0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BlZWRPZkxpZ2h0KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5zcGVlZE9mTGlnaHQgPSBzcGVlZE9mTGlnaHQ7XG52YXIgd2llbkRpc3BsYWNlbWVudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLndpZW5EaXNwbGFjZW1lbnQgPSB3aWVuRGlzcGxhY2VtZW50O1xudmFyIGxvZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG52YXIgdW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRGdW5jdGlvbikoe1xuICBVbml0OiBVbml0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bml0ID0gdW5pdDtcbnZhciBzcXJ0bSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxcnRtKSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBpbnY6IGludixcbiAgbWF4OiBtYXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3FydDogc3FydCxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcXJ0bSA9IHNxcnRtO1xudmFyIGtsZGl2ZXJnZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUtsZGl2ZXJnZW5jZSkoe1xuICBkaXZpZGU6IGRpdmlkZSxcbiAgZG90RGl2aWRlOiBkb3REaXZpZGUsXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICBsb2c6IGxvZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VtOiBzdW0sXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmtsZGl2ZXJnZW5jZSA9IGtsZGl2ZXJnZW5jZTtcbnZhciBib2hyUmFkaXVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9oclJhZGl1cykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuYm9oclJhZGl1cyA9IGJvaHJSYWRpdXM7XG52YXIgZWxlbWVudGFyeUNoYXJnZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2UpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2UgPSBlbGVtZW50YXJ5Q2hhcmdlO1xudmFyIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5pbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBtb2xhclZvbHVtZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyVm9sdW1lKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhclZvbHVtZSA9IG1vbGFyVm9sdW1lO1xudmFyIHBsYW5ja1RpbWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tUaW1lKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5wbGFuY2tUaW1lID0gcGxhbmNrVGltZTtcbnZhciB0aG9tc29uQ3Jvc3NTZWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbiA9IHRob21zb25Dcm9zc1NlY3Rpb247XG52YXIgbG9nMXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cxcCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBsb2c6IGxvZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMXAgPSBsb2cxcDtcbnZhciBtZWRpYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWRpYW4pKHtcbiAgYWRkOiBhZGQsXG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIGRpdmlkZTogZGl2aWRlLFxuICBwYXJ0aXRpb25TZWxlY3Q6IHBhcnRpdGlvblNlbGVjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWVkaWFuID0gbWVkaWFuO1xudmFyIGdhc0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2FzQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmdhc0NvbnN0YW50ID0gZ2FzQ29uc3RhbnQ7XG52YXIgcGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrQ29uc3RhbnQgPSBwbGFuY2tDb25zdGFudDtcbnZhciBzZXRVbmlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFVuaW9uKSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29uY2F0OiBjb25jYXQsXG4gIHNldEludGVyc2VjdDogc2V0SW50ZXJzZWN0LFxuICBzZXRTeW1EaWZmZXJlbmNlOiBzZXRTeW1EaWZmZXJlbmNlLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0VW5pb24gPSBzZXRVbmlvbjtcbnZhciBtYWduZXRpY0ZsdXhRdWFudHVtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bSA9IG1hZ25ldGljRmx1eFF1YW50dW07XG52YXIgY291bG9tYiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdWxvbWIpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNvdWxvbWIgPSBjb3Vsb21iO1xudmFyIG1hZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZCkoe1xuICBhYnM6IGFicyxcbiAgbWFwOiBtYXAsXG4gIG1lZGlhbjogbWVkaWFuLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hZCA9IG1hZDtcbnZhciByeWRiZXJnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUnlkYmVyZykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucnlkYmVyZyA9IHJ5ZGJlcmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FjY2Vzc29yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBY2Nlc3Nvck5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBcnJheVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBcnJheTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FycmF5Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBcnJheU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0JpZ051bWJlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNCaWdOdW1iZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCbG9ja05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQmxvY2tOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQm9vbGVhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNCb29sZWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ2hhaW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQ2hhaW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb2xsZWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbGxlY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb21wbGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbXBsZXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb25kaXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQ29uZGl0aW9uYWxOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ29uc3RhbnROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbnN0YW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRGF0ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RlbnNlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0RlbnNlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRnJhY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnJhY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNGdW5jdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNGdW5jdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Z1bmN0aW9uTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNGdW5jdGlvbk5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNIZWxwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0hlbHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbmRleFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNJbmRleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0luZGV4Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNJbmRleE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNNYXRyaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTnVsbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOdWxsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc051bWJlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1N0cmluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNTdHJpbmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNVbmRlZmluZWRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzVW5kZWZpbmVkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT2JqZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc09iamVjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzT2JqZWN0Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09wZXJhdG9yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNPcGVyYXRvck5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNQYXJlbnRoZXNpc05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUGFyZW50aGVzaXNOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmFuZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmFuZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNSYW5nZU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmFuZ2VOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVnRXhwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc1JlZ0V4cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1Jlc3VsdFNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNSZXN1bHRTZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNTcGFyc2VNYXRyaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzU3BhcnNlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU3ltYm9sTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNTeW1ib2xOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNVbml0O1xuICB9XG59KTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQXJndW1lbnRzRXJyb3IgPSBBcmd1bWVudHNFcnJvcjtcblxuLyoqXG4gKiBDcmVhdGUgYSBzeW50YXggZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiA8Zm4+ICg8Y291bnQ+IHByb3ZpZGVkLCA8bWluPi08bWF4PiBleHBlY3RlZCknXG4gKiBAcGFyYW0ge3N0cmluZ30gZm4gICAgIEZ1bmN0aW9uIG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAgQWN0dWFsIGFyZ3VtZW50IGNvdW50XG4gKiBAcGFyYW0ge251bWJlcn0gbWluICAgIE1pbmltdW0gcmVxdWlyZWQgYXJndW1lbnQgY291bnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAgTWF4aW11bSByZXF1aXJlZCBhcmd1bWVudCBjb3VudFxuICogQGV4dGVuZHMgRXJyb3JcbiAqL1xuZnVuY3Rpb24gQXJndW1lbnRzRXJyb3IoZm4sIGNvdW50LCBtaW4sIG1heCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJndW1lbnRzRXJyb3IpKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgfVxuXG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb3VudCA9IGNvdW50O1xuICB0aGlzLm1pbiA9IG1pbjtcbiAgdGhpcy5tYXggPSBtYXg7XG4gIHRoaXMubWVzc2FnZSA9ICdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGluIGZ1bmN0aW9uICcgKyBmbiArICcgKCcgKyBjb3VudCArICcgcHJvdmlkZWQsICcgKyBtaW4gKyAobWF4ICE9PSB1bmRlZmluZWQgJiYgbWF4ICE9PSBudWxsID8gJy0nICsgbWF4IDogJycpICsgJyBleHBlY3RlZCknO1xuICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG59XG5cbkFyZ3VtZW50c0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuQXJndW1lbnRzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3I7XG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUubmFtZSA9ICdBcmd1bWVudHNFcnJvcic7XG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUuaXNBcmd1bWVudHNFcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRpbWVuc2lvbkVycm9yID0gRGltZW5zaW9uRXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnRGltZW5zaW9uIG1pc21hdGNoICg8YWN0dWFsIHNpemU+ICE9IDxleHBlY3RlZCBzaXplPiknXG4gKiBAcGFyYW0ge251bWJlciB8IG51bWJlcltdfSBhY3R1YWwgICAgICAgIFRoZSBhY3R1YWwgc2l6ZVxuICogQHBhcmFtIHtudW1iZXIgfCBudW1iZXJbXX0gZXhwZWN0ZWQgICAgICBUaGUgZXhwZWN0ZWQgc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IFtyZWxhdGlvbj0nIT0nXSAgICAgICAgICBPcHRpb25hbCByZWxhdGlvbiBiZXR3ZWVuIGFjdHVhbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXhwZWN0ZWQgc2l6ZTogJyE9JywgJzwnLCBldGMuXG4gKiBAZXh0ZW5kcyBSYW5nZUVycm9yXG4gKi9cbmZ1bmN0aW9uIERpbWVuc2lvbkVycm9yKGFjdHVhbCwgZXhwZWN0ZWQsIHJlbGF0aW9uKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEaW1lbnNpb25FcnJvcikpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICB9XG5cbiAgdGhpcy5hY3R1YWwgPSBhY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgdGhpcy5yZWxhdGlvbiA9IHJlbGF0aW9uO1xuICB0aGlzLm1lc3NhZ2UgPSAnRGltZW5zaW9uIG1pc21hdGNoICgnICsgKEFycmF5LmlzQXJyYXkoYWN0dWFsKSA/ICdbJyArIGFjdHVhbC5qb2luKCcsICcpICsgJ10nIDogYWN0dWFsKSArICcgJyArICh0aGlzLnJlbGF0aW9uIHx8ICchPScpICsgJyAnICsgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpID8gJ1snICsgZXhwZWN0ZWQuam9pbignLCAnKSArICddJyA6IGV4cGVjdGVkKSArICcpJztcbiAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xufVxuXG5EaW1lbnNpb25FcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpO1xuRGltZW5zaW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZ2VFcnJvcjtcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0RpbWVuc2lvbkVycm9yJztcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5pc0RpbWVuc2lvbkVycm9yID0gdHJ1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhFcnJvciA9IEluZGV4RXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnSW5kZXggb3V0IG9mIHJhbmdlIChpbmRleCA8IG1pbiknXG4gKiAgICAgJ0luZGV4IG91dCBvZiByYW5nZSAoaW5kZXggPCBtYXgpJ1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAgICAgVGhlIGFjdHVhbCBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gICBNaW5pbXVtIGluZGV4IChpbmNsdWRlZClcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAgICAgTWF4aW11bSBpbmRleCAoZXhjbHVkZWQpXG4gKiBAZXh0ZW5kcyBSYW5nZUVycm9yXG4gKi9cbmZ1bmN0aW9uIEluZGV4RXJyb3IoaW5kZXgsIG1pbiwgbWF4KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmRleEVycm9yKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gIH1cblxuICB0aGlzLmluZGV4ID0gaW5kZXg7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhpcy5taW4gPSAwO1xuICAgIHRoaXMubWF4ID0gbWluO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWluID0gbWluO1xuICAgIHRoaXMubWF4ID0gbWF4O1xuICB9XG5cbiAgaWYgKHRoaXMubWluICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA8IHRoaXMubWluKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gJ0luZGV4IG91dCBvZiByYW5nZSAoJyArIHRoaXMuaW5kZXggKyAnIDwgJyArIHRoaXMubWluICsgJyknO1xuICB9IGVsc2UgaWYgKHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA+PSB0aGlzLm1heCkge1xuICAgIHRoaXMubWVzc2FnZSA9ICdJbmRleCBvdXQgb2YgcmFuZ2UgKCcgKyB0aGlzLmluZGV4ICsgJyA+ICcgKyAodGhpcy5tYXggLSAxKSArICcpJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSAnSW5kZXggb3V0IG9mIHJhbmdlICgnICsgdGhpcy5pbmRleCArICcpJztcbiAgfVxuXG4gIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbn1cblxuSW5kZXhFcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpO1xuSW5kZXhFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5nZUVycm9yO1xuSW5kZXhFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbmRleEVycm9yJztcbkluZGV4RXJyb3IucHJvdG90eXBlLmlzSW5kZXhFcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHBDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdIZWxwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3BhcnNlJ107XG52YXIgY3JlYXRlSGVscENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZTtcblxuICAvKipcbiAgICogRG9jdW1lbnRhdGlvbiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGRvYyAgT2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllczpcbiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBjYXRlZ29yeVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBkZXNjcmlwdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IHN5bnRheFxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IGV4YW1wbGVzXG4gICAqICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmdbXX0gc2VlYWxzb1xuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGZ1bmN0aW9uIEhlbHAoZG9jKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhlbHApKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmICghZG9jKSB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiZG9jXCIgbWlzc2luZycpO1xuICAgIHRoaXMuZG9jID0gZG9jO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnR5cGUgPSAnSGVscCc7XG4gIEhlbHAucHJvdG90eXBlLmlzSGVscCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgSGVscCBvYmplY3RcbiAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIGEgc3RyaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIEhlbHAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkb2MgPSB0aGlzLmRvYyB8fCB7fTtcbiAgICB2YXIgZGVzYyA9ICdcXG4nO1xuXG4gICAgaWYgKGRvYy5uYW1lKSB7XG4gICAgICBkZXNjICs9ICdOYW1lOiAnICsgZG9jLm5hbWUgKyAnXFxuXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLmNhdGVnb3J5KSB7XG4gICAgICBkZXNjICs9ICdDYXRlZ29yeTogJyArIGRvYy5jYXRlZ29yeSArICdcXG5cXG4nO1xuICAgIH1cblxuICAgIGlmIChkb2MuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgKz0gJ0Rlc2NyaXB0aW9uOlxcbiAgICAnICsgZG9jLmRlc2NyaXB0aW9uICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5zeW50YXgpIHtcbiAgICAgIGRlc2MgKz0gJ1N5bnRheDpcXG4gICAgJyArIGRvYy5zeW50YXguam9pbignXFxuICAgICcpICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5leGFtcGxlcykge1xuICAgICAgZGVzYyArPSAnRXhhbXBsZXM6XFxuJztcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5leGFtcGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXhwciA9IGRvYy5leGFtcGxlc1tpXTtcbiAgICAgICAgZGVzYyArPSAnICAgICcgKyBleHByICsgJ1xcbic7XG4gICAgICAgIHZhciByZXMgPSB2b2lkIDA7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBub3RlOiByZXMgY2FuIGJlIHVuZGVmaW5lZCB3aGVuIGBleHByYCBpcyBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgICByZXMgPSBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVzID0gZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCAmJiAhKDAsIF9pcy5pc0hlbHApKHJlcykpIHtcbiAgICAgICAgICBkZXNjICs9ICcgICAgICAgICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHJlcywge1xuICAgICAgICAgICAgcHJlY2lzaW9uOiAxNFxuICAgICAgICAgIH0pICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVzYyArPSAnXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLnNlZWFsc28gJiYgZG9jLnNlZWFsc28ubGVuZ3RoKSB7XG4gICAgICBkZXNjICs9ICdTZWUgYWxzbzogJyArIGRvYy5zZWVhbHNvLmpvaW4oJywgJykgKyAnXFxuJztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzYztcbiAgfTtcbiAgLyoqXG4gICAqIEV4cG9ydCB0aGUgaGVscCBvYmplY3QgdG8gSlNPTlxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JqID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuZG9jKTtcbiAgICBvYmoubWF0aGpzID0gJ0hlbHAnO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIEhlbHAgb2JqZWN0IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvblxuICAgKiBAcmV0dXJucyB7SGVscH0gUmV0dXJucyBhIG5ldyBIZWxwIG9iamVjdFxuICAgKi9cblxuXG4gIEhlbHAuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHZhciBkb2MgPSB7fTtcblxuICAgIGZvciAodmFyIHByb3AgaW4ganNvbikge1xuICAgICAgaWYgKHByb3AgIT09ICdtYXRoanMnKSB7XG4gICAgICAgIC8vIGlnbm9yZSBtYXRoanMgZmllbGRcbiAgICAgICAgZG9jW3Byb3BdID0ganNvbltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEhlbHAoZG9jKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEhlbHAgb2JqZWN0XG4gICAqL1xuXG5cbiAgSGVscC5wcm90b3R5cGUudmFsdWVPZiA9IEhlbHAucHJvdG90eXBlLnRvU3RyaW5nO1xuICByZXR1cm4gSGVscDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHBDbGFzcyA9IGNyZWF0ZUhlbHBDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2VyQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBuYW1lID0gJ1BhcnNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZSddO1xudmFyIGNyZWF0ZVBhcnNlckNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFBhcnNlclxuICAgKiBQYXJzZXIgY29udGFpbnMgbWV0aG9kcyB0byBldmFsdWF0ZSBvciBwYXJzZSBleHByZXNzaW9ucywgYW5kIGhhcyBhIG51bWJlclxuICAgKiBvZiBjb252ZW5pZW5jZSBtZXRob2RzIHRvIGdldCwgc2V0LCBhbmQgcmVtb3ZlIHZhcmlhYmxlcyBmcm9tIG1lbW9yeS4gUGFyc2VyXG4gICAqIGtlZXBzIGEgc2NvcGUgY29udGFpbmluZyB2YXJpYWJsZXMgaW4gbWVtb3J5LCB3aGljaCBpcyB1c2VkIGZvciBhbGxcbiAgICogZXZhbHVhdGlvbnMuXG4gICAqXG4gICAqIE1ldGhvZHM6XG4gICAqICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlci5ldmFsdWF0ZShleHByKSAgLy8gZXZhbHVhdGUgYW4gZXhwcmVzc2lvblxuICAgKiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlci5nZXQobmFtZSkgICAgICAgIC8vIHJldHJpZXZlIGEgdmFyaWFibGUgZnJvbSB0aGUgcGFyc2VyXG4gICAqICAgIGNvbnN0IHZhbHVlcyA9IHBhcnNlci5nZXRBbGwoKSAgICAgICAgLy8gcmV0cmlldmUgYWxsIGRlZmluZWQgdmFyaWFibGVzXG4gICAqICAgIHBhcnNlci5zZXQobmFtZSwgdmFsdWUpICAgICAgICAgICAgICAgLy8gc2V0IGEgdmFyaWFibGUgaW4gdGhlIHBhcnNlclxuICAgKiAgICBwYXJzZXIucmVtb3ZlKG5hbWUpICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIGEgdmFyaWFibGUgZnJvbSB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXJzIHNjb3BlXG4gICAqICAgIHBhcnNlci5jbGVhcigpICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHBhcnNlcnMgc2NvcGVcbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICogICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAqICAgIC8vIE5vdGU6IHRoZXJlIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHdoaWNoIGNhbiBiZSB1c2VkIGluc3RlYWQ6XG4gICAqICAgIC8vIGNvbnN0IHBhcnNlciA9IG5ldyBtYXRoLnBhcnNlcigpXG4gICAqXG4gICAqICAgIC8vIGV2YWx1YXRlIGV4cHJlc3Npb25zXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgICAgICAgIC8vIDVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCcyIGluY2ggaW4gY20nKSAgICAgICAgICAgLy8gNS4wOCBjbVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2Nvcyg0NSBkZWcpJykgICAgICAgICAgICAvLyAwLjcwNzEwNjc4MTE4NjU0NzZcbiAgICpcbiAgICogICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgneCA9IDcgLyAyJykgICAgICAgICAgICAgIC8vIDMuNVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggKyAzJykgICAgICAgICAgICAgICAgICAvLyA2LjVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgLy8gZih4LCB5KVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2YoMiwgMyknKSAgICAgICAgICAgICAgICAvLyA4XG4gICAqXG4gICAqICAgIC8vIGdldCBhbmQgc2V0IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgIGNvbnN0IHggPSBwYXJzZXIuZ2V0KCd4JykgICAgICAgICAgICAgICAgIC8vIDdcbiAgICogICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb25cbiAgICogICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAgLy8gOVxuICAgKiAgICBwYXJzZXIuc2V0KCdoJywgNTAwKVxuICAgKiAgICBjb25zdCBpID0gcGFyc2VyLmV2YWx1YXRlKCdoIC8gMicpICAgICAgICAvLyAyNTBcbiAgICogICAgcGFyc2VyLnNldCgnaGVsbG8nLCBmdW5jdGlvbiAobmFtZSkge1xuICAgKiAgICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnISdcbiAgICogICAgfSlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdoZWxsbyhcInVzZXJcIiknKSAgICAgICAgICAvLyBcImhlbGxvLCB1c2VyIVwiXG4gICAqXG4gICAqICAgIC8vIGNsZWFyIGRlZmluZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXNcbiAgICogICAgcGFyc2VyLmNsZWFyKClcbiAgICpcbiAgICovXG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFyc2VyKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLnNjb3BlID0ge307XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS50eXBlID0gJ1BhcnNlcic7XG4gIFBhcnNlci5wcm90b3R5cGUuaXNQYXJzZXIgPSB0cnVlO1xuICAvKipcbiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJuIHRoZSBwYXJzZWQgZnVuY3Rpb24gbm9kZS5cbiAgICogVGhlIG5vZGUgdHJlZSBjYW4gYmUgY29tcGlsZWQgdmlhIGBjb2RlID0gbm9kZS5jb21waWxlKG1hdGgpYCxcbiAgICogYW5kIHRoZSBjb21waWxlZCBjb2RlIGNhbiBiZSBleGVjdXRlZCBhcyBgY29kZS5ldmFsdWF0ZShbc2NvcGVdKWBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIucGFyc2UgaXMgZGVwcmVjYXRlZC4gVXNlIG1hdGgucGFyc2UgaW5zdGVhZC4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBjb21waWxlIGFuIGV4cHJlc3Npb24sIHJldHVybiB0aGUgY29tcGlsZWQgamF2YXNjcmlwdCBjb2RlLlxuICAgKiBUaGUgbm9kZSBjYW4gYmUgZXZhbHVhdGVkIHZpYSBjb2RlLmV2YWx1YXRlKFtzY29wZV0pXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHByXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogZnVuY3Rpb259fSBjb2RlXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIFBhcnNlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIuY29tcGlsZSBpcyBkZXByZWNhdGVkLiBVc2UgbWF0aC5jb21waWxlIGluc3RlYWQuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBQYXJzZSBhbmQgZXZhbHVhdGUgdGhlIGdpdmVuIGV4cHJlc3Npb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgICBBIHN0cmluZyBjb250YWluaW5nIGFuIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIFwiMiszXCJcbiAgICogQHJldHVybiB7Kn0gcmVzdWx0ICAgICBUaGUgcmVzdWx0LCBvciB1bmRlZmluZWQgd2hlbiB0aGUgZXhwcmVzc2lvbiB3YXMgZW1wdHlcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgcmV0dXJuIHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZSh0aGlzLnNjb3BlKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgZ2l2ZW4gZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwciAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gZXhwcmVzc2lvbiwgZm9yIGV4YW1wbGUgXCIyKzNcIlxuICAgKiBAcmV0dXJuIHsqfSByZXN1bHQgICAgIFRoZSByZXN1bHQsIG9yIHVuZGVmaW5lZCB3aGVuIHRoZSBleHByZXNzaW9uIHdhcyBlbXB0eVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5ldmFsID0gZnVuY3Rpb24gKGV4cHIpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBQYXJzZXIuZXZhbCBpcyByZW5hbWVkIHRvIFBhcnNlci5ldmFsdWF0ZS4gUGxlYXNlIHVzZSB0aGUgbmV3IG1ldGhvZCBuYW1lLicpO1xuICAgIHJldHVybiB0aGlzLmV2YWx1YXRlKGV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgdmFyaWFibGUgKGEgZnVuY3Rpb24gb3IgdmFyaWFibGUpIGJ5IG5hbWUgZnJvbSB0aGUgcGFyc2VycyBzY29wZS5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgd2hlbiBub3QgZm91bmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7KiB8IHVuZGVmaW5lZH0gdmFsdWVcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgcmV0dXJuIG5hbWUgaW4gdGhpcy5zY29wZSA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKHRoaXMuc2NvcGUsIG5hbWUpIDogdW5kZWZpbmVkO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgbWFwIHdpdGggYWxsIGRlZmluZWQgdmFyaWFibGVzXG4gICAqIEByZXR1cm4ge09iamVjdH0gdmFsdWVzXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5nZXRBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfb2JqZWN0LmV4dGVuZCkoe30sIHRoaXMuc2NvcGUpO1xuICB9O1xuICAvKipcbiAgICogU2V0IGEgc3ltYm9sIChhIGZ1bmN0aW9uIG9yIHZhcmlhYmxlKSBieSBuYW1lIGZyb20gdGhlIHBhcnNlcnMgc2NvcGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7KiB8IHVuZGVmaW5lZH0gdmFsdWVcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KSh0aGlzLnNjb3BlLCBuYW1lLCB2YWx1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmUgYSB2YXJpYWJsZSBmcm9tIHRoZSBwYXJzZXJzIHNjb3BlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGRlbGV0ZSB0aGlzLnNjb3BlW25hbWVdO1xuICB9O1xuICAvKipcbiAgICogQ2xlYXIgdGhlIHNjb3BlIHdpdGggdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9uYW1lIGluIHRoaXMuc2NvcGUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5zY29wZSwgX25hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNjb3BlW19uYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlckNsYXNzID0gY3JlYXRlUGFyc2VyQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkluZmluaXR5RG9jcyA9IHZvaWQgMDtcbnZhciBJbmZpbml0eURvY3MgPSB7XG4gIG5hbWU6ICdJbmZpbml0eScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0luZmluaXR5J10sXG4gIGRlc2NyaXB0aW9uOiAnSW5maW5pdHksIGEgbnVtYmVyIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciB0aGF0IGNhbiBiZSBoYW5kbGVkIGJ5IGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ0luZmluaXR5JywgJzEgLyAwJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5JbmZpbml0eURvY3MgPSBJbmZpbml0eURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMTBEb2NzID0gdm9pZCAwO1xudmFyIExOMTBEb2NzID0ge1xuICBuYW1lOiAnTE4xMCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0xOMTAnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiAxMCwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAyLjMwMicsXG4gIGV4YW1wbGVzOiBbJ0xOMTAnLCAnbG9nKDEwKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuTE4xMERvY3MgPSBMTjEwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTE4yRG9jcyA9IHZvaWQgMDtcbnZhciBMTjJEb2NzID0ge1xuICBuYW1lOiAnTE4yJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnTE4yJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjY5MycsXG4gIGV4YW1wbGVzOiBbJ0xOMicsICdsb2coMiknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxOMkRvY3MgPSBMTjJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cxMEVEb2NzID0gdm9pZCAwO1xudmFyIExPRzEwRURvY3MgPSB7XG4gIG5hbWU6ICdMT0cxMEUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMT0cxMEUnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBFLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDAuNDM0JyxcbiAgZXhhbXBsZXM6IFsnTE9HMTBFJywgJ2xvZyhlLCAxMCknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxPRzEwRURvY3MgPSBMT0cxMEVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cyRURvY3MgPSB2b2lkIDA7XG52YXIgTE9HMkVEb2NzID0ge1xuICBuYW1lOiAnTE9HMkUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMT0cyRSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgRSwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAxLjQ0MicsXG4gIGV4YW1wbGVzOiBbJ0xPRzJFJywgJ2xvZyhlLCAyKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuTE9HMkVEb2NzID0gTE9HMkVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5OYU5Eb2NzID0gdm9pZCAwO1xudmFyIE5hTkRvY3MgPSB7XG4gIG5hbWU6ICdOYU4nLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydOYU4nXSxcbiAgZGVzY3JpcHRpb246ICdOb3QgYSBudW1iZXInLFxuICBleGFtcGxlczogWydOYU4nLCAnMCAvIDAnXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLk5hTkRvY3MgPSBOYU5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TUVJUMTJEb2NzID0gdm9pZCAwO1xudmFyIFNRUlQxMkRvY3MgPSB7XG4gIG5hbWU6ICdTUVJUMV8yJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnU1FSVDFfMiddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIHNxdWFyZSByb290IG9mIDEvMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjcwNycsXG4gIGV4YW1wbGVzOiBbJ1NRUlQxXzInLCAnc3FydCgxLzIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5TUVJUMTJEb2NzID0gU1FSVDEyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDJEb2NzID0gdm9pZCAwO1xudmFyIFNRUlQyRG9jcyA9IHtcbiAgbmFtZTogJ1NRUlQyJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnU1FSVDInXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiAyLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDEuNDE0JyxcbiAgZXhhbXBsZXM6IFsnU1FSVDInLCAnc3FydCgyKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuU1FSVDJEb2NzID0gU1FSVDJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lRG9jcyA9IHZvaWQgMDtcbnZhciBlRG9jcyA9IHtcbiAgbmFtZTogJ2UnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydlJ10sXG4gIGRlc2NyaXB0aW9uOiAnRXVsZXJcXCdzIG51bWJlciwgdGhlIGJhc2Ugb2YgdGhlIG5hdHVyYWwgbG9nYXJpdGhtLiBBcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDIuNzE4MjgnLFxuICBleGFtcGxlczogWydlJywgJ2UgXiAyJywgJ2V4cCgyKScsICdsb2coZSknXSxcbiAgc2VlYWxzbzogWydleHAnXVxufTtcbmV4cG9ydHMuZURvY3MgPSBlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFsc2VEb2NzID0gdm9pZCAwO1xudmFyIGZhbHNlRG9jcyA9IHtcbiAgbmFtZTogJ2ZhbHNlJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnZmFsc2UnXSxcbiAgZGVzY3JpcHRpb246ICdCb29sZWFuIHZhbHVlIGZhbHNlJyxcbiAgZXhhbXBsZXM6IFsnZmFsc2UnXSxcbiAgc2VlYWxzbzogWyd0cnVlJ11cbn07XG5leHBvcnRzLmZhbHNlRG9jcyA9IGZhbHNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaURvY3MgPSB2b2lkIDA7XG52YXIgaURvY3MgPSB7XG4gIG5hbWU6ICdpJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnaSddLFxuICBkZXNjcmlwdGlvbjogJ0ltYWdpbmFyeSB1bml0LCBkZWZpbmVkIGFzIGkqaT0tMS4gQSBjb21wbGV4IG51bWJlciBpcyBkZXNjcmliZWQgYXMgYSArIGIqaSwgd2hlcmUgYSBpcyB0aGUgcmVhbCBwYXJ0LCBhbmQgYiBpcyB0aGUgaW1hZ2luYXJ5IHBhcnQuJyxcbiAgZXhhbXBsZXM6IFsnaScsICdpICogaScsICdzcXJ0KC0xKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaURvY3MgPSBpRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVsbERvY3MgPSB2b2lkIDA7XG52YXIgbnVsbERvY3MgPSB7XG4gIG5hbWU6ICdudWxsJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnbnVsbCddLFxuICBkZXNjcmlwdGlvbjogJ1ZhbHVlIG51bGwnLFxuICBleGFtcGxlczogWydudWxsJ10sXG4gIHNlZWFsc286IFsndHJ1ZScsICdmYWxzZSddXG59O1xuZXhwb3J0cy5udWxsRG9jcyA9IG51bGxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5waGlEb2NzID0gdm9pZCAwO1xudmFyIHBoaURvY3MgPSB7XG4gIG5hbWU6ICdwaGknLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydwaGknXSxcbiAgZGVzY3JpcHRpb246ICdQaGkgaXMgdGhlIGdvbGRlbiByYXRpby4gVHdvIHF1YW50aXRpZXMgYXJlIGluIHRoZSBnb2xkZW4gcmF0aW8gaWYgdGhlaXIgcmF0aW8gaXMgdGhlIHNhbWUgYXMgdGhlIHJhdGlvIG9mIHRoZWlyIHN1bSB0byB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcXVhbnRpdGllcy4gUGhpIGlzIGRlZmluZWQgYXMgYCgxICsgc3FydCg1KSkgLyAyYCBhbmQgaXMgYXBwcm94aW1hdGVseSAxLjYxODAzNC4uLicsXG4gIGV4YW1wbGVzOiBbJ3BoaSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMucGhpRG9jcyA9IHBoaURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpRG9jcyA9IHZvaWQgMDtcbnZhciBwaURvY3MgPSB7XG4gIG5hbWU6ICdwaScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3BpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIG51bWJlciBwaSBpcyBhIG1hdGhlbWF0aWNhbCBjb25zdGFudCB0aGF0IGlzIHRoZSByYXRpbyBvZiBhIGNpcmNsZVxcJ3MgY2lyY3VtZmVyZW5jZSB0byBpdHMgZGlhbWV0ZXIsIGFuZCBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDMuMTQxNTknLFxuICBleGFtcGxlczogWydwaScsICdzaW4ocGkvMiknXSxcbiAgc2VlYWxzbzogWyd0YXUnXVxufTtcbmV4cG9ydHMucGlEb2NzID0gcGlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YXVEb2NzID0gdm9pZCAwO1xudmFyIHRhdURvY3MgPSB7XG4gIG5hbWU6ICd0YXUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWyd0YXUnXSxcbiAgZGVzY3JpcHRpb246ICdUYXUgaXMgdGhlIHJhdGlvIGNvbnN0YW50IG9mIGEgY2lyY2xlXFwncyBjaXJjdW1mZXJlbmNlIHRvIHJhZGl1cywgZXF1YWwgdG8gMiAqIHBpLCBhcHByb3hpbWF0ZWx5IDYuMjgzMi4nLFxuICBleGFtcGxlczogWyd0YXUnLCAnMiAqIHBpJ10sXG4gIHNlZWFsc286IFsncGknXVxufTtcbmV4cG9ydHMudGF1RG9jcyA9IHRhdURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRydWVEb2NzID0gdm9pZCAwO1xudmFyIHRydWVEb2NzID0ge1xuICBuYW1lOiAndHJ1ZScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3RydWUnXSxcbiAgZGVzY3JpcHRpb246ICdCb29sZWFuIHZhbHVlIHRydWUnLFxuICBleGFtcGxlczogWyd0cnVlJ10sXG4gIHNlZWFsc286IFsnZmFsc2UnXVxufTtcbmV4cG9ydHMudHJ1ZURvY3MgPSB0cnVlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmVyc2lvbkRvY3MgPSB2b2lkIDA7XG52YXIgdmVyc2lvbkRvY3MgPSB7XG4gIG5hbWU6ICd2ZXJzaW9uJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsndmVyc2lvbiddLFxuICBkZXNjcmlwdGlvbjogJ0Egc3RyaW5nIHdpdGggdGhlIHZlcnNpb24gbnVtYmVyIG9mIG1hdGguanMnLFxuICBleGFtcGxlczogWyd2ZXJzaW9uJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy52ZXJzaW9uRG9jcyA9IHZlcnNpb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXJEb2NzID0gdm9pZCAwO1xudmFyIGJpZ251bWJlckRvY3MgPSB7XG4gIG5hbWU6ICdiaWdudW1iZXInLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydiaWdudW1iZXIoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBiaWcgbnVtYmVyIGZyb20gYSBudW1iZXIgb3Igc3RyaW5nLicsXG4gIGV4YW1wbGVzOiBbJzAuMSArIDAuMicsICdiaWdudW1iZXIoMC4xKSArIGJpZ251bWJlcigwLjIpJywgJ2JpZ251bWJlcihcIjcuMlwiKScsICdiaWdudW1iZXIoXCI3LjJlNTAwXCIpJywgJ2JpZ251bWJlcihbMC4xLCAwLjIsIDAuM10pJ10sXG4gIHNlZWFsc286IFsnYm9vbGVhbicsICdjb21wbGV4JywgJ2ZyYWN0aW9uJywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5iaWdudW1iZXJEb2NzID0gYmlnbnVtYmVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9vbGVhbkRvY3MgPSB2b2lkIDA7XG52YXIgYm9vbGVhbkRvY3MgPSB7XG4gIG5hbWU6ICdib29sZWFuJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsneCcsICdib29sZWFuKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29udmVydCBhIHN0cmluZyBvciBudW1iZXIgaW50byBhIGJvb2xlYW4uJyxcbiAgZXhhbXBsZXM6IFsnYm9vbGVhbigwKScsICdib29sZWFuKDEpJywgJ2Jvb2xlYW4oMyknLCAnYm9vbGVhbihcInRydWVcIiknLCAnYm9vbGVhbihcImZhbHNlXCIpJywgJ2Jvb2xlYW4oWzEsIDAsIDEsIDFdKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuYm9vbGVhbkRvY3MgPSBib29sZWFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGxleERvY3MgPSB2b2lkIDA7XG52YXIgY29tcGxleERvY3MgPSB7XG4gIG5hbWU6ICdjb21wbGV4JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnY29tcGxleCgpJywgJ2NvbXBsZXgocmUsIGltKScsICdjb21wbGV4KHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBjb21wbGV4IG51bWJlci4nLFxuICBleGFtcGxlczogWydjb21wbGV4KCknLCAnY29tcGxleCgyLCAzKScsICdjb21wbGV4KFwiNyAtIDJpXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5jb21wbGV4RG9jcyA9IGNvbXBsZXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RG9jcyA9IHZvaWQgMDtcbnZhciBjcmVhdGVVbml0RG9jcyA9IHtcbiAgbmFtZTogJ2NyZWF0ZVVuaXQnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydjcmVhdGVVbml0KGRlZmluaXRpb25zKScsICdjcmVhdGVVbml0KG5hbWUsIGRlZmluaXRpb24pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS4nLFxuICBleGFtcGxlczogWydjcmVhdGVVbml0KFwiZm9vXCIpJywgJ2NyZWF0ZVVuaXQoXCJrbm90XCIsIHtkZWZpbml0aW9uOiBcIjAuNTE0NDQ0NDQ0IG0vc1wiLCBhbGlhc2VzOiBbXCJrbm90c1wiLCBcImt0XCIsIFwia3RzXCJdfSknLCAnY3JlYXRlVW5pdChcIm1waFwiLCBcIjEgbWlsZS9ob3VyXCIpJ10sXG4gIHNlZWFsc286IFsndW5pdCcsICdzcGxpdFVuaXQnXVxufTtcbmV4cG9ydHMuY3JlYXRlVW5pdERvY3MgPSBjcmVhdGVVbml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZnJhY3Rpb25Eb2NzID0gdm9pZCAwO1xudmFyIGZyYWN0aW9uRG9jcyA9IHtcbiAgbmFtZTogJ2ZyYWN0aW9uJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnZnJhY3Rpb24obnVtKScsICdmcmFjdGlvbihudW0sZGVuKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGZyYWN0aW9uIGZyb20gYSBudW1iZXIgb3IgZnJvbSBhIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuJyxcbiAgZXhhbXBsZXM6IFsnZnJhY3Rpb24oMC4xMjUpJywgJ2ZyYWN0aW9uKDEsIDMpICsgZnJhY3Rpb24oMiwgNSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5mcmFjdGlvbkRvY3MgPSBmcmFjdGlvbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmluZGV4RG9jcyA9IHZvaWQgMDtcbnZhciBpbmRleERvY3MgPSB7XG4gIG5hbWU6ICdpbmRleCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ1tzdGFydF0nLCAnW3N0YXJ0OmVuZF0nLCAnW3N0YXJ0OnN0ZXA6ZW5kXScsICdbc3RhcnQxLCBzdGFydCAyLCAuLi5dJywgJ1tzdGFydDE6ZW5kMSwgc3RhcnQyOmVuZDIsIC4uLl0nLCAnW3N0YXJ0MTpzdGVwMTplbmQxLCBzdGFydDI6c3RlcDI6ZW5kMiwgLi4uXSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhbiBpbmRleCB0byBnZXQgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdBID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ0FbMSwgOl0nLCAnQVsxLCAyXSA9IDUwJywgJ0FbMDoyLCAwOjJdID0gb25lcygyLCAyKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnbWF0cml4LCcsICdudW1iZXInLCAncmFuZ2UnLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuaW5kZXhEb2NzID0gaW5kZXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXRyaXhEb2NzID0gdm9pZCAwO1xudmFyIG1hdHJpeERvY3MgPSB7XG4gIG5hbWU6ICdtYXRyaXgnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydbXScsICdbYTEsIGIxLCAuLi47IGEyLCBiMiwgLi4uXScsICdtYXRyaXgoKScsICdtYXRyaXgoXCJkZW5zZVwiKScsICdtYXRyaXgoWy4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdbMSwgMiwgMzsgNCwgNSwgNl0nLCAnbWF0cml4KCknLCAnbWF0cml4KFszLCA0XSknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgXCJzcGFyc2VcIiknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgXCJzcGFyc2VcIiwgXCJudW1iZXJcIiknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMubWF0cml4RG9jcyA9IG1hdHJpeERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWJlckRvY3MgPSB2b2lkIDA7XG52YXIgbnVtYmVyRG9jcyA9IHtcbiAgbmFtZTogJ251bWJlcicsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ3gnLCAnbnVtYmVyKHgpJywgJ251bWJlcih1bml0LCB2YWx1ZWxlc3NVbml0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG51bWJlciBvciBjb252ZXJ0IGEgc3RyaW5nIG9yIGJvb2xlYW4gaW50byBhIG51bWJlci4nLFxuICBleGFtcGxlczogWycyJywgJzJlMycsICc0LjA1JywgJ251bWJlcigyKScsICdudW1iZXIoXCI3LjJcIiknLCAnbnVtYmVyKHRydWUpJywgJ251bWJlcihbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWVdKScsICdudW1iZXIodW5pdChcIjUyY21cIiksIFwibVwiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnZnJhY3Rpb24nLCAnaW5kZXgnLCAnbWF0cml4JywgJ3N0cmluZycsICd1bml0J11cbn07XG5leHBvcnRzLm51bWJlckRvY3MgPSBudW1iZXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGFyc2VEb2NzID0gdm9pZCAwO1xudmFyIHNwYXJzZURvY3MgPSB7XG4gIG5hbWU6ICdzcGFyc2UnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydzcGFyc2UoKScsICdzcGFyc2UoW2ExLCBiMSwgLi4uOyBhMSwgYjIsIC4uLl0pJywgJ3NwYXJzZShbYTEsIGIxLCAuLi47IGExLCBiMiwgLi4uXSwgXCJudW1iZXJcIiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBzcGFyc2UgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ3NwYXJzZSgpJywgJ3NwYXJzZShbMywgNDsgNSwgNl0pJywgJ3NwYXJzZShbMywgMDsgNSwgMF0sIFwibnVtYmVyXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnLCAnbWF0cml4J11cbn07XG5leHBvcnRzLnNwYXJzZURvY3MgPSBzcGFyc2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXREb2NzID0gdm9pZCAwO1xudmFyIHNwbGl0VW5pdERvY3MgPSB7XG4gIG5hbWU6ICdzcGxpdFVuaXQnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydzcGxpdFVuaXQodW5pdDogVW5pdCwgcGFydHM6IFVuaXRbXSknXSxcbiAgZGVzY3JpcHRpb246ICdTcGxpdCBhIHVuaXQgaW4gYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCB1bml0LicsXG4gIGV4YW1wbGVzOiBbJ3NwbGl0VW5pdCgxIG0sIFtcImZlZXRcIiwgXCJpbmNoXCJdKSddLFxuICBzZWVhbHNvOiBbJ3VuaXQnLCAnY3JlYXRlVW5pdCddXG59O1xuZXhwb3J0cy5zcGxpdFVuaXREb2NzID0gc3BsaXRVbml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RyaW5nRG9jcyA9IHZvaWQgMDtcbnZhciBzdHJpbmdEb2NzID0ge1xuICBuYW1lOiAnc3RyaW5nJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnXCJ0ZXh0XCInLCAnc3RyaW5nKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgc3RyaW5nIG9yIGNvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZycsXG4gIGV4YW1wbGVzOiBbJ1wiSGVsbG8gV29ybGQhXCInLCAnc3RyaW5nKDQuMiknLCAnc3RyaW5nKDMgKyAyaSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAndW5pdCddXG59O1xuZXhwb3J0cy5zdHJpbmdEb2NzID0gc3RyaW5nRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5pdERvY3MgPSB2b2lkIDA7XG52YXIgdW5pdERvY3MgPSB7XG4gIG5hbWU6ICd1bml0JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsndmFsdWUgdW5pdCcsICd1bml0KHZhbHVlLCB1bml0KScsICd1bml0KHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSB1bml0LicsXG4gIGV4YW1wbGVzOiBbJzUuNSBtbScsICczIGluY2gnLCAndW5pdCg3LjEsIFwia2lsb2dyYW1cIiknLCAndW5pdChcIjIzIGRlZ1wiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnXVxufTtcbmV4cG9ydHMudW5pdERvY3MgPSB1bml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnRG9jcyA9IHZvaWQgMDtcbnZhciBjb25maWdEb2NzID0ge1xuICBuYW1lOiAnY29uZmlnJyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ2NvbmZpZygpJywgJ2NvbmZpZyhvcHRpb25zKSddLFxuICBkZXNjcmlwdGlvbjogJ0dldCBjb25maWd1cmF0aW9uIG9yIGNoYW5nZSBjb25maWd1cmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2NvbmZpZygpJywgJzEvMyArIDEvNCcsICdjb25maWcoe251bWJlcjogXCJGcmFjdGlvblwifSknLCAnMS8zICsgMS80J10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5jb25maWdEb2NzID0gY29uZmlnRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1wb3J0RG9jcyA9IHZvaWQgMDtcbnZhciBpbXBvcnREb2NzID0ge1xuICBuYW1lOiAnaW1wb3J0JyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ2ltcG9ydChmdW5jdGlvbnMpJywgJ2ltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnSW1wb3J0IGZ1bmN0aW9ucyBvciBjb25zdGFudHMgZnJvbSBhbiBvYmplY3QuJyxcbiAgZXhhbXBsZXM6IFsnaW1wb3J0KHtteUZuOiBmKHgpPXheMiwgbXlDb25zdGFudDogMzIgfSknLCAnbXlGbigyKScsICdteUNvbnN0YW50J10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5pbXBvcnREb2NzID0gaW1wb3J0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZWREb2NzID0gdm9pZCAwO1xudmFyIHR5cGVkRG9jcyA9IHtcbiAgbmFtZTogJ3R5cGVkJyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ3R5cGVkKHNpZ25hdHVyZXMpJywgJ3R5cGVkKG5hbWUsIHNpZ25hdHVyZXMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24uJyxcbiAgZXhhbXBsZXM6IFsnZG91YmxlID0gdHlwZWQoeyBcIm51bWJlciwgbnVtYmVyXCI6IGYoeCk9eCt4IH0pJywgJ2RvdWJsZSgyKScsICdkb3VibGUoXCJoZWxsb1wiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMudHlwZWREb2NzID0gdHlwZWREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbWJlZGRlZERvY3MgPSB2b2lkIDA7XG5cbnZhciBfYmlnbnVtYmVyID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2JpZ251bWJlclwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfaXNaZXJvID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNaZXJvXCIpO1xuXG52YXIgX2lzUHJpbWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1ByaW1lXCIpO1xuXG52YXIgX2lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlXCIpO1xuXG52YXIgX2lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTnVtZXJpY1wiKTtcblxudmFyIF9oYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWVcIik7XG5cbnZhciBfaXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmVcIik7XG5cbnZhciBfaXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyXCIpO1xuXG52YXIgX2lzTmFOID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOYU5cIik7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvZm9ybWF0XCIpO1xuXG52YXIgX2Nsb25lID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvY2xvbmVcIik7XG5cbnZhciBfdG8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91bml0cy90b1wiKTtcblxudmFyIF90YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmhcIik7XG5cbnZhciBfdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhblwiKTtcblxudmFyIF9zaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmhcIik7XG5cbnZhciBfc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNoXCIpO1xuXG52YXIgX3NlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNcIik7XG5cbnZhciBfY3NjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NoXCIpO1xuXG52YXIgX2NzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NcIik7XG5cbnZhciBfY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RoXCIpO1xuXG52YXIgX2NvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RcIik7XG5cbnZhciBfY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NoXCIpO1xuXG52YXIgX2NvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NcIik7XG5cbnZhciBfYXRhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuMlwiKTtcblxudmFyIF9hdGFuaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuaFwiKTtcblxudmFyIF9hdGFuMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuXCIpO1xuXG52YXIgX2FzaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oXCIpO1xuXG52YXIgX2FzaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpblwiKTtcblxudmFyIF9hc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaFwiKTtcblxudmFyIF9hc2VjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNcIik7XG5cbnZhciBfYWNzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2hcIik7XG5cbnZhciBfYWNzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY3NjXCIpO1xuXG52YXIgX2Fjb3RoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoXCIpO1xuXG52YXIgX2Fjb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdFwiKTtcblxudmFyIF9hY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaFwiKTtcblxudmFyIF9hY29zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NcIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdW1cIik7XG5cbnZhciBfc3RkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdGRcIik7XG5cbnZhciBfcXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxXCIpO1xuXG52YXIgX3Byb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2RcIik7XG5cbnZhciBfbW9kZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZVwiKTtcblxudmFyIF9taW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pblwiKTtcblxudmFyIF9tZWRpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhblwiKTtcblxudmFyIF9tZWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuXCIpO1xuXG52YXIgX21heCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgX21hZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWFkXCIpO1xuXG52YXIgX2VyZiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NwZWNpYWwvZXJmXCIpO1xuXG52YXIgX3NldFVuaW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFVuaW9uXCIpO1xuXG52YXIgX3NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZVwiKTtcblxudmFyIF9zZXRTaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFNpemVcIik7XG5cbnZhciBfc2V0UG93ZXJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXRcIik7XG5cbnZhciBfc2V0TXVsdGlwbGljaXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldE11bHRpcGxpY2l0eVwiKTtcblxudmFyIF9zZXRJc1N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldFwiKTtcblxudmFyIF9zZXRJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0SW50ZXJzZWN0XCIpO1xuXG52YXIgX3NldERpc3RpbmN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0XCIpO1xuXG52YXIgX3NldERpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZVwiKTtcblxudmFyIF9zZXRDYXJ0ZXNpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0Q2FydGVzaWFuXCIpO1xuXG52YXIgX3VuZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWxcIik7XG5cbnZhciBfc21hbGxlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyRXFcIik7XG5cbnZhciBfc21hbGxlciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlclwiKTtcblxudmFyIF9sYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXFcIik7XG5cbnZhciBfbGFyZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJcIik7XG5cbnZhciBfZXF1YWxUZXh0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHRcIik7XG5cbnZhciBfZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsXCIpO1xuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsXCIpO1xuXG52YXIgX2NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dFwiKTtcblxudmFyIF9jb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWxcIik7XG5cbnZhciBfY29tcGFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVwiKTtcblxudmFyIF9yYW5kb21JbnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9yYW5kb21JbnRcIik7XG5cbnZhciBfcmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tXCIpO1xuXG52YXIgX3BpY2tSYW5kb20gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9waWNrUmFuZG9tXCIpO1xuXG52YXIgX3Blcm11dGF0aW9ucyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3Blcm11dGF0aW9uc1wiKTtcblxudmFyIF9tdWx0aW5vbWlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsXCIpO1xuXG52YXIgX2tsZGl2ZXJnZW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZVwiKTtcblxudmFyIF9nYW1tYSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hXCIpO1xuXG52YXIgX2ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2ZhY3RvcmlhbFwiKTtcblxudmFyIF9jb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBfY29tYmluYXRpb25zV2l0aFJlcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXBcIik7XG5cbnZhciBfemVyb3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvemVyb3NcIik7XG5cbnZhciBfdHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZVwiKTtcblxudmFyIF90cmFjZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFjZVwiKTtcblxudmFyIF9zdWJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0XCIpO1xuXG52YXIgX3NxdWVlemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3F1ZWV6ZVwiKTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NvcnRcIik7XG5cbnZhciBfc2l6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9zaXplXCIpO1xuXG52YXIgX3Jlc2hhcGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmVzaGFwZVwiKTtcblxudmFyIF9yZXNpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmVzaXplXCIpO1xuXG52YXIgX3JhbmdlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3JhbmdlXCIpO1xuXG52YXIgX3BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9wYXJ0aXRpb25TZWxlY3RcIik7XG5cbnZhciBfb25lcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9vbmVzXCIpO1xuXG52YXIgX21hcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9tYXBcIik7XG5cbnZhciBfa3JvbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9rcm9uXCIpO1xuXG52YXIgX2ludiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pbnZcIik7XG5cbnZhciBfZm9yRWFjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoXCIpO1xuXG52YXIgX2ZsYXR0ZW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlblwiKTtcblxudmFyIF9maWx0ZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZmlsdGVyXCIpO1xuXG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5XCIpO1xuXG52YXIgX2dldE1hdHJpeERhdGFUeXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlXCIpO1xuXG52YXIgX2RvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kb3RcIik7XG5cbnZhciBfZGlhZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kaWFnXCIpO1xuXG52YXIgX2RldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kZXRcIik7XG5cbnZhciBfY3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jdHJhbnNwb3NlXCIpO1xuXG52YXIgX2Nyb3NzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2Nyb3NzXCIpO1xuXG52YXIgX2NvbmNhdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb25jYXRcIik7XG5cbnZhciBfeG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC94b3JcIik7XG5cbnZhciBfb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL29yXCIpO1xuXG52YXIgX25vdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvbm90XCIpO1xuXG52YXIgX2FuZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvYW5kXCIpO1xuXG52YXIgX2ludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2dlb21ldHJ5L2ludGVyc2VjdFwiKTtcblxudmFyIF9kaXN0YW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2dlb21ldHJ5L2Rpc3RhbmNlXCIpO1xuXG52YXIgX2hlbHAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9leHByZXNzaW9uL2hlbHBcIik7XG5cbnZhciBfZXZhbHVhdGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlXCIpO1xuXG52YXIgX2ltID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9pbVwiKTtcblxudmFyIF9yZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvcmVcIik7XG5cbnZhciBfY29uaiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvY29ualwiKTtcblxudmFyIF9hcmcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L2FyZ1wiKTtcblxudmFyIF90eXBlZCA9IHJlcXVpcmUoXCIuL2NvcmUvdHlwZWRcIik7XG5cbnZhciBfaW1wb3J0ID0gcmVxdWlyZShcIi4vY29yZS9pbXBvcnRcIik7XG5cbnZhciBfY29uZmlnID0gcmVxdWlyZShcIi4vY29yZS9jb25maWdcIik7XG5cbnZhciBfc3RpcmxpbmdTID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9zdGlybGluZ1MyXCIpO1xuXG52YXIgX2NvbXBvc2l0aW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvblwiKTtcblxudmFyIF9jYXRhbGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuXCIpO1xuXG52YXIgX2JlbGxOdW1iZXJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVyc1wiKTtcblxudmFyIF9yaWdodExvZ1NoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0XCIpO1xuXG52YXIgX3JpZ2h0QXJpdGhTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0XCIpO1xuXG52YXIgX2xlZnRTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0XCIpO1xuXG52YXIgX2JpdFhvciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0WG9yXCIpO1xuXG52YXIgX2JpdE9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRPclwiKTtcblxudmFyIF9iaXROb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdFwiKTtcblxudmFyIF9iaXRBbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdEFuZFwiKTtcblxudmFyIF94Z2NkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkXCIpO1xuXG52YXIgX3VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzXCIpO1xuXG52YXIgX3VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXNcIik7XG5cbnZhciBfc3F1YXJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXVhcmVcIik7XG5cbnZhciBfc3FydG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnRtXCIpO1xuXG52YXIgX3NxcnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnRcIik7XG5cbnZhciBfc2lnbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc2lnblwiKTtcblxudmFyIF9yb3VuZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmRcIik7XG5cbnZhciBfcG93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3dcIik7XG5cbnZhciBfbnRoUm9vdHMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzXCIpO1xuXG52YXIgX250aFJvb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RcIik7XG5cbnZhciBfbm9ybSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybVwiKTtcblxudmFyIF9tdWx0aXBseSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHlcIik7XG5cbnZhciBfbW9kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2RcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMFwiKTtcblxudmFyIF9sb2cxcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXBcIik7XG5cbnZhciBfbG9nMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMlwiKTtcblxudmFyIF9sb2czID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2dcIik7XG5cbnZhciBfbGNtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sY21cIik7XG5cbnZhciBfaHlwb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90XCIpO1xuXG52YXIgX2djZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZ2NkXCIpO1xuXG52YXIgX2Zsb29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9mbG9vclwiKTtcblxudmFyIF9maXggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeFwiKTtcblxudmFyIF9leHBtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBtMVwiKTtcblxudmFyIF9leHBtMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbVwiKTtcblxudmFyIF9laWdzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2VpZ3NcIik7XG5cbnZhciBfZXhwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBcIik7XG5cbnZhciBfZG90TXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5XCIpO1xuXG52YXIgX2RvdERpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlXCIpO1xuXG52YXIgX2RpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlXCIpO1xuXG52YXIgX2N1YmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmVcIik7XG5cbnZhciBfY2VpbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbFwiKTtcblxudmFyIF9jYnJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0XCIpO1xuXG52YXIgX2FkZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkXCIpO1xuXG52YXIgX2FicyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWJzXCIpO1xuXG52YXIgX3FyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9xclwiKTtcblxudmFyIF91c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3Vzb2x2ZVwiKTtcblxudmFyIF9zbHUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NsdVwiKTtcblxudmFyIF9yYXRpb25hbGl6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvcmF0aW9uYWxpemVcIik7XG5cbnZhciBfc2ltcGxpZnkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NpbXBsaWZ5XCIpO1xuXG52YXIgX2x1cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvbHVwXCIpO1xuXG52YXIgX2xzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlXCIpO1xuXG52YXIgX2Rlcml2YXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmVcIik7XG5cbnZhciBfdmVyc2lvbiA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy92ZXJzaW9uXCIpO1xuXG52YXIgX3RydWUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdHJ1ZVwiKTtcblxudmFyIF90YXUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdGF1XCIpO1xuXG52YXIgX1NRUlQgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvU1FSVDJcIik7XG5cbnZhciBfU1FSVDFfID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL1NRUlQxXzJcIik7XG5cbnZhciBfcGhpID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL3BoaVwiKTtcblxudmFyIF9waSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9waVwiKTtcblxudmFyIF9udWxsID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL251bGxcIik7XG5cbnZhciBfTmFOID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL05hTlwiKTtcblxudmFyIF9MT0cxMEUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvTE9HMTBFXCIpO1xuXG52YXIgX0xPRzJFID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xPRzJFXCIpO1xuXG52YXIgX0xOID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xOMTBcIik7XG5cbnZhciBfTE4yID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xOMlwiKTtcblxudmFyIF9JbmZpbml0eSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9JbmZpbml0eVwiKTtcblxudmFyIF9pID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL2lcIik7XG5cbnZhciBfZmFsc2UgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvZmFsc2VcIik7XG5cbnZhciBfZSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9lXCIpO1xuXG52YXIgX3VuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vdW5pdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vc3RyaW5nXCIpO1xuXG52YXIgX3NwbGl0VW5pdCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXRcIik7XG5cbnZhciBfc3BhcnNlID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL3NwYXJzZVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vbnVtYmVyXCIpO1xuXG52YXIgX21hdHJpeCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9tYXRyaXhcIik7XG5cbnZhciBfY29uc3RydWN0aW9uID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uXCIpO1xuXG52YXIgX2ZyYWN0aW9uID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2ZyYWN0aW9uXCIpO1xuXG52YXIgX2NyZWF0ZVVuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdFwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2NvbXBsZXhcIik7XG5cbnZhciBfYm9vbGVhbiA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9ib29sZWFuXCIpO1xuXG52YXIgX2RvdFBvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93XCIpO1xuXG52YXIgX2x1c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmVcIik7XG5cbnZhciBfc3VidHJhY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3N1YnRyYWN0XCIpO1xuXG52YXIgX3ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZVwiKTtcblxudmFyIF9zaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luXCIpO1xuXG52YXIgX251bWVyaWMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9udW1lcmljXCIpO1xuXG52YXIgX2NvbHVtbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfcm93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jvd1wiKTtcblxudmFyIGVtYmVkZGVkRG9jcyA9IHtcbiAgLy8gY29uc3RydWN0aW9uIGZ1bmN0aW9uc1xuICBiaWdudW1iZXI6IF9iaWdudW1iZXIuYmlnbnVtYmVyRG9jcyxcbiAgXCJib29sZWFuXCI6IF9ib29sZWFuLmJvb2xlYW5Eb2NzLFxuICBjb21wbGV4OiBfY29tcGxleC5jb21wbGV4RG9jcyxcbiAgY3JlYXRlVW5pdDogX2NyZWF0ZVVuaXQuY3JlYXRlVW5pdERvY3MsXG4gIGZyYWN0aW9uOiBfZnJhY3Rpb24uZnJhY3Rpb25Eb2NzLFxuICBpbmRleDogX2NvbnN0cnVjdGlvbi5pbmRleERvY3MsXG4gIG1hdHJpeDogX21hdHJpeC5tYXRyaXhEb2NzLFxuICBudW1iZXI6IF9udW1iZXIubnVtYmVyRG9jcyxcbiAgc3BhcnNlOiBfc3BhcnNlLnNwYXJzZURvY3MsXG4gIHNwbGl0VW5pdDogX3NwbGl0VW5pdC5zcGxpdFVuaXREb2NzLFxuICBzdHJpbmc6IF9zdHJpbmcuc3RyaW5nRG9jcyxcbiAgdW5pdDogX3VuaXQudW5pdERvY3MsXG4gIC8vIGNvbnN0YW50c1xuICBlOiBfZS5lRG9jcyxcbiAgRTogX2UuZURvY3MsXG4gIFwiZmFsc2VcIjogX2ZhbHNlLmZhbHNlRG9jcyxcbiAgaTogX2kuaURvY3MsXG4gIEluZmluaXR5OiBfSW5maW5pdHkuSW5maW5pdHlEb2NzLFxuICBMTjI6IF9MTjIuTE4yRG9jcyxcbiAgTE4xMDogX0xOLkxOMTBEb2NzLFxuICBMT0cyRTogX0xPRzJFLkxPRzJFRG9jcyxcbiAgTE9HMTBFOiBfTE9HMTBFLkxPRzEwRURvY3MsXG4gIE5hTjogX05hTi5OYU5Eb2NzLFxuICBcIm51bGxcIjogX251bGwubnVsbERvY3MsXG4gIHBpOiBfcGkucGlEb2NzLFxuICBQSTogX3BpLnBpRG9jcyxcbiAgcGhpOiBfcGhpLnBoaURvY3MsXG4gIFNRUlQxXzI6IF9TUVJUMV8uU1FSVDEyRG9jcyxcbiAgU1FSVDI6IF9TUVJULlNRUlQyRG9jcyxcbiAgdGF1OiBfdGF1LnRhdURvY3MsXG4gIFwidHJ1ZVwiOiBfdHJ1ZS50cnVlRG9jcyxcbiAgdmVyc2lvbjogX3ZlcnNpb24udmVyc2lvbkRvY3MsXG4gIC8vIHBoeXNpY2FsIGNvbnN0YW50c1xuICAvLyBUT0RPOiBtb3JlIGRldGFpbGVkIGRvY3MgZm9yIHBoeXNpY2FsIGNvbnN0YW50c1xuICBzcGVlZE9mTGlnaHQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1NwZWVkIG9mIGxpZ2h0IGluIHZhY3V1bScsXG4gICAgZXhhbXBsZXM6IFsnc3BlZWRPZkxpZ2h0J11cbiAgfSxcbiAgZ3Jhdml0YXRpb25Db25zdGFudDoge1xuICAgIGRlc2NyaXB0aW9uOiAnTmV3dG9uaWFuIGNvbnN0YW50IG9mIGdyYXZpdGF0aW9uJyxcbiAgICBleGFtcGxlczogWydncmF2aXRhdGlvbkNvbnN0YW50J11cbiAgfSxcbiAgcGxhbmNrQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICByZWR1Y2VkUGxhbmNrQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlZHVjZWQgUGxhbmNrIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydyZWR1Y2VkUGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICBtYWduZXRpY0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdNYWduZXRpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSknLFxuICAgIGV4YW1wbGVzOiBbJ21hZ25ldGljQ29uc3RhbnQnXVxuICB9LFxuICBlbGVjdHJpY0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdFbGVjdHJpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSknLFxuICAgIGV4YW1wbGVzOiBbJ2VsZWN0cmljQ29uc3RhbnQnXVxuICB9LFxuICB2YWN1dW1JbXBlZGFuY2U6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NoYXJhY3RlcmlzdGljIGltcGVkYW5jZSBvZiB2YWN1dW0nLFxuICAgIGV4YW1wbGVzOiBbJ3ZhY3V1bUltcGVkYW5jZSddXG4gIH0sXG4gIGNvdWxvbWI6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NvdWxvbWJcXCdzIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydjb3Vsb21iJ11cbiAgfSxcbiAgZWxlbWVudGFyeUNoYXJnZToge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlbWVudGFyeSBjaGFyZ2UnLFxuICAgIGV4YW1wbGVzOiBbJ2VsZW1lbnRhcnlDaGFyZ2UnXVxuICB9LFxuICBib2hyTWFnbmV0b246IHtcbiAgICBkZXNjcmlwdGlvbjogJ0JvcmggbWFnbmV0b24nLFxuICAgIGV4YW1wbGVzOiBbJ2JvaHJNYWduZXRvbiddXG4gIH0sXG4gIGNvbmR1Y3RhbmNlUXVhbnR1bToge1xuICAgIGRlc2NyaXB0aW9uOiAnQ29uZHVjdGFuY2UgcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnY29uZHVjdGFuY2VRdWFudHVtJ11cbiAgfSxcbiAgaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bToge1xuICAgIGRlc2NyaXB0aW9uOiAnSW52ZXJzZSBjb25kdWN0YW5jZSBxdWFudHVtJyxcbiAgICBleGFtcGxlczogWydpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtJ11cbiAgfSxcbiAgLy8gam9zZXBoc29uOiB7ZGVzY3JpcHRpb246ICdKb3NlcGhzb24gY29uc3RhbnQnLCBleGFtcGxlczogWydqb3NlcGhzb24nXX0sXG4gIG1hZ25ldGljRmx1eFF1YW50dW06IHtcbiAgICBkZXNjcmlwdGlvbjogJ01hZ25ldGljIGZsdXggcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnbWFnbmV0aWNGbHV4UXVhbnR1bSddXG4gIH0sXG4gIG51Y2xlYXJNYWduZXRvbjoge1xuICAgIGRlc2NyaXB0aW9uOiAnTnVjbGVhciBtYWduZXRvbicsXG4gICAgZXhhbXBsZXM6IFsnbnVjbGVhck1hZ25ldG9uJ11cbiAgfSxcbiAga2xpdHppbmc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1ZvbiBLbGl0emluZyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsna2xpdHppbmcnXVxuICB9LFxuICBib2hyUmFkaXVzOiB7XG4gICAgZGVzY3JpcHRpb246ICdCb3JoIHJhZGl1cycsXG4gICAgZXhhbXBsZXM6IFsnYm9oclJhZGl1cyddXG4gIH0sXG4gIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzOiB7XG4gICAgZGVzY3JpcHRpb246ICdDbGFzc2ljYWwgZWxlY3Ryb24gcmFkaXVzJyxcbiAgICBleGFtcGxlczogWydjbGFzc2ljYWxFbGVjdHJvblJhZGl1cyddXG4gIH0sXG4gIGVsZWN0cm9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlY3Ryb24gbWFzcycsXG4gICAgZXhhbXBsZXM6IFsnZWxlY3Ryb25NYXNzJ11cbiAgfSxcbiAgZmVybWlDb3VwbGluZzoge1xuICAgIGRlc2NyaXB0aW9uOiAnRmVybWkgY291cGxpbmcgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2Zlcm1pQ291cGxpbmcnXVxuICB9LFxuICBmaW5lU3RydWN0dXJlOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaW5lLXN0cnVjdHVyZSBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZmluZVN0cnVjdHVyZSddXG4gIH0sXG4gIGhhcnRyZWVFbmVyZ3k6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0hhcnRyZWUgZW5lcmd5JyxcbiAgICBleGFtcGxlczogWydoYXJ0cmVlRW5lcmd5J11cbiAgfSxcbiAgcHJvdG9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnUHJvdG9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ3Byb3Rvbk1hc3MnXVxuICB9LFxuICBkZXV0ZXJvbk1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0RldXRlcm9uIE1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ2RldXRlcm9uTWFzcyddXG4gIH0sXG4gIG5ldXRyb25NYXNzOiB7XG4gICAgZGVzY3JpcHRpb246ICdOZXV0cm9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ25ldXRyb25NYXNzJ11cbiAgfSxcbiAgcXVhbnR1bU9mQ2lyY3VsYXRpb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1F1YW50dW0gb2YgY2lyY3VsYXRpb24nLFxuICAgIGV4YW1wbGVzOiBbJ3F1YW50dW1PZkNpcmN1bGF0aW9uJ11cbiAgfSxcbiAgcnlkYmVyZzoge1xuICAgIGRlc2NyaXB0aW9uOiAnUnlkYmVyZyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncnlkYmVyZyddXG4gIH0sXG4gIHRob21zb25Dcm9zc1NlY3Rpb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1Rob21zb24gY3Jvc3Mgc2VjdGlvbicsXG4gICAgZXhhbXBsZXM6IFsndGhvbXNvbkNyb3NzU2VjdGlvbiddXG4gIH0sXG4gIHdlYWtNaXhpbmdBbmdsZToge1xuICAgIGRlc2NyaXB0aW9uOiAnV2VhayBtaXhpbmcgYW5nbGUnLFxuICAgIGV4YW1wbGVzOiBbJ3dlYWtNaXhpbmdBbmdsZSddXG4gIH0sXG4gIGVmaW1vdkZhY3Rvcjoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWZpbW92IGZhY3RvcicsXG4gICAgZXhhbXBsZXM6IFsnZWZpbW92RmFjdG9yJ11cbiAgfSxcbiAgYXRvbWljTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnQXRvbWljIG1hc3MgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2F0b21pY01hc3MnXVxuICB9LFxuICBhdm9nYWRybzoge1xuICAgIGRlc2NyaXB0aW9uOiAnQXZvZ2Fkcm9cXCdzIG51bWJlcicsXG4gICAgZXhhbXBsZXM6IFsnYXZvZ2Fkcm8nXVxuICB9LFxuICBib2x0em1hbm46IHtcbiAgICBkZXNjcmlwdGlvbjogJ0JvbHR6bWFubiBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnYm9sdHptYW5uJ11cbiAgfSxcbiAgZmFyYWRheToge1xuICAgIGRlc2NyaXB0aW9uOiAnRmFyYWRheSBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZmFyYWRheSddXG4gIH0sXG4gIGZpcnN0UmFkaWF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaXJzdCByYWRpYXRpb24gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2ZpcnN0UmFkaWF0aW9uJ11cbiAgfSxcbiAgbG9zY2htaWR0OiB7XG4gICAgZGVzY3JpcHRpb246ICdMb3NjaG1pZHQgY29uc3RhbnQgYXQgVD0yNzMuMTUgSyBhbmQgcD0xMDEuMzI1IGtQYScsXG4gICAgZXhhbXBsZXM6IFsnbG9zY2htaWR0J11cbiAgfSxcbiAgZ2FzQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0dhcyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZ2FzQ29uc3RhbnQnXVxuICB9LFxuICBtb2xhclBsYW5ja0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdNb2xhciBQbGFuY2sgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyUGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICBtb2xhclZvbHVtZToge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgdm9sdW1lIG9mIGFuIGlkZWFsIGdhcyBhdCBUPTI3My4xNSBLIGFuZCBwPTEwMS4zMjUga1BhJyxcbiAgICBleGFtcGxlczogWydtb2xhclZvbHVtZSddXG4gIH0sXG4gIHNhY2t1clRldHJvZGU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1NhY2t1ci1UZXRyb2RlIGNvbnN0YW50IGF0IFQ9MSBLIGFuZCBwPTEwMS4zMjUga1BhJyxcbiAgICBleGFtcGxlczogWydzYWNrdXJUZXRyb2RlJ11cbiAgfSxcbiAgc2Vjb25kUmFkaWF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdTZWNvbmQgcmFkaWF0aW9uIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydzZWNvbmRSYWRpYXRpb24nXVxuICB9LFxuICBzdGVmYW5Cb2x0em1hbm46IHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0ZWZhbi1Cb2x0em1hbm4gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ3N0ZWZhbkJvbHR6bWFubiddXG4gIH0sXG4gIHdpZW5EaXNwbGFjZW1lbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1dpZW4gZGlzcGxhY2VtZW50IGxhdyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnd2llbkRpc3BsYWNlbWVudCddXG4gIH0sXG4gIC8vIHNwZWN0cmFsUmFkaWFuY2U6IHtkZXNjcmlwdGlvbjogJ0ZpcnN0IHJhZGlhdGlvbiBjb25zdGFudCBmb3Igc3BlY3RyYWwgcmFkaWFuY2UnLCBleGFtcGxlczogWydzcGVjdHJhbFJhZGlhbmNlJ119LFxuICBtb2xhck1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ01vbGFyIG1hc3MgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzcyddXG4gIH0sXG4gIG1vbGFyTWFzc0MxMjoge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgbWFzcyBjb25zdGFudCBvZiBjYXJib24tMTInLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzc0MxMiddXG4gIH0sXG4gIGdyYXZpdHk6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0YW5kYXJkIGFjY2VsZXJhdGlvbiBvZiBncmF2aXR5IChzdGFuZGFyZCBhY2NlbGVyYXRpb24gb2YgZnJlZS1mYWxsIG9uIEVhcnRoKScsXG4gICAgZXhhbXBsZXM6IFsnZ3Jhdml0eSddXG4gIH0sXG4gIHBsYW5ja0xlbmd0aDoge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIGxlbmd0aCcsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrTGVuZ3RoJ11cbiAgfSxcbiAgcGxhbmNrTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ3BsYW5ja01hc3MnXVxuICB9LFxuICBwbGFuY2tUaW1lOiB7XG4gICAgZGVzY3JpcHRpb246ICdQbGFuY2sgdGltZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrVGltZSddXG4gIH0sXG4gIHBsYW5ja0NoYXJnZToge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIGNoYXJnZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrQ2hhcmdlJ11cbiAgfSxcbiAgcGxhbmNrVGVtcGVyYXR1cmU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayB0ZW1wZXJhdHVyZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrVGVtcGVyYXR1cmUnXVxuICB9LFxuICAvLyBmdW5jdGlvbnMgLSBhbGdlYnJhXG4gIGRlcml2YXRpdmU6IF9kZXJpdmF0aXZlLmRlcml2YXRpdmVEb2NzLFxuICBsc29sdmU6IF9sc29sdmUubHNvbHZlRG9jcyxcbiAgbHVwOiBfbHVwLmx1cERvY3MsXG4gIGx1c29sdmU6IF9sdXNvbHZlLmx1c29sdmVEb2NzLFxuICBzaW1wbGlmeTogX3NpbXBsaWZ5LnNpbXBsaWZ5RG9jcyxcbiAgcmF0aW9uYWxpemU6IF9yYXRpb25hbGl6ZS5yYXRpb25hbGl6ZURvY3MsXG4gIHNsdTogX3NsdS5zbHVEb2NzLFxuICB1c29sdmU6IF91c29sdmUudXNvbHZlRG9jcyxcbiAgcXI6IF9xci5xckRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGFyaXRobWV0aWNcbiAgYWJzOiBfYWJzLmFic0RvY3MsXG4gIGFkZDogX2FkZC5hZGREb2NzLFxuICBjYnJ0OiBfY2JydC5jYnJ0RG9jcyxcbiAgY2VpbDogX2NlaWwuY2VpbERvY3MsXG4gIGN1YmU6IF9jdWJlLmN1YmVEb2NzLFxuICBkaXZpZGU6IF9kaXZpZGUuZGl2aWRlRG9jcyxcbiAgZG90RGl2aWRlOiBfZG90RGl2aWRlLmRvdERpdmlkZURvY3MsXG4gIGRvdE11bHRpcGx5OiBfZG90TXVsdGlwbHkuZG90TXVsdGlwbHlEb2NzLFxuICBkb3RQb3c6IF9kb3RQb3cuZG90UG93RG9jcyxcbiAgZXhwOiBfZXhwLmV4cERvY3MsXG4gIGV4cG06IF9leHBtMi5leHBtRG9jcyxcbiAgZXhwbTE6IF9leHBtLmV4cG0xRG9jcyxcbiAgZml4OiBfZml4LmZpeERvY3MsXG4gIGZsb29yOiBfZmxvb3IuZmxvb3JEb2NzLFxuICBnY2Q6IF9nY2QuZ2NkRG9jcyxcbiAgaHlwb3Q6IF9oeXBvdC5oeXBvdERvY3MsXG4gIGxjbTogX2xjbS5sY21Eb2NzLFxuICBsb2c6IF9sb2czLmxvZ0RvY3MsXG4gIGxvZzI6IF9sb2cyLmxvZzJEb2NzLFxuICBsb2cxcDogX2xvZzFwLmxvZzFwRG9jcyxcbiAgbG9nMTA6IF9sb2cubG9nMTBEb2NzLFxuICBtb2Q6IF9tb2QubW9kRG9jcyxcbiAgbXVsdGlwbHk6IF9tdWx0aXBseS5tdWx0aXBseURvY3MsXG4gIG5vcm06IF9ub3JtLm5vcm1Eb2NzLFxuICBudGhSb290OiBfbnRoUm9vdC5udGhSb290RG9jcyxcbiAgbnRoUm9vdHM6IF9udGhSb290cy5udGhSb290c0RvY3MsXG4gIHBvdzogX3Bvdy5wb3dEb2NzLFxuICByb3VuZDogX3JvdW5kLnJvdW5kRG9jcyxcbiAgc2lnbjogX3NpZ24uc2lnbkRvY3MsXG4gIHNxcnQ6IF9zcXJ0LnNxcnREb2NzLFxuICBzcXJ0bTogX3NxcnRtLnNxcnRtRG9jcyxcbiAgc3F1YXJlOiBfc3F1YXJlLnNxdWFyZURvY3MsXG4gIHN1YnRyYWN0OiBfc3VidHJhY3Quc3VidHJhY3REb2NzLFxuICB1bmFyeU1pbnVzOiBfdW5hcnlNaW51cy51bmFyeU1pbnVzRG9jcyxcbiAgdW5hcnlQbHVzOiBfdW5hcnlQbHVzLnVuYXJ5UGx1c0RvY3MsXG4gIHhnY2Q6IF94Z2NkLnhnY2REb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBiaXR3aXNlXG4gIGJpdEFuZDogX2JpdEFuZC5iaXRBbmREb2NzLFxuICBiaXROb3Q6IF9iaXROb3QuYml0Tm90RG9jcyxcbiAgYml0T3I6IF9iaXRPci5iaXRPckRvY3MsXG4gIGJpdFhvcjogX2JpdFhvci5iaXRYb3JEb2NzLFxuICBsZWZ0U2hpZnQ6IF9sZWZ0U2hpZnQubGVmdFNoaWZ0RG9jcyxcbiAgcmlnaHRBcml0aFNoaWZ0OiBfcmlnaHRBcml0aFNoaWZ0LnJpZ2h0QXJpdGhTaGlmdERvY3MsXG4gIHJpZ2h0TG9nU2hpZnQ6IF9yaWdodExvZ1NoaWZ0LnJpZ2h0TG9nU2hpZnREb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBjb21iaW5hdG9yaWNzXG4gIGJlbGxOdW1iZXJzOiBfYmVsbE51bWJlcnMuYmVsbE51bWJlcnNEb2NzLFxuICBjYXRhbGFuOiBfY2F0YWxhbi5jYXRhbGFuRG9jcyxcbiAgY29tcG9zaXRpb246IF9jb21wb3NpdGlvbi5jb21wb3NpdGlvbkRvY3MsXG4gIHN0aXJsaW5nUzI6IF9zdGlybGluZ1Muc3RpcmxpbmdTMkRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGNvcmVcbiAgY29uZmlnOiBfY29uZmlnLmNvbmZpZ0RvY3MsXG4gIFwiaW1wb3J0XCI6IF9pbXBvcnQuaW1wb3J0RG9jcyxcbiAgdHlwZWQ6IF90eXBlZC50eXBlZERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGNvbXBsZXhcbiAgYXJnOiBfYXJnLmFyZ0RvY3MsXG4gIGNvbmo6IF9jb25qLmNvbmpEb2NzLFxuICByZTogX3JlLnJlRG9jcyxcbiAgaW06IF9pbS5pbURvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGV4cHJlc3Npb25cbiAgZXZhbHVhdGU6IF9ldmFsdWF0ZS5ldmFsdWF0ZURvY3MsXG4gIGV2YWw6IF9ldmFsdWF0ZS5ldmFsdWF0ZURvY3MsXG4gIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjdcbiAgaGVscDogX2hlbHAuaGVscERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGdlb21ldHJ5XG4gIGRpc3RhbmNlOiBfZGlzdGFuY2UuZGlzdGFuY2VEb2NzLFxuICBpbnRlcnNlY3Q6IF9pbnRlcnNlY3QuaW50ZXJzZWN0RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gbG9naWNhbFxuICBhbmQ6IF9hbmQuYW5kRG9jcyxcbiAgbm90OiBfbm90Lm5vdERvY3MsXG4gIG9yOiBfb3Iub3JEb2NzLFxuICB4b3I6IF94b3IueG9yRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gbWF0cml4XG4gIGNvbmNhdDogX2NvbmNhdC5jb25jYXREb2NzLFxuICBjcm9zczogX2Nyb3NzLmNyb3NzRG9jcyxcbiAgY29sdW1uOiBfY29sdW1uLmNvbHVtbkRvY3MsXG4gIGN0cmFuc3Bvc2U6IF9jdHJhbnNwb3NlLmN0cmFuc3Bvc2VEb2NzLFxuICBkZXQ6IF9kZXQuZGV0RG9jcyxcbiAgZGlhZzogX2RpYWcuZGlhZ0RvY3MsXG4gIGRvdDogX2RvdC5kb3REb2NzLFxuICBnZXRNYXRyaXhEYXRhVHlwZTogX2dldE1hdHJpeERhdGFUeXBlLmdldE1hdHJpeERhdGFUeXBlRG9jcyxcbiAgaWRlbnRpdHk6IF9pZGVudGl0eS5pZGVudGl0eURvY3MsXG4gIGZpbHRlcjogX2ZpbHRlci5maWx0ZXJEb2NzLFxuICBmbGF0dGVuOiBfZmxhdHRlbi5mbGF0dGVuRG9jcyxcbiAgZm9yRWFjaDogX2ZvckVhY2guZm9yRWFjaERvY3MsXG4gIGludjogX2ludi5pbnZEb2NzLFxuICBlaWdzOiBfZWlncy5laWdzRG9jcyxcbiAga3JvbjogX2tyb24ua3JvbkRvY3MsXG4gIG1hcDogX21hcC5tYXBEb2NzLFxuICBvbmVzOiBfb25lcy5vbmVzRG9jcyxcbiAgcGFydGl0aW9uU2VsZWN0OiBfcGFydGl0aW9uU2VsZWN0LnBhcnRpdGlvblNlbGVjdERvY3MsXG4gIHJhbmdlOiBfcmFuZ2UucmFuZ2VEb2NzLFxuICByZXNpemU6IF9yZXNpemUucmVzaXplRG9jcyxcbiAgcmVzaGFwZTogX3Jlc2hhcGUucmVzaGFwZURvY3MsXG4gIHJvdzogX3Jvdy5yb3dEb2NzLFxuICBzaXplOiBfc2l6ZS5zaXplRG9jcyxcbiAgc29ydDogX3NvcnQuc29ydERvY3MsXG4gIHNxdWVlemU6IF9zcXVlZXplLnNxdWVlemVEb2NzLFxuICBzdWJzZXQ6IF9zdWJzZXQuc3Vic2V0RG9jcyxcbiAgdHJhY2U6IF90cmFjZS50cmFjZURvY3MsXG4gIHRyYW5zcG9zZTogX3RyYW5zcG9zZS50cmFuc3Bvc2VEb2NzLFxuICB6ZXJvczogX3plcm9zLnplcm9zRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gcHJvYmFiaWxpdHlcbiAgY29tYmluYXRpb25zOiBfY29tYmluYXRpb25zLmNvbWJpbmF0aW9uc0RvY3MsXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IF9jb21iaW5hdGlvbnNXaXRoUmVwLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzLFxuICAvLyBkaXN0cmlidXRpb246IGRpc3RyaWJ1dGlvbkRvY3MsXG4gIGZhY3RvcmlhbDogX2ZhY3RvcmlhbC5mYWN0b3JpYWxEb2NzLFxuICBnYW1tYTogX2dhbW1hLmdhbW1hRG9jcyxcbiAga2xkaXZlcmdlbmNlOiBfa2xkaXZlcmdlbmNlLmtsZGl2ZXJnZW5jZURvY3MsXG4gIG11bHRpbm9taWFsOiBfbXVsdGlub21pYWwubXVsdGlub21pYWxEb2NzLFxuICBwZXJtdXRhdGlvbnM6IF9wZXJtdXRhdGlvbnMucGVybXV0YXRpb25zRG9jcyxcbiAgcGlja1JhbmRvbTogX3BpY2tSYW5kb20ucGlja1JhbmRvbURvY3MsXG4gIHJhbmRvbTogX3JhbmRvbS5yYW5kb21Eb2NzLFxuICByYW5kb21JbnQ6IF9yYW5kb21JbnQucmFuZG9tSW50RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gcmVsYXRpb25hbFxuICBjb21wYXJlOiBfY29tcGFyZS5jb21wYXJlRG9jcyxcbiAgY29tcGFyZU5hdHVyYWw6IF9jb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERvY3MsXG4gIGNvbXBhcmVUZXh0OiBfY29tcGFyZVRleHQuY29tcGFyZVRleHREb2NzLFxuICBkZWVwRXF1YWw6IF9kZWVwRXF1YWwuZGVlcEVxdWFsRG9jcyxcbiAgZXF1YWw6IF9lcXVhbC5lcXVhbERvY3MsXG4gIGVxdWFsVGV4dDogX2VxdWFsVGV4dC5lcXVhbFRleHREb2NzLFxuICBsYXJnZXI6IF9sYXJnZXIubGFyZ2VyRG9jcyxcbiAgbGFyZ2VyRXE6IF9sYXJnZXJFcS5sYXJnZXJFcURvY3MsXG4gIHNtYWxsZXI6IF9zbWFsbGVyLnNtYWxsZXJEb2NzLFxuICBzbWFsbGVyRXE6IF9zbWFsbGVyRXEuc21hbGxlckVxRG9jcyxcbiAgdW5lcXVhbDogX3VuZXF1YWwudW5lcXVhbERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIHNldFxuICBzZXRDYXJ0ZXNpYW46IF9zZXRDYXJ0ZXNpYW4uc2V0Q2FydGVzaWFuRG9jcyxcbiAgc2V0RGlmZmVyZW5jZTogX3NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURvY3MsXG4gIHNldERpc3RpbmN0OiBfc2V0RGlzdGluY3Quc2V0RGlzdGluY3REb2NzLFxuICBzZXRJbnRlcnNlY3Q6IF9zZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RG9jcyxcbiAgc2V0SXNTdWJzZXQ6IF9zZXRJc1N1YnNldC5zZXRJc1N1YnNldERvY3MsXG4gIHNldE11bHRpcGxpY2l0eTogX3NldE11bHRpcGxpY2l0eS5zZXRNdWx0aXBsaWNpdHlEb2NzLFxuICBzZXRQb3dlcnNldDogX3NldFBvd2Vyc2V0LnNldFBvd2Vyc2V0RG9jcyxcbiAgc2V0U2l6ZTogX3NldFNpemUuc2V0U2l6ZURvY3MsXG4gIHNldFN5bURpZmZlcmVuY2U6IF9zZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEb2NzLFxuICBzZXRVbmlvbjogX3NldFVuaW9uLnNldFVuaW9uRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gc3BlY2lhbFxuICBlcmY6IF9lcmYuZXJmRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gc3RhdGlzdGljc1xuICBtYWQ6IF9tYWQubWFkRG9jcyxcbiAgbWF4OiBfbWF4Lm1heERvY3MsXG4gIG1lYW46IF9tZWFuLm1lYW5Eb2NzLFxuICBtZWRpYW46IF9tZWRpYW4ubWVkaWFuRG9jcyxcbiAgbWluOiBfbWluLm1pbkRvY3MsXG4gIG1vZGU6IF9tb2RlLm1vZGVEb2NzLFxuICBwcm9kOiBfcHJvZC5wcm9kRG9jcyxcbiAgcXVhbnRpbGVTZXE6IF9xdWFudGlsZVNlcS5xdWFudGlsZVNlcURvY3MsXG4gIHN0ZDogX3N0ZC5zdGREb2NzLFxuICBzdW06IF9zdW0uc3VtRG9jcyxcbiAgdmFyaWFuY2U6IF92YXJpYW5jZS52YXJpYW5jZURvY3MsXG4gIFwidmFyXCI6IF92YXJpYW5jZS52YXJpYW5jZURvY3MsXG4gIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjdcbiAgLy8gZnVuY3Rpb25zIC0gdHJpZ29ub21ldHJ5XG4gIGFjb3M6IF9hY29zLmFjb3NEb2NzLFxuICBhY29zaDogX2Fjb3NoLmFjb3NoRG9jcyxcbiAgYWNvdDogX2Fjb3QuYWNvdERvY3MsXG4gIGFjb3RoOiBfYWNvdGguYWNvdGhEb2NzLFxuICBhY3NjOiBfYWNzYy5hY3NjRG9jcyxcbiAgYWNzY2g6IF9hY3NjaC5hY3NjaERvY3MsXG4gIGFzZWM6IF9hc2VjLmFzZWNEb2NzLFxuICBhc2VjaDogX2FzZWNoLmFzZWNoRG9jcyxcbiAgYXNpbjogX2FzaW4uYXNpbkRvY3MsXG4gIGFzaW5oOiBfYXNpbmguYXNpbmhEb2NzLFxuICBhdGFuOiBfYXRhbjIuYXRhbkRvY3MsXG4gIGF0YW5oOiBfYXRhbmguYXRhbmhEb2NzLFxuICBhdGFuMjogX2F0YW4uYXRhbjJEb2NzLFxuICBjb3M6IF9jb3MuY29zRG9jcyxcbiAgY29zaDogX2Nvc2guY29zaERvY3MsXG4gIGNvdDogX2NvdC5jb3REb2NzLFxuICBjb3RoOiBfY290aC5jb3RoRG9jcyxcbiAgY3NjOiBfY3NjLmNzY0RvY3MsXG4gIGNzY2g6IF9jc2NoLmNzY2hEb2NzLFxuICBzZWM6IF9zZWMuc2VjRG9jcyxcbiAgc2VjaDogX3NlY2guc2VjaERvY3MsXG4gIHNpbjogX3Npbi5zaW5Eb2NzLFxuICBzaW5oOiBfc2luaC5zaW5oRG9jcyxcbiAgdGFuOiBfdGFuLnRhbkRvY3MsXG4gIHRhbmg6IF90YW5oLnRhbmhEb2NzLFxuICAvLyBmdW5jdGlvbnMgLSB1bml0c1xuICB0bzogX3RvLnRvRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gdXRpbHNcbiAgY2xvbmU6IF9jbG9uZS5jbG9uZURvY3MsXG4gIGZvcm1hdDogX2Zvcm1hdC5mb3JtYXREb2NzLFxuICBpc05hTjogX2lzTmFOLmlzTmFORG9jcyxcbiAgaXNJbnRlZ2VyOiBfaXNJbnRlZ2VyLmlzSW50ZWdlckRvY3MsXG4gIGlzTmVnYXRpdmU6IF9pc05lZ2F0aXZlLmlzTmVnYXRpdmVEb2NzLFxuICBpc051bWVyaWM6IF9pc051bWVyaWMuaXNOdW1lcmljRG9jcyxcbiAgaGFzTnVtZXJpY1ZhbHVlOiBfaGFzTnVtZXJpY1ZhbHVlLmhhc051bWVyaWNWYWx1ZURvY3MsXG4gIGlzUG9zaXRpdmU6IF9pc1Bvc2l0aXZlLmlzUG9zaXRpdmVEb2NzLFxuICBpc1ByaW1lOiBfaXNQcmltZS5pc1ByaW1lRG9jcyxcbiAgaXNaZXJvOiBfaXNaZXJvLmlzWmVyb0RvY3MsXG4gIC8vIHByaW50OiBwcmludERvY3MgLy8gVE9ETzogYWRkIGRvY3VtZW50YXRpb24gZm9yIHByaW50IGFzIHNvb24gYXMgdGhlIHBhcnNlciBzdXBwb3J0cyBvYmplY3RzLlxuICB0eXBlT2Y6IF90eXBlT2YudHlwZU9mRG9jcyxcbiAgXCJ0eXBlb2ZcIjogX3R5cGVPZi50eXBlT2ZEb2NzLFxuICAvLyBUT0RPOiBkZXByZWNhdGVkLCBjbGVhbnVwIGluIHY3XG4gIG51bWVyaWM6IF9udW1lcmljLm51bWVyaWNEb2NzXG59O1xuZXhwb3J0cy5lbWJlZGRlZERvY3MgPSBlbWJlZGRlZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmVEb2NzID0gdm9pZCAwO1xudmFyIGRlcml2YXRpdmVEb2NzID0ge1xuICBuYW1lOiAnZGVyaXZhdGl2ZScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlKScsICdkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlLCB7c2ltcGxpZnk6IGJvb2xlYW59KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rha2VzIHRoZSBkZXJpdmF0aXZlIG9mIGFuIGV4cHJlc3Npb24gZXhwcmVzc2VkIGluIHBhcnNlciBOb2Rlcy4gVGhlIGRlcml2YXRpdmUgd2lsbCBiZSB0YWtlbiBvdmVyIHRoZSBzdXBwbGllZCB2YXJpYWJsZSBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlci4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZhcmlhYmxlcyBpbiB0aGUgZXhwcmVzc2lvbiwgaXQgd2lsbCByZXR1cm4gYSBwYXJ0aWFsIGRlcml2YXRpdmUuJyxcbiAgZXhhbXBsZXM6IFsnZGVyaXZhdGl2ZShcIjJ4XjNcIiwgXCJ4XCIpJywgJ2Rlcml2YXRpdmUoXCIyeF4zXCIsIFwieFwiLCB7c2ltcGxpZnk6IGZhbHNlfSknLCAnZGVyaXZhdGl2ZShcIjJ4XjIgKyAzeCArIDRcIiwgXCJ4XCIpJywgJ2Rlcml2YXRpdmUoXCJzaW4oMngpXCIsIFwieFwiKScsICdmID0gcGFyc2UoXCJ4XjIgKyB4XCIpJywgJ3ggPSBwYXJzZShcInhcIiknLCAnZGYgPSBkZXJpdmF0aXZlKGYsIHgpJywgJ2RmLmV2YWx1YXRlKHt4OiAzfSknXSxcbiAgc2VlYWxzbzogWydzaW1wbGlmeScsICdwYXJzZScsICdldmFsdWF0ZSddXG59O1xuZXhwb3J0cy5kZXJpdmF0aXZlRG9jcyA9IGRlcml2YXRpdmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sc29sdmVEb2NzID0gdm9pZCAwO1xudmFyIGxzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICdsc29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD1sc29sdmUoTCwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gTCAqIHggPSBiIHdoZXJlIEwgaXMgYW4gW24geCBuXSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbLTIsIDM7IDIsIDFdJywgJ2IgPSBbMTEsIDldJywgJ3ggPSBsc29sdmUoYSwgYiknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnbHVzb2x2ZScsICd1c29sdmUnLCAnbWF0cml4JywgJ3NwYXJzZSddXG59O1xuZXhwb3J0cy5sc29sdmVEb2NzID0gbHNvbHZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVwRG9jcyA9IHZvaWQgMDtcbnZhciBsdXBEb2NzID0ge1xuICBuYW1lOiAnbHVwJyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ2x1cChtKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggQSBpcyBkZWNvbXBvc2VkIGluIHRocmVlIG1hdHJpY2VzIChMLCBVLCBQKSB3aGVyZSBQICogQSA9IEwgKiBVJyxcbiAgZXhhbXBsZXM6IFsnbHVwKFtbMiwgMV0sIFsxLCA0XV0pJywgJ2x1cChtYXRyaXgoW1syLCAxXSwgWzEsIDRdXSkpJywgJ2x1cChzcGFyc2UoW1syLCAxXSwgWzEsIDRdXSkpJ10sXG4gIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnc2x1JywgJ3FyJ11cbn07XG5leHBvcnRzLmx1cERvY3MgPSBsdXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sdXNvbHZlRG9jcyA9IHZvaWQgMDtcbnZhciBsdXNvbHZlRG9jcyA9IHtcbiAgbmFtZTogJ2x1c29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD1sdXNvbHZlKEEsIGIpJywgJ3g9bHVzb2x2ZShsdSwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiIHdoZXJlIEEgaXMgYW4gW24geCBuXSBtYXRyaXggYW5kIGIgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci4nLFxuICBleGFtcGxlczogWydhID0gWy0yLCAzOyAyLCAxXScsICdiID0gWzExLCA5XScsICd4ID0gbHVzb2x2ZShhLCBiKSddLFxuICBzZWVhbHNvOiBbJ2x1cCcsICdzbHUnLCAnbHNvbHZlJywgJ3Vzb2x2ZScsICdtYXRyaXgnLCAnc3BhcnNlJ11cbn07XG5leHBvcnRzLmx1c29sdmVEb2NzID0gbHVzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnFyRG9jcyA9IHZvaWQgMDtcbnZhciBxckRvY3MgPSB7XG4gIG5hbWU6ICdxcicsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydxcihBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIE1hdHJpeCBRUiBkZWNvbXBvc2l0aW9uLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgUWAsIGBSYCkgd2hlcmUgYFFgIGlzIGFuIG9ydGhvZ29uYWwgbWF0cml4IGFuZCBgUmAgaXMgYW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsncXIoW1sxLCAtMSwgIDRdLCBbMSwgIDQsIC0yXSwgWzEsICA0LCAgMl0sIFsxLCAgLTEsIDBdXSknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnc2x1JywgJ21hdHJpeCddXG59O1xuZXhwb3J0cy5xckRvY3MgPSBxckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplRG9jcyA9IHZvaWQgMDtcbnZhciByYXRpb25hbGl6ZURvY3MgPSB7XG4gIG5hbWU6ICdyYXRpb25hbGl6ZScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydyYXRpb25hbGl6ZShleHByKScsICdyYXRpb25hbGl6ZShleHByLCBzY29wZSknLCAncmF0aW9uYWxpemUoZXhwciwgc2NvcGUsIGRldGFpbGVkKSddLFxuICBkZXNjcmlwdGlvbjogJ1RyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi4gSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0cyB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLicsXG4gIGV4YW1wbGVzOiBbJ3JhdGlvbmFsaXplKFwiMngveSAtIHkvKHgrMSlcIiknLCAncmF0aW9uYWxpemUoXCIyeC95IC0geS8oeCsxKVwiLCB0cnVlKSddLFxuICBzZWVhbHNvOiBbJ3NpbXBsaWZ5J11cbn07XG5leHBvcnRzLnJhdGlvbmFsaXplRG9jcyA9IHJhdGlvbmFsaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2ltcGxpZnlEb2NzID0gdm9pZCAwO1xudmFyIHNpbXBsaWZ5RG9jcyA9IHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ3NpbXBsaWZ5KGV4cHIpJywgJ3NpbXBsaWZ5KGV4cHIsIHJ1bGVzKSddLFxuICBkZXNjcmlwdGlvbjogJ1NpbXBsaWZ5IGFuIGV4cHJlc3Npb24gdHJlZS4nLFxuICBleGFtcGxlczogWydzaW1wbGlmeShcIjMgKyAyIC8gNFwiKScsICdzaW1wbGlmeShcIjJ4ICsgeFwiKScsICdmID0gcGFyc2UoXCJ4ICogKHggKyAyICsgeClcIiknLCAnc2ltcGxpZmllZCA9IHNpbXBsaWZ5KGYpJywgJ3NpbXBsaWZpZWQuZXZhbHVhdGUoe3g6IDJ9KSddLFxuICBzZWVhbHNvOiBbJ2Rlcml2YXRpdmUnLCAncGFyc2UnLCAnZXZhbHVhdGUnXVxufTtcbmV4cG9ydHMuc2ltcGxpZnlEb2NzID0gc2ltcGxpZnlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbHVEb2NzID0gdm9pZCAwO1xudmFyIHNsdURvY3MgPSB7XG4gIG5hbWU6ICdzbHUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsnc2x1KEEsIG9yZGVyLCB0aHJlc2hvbGQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBNYXRyaXggTFUgZGVjb21wb3NpdGlvbiB3aXRoIGZ1bGwgcGl2b3RpbmcuIE1hdHJpeCBBIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChMLCBVKSBhbmQgdHdvIHBlcm11dGF0aW9uIHZlY3RvcnMgKHBpbnYsIHEpIHdoZXJlIFAgKiBBICogUSA9IEwgKiBVJyxcbiAgZXhhbXBsZXM6IFsnc2x1KHNwYXJzZShbNC41LCAwLCAzLjIsIDA7IDMuMSwgMi45LCAwLCAwLjk7IDAsIDEuNywgMywgMDsgMy41LCAwLjQsIDAsIDFdKSwgMSwgMC4wMDEpJ10sXG4gIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnbHVwJywgJ3FyJ11cbn07XG5leHBvcnRzLnNsdURvY3MgPSBzbHVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51c29sdmVEb2NzID0gdm9pZCAwO1xudmFyIHVzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICd1c29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD11c29sdmUoVSwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gVSAqIHggPSBiIHdoZXJlIFUgaXMgYW4gW24geCBuXSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsXG4gIGV4YW1wbGVzOiBbJ3g9dXNvbHZlKHNwYXJzZShbMSwgMSwgMSwgMTsgMCwgMSwgMSwgMTsgMCwgMCwgMSwgMTsgMCwgMCwgMCwgMV0pLCBbMTsgMjsgMzsgNF0pJ10sXG4gIHNlZWFsc286IFsnbHVwJywgJ2x1c29sdmUnLCAnbHNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMudXNvbHZlRG9jcyA9IHVzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFic0RvY3MgPSB2b2lkIDA7XG52YXIgYWJzRG9jcyA9IHtcbiAgbmFtZTogJ2FicycsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydhYnMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhYnMoMy41KScsICdhYnMoLTQuMiknXSxcbiAgc2VlYWxzbzogWydzaWduJ11cbn07XG5leHBvcnRzLmFic0RvY3MgPSBhYnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGREb2NzID0gdm9pZCAwO1xudmFyIGFkZERvY3MgPSB7XG4gIG5hbWU6ICdhZGQnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICsgeScsICdhZGQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdBZGQgdHdvIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydhID0gMi4xICsgMy42JywgJ2EgLSAzLjYnLCAnMyArIDJpJywgJzMgY20gKyAyIGluY2gnLCAnXCIyLjNcIiArIFwiNFwiJ10sXG4gIHNlZWFsc286IFsnc3VidHJhY3QnXVxufTtcbmV4cG9ydHMuYWRkRG9jcyA9IGFkZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNicnREb2NzID0gdm9pZCAwO1xudmFyIGNicnREb2NzID0ge1xuICBuYW1lOiAnY2JydCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjYnJ0KHgpJywgJ2NicnQoeCwgYWxsUm9vdHMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViaWMgcm9vdCB2YWx1ZS4gSWYgeCA9IHkgKiB5ICogeSwgdGhlbiB5IGlzIHRoZSBjdWJpYyByb290IG9mIHguIFdoZW4gYHhgIGlzIGEgbnVtYmVyIG9yIGNvbXBsZXggbnVtYmVyLCBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgYGFsbFJvb3RzYCBjYW4gYmUgcHJvdmlkZWQgdG8gcmV0dXJuIGFsbCB0aHJlZSBjdWJpYyByb290cy4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQnLFxuICBleGFtcGxlczogWydjYnJ0KDY0KScsICdjdWJlKDQpJywgJ2NicnQoLTgpJywgJ2NicnQoMiArIDNpKScsICdjYnJ0KDhpKScsICdjYnJ0KDhpLCB0cnVlKScsICdjYnJ0KDI3IG1eMyknXSxcbiAgc2VlYWxzbzogWydzcXVhcmUnLCAnc3FydCcsICdjdWJlJywgJ211bHRpcGx5J11cbn07XG5leHBvcnRzLmNicnREb2NzID0gY2JydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNlaWxEb2NzID0gdm9pZCAwO1xudmFyIGNlaWxEb2NzID0ge1xuICBuYW1lOiAnY2VpbCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjZWlsKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHkuIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuJyxcbiAgZXhhbXBsZXM6IFsnY2VpbCgzLjIpJywgJ2NlaWwoMy44KScsICdjZWlsKC00LjIpJ10sXG4gIHNlZWFsc286IFsnZmxvb3InLCAnZml4JywgJ3JvdW5kJ11cbn07XG5leHBvcnRzLmNlaWxEb2NzID0gY2VpbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmN1YmVEb2NzID0gdm9pZCAwO1xudmFyIGN1YmVEb2NzID0ge1xuICBuYW1lOiAnY3ViZScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjdWJlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLiBUaGUgY3ViZSBvZiB4IGlzIHggKiB4ICogeC4nLFxuICBleGFtcGxlczogWydjdWJlKDIpJywgJzJeMycsICcyICogMiAqIDInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdzcXVhcmUnLCAncG93J11cbn07XG5leHBvcnRzLmN1YmVEb2NzID0gY3ViZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpdmlkZURvY3MgPSB2b2lkIDA7XG52YXIgZGl2aWRlRG9jcyA9IHtcbiAgbmFtZTogJ2RpdmlkZScsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLyB5JywgJ2RpdmlkZSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0RpdmlkZSB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSAyIC8gMycsICdhICogMycsICc0LjUgLyAyJywgJzMgKyA0IC8gMicsICcoMyArIDQpIC8gMicsICcxOCBrbSAvIDQuNSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5J11cbn07XG5leHBvcnRzLmRpdmlkZURvY3MgPSBkaXZpZGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGVEb2NzID0gdm9pZCAwO1xudmFyIGRvdERpdmlkZURvY3MgPSB7XG4gIG5hbWU6ICdkb3REaXZpZGUnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4IC4vIHknLCAnZG90RGl2aWRlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnRGl2aWRlIHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYiA9IFsyLCAxLCAxOyAzLCAyLCA1XScsICdhIC4vIGInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkb3RNdWx0aXBseScsICdkaXZpZGUnXVxufTtcbmV4cG9ydHMuZG90RGl2aWRlRG9jcyA9IGRvdERpdmlkZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5RG9jcyA9IHZvaWQgMDtcbnZhciBkb3RNdWx0aXBseURvY3MgPSB7XG4gIG5hbWU6ICdkb3RNdWx0aXBseScsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLiogeScsICdkb3RNdWx0aXBseSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ011bHRpcGx5IHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYiA9IFsyLCAxLCAxOyAzLCAyLCA1XScsICdhIC4qIGInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkaXZpZGUnLCAnZG90RGl2aWRlJ11cbn07XG5leHBvcnRzLmRvdE11bHRpcGx5RG9jcyA9IGRvdE11bHRpcGx5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90UG93RG9jcyA9IHZvaWQgMDtcbnZhciBkb3RQb3dEb2NzID0ge1xuICBuYW1lOiAnZG90UG93JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAuXiB5JywgJ2RvdFBvdyh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSBlbGVtZW50IHdpc2UuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdhIC5eIDInXSxcbiAgc2VlYWxzbzogWydwb3cnXVxufTtcbmV4cG9ydHMuZG90UG93RG9jcyA9IGRvdFBvd0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cERvY3MgPSB2b2lkIDA7XG52YXIgZXhwRG9jcyA9IHtcbiAgbmFtZTogJ2V4cCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGV4cG9uZW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnZXhwKDEuMyknLCAnZSBeIDEuMycsICdsb2coZXhwKDEuMykpJywgJ3ggPSAyLjQnLCAnKGV4cChpKngpID09IGNvcyh4KSArIGkqc2luKHgpKSAgICMgRXVsZXJcXCdzIGZvcm11bGEnXSxcbiAgc2VlYWxzbzogWydleHBtJywgJ2V4cG0xJywgJ3BvdycsICdsb2cnXVxufTtcbmV4cG9ydHMuZXhwRG9jcyA9IGV4cERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG1Eb2NzID0gdm9pZCAwO1xudmFyIGV4cG1Eb2NzID0ge1xuICBuYW1lOiAnZXhwbScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtYXRyaXggZXhwb25lbnRpYWwsIGV4cG0oQSkgPSBlXkEuICcgKyAnVGhlIG1hdHJpeCBtdXN0IGJlIHNxdWFyZS4gJyArICdOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCBleHAoYSksIHdoaWNoIHBlcmZvcm1zIGVsZW1lbnQtd2lzZSBleHBvbmVudGlhdGlvbi4nLFxuICBleGFtcGxlczogWydleHBtKFtbMCwyXSxbMCwwXV0pJ10sXG4gIHNlZWFsc286IFsnZXhwJ11cbn07XG5leHBvcnRzLmV4cG1Eb2NzID0gZXhwbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG0xRG9jcyA9IHZvaWQgMDtcbnZhciBleHBtMURvY3MgPSB7XG4gIG5hbWU6ICdleHBtMScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHBtMSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgdmFsdWUgb2Ygc3VidHJhY3RpbmcgMSBmcm9tIHRoZSBleHBvbmVudGlhbCB2YWx1ZS4nLFxuICBleGFtcGxlczogWydleHBtMSgyKScsICdwb3coZSwgMikgLSAxJywgJ2xvZyhleHBtMSgyKSArIDEpJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ3BvdycsICdsb2cnXVxufTtcbmV4cG9ydHMuZXhwbTFEb2NzID0gZXhwbTFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maXhEb2NzID0gdm9pZCAwO1xudmFyIGZpeERvY3MgPSB7XG4gIG5hbWU6ICdmaXgnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnZml4KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHplcm8uIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHplcm8uJyxcbiAgZXhhbXBsZXM6IFsnZml4KDMuMiknLCAnZml4KDMuOCknLCAnZml4KC00LjIpJywgJ2ZpeCgtNC44KSddLFxuICBzZWVhbHNvOiBbJ2NlaWwnLCAnZmxvb3InLCAncm91bmQnXVxufTtcbmV4cG9ydHMuZml4RG9jcyA9IGZpeERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsb29yRG9jcyA9IHZvaWQgMDtcbnZhciBmbG9vckRvY3MgPSB7XG4gIG5hbWU6ICdmbG9vcicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydmbG9vcih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JvdW5kIGEgdmFsdWUgdG93YXJkcyBtaW51cyBpbmZpbml0eS5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBtaW51cyBpbmZpbml0eS4nLFxuICBleGFtcGxlczogWydmbG9vcigzLjIpJywgJ2Zsb29yKDMuOCknLCAnZmxvb3IoLTQuMiknXSxcbiAgc2VlYWxzbzogWydjZWlsJywgJ2ZpeCcsICdyb3VuZCddXG59O1xuZXhwb3J0cy5mbG9vckRvY3MgPSBmbG9vckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdjZERvY3MgPSB2b2lkIDA7XG52YXIgZ2NkRG9jcyA9IHtcbiAgbmFtZTogJ2djZCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydnY2QoYSwgYiknLCAnZ2NkKGEsIGIsIGMsIC4uLiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvci4nLFxuICBleGFtcGxlczogWydnY2QoOCwgMTIpJywgJ2djZCgtNCwgNiknLCAnZ2NkKDI1LCAxNSwgLTEwKSddLFxuICBzZWVhbHNvOiBbJ2xjbScsICd4Z2NkJ11cbn07XG5leHBvcnRzLmdjZERvY3MgPSBnY2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oeXBvdERvY3MgPSB2b2lkIDA7XG52YXIgaHlwb3REb2NzID0ge1xuICBuYW1lOiAnaHlwb3QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnaHlwb3QoYSwgYiwgYywgLi4uKScsICdoeXBvdChbYSwgYiwgYywgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiAnLFxuICBleGFtcGxlczogWydoeXBvdCgzLCA0KScsICdzcXJ0KDNeMiArIDReMiknLCAnaHlwb3QoLTIpJywgJ2h5cG90KFszLCA0LCA1XSknXSxcbiAgc2VlYWxzbzogWydhYnMnLCAnbm9ybSddXG59O1xuZXhwb3J0cy5oeXBvdERvY3MgPSBoeXBvdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxjbURvY3MgPSB2b2lkIDA7XG52YXIgbGNtRG9jcyA9IHtcbiAgbmFtZTogJ2xjbScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsY20oeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUuJyxcbiAgZXhhbXBsZXM6IFsnbGNtKDQsIDYpJywgJ2xjbSg2LCAyMSknLCAnbGNtKDYsIDIxLCA1KSddLFxuICBzZWVhbHNvOiBbJ2djZCddXG59O1xuZXhwb3J0cy5sY21Eb2NzID0gbGNtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9nRG9jcyA9IHZvaWQgMDtcbnZhciBsb2dEb2NzID0ge1xuICBuYW1lOiAnbG9nJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ2xvZyh4KScsICdsb2coeCwgYmFzZSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS4gSWYgbm8gYmFzZSBpcyBwcm92aWRlZCwgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHggaXMgY2FsY3VsYXRlZC4gSWYgYmFzZSBpZiBwcm92aWRlZCwgdGhlIGxvZ2FyaXRobSBpcyBjYWxjdWxhdGVkIGZvciB0aGUgc3BlY2lmaWVkIGJhc2UuIGxvZyh4LCBiYXNlKSBpcyBkZWZpbmVkIGFzIGxvZyh4KSAvIGxvZyhiYXNlKS4nLFxuICBleGFtcGxlczogWydsb2coMy41KScsICdhID0gbG9nKDIuNCknLCAnZXhwKGEpJywgJzEwIF4gNCcsICdsb2coMTAwMDAsIDEwKScsICdsb2coMTAwMDApIC8gbG9nKDEwKScsICdiID0gbG9nKDEwMjQsIDIpJywgJzIgXiBiJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ2xvZzFwJywgJ2xvZzInLCAnbG9nMTAnXVxufTtcbmV4cG9ydHMubG9nRG9jcyA9IGxvZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzEwRG9jcyA9IHZvaWQgMDtcbnZhciBsb2cxMERvY3MgPSB7XG4gIG5hbWU6ICdsb2cxMCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2cxMCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnbG9nMTAoMC4wMDAwMSknLCAnbG9nMTAoMTAwMDApJywgJzEwIF4gNCcsICdsb2coMTAwMDApIC8gbG9nKDEwKScsICdsb2coMTAwMDAsIDEwKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnXVxufTtcbmV4cG9ydHMubG9nMTBEb2NzID0gbG9nMTBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxcERvY3MgPSB2b2lkIDA7XG52YXIgbG9nMXBEb2NzID0ge1xuICBuYW1lOiAnbG9nMXAnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbG9nMXAoeCknLCAnbG9nMXAoeCwgYmFzZSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIGB2YWx1ZSsxYCcsXG4gIGV4YW1wbGVzOiBbJ2xvZzFwKDIuNSknLCAnZXhwKGxvZzFwKDEuNCkpJywgJ3BvdygxMCwgNCknLCAnbG9nMXAoOTk5OSwgMTApJywgJ2xvZzFwKDk5OTkpIC8gbG9nKDEwKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnLCAnbG9nMicsICdsb2cxMCddXG59O1xuZXhwb3J0cy5sb2cxcERvY3MgPSBsb2cxcERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzJEb2NzID0gdm9pZCAwO1xudmFyIGxvZzJEb2NzID0ge1xuICBuYW1lOiAnbG9nMicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2cyKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSAyLWJhc2Ugb2YgYSB2YWx1ZS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxjdWxhdGluZyBgbG9nKHgsIDIpYC4nLFxuICBleGFtcGxlczogWydsb2cyKDAuMDMxMjUpJywgJ2xvZzIoMTYpJywgJ2xvZzIoMTYpIC8gbG9nMigyKScsICdwb3coMiwgNCknXSxcbiAgc2VlYWxzbzogWydleHAnLCAnbG9nMXAnLCAnbG9nJywgJ2xvZzEwJ11cbn07XG5leHBvcnRzLmxvZzJEb2NzID0gbG9nMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZERvY3MgPSB2b2lkIDA7XG52YXIgbW9kRG9jcyA9IHtcbiAgbmFtZTogJ21vZCcsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggJSB5JywgJ3ggbW9kIHknLCAnbW9kKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgbW9kdWx1cywgdGhlIHJlbWFpbmRlciBvZiBhbiBpbnRlZ2VyIGRpdmlzaW9uLicsXG4gIGV4YW1wbGVzOiBbJzcgJSAzJywgJzExICUgMicsICcxMCBtb2QgNCcsICdpc09kZCh4KSA9IHggJSAyJywgJ2lzT2RkKDIpJywgJ2lzT2RkKDMpJ10sXG4gIHNlZWFsc286IFsnZGl2aWRlJ11cbn07XG5leHBvcnRzLm1vZERvY3MgPSBtb2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aXBseURvY3MgPSB2b2lkIDA7XG52YXIgbXVsdGlwbHlEb2NzID0ge1xuICBuYW1lOiAnbXVsdGlwbHknLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICogeScsICdtdWx0aXBseSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ211bHRpcGx5IHR3byB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IDIuMSAqIDMuNCcsICdhIC8gMy40JywgJzIgKiAzICsgNCcsICcyICogKDMgKyA0KScsICczICogMi4xIGttJ10sXG4gIHNlZWFsc286IFsnZGl2aWRlJ11cbn07XG5leHBvcnRzLm11bHRpcGx5RG9jcyA9IG11bHRpcGx5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubm9ybURvY3MgPSB2b2lkIDA7XG52YXIgbm9ybURvY3MgPSB7XG4gIG5hbWU6ICdub3JtJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ25vcm0oeCknLCAnbm9ybSh4LCBwKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgbm9ybSBvZiBhIG51bWJlciwgdmVjdG9yIG9yIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydhYnMoLTMuNSknLCAnbm9ybSgtMy41KScsICdub3JtKDMgLSA0aSknLCAnbm9ybShbMSwgMiwgLTNdLCBJbmZpbml0eSknLCAnbm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpJywgJ25vcm0oWzMsIDRdLCAyKScsICdub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpJywgJ25vcm0oW1sxLCAyXSwgWzMsIDRdXSwgXCJpbmZcIiknLCAnbm9ybShbWzEsIDJdLCBbMywgNF1dLCBcImZyb1wiKSddXG59O1xuZXhwb3J0cy5ub3JtRG9jcyA9IG5vcm1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290RG9jcyA9IHZvaWQgMDtcbnZhciBudGhSb290RG9jcyA9IHtcbiAgbmFtZTogJ250aFJvb3QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbnRoUm9vdChhKScsICdudGhSb290KGEsIHJvb3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLiAnICsgJ1RoZSBwcmluY2lwYWwgbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCAnICsgJ2lzIHRoZSBwb3NpdGl2ZSByZWFsIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvbiBcInhecm9vdCA9IEFcIi4nLFxuICBleGFtcGxlczogWyc0IF4gMycsICdudGhSb290KDY0LCAzKScsICdudGhSb290KDksIDIpJywgJ3NxcnQoOSknXSxcbiAgc2VlYWxzbzogWydudGhSb290cycsICdwb3cnLCAnc3FydCddXG59O1xuZXhwb3J0cy5udGhSb290RG9jcyA9IG50aFJvb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290c0RvY3MgPSB2b2lkIDA7XG52YXIgbnRoUm9vdHNEb2NzID0ge1xuICBuYW1lOiAnbnRoUm9vdHMnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbnRoUm9vdHMoQSknLCAnbnRoUm9vdHMoQSwgcm9vdCknXSxcbiAgZGVzY3JpcHRpb246ICcnICsgJ0NhbGN1bGF0ZSB0aGUgbnRoIHJvb3RzIG9mIGEgdmFsdWUuICcgKyAnQW4gbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCAnICsgJ2lzIGEgcG9zaXRpdmUgcmVhbCBzb2x1dGlvbiBvZiB0aGUgZXF1YXRpb24gXCJ4XnJvb3QgPSBBXCIuICcgKyAnVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGNvbXBsZXggdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ250aFJvb3RzKDEpJywgJ250aFJvb3RzKDEsIDMpJ10sXG4gIHNlZWFsc286IFsnc3FydCcsICdwb3cnLCAnbnRoUm9vdCddXG59O1xuZXhwb3J0cy5udGhSb290c0RvY3MgPSBudGhSb290c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBvd0RvY3MgPSB2b2lkIDA7XG52YXIgcG93RG9jcyA9IHtcbiAgbmFtZTogJ3BvdycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggXiB5JywgJ3Bvdyh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgeF55LicsXG4gIGV4YW1wbGVzOiBbJzJeMycsICcyKjIqMicsICcxICsgZSBeIChwaSAqIGkpJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnbnRoUm9vdCcsICdudGhSb290cycsICdzcXJ0J11cbn07XG5leHBvcnRzLnBvd0RvY3MgPSBwb3dEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3VuZERvY3MgPSB2b2lkIDA7XG52YXIgcm91bmREb2NzID0ge1xuICBuYW1lOiAncm91bmQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsncm91bmQoeCknLCAncm91bmQoeCwgbiknXSxcbiAgZGVzY3JpcHRpb246ICdyb3VuZCBhIHZhbHVlIHRvd2FyZHMgdGhlIG5lYXJlc3QgaW50ZWdlci5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLiBXaGVuIG4gaXMgc3BlY2lmaWVkLCB0aGUgdmFsdWUgaXMgcm91bmRlZCB0byBuIGRlY2ltYWxzLicsXG4gIGV4YW1wbGVzOiBbJ3JvdW5kKDMuMiknLCAncm91bmQoMy44KScsICdyb3VuZCgtNC4yKScsICdyb3VuZCgtNC44KScsICdyb3VuZChwaSwgMyknLCAncm91bmQoMTIzLjQ1Njc4LCAyKSddLFxuICBzZWVhbHNvOiBbJ2NlaWwnLCAnZmxvb3InLCAnZml4J11cbn07XG5leHBvcnRzLnJvdW5kRG9jcyA9IHJvdW5kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2lnbkRvY3MgPSB2b2lkIDA7XG52YXIgc2lnbkRvY3MgPSB7XG4gIG5hbWU6ICdzaWduJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NpZ24oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzaWduIG9mIGEgdmFsdWUuIFRoZSBzaWduIG9mIGEgdmFsdWUgeCBpcyAxIHdoZW4geD4xLCAtMSB3aGVuIHg8MCwgYW5kIDAgd2hlbiB4PTAuJyxcbiAgZXhhbXBsZXM6IFsnc2lnbigzLjUpJywgJ3NpZ24oLTQuMiknLCAnc2lnbigwKSddLFxuICBzZWVhbHNvOiBbJ2FicyddXG59O1xuZXhwb3J0cy5zaWduRG9jcyA9IHNpZ25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0RG9jcyA9IHZvaWQgMDtcbnZhciBzcXJ0RG9jcyA9IHtcbiAgbmFtZTogJ3NxcnQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnc3FydCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSByb290IHZhbHVlLiBJZiB4ID0geSAqIHksIHRoZW4geSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgeC4nLFxuICBleGFtcGxlczogWydzcXJ0KDI1KScsICc1ICogNScsICdzcXJ0KC0xKSddLFxuICBzZWVhbHNvOiBbJ3NxdWFyZScsICdzcXJ0bScsICdtdWx0aXBseScsICdudGhSb290JywgJ250aFJvb3RzJywgJ3BvdyddXG59O1xuZXhwb3J0cy5zcXJ0RG9jcyA9IHNxcnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0bURvY3MgPSB2b2lkIDA7XG52YXIgc3FydG1Eb2NzID0ge1xuICBuYW1lOiAnc3FydG0nLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnc3FydG0oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBhIHNxdWFyZSBtYXRyaXguIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3QgbWF0cml4IGBYYCBvZiBhbm90aGVyIG1hdHJpeCBgQWAgaXMgc3VjaCB0aGF0IGBYICogWCA9IEFgLicsXG4gIGV4YW1wbGVzOiBbJ3NxcnRtKFtbMSwgMl0sIFszLCA0XV0pJ10sXG4gIHNlZWFsc286IFsnc3FydCcsICdhYnMnLCAnc3F1YXJlJywgJ211bHRpcGx5J11cbn07XG5leHBvcnRzLnNxcnRtRG9jcyA9IHNxcnRtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3F1YXJlRG9jcyA9IHZvaWQgMDtcbnZhciBzcXVhcmVEb2NzID0ge1xuICBuYW1lOiAnc3F1YXJlJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NxdWFyZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLiBUaGUgc3F1YXJlIG9mIHggaXMgeCAqIHguJyxcbiAgZXhhbXBsZXM6IFsnc3F1YXJlKDMpJywgJ3NxcnQoOSknLCAnM14yJywgJzMgKiAzJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAncG93JywgJ3NxcnQnLCAnY3ViZSddXG59O1xuZXhwb3J0cy5zcXVhcmVEb2NzID0gc3F1YXJlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VidHJhY3REb2NzID0gdm9pZCAwO1xudmFyIHN1YnRyYWN0RG9jcyA9IHtcbiAgbmFtZTogJ3N1YnRyYWN0JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAtIHknLCAnc3VidHJhY3QoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdzdWJ0cmFjdCB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSA1LjMgLSAyJywgJ2EgKyAyJywgJzIvMyAtIDEvNicsICcyICogMyAtIDMnLCAnMi4xIGttIC0gNTAwbSddLFxuICBzZWVhbHNvOiBbJ2FkZCddXG59O1xuZXhwb3J0cy5zdWJ0cmFjdERvY3MgPSBzdWJ0cmFjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5TWludXNEb2NzID0gdm9pZCAwO1xudmFyIHVuYXJ5TWludXNEb2NzID0ge1xuICBuYW1lOiAndW5hcnlNaW51cycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJy14JywgJ3VuYXJ5TWludXMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUuIENvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuJyxcbiAgZXhhbXBsZXM6IFsnLTQuNScsICctKC01LjYpJywgJy1cIjIyXCInXSxcbiAgc2VlYWxzbzogWydhZGQnLCAnc3VidHJhY3QnLCAndW5hcnlQbHVzJ11cbn07XG5leHBvcnRzLnVuYXJ5TWludXNEb2NzID0gdW5hcnlNaW51c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5UGx1c0RvY3MgPSB2b2lkIDA7XG52YXIgdW5hcnlQbHVzRG9jcyA9IHtcbiAgbmFtZTogJ3VuYXJ5UGx1cycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJyt4JywgJ3VuYXJ5UGx1cyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuJyxcbiAgZXhhbXBsZXM6IFsnK3RydWUnLCAnK1wiMlwiJ10sXG4gIHNlZWFsc286IFsnYWRkJywgJ3N1YnRyYWN0JywgJ3VuYXJ5TWludXMnXVxufTtcbmV4cG9ydHMudW5hcnlQbHVzRG9jcyA9IHVuYXJ5UGx1c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhnY2REb2NzID0gdm9pZCAwO1xudmFyIHhnY2REb2NzID0ge1xuICBuYW1lOiAneGdjZCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWyd4Z2NkKGEsIGIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy4gVGhlIHJlc3VsdCBpcyBhbiBhcnJheSBbZCwgeCwgeV0gd2l0aCAzIGVudHJpZXMsIHdoZXJlIGQgaXMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yLCBhbmQgZCA9IHggKiBhICsgeSAqIGIuJyxcbiAgZXhhbXBsZXM6IFsneGdjZCg4LCAxMiknLCAnZ2NkKDgsIDEyKScsICd4Z2NkKDM2MTYzLCAyMTE5OSknXSxcbiAgc2VlYWxzbzogWydnY2QnLCAnbGNtJ11cbn07XG5leHBvcnRzLnhnY2REb2NzID0geGdjZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZERvY3MgPSB2b2lkIDA7XG52YXIgYml0QW5kRG9jcyA9IHtcbiAgbmFtZTogJ2JpdEFuZCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4ICYgeScsICdiaXRBbmQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIEFORCBvcGVyYXRpb24uIFBlcmZvcm1zIHRoZSBsb2dpY2FsIEFORCBvcGVyYXRpb24gb24gZWFjaCBwYWlyIG9mIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcgdGhlbS4gSWYgYm90aCBiaXRzIGluIHRoZSBjb21wYXJlZCBwb3NpdGlvbiBhcmUgMSwgdGhlIGJpdCBpbiB0aGUgcmVzdWx0aW5nIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyAxLCBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgMCcsXG4gIGV4YW1wbGVzOiBbJzUgJiAzJywgJ2JpdEFuZCg1MywgMTMxKScsICdbMSwgMTIsIDMxXSAmIDQyJ10sXG4gIHNlZWFsc286IFsnYml0Tm90JywgJ2JpdE9yJywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0QW5kRG9jcyA9IGJpdEFuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE5vdERvY3MgPSB2b2lkIDA7XG52YXIgYml0Tm90RG9jcyA9IHtcbiAgbmFtZTogJ2JpdE5vdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd+eCcsICdiaXROb3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIE5PVCBvcGVyYXRpb24uIFBlcmZvcm1zIGEgbG9naWNhbCBuZWdhdGlvbiBvbiBlYWNoIGJpdCBvZiB0aGUgZ2l2ZW4gdmFsdWUuIEJpdHMgdGhhdCBhcmUgMCBiZWNvbWUgMSwgYW5kIHRob3NlIHRoYXQgYXJlIDEgYmVjb21lIDAuJyxcbiAgZXhhbXBsZXM6IFsnfjEnLCAnfjInLCAnYml0Tm90KFsyLCAtMywgNF0pJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE9yJywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0Tm90RG9jcyA9IGJpdE5vdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE9yRG9jcyA9IHZvaWQgMDtcbnZhciBiaXRPckRvY3MgPSB7XG4gIG5hbWU6ICdiaXRPcicsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4IHwgeScsICdiaXRPcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgT1Igb3BlcmF0aW9uLiBQZXJmb3JtcyB0aGUgbG9naWNhbCBpbmNsdXNpdmUgT1Igb3BlcmF0aW9uIG9uIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMuIFRoZSByZXN1bHQgaW4gZWFjaCBwb3NpdGlvbiBpcyAxIGlmIHRoZSBmaXJzdCBiaXQgaXMgMSBvciB0aGUgc2Vjb25kIGJpdCBpcyAxIG9yIGJvdGggYml0cyBhcmUgMSwgb3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIDAuJyxcbiAgZXhhbXBsZXM6IFsnNSB8IDMnLCAnYml0T3IoWzEsIDIsIDNdLCA0KSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0WG9yJywgJ2xlZnRTaGlmdCcsICdyaWdodEFyaXRoU2hpZnQnLCAncmlnaHRMb2dTaGlmdCddXG59O1xuZXhwb3J0cy5iaXRPckRvY3MgPSBiaXRPckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdFhvckRvY3MgPSB2b2lkIDA7XG52YXIgYml0WG9yRG9jcyA9IHtcbiAgbmFtZTogJ2JpdFhvcicsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWydiaXRYb3IoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIFhPUiBvcGVyYXRpb24sIGV4Y2x1c2l2ZSBPUi4gUGVyZm9ybXMgdGhlIGxvZ2ljYWwgZXhjbHVzaXZlIE9SIG9wZXJhdGlvbiBvbiBlYWNoIHBhaXIgb2YgY29ycmVzcG9uZGluZyBiaXRzIG9mIHRoZSB0d28gZ2l2ZW4gdmFsdWVzLiBUaGUgcmVzdWx0IGluIGVhY2ggcG9zaXRpb24gaXMgMSBpZiBvbmx5IHRoZSBmaXJzdCBiaXQgaXMgMSBvciBvbmx5IHRoZSBzZWNvbmQgYml0IGlzIDEsIGJ1dCB3aWxsIGJlIDAgaWYgYm90aCBhcmUgMCBvciBib3RoIGFyZSAxLicsXG4gIGV4YW1wbGVzOiBbJ2JpdE9yKDEsIDIpJywgJ2JpdFhvcihbMiwgMywgNF0sIDQpJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0WG9yRG9jcyA9IGJpdFhvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxlZnRTaGlmdERvY3MgPSB2b2lkIDA7XG52YXIgbGVmdFNoaWZ0RG9jcyA9IHtcbiAgbmFtZTogJ2xlZnRTaGlmdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4IDw8IHknLCAnbGVmdFNoaWZ0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQml0d2lzZSBsZWZ0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnNCA8PCAxJywgJzggPj4gMSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0T3InLCAnYml0WG9yJywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J11cbn07XG5leHBvcnRzLmxlZnRTaGlmdERvY3MgPSBsZWZ0U2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yaWdodEFyaXRoU2hpZnREb2NzID0gdm9pZCAwO1xudmFyIHJpZ2h0QXJpdGhTaGlmdERvY3MgPSB7XG4gIG5hbWU6ICdyaWdodEFyaXRoU2hpZnQnLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsneCA+PiB5JywgJ3JpZ2h0QXJpdGhTaGlmdCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cy4nLFxuICBleGFtcGxlczogWyc4ID4+IDEnLCAnNCA8PCAxJywgJy0xMiA+PiAyJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RG9jcyA9IHJpZ2h0QXJpdGhTaGlmdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJpZ2h0TG9nU2hpZnREb2NzID0gdm9pZCAwO1xudmFyIHJpZ2h0TG9nU2hpZnREb2NzID0ge1xuICBuYW1lOiAncmlnaHRMb2dTaGlmdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4ID4+PiB5JywgJ3JpZ2h0TG9nU2hpZnQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIHJpZ2h0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnOCA+Pj4gMScsICc0IDw8IDEnLCAnLTEyID4+PiAyJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCddXG59O1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RG9jcyA9IHJpZ2h0TG9nU2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iZWxsTnVtYmVyc0RvY3MgPSB2b2lkIDA7XG52YXIgYmVsbE51bWJlcnNEb2NzID0ge1xuICBuYW1lOiAnYmVsbE51bWJlcnMnLFxuICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLFxuICBzeW50YXg6IFsnYmVsbE51bWJlcnMobiknXSxcbiAgZGVzY3JpcHRpb246ICdUaGUgQmVsbCBOdW1iZXJzIGNvdW50IHRoZSBudW1iZXIgb2YgcGFydGl0aW9ucyBvZiBhIHNldC4gQSBwYXJ0aXRpb24gaXMgYSBwYWlyd2lzZSBkaXNqb2ludCBzdWJzZXQgb2YgUyB3aG9zZSB1bmlvbiBpcyBTLiBgYmVsbE51bWJlcnNgIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IG4gPj0gMC4nLFxuICBleGFtcGxlczogWydiZWxsTnVtYmVycygzKScsICdiZWxsTnVtYmVycyg4KSddLFxuICBzZWVhbHNvOiBbJ3N0aXJsaW5nUzInXVxufTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEb2NzID0gYmVsbE51bWJlcnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYXRhbGFuRG9jcyA9IHZvaWQgMDtcbnZhciBjYXRhbGFuRG9jcyA9IHtcbiAgbmFtZTogJ2NhdGFsYW4nLFxuICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLFxuICBzeW50YXg6IFsnY2F0YWxhbihuKSddLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy4gY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDAuJyxcbiAgZXhhbXBsZXM6IFsnY2F0YWxhbigzKScsICdjYXRhbGFuKDgpJ10sXG4gIHNlZWFsc286IFsnYmVsbE51bWJlcnMnXVxufTtcbmV4cG9ydHMuY2F0YWxhbkRvY3MgPSBjYXRhbGFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb25Eb2NzID0gdm9pZCAwO1xudmFyIGNvbXBvc2l0aW9uRG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBvc2l0aW9uJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ2NvbXBvc2l0aW9uKG4sIGspJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy4gY29tcG9zaXRpb24gb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBvc2l0aW9uKDUsIDMpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJ11cbn07XG5leHBvcnRzLmNvbXBvc2l0aW9uRG9jcyA9IGNvbXBvc2l0aW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRvY3MgPSB2b2lkIDA7XG52YXIgc3RpcmxpbmdTMkRvY3MgPSB7XG4gIG5hbWU6ICdzdGlybGluZ1MyJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ3N0aXJsaW5nUzIobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdoZSBTdGlybGluZyBudW1iZXJzIG9mIHRoZSBzZWNvbmQga2luZCwgY291bnRzIHRoZSBudW1iZXIgb2Ygd2F5cyB0byBwYXJ0aXRpb24gYSBzZXQgb2YgbiBsYWJlbGxlZCBvYmplY3RzIGludG8gayBub25lbXB0eSB1bmxhYmVsbGVkIHN1YnNldHMuIGBzdGlybGluZ1MyYCBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4uIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDEuJyxcbiAgZXhhbXBsZXM6IFsnc3RpcmxpbmdTMig1LCAzKSddLFxuICBzZWVhbHNvOiBbJ2JlbGxOdW1iZXJzJ11cbn07XG5leHBvcnRzLnN0aXJsaW5nUzJEb2NzID0gc3RpcmxpbmdTMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFyZ0RvY3MgPSB2b2lkIDA7XG52YXIgYXJnRG9jcyA9IHtcbiAgbmFtZTogJ2FyZycsXG4gIGNhdGVnb3J5OiAnQ29tcGxleCcsXG4gIHN5bnRheDogWydhcmcoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYXRhbjIoYiwgYSkuJyxcbiAgZXhhbXBsZXM6IFsnYXJnKDIgKyAyaSknLCAnYXRhbjIoMywgMiknLCAnYXJnKDIgKyAzaSknXSxcbiAgc2VlYWxzbzogWydyZScsICdpbScsICdjb25qJywgJ2FicyddXG59O1xuZXhwb3J0cy5hcmdEb2NzID0gYXJnRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uakRvY3MgPSB2b2lkIDA7XG52YXIgY29uakRvY3MgPSB7XG4gIG5hbWU6ICdjb25qJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ2NvbmooeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgY29tcGxleCBjb25qdWdhdGUgaXMgYS1iaS4nLFxuICBleGFtcGxlczogWydjb25qKDIgKyAzaSknLCAnY29uaigyIC0gM2kpJywgJ2NvbmooLTUuMmkpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnaW0nLCAnYWJzJywgJ2FyZyddXG59O1xuZXhwb3J0cy5jb25qRG9jcyA9IGNvbmpEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbURvY3MgPSB2b2lkIDA7XG52YXIgaW1Eb2NzID0ge1xuICBuYW1lOiAnaW0nLFxuICBjYXRlZ29yeTogJ0NvbXBsZXgnLFxuICBzeW50YXg6IFsnaW0oeCknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsnaW0oMiArIDNpKScsICdyZSgyICsgM2kpJywgJ2ltKC01LjJpKScsICdpbSgyLjQpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnY29uaicsICdhYnMnLCAnYXJnJ11cbn07XG5leHBvcnRzLmltRG9jcyA9IGltRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVEb2NzID0gdm9pZCAwO1xudmFyIHJlRG9jcyA9IHtcbiAgbmFtZTogJ3JlJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ3JlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlci4nLFxuICBleGFtcGxlczogWydyZSgyICsgM2kpJywgJ2ltKDIgKyAzaSknLCAncmUoLTUuMmkpJywgJ3JlKDIuNCknXSxcbiAgc2VlYWxzbzogWydpbScsICdjb25qJywgJ2FicycsICdhcmcnXVxufTtcbmV4cG9ydHMucmVEb2NzID0gcmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZURvY3MgPSB2b2lkIDA7XG52YXIgZXZhbHVhdGVEb2NzID0ge1xuICBuYW1lOiAnZXZhbHVhdGUnLFxuICBjYXRlZ29yeTogJ0V4cHJlc3Npb24nLFxuICBzeW50YXg6IFsnZXZhbHVhdGUoZXhwcmVzc2lvbiknLCAnZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnRXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBvciBhbiBhcnJheSB3aXRoIGV4cHJlc3Npb25zLicsXG4gIGV4YW1wbGVzOiBbJ2V2YWx1YXRlKFwiMiArIDNcIiknLCAnZXZhbHVhdGUoXCJzcXJ0KFwiICsgNCArIFwiKVwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZXZhbHVhdGVEb2NzID0gZXZhbHVhdGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oZWxwRG9jcyA9IHZvaWQgMDtcbnZhciBoZWxwRG9jcyA9IHtcbiAgbmFtZTogJ2hlbHAnLFxuICBjYXRlZ29yeTogJ0V4cHJlc3Npb24nLFxuICBzeW50YXg6IFsnaGVscChvYmplY3QpJywgJ2hlbHAoc3RyaW5nKSddLFxuICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXkgZG9jdW1lbnRhdGlvbiBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS4nLFxuICBleGFtcGxlczogWydoZWxwKHNxcnQpJywgJ2hlbHAoXCJjb21wbGV4XCIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5oZWxwRG9jcyA9IGhlbHBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXN0YW5jZURvY3MgPSB2b2lkIDA7XG52YXIgZGlzdGFuY2VEb2NzID0ge1xuICBuYW1lOiAnZGlzdGFuY2UnLFxuICBjYXRlZ29yeTogJ0dlb21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Rpc3RhbmNlKFt4MSwgeTFdLCBbeDIsIHkyXSknLCAnZGlzdGFuY2UoW1t4MSwgeTFdLCBbeDIsIHkyXV0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50cy4nLFxuICBleGFtcGxlczogWydkaXN0YW5jZShbMCwwXSwgWzQsNF0pJywgJ2Rpc3RhbmNlKFtbMCwwXSwgWzQsNF1dKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZGlzdGFuY2VEb2NzID0gZGlzdGFuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbnRlcnNlY3REb2NzID0gdm9pZCAwO1xudmFyIGludGVyc2VjdERvY3MgPSB7XG4gIG5hbWU6ICdpbnRlcnNlY3QnLFxuICBjYXRlZ29yeTogJ0dlb21ldHJ5JyxcbiAgc3ludGF4OiBbJ2ludGVyc2VjdChleHByMSwgZXhwcjIsIGV4cHIzLCBleHByNCknLCAnaW50ZXJzZWN0KGV4cHIxLCBleHByMiwgZXhwcjMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIGludGVyc2VjdGlvbiBwb2ludCBvZiBsaW5lcyBhbmQvb3IgcGxhbmVzLicsXG4gIGV4YW1wbGVzOiBbJ2ludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKScsICdpbnRlcnNlY3QoWzEsIDAsIDFdLCAgWzQsIC0yLCAyXSwgWzEsIDEsIDEsIDZdKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaW50ZXJzZWN0RG9jcyA9IGludGVyc2VjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFuZERvY3MgPSB2b2lkIDA7XG52YXIgYW5kRG9jcyA9IHtcbiAgbmFtZTogJ2FuZCcsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IGFuZCB5JywgJ2FuZCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgYW5kLiBUZXN0IHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgYm90aCBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ3RydWUgYW5kIGZhbHNlJywgJ3RydWUgYW5kIHRydWUnLCAnMiBhbmQgNCddLFxuICBzZWVhbHNvOiBbJ25vdCcsICdvcicsICd4b3InXVxufTtcbmV4cG9ydHMuYW5kRG9jcyA9IGFuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vdERvY3MgPSB2b2lkIDA7XG52YXIgbm90RG9jcyA9IHtcbiAgbmFtZTogJ25vdCcsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWydub3QgeCcsICdub3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdMb2dpY2FsIG5vdC4gRmxpcHMgdGhlIGJvb2xlYW4gdmFsdWUgb2YgZ2l2ZW4gYXJndW1lbnQuJyxcbiAgZXhhbXBsZXM6IFsnbm90IHRydWUnLCAnbm90IGZhbHNlJywgJ25vdCAyJywgJ25vdCAwJ10sXG4gIHNlZWFsc286IFsnYW5kJywgJ29yJywgJ3hvciddXG59O1xuZXhwb3J0cy5ub3REb2NzID0gbm90RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub3JEb2NzID0gdm9pZCAwO1xudmFyIG9yRG9jcyA9IHtcbiAgbmFtZTogJ29yJyxcbiAgY2F0ZWdvcnk6ICdMb2dpY2FsJyxcbiAgc3ludGF4OiBbJ3ggb3IgeScsICdvcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgb3IuIFRlc3QgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSBvciBmYWxzZScsICdmYWxzZSBvciBmYWxzZScsICcwIG9yIDQnXSxcbiAgc2VlYWxzbzogWydub3QnLCAnYW5kJywgJ3hvciddXG59O1xuZXhwb3J0cy5vckRvY3MgPSBvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhvckRvY3MgPSB2b2lkIDA7XG52YXIgeG9yRG9jcyA9IHtcbiAgbmFtZTogJ3hvcicsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IHhvciB5JywgJ3hvcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgZXhjbHVzaXZlIG9yLCB4b3IuIFRlc3Qgd2hldGhlciBvbmUgYW5kIG9ubHkgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSB4b3IgZmFsc2UnLCAnZmFsc2UgeG9yIGZhbHNlJywgJ3RydWUgeG9yIHRydWUnLCAnMCB4b3IgNCddLFxuICBzZWVhbHNvOiBbJ25vdCcsICdhbmQnLCAnb3InXVxufTtcbmV4cG9ydHMueG9yRG9jcyA9IHhvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtbkRvY3MgPSB2b2lkIDA7XG52YXIgY29sdW1uRG9jcyA9IHtcbiAgbmFtZTogJ2NvbHVtbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2NvbHVtbih4LCBpbmRleCknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIG1hdHJpeCBvciBhcnJheS4nLFxuICBleGFtcGxlczogWydBID0gW1sxLCAyXSwgWzMsIDRdXScsICdjb2x1bW4oQSwgMSknLCAnY29sdW1uKEEsIDIpJ10sXG4gIHNlZWFsc286IFsncm93J11cbn07XG5leHBvcnRzLmNvbHVtbkRvY3MgPSBjb2x1bW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXREb2NzID0gdm9pZCAwO1xudmFyIGNvbmNhdERvY3MgPSB7XG4gIG5hbWU6ICdjb25jYXQnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydjb25jYXQoQSwgQiwgQywgLi4uKScsICdjb25jYXQoQSwgQiwgQywgLi4uLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29uY2F0ZW5hdGUgbWF0cmljZXMuIEJ5IGRlZmF1bHQsIHRoZSBtYXRyaWNlcyBhcmUgY29uY2F0ZW5hdGVkIGJ5IHRoZSBsYXN0IGRpbWVuc2lvbi4gVGhlIGRpbWVuc2lvbiBvbiB3aGljaCB0byBjb25jYXRlbmF0ZSBjYW4gYmUgcHJvdmlkZWQgYXMgbGFzdCBhcmd1bWVudC4nLFxuICBleGFtcGxlczogWydBID0gWzEsIDI7IDUsIDZdJywgJ0IgPSBbMywgNDsgNywgOF0nLCAnY29uY2F0KEEsIEIpJywgJ2NvbmNhdChBLCBCLCAxKScsICdjb25jYXQoQSwgQiwgMiknXSxcbiAgc2VlYWxzbzogWydkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5jb25jYXREb2NzID0gY29uY2F0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3Jvc3NEb2NzID0gdm9pZCAwO1xudmFyIGNyb3NzRG9jcyA9IHtcbiAgbmFtZTogJ2Nyb3NzJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnY3Jvc3MoQSwgQiknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byB2ZWN0b3JzIGluIHRocmVlIGRpbWVuc2lvbmFsIHNwYWNlLicsXG4gIGV4YW1wbGVzOiBbJ2Nyb3NzKFsxLCAxLCAwXSwgIFswLCAxLCAxXSknLCAnY3Jvc3MoWzMsIC0zLCAxXSwgWzQsIDksIDJdKScsICdjcm9zcyhbMiwgMywgNF0sICBbNSwgNiwgN10pJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnZG90J11cbn07XG5leHBvcnRzLmNyb3NzRG9jcyA9IGNyb3NzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZURvY3MgPSB2b2lkIDA7XG52YXIgY3RyYW5zcG9zZURvY3MgPSB7XG4gIG5hbWU6ICdjdHJhbnNwb3NlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsneFxcJycsICdjdHJhbnNwb3NlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGxleCBDb25qdWdhdGUgYW5kIFRyYW5zcG9zZSBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYVxcJycsICdjdHJhbnNwb3NlKGEpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuY3RyYW5zcG9zZURvY3MgPSBjdHJhbnNwb3NlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGV0RG9jcyA9IHZvaWQgMDtcbnZhciBkZXREb2NzID0ge1xuICBuYW1lOiAnZGV0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZGV0KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2RldChbMSwgMjsgMywgNF0pJywgJ2RldChbLTIsIDIsIDM7IC0xLCAxLCAzOyAyLCAwLCAtMV0pJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuZGV0RG9jcyA9IGRldERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpYWdEb2NzID0gdm9pZCAwO1xudmFyIGRpYWdEb2NzID0ge1xuICBuYW1lOiAnZGlhZycsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RpYWcoeCknLCAnZGlhZyh4LCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXguIFdoZW4geCBpcyBhIHZlY3RvciwgYSBtYXRyaXggd2l0aCB0aGUgdmVjdG9yIHZhbHVlcyBvbiB0aGUgZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZC4gV2hlbiB4IGlzIGEgbWF0cml4LCBhIHZlY3RvciB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMgb2YgdGhlIG1hdHJpeCBpcyByZXR1cm5lZC4gV2hlbiBrIGlzIHByb3ZpZGVkLCB0aGUgay10aCBkaWFnb25hbCB3aWxsIGJlIGZpbGxlZCBpbiBvciByZXRyaWV2ZWQsIGlmIGsgaXMgcG9zaXRpdmUsIHRoZSB2YWx1ZXMgYXJlIHBsYWNlZCBvbiB0aGUgc3VwZXIgZGlhZ29uYWwuIFdoZW4gayBpcyBuZWdhdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdWIgZGlhZ29uYWwuJyxcbiAgZXhhbXBsZXM6IFsnZGlhZygxOjMpJywgJ2RpYWcoMTozLCAxKScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDY7IDcsIDgsIDldJywgJ2RpYWcoYSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmRpYWdEb2NzID0gZGlhZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERvY3MgPSB2b2lkIDA7XG52YXIgZG90RG9jcyA9IHtcbiAgbmFtZTogJ2RvdCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RvdChBLCBCKScsICdBICogQiddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMuICcgKyAnVGhlIGRvdCBwcm9kdWN0IG9mIEEgPSBbYTEsIGEyLCBhMywgLi4uLCBhbl0gYW5kIEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl0gJyArICdpcyBkZWZpbmVkIGFzIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm4nLFxuICBleGFtcGxlczogWydkb3QoWzIsIDQsIDFdLCBbMiwgMiwgM10pJywgJ1syLCA0LCAxXSAqIFsyLCAyLCAzXSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2Nyb3NzJ11cbn07XG5leHBvcnRzLmRvdERvY3MgPSBkb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5laWdzRG9jcyA9IHZvaWQgMDtcbnZhciBlaWdzRG9jcyA9IHtcbiAgbmFtZTogJ2VpZ3MnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydlaWdzKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBlaWdlbnZhbHVlcyBhbmQgZWlnZW52ZWN0b3JzIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnZWlncyhbWzUsIDIuM10sIFsyLjMsIDFdXSknXSxcbiAgc2VlYWxzbzogWydpbnYnXVxufTtcbmV4cG9ydHMuZWlnc0RvY3MgPSBlaWdzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlsdGVyRG9jcyA9IHZvaWQgMDtcbnZhciBmaWx0ZXJEb2NzID0ge1xuICBuYW1lOiAnZmlsdGVyJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZmlsdGVyKHgsIHRlc3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGl0ZW1zIGluIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoeCkgPSB4ID4gMCcsICdmaWx0ZXIoWzYsIC0yLCAtMSwgNCwgM10sIGlzUG9zaXRpdmUpJywgJ2ZpbHRlcihbNiwgLTIsIDAsIDEsIDBdLCB4ICE9IDApJ10sXG4gIHNlZWFsc286IFsnc29ydCcsICdtYXAnLCAnZm9yRWFjaCddXG59O1xuZXhwb3J0cy5maWx0ZXJEb2NzID0gZmlsdGVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmxhdHRlbkRvY3MgPSB2b2lkIDA7XG52YXIgZmxhdHRlbkRvY3MgPSB7XG4gIG5hbWU6ICdmbGF0dGVuJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZmxhdHRlbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaXggaW50byBhIHNpbmdsZSBkaW1lbnNpb25hbCBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdzaXplKGEpJywgJ2IgPSBmbGF0dGVuKGEpJywgJ3NpemUoYiknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAncmVzaXplJywgJ3NpemUnLCAnc3F1ZWV6ZSddXG59O1xuZXhwb3J0cy5mbGF0dGVuRG9jcyA9IGZsYXR0ZW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JFYWNoRG9jcyA9IHZvaWQgMDtcbnZhciBmb3JFYWNoRG9jcyA9IHtcbiAgbmFtZTogJ2ZvckVhY2gnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydmb3JFYWNoKHgsIGNhbGxiYWNrKSddLFxuICBkZXNjcmlwdGlvbjogJ0l0ZXJhdGVzIG92ZXIgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4L2FycmF5LCBhbmQgZXhlY3V0ZXMgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2ZvckVhY2goWzEsIDIsIDNdLCBmdW5jdGlvbih2YWwpIHsgY29uc29sZS5sb2codmFsKSB9KSddLFxuICBzZWVhbHNvOiBbJ21hcCcsICdzb3J0JywgJ2ZpbHRlciddXG59O1xuZXhwb3J0cy5mb3JFYWNoRG9jcyA9IGZvckVhY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURvY3MgPSB2b2lkIDA7XG52YXIgZ2V0TWF0cml4RGF0YVR5cGVEb2NzID0ge1xuICBuYW1lOiAnZ2V0TWF0cml4RGF0YVR5cGUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydnZXRNYXRyaXhEYXRhVHlwZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksICcgKyAnZm9yIGV4YW1wbGUgXCJudW1iZXJcIiBpZiBhbGwgaXRlbXMgYXJlIGEgbnVtYmVyICcgKyAnYW5kIFwiQ29tcGxleFwiIGlmIGFsbCB2YWx1ZXMgYXJlIGNvbXBsZXggbnVtYmVycy4gJyArICdJZiBhIG1hdHJpeCBjb250YWlucyBtb3JlIHRoYW4gb25lIGRhdGEgdHlwZSwgaXQgd2lsbCByZXR1cm4gXCJtaXhlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ2dldE1hdHJpeERhdGFUeXBlKFsxLCAyLCAzXSknLCAnZ2V0TWF0cml4RGF0YVR5cGUoW1s1IGNtXSwgWzIgaW5jaF1dKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgXCJ0ZXh0XCJdKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgYmlnbnVtYmVyKDQpXSknXSxcbiAgc2VlYWxzbzogWydtYXRyaXgnLCAnc3BhcnNlJywgJ3R5cGVPZiddXG59O1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURvY3MgPSBnZXRNYXRyaXhEYXRhVHlwZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlkZW50aXR5RG9jcyA9IHZvaWQgMDtcbnZhciBpZGVudGl0eURvY3MgPSB7XG4gIG5hbWU6ICdpZGVudGl0eScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2lkZW50aXR5KG4pJywgJ2lkZW50aXR5KG0sIG4pJywgJ2lkZW50aXR5KFttLCBuXSknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBpZGVudGl0eSBtYXRyaXggd2l0aCBzaXplIG0tYnktbi4gVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS4nLFxuICBleGFtcGxlczogWydpZGVudGl0eSgzKScsICdpZGVudGl0eSgzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2lkZW50aXR5KHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmlkZW50aXR5RG9jcyA9IGlkZW50aXR5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52RG9jcyA9IHZvaWQgMDtcbnZhciBpbnZEb2NzID0ge1xuICBuYW1lOiAnaW52JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnaW52KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnaW52KFsxLCAyOyAzLCA0XSknLCAnaW52KDQpJywgJzEgLyA0J10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuaW52RG9jcyA9IGludkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtyb25Eb2NzID0gdm9pZCAwO1xudmFyIGtyb25Eb2NzID0ge1xuICBuYW1lOiAna3JvbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2tyb24oeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGVzIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiAyIG1hdHJpY2VzIG9yIHZlY3RvcnMuJyxcbiAgZXhhbXBsZXM6IFsna3JvbihbWzEsIDBdLCBbMCwgMV1dLCBbWzEsIDJdLCBbMywgNF1dKScsICdrcm9uKFsxLDFdLCBbMiwzLDRdKSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2RvdCcsICdjcm9zcyddXG59O1xuZXhwb3J0cy5rcm9uRG9jcyA9IGtyb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXBEb2NzID0gdm9pZCAwO1xudmFyIG1hcERvY3MgPSB7XG4gIG5hbWU6ICdtYXAnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydtYXAoeCwgY2FsbGJhY2spJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvbiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuJyxcbiAgZXhhbXBsZXM6IFsnbWFwKFsxLCAyLCAzXSwgc3F1YXJlKSddLFxuICBzZWVhbHNvOiBbJ2ZpbHRlcicsICdmb3JFYWNoJ11cbn07XG5leHBvcnRzLm1hcERvY3MgPSBtYXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5vbmVzRG9jcyA9IHZvaWQgMDtcbnZhciBvbmVzRG9jcyA9IHtcbiAgbmFtZTogJ29uZXMnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydvbmVzKG0pJywgJ29uZXMobSwgbiknLCAnb25lcyhtLCBuLCBwLCAuLi4pJywgJ29uZXMoW21dKScsICdvbmVzKFttLCBuXSknLCAnb25lcyhbbSwgbiwgcCwgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyBvbmVzLicsXG4gIGV4YW1wbGVzOiBbJ29uZXMoMyknLCAnb25lcygzLCA1KScsICdvbmVzKFsyLDNdKSAqIDQuNScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ29uZXMoc2l6ZShhKSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLm9uZXNEb2NzID0gb25lc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnRpdGlvblNlbGVjdERvY3MgPSB2b2lkIDA7XG52YXIgcGFydGl0aW9uU2VsZWN0RG9jcyA9IHtcbiAgbmFtZTogJ3BhcnRpdGlvblNlbGVjdCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3BhcnRpdGlvblNlbGVjdCh4LCBrKScsICdwYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSknXSxcbiAgZGVzY3JpcHRpb246ICdQYXJ0aXRpb24tYmFzZWQgc2VsZWN0aW9uIG9mIGFuIGFycmF5IG9yIDFEIG1hdHJpeC4gV2lsbCBmaW5kIHRoZSBrdGggc21hbGxlc3QgdmFsdWUsIGFuZCBtdXRhdGVzIHRoZSBpbnB1dCBhcnJheS4gVXNlcyBRdWlja3NlbGVjdC4nLFxuICBleGFtcGxlczogWydwYXJ0aXRpb25TZWxlY3QoWzUsIDEwLCAxXSwgMiknLCAncGFydGl0aW9uU2VsZWN0KFtcIkNcIiwgXCJCXCIsIFwiQVwiLCBcIkRcIl0sIDEpJ10sXG4gIHNlZWFsc286IFsnc29ydCddXG59O1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REb2NzID0gcGFydGl0aW9uU2VsZWN0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZ2VEb2NzID0gdm9pZCAwO1xudmFyIHJhbmdlRG9jcyA9IHtcbiAgbmFtZTogJ3JhbmdlJyxcbiAgY2F0ZWdvcnk6ICdUeXBlJyxcbiAgc3ludGF4OiBbJ3N0YXJ0OmVuZCcsICdzdGFydDpzdGVwOmVuZCcsICdyYW5nZShzdGFydCwgZW5kKScsICdyYW5nZShzdGFydCwgZW5kLCBzdGVwKScsICdyYW5nZShzdHJpbmcpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgcmFuZ2UuIExvd2VyIGJvdW5kIG9mIHRoZSByYW5nZSBpcyBpbmNsdWRlZCwgdXBwZXIgYm91bmQgaXMgZXhjbHVkZWQuJyxcbiAgZXhhbXBsZXM6IFsnMTo1JywgJzM6LTE6LTMnLCAncmFuZ2UoMywgNyknLCAncmFuZ2UoMCwgMTIsIDIpJywgJ3JhbmdlKFwiNDoxMFwiKScsICdhID0gWzEsIDIsIDMsIDQ7IDUsIDYsIDcsIDhdJywgJ2FbMToyLCAxOjJdJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnJhbmdlRG9jcyA9IHJhbmdlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVzaGFwZURvY3MgPSB2b2lkIDA7XG52YXIgcmVzaGFwZURvY3MgPSB7XG4gIG5hbWU6ICdyZXNoYXBlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncmVzaGFwZSh4LCBzaXplcyknXSxcbiAgZGVzY3JpcHRpb246ICdSZXNoYXBlIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkgdG8gZml0IHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucy4nLFxuICBleGFtcGxlczogWydyZXNoYXBlKFsxLCAyLCAzLCA0LCA1LCA2XSwgWzIsIDNdKScsICdyZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFsxLCA0XSknLCAncmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbNF0pJ10sXG4gIHNlZWFsc286IFsnc2l6ZScsICdzcXVlZXplJywgJ3Jlc2l6ZSddXG59O1xuZXhwb3J0cy5yZXNoYXBlRG9jcyA9IHJlc2hhcGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNpemVEb2NzID0gdm9pZCAwO1xudmFyIHJlc2l6ZURvY3MgPSB7XG4gIG5hbWU6ICdyZXNpemUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydyZXNpemUoeCwgc2l6ZSknLCAncmVzaXplKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSknXSxcbiAgZGVzY3JpcHRpb246ICdSZXNpemUgYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsncmVzaXplKFsxLDIsMyw0LDVdLCBbM10pJywgJ3Jlc2l6ZShbMSwyLDNdLCBbNV0pJywgJ3Jlc2l6ZShbMSwyLDNdLCBbNV0sIC0xKScsICdyZXNpemUoMiwgWzIsIDNdKScsICdyZXNpemUoXCJoZWxsb1wiLCBbOF0sIFwiIVwiKSddLFxuICBzZWVhbHNvOiBbJ3NpemUnLCAnc3Vic2V0JywgJ3NxdWVlemUnLCAncmVzaGFwZSddXG59O1xuZXhwb3J0cy5yZXNpemVEb2NzID0gcmVzaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm93RG9jcyA9IHZvaWQgMDtcbnZhciByb3dEb2NzID0ge1xuICBuYW1lOiAncm93JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncm93KHgsIGluZGV4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJvdyBmcm9tIGEgbWF0cml4IG9yIGFycmF5LicsXG4gIGV4YW1wbGVzOiBbJ0EgPSBbWzEsIDJdLCBbMywgNF1dJywgJ3JvdyhBLCAxKScsICdyb3coQSwgMiknXSxcbiAgc2VlYWxzbzogWydjb2x1bW4nXVxufTtcbmV4cG9ydHMucm93RG9jcyA9IHJvd0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVEb2NzID0gdm9pZCAwO1xudmFyIHNpemVEb2NzID0ge1xuICBuYW1lOiAnc2l6ZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3NpemUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnc2l6ZSgyLjMpJywgJ3NpemUoXCJoZWxsbyB3b3JsZFwiKScsICdhID0gWzEsIDI7IDMsIDQ7IDUsIDZdJywgJ3NpemUoYSknLCAnc2l6ZSgxOjYpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5zaXplRG9jcyA9IHNpemVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0RG9jcyA9IHZvaWQgMDtcbnZhciBzb3J0RG9jcyA9IHtcbiAgbmFtZTogJ3NvcnQnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydzb3J0KHgpJywgJ3NvcnQoeCwgY29tcGFyZSknXSxcbiAgZGVzY3JpcHRpb246ICdTb3J0IHRoZSBpdGVtcyBpbiBhIG1hdHJpeC4gQ29tcGFyZSBjYW4gYmUgYSBzdHJpbmcgXCJhc2NcIiwgXCJkZXNjXCIsIFwibmF0dXJhbFwiLCBvciBhIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NvcnQoWzUsIDEwLCAxXSknLCAnc29ydChbXCJDXCIsIFwiQlwiLCBcIkFcIiwgXCJEXCJdKScsICdzb3J0QnlMZW5ndGgoYSwgYikgPSBzaXplKGEpWzFdIC0gc2l6ZShiKVsxXScsICdzb3J0KFtcIkxhbmdkb25cIiwgXCJUb21cIiwgXCJTYXJhXCJdLCBzb3J0QnlMZW5ndGgpJywgJ3NvcnQoW1wiMTBcIiwgXCIxXCIsIFwiMlwiXSwgXCJuYXR1cmFsXCIpJ10sXG4gIHNlZWFsc286IFsnbWFwJywgJ2ZpbHRlcicsICdmb3JFYWNoJ11cbn07XG5leHBvcnRzLnNvcnREb2NzID0gc29ydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWVlemVEb2NzID0gdm9pZCAwO1xudmFyIHNxdWVlemVEb2NzID0ge1xuICBuYW1lOiAnc3F1ZWV6ZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3NxdWVlemUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdSZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYSA9IHplcm9zKDMsMiwxKScsICdzaXplKHNxdWVlemUoYSkpJywgJ2IgPSB6ZXJvcygxLDEsMyknLCAnc2l6ZShzcXVlZXplKGIpKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuc3F1ZWV6ZURvY3MgPSBzcXVlZXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3Vic2V0RG9jcyA9IHZvaWQgMDtcbnZhciBzdWJzZXREb2NzID0ge1xuICBuYW1lOiAnc3Vic2V0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsndmFsdWUoaW5kZXgpJywgJ3ZhbHVlKGluZGV4KSA9IHJlcGxhY2VtZW50JywgJ3N1YnNldCh2YWx1ZSwgW2luZGV4XSknLCAnc3Vic2V0KHZhbHVlLCBbaW5kZXhdLCByZXBsYWNlbWVudCknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgb3Igc2V0IGEgc3Vic2V0IG9mIGEgbWF0cml4IG9yIHN0cmluZy4gJyArICdJbmRleGVzIGFyZSBvbmUtYmFzZWQuICcgKyAnQm90aCB0aGUgcmFuZ2VzIGxvd2VyLWJvdW5kIGFuZCB1cHBlci1ib3VuZCBhcmUgaW5jbHVkZWQuJyxcbiAgZXhhbXBsZXM6IFsnZCA9IFsxLCAyOyAzLCA0XScsICdlID0gW10nLCAnZVsxLCAxOjJdID0gWzUsIDZdJywgJ2VbMiwgOl0gPSBbNywgOF0nLCAnZiA9IGQgKiBlJywgJ2ZbMiwgMV0nLCAnZls6LCAxXSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnN1YnNldERvY3MgPSBzdWJzZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFjZURvY3MgPSB2b2lkIDA7XG52YXIgdHJhY2VEb2NzID0ge1xuICBuYW1lOiAndHJhY2UnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd0cmFjZShBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgdHJhY2Ugb2YgYSBtYXRyaXg6IHRoZSBzdW0gb2YgdGhlIGVsZW1lbnRzIG9uIHRoZSBtYWluIGRpYWdvbmFsIG9mIGEgc3F1YXJlIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydBID0gWzEsIDIsIDM7IC0xLCAyLCAzOyAyLCAwLCAzXScsICd0cmFjZShBKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy50cmFjZURvY3MgPSB0cmFjZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRyYW5zcG9zZURvY3MgPSB2b2lkIDA7XG52YXIgdHJhbnNwb3NlRG9jcyA9IHtcbiAgbmFtZTogJ3RyYW5zcG9zZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3hcXCcnLCAndHJhbnNwb3NlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVHJhbnNwb3NlIGEgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdhXFwnJywgJ3RyYW5zcG9zZShhKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnRyYW5zcG9zZURvY3MgPSB0cmFuc3Bvc2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy56ZXJvc0RvY3MgPSB2b2lkIDA7XG52YXIgemVyb3NEb2NzID0ge1xuICBuYW1lOiAnemVyb3MnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd6ZXJvcyhtKScsICd6ZXJvcyhtLCBuKScsICd6ZXJvcyhtLCBuLCBwLCAuLi4pJywgJ3plcm9zKFttXSknLCAnemVyb3MoW20sIG5dKScsICd6ZXJvcyhbbSwgbiwgcCwgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyB6ZXJvcy4nLFxuICBleGFtcGxlczogWyd6ZXJvcygzKScsICd6ZXJvcygzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ3plcm9zKHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJ11cbn07XG5leHBvcnRzLnplcm9zRG9jcyA9IHplcm9zRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zRG9jcyA9IHZvaWQgMDtcbnZhciBjb21iaW5hdGlvbnNEb2NzID0ge1xuICBuYW1lOiAnY29tYmluYXRpb25zJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydjb21iaW5hdGlvbnMobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBudW1iZXIgb2YgY29tYmluYXRpb25zIG9mIG4gaXRlbXMgdGFrZW4gayBhdCBhIHRpbWUnLFxuICBleGFtcGxlczogWydjb21iaW5hdGlvbnMoNywgNSknXSxcbiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnNXaXRoUmVwJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zRG9jcyA9IGNvbWJpbmF0aW9uc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0gdm9pZCAwO1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0ge1xuICBuYW1lOiAnY29tYmluYXRpb25zV2l0aFJlcCcsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsnY29tYmluYXRpb25zV2l0aFJlcChuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBjb21iaW5hdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZSB3aXRoIHJlcGxhY2VtZW50cy4nLFxuICBleGFtcGxlczogWydjb21iaW5hdGlvbnNXaXRoUmVwKDcsIDUpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zV2l0aFJlcERvY3MgPSBjb21iaW5hdGlvbnNXaXRoUmVwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFjdG9yaWFsRG9jcyA9IHZvaWQgMDtcbnZhciBmYWN0b3JpYWxEb2NzID0ge1xuICBuYW1lOiAnZmFjdG9yaWFsJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWyduIScsICdmYWN0b3JpYWwobiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBmYWN0b3JpYWwgb2YgYSB2YWx1ZScsXG4gIGV4YW1wbGVzOiBbJzUhJywgJzUgKiA0ICogMyAqIDIgKiAxJywgJzMhJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2NvbWJpbmF0aW9uc1dpdGhSZXAnLCAncGVybXV0YXRpb25zJywgJ2dhbW1hJ11cbn07XG5leHBvcnRzLmZhY3RvcmlhbERvY3MgPSBmYWN0b3JpYWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYW1tYURvY3MgPSB2b2lkIDA7XG52YXIgZ2FtbWFEb2NzID0ge1xuICBuYW1lOiAnZ2FtbWEnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ2dhbW1hKG4pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgZ2FtbWEgZnVuY3Rpb24uIEZvciBzbWFsbCB2YWx1ZXMsIHRoZSBMYW5jem9zIGFwcHJveGltYXRpb24gaXMgdXNlZCwgYW5kIGZvciBsYXJnZSB2YWx1ZXMgdGhlIGV4dGVuZGVkIFN0aXJsaW5nIGFwcHJveGltYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnZ2FtbWEoNCknLCAnMyEnLCAnZ2FtbWEoMS8yKScsICdzcXJ0KHBpKSddLFxuICBzZWVhbHNvOiBbJ2ZhY3RvcmlhbCddXG59O1xuZXhwb3J0cy5nYW1tYURvY3MgPSBnYW1tYURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURvY3MgPSB2b2lkIDA7XG52YXIga2xkaXZlcmdlbmNlRG9jcyA9IHtcbiAgbmFtZTogJ2tsZGl2ZXJnZW5jZScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsna2xkaXZlcmdlbmNlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBLdWxsYmFjay1MZWlibGVyIChLTCkgZGl2ZXJnZW5jZSAgYmV0d2VlbiB0d28gZGlzdHJpYnV0aW9ucy4nLFxuICBleGFtcGxlczogWydrbGRpdmVyZ2VuY2UoWzAuNywwLjUsMC40XSwgWzAuMiwwLjksMC41XSknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURvY3MgPSBrbGRpdmVyZ2VuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbERvY3MgPSB2b2lkIDA7XG52YXIgbXVsdGlub21pYWxEb2NzID0ge1xuICBuYW1lOiAnbXVsdGlub21pYWwnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ211bHRpbm9taWFsKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnTXVsdGlub21pYWwgQ29lZmZpY2llbnRzIGNvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYTEsIGEyLCAuLi4sIGFpIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYCBwb3NzaWJpbGl0aWVzLiBtdWx0aW5vbWlhbCB0YWtlcyBvbmUgYXJyYXkgb2YgaW50ZWdlcnMgYXMgYW4gYXJndW1lbnQuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGV2ZXJ5IGFpID4gMC4nLFxuICBleGFtcGxlczogWydtdWx0aW5vbWlhbChbMSwgMiwgMV0pJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2ZhY3RvcmlhbCddXG59O1xuZXhwb3J0cy5tdWx0aW5vbWlhbERvY3MgPSBtdWx0aW5vbWlhbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBlcm11dGF0aW9uc0RvY3MgPSB2b2lkIDA7XG52YXIgcGVybXV0YXRpb25zRG9jcyA9IHtcbiAgbmFtZTogJ3Blcm11dGF0aW9ucycsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncGVybXV0YXRpb25zKG4pJywgJ3Blcm11dGF0aW9ucyhuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZScsXG4gIGV4YW1wbGVzOiBbJ3Blcm11dGF0aW9ucyg1KScsICdwZXJtdXRhdGlvbnMoNSwgMyknXSxcbiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnMnLCAnY29tYmluYXRpb25zV2l0aFJlcCcsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMucGVybXV0YXRpb25zRG9jcyA9IHBlcm11dGF0aW9uc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpY2tSYW5kb21Eb2NzID0gdm9pZCAwO1xudmFyIHBpY2tSYW5kb21Eb2NzID0ge1xuICBuYW1lOiAncGlja1JhbmRvbScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncGlja1JhbmRvbShhcnJheSknLCAncGlja1JhbmRvbShhcnJheSwgbnVtYmVyKScsICdwaWNrUmFuZG9tKGFycmF5LCB3ZWlnaHRzKScsICdwaWNrUmFuZG9tKGFycmF5LCBudW1iZXIsIHdlaWdodHMpJywgJ3BpY2tSYW5kb20oYXJyYXksIHdlaWdodHMsIG51bWJlciknXSxcbiAgZGVzY3JpcHRpb246ICdQaWNrIGEgcmFuZG9tIGVudHJ5IGZyb20gYSBnaXZlbiBhcnJheS4nLFxuICBleGFtcGxlczogWydwaWNrUmFuZG9tKDA6MTApJywgJ3BpY2tSYW5kb20oWzEsIDMsIDEsIDZdKScsICdwaWNrUmFuZG9tKFsxLCAzLCAxLCA2XSwgMiknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIDIsIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSwgMiknXSxcbiAgc2VlYWxzbzogWydyYW5kb20nLCAncmFuZG9tSW50J11cbn07XG5leHBvcnRzLnBpY2tSYW5kb21Eb2NzID0gcGlja1JhbmRvbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmRvbURvY3MgPSB2b2lkIDA7XG52YXIgcmFuZG9tRG9jcyA9IHtcbiAgbmFtZTogJ3JhbmRvbScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncmFuZG9tKCknLCAncmFuZG9tKG1heCknLCAncmFuZG9tKG1pbiwgbWF4KScsICdyYW5kb20oc2l6ZSknLCAncmFuZG9tKHNpemUsIG1heCknLCAncmFuZG9tKHNpemUsIG1pbiwgbWF4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJhbmRvbSBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsncmFuZG9tKCknLCAncmFuZG9tKDEwLCAyMCknLCAncmFuZG9tKFsyLCAzXSknXSxcbiAgc2VlYWxzbzogWydwaWNrUmFuZG9tJywgJ3JhbmRvbUludCddXG59O1xuZXhwb3J0cy5yYW5kb21Eb2NzID0gcmFuZG9tRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tSW50RG9jcyA9IHZvaWQgMDtcbnZhciByYW5kb21JbnREb2NzID0ge1xuICBuYW1lOiAncmFuZG9tSW50JyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydyYW5kb21JbnQobWF4KScsICdyYW5kb21JbnQobWluLCBtYXgpJywgJ3JhbmRvbUludChzaXplKScsICdyYW5kb21JbnQoc2l6ZSwgbWF4KScsICdyYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyJyxcbiAgZXhhbXBsZXM6IFsncmFuZG9tSW50KDEwLCAyMCknLCAncmFuZG9tSW50KFsyLCAzXSwgMTApJ10sXG4gIHNlZWFsc286IFsncGlja1JhbmRvbScsICdyYW5kb20nXVxufTtcbmV4cG9ydHMucmFuZG9tSW50RG9jcyA9IHJhbmRvbUludERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVEb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVEb2NzID0ge1xuICBuYW1lOiAnY29tcGFyZScsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWydjb21wYXJlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gdmFsdWVzLiAnICsgJ1JldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4nLFxuICBleGFtcGxlczogWydjb21wYXJlKDIsIDMpJywgJ2NvbXBhcmUoMywgMiknLCAnY29tcGFyZSgyLCAyKScsICdjb21wYXJlKDVjbSwgNDBtbSknLCAnY29tcGFyZSgyLCBbMSwgMiwgM10pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlTmF0dXJhbCcsICdjb21wYXJlVGV4dCddXG59O1xuZXhwb3J0cy5jb21wYXJlRG9jcyA9IGNvbXBhcmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERvY3MgPSB2b2lkIDA7XG52YXIgY29tcGFyZU5hdHVyYWxEb2NzID0ge1xuICBuYW1lOiAnY29tcGFyZU5hdHVyYWwnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnY29tcGFyZU5hdHVyYWwoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wYXJlIHR3byB2YWx1ZXMgb2YgYW55IHR5cGUgaW4gYSBkZXRlcm1pbmlzdGljLCBuYXR1cmFsIHdheS4gJyArICdSZXR1cm5zIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuJyxcbiAgZXhhbXBsZXM6IFsnY29tcGFyZU5hdHVyYWwoMiwgMyknLCAnY29tcGFyZU5hdHVyYWwoMywgMiknLCAnY29tcGFyZU5hdHVyYWwoMiwgMiknLCAnY29tcGFyZU5hdHVyYWwoNWNtLCA0MG1tKScsICdjb21wYXJlTmF0dXJhbChcIjJcIiwgXCIxMFwiKScsICdjb21wYXJlTmF0dXJhbCgyICsgM2ksIDIgKyA0aSknLCAnY29tcGFyZU5hdHVyYWwoWzEsIDIsIDRdLCBbMSwgMiwgM10pJywgJ2NvbXBhcmVOYXR1cmFsKFsxLCA1XSwgWzEsIDIsIDNdKScsICdjb21wYXJlTmF0dXJhbChbMSwgMl0sIFsxLCAyXSknLCAnY29tcGFyZU5hdHVyYWwoe2E6IDJ9LCB7YTogNH0pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2NvbXBhcmVUZXh0J11cbn07XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsRG9jcyA9IGNvbXBhcmVOYXR1cmFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZVRleHREb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVUZXh0RG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBhcmVUZXh0JyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2NvbXBhcmVUZXh0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gc3RyaW5ncyBsZXhpY2FsbHkuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuICcgKyAnUmV0dXJucyAxIHdoZW4geCA+IHksIC0xIHdoZW4geCA8IHksIGFuZCAwIHdoZW4geCA9PSB5LicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBhcmVUZXh0KFwiQlwiLCBcIkFcIiknLCAnY29tcGFyZVRleHQoXCJBXCIsIFwiQlwiKScsICdjb21wYXJlVGV4dChcIkFcIiwgXCJBXCIpJywgJ2NvbXBhcmVUZXh0KFwiMlwiLCBcIjEwXCIpJywgJ2NvbXBhcmUoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZSgyLCAxMCknLCAnY29tcGFyZU5hdHVyYWwoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZVRleHQoXCJCXCIsIFtcIkFcIiwgXCJCXCIsIFwiQ1wiXSknXSxcbiAgc2VlYWxzbzogWydjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ11cbn07XG5leHBvcnRzLmNvbXBhcmVUZXh0RG9jcyA9IGNvbXBhcmVUZXh0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVlcEVxdWFsRG9jcyA9IHZvaWQgMDtcbnZhciBkZWVwRXF1YWxEb2NzID0ge1xuICBuYW1lOiAnZGVlcEVxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2RlZXBFcXVhbCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGVxdWFsaXR5IG9mIHR3byBtYXRyaWNlcyBlbGVtZW50IHdpc2UuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2l6ZSBvZiBib3RoIG1hdHJpY2VzIGlzIGVxdWFsIGFuZCB3aGVuIGFuZCBlYWNoIG9mIHRoZSBlbGVtZW50cyBhcmUgZXF1YWwuJyxcbiAgZXhhbXBsZXM6IFsnZGVlcEVxdWFsKFsxLDMsNF0sIFsxLDMsNF0pJywgJ2RlZXBFcXVhbChbMSwzLDRdLCBbMSwzXSknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJ11cbn07XG5leHBvcnRzLmRlZXBFcXVhbERvY3MgPSBkZWVwRXF1YWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgZXF1YWxEb2NzID0ge1xuICBuYW1lOiAnZXF1YWwnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA9PSB5JywgJ2VxdWFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHZhbHVlcy4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIrMiA9PSAzJywgJzIrMiA9PSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgPT0gYicsICc1MGNtID09IDAuNW0nXSxcbiAgc2VlYWxzbzogWyd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2RlZXBFcXVhbCcsICdlcXVhbFRleHQnXVxufTtcbmV4cG9ydHMuZXF1YWxEb2NzID0gZXF1YWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbFRleHREb2NzID0gdm9pZCAwO1xudmFyIGVxdWFsVGV4dERvY3MgPSB7XG4gIG5hbWU6ICdlcXVhbFRleHQnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnZXF1YWxUZXh0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHN0cmluZ3MuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgYW5kIGZhbHNlIGlmIG5vdC4nLFxuICBleGFtcGxlczogWydlcXVhbFRleHQoXCJIZWxsb1wiLCBcIkhlbGxvXCIpJywgJ2VxdWFsVGV4dChcImFcIiwgXCJBXCIpJywgJ2VxdWFsKFwiMmUzXCIsIFwiMjAwMFwiKScsICdlcXVhbFRleHQoXCIyZTNcIiwgXCIyMDAwXCIpJywgJ2VxdWFsVGV4dChcIkJcIiwgW1wiQVwiLCBcIkJcIiwgXCJDXCJdKSddLFxuICBzZWVhbHNvOiBbJ2NvbXBhcmUnLCAnY29tcGFyZU5hdHVyYWwnLCAnY29tcGFyZVRleHQnLCAnZXF1YWwnXVxufTtcbmV4cG9ydHMuZXF1YWxUZXh0RG9jcyA9IGVxdWFsVGV4dERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckRvY3MgPSB2b2lkIDA7XG52YXIgbGFyZ2VyRG9jcyA9IHtcbiAgbmFtZTogJ2xhcmdlcicsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWyd4ID4geScsICdsYXJnZXIoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIGxhcmdlciB0aGFuIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnMiA+IDMnLCAnNSA+IDIqMicsICdhID0gMy4zJywgJ2IgPSA2LTIuOCcsICcoYSA+IGIpJywgJyhiIDwgYSknLCAnNSBjbSA+IDIgaW5jaCddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnc21hbGxlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5sYXJnZXJEb2NzID0gbGFyZ2VyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubGFyZ2VyRXFEb2NzID0gdm9pZCAwO1xudmFyIGxhcmdlckVxRG9jcyA9IHtcbiAgbmFtZTogJ2xhcmdlckVxJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPj0geScsICdsYXJnZXJFcSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciBvciBlcXVhbCB0byB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPj0gMSsxJywgJzIgPiAxKzEnLCAnYSA9IDMuMicsICdiID0gNi0yLjgnLCAnKGEgPj0gYiknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXJFcScsICdzbWFsbGVyJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMubGFyZ2VyRXFEb2NzID0gbGFyZ2VyRXFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRG9jcyA9IHZvaWQgMDtcbnZhciBzbWFsbGVyRG9jcyA9IHtcbiAgbmFtZTogJ3NtYWxsZXInLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA8IHknLCAnc21hbGxlcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgc21hbGxlciB0aGFuIHZhbHVlIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIHNtYWxsZXIgdGhhbiB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPCAzJywgJzUgPCAyKjInLCAnYSA9IDMuMycsICdiID0gNi0yLjgnLCAnKGEgPCBiKScsICc1IGNtIDwgMiBpbmNoJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdsYXJnZXInLCAnc21hbGxlckVxJywgJ2xhcmdlckVxJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMuc21hbGxlckRvY3MgPSBzbWFsbGVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc21hbGxlckVxRG9jcyA9IHZvaWQgMDtcbnZhciBzbWFsbGVyRXFEb2NzID0ge1xuICBuYW1lOiAnc21hbGxlckVxJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPD0geScsICdzbWFsbGVyRXEoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdmFsdWUgeS4gUmV0dXJucyB0cnVlIGlmIHggaXMgc21hbGxlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnMiA8PSAxKzEnLCAnMiA8IDErMScsICdhID0gMy4yJywgJ2IgPSA2LTIuOCcsICcoYSA8PSBiKSddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5zbWFsbGVyRXFEb2NzID0gc21hbGxlckVxRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5lcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgdW5lcXVhbERvY3MgPSB7XG4gIG5hbWU6ICd1bmVxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggIT0geScsICd1bmVxdWFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgdW5lcXVhbGl0eSBvZiB0d28gdmFsdWVzLiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdW5lcXVhbCwgYW5kIGZhbHNlIGlmIHRoZXkgYXJlIGVxdWFsLicsXG4gIGV4YW1wbGVzOiBbJzIrMiAhPSAzJywgJzIrMiAhPSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgIT0gYicsICc1MGNtICE9IDAuNW0nLCAnNSBjbSAhPSAyIGluY2gnXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICdzbWFsbGVyJywgJ2xhcmdlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZScsICdkZWVwRXF1YWwnXVxufTtcbmV4cG9ydHMudW5lcXVhbERvY3MgPSB1bmVxdWFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0Q2FydGVzaWFuRG9jcyA9IHZvaWQgMDtcbnZhciBzZXRDYXJ0ZXNpYW5Eb2NzID0ge1xuICBuYW1lOiAnc2V0Q2FydGVzaWFuJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0Q2FydGVzaWFuKHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0Q2FydGVzaWFuKFsxLCAyXSwgWzMsIDRdKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJywgJ3NldFBvd2Vyc2V0J11cbn07XG5leHBvcnRzLnNldENhcnRlc2lhbkRvY3MgPSBzZXRDYXJ0ZXNpYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlRG9jcyA9IHZvaWQgMDtcbnZhciBzZXREaWZmZXJlbmNlRG9jcyA9IHtcbiAgbmFtZTogJ3NldERpZmZlcmVuY2UnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXREaWZmZXJlbmNlKHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0czogZXZlcnkgZWxlbWVudCBvZiBzZXQxLCB0aGF0IGlzIG5vdCB0aGUgZWxlbWVudCBvZiBzZXQyLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldERpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldERpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0U3ltRGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlRG9jcyA9IHNldERpZmZlcmVuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaXN0aW5jdERvY3MgPSB2b2lkIDA7XG52YXIgc2V0RGlzdGluY3REb2NzID0ge1xuICBuYW1lOiAnc2V0RGlzdGluY3QnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXREaXN0aW5jdChzZXQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29sbGVjdCB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBtdWx0aXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldERpc3RpbmN0KFsxLCAxLCAxLCAyLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydzZXRNdWx0aXBsaWNpdHknXVxufTtcbmV4cG9ydHMuc2V0RGlzdGluY3REb2NzID0gc2V0RGlzdGluY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REb2NzID0gdm9pZCAwO1xudmFyIHNldEludGVyc2VjdERvY3MgPSB7XG4gIG5hbWU6ICdzZXRJbnRlcnNlY3QnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRJbnRlcnNlY3Qoc2V0MSwgc2V0MiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0SW50ZXJzZWN0KFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRJbnRlcnNlY3QoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldEludGVyc2VjdERvY3MgPSBzZXRJbnRlcnNlY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJc1N1YnNldERvY3MgPSB2b2lkIDA7XG52YXIgc2V0SXNTdWJzZXREb2NzID0ge1xuICBuYW1lOiAnc2V0SXNTdWJzZXQnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRJc1N1YnNldChzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIHdoZXRoZXIgYSAobXVsdGkpc2V0IGlzIGEgc3Vic2V0IG9mIGFub3RoZXIgKG11bHRpKXNldDogZXZlcnkgZWxlbWVudCBvZiBzZXQxIGlzIHRoZSBlbGVtZW50IG9mIHNldDIuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0SXNTdWJzZXQoWzEsIDJdLCBbMywgNCwgNSwgNl0pJywgJ3NldElzU3Vic2V0KFszLCA0XSwgWzMsIDQsIDUsIDZdKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldElzU3Vic2V0RG9jcyA9IHNldElzU3Vic2V0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RG9jcyA9IHZvaWQgMDtcbnZhciBzZXRNdWx0aXBsaWNpdHlEb2NzID0ge1xuICBuYW1lOiAnc2V0TXVsdGlwbGljaXR5JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0TXVsdGlwbGljaXR5KGVsZW1lbnQsIHNldCknXSxcbiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbXVsdGlwbGljaXR5IG9mIGFuIGVsZW1lbnQgaW4gYSBtdWx0aXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldE11bHRpcGxpY2l0eSgxLCBbMSwgMiwgMiwgNF0pJywgJ3NldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pJ10sXG4gIHNlZWFsc286IFsnc2V0RGlzdGluY3QnLCAnc2V0U2l6ZSddXG59O1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHlEb2NzID0gc2V0TXVsdGlwbGljaXR5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREb2NzID0gdm9pZCAwO1xudmFyIHNldFBvd2Vyc2V0RG9jcyA9IHtcbiAgbmFtZTogJ3NldFBvd2Vyc2V0JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0UG93ZXJzZXQoc2V0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgcG93ZXJzZXQgb2YgYSAobXVsdGkpc2V0OiB0aGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFBvd2Vyc2V0KFsxLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydzZXRDYXJ0ZXNpYW4nXVxufTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREb2NzID0gc2V0UG93ZXJzZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRTaXplRG9jcyA9IHZvaWQgMDtcbnZhciBzZXRTaXplRG9jcyA9IHtcbiAgbmFtZTogJ3NldFNpemUnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRTaXplKHNldCknLCAnc2V0U2l6ZShzZXQsIHVuaXF1ZSknXSxcbiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEgKG11bHRpKXNldC4gV2hlbiB0aGUgc2Vjb25kIHBhcmFtZXRlciBcInVuaXF1ZVwiIGlzIHRydWUsIGNvdW50IG9ubHkgdGhlIHVuaXF1ZSB2YWx1ZXMuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXRTaXplKFsxLCAyLCAyLCA0XSknLCAnc2V0U2l6ZShbMSwgMiwgMiwgNF0sIHRydWUpJ10sXG4gIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0SW50ZXJzZWN0JywgJ3NldERpZmZlcmVuY2UnXVxufTtcbmV4cG9ydHMuc2V0U2l6ZURvY3MgPSBzZXRTaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZURvY3MgPSB2b2lkIDA7XG52YXIgc2V0U3ltRGlmZmVyZW5jZURvY3MgPSB7XG4gIG5hbWU6ICdzZXRTeW1EaWZmZXJlbmNlJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0U3ltRGlmZmVyZW5jZShzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFN5bURpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldFN5bURpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0RGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXRTeW1EaWZmZXJlbmNlRG9jcyA9IHNldFN5bURpZmZlcmVuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRVbmlvbkRvY3MgPSB2b2lkIDA7XG52YXIgc2V0VW5pb25Eb2NzID0ge1xuICBuYW1lOiAnc2V0VW5pb24nLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRVbmlvbihzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFVuaW9uKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRVbmlvbihbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSddLFxuICBzZWVhbHNvOiBbJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldFVuaW9uRG9jcyA9IHNldFVuaW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJmRG9jcyA9IHZvaWQgMDtcbnZhciBlcmZEb2NzID0ge1xuICBuYW1lOiAnZXJmJyxcbiAgY2F0ZWdvcnk6ICdTcGVjaWFsJyxcbiAgc3ludGF4OiBbJ2VyZih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGVyZiBmdW5jdGlvbiBvZiBhIHZhbHVlIHVzaW5nIGEgcmF0aW9uYWwgQ2hlYnlzaGV2IGFwcHJveGltYXRpb25zIGZvciBkaWZmZXJlbnQgaW50ZXJ2YWxzIG9mIHgnLFxuICBleGFtcGxlczogWydlcmYoMC4yKScsICdlcmYoLTAuNSknLCAnZXJmKDQpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5lcmZEb2NzID0gZXJmRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFkRG9jcyA9IHZvaWQgMDtcbnZhciBtYWREb2NzID0ge1xuICBuYW1lOiAnbWFkJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21hZChhLCBiLCBjLCAuLi4pJywgJ21hZChBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiBpcyBkZWZpbmVkIGFzIHRoZSBtZWRpYW4gb2YgdGhlIGFic29sdXRlIGRldmlhdGlvbnMgZnJvbSB0aGUgbWVkaWFuLicsXG4gIGV4YW1wbGVzOiBbJ21hZCgxMCwgMjAsIDMwKScsICdtYWQoWzEsIDIsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21lYW4nLCAnbWVkaWFuJywgJ3N0ZCcsICdhYnMnXVxufTtcbmV4cG9ydHMubWFkRG9jcyA9IG1hZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1heERvY3MgPSB2b2lkIDA7XG52YXIgbWF4RG9jcyA9IHtcbiAgbmFtZTogJ21heCcsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtYXgoYSwgYiwgYywgLi4uKScsICdtYXgoQSknLCAnbWF4KEEsIGRpbSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgbGlzdCBvZiB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnbWF4KDIsIDMsIDQsIDEpJywgJ21heChbMiwgMywgNCwgMV0pJywgJ21heChbMiwgNTsgNCwgM10pJywgJ21heChbMiwgNTsgNCwgM10sIDEpJywgJ21heChbMiwgNTsgNCwgM10sIDIpJywgJ21heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJywgJ21pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJ10sXG4gIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5tYXhEb2NzID0gbWF4RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhbkRvY3MgPSB2b2lkIDA7XG52YXIgbWVhbkRvY3MgPSB7XG4gIG5hbWU6ICdtZWFuJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21lYW4oYSwgYiwgYywgLi4uKScsICdtZWFuKEEpJywgJ21lYW4oQSwgZGltKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGFyaXRobWV0aWMgbWVhbiBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21lYW4oMiwgMywgNCwgMSknLCAnbWVhbihbMiwgMywgNCwgMV0pJywgJ21lYW4oWzIsIDU7IDQsIDNdKScsICdtZWFuKFsyLCA1OyA0LCAzXSwgMSknLCAnbWVhbihbMiwgNTsgNCwgM10sIDIpJywgJ21lYW4oWzEuMCwgMi43LCAzLjIsIDQuMF0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLm1lYW5Eb2NzID0gbWVhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lZGlhbkRvY3MgPSB2b2lkIDA7XG52YXIgbWVkaWFuRG9jcyA9IHtcbiAgbmFtZTogJ21lZGlhbicsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtZWRpYW4oYSwgYiwgYywgLi4uKScsICdtZWRpYW4oQSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtZWRpYW4gb2YgYWxsIHZhbHVlcy4gVGhlIHZhbHVlcyBhcmUgc29ydGVkIGFuZCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLiBJbiBjYXNlIG9mIGFuIGV2ZW4gbnVtYmVyIG9mIHZhbHVlcywgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLicsXG4gIGV4YW1wbGVzOiBbJ21lZGlhbig1LCAyLCA3KScsICdtZWRpYW4oWzMsIC0xLCA1LCA3XSknXSxcbiAgc2VlYWxzbzogWydtYXgnLCAnbWVhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJywgJ3F1YW50aWxlU2VxJ11cbn07XG5leHBvcnRzLm1lZGlhbkRvY3MgPSBtZWRpYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taW5Eb2NzID0gdm9pZCAwO1xudmFyIG1pbkRvY3MgPSB7XG4gIG5hbWU6ICdtaW4nLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnbWluKGEsIGIsIGMsIC4uLiknLCAnbWluKEEpJywgJ21pbihBLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWluaW11bSB2YWx1ZSBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21pbigyLCAzLCA0LCAxKScsICdtaW4oWzIsIDMsIDQsIDFdKScsICdtaW4oWzIsIDU7IDQsIDNdKScsICdtaW4oWzIsIDU7IDQsIDNdLCAxKScsICdtaW4oWzIsIDU7IDQsIDNdLCAyKScsICdtaW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKScsICdtYXgoMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubWluRG9jcyA9IG1pbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZGVEb2NzID0gdm9pZCAwO1xudmFyIG1vZGVEb2NzID0ge1xuICBuYW1lOiAnbW9kZScsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtb2RlKGEsIGIsIGMsIC4uLiknLCAnbW9kZShBKScsICdtb2RlKEEsIGEsIGIsIEIsIGMsIC4uLiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlcyB0aGUgbW9kZSBvZiBhbGwgdmFsdWVzIGFzIGFuIGFycmF5LiBJbiBjYXNlIG1vZGUgYmVpbmcgbW9yZSB0aGFuIG9uZSwgbXVsdGlwbGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBhbiBhcnJheS4nLFxuICBleGFtcGxlczogWydtb2RlKDIsIDEsIDQsIDMsIDEpJywgJ21vZGUoWzEsIDIuNywgMy4yLCA0LCAyLjddKScsICdtb2RlKDEsIDQsIDYsIDEsIDYpJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubW9kZURvY3MgPSBtb2RlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZERvY3MgPSB2b2lkIDA7XG52YXIgcHJvZERvY3MgPSB7XG4gIG5hbWU6ICdwcm9kJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3Byb2QoYSwgYiwgYywgLi4uKScsICdwcm9kKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiBhbGwgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ3Byb2QoMiwgMywgNCknLCAncHJvZChbMiwgMywgNF0pJywgJ3Byb2QoWzIsIDU7IDQsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAnbWluJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMucHJvZERvY3MgPSBwcm9kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucXVhbnRpbGVTZXFEb2NzID0gdm9pZCAwO1xudmFyIHF1YW50aWxlU2VxRG9jcyA9IHtcbiAgbmFtZTogJ3F1YW50aWxlU2VxJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3F1YW50aWxlU2VxKEEsIHByb2JbLCBzb3J0ZWRdKScsICdxdWFudGlsZVNlcShBLCBbcHJvYjEsIHByb2IyLCAuLi5dWywgc29ydGVkXSknLCAncXVhbnRpbGVTZXEoQSwgTlssIHNvcnRlZF0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvYiBvcmRlciBxdWFudGlsZSBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuIFRoZSBzZXF1ZW5jZSBpcyBzb3J0ZWQgYW5kIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuIFN1cHBvcnRlZCB0eXBlcyBvZiBzZXF1ZW5jZSB2YWx1ZXMgYXJlOiBOdW1iZXIsIEJpZ051bWJlciwgVW5pdCBTdXBwb3J0ZWQgdHlwZXMgb2YgcHJvYmFibGl0eSBhcmU6IE51bWJlciwgQmlnTnVtYmVyLiBcXG5cXG5JbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuJyxcbiAgZXhhbXBsZXM6IFsncXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMC41KScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCAyKScsICdxdWFudGlsZVNlcShbLTEsIDMsIDUsIDddLCAwLjUsIHRydWUpJ10sXG4gIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ21heCcsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMucXVhbnRpbGVTZXFEb2NzID0gcXVhbnRpbGVTZXFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGREb2NzID0gdm9pZCAwO1xudmFyIHN0ZERvY3MgPSB7XG4gIG5hbWU6ICdzdGQnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnc3RkKGEsIGIsIGMsIC4uLiknLCAnc3RkKEEpJywgJ3N0ZChBLCBub3JtYWxpemF0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBhbGwgdmFsdWVzLCBkZWZpbmVkIGFzIHN0ZChBKSA9IHNxcnQodmFyaWFuY2UoQSkpLiBPcHRpb25hbCBwYXJhbWV0ZXIgbm9ybWFsaXphdGlvbiBjYW4gYmUgXCJ1bmJpYXNlZFwiIChkZWZhdWx0KSwgXCJ1bmNvcnJlY3RlZFwiLCBvciBcImJpYXNlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ3N0ZCgyLCA0LCA2KScsICdzdGQoWzIsIDQsIDYsIDhdKScsICdzdGQoWzIsIDQsIDYsIDhdLCBcInVuY29ycmVjdGVkXCIpJywgJ3N0ZChbMiwgNCwgNiwgOF0sIFwiYmlhc2VkXCIpJywgJ3N0ZChbMSwgMiwgMzsgNCwgNSwgNl0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5zdGREb2NzID0gc3RkRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VtRG9jcyA9IHZvaWQgMDtcbnZhciBzdW1Eb2NzID0ge1xuICBuYW1lOiAnc3VtJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3N1bShhLCBiLCBjLCAuLi4pJywgJ3N1bShBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHN1bSBvZiBhbGwgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ3N1bSgyLCAzLCA0LCAxKScsICdzdW0oWzIsIDMsIDQsIDFdKScsICdzdW0oWzIsIDU7IDQsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLnN1bURvY3MgPSBzdW1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YXJpYW5jZURvY3MgPSB2b2lkIDA7XG52YXIgdmFyaWFuY2VEb2NzID0ge1xuICBuYW1lOiAndmFyaWFuY2UnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsndmFyaWFuY2UoYSwgYiwgYywgLi4uKScsICd2YXJpYW5jZShBKScsICd2YXJpYW5jZShBLCBub3JtYWxpemF0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHZhcmlhbmNlIG9mIGFsbCB2YWx1ZXMuIE9wdGlvbmFsIHBhcmFtZXRlciBub3JtYWxpemF0aW9uIGNhbiBiZSBcInVuYmlhc2VkXCIgKGRlZmF1bHQpLCBcInVuY29ycmVjdGVkXCIsIG9yIFwiYmlhc2VkXCIuJyxcbiAgZXhhbXBsZXM6IFsndmFyaWFuY2UoMiwgNCwgNiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdKScsICd2YXJpYW5jZShbMiwgNCwgNiwgOF0sIFwidW5jb3JyZWN0ZWRcIiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdLCBcImJpYXNlZFwiKScsICd2YXJpYW5jZShbMSwgMiwgMzsgNCwgNSwgNl0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJ11cbn07XG5leHBvcnRzLnZhcmlhbmNlRG9jcyA9IHZhcmlhbmNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvc0RvY3MgPSB2b2lkIDA7XG52YXIgYWNvc0RvY3MgPSB7XG4gIG5hbWU6ICdhY29zJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvcyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgdmFsdWUgaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydhY29zKDAuNSknLCAnYWNvcyhjb3MoMi4zKSknXSxcbiAgc2VlYWxzbzogWydjb3MnLCAnYXRhbicsICdhc2luJ11cbn07XG5leHBvcnRzLmFjb3NEb2NzID0gYWNvc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NoRG9jcyA9IHZvaWQgMDtcbnZhciBhY29zaERvY3MgPSB7XG4gIG5hbWU6ICdhY29zaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Fjb3NoKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY29zaCh4KSA9IGxuKHNxcnQoeF4yIC0gMSkgKyB4KWAuJyxcbiAgZXhhbXBsZXM6IFsnYWNvc2goMS41KSddLFxuICBzZWVhbHNvOiBbJ2Nvc2gnLCAnYXNpbmgnLCAnYXRhbmgnXVxufTtcbmV4cG9ydHMuYWNvc2hEb2NzID0gYWNvc2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY290RG9jcyA9IHZvaWQgMDtcbnZhciBhY290RG9jcyA9IHtcbiAgbmFtZTogJ2Fjb3QnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhY290KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2Fjb3QoMC41KScsICdhY290KGNvdCgwLjUpKScsICdhY290KDIpJ10sXG4gIHNlZWFsc286IFsnY290JywgJ2F0YW4nXVxufTtcbmV4cG9ydHMuYWNvdERvY3MgPSBhY290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdGhEb2NzID0gdm9pZCAwO1xudmFyIGFjb3RoRG9jcyA9IHtcbiAgbmFtZTogJ2Fjb3RoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvdGgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFjb3RoKHgpID0gKGxuKCh4KzEpL3gpICsgbG4oeC8oeC0xKSkpIC8gMmAuJyxcbiAgZXhhbXBsZXM6IFsnYWNvdGgoMiknLCAnYWNvdGgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2FzZWNoJ11cbn07XG5leHBvcnRzLmFjb3RoRG9jcyA9IGFjb3RoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY0RvY3MgPSB2b2lkIDA7XG52YXIgYWNzY0RvY3MgPSB7XG4gIG5hbWU6ICdhY3NjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNzYyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhY3NjKDIpJywgJ2Fjc2MoY3NjKDAuNSkpJywgJ2Fjc2MoMC41KSddLFxuICBzZWVhbHNvOiBbJ2NzYycsICdhc2luJywgJ2FzZWMnXVxufTtcbmV4cG9ydHMuYWNzY0RvY3MgPSBhY3NjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY2hEb2NzID0gdm9pZCAwO1xudmFyIGFjc2NoRG9jcyA9IHtcbiAgbmFtZTogJ2Fjc2NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNzY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNzY2goeCkgPSBsbigxL3ggKyBzcXJ0KDEveF4yICsgMSkpYC4nLFxuICBleGFtcGxlczogWydhY3NjaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnYXNlY2gnLCAnYWNvdGgnXVxufTtcbmV4cG9ydHMuYWNzY2hEb2NzID0gYWNzY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2VjRG9jcyA9IHZvaWQgMDtcbnZhciBhc2VjRG9jcyA9IHtcbiAgbmFtZTogJ2FzZWMnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhc2VjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2FzZWMoMC41KScsICdhc2VjKHNlYygwLjUpKScsICdhc2VjKDIpJ10sXG4gIHNlZWFsc286IFsnYWNvcycsICdhY290JywgJ2Fjc2MnXVxufTtcbmV4cG9ydHMuYXNlY0RvY3MgPSBhc2VjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY2hEb2NzID0gdm9pZCAwO1xudmFyIGFzZWNoRG9jcyA9IHtcbiAgbmFtZTogJ2FzZWNoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNlY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGludmVyc2Ugc2VjYW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnYXNlY2goMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2Fjb3RoJ11cbn07XG5leHBvcnRzLmFzZWNoRG9jcyA9IGFzZWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNpbkRvY3MgPSB2b2lkIDA7XG52YXIgYXNpbkRvY3MgPSB7XG4gIG5hbWU6ICdhc2luJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNpbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2Ugc2luZSBvZiBhIHZhbHVlIGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXNpbigwLjUpJywgJ2FzaW4oc2luKDAuNSkpJ10sXG4gIHNlZWFsc286IFsnc2luJywgJ2Fjb3MnLCAnYXRhbiddXG59O1xuZXhwb3J0cy5hc2luRG9jcyA9IGFzaW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luaERvY3MgPSB2b2lkIDA7XG52YXIgYXNpbmhEb2NzID0ge1xuICBuYW1lOiAnYXNpbmgnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhc2luaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNzaW5lIG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC4nLFxuICBleGFtcGxlczogWydhc2luaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnYWNvc2gnLCAnYXRhbmgnXVxufTtcbmV4cG9ydHMuYXNpbmhEb2NzID0gYXNpbmhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuRG9jcyA9IHtcbiAgbmFtZTogJ2F0YW4nLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhdGFuKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgdmFsdWUgaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydhdGFuKDAuNSknLCAnYXRhbih0YW4oMC41KSknXSxcbiAgc2VlYWxzbzogWyd0YW4nLCAnYWNvcycsICdhc2luJ11cbn07XG5leHBvcnRzLmF0YW5Eb2NzID0gYXRhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW4yRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuMkRvY3MgPSB7XG4gIG5hbWU6ICdhdGFuMicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2F0YW4yKHksIHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIHByaW5jaXBhbCB2YWx1ZSBvZiB0aGUgYXJjIHRhbmdlbnQgb2YgeS94IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbjIoMiwgMikgLyBwaScsICdhbmdsZSA9IDYwIGRlZyBpbiByYWQnLCAneCA9IGNvcyhhbmdsZSknLCAneSA9IHNpbihhbmdsZSknLCAnYXRhbjIoeSwgeCknXSxcbiAgc2VlYWxzbzogWydzaW4nLCAnY29zJywgJ3RhbiddXG59O1xuZXhwb3J0cy5hdGFuMkRvY3MgPSBhdGFuMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW5oRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuaERvY3MgPSB7XG4gIG5hbWU6ICdhdGFuaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2F0YW5oKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYXRhbmgoeCkgPSBsbigoMSArIHgpLygxIC0geCkpIC8gMmAuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbmgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjb3NoJywgJ2FzaW5oJ11cbn07XG5leHBvcnRzLmF0YW5oRG9jcyA9IGF0YW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zRG9jcyA9IHZvaWQgMDtcbnZhciBjb3NEb2NzID0ge1xuICBuYW1lOiAnY29zJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY29zKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3MoMiknLCAnY29zKHBpIC8gNCkgXiAyJywgJ2NvcygxODAgZGVnKScsICdjb3MoNjAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLFxuICBzZWVhbHNvOiBbJ2Fjb3MnLCAnc2luJywgJ3RhbiddXG59O1xuZXhwb3J0cy5jb3NEb2NzID0gY29zRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zaERvY3MgPSB2b2lkIDA7XG52YXIgY29zaERvY3MgPSB7XG4gIG5hbWU6ICdjb3NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY29zaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3NoKDAuNSknXSxcbiAgc2VlYWxzbzogWydzaW5oJywgJ3RhbmgnLCAnY290aCddXG59O1xuZXhwb3J0cy5jb3NoRG9jcyA9IGNvc2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3REb2NzID0gdm9pZCAwO1xudmFyIGNvdERvY3MgPSB7XG4gIG5hbWU6ICdjb3QnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydjb3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb3RhbmdlbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvdGFuKHgpJyxcbiAgZXhhbXBsZXM6IFsnY290KDIpJywgJzEgLyB0YW4oMiknXSxcbiAgc2VlYWxzbzogWydzZWMnLCAnY3NjJywgJ3RhbiddXG59O1xuZXhwb3J0cy5jb3REb2NzID0gY290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY290aERvY3MgPSB2b2lkIDA7XG52YXIgY290aERvY3MgPSB7XG4gIG5hbWU6ICdjb3RoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY290aCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY290YW5nZW50IG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3RoKDIpJywgJzEgLyB0YW5oKDIpJ10sXG4gIHNlZWFsc286IFsnc2VjaCcsICdjc2NoJywgJ3RhbmgnXVxufTtcbmV4cG9ydHMuY290aERvY3MgPSBjb3RoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjRG9jcyA9IHZvaWQgMDtcbnZhciBjc2NEb2NzID0ge1xuICBuYW1lOiAnY3NjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY3NjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luKHgpJyxcbiAgZXhhbXBsZXM6IFsnY3NjKDIpJywgJzEgLyBzaW4oMiknXSxcbiAgc2VlYWxzbzogWydzZWMnLCAnY290JywgJ3NpbiddXG59O1xuZXhwb3J0cy5jc2NEb2NzID0gY3NjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjaERvY3MgPSB2b2lkIDA7XG52YXIgY3NjaERvY3MgPSB7XG4gIG5hbWU6ICdjc2NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY3NjaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luaCh4KScsXG4gIGV4YW1wbGVzOiBbJ2NzY2goMiknLCAnMSAvIHNpbmgoMiknXSxcbiAgc2VlYWxzbzogWydzZWNoJywgJ2NvdGgnLCAnc2luaCddXG59O1xuZXhwb3J0cy5jc2NoRG9jcyA9IGNzY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZWNEb2NzID0gdm9pZCAwO1xudmFyIHNlY0RvY3MgPSB7XG4gIG5hbWU6ICdzZWMnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydzZWMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvY29zKHgpJyxcbiAgZXhhbXBsZXM6IFsnc2VjKDIpJywgJzEgLyBjb3MoMiknXSxcbiAgc2VlYWxzbzogWydjb3QnLCAnY3NjJywgJ2NvcyddXG59O1xuZXhwb3J0cy5zZWNEb2NzID0gc2VjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2VjaERvY3MgPSB2b2lkIDA7XG52YXIgc2VjaERvY3MgPSB7XG4gIG5hbWU6ICdzZWNoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2VjaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL2Nvc2goeCknLFxuICBleGFtcGxlczogWydzZWNoKDIpJywgJzEgLyBjb3NoKDIpJ10sXG4gIHNlZWFsc286IFsnY290aCcsICdjc2NoJywgJ2Nvc2gnXVxufTtcbmV4cG9ydHMuc2VjaERvY3MgPSBzZWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luRG9jcyA9IHZvaWQgMDtcbnZhciBzaW5Eb2NzID0ge1xuICBuYW1lOiAnc2luJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2luKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnc2luKDIpJywgJ3NpbihwaSAvIDQpIF4gMicsICdzaW4oOTAgZGVnKScsICdzaW4oMzAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLFxuICBzZWVhbHNvOiBbJ2FzaW4nLCAnY29zJywgJ3RhbiddXG59O1xuZXhwb3J0cy5zaW5Eb2NzID0gc2luRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luaERvY3MgPSB2b2lkIDA7XG52YXIgc2luaERvY3MgPSB7XG4gIG5hbWU6ICdzaW5oJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2luaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnc2luaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnY29zaCcsICd0YW5oJ11cbn07XG5leHBvcnRzLnNpbmhEb2NzID0gc2luaERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbkRvY3MgPSB2b2lkIDA7XG52YXIgdGFuRG9jcyA9IHtcbiAgbmFtZTogJ3RhbicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3Rhbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3RhbigwLjUpJywgJ3NpbigwLjUpIC8gY29zKDAuNSknLCAndGFuKHBpIC8gNCknLCAndGFuKDQ1IGRlZyknXSxcbiAgc2VlYWxzbzogWydhdGFuJywgJ3NpbicsICdjb3MnXVxufTtcbmV4cG9ydHMudGFuRG9jcyA9IHRhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbmhEb2NzID0gdm9pZCAwO1xudmFyIHRhbmhEb2NzID0ge1xuICBuYW1lOiAndGFuaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3RhbmgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3RhbmgoMC41KScsICdzaW5oKDAuNSkgLyBjb3NoKDAuNSknXSxcbiAgc2VlYWxzbzogWydzaW5oJywgJ2Nvc2gnXVxufTtcbmV4cG9ydHMudGFuaERvY3MgPSB0YW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9Eb2NzID0gdm9pZCAwO1xudmFyIHRvRG9jcyA9IHtcbiAgbmFtZTogJ3RvJyxcbiAgY2F0ZWdvcnk6ICdVbml0cycsXG4gIHN5bnRheDogWyd4IHRvIHVuaXQnLCAndG8oeCwgdW5pdCknXSxcbiAgZGVzY3JpcHRpb246ICdDaGFuZ2UgdGhlIHVuaXQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWyc1IGluY2ggdG8gY20nLCAnMy4ya2cgdG8gZycsICcxNiBieXRlcyBpbiBiaXRzJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy50b0RvY3MgPSB0b0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNsb25lRG9jcyA9IHZvaWQgMDtcbnZhciBjbG9uZURvY3MgPSB7XG4gIG5hbWU6ICdjbG9uZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnY2xvbmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDbG9uZSBhIHZhcmlhYmxlLiBDcmVhdGVzIGEgY29weSBvZiBwcmltaXRpdmUgdmFyaWFibGVzLGFuZCBhIGRlZXAgY29weSBvZiBtYXRyaWNlcycsXG4gIGV4YW1wbGVzOiBbJ2Nsb25lKDMuNSknLCAnY2xvbmUoMiAtIDRpKScsICdjbG9uZSg0NSBkZWcpJywgJ2Nsb25lKFsxLCAyOyAzLCA0XSknLCAnY2xvbmUoXCJoZWxsbyB3b3JsZFwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuY2xvbmVEb2NzID0gY2xvbmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JtYXREb2NzID0gdm9pZCAwO1xudmFyIGZvcm1hdERvY3MgPSB7XG4gIG5hbWU6ICdmb3JtYXQnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2Zvcm1hdCh2YWx1ZSknLCAnZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pJ10sXG4gIGRlc2NyaXB0aW9uOiAnRm9ybWF0IGEgdmFsdWUgb2YgYW55IHR5cGUgYXMgc3RyaW5nLicsXG4gIGV4YW1wbGVzOiBbJ2Zvcm1hdCgyLjMpJywgJ2Zvcm1hdCgzIC0gNGkpJywgJ2Zvcm1hdChbXSknLCAnZm9ybWF0KHBpLCAzKSddLFxuICBzZWVhbHNvOiBbJ3ByaW50J11cbn07XG5leHBvcnRzLmZvcm1hdERvY3MgPSBmb3JtYXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEb2NzID0gdm9pZCAwO1xudmFyIGhhc051bWVyaWNWYWx1ZURvY3MgPSB7XG4gIG5hbWU6ICdoYXNOdW1lcmljVmFsdWUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2hhc051bWVyaWNWYWx1ZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIG51bWVyaWMgdmFsdWUuICcgKyAnSW4gY2FzZSBvZiBhIHN0cmluZywgdHJ1ZSBpcyByZXR1cm5lZCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtZXJpYyB2YWx1ZS4nLFxuICBleGFtcGxlczogWydoYXNOdW1lcmljVmFsdWUoMiknLCAnaGFzTnVtZXJpY1ZhbHVlKFwiMlwiKScsICdpc051bWVyaWMoXCIyXCIpJywgJ2hhc051bWVyaWNWYWx1ZSgwKScsICdoYXNOdW1lcmljVmFsdWUoYmlnbnVtYmVyKDUwMCkpJywgJ2hhc051bWVyaWNWYWx1ZShmcmFjdGlvbigwLjEyNSkpJywgJ2hhc051bWVyaWNWYWx1ZSgyICsgM2kpJywgJ2hhc051bWVyaWNWYWx1ZShbMi4zLCBcImZvb1wiLCBmYWxzZV0pJ10sXG4gIHNlZWFsc286IFsnaXNJbnRlZ2VyJywgJ2lzWmVybycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNOYU4nLCAnaXNOdW1lcmljJ11cbn07XG5leHBvcnRzLmhhc051bWVyaWNWYWx1ZURvY3MgPSBoYXNOdW1lcmljVmFsdWVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXJEb2NzID0gdm9pZCAwO1xudmFyIGlzSW50ZWdlckRvY3MgPSB7XG4gIG5hbWU6ICdpc0ludGVnZXInLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzSW50ZWdlcih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIGludGVnZXIgbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ2lzSW50ZWdlcigyKScsICdpc0ludGVnZXIoMy41KScsICdpc0ludGVnZXIoWzMsIDAuNSwgLTJdKSddLFxuICBzZWVhbHNvOiBbJ2lzTmVnYXRpdmUnLCAnaXNOdW1lcmljJywgJ2lzUG9zaXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzSW50ZWdlckRvY3MgPSBpc0ludGVnZXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05hTkRvY3MgPSB2b2lkIDA7XG52YXIgaXNOYU5Eb2NzID0ge1xuICBuYW1lOiAnaXNOYU4nLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzTmFOKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgTmFOIChub3QgYSBudW1iZXIpJyxcbiAgZXhhbXBsZXM6IFsnaXNOYU4oMiknLCAnaXNOYU4oMCAvIDApJywgJ2lzTmFOKE5hTiknLCAnaXNOYU4oSW5maW5pdHkpJ10sXG4gIHNlZWFsc286IFsnaXNOZWdhdGl2ZScsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNOYU5Eb2NzID0gaXNOYU5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05lZ2F0aXZlRG9jcyA9IHZvaWQgMDtcbnZhciBpc05lZ2F0aXZlRG9jcyA9IHtcbiAgbmFtZTogJ2lzTmVnYXRpdmUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzTmVnYXRpdmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBuZWdhdGl2ZTogc21hbGxlciB0aGFuIHplcm8uJyxcbiAgZXhhbXBsZXM6IFsnaXNOZWdhdGl2ZSgyKScsICdpc05lZ2F0aXZlKDApJywgJ2lzTmVnYXRpdmUoLTQpJywgJ2lzTmVnYXRpdmUoWzMsIDAuNSwgLTJdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURvY3MgPSBpc05lZ2F0aXZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOdW1lcmljRG9jcyA9IHZvaWQgMDtcbnZhciBpc051bWVyaWNEb2NzID0ge1xuICBuYW1lOiAnaXNOdW1lcmljJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc051bWVyaWMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhIG51bWVyaWMgdmFsdWUuICcgKyAnUmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgbnVtYmVyLCBCaWdOdW1iZXIsIEZyYWN0aW9uLCBvciBib29sZWFuLicsXG4gIGV4YW1wbGVzOiBbJ2lzTnVtZXJpYygyKScsICdpc051bWVyaWMoXCIyXCIpJywgJ2hhc051bWVyaWNWYWx1ZShcIjJcIiknLCAnaXNOdW1lcmljKDApJywgJ2lzTnVtZXJpYyhiaWdudW1iZXIoNTAwKSknLCAnaXNOdW1lcmljKGZyYWN0aW9uKDAuMTI1KSknLCAnaXNOdW1lcmljKDIgKyAzaSknLCAnaXNOdW1lcmljKFsyLjMsIFwiZm9vXCIsIGZhbHNlXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNaZXJvJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZScsICdpc05hTicsICdoYXNOdW1lcmljVmFsdWUnXVxufTtcbmV4cG9ydHMuaXNOdW1lcmljRG9jcyA9IGlzTnVtZXJpY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUG9zaXRpdmVEb2NzID0gdm9pZCAwO1xudmFyIGlzUG9zaXRpdmVEb2NzID0ge1xuICBuYW1lOiAnaXNQb3NpdGl2ZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNQb3NpdGl2ZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHBvc2l0aXZlOiBsYXJnZXIgdGhhbiB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoMiknLCAnaXNQb3NpdGl2ZSgwKScsICdpc1Bvc2l0aXZlKC00KScsICdpc1Bvc2l0aXZlKFszLCAwLjUsIC0yXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzUG9zaXRpdmVEb2NzID0gaXNQb3NpdGl2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUHJpbWVEb2NzID0gdm9pZCAwO1xudmFyIGlzUHJpbWVEb2NzID0ge1xuICBuYW1lOiAnaXNQcmltZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNQcmltZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHByaW1lOiBoYXMgbm8gZGl2aXNvcnMgb3RoZXIgdGhhbiBpdHNlbGYgYW5kIG9uZS4nLFxuICBleGFtcGxlczogWydpc1ByaW1lKDMpJywgJ2lzUHJpbWUoLTIpJywgJ2lzUHJpbWUoWzIsIDE3LCAxMDBdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNOZWdhdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNQcmltZURvY3MgPSBpc1ByaW1lRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNaZXJvRG9jcyA9IHZvaWQgMDtcbnZhciBpc1plcm9Eb2NzID0ge1xuICBuYW1lOiAnaXNaZXJvJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc1plcm8oeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzWmVybygyKScsICdpc1plcm8oMCknLCAnaXNaZXJvKC00KScsICdpc1plcm8oWzMsIDAsIC0yLCAwXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZSddXG59O1xuZXhwb3J0cy5pc1plcm9Eb2NzID0gaXNaZXJvRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVtZXJpY0RvY3MgPSB2b2lkIDA7XG52YXIgbnVtZXJpY0RvY3MgPSB7XG4gIG5hbWU6ICdudW1lcmljJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydudW1lcmljKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29udmVydCBhIG51bWVyaWMgaW5wdXQgdG8gYSBzcGVjaWZpYyBudW1lcmljIHR5cGU6IG51bWJlciwgQmlnTnVtYmVyLCBvciBGcmFjdGlvbi4nLFxuICBleGFtcGxlczogWydudW1lcmljKFwiNFwiKScsICdudW1lcmljKFwiNFwiLCBcIm51bWJlclwiKScsICdudW1lcmljKFwiNFwiLCBcIkJpZ051bWJlclwiKScsICdudW1lcmljKFwiNFwiLCBcIkZyYWN0aW9uKScsICdudW1lcmljKDQsIFwiRnJhY3Rpb25cIiknLCAnbnVtZXJpYyhmcmFjdGlvbigyLCA1KSwgXCJudW1iZXIpJ10sXG4gIHNlZWFsc286IFsnbnVtYmVyJywgJ2ZyYWN0aW9uJywgJ2JpZ251bWJlcicsICdzdHJpbmcnLCAnZm9ybWF0J11cbn07XG5leHBvcnRzLm51bWVyaWNEb2NzID0gbnVtZXJpY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVPZkRvY3MgPSB2b2lkIDA7XG52YXIgdHlwZU9mRG9jcyA9IHtcbiAgbmFtZTogJ3R5cGVPZicsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsndHlwZU9mKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSB0eXBlIG9mIGEgdmFyaWFibGUuJyxcbiAgZXhhbXBsZXM6IFsndHlwZU9mKDMuNSknLCAndHlwZU9mKDIgLSA0aSknLCAndHlwZU9mKDQ1IGRlZyknLCAndHlwZU9mKFwiaGVsbG8gd29ybGRcIiknXSxcbiAgc2VlYWxzbzogWydnZXRNYXRyaXhEYXRhVHlwZSddXG59O1xuZXhwb3J0cy50eXBlT2ZEb2NzID0gdHlwZU9mRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGlsZSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjb21waWxlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3BhcnNlJ107XG52YXIgY3JlYXRlQ29tcGlsZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBjb21waWxlIGFuIGV4cHJlc3Npb24uXG4gICAqIFJldHVybnMgYSBhbiBvYmplY3Qgd2l0aCBhIGZ1bmN0aW9uIGBldmFsdWF0ZShbc2NvcGVdKWAgdG8gZXZhbHVhdGUgdGhlXG4gICAqIGNvbXBpbGVkIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tcGlsZShleHByKSAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBvbmUgbm9kZVxuICAgKiAgICAgbWF0aC5jb21waWxlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKSAvLyByZXR1cm5zIGFuIGFycmF5IHdpdGggbm9kZXNcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBjb2RlMSA9IG1hdGguY29tcGlsZSgnc3FydCgzXjIgKyA0XjIpJylcbiAgICogICAgIGNvZGUxLmV2YWx1YXRlKCkgLy8gNVxuICAgKlxuICAgKiAgICAgbGV0IHNjb3BlID0ge2E6IDMsIGI6IDR9XG4gICAqICAgICBjb25zdCBjb2RlMiA9IG1hdGguY29tcGlsZSgnYSAqIGInKSAvLyAxMlxuICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDEyXG4gICAqICAgICBzY29wZS5hID0gNVxuICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDIwXG4gICAqXG4gICAqICAgICBjb25zdCBub2RlcyA9IG1hdGguY29tcGlsZShbJ2EgPSAzJywgJ2IgPSA0JywgJ2EgKiBiJ10pXG4gICAqICAgICBub2Rlc1syXS5ldmFsdWF0ZSgpIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwYXJzZSwgZXZhbHVhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IEFycmF5IHwgTWF0cml4fSBleHByXG4gICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgY29tcGlsZWRcbiAgICogQHJldHVybiB7e2V2YWx1YXRlOiBGdW5jdGlvbn0gfCBBcnJheS48e2V2YWx1YXRlOiBGdW5jdGlvbn0+fSBjb2RlXG4gICAqICAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggdGhlIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGlsZSA9IGNyZWF0ZUNvbXBpbGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURlcHJlY2F0ZWRFdmFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG4vLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE4LTEyLTA1XG52YXIgY3JlYXRlRGVwcmVjYXRlZEV2YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ2V2YWwnLCBbJ2V2YWx1YXRlJ10sIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBldmFsdWF0ZSA9IF9yZWYuZXZhbHVhdGU7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9sb2cud2Fybk9uY2UpKCdGdW5jdGlvbiBcImV2YWxcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwiZXZhbHVhdGVcIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBldmFsdWF0ZS5hcHBseShldmFsdWF0ZSwgYXJncyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZEV2YWwgPSBjcmVhdGVEZXByZWNhdGVkRXZhbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXZhbHVhdGUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZXZhbHVhdGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAncGFyc2UnXTtcbnZhciBjcmVhdGVFdmFsdWF0ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlIGFuIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLFxuICAgKiBzZWUgW2h0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWxdKGh0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIpXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIsIHNjb3BlKVxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0sIHNjb3BlKVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnKDIrMykvNCcpICAgICAgICAgICAgICAgIC8vIDEuMjVcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJ3NxcnQoM14yICsgNF4yKScpICAgICAgICAvLyA1XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoWydhPTMnLCAnYj00JywgJ2EqYiddKSAgICAvLyBbMywgNCwgMTJdXG4gICAqXG4gICAqICAgICBsZXQgc2NvcGUgPSB7YTozLCBiOjR9XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdhICogYicsIHNjb3BlKSAgICAgICAgICAgLy8gMTJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHBhcnNlLCBjb21waWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBNYXRyaXh9IGV4cHIgICBUaGUgZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtzY29wZV0gICAgICAgICAgICAgICAgICAgIFNjb3BlIHRvIHJlYWQvd3JpdGUgdmFyaWFibGVzXG4gICAqIEByZXR1cm4geyp9IFRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb25cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHtcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuICAgICAgcmV0dXJuIHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZXhwcikge1xuICAgICAgdmFyIHNjb3BlID0ge307XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgT2JqZWN0JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoZXhwciwgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBwYXJzZShlbnRyeSkuY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXZhbHVhdGUgPSBjcmVhdGVFdmFsdWF0ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSGVscCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2VtYmVkZGVkRG9jcyA9IHJlcXVpcmUoXCIuLi9lbWJlZGRlZERvY3MvZW1iZWRkZWREb2NzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBuYW1lID0gJ2hlbHAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0aFdpdGhUcmFuc2Zvcm0nLCAnSGVscCddO1xudmFyIGNyZWF0ZUhlbHAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLFxuICAgICAgSGVscCA9IF9yZWYuSGVscDtcblxuICAvKipcbiAgICogUmV0cmlldmUgaGVscCBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS5cbiAgICogSGVscCBmaWxlcyBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGVtYmVkZGVkIGRvY3VtZW50YXRpb24gaW4gbWF0aC5kb2NzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaGVscChzZWFyY2gpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zb2xlLmxvZyhtYXRoLmhlbHAoJ3NpbicpLnRvU3RyaW5nKCkpXG4gICAqICAgIGNvbnNvbGUubG9nKG1hdGguaGVscChtYXRoLmFkZCkudG9TdHJpbmcoKSlcbiAgICogICAgY29uc29sZS5sb2cobWF0aC5oZWxwKG1hdGguYWRkKS50b0pTT04oKSlcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8IHN0cmluZyB8IE9iamVjdH0gc2VhcmNoICAgQSBmdW5jdGlvbiBvciBmdW5jdGlvbiBuYW1lXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB0byBnZXQgaGVscFxuICAgKiBAcmV0dXJuIHtIZWxwfSBBIGhlbHAgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHNlYXJjaCkge1xuICAgICAgdmFyIHByb3A7XG4gICAgICB2YXIgc2VhcmNoTmFtZSA9IHNlYXJjaDtcblxuICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBtYXRoV2l0aFRyYW5zZm9ybSkge1xuICAgICAgICAgIC8vIHNlYXJjaCBpbiBmdW5jdGlvbnMgYW5kIGNvbnN0YW50c1xuICAgICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobWF0aFdpdGhUcmFuc2Zvcm0sIHByb3ApICYmIHNlYXJjaCA9PT0gbWF0aFdpdGhUcmFuc2Zvcm1bcHJvcF0pIHtcbiAgICAgICAgICAgIHNlYXJjaE5hbWUgPSBwcm9wO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIFRPRE86IGltcGxlbWVudCBoZWxwIGZvciBkYXRhIHR5cGVzXG4gICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgIC8vIHNlYXJjaCBkYXRhIHR5cGVcbiAgICAgICAgIGZvciAocHJvcCBpbiBtYXRoLnR5cGUpIHtcbiAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShtYXRoLCBwcm9wKSkge1xuICAgICAgICAgaWYgKHNlYXJjaCA9PT0gbWF0aC50eXBlW3Byb3BdKSB7XG4gICAgICAgICB0ZXh0ID0gcHJvcFxuICAgICAgICAgYnJlYWtcbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgICovXG5cbiAgICAgIH1cblxuICAgICAgdmFyIGRvYyA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKF9lbWJlZGRlZERvY3MuZW1iZWRkZWREb2NzLCBzZWFyY2hOYW1lKTtcblxuICAgICAgaWYgKCFkb2MpIHtcbiAgICAgICAgdmFyIHNlYXJjaFRleHQgPSB0eXBlb2Ygc2VhcmNoTmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IHNlYXJjaE5hbWUubmFtZSA6IHNlYXJjaE5hbWU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZG9jdW1lbnRhdGlvbiBmb3VuZCBvbiBcIicgKyBzZWFyY2hUZXh0ICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgSGVscChkb2MpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSGVscCA9IGNyZWF0ZUhlbHA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3BhcnNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdQYXJzZXInXTtcbnZhciBjcmVhdGVQYXJzZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgUGFyc2VyID0gX3JlZi5QYXJzZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHBhcnNlci4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguUGFyc2VyYCBvYmplY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wYXJzZXIoKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IHBhcnNlciA9IG5ldyBtYXRoLnBhcnNlcigpXG4gICAqXG4gICAqICAgICAvLyBldmFsdWF0ZSBleHByZXNzaW9uc1xuICAgKiAgICAgY29uc3QgYSA9IHBhcnNlci5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgLy8gNVxuICAgKiAgICAgY29uc3QgYiA9IHBhcnNlci5ldmFsdWF0ZSgnc3FydCgtNCknKSAgICAgICAgLy8gMmlcbiAgICogICAgIGNvbnN0IGMgPSBwYXJzZXIuZXZhbHVhdGUoJzIgaW5jaCBpbiBjbScpICAgIC8vIDUuMDggY21cbiAgICogICAgIGNvbnN0IGQgPSBwYXJzZXIuZXZhbHVhdGUoJ2Nvcyg0NSBkZWcpJykgICAgIC8vIDAuNzA3MTA2NzgxMTg2NTQ3NlxuICAgKlxuICAgKiAgICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggPSA3IC8gMicpICAgICAgICAgICAgICAgICAvLyAzLjVcbiAgICogICAgIHBhcnNlci5ldmFsdWF0ZSgneCArIDMnKSAgICAgICAgICAgICAgICAgICAgIC8vIDYuNVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgICAgLy8gZih4LCB5KVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmKDIsIDMpJykgICAgICAgICAgICAgICAgICAgLy8gOFxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGFuZCBzZXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICogICAgIGNvbnN0IHggPSBwYXJzZXIuZ2V0KCd4JykgICAgICAgICAgICAgICAgLy8gN1xuICAgKiAgICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAvLyBmdW5jdGlvblxuICAgKiAgICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAvLyA5XG4gICAqICAgICBwYXJzZXIuc2V0KCdoJywgNTAwKVxuICAgKiAgICAgY29uc3QgaSA9IHBhcnNlci5ldmFsdWF0ZSgnaCAvIDInKSAgICAgICAvLyAyNTBcbiAgICogICAgIHBhcnNlci5zZXQoJ2hlbGxvJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnISdcbiAgICogICAgIH0pXG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ2hlbGxvKFwidXNlclwiKScpICAgICAgICAgLy8gXCJoZWxsbywgdXNlciFcIlxuICAgKlxuICAgKiAgICAgLy8gY2xlYXIgZGVmaW5lZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlc1xuICAgKiAgICAgcGFyc2VyLmNsZWFyKClcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV2YWx1YXRlLCBjb21waWxlLCBwYXJzZVxuICAgKlxuICAgKiBAcmV0dXJuIHtQYXJzZXJ9IFBhcnNlclxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2VyKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJzZXIgPSBjcmVhdGVQYXJzZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtleXdvcmRzID0gdm9pZCAwO1xuLy8gUmVzZXJ2ZWQga2V5d29yZHMgbm90IGFsbG93ZWQgdG8gdXNlIGluIHRoZSBwYXJzZXJcbnZhciBrZXl3b3JkcyA9IHtcbiAgZW5kOiB0cnVlXG59O1xuZXhwb3J0cy5rZXl3b3JkcyA9IGtleXdvcmRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY2Nlc3Nvck5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hY2Nlc3MgPSByZXF1aXJlKFwiLi91dGlscy9hY2Nlc3NcIik7XG5cbnZhciBuYW1lID0gJ0FjY2Vzc29yTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzdWJzZXQnLCAnTm9kZSddO1xudmFyIGNyZWF0ZUFjY2Vzc29yTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG4gIHZhciBhY2Nlc3MgPSAoMCwgX2FjY2Vzcy5hY2Nlc3NGYWN0b3J5KSh7XG4gICAgc3Vic2V0OiBzdWJzZXRcbiAgfSk7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgQWNjZXNzb3JOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBBY2Nlc3MgYW4gb2JqZWN0IHByb3BlcnR5IG9yIGdldCBhIG1hdHJpeCBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBvYmplY3QgICAgICAgICAgICAgICAgIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0byByZXRyaWV2ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwcm9wZXJ0eSBvciBzdWJzZXQuXG4gICAqIEBwYXJhbSB7SW5kZXhOb2RlfSBpbmRleCAgICAgICAgICAgICBJbmRleE5vZGUgY29udGFpbmluZyByYW5nZXNcbiAgICovXG5cbiAgZnVuY3Rpb24gQWNjZXNzb3JOb2RlKG9iamVjdCwgaW5kZXgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWNjZXNzb3JOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJvYmplY3RcIicpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9pcy5pc0luZGV4Tm9kZSkoaW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleE5vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImluZGV4XCInKTtcbiAgICB9XG5cbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdCB8fCBudWxsO1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpID8gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0Lm5hbWUgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhc3NpZ24gYSBuZXcgbmFtZSwgbmFtZSBpcyByZWFkLW9ubHknKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnQWNjZXNzb3JOb2RlJztcbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5pc0FjY2Vzc29yTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIHZhciBldmFsSW5kZXggPSB0aGlzLmluZGV4Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIGlmICh0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgdmFyIHByb3AgPSB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFjY2Vzc29yTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCksIHByb3ApO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBY2Nlc3Nvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IGV2YWxPYmplY3Qoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB2YXIgaW5kZXggPSBldmFsSW5kZXgoc2NvcGUsIGFyZ3MsIG9iamVjdCk7IC8vIHdlIHBhc3Mgb2JqZWN0IGhlcmUgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgcmV0dXJuIGFjY2VzcyhvYmplY3QsIGluZGV4KTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMub2JqZWN0LCAnb2JqZWN0JywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQWNjZXNzb3JOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBY2Nlc3Nvck5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5vYmplY3QsICdvYmplY3QnLCB0aGlzKSksIHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmluZGV4LCAnaW5kZXgnLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtBY2Nlc3Nvck5vZGV9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLm9iamVjdCwgdGhpcy5pbmRleCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHtcbiAgICAgIG9iamVjdCA9ICcoJyArIG9iamVjdCArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgdGhpcy5pbmRleC50b1N0cmluZyhvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcy5vYmplY3QpKSB7XG4gICAgICBvYmplY3QgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBvYmplY3QgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIHRoaXMuaW5kZXgudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHtcbiAgICAgIG9iamVjdCA9ICdcXFxcbGVmdChcXCcgKyBvYmplY3QgKyBcXCdcXFxccmlnaHQpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgdGhpcy5pbmRleC50b1RleChvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQWNjZXNzb3JOb2RlJyxcbiAgICAgIG9iamVjdDogdGhpcy5vYmplY3QsXG4gICAgICBpbmRleDogdGhpcy5pbmRleFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBY2Nlc3Nvck5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFjY2Vzc29yTm9kZVwiLCBvYmplY3Q6IC4uLiwgaW5kZXg6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtBY2Nlc3Nvck5vZGV9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZShqc29uLm9iamVjdCwganNvbi5pbmRleCk7XG4gIH07XG4gIC8qKlxuICAgKiBBcmUgcGFyZW50aGVzaXMgbmVlZGVkP1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG5lZWRQYXJlbnRoZXNpcyhub2RlKSB7XG4gICAgLy8gVE9ETzogbWF5YmUgbWFrZSBhIG1ldGhvZCBvbiB0aGUgbm9kZXMgd2hpY2ggdGVsbHMgd2hldGhlciB0aGV5IG5lZWQgcGFyZW50aGVzaXM/XG4gICAgcmV0dXJuICEoKDAsIF9pcy5pc0FjY2Vzc29yTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0FycmF5Tm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc09iamVjdE5vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSk7XG4gIH1cblxuICByZXR1cm4gQWNjZXNzb3JOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY2Nlc3Nvck5vZGUgPSBjcmVhdGVBY2Nlc3Nvck5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFycmF5Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0FycmF5Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlQXJyYXlOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBBcnJheU5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqIEhvbGRzIGFuIDEtZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gW2l0ZW1zXSAgIDEgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtc1xuICAgKi9cbiAgZnVuY3Rpb24gQXJyYXlOb2RlKGl0ZW1zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFycmF5Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVtcyA9IGl0ZW1zIHx8IFtdOyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpIHx8ICF0aGlzLml0ZW1zLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkJyk7XG4gICAgfSAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHYzLCByZW1vdmUgc29tZSBkYXlcblxuXG4gICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgQXJyYXlOb2RlLm5vZGVzYCBpcyBkZXByZWNhdGVkLCB1c2UgYEFycmF5Tm9kZS5pdGVtc2AgaW5zdGVhZCcpO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25vZGVzJywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBBcnJheU5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50eXBlID0gJ0FycmF5Tm9kZSc7XG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuaXNBcnJheU5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBBcnJheU5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGV2YWxJdGVtcyA9ICgwLCBfYXJyYXkubWFwKSh0aGlzLml0ZW1zLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuICAgIH0pO1xuICAgIHZhciBhc01hdHJpeCA9IG1hdGguY29uZmlnLm1hdHJpeCAhPT0gJ0FycmF5JztcblxuICAgIGlmIChhc01hdHJpeCkge1xuICAgICAgdmFyIG1hdHJpeCA9IG1hdGgubWF0cml4O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBcnJheU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX2FycmF5Lm1hcCkoZXZhbEl0ZW1zLCBmdW5jdGlvbiAoZXZhbEl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gZXZhbEl0ZW0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFycmF5Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5tYXApKGV2YWxJdGVtcywgZnVuY3Rpb24gKGV2YWxJdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxJdGVtKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5pdGVtc1tpXTtcbiAgICAgIGNhbGxiYWNrKG5vZGUsICdpdGVtc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFycmF5Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW1zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuaXRlbXNbaV0sICdpdGVtc1snICsgaSArICddJywgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXJyYXlOb2RlKGl0ZW1zKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QXJyYXlOb2RlfVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUodGhpcy5pdGVtcy5zbGljZSgwKSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgfSk7XG4gICAgcmV0dXJuICdbJyArIGl0ZW1zLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0FycmF5Tm9kZScsXG4gICAgICBpdGVtczogdGhpcy5pdGVtc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBcnJheU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFycmF5Tm9kZVwiLCBpdGVtczogWy4uLl19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUoanNvbi5pdGVtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnRvSFRNTChvcHRpb25zKTtcbiAgICB9KTtcbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPls8L3NwYW4+JyArIGl0ZW1zLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPl08L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcyA9ICdcXFxcYmVnaW57Ym1hdHJpeH0nO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgaWYgKG5vZGUuaXRlbXMpIHtcbiAgICAgICAgcyArPSBub2RlLml0ZW1zLm1hcChmdW5jdGlvbiAoY2hpbGROb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS50b1RleChvcHRpb25zKTtcbiAgICAgICAgfSkuam9pbignJicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcyArPSBub2RlLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgfSAvLyBuZXcgbGluZVxuXG5cbiAgICAgIHMgKz0gJ1xcXFxcXFxcJztcbiAgICB9KTtcbiAgICBzICs9ICdcXFxcZW5ke2JtYXRyaXh9JztcbiAgICByZXR1cm4gcztcbiAgfTtcblxuICByZXR1cm4gQXJyYXlOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcnJheU5vZGUgPSBjcmVhdGVBcnJheU5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzc2lnbm1lbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWNjZXNzID0gcmVxdWlyZShcIi4vdXRpbHMvYWNjZXNzXCIpO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2Fzc2lnblwiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgbmFtZSA9ICdBc3NpZ25tZW50Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzdWJzZXQnLCAnP21hdHJpeCcsIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCBhbGwsIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHN1YnNldFxuJ05vZGUnXTtcbnZhciBjcmVhdGVBc3NpZ25tZW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcbiAgdmFyIGFjY2VzcyA9ICgwLCBfYWNjZXNzLmFjY2Vzc0ZhY3RvcnkpKHtcbiAgICBzdWJzZXQ6IHN1YnNldFxuICB9KTtcbiAgdmFyIGFzc2lnbiA9ICgwLCBfYXNzaWduLmFzc2lnbkZhY3RvcnkpKHtcbiAgICBzdWJzZXQ6IHN1YnNldCxcbiAgICBtYXRyaXg6IG1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBBc3NpZ25tZW50Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICpcbiAgICogRGVmaW5lIGEgc3ltYm9sLCBsaWtlIGBhPTMuMmAsIHVwZGF0ZSBhIHByb3BlcnR5IGxpa2UgYGEuYj0zLjJgLCBvclxuICAgKiByZXBsYWNlIGEgc3Vic2V0IG9mIGEgbWF0cml4IGxpa2UgYEFbMiwyXT00MmAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG5ldyBBc3NpZ25tZW50Tm9kZShzeW1ib2wsIHZhbHVlKVxuICAgKiAgICAgbmV3IEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKVxuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBDb25zdGFudE5vZGUoMikpICAgICAgICAgICAgICAgICAgICAgICAvLyBhPTJcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBJbmRleE5vZGUoJ2InKSwgbmV3IENvbnN0YW50Tm9kZSgyKSkgICAvLyBhLmI9MlxuICAgKiAgICBuZXcgQXNzaWdubWVudE5vZGUobmV3IFN5bWJvbE5vZGUoJ2EnKSwgbmV3IEluZGV4Tm9kZSgxLCAyKSwgbmV3IENvbnN0YW50Tm9kZSgzKSkgIC8vIGFbMSwyXT0zXG4gICAqXG4gICAqIEBwYXJhbSB7U3ltYm9sTm9kZSB8IEFjY2Vzc29yTm9kZX0gb2JqZWN0ICBPYmplY3Qgb24gd2hpY2ggdG8gYXNzaWduIGEgdmFsdWVcbiAgICogQHBhcmFtIHtJbmRleE5vZGV9IFtpbmRleD1udWxsXSAgICAgICAgICAgIEluZGV4LCBwcm9wZXJ0eSBuYW1lIG9yIG1hdHJpeFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguIE9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgb2JqZWN0YCBpcyBhIFN5bWJvbE5vZGUsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvcGVydHkgaXMgYXNzaWduZWQgdG8gdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgc2NvcGUuXG4gICAqIEBwYXJhbSB7Tm9kZX0gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gYmUgYXNzaWduZWRcbiAgICovXG5cbiAgZnVuY3Rpb24gQXNzaWdubWVudE5vZGUob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXNzaWdubWVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuICAgIHRoaXMuaW5kZXggPSB2YWx1ZSA/IGluZGV4IDogbnVsbDtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgfHwgaW5kZXg7IC8vIHZhbGlkYXRlIGlucHV0XG5cbiAgICBpZiAoISgwLCBfaXMuaXNTeW1ib2xOb2RlKShvYmplY3QpICYmICEoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2xOb2RlIG9yIEFjY2Vzc29yTm9kZSBleHBlY3RlZCBhcyBcIm9iamVjdFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShvYmplY3QpICYmIG9iamVjdC5uYW1lID09PSAnZW5kJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIHRvIHN5bWJvbCBcImVuZFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5kZXggJiYgISgwLCBfaXMuaXNJbmRleE5vZGUpKHRoaXMuaW5kZXgpKSB7XG4gICAgICAvLyBpbmRleCBpcyBvcHRpb25hbFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXhOb2RlIGV4cGVjdGVkIGFzIFwiaW5kZXhcIicpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGFzIFwidmFsdWVcIicpO1xuICAgIH0gLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hbWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCkgPyB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCkgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QubmFtZSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFzc2lnbiBhIG5ldyBuYW1lLCBuYW1lIGlzIHJlYWQtb25seScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQXNzaWdubWVudE5vZGUnO1xuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuaXNBc3NpZ25tZW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsT2JqZWN0ID0gdGhpcy5vYmplY3QuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxJbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSA6IG51bGw7XG5cbiAgICB2YXIgZXZhbFZhbHVlID0gdGhpcy52YWx1ZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMub2JqZWN0Lm5hbWU7XG5cbiAgICBpZiAoIXRoaXMuaW5kZXgpIHtcbiAgICAgIC8vIGFwcGx5IGEgdmFyaWFibGUgdG8gdGhlIHNjb3BlLCBmb3IgZXhhbXBsZSBgYT0yYFxuICAgICAgaWYgKCEoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5vYmplY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbE5vZGUgZXhwZWN0ZWQgYXMgb2JqZWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHNjb3BlLCBuYW1lLCBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgLy8gYXBwbHkgYW4gb2JqZWN0IHByb3BlcnR5IGZvciBleGFtcGxlIGBhLmI9MmBcbiAgICAgIHZhciBwcm9wID0gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciB2YWx1ZSA9IGV2YWxWYWx1ZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShvYmplY3QsIHByb3AsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5vYmplY3QpKSB7XG4gICAgICAvLyB1cGRhdGUgYSBtYXRyaXggc3Vic2V0LCBmb3IgZXhhbXBsZSBgYVsyXT0zYFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBldmFsT2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIHZhbHVlID0gZXZhbFZhbHVlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBjaGlsZE9iamVjdCk7IC8vIEltcG9ydGFudDogIHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgKDAsIF9jdXN0b21zLnNldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUsIGFzc2lnbihjaGlsZE9iamVjdCwgaW5kZXgsIHZhbHVlKSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlzQWNjZXNzb3JOb2RlKG5vZGUub2JqZWN0KSA9PT0gdHJ1ZVxuICAgICAgLy8gdXBkYXRlIGEgbWF0cml4IHN1YnNldCwgZm9yIGV4YW1wbGUgYGEuYlsyXT0zYFxuICAgICAgLy8gd2Ugd2lsbCBub3QgdXNlIHRoZSBjb21waWxlIGZ1bmN0aW9uIG9mIHRoZSBBY2Nlc3Nvck5vZGUsIGJ1dCBjb21waWxlIGl0XG4gICAgICAvLyBvdXJzZWx2ZXMgaGVyZSBhcyB3ZSBuZWVkIHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBBY2Nlc3Nvck5vZGU6XG4gICAgICAvLyB3ZWUgbmVlZCB0byBhcHBseSB0aGUgdXBkYXRlZCBvYmplY3QgdG8gcGFyZW50IG9iamVjdFxuICAgICAgdmFyIGV2YWxQYXJlbnRPYmplY3QgPSB0aGlzLm9iamVjdC5vYmplY3QuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICBpZiAodGhpcy5vYmplY3QuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKSB7XG4gICAgICAgIHZhciBwYXJlbnRQcm9wID0gdGhpcy5vYmplY3QuaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShwYXJlbnQsIHBhcmVudFByb3ApO1xuICAgICAgICAgIHZhciBpbmRleCA9IGV2YWxJbmRleChzY29wZSwgYXJncywgY2hpbGRPYmplY3QpOyAvLyBJbXBvcnRhbnQ6IHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHBhcmVudCwgcGFyZW50UHJvcCwgYXNzaWduKGNoaWxkT2JqZWN0LCBpbmRleCwgdmFsdWUpKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiBzb21lIHBhcmFtZXRlcnMgdXNlIHRoZSAnZW5kJyBwYXJhbWV0ZXIsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzaXplXG4gICAgICAgIHZhciBldmFsUGFyZW50SW5kZXggPSB0aGlzLm9iamVjdC5pbmRleC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgcGFyZW50SW5kZXggPSBldmFsUGFyZW50SW5kZXgoc2NvcGUsIGFyZ3MsIHBhcmVudCk7IC8vIEltcG9ydGFudDogd2UgcGFzcyBwYXJlbnQgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBhY2Nlc3MocGFyZW50LCBwYXJlbnRJbmRleCk7XG4gICAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBjaGlsZE9iamVjdCk7IC8vIEltcG9ydGFudDogIHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAgIGFzc2lnbihwYXJlbnQsIHBhcmVudEluZGV4LCBhc3NpZ24oY2hpbGRPYmplY3QsIGluZGV4LCB2YWx1ZSkpO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpO1xuXG4gICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuaW5kZXgsICdpbmRleCcsIHRoaXMpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHRoaXMudmFsdWUsICd2YWx1ZScsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFzc2lnbm1lbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBc3NpZ25tZW50Tm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpKTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcykpIDogbnVsbDtcblxuICAgIHZhciB2YWx1ZSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnZhbHVlLCAndmFsdWUnLCB0aGlzKSk7XG5cbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQXNzaWdubWVudE5vZGUodGhpcy5vYmplY3QsIHRoaXMuaW5kZXgsIHRoaXMudmFsdWUpO1xuICB9O1xuICAvKlxuICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/XG4gICAqIEBwYXJhbSB7bm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmVudGhlc2lzPSdrZWVwJ11cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgICBpZiAoIXBhcmVudGhlc2lzKSB7XG4gICAgICBwYXJlbnRoZXNpcyA9ICdrZWVwJztcbiAgICB9XG5cbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnZhbHVlLCBwYXJlbnRoZXNpcyk7XG4gICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBleHByUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBleHByUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9TdHJpbmcob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9ICcoJyArIHZhbHVlICsgJyknO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICcgPSAnICsgdmFsdWU7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQXNzaWdubWVudE5vZGUnLFxuICAgICAgb2JqZWN0OiB0aGlzLm9iamVjdCxcbiAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFzc2lnbm1lbnROb2RlXCIsIG9iamVjdDogLi4uLCBpbmRleDogLi4uLCB2YWx1ZTogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Fzc2lnbm1lbnROb2RlfVxuICAgKi9cblxuXG4gIEFzc2lnbm1lbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKGpzb24ub2JqZWN0LCBqc29uLmluZGV4LCBqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9IVE1MKG9wdGlvbnMpO1xuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4LnRvSFRNTChvcHRpb25zKSA6ICcnO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9ICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHZhbHVlICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJhbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtdmFyaWFibGUtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvclwiPj08L3NwYW4+JyArIHZhbHVlO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9UZXgob3B0aW9ucyk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9UZXgob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KHZhbHVlLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIGluZGV4ICsgJzo9JyArIHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBBc3NpZ25tZW50Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXNzaWdubWVudE5vZGUgPSBjcmVhdGVBc3NpZ25tZW50Tm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmxvY2tOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnQmxvY2tOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ1Jlc3VsdFNldCcsICdOb2RlJ107XG52YXIgY3JlYXRlQmxvY2tOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIFJlc3VsdFNldCA9IF9yZWYuUmVzdWx0U2V0LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEJsb2NrTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogSG9sZHMgYSBzZXQgd2l0aCBibG9ja3NcbiAgICogQHBhcmFtIHtBcnJheS48e25vZGU6IE5vZGV9IHwge25vZGU6IE5vZGUsIHZpc2libGU6IGJvb2xlYW59Pn0gYmxvY2tzXG4gICAqICAgICAgICAgICAgQW4gYXJyYXkgd2l0aCBibG9ja3MsIHdoZXJlIGEgYmxvY2sgaXMgY29uc3RydWN0ZWQgYXMgYW4gT2JqZWN0XG4gICAqICAgICAgICAgICAgd2l0aCBwcm9wZXJ0aWVzIGJsb2NrLCB3aGljaCBpcyBhIE5vZGUsIGFuZCB2aXNpYmxlLCB3aGljaCBpc1xuICAgKiAgICAgICAgICAgIGEgYm9vbGVhbi4gVGhlIHByb3BlcnR5IHZpc2libGUgaXMgb3B0aW9uYWwgYW5kIGlzIHRydWUgYnkgZGVmYXVsdFxuICAgKi9cbiAgZnVuY3Rpb24gQmxvY2tOb2RlKGJsb2Nrcykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCbG9ja05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXQsIGNvcHkgYmxvY2tzXG5cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShibG9ja3MpKSB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgdGhpcy5ibG9ja3MgPSBibG9ja3MubWFwKGZ1bmN0aW9uIChibG9jaykge1xuICAgICAgdmFyIG5vZGUgPSBibG9jayAmJiBibG9jay5ub2RlO1xuICAgICAgdmFyIHZpc2libGUgPSBibG9jayAmJiBibG9jay52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBibG9jay52aXNpYmxlIDogdHJ1ZTtcbiAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKG5vZGUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcIm5vZGVcIiBtdXN0IGJlIGEgTm9kZScpO1xuICAgICAgaWYgKHR5cGVvZiB2aXNpYmxlICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3BlcnR5IFwidmlzaWJsZVwiIG11c3QgYmUgYSBib29sZWFuJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICB2aXNpYmxlOiB2aXNpYmxlXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudHlwZSA9ICdCbG9ja05vZGUnO1xuICBCbG9ja05vZGUucHJvdG90eXBlLmlzQmxvY2tOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsQmxvY2tzID0gKDAsIF9hcnJheS5tYXApKHRoaXMuYmxvY2tzLCBmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV2YWx1YXRlOiBibG9jay5ub2RlLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSxcbiAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEJsb2NrTm9kZXMoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAoMCwgX2FycmF5LmZvckVhY2gpKGV2YWxCbG9ja3MsIGZ1bmN0aW9uIGV2YWxCbG9ja05vZGUoYmxvY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGJsb2NrLmV2YWx1YXRlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoYmxvY2sudmlzaWJsZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUmVzdWx0U2V0KHJlc3VsdHMpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIGJsb2NrcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ibG9ja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuYmxvY2tzW2ldLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEJsb2NrTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGJsb2NrcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGJsb2NrID0gdGhpcy5ibG9ja3NbaV07XG5cbiAgICAgIHZhciBub2RlID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKGJsb2NrLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcykpO1xuXG4gICAgICBibG9ja3NbaV0gPSB7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QmxvY2tOb2RlfVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGU6IGJsb2NrLm5vZGUsXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b1N0cmluZyhvcHRpb25zKSArIChwYXJhbS52aXNpYmxlID8gJycgOiAnOycpO1xuICAgIH0pLmpvaW4oJ1xcbicpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdCbG9ja05vZGUnLFxuICAgICAgYmxvY2tzOiB0aGlzLmJsb2Nrc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBCbG9ja05vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkJsb2NrTm9kZVwiLCBibG9ja3M6IFt7bm9kZTogLi4uLCB2aXNpYmxlOiBmYWxzZX0sIC4uLl19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoanNvbi5ibG9ja3MpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b0hUTUwob3B0aW9ucykgKyAocGFyYW0udmlzaWJsZSA/ICcnIDogJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj47PC9zcGFuPicpO1xuICAgIH0pLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj48YnIgLz48L3NwYW4+Jyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBCbG9ja05vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbS5ub2RlLnRvVGV4KG9wdGlvbnMpICsgKHBhcmFtLnZpc2libGUgPyAnJyA6ICc7Jyk7XG4gICAgfSkuam9pbignXFxcXDtcXFxcO1xcbicpO1xuICB9O1xuXG4gIHJldHVybiBCbG9ja05vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJsb2NrTm9kZSA9IGNyZWF0ZUJsb2NrTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uZGl0aW9uYWxOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgbmFtZSA9ICdDb25kaXRpb25hbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIGxhenkgZXZhbHVhdGluZyBjb25kaXRpb25hbCBvcGVyYXRvcjogJ2NvbmRpdGlvbiA/IHRydWVFeHByIDogZmFsc2VFeHByJ1xuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IGNvbmRpdGlvbiAgIENvbmRpdGlvbiwgbXVzdCByZXN1bHQgaW4gYSBib29sZWFuXG4gICAqIEBwYXJhbSB7Tm9kZX0gdHJ1ZUV4cHIgICAgRXhwcmVzc2lvbiBldmFsdWF0ZWQgd2hlbiBjb25kaXRpb24gaXMgdHJ1ZVxuICAgKiBAcGFyYW0ge05vZGV9IGZhbHNlRXhwciAgIEV4cHJlc3Npb24gZXZhbHVhdGVkIHdoZW4gY29uZGl0aW9uIGlzIHRydWVcbiAgICpcbiAgICogQGNvbnN0cnVjdG9yIENvbmRpdGlvbmFsTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29uZGl0aW9uYWxOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShjb25kaXRpb24pKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgY29uZGl0aW9uIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkodHJ1ZUV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgdHJ1ZUV4cHIgbXVzdCBiZSBhIE5vZGUnKTtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShmYWxzZUV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgZmFsc2VFeHByIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgdGhpcy50cnVlRXhwciA9IHRydWVFeHByO1xuICAgIHRoaXMuZmFsc2VFeHByID0gZmFsc2VFeHByO1xuICB9XG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudHlwZSA9ICdDb25kaXRpb25hbE5vZGUnO1xuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLmlzQ29uZGl0aW9uYWxOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsQ29uZGl0aW9uID0gdGhpcy5jb25kaXRpb24uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxUcnVlRXhwciA9IHRoaXMudHJ1ZUV4cHIuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxGYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbENvbmRpdGlvbmFsTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgcmV0dXJuIHRlc3RDb25kaXRpb24oZXZhbENvbmRpdGlvbihzY29wZSwgYXJncywgY29udGV4dCkpID8gZXZhbFRydWVFeHByKHNjb3BlLCBhcmdzLCBjb250ZXh0KSA6IGV2YWxGYWxzZUV4cHIoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5jb25kaXRpb24sICdjb25kaXRpb24nLCB0aGlzKTtcbiAgICBjYWxsYmFjayh0aGlzLnRydWVFeHByLCAndHJ1ZUV4cHInLCB0aGlzKTtcbiAgICBjYWxsYmFjayh0aGlzLmZhbHNlRXhwciwgJ2ZhbHNlRXhwcicsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENvbmRpdGlvbmFsTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7Q29uZGl0aW9uYWxOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbE5vZGUodGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuY29uZGl0aW9uLCAnY29uZGl0aW9uJywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy50cnVlRXhwciwgJ3RydWVFeHByJywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5mYWxzZUV4cHIsICdmYWxzZUV4cHInLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtDb25kaXRpb25hbE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbiwgdGhpcy50cnVlRXhwciwgdGhpcy5mYWxzZUV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGVcbiAgICAvLyBvciBoYXZlIGxvd2VyIG9yIGVxdWFsIHByZWNlZGVuY2VcbiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvblxuICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eVxuXG4gICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciBjb25kaXRpb25QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5jb25kaXRpb24sIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5jb25kaXRpb24udHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgY29uZGl0aW9uUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBjb25kaXRpb25QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgIGNvbmRpdGlvbiA9ICcoJyArIGNvbmRpdGlvbiArICcpJztcbiAgICB9XG5cbiAgICB2YXIgdHJ1ZUV4cHIgPSB0aGlzLnRydWVFeHByLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciB0cnVlUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMudHJ1ZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy50cnVlRXhwci50eXBlID09PSAnT3BlcmF0b3JOb2RlJyB8fCB0cnVlUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiB0cnVlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICB0cnVlRXhwciA9ICcoJyArIHRydWVFeHByICsgJyknO1xuICAgIH1cblxuICAgIHZhciBmYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci50b1N0cmluZyhvcHRpb25zKTtcbiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBmYWxzZUV4cHIgPSAnKCcgKyBmYWxzZUV4cHIgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbiArICcgPyAnICsgdHJ1ZUV4cHIgKyAnIDogJyArIGZhbHNlRXhwcjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQ29uZGl0aW9uYWxOb2RlJyxcbiAgICAgIGNvbmRpdGlvbjogdGhpcy5jb25kaXRpb24sXG4gICAgICB0cnVlRXhwcjogdGhpcy50cnVlRXhwcixcbiAgICAgIGZhbHNlRXhwcjogdGhpcy5mYWxzZUV4cHJcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQ29uZGl0aW9uYWxOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDb25kaXRpb25hbE5vZGVcIiwgXCJjb25kaXRpb25cIjogLi4uLCBcInRydWVFeHByXCI6IC4uLiwgXCJmYWxzZUV4cHJcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0NvbmRpdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxOb2RlKGpzb24uY29uZGl0aW9uLCBqc29uLnRydWVFeHByLCBqc29uLmZhbHNlRXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGVcbiAgICAvLyBvciBoYXZlIGxvd2VyIG9yIGVxdWFsIHByZWNlZGVuY2VcbiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvblxuICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eVxuXG4gICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgY29uZGl0aW9uUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMuY29uZGl0aW9uLCBwYXJlbnRoZXNpcyk7XG5cbiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMuY29uZGl0aW9uLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IGNvbmRpdGlvblByZWNlZGVuY2UgIT09IG51bGwgJiYgY29uZGl0aW9uUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBjb25kaXRpb24gPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBjb25kaXRpb24gKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgdmFyIHRydWVFeHByID0gdGhpcy50cnVlRXhwci50b0hUTUwob3B0aW9ucyk7XG4gICAgdmFyIHRydWVQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy50cnVlRXhwciwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCB0aGlzLnRydWVFeHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IHRydWVQcmVjZWRlbmNlICE9PSBudWxsICYmIHRydWVQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgIHRydWVFeHByID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgdHJ1ZUV4cHIgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgdmFyIGZhbHNlRXhwciA9IHRoaXMuZmFsc2VFeHByLnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBmYWxzZUV4cHIgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBmYWxzZUV4cHIgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbiArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1jb25kaXRpb25hbC1vcGVyYXRvclwiPj88L3NwYW4+JyArIHRydWVFeHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWNvbmRpdGlvbmFsLW9wZXJhdG9yXCI+Ojwvc3Bhbj4nICsgZmFsc2VFeHByO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiAnXFxcXGJlZ2lue2Nhc2VzfSB7JyArIHRoaXMudHJ1ZUV4cHIudG9UZXgob3B0aW9ucykgKyAnfSwgJlxcXFxxdWFke1xcXFx0ZXh0e2lmIH1cXFxcOycgKyB0aGlzLmNvbmRpdGlvbi50b1RleChvcHRpb25zKSArICd9XFxcXFxcXFx7JyArIHRoaXMuZmFsc2VFeHByLnRvVGV4KG9wdGlvbnMpICsgJ30sICZcXFxccXVhZHtcXFxcdGV4dHtvdGhlcndpc2V9fVxcXFxlbmR7Y2FzZXN9JztcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGNvbmRpdGlvbiBpcyBtZXRcbiAgICogQHBhcmFtIHsqfSBjb25kaXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgY29uZGl0aW9uIGlzIHRydWUgb3Igbm9uLXplcm8sIGVsc2UgZmFsc2VcbiAgICovXG5cblxuICBmdW5jdGlvbiB0ZXN0Q29uZGl0aW9uKGNvbmRpdGlvbikge1xuICAgIGlmICh0eXBlb2YgY29uZGl0aW9uID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgY29uZGl0aW9uID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmRpdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAhIWNvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoY29uZGl0aW9uKSkge1xuICAgICAgICByZXR1cm4gIWNvbmRpdGlvbi5pc1plcm8oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNDb21wbGV4KShjb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiAhIShjb25kaXRpb24ucmUgfHwgY29uZGl0aW9uLmltKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNVbml0KShjb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiAhIWNvbmRpdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBvZiBjb25kaXRpb24gXCInICsgKDAsIF9pcy50eXBlT2YpKGNvbmRpdGlvbikgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiBDb25kaXRpb25hbE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IGNyZWF0ZUNvbmRpdGlvbmFsTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uc3RhbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdDb25zdGFudE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUNvbnN0YW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIENvbnN0YW50Tm9kZSBob2xkcyBhIGNvbnN0YW50IHZhbHVlIGxpa2UgYSBudW1iZXIgb3Igc3RyaW5nLlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgIG5ldyBDb25zdGFudE5vZGUoMi4zKVxuICAgKiAgICAgbmV3IENvbnN0YW50Tm9kZSgnaGVsbG8nKVxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlICAgIFZhbHVlIGNhbiBiZSBhbnkgdHlwZSAobnVtYmVyLCBCaWdOdW1iZXIsIHN0cmluZywgLi4uKVxuICAgKiBAY29uc3RydWN0b3IgQ29uc3RhbnROb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cbiAgZnVuY3Rpb24gQ29uc3RhbnROb2RlKHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGlvbiBlcnJvciBzb21lIGRheSAoY3JlYXRlZCAyMDE4LTAxLTIzKVxuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCduZXcgQ29uc3RhbnROb2RlKHZhbHVlU3RyLCB2YWx1ZVR5cGUpIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSBzaW5jZSBtYXRoIHY0LjAuMC4gVXNlIG5ldyBDb25zdGFudE5vZGUodmFsdWUpIGluc3RlYWQsIHdoZXJlIHZhbHVlIGlzIGEgbm9uLXN0cmluZ2lmaWVkIHZhbHVlLicpO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBDb25zdGFudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQ29uc3RhbnROb2RlJztcbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5pc0NvbnN0YW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsQ29uc3RhbnROb2RlKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7fSAvLyBub3RoaW5nIHRvIGRvLCB3ZSBkb24ndCBoYXZlIGNoaWxkc1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQ29uc3RhbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7Q29uc3RhbnROb2RlfSBSZXR1cm5zIGEgY2xvbmUgb2YgdGhlIG5vZGVcbiAgICovXG4gIDtcblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZX1cbiAgICovXG5cblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKHRoaXMudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLnZhbHVlLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuX3RvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgc3dpdGNoICgoMCwgX2lzLnR5cGVPZikodGhpcy52YWx1ZSkpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdCaWdOdW1iZXInOlxuICAgICAgY2FzZSAnRnJhY3Rpb24nOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1udW1iZXJcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN0cmluZ1wiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLWJvb2xlYW5cIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1udWxsLXN5bWJvbFwiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtdW5kZWZpbmVkXCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2xcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdDb25zdGFudE5vZGUnLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBDb25zdGFudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlN5bWJvbE5vZGVcIiwgdmFsdWU6IDIuM31gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLl90b1N0cmluZyhvcHRpb25zKTtcblxuICAgIHN3aXRjaCAoKDAsIF9pcy50eXBlT2YpKHRoaXMudmFsdWUpKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gJ1xcXFxtYXRodHR7JyArICgwLCBfbGF0ZXguZXNjYXBlTGF0ZXgpKHZhbHVlKSArICd9JztcblxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ0JpZ051bWJlcic6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIWlzRmluaXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS52YWx1ZU9mKCkgPCAwID8gJy1cXFxcaW5mdHknIDogJ1xcXFxpbmZ0eSc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZGV4ID0gdmFsdWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdlJyk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KSArICdcXFxcY2RvdDEwXnsnICsgdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSkgKyAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgICAgY2FzZSAnRnJhY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b0xhdGV4KCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENvbnN0YW50Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uc3RhbnROb2RlID0gY3JlYXRlQ29uc3RhbnROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZShcIi4uL2tleXdvcmRzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ05vZGUnXTtcbnZhciBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBGdW5jdGlvbkFzc2lnbm1lbnROb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBGdW5jdGlvbiBhc3NpZ25tZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICBGdW5jdGlvbiBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBBcnJheS48e25hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nfT59IHBhcmFtc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkgd2l0aCBmdW5jdGlvbiBwYXJhbWV0ZXIgbmFtZXMsIG9yIGFuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSB3aXRoIG9iamVjdHMgY29udGFpbmluZyB0aGUgbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHR5cGUgb2YgdGhlIHBhcmFtZXRlclxuICAgKiBAcGFyYW0ge05vZGV9IGV4cHIgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICovXG4gIGZ1bmN0aW9uIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUobmFtZSwgcGFyYW1zLCBleHByKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJuYW1lXCInKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBzdHJpbmdzIG9yIG9iamVjdHMgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcInBhcmFtc1wiJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoZXhwcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImV4cHJcIicpO1xuICAgIGlmIChuYW1lIGluIF9rZXl3b3Jkcy5rZXl3b3JkcykgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGZ1bmN0aW9uIG5hbWUsIFwiJyArIG5hbWUgKyAnXCIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0gJiYgcGFyYW0ubmFtZSB8fCBwYXJhbTtcbiAgICB9KTtcbiAgICB0aGlzLnR5cGVzID0gcGFyYW1zLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbSAmJiBwYXJhbS50eXBlIHx8ICdhbnknO1xuICAgIH0pO1xuICAgIHRoaXMuZXhwciA9IGV4cHI7XG4gIH1cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSc7XG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGNoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcbiAgICAoMCwgX2FycmF5LmZvckVhY2gpKHRoaXMucGFyYW1zLCBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIGNoaWxkQXJnTmFtZXNbcGFyYW1dID0gdHJ1ZTtcbiAgICB9KTsgLy8gY29tcGlsZSB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aXRoIHRoZSBjaGlsZCBhcmdzXG5cbiAgICB2YXIgZXZhbEV4cHIgPSB0aGlzLmV4cHIuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcbiAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXM7XG4gICAgdmFyIHNpZ25hdHVyZSA9ICgwLCBfYXJyYXkuam9pbikodGhpcy50eXBlcywgJywnKTtcbiAgICB2YXIgc3ludGF4ID0gbmFtZSArICcoJyArICgwLCBfYXJyYXkuam9pbikodGhpcy5wYXJhbXMsICcsICcpICsgJyknO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgdmFyIHNpZ25hdHVyZXMgPSB7fTtcblxuICAgICAgc2lnbmF0dXJlc1tzaWduYXR1cmVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGRBcmdzID0gT2JqZWN0LmNyZWF0ZShhcmdzKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNoaWxkQXJnc1twYXJhbXNbaV1dID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV2YWxFeHByKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGZuID0gdHlwZWQobmFtZSwgc2lnbmF0dXJlcyk7XG4gICAgICBmbi5zeW50YXggPSBzeW50YXg7XG4gICAgICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSwgZm4pO1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuZXhwciwgJ2V4cHInLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbkFzc2lnbm1lbnROb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBleHByID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZXhwciwgJ2V4cHInLCB0aGlzKSk7XG5cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUodGhpcy5uYW1lLCB0aGlzLnBhcmFtcy5zbGljZSgwKSwgZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHRoaXMubmFtZSwgdGhpcy5wYXJhbXMuc2xpY2UoMCksIHRoaXMuZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50aGVzaXNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLmV4cHIsIHBhcmVudGhlc2lzKTtcbiAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IGV4cHJQcmVjZWRlbmNlICE9PSBudWxsICYmIGV4cHJQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2U7XG4gIH1cbiAgLyoqXG4gICAqIGdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGV4cHIgPSB0aGlzLmV4cHIudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMsIHBhcmVudGhlc2lzKSkge1xuICAgICAgZXhwciA9ICcoJyArIGV4cHIgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubmFtZSArICcoJyArIHRoaXMucGFyYW1zLmpvaW4oJywgJykgKyAnKSA9ICcgKyBleHByO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdHlwZXMgPSB0aGlzLnR5cGVzO1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJyxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBhcmFtczogdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwYXJhbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBwYXJhbSxcbiAgICAgICAgICB0eXBlOiB0eXBlc1tpbmRleF1cbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgZXhwcjogdGhpcy5leHByXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkZ1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwgbmFtZTogLi4uLCBwYXJhbXM6IC4uLiwgZXhwcjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKGpzb24ubmFtZSwganNvbi5wYXJhbXMsIGpzb24uZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBnZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYXJhbXMucHVzaCgnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXBhcmFtZXRlclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMucGFyYW1zW2ldKSArICc8L3NwYW4+Jyk7XG4gICAgfVxuXG4gICAgdmFyIGV4cHIgPSB0aGlzLmV4cHIudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBleHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLWZ1bmN0aW9uXCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5uYW1lKSArICc8L3NwYW4+JyArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHBhcmFtcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+PHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLXZhcmlhYmxlLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3JcIj49PC9zcGFuPicgKyBleHByO1xuICB9O1xuICAvKipcbiAgICogZ2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBleHByID0gdGhpcy5leHByLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChleHByLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyB0aGlzLm5hbWUgKyAnfVxcXFxsZWZ0KCcgKyB0aGlzLnBhcmFtcy5tYXAoX2xhdGV4LnRvU3ltYm9sKS5qb2luKCcsJykgKyAnXFxcXHJpZ2h0KTo9JyArIGV4cHI7XG4gIH07XG5cbiAgcmV0dXJuIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbk5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAnRnVuY3Rpb25Ob2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ21hdGgnLCAnTm9kZScsICdTeW1ib2xOb2RlJ107XG52YXIgY3JlYXRlRnVuY3Rpb25Ob2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEZ1bmN0aW9uTm9kZVxuICAgKiBAZXh0ZW5kcyB7Li9Ob2RlfVxuICAgKiBpbnZva2UgYSBsaXN0IHdpdGggYXJndW1lbnRzIG9uIGEgbm9kZVxuICAgKiBAcGFyYW0gey4vTm9kZSB8IHN0cmluZ30gZm4gTm9kZSByZXNvbHZpbmcgd2l0aCBhIGZ1bmN0aW9uIG9uIHdoaWNoIHRvIGludm9rZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFyZ3VtZW50cywgdHlwaWNhbGx5IGEgU3ltYm9Ob2RlIG9yIEFjY2Vzc29yTm9kZVxuICAgKiBAcGFyYW0gey4vTm9kZVtdfSBhcmdzXG4gICAqL1xuICBmdW5jdGlvbiBGdW5jdGlvbk5vZGUoZm4sIGFyZ3MpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnc3RyaW5nJykge1xuICAgICAgZm4gPSBuZXcgU3ltYm9sTm9kZShmbik7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShmbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgYXMgcGFyYW1ldGVyIFwiZm5cIicpO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpIHx8ICFhcmdzLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJhcmdzXCInKTtcbiAgICB9XG5cbiAgICB0aGlzLmZuID0gZm47XG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZuLm5hbWUgfHwgJyc7XG4gICAgICB9LmJpbmQodGhpcyksXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIGEgbmV3IG5hbWUsIG5hbWUgaXMgcmVhZC1vbmx5Jyk7XG4gICAgICB9XG4gICAgfSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjMsIHJlbW92ZSBzb21lIGRheVxuXG4gICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgRnVuY3Rpb25Ob2RlLm9iamVjdGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBGdW5jdGlvbk5vZGUuZm5gIGluc3RlYWQnKTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdvYmplY3QnLCB7XG4gICAgICBnZXQ6IGRlcHJlY2F0ZWQsXG4gICAgICBzZXQ6IGRlcHJlY2F0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Ob2RlJztcbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5pc0Z1bmN0aW9uTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdmFsaWQgRnVuY3Rpb25Ob2RlJyk7XG4gICAgfSAvLyBjb21waWxlIGFyZ3VtZW50c1xuXG5cbiAgICB2YXIgZXZhbEFyZ3MgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcblxuICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5mbikpIHtcbiAgICAgIC8vIHdlIGNhbiBzdGF0aWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBoYXMgYW4gcmF3QXJncyBwcm9wZXJ0eVxuICAgICAgdmFyIF9uYW1lID0gdGhpcy5mbi5uYW1lO1xuICAgICAgdmFyIGZuID0gX25hbWUgaW4gbWF0aCA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsIF9uYW1lKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBpc1JhdyA9IHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiBmbi5yYXdBcmdzID09PSB0cnVlO1xuXG4gICAgICBpZiAoaXNSYXcpIHtcbiAgICAgICAgLy8gcGFzcyB1bmV2YWx1YXRlZCBwYXJhbWV0ZXJzIChub2RlcykgdG8gdGhlIGZ1bmN0aW9uXG4gICAgICAgIC8vIFwicmF3XCIgZXZhbHVhdGlvblxuICAgICAgICB2YXIgcmF3QXJncyA9IHRoaXMuYXJncztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShyYXdBcmdzLCBtYXRoLCBfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwicmVndWxhclwiIGV2YWx1YXRpb25cbiAgICAgICAgaWYgKGV2YWxBcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShldmFsQXJnMChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdmFyIF9ldmFsQXJnID0gZXZhbEFyZ3NbMF07XG4gICAgICAgICAgdmFyIGV2YWxBcmcxID0gZXZhbEFyZ3NbMV07XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAoX25hbWUgaW4gc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShzY29wZSwgX25hbWUpIDogZm4pKF9ldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEFyZzEoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKS5hcHBseShudWxsLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKSh0aGlzLmZuKSAmJiAoMCwgX2lzLmlzSW5kZXhOb2RlKSh0aGlzLmZuLmluZGV4KSAmJiB0aGlzLmZuLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgLy8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgY29udGV4dDogdGhlIG9iamVjdCBvZiB0aGUgQWNjZXNzb3JOb2RlXG4gICAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMuZm4ub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgdmFyIHByb3AgPSB0aGlzLmZuLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICB2YXIgX3Jhd0FyZ3MgPSB0aGlzLmFyZ3M7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgICgwLCBfY3VzdG9tcy52YWxpZGF0ZVNhZmVNZXRob2QpKG9iamVjdCwgcHJvcCk7XG4gICAgICAgIHZhciBpc1JhdyA9IG9iamVjdFtwcm9wXSAmJiBvYmplY3RbcHJvcF0ucmF3QXJncztcbiAgICAgICAgcmV0dXJuIGlzUmF3ID8gb2JqZWN0W3Byb3BdKF9yYXdBcmdzLCBtYXRoLCBfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKSAvLyBcInJhd1wiIGV2YWx1YXRpb25cbiAgICAgICAgOiBvYmplY3RbcHJvcF0uYXBwbHkob2JqZWN0LCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgLy8gXCJyZWd1bGFyXCIgZXZhbHVhdGlvblxuICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm9kZS5mbi5pc0FjY2Vzc29yTm9kZSAmJiAhbm9kZS5mbi5pbmRleC5pc09iamVjdFByb3BlcnR5KClcbiAgICAgIC8vIHdlIGhhdmUgdG8gZHluYW1pY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGhhcyBhIHJhd0FyZ3MgcHJvcGVydHlcbiAgICAgIHZhciBldmFsRm4gPSB0aGlzLmZuLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgdmFyIF9yYXdBcmdzMiA9IHRoaXMuYXJncztcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBmbiA9IGV2YWxGbihzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciBpc1JhdyA9IGZuICYmIGZuLnJhd0FyZ3M7XG4gICAgICAgIHJldHVybiBpc1JhdyA/IGZuKF9yYXdBcmdzMiwgbWF0aCwgX2V4dGVuZHMoe30sIHNjb3BlLCBhcmdzKSkgLy8gXCJyYXdcIiBldmFsdWF0aW9uXG4gICAgICAgIDogZm4uYXBwbHkoZm4sICgwLCBfYXJyYXkubWFwKShldmFsQXJncywgZnVuY3Rpb24gKGV2YWxBcmcpIHtcbiAgICAgICAgICAvLyBcInJlZ3VsYXJcIiBldmFsdWF0aW9uXG4gICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLmZuLCAnZm4nLCB0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWxsYmFjayh0aGlzLmFyZ3NbaV0sICdhcmdzWycgKyBpICsgJ10nLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRnVuY3Rpb25Ob2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbk5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgZm4gPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5mbiwgJ2ZuJywgdGhpcykpO1xuXG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShmbiwgYXJncyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Z1bmN0aW9uTm9kZX1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKHRoaXMuZm4sIHRoaXMuYXJncy5zbGljZSgwKSk7XG4gIH07IC8vIGJhY2t1cCBOb2RlJ3MgdG9TdHJpbmcgZnVuY3Rpb25cbiAgLy8gQHByaXZhdGVcblxuXG4gIHZhciBub2RlVG9TdHJpbmcgPSBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvU3RyaW5nO1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqIFRoaXMgb3ZlcnJpZGVzIHBhcnRzIG9mIE5vZGUncyB0b1N0cmluZyBmdW5jdGlvbi5cbiAgICogSWYgY2FsbGJhY2sgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgY2FsbGJhY2tzLCBpdFxuICAgKiBjYWxscyB0aGUgY29ycmVjdCBjYWxsYmFjayBmb3IgdGhlIGN1cnJlbnQgbm9kZSxcbiAgICogb3RoZXJ3aXNlIGl0IGZhbGxzIGJhY2sgdG8gY2FsbGluZyBOb2RlJ3MgdG9TdHJpbmdcbiAgICogZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tU3RyaW5nO1xuICAgIHZhciBuYW1lID0gdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSA9PT0gJ29iamVjdCcgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wdGlvbnMuaGFuZGxlciwgbmFtZSkpIHtcbiAgICAgIC8vIGNhbGxiYWNrIGlzIGEgbWFwIG9mIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgICAgY3VzdG9tU3RyaW5nID0gb3B0aW9ucy5oYW5kbGVyW25hbWVdKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVN0cmluZztcbiAgICB9IC8vIGZhbGwgYmFjayB0byBOb2RlJ3MgdG9TdHJpbmdcblxuXG4gICAgcmV0dXJuIG5vZGVUb1N0cmluZy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy50b1N0cmluZyhvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgZm4gPSAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkodGhpcy5mbikgPyAnKCcgKyB0aGlzLmZuLnRvU3RyaW5nKG9wdGlvbnMpICsgJyknIDogdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTsgLy8gZm9ybWF0IHRoZSBhcmd1bWVudHMgbGlrZSBcImFkZCgyLCA0LjIpXCJcblxuICAgIHJldHVybiBmbiArICcoJyArIGFyZ3Muam9pbignLCAnKSArICcpJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRnVuY3Rpb25Ob2RlJyxcbiAgICAgIGZuOiB0aGlzLmZuLFxuICAgICAgYXJnczogdGhpcy5hcmdzXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEFzc2lnbm1lbnROb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJGdW5jdGlvbk5vZGVcIiwgZm46IC4uLiwgYXJnczogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Z1bmN0aW9uTm9kZX1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKGpzb24uZm4sIGpzb24uYXJncyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy50b0hUTUwob3B0aW9ucyk7XG4gICAgfSk7IC8vIGZvcm1hdCB0aGUgYXJndW1lbnRzIGxpa2UgXCJhZGQoMiwgNC4yKVwiXG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZm4pICsgJzwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIGFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLXNlcGFyYXRvclwiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gIH07XG4gIC8qXG4gICAqIEV4cGFuZCBhIExhVGVYIHRlbXBsYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHByaXZhdGVcbiAgICoqL1xuXG5cbiAgZnVuY3Rpb24gZXhwYW5kVGVtcGxhdGUodGVtcGxhdGUsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGF0ZXggPSAnJzsgLy8gTWF0Y2ggZXZlcnl0aGluZyBvZiB0aGUgZm9ybSAke2lkZW50aWZpZXJ9IG9yICR7aWRlbnRpZmllclsyXX0gb3IgJCRcbiAgICAvLyB3aGlsZSBzdWJtYXRjaGluZyBpZGVudGlmaWVyIGFuZCAyIChpbiB0aGUgc2Vjb25kIGNhc2UpXG5cbiAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdcXFxcJCg/OlxcXFx7KFthLXpfXVthLXpfMC05XSopKD86XFxcXFsoWzAtOV0rKVxcXFxdKT9cXFxcfXxcXFxcJCknLCAnaWcnKTtcbiAgICB2YXIgaW5wdXRQb3MgPSAwOyAvLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyaW5nXG5cbiAgICB2YXIgbWF0Y2g7XG5cbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0ZW1wbGF0ZSkpICE9PSBudWxsKSB7XG4gICAgICAvLyBnbyB0aHJvdWdoIGFsbCBtYXRjaGVzXG4gICAgICAvLyBhZGQgZXZlcnl0aGluZyBpbiBmcm9udCBvZiB0aGUgbWF0Y2ggdG8gdGhlIExhVGVYIHN0cmluZ1xuICAgICAgbGF0ZXggKz0gdGVtcGxhdGUuc3Vic3RyaW5nKGlucHV0UG9zLCBtYXRjaC5pbmRleCk7XG4gICAgICBpbnB1dFBvcyA9IG1hdGNoLmluZGV4O1xuXG4gICAgICBpZiAobWF0Y2hbMF0gPT09ICckJCcpIHtcbiAgICAgICAgLy8gZXNjYXBlZCBkb2xsYXIgc2lnblxuICAgICAgICBsYXRleCArPSAnJCc7XG4gICAgICAgIGlucHV0UG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0ZW1wbGF0ZSBwYXJhbWV0ZXJcbiAgICAgICAgaW5wdXRQb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBub2RlW21hdGNoWzFdXTtcblxuICAgICAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUZW1wbGF0ZTogUHJvcGVydHkgJyArIG1hdGNoWzFdICsgJyBkb2VzIG5vdCBleGlzdC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaFsyXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gbm8gc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgICAgc3dpdGNoIChfdHlwZW9mKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc05vZGUpKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGxhdGV4ICs9IHByb3BlcnR5LnRvVGV4KG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBhcnJheSBvZiBOb2RlcyBpbnRvIGNvbW1hIHNlcGFyYXRlZCBsaXN0XG4gICAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHkubWFwKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc05vZGUpKGFyZykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZy50b1RleChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICdbJyArIGluZGV4ICsgJ10gaXMgbm90IGEgTm9kZS4nKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICcgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICcgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdpdGggc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKShwcm9wZXJ0eVttYXRjaFsyXV0gJiYgcHJvcGVydHlbbWF0Y2hbMl1dKSkge1xuICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHlbbWF0Y2hbMl1dLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUZW1wbGF0ZTogJyArIG1hdGNoWzFdICsgJ1snICsgbWF0Y2hbMl0gKyAnXSBpcyBub3QgYSBOb2RlLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxhdGV4ICs9IHRlbXBsYXRlLnNsaWNlKGlucHV0UG9zKTsgLy8gYXBwZW5kIHJlc3Qgb2YgdGhlIHRlbXBsYXRlXG5cbiAgICByZXR1cm4gbGF0ZXg7XG4gIH0gLy8gYmFja3VwIE5vZGUncyB0b1RleCBmdW5jdGlvblxuICAvLyBAcHJpdmF0ZVxuXG5cbiAgdmFyIG5vZGVUb1RleCA9IEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXg7XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKiBUaGlzIG92ZXJyaWRlcyBwYXJ0cyBvZiBOb2RlJ3MgdG9UZXggZnVuY3Rpb24uXG4gICAqIElmIGNhbGxiYWNrIGlzIGFuIG9iamVjdCBjb250YWluaW5nIGNhbGxiYWNrcywgaXRcbiAgICogY2FsbHMgdGhlIGNvcnJlY3QgY2FsbGJhY2sgZm9yIHRoZSBjdXJyZW50IG5vZGUsXG4gICAqIG90aGVyd2lzZSBpdCBmYWxscyBiYWNrIHRvIGNhbGxpbmcgTm9kZSdzIHRvVGV4XG4gICAqIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBjdXN0b21UZXg7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBfdHlwZW9mKG9wdGlvbnMuaGFuZGxlcikgPT09ICdvYmplY3QnICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcHRpb25zLmhhbmRsZXIsIHRoaXMubmFtZSkpIHtcbiAgICAgIC8vIGNhbGxiYWNrIGlzIGEgbWFwIG9mIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgICAgY3VzdG9tVGV4ID0gb3B0aW9ucy5oYW5kbGVyW3RoaXMubmFtZV0odGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVGV4O1xuICAgIH0gLy8gZmFsbCBiYWNrIHRvIE5vZGUncyB0b1RleFxuXG5cbiAgICByZXR1cm4gbm9kZVRvVGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIC8vIGdldCBMYVRlWCBvZiB0aGUgYXJndW1lbnRzXG4gICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBsYXRleENvbnZlcnRlcjtcblxuICAgIGlmIChfbGF0ZXgubGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXSkge1xuICAgICAgbGF0ZXhDb252ZXJ0ZXIgPSBfbGF0ZXgubGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXTtcbiAgICB9IC8vIHRvVGV4IHByb3BlcnR5IG9uIHRoZSBmdW5jdGlvbiBpdHNlbGZcblxuXG4gICAgaWYgKG1hdGhbdGhpcy5uYW1lXSAmJiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXS50b1RleCA9PT0gJ2Z1bmN0aW9uJyB8fCBfdHlwZW9mKG1hdGhbdGhpcy5uYW1lXS50b1RleCkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBtYXRoW3RoaXMubmFtZV0udG9UZXggPT09ICdzdHJpbmcnKSkge1xuICAgICAgLy8gLnRvVGV4IGlzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgIGxhdGV4Q29udmVydGVyID0gbWF0aFt0aGlzLm5hbWVdLnRvVGV4O1xuICAgIH1cblxuICAgIHZhciBjdXN0b21Ub1RleDtcblxuICAgIHN3aXRjaCAoX3R5cGVvZihsYXRleENvbnZlcnRlcikpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgLy8gYSBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBjdXN0b21Ub1RleCA9IGxhdGV4Q29udmVydGVyKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgLy8gYSB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlciwgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAvLyBhbiBvYmplY3Qgd2l0aCBkaWZmZXJlbnQgXCJjb252ZXJ0ZXJzXCIgZm9yIGRpZmZlcmVudCBudW1iZXJzIG9mIGFyZ3VtZW50c1xuICAgICAgICBzd2l0Y2ggKF90eXBlb2YobGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKSkge1xuICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgIGN1c3RvbVRvVGV4ID0gbGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlclthcmdzLmxlbmd0aF0sIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tVG9UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVG9UZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGFuZFRlbXBsYXRlKF9sYXRleC5kZWZhdWx0VGVtcGxhdGUsIHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGlkZW50aWZpZXIuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSArICc6JyArIHRoaXMubmFtZTtcbiAgfTtcblxuICByZXR1cm4gRnVuY3Rpb25Ob2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbk5vZGUgPSBjcmVhdGVGdW5jdGlvbk5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxudmFyIG5hbWUgPSAnSW5kZXhOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ1JhbmdlJywgJ05vZGUnLCAnc2l6ZSddO1xudmFyIGNyZWF0ZUluZGV4Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBSYW5nZSA9IF9yZWYuUmFuZ2UsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEluZGV4Tm9kZVxuICAgKiBAZXh0ZW5kcyBOb2RlXG4gICAqXG4gICAqIERlc2NyaWJlcyBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBhbiBvYmplY3QgcHJvcGVydHkuXG4gICAqIENhbm5vdCBiZSB1c2VkIG9uIGl0cyBvd24sIG5lZWRzIHRvIGJlIHVzZWQgd2l0aGluIGFuIEFjY2Vzc29yTm9kZSBvclxuICAgKiBBc3NpZ25tZW50Tm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlW119IGRpbWVuc2lvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG90Tm90YXRpb249ZmFsc2VdICBPcHRpb25hbCBwcm9wZXJ0eSBkZXNjcmliaW5nIHdoZXRoZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGluZGV4IHdhcyB3cml0dGVuIHVzaW5nIGRvdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGF0aW9uIGxpa2UgYGEuYmAsIG9yIHVzaW5nIGJyYWNrZXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RhdGlvbiBsaWtlIGBhW1wiYlwiXWAgKGRlZmF1bHQpLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gc3RyaW5naWZ5IGFuIEluZGV4Tm9kZS5cbiAgICovXG4gIGZ1bmN0aW9uIEluZGV4Tm9kZShkaW1lbnNpb25zLCBkb3ROb3RhdGlvbikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmRleE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMuZGltZW5zaW9ucyA9IGRpbWVuc2lvbnM7XG4gICAgdGhpcy5kb3ROb3RhdGlvbiA9IGRvdE5vdGF0aW9uIHx8IGZhbHNlOyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRpbWVuc2lvbnMpIHx8ICFkaW1lbnNpb25zLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJkaW1lbnNpb25zXCInKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kb3ROb3RhdGlvbiAmJiAhdGhpcy5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZG90Tm90YXRpb24gb25seSBhcHBsaWNhYmxlIGZvciBvYmplY3QgcHJvcGVydGllcycpO1xuICAgIH0gLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHNvbWUgZGF5XG5cblxuICAgIHZhciBkZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydHkgYEluZGV4Tm9kZS5vYmplY3RgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgSW5kZXhOb2RlLmZuYCBpbnN0ZWFkJyk7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnb2JqZWN0Jywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBJbmRleE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgSW5kZXhOb2RlLnByb3RvdHlwZS50eXBlID0gJ0luZGV4Tm9kZSc7XG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuaXNJbmRleE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBJbmRleE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIGJpZ251bWJlciAoY3VycmVudGx5IGJpZ251bWJlcnMgYXJlIHNpbGVudGx5XG4gICAgLy8gICAgICAgcmVkdWNlZCB0byBudW1iZXJzIHdoZW4gY2hhbmdpbmcgdGhlIHZhbHVlIHRvIHplcm8tYmFzZWQpXG4gICAgLy8gVE9ETzogT3B0aW1pemF0aW9uOiB3aGVuIHRoZSByYW5nZSB2YWx1ZXMgYXJlIENvbnN0YW50Tm9kZXMsXG4gICAgLy8gICAgICAgd2UgY2FuIGJlZm9yZWhhbmQgcmVzb2x2ZSB0aGUgemVyby1iYXNlZCB2YWx1ZVxuICAgIC8vIG9wdGltaXphdGlvbiBmb3IgYSBzaW1wbGUgb2JqZWN0IHByb3BlcnR5XG4gICAgdmFyIGV2YWxEaW1lbnNpb25zID0gKDAsIF9hcnJheS5tYXApKHRoaXMuZGltZW5zaW9ucywgZnVuY3Rpb24gKHJhbmdlLCBpKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1JhbmdlTm9kZSkocmFuZ2UpKSB7XG4gICAgICAgIGlmIChyYW5nZS5uZWVkc0VuZCgpKSB7XG4gICAgICAgICAgLy8gY3JlYXRlIGEgcmFuZ2UgY29udGFpbmluZyBlbmQgKGxpa2UgJzQ6ZW5kJylcbiAgICAgICAgICB2YXIgY2hpbGRBcmdOYW1lcyA9IE9iamVjdC5jcmVhdGUoYXJnTmFtZXMpO1xuICAgICAgICAgIGNoaWxkQXJnTmFtZXMuZW5kID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBldmFsU3RhcnQgPSByYW5nZS5zdGFydC5fY29tcGlsZShtYXRoLCBjaGlsZEFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBldmFsRW5kID0gcmFuZ2UuZW5kLl9jb21waWxlKG1hdGgsIGNoaWxkQXJnTmFtZXMpO1xuXG4gICAgICAgICAgdmFyIGV2YWxTdGVwID0gcmFuZ2Uuc3RlcCA/IHJhbmdlLnN0ZXAuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcykgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRGltZW5zaW9uKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICB2YXIgcyA9IHNpemUoY29udGV4dCkudmFsdWVPZigpO1xuICAgICAgICAgICAgdmFyIGNoaWxkQXJncyA9IE9iamVjdC5jcmVhdGUoYXJncyk7XG4gICAgICAgICAgICBjaGlsZEFyZ3MuZW5kID0gc1tpXTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShldmFsU3RhcnQoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCksIGV2YWxFbmQoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCksIGV2YWxTdGVwKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNyZWF0ZSByYW5nZVxuICAgICAgICAgIHZhciBfZXZhbFN0YXJ0ID0gcmFuZ2Uuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICAgICAgdmFyIF9ldmFsRW5kID0gcmFuZ2UuZW5kLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBfZXZhbFN0ZXAgPSByYW5nZS5zdGVwID8gcmFuZ2Uuc3RlcC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcykgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShfZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgX2V2YWxFbmQoc2NvcGUsIGFyZ3MsIGNvbnRleHQpLCBfZXZhbFN0ZXAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShyYW5nZSkgJiYgcmFuZ2UubmFtZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgLy8gU3ltYm9sTm9kZSAnZW5kJ1xuICAgICAgICB2YXIgX2NoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcblxuICAgICAgICBfY2hpbGRBcmdOYW1lcy5lbmQgPSB0cnVlO1xuXG4gICAgICAgIHZhciBldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBfY2hpbGRBcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICB2YXIgcyA9IHNpemUoY29udGV4dCkudmFsdWVPZigpO1xuICAgICAgICAgIHZhciBjaGlsZEFyZ3MgPSBPYmplY3QuY3JlYXRlKGFyZ3MpO1xuICAgICAgICAgIGNoaWxkQXJncy5lbmQgPSBzW2ldO1xuICAgICAgICAgIHJldHVybiBldmFsUmFuZ2Uoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb25zdGFudE5vZGVcbiAgICAgICAgdmFyIF9ldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gX2V2YWxSYW5nZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGluZGV4ID0gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkobWF0aCwgJ2luZGV4Jyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxJbmRleE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciBkaW1lbnNpb25zID0gKDAsIF9hcnJheS5tYXApKGV2YWxEaW1lbnNpb25zLCBmdW5jdGlvbiAoZXZhbERpbWVuc2lvbikge1xuICAgICAgICByZXR1cm4gZXZhbERpbWVuc2lvbihzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleC5hcHBseSh2b2lkIDAsIF90b0NvbnN1bWFibGVBcnJheShkaW1lbnNpb25zKSk7XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5kaW1lbnNpb25zW2ldLCAnZGltZW5zaW9uc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEluZGV4Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7SW5kZXhOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGRpbWVuc2lvbnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1lbnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkaW1lbnNpb25zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZGltZW5zaW9uc1tpXSwgJ2RpbWVuc2lvbnNbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEluZGV4Tm9kZShkaW1lbnNpb25zLCB0aGlzLmRvdE5vdGF0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7SW5kZXhOb2RlfVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBJbmRleE5vZGUodGhpcy5kaW1lbnNpb25zLnNsaWNlKDApLCB0aGlzLmRvdE5vdGF0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0aGlzIEluZGV4Tm9kZSBjb250YWlucyBhIHNpbmdsZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5pc09iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKHRoaXMuZGltZW5zaW9uc1swXSkgJiYgdHlwZW9mIHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA9PT0gJ3N0cmluZyc7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBuYW1lIGlmIEluZGV4Tm9kZSBjb250YWlucyBhIHByb3BlcnR5LlxuICAgKiBJZiBub3QsIHJldHVybnMgbnVsbC5cbiAgICogQHJldHVybiB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmdldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA6IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIC8vIGZvcm1hdCB0aGUgcGFyYW1ldGVycyBsaWtlIFwiWzEsIDA6NV1cIlxuICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJ1snICsgdGhpcy5kaW1lbnNpb25zLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0luZGV4Tm9kZScsXG4gICAgICBkaW1lbnNpb25zOiB0aGlzLmRpbWVuc2lvbnMsXG4gICAgICBkb3ROb3RhdGlvbjogdGhpcy5kb3ROb3RhdGlvblxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBJbmRleE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkluZGV4Tm9kZVwiLCBkaW1lbnNpb25zOiBbLi4uXSwgZG90Tm90YXRpb246IGZhbHNlfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0luZGV4Tm9kZX1cbiAgICovXG5cblxuICBJbmRleE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgSW5kZXhOb2RlKGpzb24uZGltZW5zaW9ucywganNvbi5kb3ROb3RhdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAvLyBmb3JtYXQgdGhlIHBhcmFtZXRlcnMgbGlrZSBcIlsxLCAwOjVdXCJcbiAgICB2YXIgZGltZW5zaW9ucyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRpbWVuc2lvbnNbaV0gPSB0aGlzLmRpbWVuc2lvbnNbaV0udG9IVE1MKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZG90Tm90YXRpb24pIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYWNjZXNzb3Itb3BlcmF0b3JcIj4uPC9zcGFuPicgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXByb3BlcnR5XCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpKSArICc8L3NwYW4+JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXNcIj5bPC9zcGFuPicgKyBkaW1lbnNpb25zLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPl08L3NwYW4+JztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGRpbWVuc2lvbnMgPSB0aGlzLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgcmV0dXJuIHJhbmdlLnRvVGV4KG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpICsgJycgOiAnX3snICsgZGltZW5zaW9ucy5qb2luKCcsJykgKyAnfSc7XG4gIH07IC8vIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBSYW5nZSBmcm9tIHN0YXJ0LCBzdGVwIGFuZCBlbmRcblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHN0YXJ0KSA/IHN0YXJ0LnRvTnVtYmVyKCkgOiBzdGFydCwgKDAsIF9pcy5pc0JpZ051bWJlcikoZW5kKSA/IGVuZC50b051bWJlcigpIDogZW5kLCAoMCwgX2lzLmlzQmlnTnVtYmVyKShzdGVwKSA/IHN0ZXAudG9OdW1iZXIoKSA6IHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIEluZGV4Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhOb2RlID0gY3JlYXRlSW5kZXhOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZShcIi4uL2tleXdvcmRzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoV2l0aFRyYW5zZm9ybSddO1xudmFyIGNyZWF0ZU5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtO1xuXG4gIC8qKlxuICAgKiBOb2RlXG4gICAqL1xuICBmdW5jdGlvbiBOb2RlKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEV2YWx1YXRlIHRoZSBub2RlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbc2NvcGVdICBTY29wZSB0byByZWFkL3dyaXRlIHZhcmlhYmxlc1xuICAgKiBAcmV0dXJuIHsqfSAgICAgICAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICB9O1xuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtzY29wZV0gIFNjb3BlIHRvIHJlYWQvd3JpdGUgdmFyaWFibGVzXG4gICAqIEByZXR1cm4geyp9ICAgICAgICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHRcbiAgICovXG4gIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXZhbCA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnTWV0aG9kIE5vZGUuZXZhbCBpcyByZW5hbWVkIHRvIE5vZGUuZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QgbmFtZS4nKTtcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZShzY29wZSk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUudHlwZSA9ICdOb2RlJztcbiAgTm9kZS5wcm90b3R5cGUuaXNOb2RlID0gdHJ1ZTtcbiAgTm9kZS5wcm90b3R5cGUuY29tbWVudCA9ICcnO1xuICAvKipcbiAgICogQ29tcGlsZSB0aGUgbm9kZSBpbnRvIGFuIG9wdGltaXplZCwgZXZhdWF0YWJsZSBKYXZhU2NyaXB0IGZ1bmN0aW9uXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogZnVuY3Rpb24oW09iamVjdF0pfX0gb2JqZWN0XG4gICAqICAgICAgICAgICAgICAgIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBmdW5jdGlvbiAnZXZhbHVhdGUnLFxuICAgKiAgICAgICAgICAgICAgICB3aGljaCBjYW4gYmUgaW52b2tlZCBhcyBleHByLmV2YWx1YXRlKFtzY29wZTogT2JqZWN0XSksXG4gICAqICAgICAgICAgICAgICAgIHdoZXJlIHNjb3BlIGlzIGFuIG9wdGlvbmFsIG9iamVjdCB3aXRoXG4gICAqICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5cbiAgICovXG5cbiAgTm9kZS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXhwciA9IHRoaXMuX2NvbXBpbGUobWF0aFdpdGhUcmFuc2Zvcm0sIHt9KTtcblxuICAgIHZhciBhcmdzID0ge307XG4gICAgdmFyIGNvbnRleHQgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUpIHtcbiAgICAgIHZhciBzID0gc2NvcGUgfHwge307XG5cbiAgICAgIF92YWxpZGF0ZVNjb3BlKHMpO1xuXG4gICAgICByZXR1cm4gZXhwcihzLCBhcmdzLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXZhbHVhdGU6IGV2YWx1YXRlLFxuICAgICAgLy8gVE9ETzogRGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuIENsZWFuIHVwIHNvbWUgZGF5XG4gICAgICBldmFsOiBmdW5jdGlvbiBkZXByZWNhdGVkRXZhbChzY29wZSkge1xuICAgICAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBldmFsIGlzIHJlbmFtZWQgdG8gZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QuJyk7XG4gICAgICAgIHJldHVybiBldmFsdWF0ZShzY29wZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIF9jb21waWxlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0eXBlICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcnVuIGZvckVhY2ggb24gYSBOb2RlIGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcnVuIG1hcCBvbiBhIE5vZGUgaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIE5vZGUsIGZvciB1c2Ugd2l0aCBtYXBcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEByZXR1cm5zIHtOb2RlfSBSZXR1cm5zIHRoZSBpbnB1dCBpZiBpdCdzIGEgbm9kZSwgZWxzZSB0aHJvd3MgYW4gRXJyb3JcbiAgICogQHByb3RlY3RlZFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl9pZk5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKG5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYWxsYmFjayBmdW5jdGlvbiBtdXN0IHJldHVybiBhIE5vZGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFsbCBub2RlcyBpbiBhIG5vZGUgdHJlZS4gRXhlY3V0ZXMgZ2l2ZW4gY2FsbGJhY2sgZm9yXG4gICAqIHRoaXMgbm9kZSBhbmQgZWFjaCBvZiBpdHMgY2hpbGQgbm9kZXMuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKiAgICAgICAgICBBIGNhbGxiYWNrIGNhbGxlZCBmb3IgZXZlcnkgbm9kZSBpbiB0aGUgbm9kZSB0cmVlLlxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gZXhlY3V0ZSBjYWxsYmFjayBmb3IgaXRzZWxmXG4gICAgY2FsbGJhY2sodGhpcywgbnVsbCwgbnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc3RhbmRhcmQvbm8tY2FsbGJhY2stbGl0ZXJhbFxuICAgIC8vIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIG92ZXIgYWxsIGNoaWxkcyBvZiBhIG5vZGVcblxuICAgIGZ1bmN0aW9uIF90cmF2ZXJzZShub2RlLCBjYWxsYmFjaykge1xuICAgICAgbm9kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCwgcGF0aCwgcGFyZW50KSB7XG4gICAgICAgIGNhbGxiYWNrKGNoaWxkLCBwYXRoLCBwYXJlbnQpO1xuXG4gICAgICAgIF90cmF2ZXJzZShjaGlsZCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3RyYXZlcnNlKHRoaXMsIGNhbGxiYWNrKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybSBhIG5vZGUgdHJlZSB2aWEgYSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0byByZXBsYWNlIGFsbCBub2RlcyBvZiB0eXBlIFN5bWJvbE5vZGUgaGF2aW5nIG5hbWUgJ3gnIHdpdGggYVxuICAgKiBDb25zdGFudE5vZGUgd2l0aCB2YWx1ZSAyOlxuICAgKlxuICAgKiAgICAgY29uc3QgcmVzID0gTm9kZS50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgKiAgICAgICBpZiAobm9kZSAmJiBub2RlLmlzU3ltYm9sTm9kZSkgJiYgKG5vZGUubmFtZSA9PT0gJ3gnKSkge1xuICAgKiAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKDIpXG4gICAqICAgICAgIH1cbiAgICogICAgICAgZWxzZSB7XG4gICAqICAgICAgICAgcmV0dXJuIG5vZGVcbiAgICogICAgICAgfVxuICAgKiAgICAgfSlcbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihub2RlOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiAgICAgICAgICBBIG1hcHBpbmcgZnVuY3Rpb24gYWNjZXB0aW5nIGEgbm9kZSwgYW5kIHJldHVybmluZ1xuICAgKiAgICAgICAgICBhIHJlcGxhY2VtZW50IGZvciB0aGUgbm9kZSBvciB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogICAgICAgICAgU2lnbmF0dXJlOiBjYWxsYmFjayhub2RlOiBOb2RlLCBpbmRleDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZVxuICAgKiBAcmV0dXJuIHtOb2RlfSBSZXR1cm5zIHRoZSBvcmlnaW5hbCBub2RlIG9yIGl0cyByZXBsYWNlbWVudFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGZ1bmN0aW9uIF90cmFuc2Zvcm0oY2hpbGQsIHBhdGgsIHBhcmVudCkge1xuICAgICAgdmFyIHJlcGxhY2VtZW50ID0gY2FsbGJhY2soY2hpbGQsIHBhdGgsIHBhcmVudCk7XG5cbiAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gY2hpbGQpIHtcbiAgICAgICAgLy8gc3RvcCBpdGVyYXRpbmcgd2hlbiB0aGUgbm9kZSBpcyByZXBsYWNlZFxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGlsZC5tYXAoX3RyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90cmFuc2Zvcm0odGhpcywgbnVsbCwgbnVsbCk7XG4gIH07XG4gIC8qKlxuICAgKiBGaW5kIGFueSBub2RlIGluIHRoZSBub2RlIHRyZWUgbWF0Y2hpbmcgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSwgdG9cbiAgICogZmluZCBhbGwgbm9kZXMgb2YgdHlwZSBTeW1ib2xOb2RlIGhhdmluZyBuYW1lICd4JzpcbiAgICpcbiAgICogICAgIGNvbnN0IHJlc3VsdHMgPSBOb2RlLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgKiAgICAgICByZXR1cm4gKG5vZGUgJiYgbm9kZS5pc1N5bWJvbE5vZGUpICYmIChub2RlLm5hbWUgPT09ICd4JylcbiAgICogICAgIH0pXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2tcbiAgICogICAgICAgICAgICBBIHRlc3QgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgd2hlbiBhIG5vZGUgbWF0Y2hlcywgYW5kIGZhbHNlXG4gICAqICAgICAgICAgICAgb3RoZXJ3aXNlLiBGdW5jdGlvbiBzaWduYXR1cmU6XG4gICAqICAgICAgICAgICAgY2FsbGJhY2sobm9kZTogTm9kZSwgaW5kZXg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IGJvb2xlYW5cbiAgICogQHJldHVybiB7Tm9kZVtdfSBub2RlcyAgICAgICBBbiBhcnJheSB3aXRoIG5vZGVzIG1hdGNoaW5nIGdpdmVuIGZpbHRlciBjcml0ZXJpYVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBub2RlcyA9IFtdO1xuICAgIHRoaXMudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgICAgaWYgKGNhbGxiYWNrKG5vZGUsIHBhdGgsIHBhcmVudCkpIHtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZXM7XG4gIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBOb2RlLmZpbmQgaXMgZGVwcmVjYXRlZC4gVXNlIE5vZGUuZmlsdGVyIGluc3RlYWQuJyk7XG4gIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gTm9kZS5tYXRjaCBpcyBkZXByZWNhdGVkLiBTZWUgZnVuY3Rpb25zIE5vZGUuZmlsdGVyLCBOb2RlLnRyYW5zZm9ybSwgTm9kZS50cmF2ZXJzZS4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhpcyBub2RlXG4gICAqIEByZXR1cm4ge05vZGV9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNsb25lIGEgTm9kZSBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRlZXAgY2xvbmUgb2YgdGhpcyBub2RlXG4gICAqIEByZXR1cm4ge05vZGV9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuY2xvbmVEZWVwID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuY2xvbmVEZWVwKCk7XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBEZWVwIGNvbXBhcmUgdGhpcyBub2RlIHdpdGggYW5vdGhlciBub2RlLlxuICAgKiBAcGFyYW0ge05vZGV9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIGJvdGggbm9kZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzIChhcyBkbyB0aGVpciBjaGlsZHMpXG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgcmV0dXJuIG90aGVyID8gKDAsIF9vYmplY3QuZGVlcFN0cmljdEVxdWFsKSh0aGlzLCBvdGhlcikgOiBmYWxzZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBnZXQgYW4gb2JqZWN0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybTpcbiAgICoge1xuICAgKiAgICBoYW5kbGVyOiAvL1RoaXMgY2FuIGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIGZvcm1cbiAgICogICAgICAgICAgICAgLy8gXCJmdW5jdGlvbiBjYWxsYmFjayhub2RlLCBvcHRpb25zKVwib3JcbiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpXG4gICAqICAgICAgICAgICAgIC8vIHRvIGNhbGxiYWNrc1xuICAgKiAgICBwYXJlbnRoZXNpczogXCJrZWVwXCIgLy90aGUgcGFyZW50aGVzaXMgb3B0aW9uIChUaGlzIGlzIG9wdGlvbmFsKVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tU3RyaW5nO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgX3R5cGVvZihvcHRpb25zKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHN3aXRjaCAoX3R5cGVvZihvcHRpb25zLmhhbmRsZXIpKSB7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIGN1c3RvbVN0cmluZyA9IG9wdGlvbnMuaGFuZGxlcih0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBvciBmdW5jdGlvbiBleHBlY3RlZCBhcyBjYWxsYmFjaycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVN0cmluZztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdG9TdHJpbmcob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEJvdGggLnRvSlNPTigpIGFuZCB0aGUgc3RhdGljIC5mcm9tSlNPTihqc29uKSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYWxsXG4gICAqIGltcGxlbWVudGF0aW9ucyBvZiBOb2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNlcmlhbGl6ZSBvYmplY3Q6IHRvSlNPTiBub3QgaW1wbGVtZW50ZWQgYnkgJyArIHRoaXMudHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIGdldCBhbiBvYmplY3Qgb2YgdGhlIGZvbGxvd2luZyBmb3JtOlxuICAgKiB7XG4gICAqICAgIGhhbmRsZXI6IC8vVGhpcyBjYW4gYmUgYSBjYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgZm9ybVxuICAgKiAgICAgICAgICAgICAvLyBcImZ1bmN0aW9uIGNhbGxiYWNrKG5vZGUsIG9wdGlvbnMpXCIgb3JcbiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpXG4gICAqICAgICAgICAgICAgIC8vIHRvIGNhbGxiYWNrc1xuICAgKiAgICBwYXJlbnRoZXNpczogXCJrZWVwXCIgLy90aGUgcGFyZW50aGVzaXMgb3B0aW9uIChUaGlzIGlzIG9wdGlvbmFsKVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVN0cmluZztcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21TdHJpbmcgPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVN0cmluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21TdHJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIHN0cmluZyBvdXRwdXQuXG4gICAqIFRoaXMgaGFzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IE5vZGVcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTm9kZSBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ190b1N0cmluZyBub3QgaW1wbGVtZW50ZWQgZm9yICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uLiAod3JhcHBlciBmdW5jdGlvbilcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gZ2V0IGFuIG9iamVjdCBvZiB0aGUgZm9sbG93aW5nIGZvcm06XG4gICAqIHtcbiAgICogICAgaGFuZGxlcjogLy9UaGlzIGNhbiBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBmb3JtXG4gICAqICAgICAgICAgICAgIC8vIFwiZnVuY3Rpb24gY2FsbGJhY2sobm9kZSwgb3B0aW9ucylcIm9yXG4gICAqICAgICAgICAgICAgIC8vIGEgbWFwIHRoYXQgbWFwcyBmdW5jdGlvbiBuYW1lcyAodXNlZCBpbiBGdW5jdGlvbk5vZGVzKVxuICAgKiAgICAgICAgICAgICAvLyB0byBjYWxsYmFja3NcbiAgICogICAgcGFyZW50aGVzaXM6IFwia2VlcFwiIC8vdGhlIHBhcmVudGhlc2lzIG9wdGlvbiAoVGhpcyBpcyBvcHRpb25hbClcbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS50b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVRleDtcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21UZXggPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21UZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RvVGV4KG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIExhVGVYIG91dHB1dC5cbiAgICogVGhpcyBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgZXZlcnkgTm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignX3RvVGV4IG5vdCBpbXBsZW1lbnRlZCBmb3IgJyArIHRoaXMudHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgaWRlbnRpZmllci5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCBOb2RlLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmdldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc3ltYm9sIG5hbWVzIG9mIGEgc2NvcGUuXG4gICAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoZSBzY29wZSBjb250YWlucyBhbiBpbGxlZ2FsIHN5bWJvbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlU2NvcGUoc2NvcGUpIHtcbiAgICBmb3IgKHZhciBzeW1ib2wgaW4gc2NvcGUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoc2NvcGUsIHN5bWJvbCkpIHtcbiAgICAgICAgaWYgKHN5bWJvbCBpbiBfa2V5d29yZHMua2V5d29yZHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Njb3BlIGNvbnRhaW5zIGFuIGlsbGVnYWwgc3ltYm9sLCBcIicgKyBzeW1ib2wgKyAnXCIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm9kZSA9IGNyZWF0ZU5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9iamVjdE5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnT2JqZWN0Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlT2JqZWN0Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgT2JqZWN0Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogSG9sZHMgYW4gb2JqZWN0IHdpdGgga2V5cy92YWx1ZXNcbiAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgTm9kZT59IFtwcm9wZXJ0aWVzXSAgIG9iamVjdCB3aXRoIGtleS92YWx1ZSBwYWlyc1xuICAgKi9cbiAgZnVuY3Rpb24gT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9iamVjdE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307IC8vIHZhbGlkYXRlIGlucHV0XG5cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgaWYgKCEoX3R5cGVvZihwcm9wZXJ0aWVzKSA9PT0gJ29iamVjdCcpIHx8ICFPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiAoMCwgX2lzLmlzTm9kZSkocHJvcGVydGllc1trZXldKTtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBPYmplY3ROb2RlLnByb3RvdHlwZS50eXBlID0gJ09iamVjdE5vZGUnO1xuICBPYmplY3ROb2RlLnByb3RvdHlwZS5pc09iamVjdE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsRW50cmllcyA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgLy8gd2Ugc3RyaW5naWZ5L3BhcnNlIHRoZSBrZXkgaGVyZSB0byByZXNvbHZlIHVuaWNvZGUgY2hhcmFjdGVycyxcbiAgICAgICAgLy8gc28geW91IGNhbm5vdCBjcmVhdGUgYSBrZXkgbGlrZSB7XCJjb1xcXFx1MDA2RXN0cnVjdG9yXCI6IG51bGx9XG4gICAgICAgIHZhciBzdHJpbmdpZmllZEtleSA9ICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KTtcbiAgICAgICAgdmFyIHBhcnNlZEtleSA9IEpTT04ucGFyc2Uoc3RyaW5naWZpZWRLZXkpO1xuXG4gICAgICAgIGlmICghKDAsIF9jdXN0b21zLmlzU2FmZVByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIHBhcnNlZEtleSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSBcIicgKyBwYXJzZWRLZXkgKyAnXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2YWxFbnRyaWVzW3BhcnNlZEtleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPYmplY3ROb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgb2JqID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gZXZhbEVudHJpZXMpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShldmFsRW50cmllcywgX2tleSkpIHtcbiAgICAgICAgICBvYmpbX2tleV0gPSBldmFsRW50cmllc1tfa2V5XShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLnByb3BlcnRpZXNba2V5XSwgJ3Byb3BlcnRpZXNbJyArICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICddJywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9iamVjdE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09iamVjdE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnByb3BlcnRpZXNba2V5XSwgJ3Byb3BlcnRpZXNbJyArICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICddJywgdGhpcykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7T2JqZWN0Tm9kZX1cbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgcHJvcGVydGllc1trZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPYmplY3ROb2RlKHByb3BlcnRpZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBlbnRyaWVzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goKDAsIF9zdHJpbmcuc3RyaW5naWZ5KShrZXkpICsgJzogJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvU3RyaW5nKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJ3snICsgZW50cmllcy5qb2luKCcsICcpICsgJ30nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnT2JqZWN0Tm9kZScsXG4gICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXNcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gT3BlcmF0b3JOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJPYmplY3ROb2RlXCIsIFwicHJvcGVydGllc1wiOiB7Li4ufX1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtPYmplY3ROb2RlfVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShqc29uLnByb3BlcnRpZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKCc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtcHJvcGVydHlcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKShrZXkpICsgJzwvc3Bhbj4nICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1wcm9wZXJ0eS1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yXCI+Ojwvc3Bhbj4nICsgdGhpcy5wcm9wZXJ0aWVzW2tleV0udG9IVE1MKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLWN1cmx5LXBhcmVudGhlc2lzXCI+ezwvc3Bhbj4nICsgZW50cmllcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1jdXJseS1wYXJlbnRoZXNpc1wiPn08L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCgnXFxcXG1hdGhiZnsnICsga2V5ICsgJzp9ICYgJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvVGV4KG9wdGlvbnMpICsgJ1xcXFxcXFxcJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXFxcXGxlZnRcXFxce1xcXFxiZWdpbnthcnJheX17bGx9XCIuY29uY2F0KGVudHJpZXMuam9pbignXFxuJyksIFwiXFxcXGVuZHthcnJheX1cXFxccmlnaHRcXFxcfVwiKTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlT2JqZWN0Tm9kZSA9IGNyZWF0ZU9iamVjdE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9wZXJhdG9yTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnT3BlcmF0b3JOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVPcGVyYXRvck5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIE9wZXJhdG9yTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQW4gb3BlcmF0b3Igd2l0aCB0d28gYXJndW1lbnRzLCBsaWtlIDIrM1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3AgICAgICAgICAgIE9wZXJhdG9yIG5hbWUsIGZvciBleGFtcGxlICcrJ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZm4gICAgICAgICAgIEZ1bmN0aW9uIG5hbWUsIGZvciBleGFtcGxlICdhZGQnXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzICAgICAgICAgT3BlcmF0b3IgYXJndW1lbnRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ltcGxpY2l0XSAgSXMgdGhpcyBhbiBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbj9cbiAgICovXG4gIGZ1bmN0aW9uIE9wZXJhdG9yTm9kZShvcCwgZm4sIGFyZ3MsIGltcGxpY2l0KSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAodHlwZW9mIG9wICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJvcFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiZm5cIicpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShhcmdzKSB8fCAhYXJncy5ldmVyeShfaXMuaXNOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiYXJnc1wiJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbXBsaWNpdCA9IGltcGxpY2l0ID09PSB0cnVlO1xuICAgIHRoaXMub3AgPSBvcDtcbiAgICB0aGlzLmZuID0gZm47XG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTtcbiAgfVxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnT3BlcmF0b3JOb2RlJztcbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc09wZXJhdG9yTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICAvLyB2YWxpZGF0ZSBmblxuICAgIGlmICh0eXBlb2YgdGhpcy5mbiAhPT0gJ3N0cmluZycgfHwgISgwLCBfY3VzdG9tcy5pc1NhZmVNZXRob2QpKG1hdGgsIHRoaXMuZm4pKSB7XG4gICAgICBpZiAoIW1hdGhbdGhpcy5mbl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiAnICsgdGhpcy5mbiArICcgbWlzc2luZyBpbiBwcm92aWRlZCBuYW1lc3BhY2UgXCJtYXRoXCInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYWNjZXNzIHRvIGZ1bmN0aW9uIFwiJyArIHRoaXMuZm4gKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZm4gPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCB0aGlzLmZuKTtcbiAgICB2YXIgZXZhbEFyZ3MgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcblxuICAgIGlmIChldmFsQXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPcGVyYXRvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZuKGV2YWxBcmcwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgX2V2YWxBcmcgPSBldmFsQXJnc1swXTtcbiAgICAgIHZhciBldmFsQXJnMSA9IGV2YWxBcmdzWzFdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPcGVyYXRvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZuKF9ldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEFyZzEoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsT3BlcmF0b3JOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5hcmdzW2ldLCAnYXJnc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9wZXJhdG9yTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7T3BlcmF0b3JOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSh0aGlzLm9wLCB0aGlzLmZuLCBhcmdzLCB0aGlzLmltcGxpY2l0KTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7T3BlcmF0b3JOb2RlfVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUodGhpcy5vcCwgdGhpcy5mbiwgdGhpcy5hcmdzLnNsaWNlKDApLCB0aGlzLmltcGxpY2l0KTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiB1bmFyeSBPcGVyYXRvck5vZGU6XG4gICAqIGhhcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgbGlrZSBgLWFgLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhbiB1bmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc1VuYXJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmFyZ3MubGVuZ3RoID09PSAxO1xuICB9O1xuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgYmluYXJ5IE9wZXJhdG9yTm9kZTpcbiAgICogaGFzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgbGlrZSBgYSArIGJgLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhIGJpbmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc0JpbmFyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5hcmdzLmxlbmd0aCA9PT0gMjtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB3aGljaCBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5LiBHZXRzIGFuIE9wZXJhdG9yTm9kZVxuICAgKiAod2hpY2ggaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUpIGFuZCBhbiBBcnJheSBvZiBOb2Rlc1xuICAgKiAodGhpcy5hcmdzKSBhbmQgcmV0dXJucyBhbiBhcnJheSB3aGVyZSAndHJ1ZScgbWVhbnMgdGhhdCBhbiBhcmd1bWVudFxuICAgKiBoYXMgdG8gYmUgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgd2hlcmVhcyAnZmFsc2UnIG1lYW5zIHRoZSBvcHBvc2l0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtPcGVyYXRvck5vZGV9IHJvb3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbGF0ZXhcbiAgICogQHJldHVybiB7Ym9vbGVhbltdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHJvb3QsIHBhcmVudGhlc2lzLCBpbXBsaWNpdCwgYXJncywgbGF0ZXgpIHtcbiAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByb290IE9wZXJhdG9yTm9kZVxuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocm9vdCwgcGFyZW50aGVzaXMpO1xuICAgIHZhciBhc3NvY2lhdGl2aXR5ID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkocm9vdCwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBhcmdzLmxlbmd0aCA+IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgIT09ICdPcGVyYXRvck5vZGU6YWRkJyAmJiByb290LmdldElkZW50aWZpZXIoKSAhPT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpIHtcbiAgICAgIHJldHVybiBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLmdldENvbnRlbnQoKS50eXBlKSB7XG4gICAgICAgICAgLy8gTm9kZXMgdGhhdCBkb24ndCBuZWVkIGV4dHJhIHBhcmVudGhlc2VzXG4gICAgICAgICAgY2FzZSAnQXJyYXlOb2RlJzpcbiAgICAgICAgICBjYXNlICdDb25zdGFudE5vZGUnOlxuICAgICAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOlxuICAgICAgICAgIGNhc2UgJ1BhcmVudGhlc2lzTm9kZSc6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQ7XG5cbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyB1bmFyeSBvcGVyYXRvcnNcbiAgICAgICAge1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb2YgdGhlIG9wZXJhbmRcbiAgICAgICAgICB2YXIgb3BlcmFuZFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShhcmdzWzBdLCBwYXJlbnRoZXNpcyk7IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzIGZvciBMYVRlWCwgd2hlcmUgc29tZSBvZiB0aGUgcGFyZW50aGVzZXMgYXJlbid0IG5lZWRlZFxuXG4gICAgICAgICAgaWYgKGxhdGV4ICYmIG9wZXJhbmRQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgb3BlcmFuZElkZW50aWZpZXI7XG4gICAgICAgICAgICB2YXIgcm9vdElkZW50aWZpZXI7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICAgICAgICAgIG9wZXJhbmRJZGVudGlmaWVyID0gYXJnc1swXS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXMgTm9kZXMgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICAgICAgICAgICAgb3BlcmFuZElkZW50aWZpZXIgPSBhcmdzWzBdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW3ByZWNlZGVuY2VdW3Jvb3RJZGVudGlmaWVyXS5sYXRleExlZnRQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW29wZXJhbmRQcmVjZWRlbmNlXVtvcGVyYW5kSWRlbnRpZmllcl0ubGF0ZXhQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcGVyYW5kUHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmQgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWRcbiAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3BlcmFuZFByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmRzIHByZWNlZGVuY2UgaXMgbG93ZXIsIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICByZXN1bHQgPSBbdHJ1ZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IC8vIG90aGVyd2lzZSwgbm8gcGFyZW5zIG5lZWRlZFxuXG5cbiAgICAgICAgICByZXN1bHQgPSBbZmFsc2VdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIGJpbmFyeSBvcGVyYXRvcnNcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsaHNQYXJlbnM7IC8vIGxlZnQgaGFuZCBzaWRlIG5lZWRzIHBhcmVudGhlc2lzP1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb2YgdGhlIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgICAgICB2YXIgbGhzUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKGFyZ3NbMF0sIHBhcmVudGhlc2lzKTsgLy8gaXMgdGhlIHJvb3Qgbm9kZSBhc3NvY2lhdGl2ZSB3aXRoIHRoZSBsZWZ0IGhhbmQgc2lkZVxuXG4gICAgICAgICAgdmFyIGFzc29jV2l0aExocyA9ICgwLCBfb3BlcmF0b3JzLmlzQXNzb2NpYXRpdmVXaXRoKShyb290LCBhcmdzWzBdLCBwYXJlbnRoZXNpcyk7XG5cbiAgICAgICAgICBpZiAobGhzUHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGxlZnQgaGFuZCBzaWRlIGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAvLyBGdW5jdGlvbk5vZGUgZm9yIGV4YW1wbGVcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGhzUHJlY2VkZW5jZSA9PT0gcHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSAncmlnaHQnICYmICFhc3NvY1dpdGhMaHMpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZXF1YWwgcHJlY2VkZW5jZSwgaWYgdGhlIHJvb3Qgbm9kZSBpcyBsZWZ0IGFzc29jaWF0aXZlXG4gICAgICAgICAgICAvLyBwYXJlbnMgYXJlICoqbmV2ZXIqKiBuZWNlc3NhcnkgZm9yIHRoZSBsZWZ0IGhhbmQgc2lkZS5cbiAgICAgICAgICAgIC8vIElmIGl0IGlzIHJpZ2h0IGFzc29jaWF0aXZlIGhvd2V2ZXIsIHBhcmVucyBhcmUgbmVjZXNzYXJ5XG4gICAgICAgICAgICAvLyBpZiB0aGUgcm9vdCBub2RlIGlzbid0IGFzc29jaWF0aXZlIHdpdGggdGhlIGxlZnQgaGFuZCBzaWRlXG4gICAgICAgICAgICBsaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByaHNQYXJlbnM7IC8vIHJpZ2h0IGhhbmQgc2lkZSBuZWVkcyBwYXJlbnRoZXNpcz9cbiAgICAgICAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByaWdodCBoYW5kIHNpZGVcblxuICAgICAgICAgIHZhciByaHNQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnc1sxXSwgcGFyZW50aGVzaXMpOyAvLyBpcyB0aGUgcm9vdCBub2RlIGFzc29jaWF0aXZlIHdpdGggdGhlIHJpZ2h0IGhhbmQgc2lkZT9cblxuICAgICAgICAgIHZhciBhc3NvY1dpdGhSaHMgPSAoMCwgX29wZXJhdG9ycy5pc0Fzc29jaWF0aXZlV2l0aCkocm9vdCwgYXJnc1sxXSwgcGFyZW50aGVzaXMpO1xuXG4gICAgICAgICAgaWYgKHJoc1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSByaWdodCBoYW5kIHNpZGUgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWRcbiAgICAgICAgICAgIC8vIEZ1bmN0aW9uTm9kZSBmb3IgZXhhbXBsZVxuICAgICAgICAgICAgcmhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChyaHNQcmVjZWRlbmNlID09PSBwcmVjZWRlbmNlICYmIGFzc29jaWF0aXZpdHkgPT09ICdsZWZ0JyAmJiAhYXNzb2NXaXRoUmhzKSB7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGVxdWFsIHByZWNlZGVuY2UsIGlmIHRoZSByb290IG5vZGUgaXMgcmlnaHQgYXNzb2NpYXRpdmVcbiAgICAgICAgICAgIC8vIHBhcmVucyBhcmUgKipuZXZlcioqIG5lY2Vzc2FyeSBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZS5cbiAgICAgICAgICAgIC8vIElmIGl0IGlzIGxlZnQgYXNzb2NpYXRpdmUgaG93ZXZlciwgcGFyZW5zIGFyZSBuZWNlc3NhcnlcbiAgICAgICAgICAgIC8vIGlmIHRoZSByb290IG5vZGUgaXNuJ3QgYXNzb2NpYXRpdmUgd2l0aCB0aGUgcmlnaHQgaGFuZCBzaWRlXG4gICAgICAgICAgICByaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gLy8gaGFuZGxlIHNwZWNpYWwgY2FzZXMgZm9yIExhVGVYLCB3aGVyZSBzb21lIG9mIHRoZSBwYXJlbnRoZXNlcyBhcmVuJ3QgbmVlZGVkXG5cblxuICAgICAgICAgIGlmIChsYXRleCkge1xuICAgICAgICAgICAgdmFyIF9yb290SWRlbnRpZmllcjtcblxuICAgICAgICAgICAgdmFyIGxoc0lkZW50aWZpZXI7XG4gICAgICAgICAgICB2YXIgcmhzSWRlbnRpZmllcjtcblxuICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgICAgICAgICAgX3Jvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIGxoc0lkZW50aWZpZXIgPSByb290LmFyZ3NbMF0uZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBQYXJlbnRoZXNpc05vZGVzIHdoZW4gbm90IGluICdrZWVwJyBtb2RlXG4gICAgICAgICAgICAgIF9yb290SWRlbnRpZmllciA9IHJvb3QuZ2V0Q29udGVudCgpLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgICAgbGhzSWRlbnRpZmllciA9IHJvb3QuYXJnc1swXS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcHJlY2VkZW5jZV1bX3Jvb3RJZGVudGlmaWVyXS5sYXRleExlZnRQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgbGhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW2xoc1ByZWNlZGVuY2VdW2xoc0lkZW50aWZpZXJdLmxhdGV4UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcHJlY2VkZW5jZV1bX3Jvb3RJZGVudGlmaWVyXS5sYXRleFJpZ2h0UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKF9vcGVyYXRvcnMucHJvcGVydGllc1tyaHNQcmVjZWRlbmNlXVtyaHNJZGVudGlmaWVyXS5sYXRleFBhcmVucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByaHNQYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3VsdCA9IFtsaHNQYXJlbnMsIHJoc1BhcmVuc107XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyb290LmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTphZGQnIHx8IHJvb3QuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5Jykge1xuICAgICAgICAgIHJlc3VsdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHZhciBhcmdQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnLCBwYXJlbnRoZXNpcyk7XG4gICAgICAgICAgICB2YXIgYXNzb2NXaXRoQXJnID0gKDAsIF9vcGVyYXRvcnMuaXNBc3NvY2lhdGl2ZVdpdGgpKHJvb3QsIGFyZywgcGFyZW50aGVzaXMpO1xuICAgICAgICAgICAgdmFyIGFyZ0Fzc29jaWF0aXZpdHkgPSAoMCwgX29wZXJhdG9ycy5nZXRBc3NvY2lhdGl2aXR5KShhcmcsIHBhcmVudGhlc2lzKTtcblxuICAgICAgICAgICAgaWYgKGFyZ1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGFyZ3VtZW50IGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJlY2VkZW5jZSA9PT0gYXJnUHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSBhcmdBc3NvY2lhdGl2aXR5ICYmICFhc3NvY1dpdGhBcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1ByZWNlZGVuY2UgPCBwcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9IC8vIGhhbmRsZXMgYW4gZWRnZSBjYXNlIG9mICdhdXRvJyBwYXJlbnRoZXNlcyB3aXRoIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uIG9mIENvbnN0YW50Tm9kZVxuICAgIC8vIEluIHRoYXQgY2FzZSBwcmludCBwYXJlbnRoZXNlcyBmb3IgUGFyZW50aGVzaXNOb2RlcyBldmVuIHRob3VnaCB0aGV5IG5vcm1hbGx5IHdvdWxkbid0IGJlXG4gICAgLy8gcHJpbnRlZC5cblxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID49IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIHJvb3QuaW1wbGljaXQgJiYgcGFyZW50aGVzaXMgPT09ICdhdXRvJyAmJiBpbXBsaWNpdCA9PT0gJ2hpZGUnKSB7XG4gICAgICByZXN1bHQgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICB2YXIgaXNQYXJlbnRoZXNpc05vZGUgPSBhcmcuZ2V0SWRlbnRpZmllcigpID09PSAnUGFyZW50aGVzaXNOb2RlJztcblxuICAgICAgICBpZiAocmVzdWx0W2luZGV4XSB8fCBpc1BhcmVudGhlc2lzTm9kZSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGltcGxpY2l0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmltcGxpY2l0ID8gb3B0aW9ucy5pbXBsaWNpdCA6ICdoaWRlJztcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMsIGltcGxpY2l0LCBhcmdzLCBmYWxzZSk7XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSAnKCcgKyBvcGVyYW5kICsgJyknO1xuICAgICAgfSAvLyBmb3IgZXhhbXBsZSBmb3IgXCJub3RcIiwgd2Ugd2FudCBhIHNwYWNlIGJldHdlZW4gb3BlcmFuZCBhbmQgYXJndW1lbnRcblxuXG4gICAgICB2YXIgb3BJc05hbWVkID0gL1thLXpBLVpdKy8udGVzdCh0aGlzLm9wKTtcblxuICAgICAgaWYgKGFzc29jID09PSAncmlnaHQnKSB7XG4gICAgICAgIC8vIHByZWZpeCBvcGVyYXRvclxuICAgICAgICByZXR1cm4gdGhpcy5vcCArIChvcElzTmFtZWQgPyAnICcgOiAnJykgKyBvcGVyYW5kO1xuICAgICAgfSBlbHNlIGlmIChhc3NvYyA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIC8vIHBvc3RmaXhcbiAgICAgICAgcmV0dXJuIG9wZXJhbmQgKyAob3BJc05hbWVkID8gJyAnIDogJycpICsgdGhpcy5vcDtcbiAgICAgIH0gLy8gZmFsbCBiYWNrIHRvIHBvc3RmaXhcblxuXG4gICAgICByZXR1cm4gb3BlcmFuZCArIHRoaXMub3A7XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdmFyIGxocyA9IGFyZ3NbMF0udG9TdHJpbmcob3B0aW9ucyk7IC8vIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgIHZhciByaHMgPSBhcmdzWzFdLnRvU3RyaW5nKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgbGhzID0gJygnICsgbGhzICsgJyknO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIC8vIHJpZ2h0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgcmhzID0gJygnICsgcmhzICsgJyknO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICByZXR1cm4gbGhzICsgJyAnICsgcmhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzICsgJyAnICsgdGhpcy5vcCArICcgJyArIHJocztcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7XG4gICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7XG4gICAgICAgICAgLy8gcHV0IGluIHBhcmVudGhlc2lzP1xuICAgICAgICAgIGFyZyA9ICcoJyArIGFyZyArICcpJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuaW1wbGljaXQgJiYgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignICcgKyB0aGlzLm9wICsgJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gZm9ybWF0dGluZyBhcyBhIGZ1bmN0aW9uIGNhbGxcbiAgICAgIHJldHVybiB0aGlzLmZuICsgJygnICsgdGhpcy5hcmdzLmpvaW4oJywgJykgKyAnKSc7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdPcGVyYXRvck5vZGUnLFxuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICBmbjogdGhpcy5mbixcbiAgICAgIGFyZ3M6IHRoaXMuYXJncyxcbiAgICAgIGltcGxpY2l0OiB0aGlzLmltcGxpY2l0XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIE9wZXJhdG9yTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiT3BlcmF0b3JOb2RlXCIsIFwib3BcIjogXCIrXCIsIFwiZm5cIjogXCJhZGRcIiwgXCJhcmdzXCI6IFsuLi5dLCBcImltcGxpY2l0XCI6IGZhbHNlfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX1cbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKGpzb24ub3AsIGpzb24uZm4sIGpzb24uYXJncywganNvbi5pbXBsaWNpdCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnO1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIGZhbHNlKTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gdW5hcnkgb3BlcmF0b3JzXG4gICAgICB2YXIgYXNzb2MgPSAoMCwgX29wZXJhdG9ycy5nZXRBc3NvY2lhdGl2aXR5KSh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgICB2YXIgb3BlcmFuZCA9IGFyZ3NbMF0udG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBvcGVyYW5kICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNzb2MgPT09ICdyaWdodCcpIHtcbiAgICAgICAgLy8gcHJlZml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtdW5hcnktb3BlcmF0b3IgbWF0aC1sZWZ0aGFuZC11bmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBvc3RmaXggd2hlbiBhc3NvYyA9PT0gJ2xlZnQnIG9yIHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4gb3BlcmFuZCArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC11bmFyeS1vcGVyYXRvciBtYXRoLXJpZ2h0aGFuZC11bmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIGJpbmFyeSBvcGVyYXRvZXNcbiAgICAgIHZhciBsaHMgPSBhcmdzWzBdLnRvSFRNTChvcHRpb25zKTsgLy8gbGVmdCBoYW5kIHNpZGVcblxuICAgICAgdmFyIHJocyA9IGFyZ3NbMV0udG9IVE1MKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgbGhzID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIC8vIHJpZ2h0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgcmhzID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgcmhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICByZXR1cm4gbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWltcGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPjwvc3Bhbj4nICsgcmhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nICsgcmhzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvSFRNTChvcHRpb25zKTtcblxuICAgICAgICBpZiAocGFyZW5zW2luZGV4XSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICBhcmcgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBhcmcgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIgJiYgKHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOmFkZCcgfHwgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknKSkge1xuICAgICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIG1hdGgtaW1wbGljaXQtYmluYXJ5LW9wZXJhdG9yXCI+PC9zcGFuPicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1leHBsaWNpdC1iaW5hcnktb3BlcmF0b3JcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLm9wKSArICc8L3NwYW4+Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBmb3JtYXR0aW5nIGFzIGEgZnVuY3Rpb24gY2FsbFxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZm4pICsgJzwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnO1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIHRydWUpO1xuICAgIHZhciBvcCA9IF9sYXRleC5sYXRleE9wZXJhdG9yc1t0aGlzLmZuXTtcbiAgICBvcCA9IHR5cGVvZiBvcCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLm9wIDogb3A7IC8vIGZhbGwgYmFjayB0byB1c2luZyB0aGlzLm9wXG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChvcGVyYW5kLCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhc3NvYyA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAvLyBwcmVmaXggb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIG9wICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSBpZiAoYXNzb2MgPT09ICdsZWZ0Jykge1xuICAgICAgICAvLyBwb3N0Zml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiBvcGVyYW5kICsgb3A7XG4gICAgICB9IC8vIGZhbGwgYmFjayB0byBwb3N0Zml4XG5cblxuICAgICAgcmV0dXJuIG9wZXJhbmQgKyBvcDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBiaW5hcnkgb3BlcmF0b3JzXG4gICAgICB2YXIgbGhzID0gYXJnc1swXTsgLy8gbGVmdCBoYW5kIHNpZGVcblxuICAgICAgdmFyIGxoc1RleCA9IGxocy50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICBsaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChsaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJocyA9IGFyZ3NbMV07IC8vIHJpZ2h0IGhhbmQgc2lkZVxuXG4gICAgICB2YXIgcmhzVGV4ID0gcmhzLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIHJoc1RleCA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KHJoc1RleCwgXCJcXFxccmlnaHQpXCIpO1xuICAgICAgfSAvLyBoYW5kbGUgc29tZSBleGNlcHRpb25zIChkdWUgdG8gdGhlIHdheSBMYVRlWCB3b3JrcylcblxuXG4gICAgICB2YXIgbGhzSWRlbnRpZmllcjtcblxuICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgICAgbGhzSWRlbnRpZmllciA9IGxocy5nZXRJZGVudGlmaWVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXNOb2RlcyBpZiBpbiAna2VlcCcgbW9kZVxuICAgICAgICBsaHNJZGVudGlmaWVyID0gbGhzLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodGhpcy5nZXRJZGVudGlmaWVyKCkpIHtcbiAgICAgICAgY2FzZSAnT3BlcmF0b3JOb2RlOmRpdmlkZSc6XG4gICAgICAgICAgLy8gb3AgY29udGFpbnMgJ1xcXFxmcmFjJyBhdCB0aGlzIHBvaW50XG4gICAgICAgICAgcmV0dXJuIG9wICsgJ3snICsgbGhzVGV4ICsgJ30nICsgJ3snICsgcmhzVGV4ICsgJ30nO1xuXG4gICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpwb3cnOlxuICAgICAgICAgIGxoc1RleCA9ICd7JyArIGxoc1RleCArICd9JztcbiAgICAgICAgICByaHNUZXggPSAneycgKyByaHNUZXggKyAnfSc7XG5cbiAgICAgICAgICBzd2l0Y2ggKGxoc0lkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6IC8vXG5cbiAgICAgICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOlxuICAgICAgICAgICAgICBsaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChsaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdPcGVyYXRvck5vZGU6bXVsdGlwbHknOlxuICAgICAgICAgIGlmICh0aGlzLmltcGxpY2l0ICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgICAgIHJldHVybiBsaHNUZXggKyAnficgKyByaHNUZXg7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaHNUZXggKyBvcCArIHJoc1RleDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7XG4gICAgICB2YXIgdGV4aWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7XG4gICAgICAgICAgYXJnID0gXCJcXFxcbGVmdChcIi5jb25jYXQoYXJnLCBcIlxcXFxyaWdodClcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgdGhpcy5pbXBsaWNpdCkge1xuICAgICAgICByZXR1cm4gdGV4aWZpZWRBcmdzLmpvaW4oJ34nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleGlmaWVkQXJncy5qb2luKG9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbCBiYWNrIHRvIGZvcm1hdHRpbmcgYXMgYSBmdW5jdGlvbiBjYWxsXG4gICAgICAvLyBhcyB0aGlzIGlzIGEgZmFsbGJhY2ssIGl0IGRvZXNuJ3QgdXNlXG4gICAgICAvLyBmYW5jeSBmdW5jdGlvbiBuYW1lc1xuICAgICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyB0aGlzLmZuICsgJ31cXFxcbGVmdCgnICsgYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgfSkuam9pbignLCcpICsgJ1xcXFxyaWdodCknO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEdldCBpZGVudGlmaWVyLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgKyAnOicgKyB0aGlzLmZuO1xuICB9O1xuXG4gIHJldHVybiBPcGVyYXRvck5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9wZXJhdG9yTm9kZSA9IGNyZWF0ZU9wZXJhdG9yTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyZW50aGVzaXNOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUGFyZW50aGVzaXNOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVQYXJlbnRoZXNpc05vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFBhcmVudGhlc2lzTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQSBwYXJlbnRoZXNpcyBub2RlIGRlc2NyaWJlcyBtYW51YWwgcGFyZW50aGVzaXMgZnJvbSB0aGUgdXNlciBpbnB1dFxuICAgKiBAcGFyYW0ge05vZGV9IGNvbnRlbnRcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqL1xuICBmdW5jdGlvbiBQYXJlbnRoZXNpc05vZGUoY29udGVudCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXJlbnRoZXNpc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoY29udGVudCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImNvbnRlbnRcIicpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS50eXBlID0gJ1BhcmVudGhlc2lzTm9kZSc7XG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuaXNQYXJlbnRoZXNpc05vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgTm9kZS5cbiAgICogQHJldHVybiB7Tm9kZX0gY29udGVudFxuICAgKiBAb3ZlcnJpZGVcbiAgICoqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5nZXRDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0Q29udGVudCgpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuY29udGVudCwgJ2NvbnRlbnQnLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBQYXJlbnRoZXNpc05vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtQYXJlbnRoZXNpc05vZGV9IFJldHVybnMgYSBjbG9uZSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGNvbnRlbnQgPSBjYWxsYmFjayh0aGlzLmNvbnRlbnQsICdjb250ZW50JywgdGhpcyk7XG4gICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1BhcmVudGhlc2lzTm9kZX1cbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHRoaXMuY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuICcoJyArIHRoaXMuY29udGVudC50b1N0cmluZyhvcHRpb25zKSArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250ZW50LnRvU3RyaW5nKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdQYXJlbnRoZXNpc05vZGUnLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIFBhcmVudGhlc2lzTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUGFyZW50aGVzaXNOb2RlXCIsIFwiY29udGVudFwiOiAuLi59YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7UGFyZW50aGVzaXNOb2RlfVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoanNvbi5jb250ZW50KTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHRoaXMuY29udGVudC50b0hUTUwob3B0aW9ucykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b0hUTUwob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zICYmICFvcHRpb25zLnBhcmVudGhlc2lzIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICByZXR1cm4gXCJcXFxcbGVmdChcIi5jb25jYXQodGhpcy5jb250ZW50LnRvVGV4KG9wdGlvbnMpLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b1RleChvcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gUGFyZW50aGVzaXNOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJlbnRoZXNpc05vZGUgPSBjcmVhdGVQYXJlbnRoZXNpc05vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIG5hbWUgPSAnUmFuZ2VOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVSYW5nZU5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFJhbmdlTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogY3JlYXRlIGEgcmFuZ2VcbiAgICogQHBhcmFtIHtOb2RlfSBzdGFydCAgaW5jbHVkZWQgbG93ZXItYm91bmRcbiAgICogQHBhcmFtIHtOb2RlfSBlbmQgICAgaW5jbHVkZWQgdXBwZXItYm91bmRcbiAgICogQHBhcmFtIHtOb2RlfSBbc3RlcF0gb3B0aW9uYWwgc3RlcFxuICAgKi9cbiAgZnVuY3Rpb24gUmFuZ2VOb2RlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2VOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0c1xuXG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShzdGFydCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQnKTtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShlbmQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkJyk7XG4gICAgaWYgKHN0ZXAgJiYgISgwLCBfaXMuaXNOb2RlKShzdGVwKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9kZSBleHBlY3RlZCcpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykgdGhyb3cgbmV3IEVycm9yKCdUb28gbWFueSBhcmd1bWVudHMnKTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7IC8vIGluY2x1ZGVkIGxvd2VyLWJvdW5kXG5cbiAgICB0aGlzLmVuZCA9IGVuZDsgLy8gaW5jbHVkZWQgdXBwZXItYm91bmRcblxuICAgIHRoaXMuc3RlcCA9IHN0ZXAgfHwgbnVsbDsgLy8gb3B0aW9uYWwgc3RlcFxuICB9XG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIFJhbmdlTm9kZS5wcm90b3R5cGUudHlwZSA9ICdSYW5nZU5vZGUnO1xuICBSYW5nZU5vZGUucHJvdG90eXBlLmlzUmFuZ2VOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIFJhbmdlTm9kZSBuZWVkcyB0aGUgYGVuZGAgc3ltYm9sIHRvIGJlIGRlZmluZWQuXG4gICAqIFRoaXMgZW5kIGlzIHRoZSBzaXplIG9mIHRoZSBNYXRyaXggaW4gY3VycmVudCBkaW1lbnNpb24uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUubmVlZHNFbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZmluZCBhbGwgYGVuZGAgc3ltYm9scyBpbiB0aGlzIFJhbmdlTm9kZVxuICAgIHZhciBlbmRTeW1ib2xzID0gdGhpcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2lzLmlzU3ltYm9sTm9kZSkobm9kZSkgJiYgbm9kZS5uYW1lID09PSAnZW5kJztcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kU3ltYm9scy5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgcmFuZ2UgPSBtYXRoLnJhbmdlO1xuXG4gICAgdmFyIGV2YWxTdGFydCA9IHRoaXMuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxFbmQgPSB0aGlzLmVuZC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgZXZhbFN0ZXAgPSB0aGlzLnN0ZXAuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJhbmdlTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxTdGVwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJhbmdlTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKTtcblxuICAgIGlmICh0aGlzLnN0ZXApIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuc3RlcCwgJ3N0ZXAnLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmFuZ2VOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtSYW5nZU5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKSksIHRoaXMuc3RlcCAmJiB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGVwLCAnc3RlcCcsIHRoaXMpKSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1JhbmdlTm9kZX1cbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKHRoaXMuc3RhcnQsIHRoaXMuZW5kLCB0aGlzLnN0ZXAgJiYgdGhpcy5zdGVwKTtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbmVjZXNzYXJ5IHBhcmVudGhlc2VzXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAgICogQHJldHVybiB7T2JqZWN0fSBwYXJlbnRoZXNlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKG5vZGUsIHBhcmVudGhlc2lzKSB7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHBhcmVucyA9IHt9O1xuICAgIHZhciBzdGFydFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnN0YXJ0LCBwYXJlbnRoZXNpcyk7XG4gICAgcGFyZW5zLnN0YXJ0ID0gc3RhcnRQcmVjZWRlbmNlICE9PSBudWxsICYmIHN0YXJ0UHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcblxuICAgIGlmIChub2RlLnN0ZXApIHtcbiAgICAgIHZhciBzdGVwUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUuc3RlcCwgcGFyZW50aGVzaXMpO1xuICAgICAgcGFyZW5zLnN0ZXAgPSBzdGVwUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBzdGVwUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcbiAgICB9XG5cbiAgICB2YXIgZW5kUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUuZW5kLCBwYXJlbnRoZXNpcyk7XG4gICAgcGFyZW5zLmVuZCA9IGVuZFByZWNlZGVuY2UgIT09IG51bGwgJiYgZW5kUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcbiAgICByZXR1cm4gcGFyZW5zO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHBhcmVucyA9IGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHRoaXMsIHBhcmVudGhlc2lzKTsgLy8gZm9ybWF0IHN0cmluZyBhcyBzdGFydDpzdGVwOnN0b3BcblxuICAgIHZhciBzdHI7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gJygnICsgc3RhcnQgKyAnKSc7XG4gICAgfVxuXG4gICAgc3RyID0gc3RhcnQ7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVucy5zdGVwKSB7XG4gICAgICAgIHN0ZXAgPSAnKCcgKyBzdGVwICsgJyknO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gJzonICsgc3RlcDtcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gdGhpcy5lbmQudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLmVuZCkge1xuICAgICAgZW5kID0gJygnICsgZW5kICsgJyknO1xuICAgIH1cblxuICAgIHN0ciArPSAnOicgKyBlbmQ7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnUmFuZ2VOb2RlJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICAgIHN0ZXA6IHRoaXMuc3RlcFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBSYW5nZU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJhbmdlTm9kZVwiLCBcInN0YXJ0XCI6IC4uLiwgXCJlbmRcIjogLi4uLCBcInN0ZXBcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1JhbmdlTm9kZX1cbiAgICovXG5cblxuICBSYW5nZU5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKGpzb24uc3RhcnQsIGpzb24uZW5kLCBqc29uLnN0ZXApO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMpOyAvLyBmb3JtYXQgc3RyaW5nIGFzIHN0YXJ0OnN0ZXA6c3RvcFxuXG4gICAgdmFyIHN0cjtcbiAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0LnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgc3RhcnQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgc3RyID0gc3RhcnQ7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b0hUTUwob3B0aW9ucyk7XG5cbiAgICAgIGlmIChwYXJlbnMuc3RlcCkge1xuICAgICAgICBzdGVwID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgc3RlcCArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cblxuICAgICAgc3RyICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIHN0ZXA7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kLnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuZW5kKSB7XG4gICAgICBlbmQgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBlbmQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgc3RyICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIGVuZDtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbXMge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHN0ciA9IHRoaXMuc3RhcnQudG9UZXgob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLnN0YXJ0KSB7XG4gICAgICBzdHIgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChzdHIsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVucy5zdGVwKSB7XG4gICAgICAgIHN0ZXAgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChzdGVwLCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSAnOicgKyBzdGVwO1xuICAgIH1cblxuICAgIHZhciBlbmQgPSB0aGlzLmVuZC50b1RleChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuZW5kKSB7XG4gICAgICBlbmQgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChlbmQsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzonICsgZW5kO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgcmV0dXJuIFJhbmdlTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VOb2RlID0gY3JlYXRlUmFuZ2VOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZWxhdGlvbmFsTm9kZSA9IHZvaWQgMDtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUmVsYXRpb25hbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZVJlbGF0aW9uYWxOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEEgbm9kZSByZXByZXNlbnRpbmcgYSBjaGFpbmVkIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24sIHN1Y2ggYXMgJ3ggPiB5ID4geidcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gY29uZGl0aW9uYWxzICAgQW4gYXJyYXkgb2YgY29uZGl0aW9uYWwgb3BlcmF0b3JzIHVzZWQgdG8gY29tcGFyZSB0aGUgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gcGFyYW1zICAgVGhlIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGNvbXBhcmVkXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvciBSZWxhdGlvbmFsTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIFJlbGF0aW9uYWxOb2RlKGNvbmRpdGlvbmFscywgcGFyYW1zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlbGF0aW9uYWxOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZGl0aW9uYWxzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGNvbmRpdGlvbmFscyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBwYXJhbXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIGlmIChjb25kaXRpb25hbHMubGVuZ3RoICE9PSBwYXJhbXMubGVuZ3RoIC0gMSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIHBhcmFtcyBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUgbW9yZSBlbGVtZW50IHRoYW4gcGFyYW1ldGVyIGNvbmRpdGlvbmFscycpO1xuICAgIHRoaXMuY29uZGl0aW9uYWxzID0gY29uZGl0aW9uYWxzO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLnR5cGUgPSAnUmVsYXRpb25hbE5vZGUnO1xuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuaXNSZWxhdGlvbmFsTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY29tcGlsZWQgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBwLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJlbGF0aW9uYWxOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgZXZhbExocztcbiAgICAgIHZhciBldmFsUmhzID0gY29tcGlsZWRbMF0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV2YWxMaHMgPSBldmFsUmhzO1xuICAgICAgICBldmFsUmhzID0gY29tcGlsZWRbaSArIDFdKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGNvbmRGbiA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsIHNlbGYuY29uZGl0aW9uYWxzW2ldKTtcblxuICAgICAgICBpZiAoIWNvbmRGbihldmFsTGhzLCBldmFsUmhzKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhuLCAncGFyYW1zWycgKyBpICsgJ10nLCBfdGhpcyk7XG4gICAgfSwgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmVsYXRpb25hbE5vZGUgaGF2aW5nIGl0cyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UmVsYXRpb25hbE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbmFscy5zbGljZSgpLCB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIHJldHVybiBfdGhpczIuX2lmTm9kZShjYWxsYmFjayhuLCAncGFyYW1zWycgKyBpICsgJ10nLCBfdGhpczIpKTtcbiAgICB9LCB0aGlzKSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1JlbGF0aW9uYWxOb2RlfVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFJlbGF0aW9uYWxOb2RlKHRoaXMuY29uZGl0aW9uYWxzLCB0aGlzLnBhcmFtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKSh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHBhcmFtU3RyaW5ncyA9IHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAocCwgaW5kZXgpIHtcbiAgICAgIHZhciBwYXJhbVByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShwLCBwYXJlbnRoZXNpcyk7XG4gICAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHBhcmFtUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBwYXJhbVByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSA/ICcoJyArIHAudG9TdHJpbmcob3B0aW9ucykgKyAnKScgOiBwLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBvcGVyYXRvck1hcCA9IHtcbiAgICAgIGVxdWFsOiAnPT0nLFxuICAgICAgdW5lcXVhbDogJyE9JyxcbiAgICAgIHNtYWxsZXI6ICc8JyxcbiAgICAgIGxhcmdlcjogJz4nLFxuICAgICAgc21hbGxlckVxOiAnPD0nLFxuICAgICAgbGFyZ2VyRXE6ICc+PSdcbiAgICB9O1xuICAgIHZhciByZXQgPSBwYXJhbVN0cmluZ3NbMF07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQgKz0gJyAnICsgb3BlcmF0b3JNYXBbdGhpcy5jb25kaXRpb25hbHNbaV1dICsgJyAnICsgcGFyYW1TdHJpbmdzW2kgKyAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1JlbGF0aW9uYWxOb2RlJyxcbiAgICAgIGNvbmRpdGlvbmFsczogdGhpcy5jb25kaXRpb25hbHMsXG4gICAgICBwYXJhbXM6IHRoaXMucGFyYW1zXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgUmVsYXRpb25hbE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJlbGF0aW9uYWxOb2RlXCIsIFwiY29uZGl0aW9uXCI6IC4uLiwgXCJ0cnVlRXhwclwiOiAuLi4sIFwiZmFsc2VFeHByXCI6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtSZWxhdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZShqc29uLmNvbmRpdGlvbmFscywganNvbi5wYXJhbXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBwLnRvSFRNTChvcHRpb25zKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JyA6IHAudG9IVE1MKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBvcGVyYXRvck1hcCA9IHtcbiAgICAgIGVxdWFsOiAnPT0nLFxuICAgICAgdW5lcXVhbDogJyE9JyxcbiAgICAgIHNtYWxsZXI6ICc8JyxcbiAgICAgIGxhcmdlcjogJz4nLFxuICAgICAgc21hbGxlckVxOiAnPD0nLFxuICAgICAgbGFyZ2VyRXE6ICc+PSdcbiAgICB9O1xuICAgIHZhciByZXQgPSBwYXJhbVN0cmluZ3NbMF07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQgKz0gJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKG9wZXJhdG9yTWFwW3RoaXMuY29uZGl0aW9uYWxzW2ldXSkgKyAnPC9zcGFuPicgKyBwYXJhbVN0cmluZ3NbaSArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnXFxcXGxlZnQoJyArIHAudG9UZXgob3B0aW9ucykgKyAnXFxyaWdodCknIDogcC50b1RleChvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgcmV0ID0gcGFyYW1TdHJpbmdzWzBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmRpdGlvbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0ICs9IF9sYXRleC5sYXRleE9wZXJhdG9yc1t0aGlzLmNvbmRpdGlvbmFsc1tpXV0gKyBwYXJhbVN0cmluZ3NbaSArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgcmV0dXJuIFJlbGF0aW9uYWxOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZWxhdGlvbmFsTm9kZSA9IGNyZWF0ZVJlbGF0aW9uYWxOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTeW1ib2xOb2RlID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sYXRleCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sYXRleFwiKTtcblxudmFyIG5hbWUgPSAnU3ltYm9sTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoJywgJz9Vbml0JywgJ05vZGUnXTtcbnZhciBjcmVhdGVTeW1ib2xOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsXG4gICAgICBVbml0ID0gX3JlZi5Vbml0LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzb21lIG5hbWUgaXMgYSB2YWx1ZWxlc3MgdW5pdCBsaWtlIFwiaW5jaFwiLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNWYWx1ZWxlc3NVbml0KG5hbWUpIHtcbiAgICByZXR1cm4gVW5pdCA/IFVuaXQuaXNWYWx1ZWxlc3NVbml0KG5hbWUpIDogZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBTeW1ib2xOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBBIHN5bWJvbCBub2RlIGNhbiBob2xkIGFuZCByZXNvbHZlIGEgc3ltYm9sXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIFN5bWJvbE5vZGUobmFtZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0XG5cblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwibmFtZVwiJyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudHlwZSA9ICdTeW1ib2xOb2RlJztcbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuaXNTeW1ib2xOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcblxuICAgIGlmIChhcmdOYW1lc1tuYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gdGhpcyBpcyBhIEZ1bmN0aW9uQXNzaWdubWVudCBhcmd1bWVudFxuICAgICAgLy8gKGxpa2UgYW4geCB3aGVuIGluc2lkZSB0aGUgZXhwcmVzc2lvbiBvZiBhIGZ1bmN0aW9uIGFzc2lnbm1lbnQgYGYoeCkgPSAuLi5gKVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYXJnc1tuYW1lXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChuYW1lIGluIG1hdGgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSkgOiAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCBuYW1lKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1VuaXQgPSBpc1ZhbHVlbGVzc1VuaXQobmFtZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUpIDogaXNVbml0ID8gbmV3IFVuaXQobnVsbCwgbmFtZSkgOiB1bmRlZihuYW1lKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHt9IC8vIG5vdGhpbmcgdG8gZG8sIHdlIGRvbid0IGhhdmUgY2hpbGRzXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBTeW1ib2xOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7U3ltYm9sTm9kZX0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSBub2RlXG4gICAqL1xuICA7XG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRocm93cyBhbiBlcnJvciAnVW5kZWZpbmVkIHN5bWJvbCB7bmFtZX0nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5kZWYobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5kZWZpbmVkIHN5bWJvbCAnICsgbmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7U3ltYm9sTm9kZX1cbiAgICovXG5cblxuICBTeW1ib2xOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbE5vZGUodGhpcy5uYW1lKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgbmFtZSA9ICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5uYW1lKTtcblxuICAgIGlmIChuYW1lID09PSAndHJ1ZScgfHwgbmFtZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtYm9vbGVhblwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2knKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1pbWFnaW5hcnktc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnSW5maW5pdHknKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1pbmZpbml0eS1zeW1ib2xcIj4nICsgbmFtZSArICc8L3NwYW4+JztcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdOYU4nKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1uYW4tc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLW51bGwtc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtdW5kZWZpbmVkLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnU3ltYm9sTm9kZScsXG4gICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBTeW1ib2xOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJTeW1ib2xOb2RlXCIsIG5hbWU6IFwieFwifWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1N5bWJvbE5vZGV9XG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBTeW1ib2xOb2RlKGpzb24ubmFtZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaXNVbml0ID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXSA9PT0gJ3VuZGVmaW5lZCcgJiYgaXNWYWx1ZWxlc3NVbml0KHRoaXMubmFtZSkpIHtcbiAgICAgIGlzVW5pdCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN5bWJvbCA9ICgwLCBfbGF0ZXgudG9TeW1ib2wpKHRoaXMubmFtZSwgaXNVbml0KTtcblxuICAgIGlmIChzeW1ib2xbMF0gPT09ICdcXFxcJykge1xuICAgICAgLy8gbm8gc3BhY2UgbmVlZGVkIGlmIHRoZSBzeW1ib2wgc3RhcnRzIHdpdGggJ1xcJ1xuICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICB9IC8vIHRoZSBzcGFjZSBwcmV2ZW50cyBzeW1ib2xzIGZyb20gYnJlYWtpbmcgc3R1ZmYgbGlrZSAnXFxjZG90JyBpZiBpdCdzIHdyaXR0ZW4gcmlnaHQgYmVmb3JlIHRoZSBzeW1ib2xcblxuXG4gICAgcmV0dXJuICcgJyArIHN5bWJvbDtcbiAgfTtcblxuICByZXR1cm4gU3ltYm9sTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3ltYm9sTm9kZSA9IGNyZWF0ZVN5bWJvbE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjY2Vzc0ZhY3RvcnkgPSBhY2Nlc3NGYWN0b3J5O1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4uLy4uL3RyYW5zZm9ybS91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gYWNjZXNzRmFjdG9yeShfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldDtcblxuICAvKipcbiAgICogUmV0cmlldmUgcGFydCBvZiBhbiBvYmplY3Q6XG4gICAqXG4gICAqIC0gUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICAgKiAtIFJldHJpZXZlIGEgcGFydCBvZiBhIHN0cmluZ1xuICAgKiAtIFJldHJpZXZlIGEgbWF0cml4IHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3RcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHJldHVybiB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXggfCBzdHJpbmd9IFJldHVybnMgdGhlIHN1YnNldFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjY2VzcyhvYmplY3QsIGluZGV4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIHN1YnNldChvYmplY3QsIGluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE1hdHJpeFxuICAgICAgICByZXR1cm4gb2JqZWN0LnN1YnNldChpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFRPRE86IG1vdmUgZ2V0U3RyaW5nU3Vic2V0IGludG8gYSBzZXBhcmF0ZSB1dGlsIGZpbGUsIHVzZSB0aGF0XG4gICAgICAgIHJldHVybiBzdWJzZXQob2JqZWN0LCBpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKCFpbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgYSBudW1lcmljIGluZGV4IGFzIG9iamVjdCBwcm9wZXJ0eScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgaW5kZXg6IHVuc3VwcG9ydGVkIHR5cGUgb2Ygb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNzaWduRmFjdG9yeSA9IGFzc2lnbkZhY3Rvcnk7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi4vLi4vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBhc3NpZ25GYWN0b3J5KF9yZWYpIHtcbiAgdmFyIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgcGFydCBvZiBhbiBvYmplY3Q6XG4gICAqXG4gICAqIC0gQXNzaWduIGEgcHJvcGVydHkgdG8gYW4gb2JqZWN0XG4gICAqIC0gUmVwbGFjZSBhIHBhcnQgb2YgYSBzdHJpbmdcbiAgICogLSBSZXBsYWNlIGEgbWF0cml4IHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3RcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtPYmplY3QgfCBBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gUmV0dXJucyB0aGUgb3JpZ2luYWwgb2JqZWN0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgaW4gY2FzZSBvZiBhIHN0cmluZ1xuICAgKi9cbiAgLy8gVE9ETzogY2hhbmdlIGFzc2lnbiB0byByZXR1cm4gdGhlIHZhbHVlIGluc3RlYWQgb2YgdGhlIG9iamVjdFxuICByZXR1cm4gZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgLy8gd2UgdXNlIG1hdHJpeC5zdWJzZXQgaGVyZSBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBzdWJzZXQgYmVjYXVzZSB3ZSBtdXN0IG5vdCBjbG9uZSB0aGUgY29udGVudHNcbiAgICAgICAgcmV0dXJuIG1hdHJpeChvYmplY3QpLnN1YnNldChpbmRleCwgdmFsdWUpLnZhbHVlT2YoKTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE1hdHJpeFxuICAgICAgICByZXR1cm4gb2JqZWN0LnN1YnNldChpbmRleCwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBUT0RPOiBtb3ZlIHNldFN0cmluZ1N1YnNldCBpbnRvIGEgc2VwYXJhdGUgdXRpbCBmaWxlLCB1c2UgdGhhdFxuICAgICAgICByZXR1cm4gc3Vic2V0KG9iamVjdCwgaW5kZXgsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZihvYmplY3QpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoIWluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGEgbnVtZXJpYyBpbmRleCBhcyBvYmplY3QgcHJvcGVydHknKTtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGluZGV4OiB1bnN1cHBvcnRlZCB0eXBlIG9mIG9iamVjdCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldFByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlO1xuZXhwb3J0cy5nZXRBc3NvY2lhdGl2aXR5ID0gZ2V0QXNzb2NpYXRpdml0eTtcbmV4cG9ydHMuaXNBc3NvY2lhdGl2ZVdpdGggPSBpc0Fzc29jaWF0aXZlV2l0aDtcbmV4cG9ydHMucHJvcGVydGllcyA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG4vLyBsaXN0IG9mIGlkZW50aWZpZXJzIG9mIG5vZGVzIGluIG9yZGVyIG9mIHRoZWlyIHByZWNlZGVuY2Vcbi8vIGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgbGVmdC9yaWdodCBhc3NvY2lhdGl2aXR5XG4vLyBhbmQgd2hpY2ggb3RoZXIgb3BlcmF0b3IgdGhlIG9wZXJhdG9yIGlzIGFzc29jaWF0aXZlIHdpdGhcbi8vIEV4YW1wbGU6XG4vLyBhZGRpdGlvbiBpcyBhc3NvY2lhdGl2ZSB3aXRoIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiwgYmVjYXVzZTpcbi8vIChhK2IpK2M9YSsoYitjKVxuLy8gKGErYiktYz1hKyhiLWMpXG4vL1xuLy8gcG9zdGZpeCBvcGVyYXRvcnMgYXJlIGxlZnQgYXNzb2NpYXRpdmUsIHByZWZpeCBvcGVyYXRvcnNcbi8vIGFyZSByaWdodCBhc3NvY2lhdGl2ZVxuLy9cbi8vIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuLy8gbGF0ZXhQYXJlbnM6IGlmIHNldCB0byBmYWxzZSwgdGhpcyBub2RlIGRvZXNuJ3QgbmVlZCB0byBiZSBlbmNsb3NlZFxuLy8gICAgICAgICAgICAgIGluIHBhcmVudGhlc2VzIHdoZW4gdXNpbmcgTGFUZVhcbi8vIGxhdGV4TGVmdFBhcmVuczogaWYgc2V0IHRvIGZhbHNlLCB0aGlzICFPcGVyYXRvck5vZGUncyFcbi8vICAgICAgICAgICAgICAgICAgbGVmdCBhcmd1bWVudCBkb2Vzbid0IG5lZWQgdG8gYmUgZW5jbG9zZWRcbi8vICAgICAgICAgICAgICAgICAgaW4gcGFyZW50aGVzZXNcbi8vIGxhdGV4UmlnaHRQYXJlbnM6IHRoZSBzYW1lIGZvciB0aGUgcmlnaHQgYXJndW1lbnRcbnZhciBwcm9wZXJ0aWVzID0gW3tcbiAgLy8gYXNzaWdubWVudFxuICBBc3NpZ25tZW50Tm9kZToge30sXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IHt9XG59LCB7XG4gIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cbiAgQ29uZGl0aW9uYWxOb2RlOiB7XG4gICAgbGF0ZXhMZWZ0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gY29uZGl0aW9uYWxzIGRvbid0IG5lZWQgcGFyZW50aGVzZXMgaW4gTGFUZVggYmVjYXVzZVxuICAgIC8vIHRoZXkgYXJlIDIgZGltZW5zaW9uYWxcblxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgb3JcbiAgJ09wZXJhdG9yTm9kZTpvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgeG9yXG4gICdPcGVyYXRvck5vZGU6eG9yJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gbG9naWNhbCBhbmRcbiAgJ09wZXJhdG9yTm9kZTphbmQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIG9yXG4gICdPcGVyYXRvck5vZGU6Yml0T3InOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIHhvclxuICAnT3BlcmF0b3JOb2RlOmJpdFhvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGJpdHdpc2UgYW5kXG4gICdPcGVyYXRvck5vZGU6Yml0QW5kJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gcmVsYXRpb25hbCBvcGVyYXRvcnNcbiAgJ09wZXJhdG9yTm9kZTplcXVhbCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnVuZXF1YWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpzbWFsbGVyJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bGFyZ2VyJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6c21hbGxlckVxJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bGFyZ2VyRXEnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgUmVsYXRpb25hbE5vZGU6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGJpdHNoaWZ0IG9wZXJhdG9yc1xuICAnT3BlcmF0b3JOb2RlOmxlZnRTaGlmdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnJpZ2h0QXJpdGhTaGlmdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnJpZ2h0TG9nU2hpZnQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyB1bml0IGNvbnZlcnNpb25cbiAgJ09wZXJhdG9yTm9kZTp0byc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIHJhbmdlXG4gIFJhbmdlTm9kZToge31cbn0sIHtcbiAgLy8gYWRkaXRpb24sIHN1YnRyYWN0aW9uXG4gICdPcGVyYXRvck5vZGU6YWRkJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOmFkZCcsICdPcGVyYXRvck5vZGU6c3VidHJhY3QnXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnN1YnRyYWN0Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gbXVsdGlwbHksIGRpdmlkZSwgbW9kdWx1c1xuICAnT3BlcmF0b3JOb2RlOm11bHRpcGx5Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOm11bHRpcGx5JywgJ09wZXJhdG9yTm9kZTpkaXZpZGUnLCAnT3BlcmF0b3I6ZG90TXVsdGlwbHknLCAnT3BlcmF0b3I6ZG90RGl2aWRlJ11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW10sXG4gICAgbGF0ZXhMZWZ0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gZnJhY3Rpb25zIGRvbid0IHJlcXVpcmUgcGFyZW50aGVzZXMgYmVjYXVzZVxuICAgIC8vIHRoZXkncmUgMiBkaW1lbnNpb25hbCwgc28gcGFyZW5zIGFyZW4ndCBuZWVkZWRcbiAgICAvLyBpbiBMYVRlWFxuXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHknOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogWydPcGVyYXRvck5vZGU6bXVsdGlwbHknLCAnT3BlcmF0b3JOb2RlOmRpdmlkZScsICdPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHknLCAnT3BlcmF0b3JOb2RlOmRvRGl2aWRlJ11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkb3REaXZpZGUnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTptb2QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyB1bmFyeSBwcmVmaXggb3BlcmF0b3JzXG4gICdPcGVyYXRvck5vZGU6dW5hcnlQbHVzJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTp1bmFyeU1pbnVzJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpiaXROb3QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0J1xuICB9LFxuICAnT3BlcmF0b3JOb2RlOm5vdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnXG4gIH1cbn0sIHtcbiAgLy8gZXhwb25lbnRpYXRpb25cbiAgJ09wZXJhdG9yTm9kZTpwb3cnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdLFxuICAgIGxhdGV4UmlnaHRQYXJlbnM6IGZhbHNlIC8vIHRoZSBleHBvbmVudCBkb2Vzbid0IG5lZWQgcGFyZW50aGVzZXMgaW5cbiAgICAvLyBMYVRlWCBiZWNhdXNlIGl0J3MgMiBkaW1lbnNpb25hbFxuICAgIC8vIChpdCdzIG9uIHRvcClcblxuICB9LFxuICAnT3BlcmF0b3JOb2RlOmRvdFBvdyc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBmYWN0b3JpYWxcbiAgJ09wZXJhdG9yTm9kZTpmYWN0b3JpYWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnXG4gIH1cbn0sIHtcbiAgLy8gbWF0cml4IHRyYW5zcG9zZVxuICAnT3BlcmF0b3JOb2RlOnRyYW5zcG9zZSc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCdcbiAgfVxufV07XG4vKipcbiAqIEdldCB0aGUgcHJlY2VkZW5jZSBvZiBhIE5vZGUuXG4gKiBIaWdoZXIgbnVtYmVyIGZvciBoaWdoZXIgcHJlY2VkZW5jZSwgc3RhcnRpbmcgd2l0aCAwLlxuICogUmV0dXJucyBudWxsIGlmIHRoZSBwcmVjZWRlbmNlIGlzIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IF9ub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAqIEByZXR1cm4ge251bWJlciB8IG51bGx9XG4gKi9cblxuZXhwb3J0cy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcblxuZnVuY3Rpb24gZ2V0UHJlY2VkZW5jZShfbm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgdmFyIG5vZGUgPSBfbm9kZTtcblxuICBpZiAocGFyZW50aGVzaXMgIT09ICdrZWVwJykge1xuICAgIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICAgIG5vZGUgPSBfbm9kZS5nZXRDb250ZW50KCk7XG4gIH1cblxuICB2YXIgaWRlbnRpZmllciA9IG5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpZGVudGlmaWVyIGluIHByb3BlcnRpZXNbaV0pIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHZXQgdGhlIGFzc29jaWF0aXZpdHkgb2YgYW4gb3BlcmF0b3IgKGxlZnQgb3IgcmlnaHQpLlxuICogUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nICdsZWZ0JyBvciAncmlnaHQnIG9yIG51bGwgaWZcbiAqIHRoZSBhc3NvY2lhdGl2aXR5IGlzIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX1cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICogQHJldHVybiB7c3RyaW5nfG51bGx9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEFzc29jaWF0aXZpdHkoX25vZGUsIHBhcmVudGhlc2lzKSB7XG4gIHZhciBub2RlID0gX25vZGU7XG5cbiAgaWYgKHBhcmVudGhlc2lzICE9PSAna2VlcCcpIHtcbiAgICAvLyBQYXJlbnRoZXNpc05vZGVzIGFyZSBvbmx5IGlnbm9yZWQgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICBub2RlID0gX25vZGUuZ2V0Q29udGVudCgpO1xuICB9XG5cbiAgdmFyIGlkZW50aWZpZXIgPSBub2RlLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGluZGV4ID0gZ2V0UHJlY2VkZW5jZShub2RlLCBwYXJlbnRoZXNpcyk7XG5cbiAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgLy8gbm9kZSBpc24ndCBpbiB0aGUgbGlzdFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpbmRleF1baWRlbnRpZmllcl07XG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShwcm9wZXJ0eSwgJ2Fzc29jaWF0aXZpdHknKSkge1xuICAgIGlmIChwcm9wZXJ0eS5hc3NvY2lhdGl2aXR5ID09PSAnbGVmdCcpIHtcbiAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5LmFzc29jaWF0aXZpdHkgPT09ICdyaWdodCcpIHtcbiAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH0gLy8gYXNzb2NpYXRpdml0eSBpcyBpbnZhbGlkXG5cblxuICAgIHRocm93IEVycm9yKCdcXCcnICsgaWRlbnRpZmllciArICdcXCcgaGFzIHRoZSBpbnZhbGlkIGFzc29jaWF0aXZpdHkgXFwnJyArIHByb3BlcnR5LmFzc29jaWF0aXZpdHkgKyAnXFwnLicpO1xuICB9IC8vIGFzc29jaWF0aXZpdHkgaXMgdW5kZWZpbmVkXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYW4gb3BlcmF0b3IgaXMgYXNzb2NpYXRpdmUgd2l0aCBhbm90aGVyIG9wZXJhdG9yLlxuICogUmV0dXJucyBlaXRoZXIgdHJ1ZSBvciBmYWxzZSBvciBudWxsIGlmIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUFcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICogQHJldHVybiB7Ym9vbGVhbiB8IG51bGx9XG4gKi9cblxuXG5mdW5jdGlvbiBpc0Fzc29jaWF0aXZlV2l0aChub2RlQSwgbm9kZUIsIHBhcmVudGhlc2lzKSB7XG4gIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICB2YXIgYSA9IHBhcmVudGhlc2lzICE9PSAna2VlcCcgPyBub2RlQS5nZXRDb250ZW50KCkgOiBub2RlQTtcbiAgdmFyIGIgPSBwYXJlbnRoZXNpcyAhPT0gJ2tlZXAnID8gbm9kZUEuZ2V0Q29udGVudCgpIDogbm9kZUI7XG4gIHZhciBpZGVudGlmaWVyQSA9IGEuZ2V0SWRlbnRpZmllcigpO1xuICB2YXIgaWRlbnRpZmllckIgPSBiLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGluZGV4ID0gZ2V0UHJlY2VkZW5jZShhLCBwYXJlbnRoZXNpcyk7XG5cbiAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgLy8gbm9kZSBpc24ndCBpbiB0aGUgbGlzdFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpbmRleF1baWRlbnRpZmllckFdO1xuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkocHJvcGVydHksICdhc3NvY2lhdGl2ZVdpdGgnKSAmJiBwcm9wZXJ0eS5hc3NvY2lhdGl2ZVdpdGggaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoW2ldID09PSBpZGVudGlmaWVyQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gYXNzb2NpYXRpdmVXaXRoIGlzIG5vdCBkZWZpbmVkXG5cblxuICByZXR1cm4gbnVsbDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG52YXIgbmFtZSA9ICdwYXJzZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdudW1lcmljJywgJ2NvbmZpZycsICdBY2Nlc3Nvck5vZGUnLCAnQXJyYXlOb2RlJywgJ0Fzc2lnbm1lbnROb2RlJywgJ0Jsb2NrTm9kZScsICdDb25kaXRpb25hbE5vZGUnLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ0luZGV4Tm9kZScsICdPYmplY3ROb2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnUmFuZ2VOb2RlJywgJ1JlbGF0aW9uYWxOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVQYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBBY2Nlc3Nvck5vZGUgPSBfcmVmLkFjY2Vzc29yTm9kZSxcbiAgICAgIEFycmF5Tm9kZSA9IF9yZWYuQXJyYXlOb2RlLFxuICAgICAgQXNzaWdubWVudE5vZGUgPSBfcmVmLkFzc2lnbm1lbnROb2RlLFxuICAgICAgQmxvY2tOb2RlID0gX3JlZi5CbG9ja05vZGUsXG4gICAgICBDb25kaXRpb25hbE5vZGUgPSBfcmVmLkNvbmRpdGlvbmFsTm9kZSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IF9yZWYuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLFxuICAgICAgSW5kZXhOb2RlID0gX3JlZi5JbmRleE5vZGUsXG4gICAgICBPYmplY3ROb2RlID0gX3JlZi5PYmplY3ROb2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZSxcbiAgICAgIFJhbmdlTm9kZSA9IF9yZWYuUmFuZ2VOb2RlLFxuICAgICAgUmVsYXRpb25hbE5vZGUgPSBfcmVmLlJlbGF0aW9uYWxOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbi4gUmV0dXJucyBhIG5vZGUgdHJlZSwgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCBieVxuICAgKiBpbnZva2luZyBub2RlLmV2YWx1YXRlKCkuXG4gICAqXG4gICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLFxuICAgKiBzZWUgW2h0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWxdKGh0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnBhcnNlKGV4cHIpXG4gICAqICAgICBtYXRoLnBhcnNlKGV4cHIsIG9wdGlvbnMpXG4gICAqICAgICBtYXRoLnBhcnNlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKVxuICAgKiAgICAgbWF0aC5wYXJzZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSwgb3B0aW9ucylcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogICAgIGNvbnN0IG5vZGUxID0gbWF0aC5wYXJzZSgnc3FydCgzXjIgKyA0XjIpJylcbiAgICogICAgIG5vZGUxLmNvbXBpbGUoKS5ldmFsdWF0ZSgpIC8vIDVcbiAgICpcbiAgICogICAgIGxldCBzY29wZSA9IHthOjMsIGI6NH1cbiAgICogICAgIGNvbnN0IG5vZGUyID0gbWF0aC5wYXJzZSgnYSAqIGInKSAvLyAxMlxuICAgKiAgICAgY29uc3QgY29kZTIgPSBub2RlMi5jb21waWxlKClcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAxMlxuICAgKiAgICAgc2NvcGUuYSA9IDVcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAyMFxuICAgKlxuICAgKiAgICAgY29uc3Qgbm9kZXMgPSBtYXRoLnBhcnNlKFsnYSA9IDMnLCAnYiA9IDQnLCAnYSAqIGInXSlcbiAgICogICAgIG5vZGVzWzJdLmNvbXBpbGUoKS5ldmFsdWF0ZSgpIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZXZhbHVhdGUsIGNvbXBpbGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IE1hdHJpeH0gZXhwciAgICAgICAgICBFeHByZXNzaW9uIHRvIGJlIHBhcnNlZFxuICAgKiBAcGFyYW0ge3tub2RlczogT2JqZWN0PHN0cmluZywgTm9kZT59fSBbb3B0aW9uc10gIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYG5vZGVzYCBhIHNldCBvZiBjdXN0b20gbm9kZXNcbiAgICogQHJldHVybiB7Tm9kZSB8IE5vZGVbXX0gbm9kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIHZhciBwYXJzZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChleHByZXNzaW9uLCB7fSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByZXNzaW9ucykge1xuICAgICAgcmV0dXJuIHBhcnNlTXVsdGlwbGUoZXhwcmVzc2lvbnMsIHt9KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ09iamVjdChleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZXh0cmFOb2RlcyA9IG9wdGlvbnMubm9kZXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubm9kZXMgOiB7fTtcbiAgICAgIHJldHVybiBwYXJzZVN0YXJ0KGV4cHJlc3Npb24sIGV4dHJhTm9kZXMpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBPYmplY3QnOiBwYXJzZU11bHRpcGxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHBhcnNlTXVsdGlwbGUoZXhwcmVzc2lvbnMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIGV4dHJhTm9kZXMgPSBvcHRpb25zLm5vZGVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5vZGVzIDoge307IC8vIHBhcnNlIGFuIGFycmF5IG9yIG1hdHJpeCB3aXRoIGV4cHJlc3Npb25zXG5cbiAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHJlc3Npb25zLCBmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgaWYgKHR5cGVvZiBlbGVtICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChlbGVtLCBleHRyYU5vZGVzKTtcbiAgICB9KTtcbiAgfSAvLyB0b2tlbiB0eXBlcyBlbnVtZXJhdGlvblxuXG5cbiAgdmFyIFRPS0VOVFlQRSA9IHtcbiAgICBOVUxMOiAwLFxuICAgIERFTElNSVRFUjogMSxcbiAgICBOVU1CRVI6IDIsXG4gICAgU1lNQk9MOiAzLFxuICAgIFVOS05PV046IDRcbiAgfTsgLy8gbWFwIHdpdGggYWxsIGRlbGltaXRlcnNcblxuICB2YXIgREVMSU1JVEVSUyA9IHtcbiAgICAnLCc6IHRydWUsXG4gICAgJygnOiB0cnVlLFxuICAgICcpJzogdHJ1ZSxcbiAgICAnWyc6IHRydWUsXG4gICAgJ10nOiB0cnVlLFxuICAgICd7JzogdHJ1ZSxcbiAgICAnfSc6IHRydWUsXG4gICAgJ1wiJzogdHJ1ZSxcbiAgICAnXFwnJzogdHJ1ZSxcbiAgICAnOyc6IHRydWUsXG4gICAgJysnOiB0cnVlLFxuICAgICctJzogdHJ1ZSxcbiAgICAnKic6IHRydWUsXG4gICAgJy4qJzogdHJ1ZSxcbiAgICAnLyc6IHRydWUsXG4gICAgJy4vJzogdHJ1ZSxcbiAgICAnJSc6IHRydWUsXG4gICAgJ14nOiB0cnVlLFxuICAgICcuXic6IHRydWUsXG4gICAgJ34nOiB0cnVlLFxuICAgICchJzogdHJ1ZSxcbiAgICAnJic6IHRydWUsXG4gICAgJ3wnOiB0cnVlLFxuICAgICdefCc6IHRydWUsXG4gICAgJz0nOiB0cnVlLFxuICAgICc6JzogdHJ1ZSxcbiAgICAnPyc6IHRydWUsXG4gICAgJz09JzogdHJ1ZSxcbiAgICAnIT0nOiB0cnVlLFxuICAgICc8JzogdHJ1ZSxcbiAgICAnPic6IHRydWUsXG4gICAgJzw9JzogdHJ1ZSxcbiAgICAnPj0nOiB0cnVlLFxuICAgICc8PCc6IHRydWUsXG4gICAgJz4+JzogdHJ1ZSxcbiAgICAnPj4+JzogdHJ1ZVxuICB9OyAvLyBtYXAgd2l0aCBhbGwgbmFtZWQgZGVsaW1pdGVyc1xuXG4gIHZhciBOQU1FRF9ERUxJTUlURVJTID0ge1xuICAgIG1vZDogdHJ1ZSxcbiAgICB0bzogdHJ1ZSxcbiAgICBcImluXCI6IHRydWUsXG4gICAgYW5kOiB0cnVlLFxuICAgIHhvcjogdHJ1ZSxcbiAgICBvcjogdHJ1ZSxcbiAgICBub3Q6IHRydWVcbiAgfTtcbiAgdmFyIENPTlNUQU5UUyA9IHtcbiAgICBcInRydWVcIjogdHJ1ZSxcbiAgICBcImZhbHNlXCI6IGZhbHNlLFxuICAgIFwibnVsbFwiOiBudWxsLFxuICAgIHVuZGVmaW5lZDogdW5kZWZpbmVkXG4gIH07XG4gIHZhciBOVU1FUklDX0NPTlNUQU5UUyA9IFsnTmFOJywgJ0luZmluaXR5J107XG5cbiAgZnVuY3Rpb24gaW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBleHRyYU5vZGVzOiB7fSxcbiAgICAgIC8vIGN1cnJlbnQgZXh0cmEgbm9kZXMsIG11c3QgYmUgY2FyZWZ1bCBub3QgdG8gbXV0YXRlXG4gICAgICBleHByZXNzaW9uOiAnJyxcbiAgICAgIC8vIGN1cnJlbnQgZXhwcmVzc2lvblxuICAgICAgY29tbWVudDogJycsXG4gICAgICAvLyBsYXN0IHBhcnNlZCBjb21tZW50XG4gICAgICBpbmRleDogMCxcbiAgICAgIC8vIGN1cnJlbnQgaW5kZXggaW4gZXhwclxuICAgICAgdG9rZW46ICcnLFxuICAgICAgLy8gY3VycmVudCB0b2tlblxuICAgICAgdG9rZW5UeXBlOiBUT0tFTlRZUEUuTlVMTCxcbiAgICAgIC8vIHR5cGUgb2YgdGhlIHRva2VuXG4gICAgICBuZXN0aW5nTGV2ZWw6IDAsXG4gICAgICAvLyBsZXZlbCBvZiBuZXN0aW5nIGluc2lkZSBwYXJhbWV0ZXJzLCB1c2VkIHRvIGlnbm9yZSBuZXdsaW5lIGNoYXJhY3RlcnNcbiAgICAgIGNvbmRpdGlvbmFsTGV2ZWw6IG51bGwgLy8gd2hlbiBhIGNvbmRpdGlvbmFsIGlzIGJlaW5nIHBhcnNlZCwgdGhlIGxldmVsIG9mIHRoZSBjb25kaXRpb25hbCBpcyBzdG9yZWQgaGVyZVxuXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogVmlldyB1cHRvIGBsZW5ndGhgIGNoYXJhY3RlcnMgb2YgdGhlIGV4cHJlc3Npb24gc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MV0gTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gdmlld1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGN1cnJlbnRTdHJpbmcoc3RhdGUsIGxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLnN1YnN0cihzdGF0ZS5pbmRleCwgbGVuZ3RoKTtcbiAgfVxuICAvKipcbiAgICogVmlldyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuIFJldHVybnMgJycgaWYgZW5kIG9mIGV4cHJlc3Npb24gaXMgcmVhY2hlZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3VycmVudENoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBjdXJyZW50U3RyaW5nKHN0YXRlLCAxKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24gaXNcbiAgICogcmVhY2hlZCwgdGhlIGZ1bmN0aW9uIHB1dHMgYW4gZW1wdHkgc3RyaW5nIGluIGMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmV4dChzdGF0ZSkge1xuICAgIHN0YXRlLmluZGV4Kys7XG4gIH1cbiAgLyoqXG4gICAqIFByZXZpZXcgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcHJldkNoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCAtIDEpO1xuICB9XG4gIC8qKlxuICAgKiBQcmV2aWV3IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmV4dENoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCArIDEpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgbmV4dCB0b2tlbiBpbiB0aGUgY3VycmVudCBzdHJpbmcgZXhwci5cbiAgICogVGhlIHRva2VuIGFuZCB0b2tlbiB0eXBlIGFyZSBhdmFpbGFibGUgYXMgdG9rZW4gYW5kIHRva2VuVHlwZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFRva2VuKHN0YXRlKSB7XG4gICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7XG4gICAgc3RhdGUudG9rZW4gPSAnJztcbiAgICBzdGF0ZS5jb21tZW50ID0gJyc7IC8vIHNraXAgb3ZlciB3aGl0ZXNwYWNlc1xuICAgIC8vIHNwYWNlLCB0YWIsIGFuZCBuZXdsaW5lIHdoZW4gaW5zaWRlIHBhcmFtZXRlcnNcblxuICAgIHdoaWxlIChwYXJzZS5pc1doaXRlc3BhY2UoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIHN0YXRlLm5lc3RpbmdMZXZlbCkpIHtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH0gLy8gc2tpcCBjb21tZW50XG5cblxuICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJyMnKSB7XG4gICAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcXG4nICYmIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJykge1xuICAgICAgICBzdGF0ZS5jb21tZW50ICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIH1cbiAgICB9IC8vIGNoZWNrIGZvciBlbmQgb2YgZXhwcmVzc2lvblxuXG5cbiAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcnKSB7XG4gICAgICAvLyB0b2tlbiBpcyBzdGlsbCBlbXB0eVxuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciBuZXcgbGluZSBjaGFyYWN0ZXJcblxuXG4gICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxuJyAmJiAhc3RhdGUubmVzdGluZ0xldmVsKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgc3RhdGUudG9rZW4gPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjMSA9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgIHZhciBjMiA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDIpO1xuICAgIHZhciBjMyA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDMpO1xuXG4gICAgaWYgKGMzLmxlbmd0aCA9PT0gMyAmJiBERUxJTUlURVJTW2MzXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzM7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDIgY2hhcmFjdGVyc1xuXG5cbiAgICBpZiAoYzIubGVuZ3RoID09PSAyICYmIERFTElNSVRFUlNbYzJdKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgc3RhdGUudG9rZW4gPSBjMjtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDEgY2hhcmFjdGVyXG5cblxuICAgIGlmIChERUxJTUlURVJTW2MxXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzE7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciBhIG51bWJlclxuXG5cbiAgICBpZiAocGFyc2UuaXNEaWdpdERvdChjMSkpIHtcbiAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5OVU1CRVI7IC8vIGdldCBudW1iZXIsIGNhbiBoYXZlIGEgc2luZ2xlIGRvdFxuXG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG5cbiAgICAgICAgaWYgKCFwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm8gbnVtYmVyLCBpdCBpcyBqdXN0IGEgZG90IChjYW4gYmUgZG90IG5vdGF0aW9uKVxuICAgICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlLmlzRGVjaW1hbE1hcmsoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9IC8vIGNoZWNrIGZvciBleHBvbmVudGlhbCBub3RhdGlvbiBsaWtlIFwiMi4zZS00XCIsIFwiMS4yM2U1MFwiIG9yIFwiMmUrNFwiXG5cblxuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnRScgfHwgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICdlJykge1xuICAgICAgICBpZiAocGFyc2UuaXNEaWdpdChuZXh0Q2hhcmFjdGVyKHN0YXRlKSkgfHwgbmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICctJyB8fCBuZXh0Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJysnKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgbmV4dChzdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcrJyB8fCBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICAgIH0gLy8gU2NpZW50aWZpYyBub3RhdGlvbiBNVVNUIGJlIGZvbGxvd2VkIGJ5IGFuIGV4cG9uZW50XG5cblxuICAgICAgICAgIGlmICghcGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCBcIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyc2UuaXNEZWNpbWFsTWFyayhjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0RpZ2l0IGV4cGVjdGVkLCBnb3QgXCInICsgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgKyAnXCInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykge1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCBcIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICdcIicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgbmFtZWQgb3BlcmF0b3JzXG5cblxuICAgIGlmIChwYXJzZS5pc0FscGhhKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpLCBwcmV2Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICB3aGlsZSAocGFyc2UuaXNBbHBoYShjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgcHJldkNoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSB8fCBwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoTkFNRURfREVMSU1JVEVSUywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuU1lNQk9MO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBzb21ldGhpbmcgdW5rbm93biBpcyBmb3VuZCwgd3JvbmcgY2hhcmFjdGVycyAtPiBhIHN5bnRheCBlcnJvclxuXG5cbiAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuVU5LTk9XTjtcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycpIHtcbiAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdTeW50YXggZXJyb3IgaW4gcGFydCBcIicgKyBzdGF0ZS50b2tlbiArICdcIicpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgbmV4dCB0b2tlbiBhbmQgc2tpcCBuZXdsaW5lIHRva2Vuc1xuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpIHtcbiAgICBkbyB7XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcXG4nKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG5cbiAgfVxuICAvKipcbiAgICogT3BlbiBwYXJhbWV0ZXJzLlxuICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCBjbG9zZVBhcmFtcyhzdGF0ZSkgaXMgY2FsbGVkXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gb3BlblBhcmFtcyhzdGF0ZSkge1xuICAgIHN0YXRlLm5lc3RpbmdMZXZlbCsrO1xuICB9XG4gIC8qKlxuICAgKiBDbG9zZSBwYXJhbWV0ZXJzLlxuICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgbm8gbG9uZ2VyIGJlIGlnbm9yZWRcbiAgICovXG5cblxuICBmdW5jdGlvbiBjbG9zZVBhcmFtcyhzdGF0ZSkge1xuICAgIHN0YXRlLm5lc3RpbmdMZXZlbC0tO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYGNgIGlzIGEgdmFsaWQgYWxwaGEgY2hhcmFjdGVyOlxuICAgKlxuICAgKiAtIEEgbGF0aW4gbGV0dGVyICh1cHBlciBvciBsb3dlciBjYXNlKSBBc2NpaTogYS16LCBBLVpcbiAgICogLSBBbiB1bmRlcnNjb3JlICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6IF9cbiAgICogLSBBIGRvbGxhciBzaWduICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6ICRcbiAgICogLSBBIGxhdGluIGxldHRlciB3aXRoIGFjY2VudHMgICAgICAgICAgVW5pY29kZTogXFx1MDBDMCAtIFxcdTAyQUZcbiAgICogLSBBIGdyZWVrIGxldHRlciAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZTogXFx1MDM3MCAtIFxcdTAzRkZcbiAgICogLSBBIG1hdGhlbWF0aWNhbCBhbHBoYW51bWVyaWMgc3ltYm9sICAgVW5pY29kZTogXFx1ezFENDAwfSAtIFxcdXsxRDdGRn0gZXhjbHVkaW5nIGludmFsaWQgY29kZSBwb2ludHNcbiAgICpcbiAgICogVGhlIHByZXZpb3VzIGFuZCBuZXh0IGNoYXJhY3RlcnMgYXJlIG5lZWRlZCB0byBkZXRlcm1pbmUgd2hldGhlclxuICAgKiB0aGlzIGNoYXJhY3RlciBpcyBwYXJ0IG9mIGEgdW5pY29kZSBzdXJyb2dhdGUgcGFpci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGMgICAgICBDdXJyZW50IGNoYXJhY3RlciBpbiB0aGUgZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY1ByZXYgIFByZXZpb3VzIGNoYXJhY3RlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY05leHQgIE5leHQgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNBbHBoYSA9IGZ1bmN0aW9uIGlzQWxwaGEoYywgY1ByZXYsIGNOZXh0KSB7XG4gICAgcmV0dXJuIHBhcnNlLmlzVmFsaWRMYXRpbk9yR3JlZWsoYykgfHwgcGFyc2UuaXNWYWxpZE1hdGhTeW1ib2woYywgY05leHQpIHx8IHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sKGNQcmV2LCBjKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGNoYXJhY3RlciBpcyBhIHZhbGlkIGxhdGluLCBncmVlaywgb3IgbGV0dGVyLWxpa2UgY2hhcmFjdGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNWYWxpZExhdGluT3JHcmVlayA9IGZ1bmN0aW9uIGlzVmFsaWRMYXRpbk9yR3JlZWsoYykge1xuICAgIHJldHVybiAvXlthLXpBLVpfJFxcdTAwQzAtXFx1MDJBRlxcdTAzNzAtXFx1MDNGRlxcdTIxMDAtXFx1MjE0Rl0kLy50ZXN0KGMpO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byBnaXZlbiAxNiBiaXQgY2hhcmFjdGVycyBmb3JtIGEgc3Vycm9nYXRlIHBhaXIgb2YgYVxuICAgKiB1bmljb2RlIG1hdGggc3ltYm9sLlxuICAgKlxuICAgKiBodHRwczovL3VuaWNvZGUtdGFibGUuY29tL2VuL1xuICAgKiBodHRwczovL3d3dy53aWtpd2FuZC5jb20vZW4vTWF0aGVtYXRpY2FsX29wZXJhdG9yc19hbmRfc3ltYm9sc19pbl9Vbmljb2RlXG4gICAqXG4gICAqIE5vdGU6IEluIEVTNiB3aWxsIGJlIHVuaWNvZGUgYXdhcmU6XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI4MDcxMi9qYXZhc2NyaXB0LXVuaWNvZGUtcmVnZXhlc1xuICAgKiBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvZXM2LXVuaWNvZGUtcmVnZXhcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhpZ2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvd1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sID0gZnVuY3Rpb24gaXNWYWxpZE1hdGhTeW1ib2woaGlnaCwgbG93KSB7XG4gICAgcmV0dXJuIC9eW1xcdUQ4MzVdJC8udGVzdChoaWdoKSAmJiAvXltcXHVEQzAwLVxcdURGRkZdJC8udGVzdChsb3cpICYmIC9eW15cXHVEQzU1XFx1REM5RFxcdURDQTBcXHVEQ0ExXFx1RENBM1xcdURDQTRcXHVEQ0E3XFx1RENBOFxcdURDQURcXHVEQ0JBXFx1RENCQ1xcdURDQzRcXHVERDA2XFx1REQwQlxcdUREMENcXHVERDE1XFx1REQxRFxcdUREM0FcXHVERDNGXFx1REQ0NVxcdURENDctXFx1REQ0OVxcdURENTFcXHVERUE2XFx1REVBN1xcdURGQ0NcXHVERkNEXSQvLnRlc3QobG93KTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgZ2l2ZW4gY2hhcmFjdGVyIGMgaXMgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXI6IHNwYWNlLCB0YWIsIG9yIGVudGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXN0aW5nTGV2ZWxcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBwYXJzZS5pc1doaXRlc3BhY2UgPSBmdW5jdGlvbiBpc1doaXRlc3BhY2UoYywgbmVzdGluZ0xldmVsKSB7XG4gICAgLy8gVE9ETzogYWxzbyB0YWtlICdcXHInIGNhcnJpYWdlIHJldHVybiBhcyBuZXdsaW5lPyBPciBkb2VzIHRoYXQgZ2l2ZSBwcm9ibGVtcyBvbiBtYWM/XG4gICAgcmV0dXJuIGMgPT09ICcgJyB8fCBjID09PSAnXFx0JyB8fCBjID09PSAnXFxuJyAmJiBuZXN0aW5nTGV2ZWwgPiAwO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgYyBpcyBhIGRlY2ltYWwgbWFyayAoZG90KS5cbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGl0J3Mgbm90IHRoZSBzdGFydCBvZiBhIGRlbGltaXRlciAnLionLCAnLi8nLCBvciAnLl4nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjTmV4dFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzRGVjaW1hbE1hcmsgPSBmdW5jdGlvbiBpc0RlY2ltYWxNYXJrKGMsIGNOZXh0KSB7XG4gICAgcmV0dXJuIGMgPT09ICcuJyAmJiBjTmV4dCAhPT0gJy8nICYmIGNOZXh0ICE9PSAnKicgJiYgY05leHQgIT09ICdeJztcbiAgfTtcbiAgLyoqXG4gICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gY2hhciBjIGlzIGEgZGlnaXQgb3IgZG90XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNEaWdpdERvdCA9IGZ1bmN0aW9uIGlzRGlnaXREb3QoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCBjID09PSAnLic7XG4gIH07XG4gIC8qKlxuICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIGNoYXIgYyBpcyBhIGRpZ2l0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNEaWdpdCA9IGZ1bmN0aW9uIGlzRGlnaXQoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JztcbiAgfTtcbiAgLyoqXG4gICAqIFN0YXJ0IG9mIHRoZSBwYXJzZSBsZXZlbHMgYmVsb3csIGluIG9yZGVyIG9mIHByZWNlZGVuY2VcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlU3RhcnQoZXhwcmVzc2lvbiwgZXh0cmFOb2Rlcykge1xuICAgIHZhciBzdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuXG4gICAgX2V4dGVuZHMoc3RhdGUsIHtcbiAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sXG4gICAgICBleHRyYU5vZGVzOiBleHRyYU5vZGVzXG4gICAgfSk7XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJsb2NrKHN0YXRlKTsgLy8gY2hlY2sgZm9yIGdhcmJhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgZXhwcmVzc2lvblxuICAgIC8vIGFuIGV4cHJlc3Npb24gZW5kcyB3aXRoIGEgZW1wdHkgY2hhcmFjdGVyICcnIGFuZCB0b2tlblR5cGUgREVMSU1JVEVSXG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcnKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSKSB7XG4gICAgICAgIC8vIHVzZXIgZW50ZXJlZCBhIG5vdCBleGlzdGluZyBvcGVyYXRvciBsaWtlIFwiLy9cIlxuICAgICAgICAvLyBUT0RPOiBnaXZlIGhpbnRzIGZvciBhbGlhc2VzLCBmb3IgZXhhbXBsZSB3aXRoIFwiPD5cIiBnaXZlIGFzIGhpbnQgXCIgZGlkIHlvdSBtZWFuICE9PSA/XCJcbiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3Ioc3RhdGUsICdVbmV4cGVjdGVkIG9wZXJhdG9yICcgKyBzdGF0ZS50b2tlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1VuZXhwZWN0ZWQgcGFydCBcIicgKyBzdGF0ZS50b2tlbiArICdcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGJsb2NrIHdpdGggZXhwcmVzc2lvbnMuIEV4cHJlc3Npb25zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lXG4gICAqIGNoYXJhY3RlciAnXFxuJywgb3IgYnkgYSBzZW1pY29sb24gJzsnLiBJbiBjYXNlIG9mIGEgc2VtaWNvbG9uLCBubyBvdXRwdXRcbiAgICogb2YgdGhlIHByZWNlZGluZyBsaW5lIGlzIHJldHVybmVkLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCbG9jayhzdGF0ZSkge1xuICAgIHZhciBub2RlO1xuICAgIHZhciBibG9ja3MgPSBbXTtcbiAgICB2YXIgdmlzaWJsZTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJycgJiYgc3RhdGUudG9rZW4gIT09ICdcXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycpIHtcbiAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgbm9kZS5jb21tZW50ID0gc3RhdGUuY29tbWVudDtcbiAgICB9IC8vIFRPRE86IHNpbXBsaWZ5IHRoaXMgbG9vcFxuXG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcXG4nIHx8IHN0YXRlLnRva2VuID09PSAnOycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPT09IDAgJiYgbm9kZSkge1xuICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JztcbiAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycgJiYgc3RhdGUudG9rZW4gIT09ICcnKSB7XG4gICAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgICBub2RlLmNvbW1lbnQgPSBzdGF0ZS5jb21tZW50O1xuICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JztcbiAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmxvY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGJsb2Nrcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZSh1bmRlZmluZWQpO1xuICAgICAgICBub2RlLmNvbW1lbnQgPSBzdGF0ZS5jb21tZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFzc2lnbm1lbnQgb2YgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSxcbiAgICogLSBjYW4gYmUgYSB2YXJpYWJsZSBsaWtlICdhPTIuMydcbiAgICogLSBvciBhIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHZhcmlhYmxlIGxpa2UgJ21hdHJpeCgyLDM6NSk9WzYsNyw4XSdcbiAgICogLSBkZWZpbmluZyBhIGZ1bmN0aW9uIGxpa2UgJ2YoeCkgPSB4XjInXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpIHtcbiAgICB2YXIgbmFtZSwgYXJncywgdmFsdWUsIHZhbGlkO1xuICAgIHZhciBub2RlID0gcGFyc2VDb25kaXRpb25hbChzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc9Jykge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSkge1xuICAgICAgICAvLyBwYXJzZSBhIHZhcmlhYmxlIGFzc2lnbm1lbnQgbGlrZSAnYSA9IDIvMydcbiAgICAgICAgbmFtZSA9IG5vZGUubmFtZTtcbiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50Tm9kZShuZXcgU3ltYm9sTm9kZShuYW1lKSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShub2RlKSkge1xuICAgICAgICAvLyBwYXJzZSBhIG1hdHJpeCBzdWJzZXQgYXNzaWdubWVudCBsaWtlICdBWzEsMl0gPSA0J1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG5vZGUub2JqZWN0LCBub2RlLmluZGV4LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpICYmICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlLmZuKSkge1xuICAgICAgICAvLyBwYXJzZSBmdW5jdGlvbiBhc3NpZ25tZW50IGxpa2UgJ2YoeCkgPSB4XjInXG4gICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgICBub2RlLmFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnKSkge1xuICAgICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmcubmFtZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUobmFtZSwgYXJncywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnSW52YWxpZCBsZWZ0IGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IG9wZXJhdG9yID0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogY29uZGl0aW9uYWwgb3BlcmF0aW9uXG4gICAqXG4gICAqICAgICBjb25kaXRpb24gPyB0cnVlUGFydCA6IGZhbHNlUGFydFxuICAgKlxuICAgKiBOb3RlOiBjb25kaXRpb25hbCBvcGVyYXRvciBpcyByaWdodC1hc3NvY2lhdGl2ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbChzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VMb2dpY2FsT3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnPycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgLy8gc2V0IGEgY29uZGl0aW9uYWwgbGV2ZWwsIHRoZSByYW5nZSBvcGVyYXRvciB3aWxsIGJlIGlnbm9yZWQgYXMgbG9uZ1xuICAgICAgLy8gYXMgY29uZGl0aW9uYWxMZXZlbCA9PT0gc3RhdGUubmVzdGluZ0xldmVsLlxuICAgICAgdmFyIHByZXYgPSBzdGF0ZS5jb25kaXRpb25hbExldmVsO1xuICAgICAgc3RhdGUuY29uZGl0aW9uYWxMZXZlbCA9IHN0YXRlLm5lc3RpbmdMZXZlbDtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgdmFyIGNvbmRpdGlvbiA9IG5vZGU7XG4gICAgICB2YXIgdHJ1ZUV4cHIgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnOicpIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRmFsc2UgcGFydCBvZiBjb25kaXRpb25hbCBleHByZXNzaW9uIGV4cGVjdGVkJyk7XG4gICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gbnVsbDtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgdmFyIGZhbHNlRXhwciA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7IC8vIE5vdGU6IGNoZWNrIGZvciBjb25kaXRpb25hbCBvcGVyYXRvciBhZ2FpbiwgcmlnaHQgYXNzb2NpYXRpdml0eVxuXG4gICAgICBub2RlID0gbmV3IENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpOyAvLyByZXN0b3JlIHRoZSBwcmV2aW91cyBjb25kaXRpb25hbCBsZXZlbFxuXG4gICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gcHJldjtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBvciwgJ3ggb3IgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9naWNhbE9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUxvZ2ljYWxYb3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnb3InKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ29yJywgJ29yJywgW25vZGUsIHBhcnNlTG9naWNhbFhvcihzdGF0ZSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBleGNsdXNpdmUgb3IsICd4IHhvciB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsWG9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUxvZ2ljYWxBbmQoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAneG9yJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCd4b3InLCAneG9yJywgW25vZGUsIHBhcnNlTG9naWNhbEFuZChzdGF0ZSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBhbmQsICd4IGFuZCB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsQW5kKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VPcihzdGF0ZSk7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdhbmQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ2FuZCcsICdhbmQnLCBbbm9kZSwgcGFyc2VCaXR3aXNlT3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2Ugb3IsICd4IHwgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQml0d2lzZU9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnfCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnfCcsICdiaXRPcicsIFtub2RlLCBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2UgZXhjbHVzaXZlIG9yICh4b3IpLCAneCBefCB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCaXR3aXNlWG9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnXnwnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ158JywgJ2JpdFhvcicsIFtub2RlLCBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2UgYW5kLCAneCAmIHknXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSA9IHBhcnNlUmVsYXRpb25hbChzdGF0ZSk7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcmJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcmJywgJ2JpdEFuZCcsIFtub2RlLCBwYXJzZVJlbGF0aW9uYWwoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgY2hhaW5lZCBjb25kaXRpb25hbCwgbGlrZSAnYSA+IGIgPj0gYydcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUmVsYXRpb25hbChzdGF0ZSkge1xuICAgIHZhciBwYXJhbXMgPSBbcGFyc2VTaGlmdChzdGF0ZSldO1xuICAgIHZhciBjb25kaXRpb25hbHMgPSBbXTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJz09JzogJ2VxdWFsJyxcbiAgICAgICchPSc6ICd1bmVxdWFsJyxcbiAgICAgICc8JzogJ3NtYWxsZXInLFxuICAgICAgJz4nOiAnbGFyZ2VyJyxcbiAgICAgICc8PSc6ICdzbWFsbGVyRXEnLFxuICAgICAgJz49JzogJ2xhcmdlckVxJ1xuICAgIH07XG5cbiAgICB3aGlsZSAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIHZhciBjb25kID0ge1xuICAgICAgICBuYW1lOiBzdGF0ZS50b2tlbixcbiAgICAgICAgZm46IG9wZXJhdG9yc1tzdGF0ZS50b2tlbl1cbiAgICAgIH07XG4gICAgICBjb25kaXRpb25hbHMucHVzaChjb25kKTtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zLnB1c2gocGFyc2VTaGlmdChzdGF0ZSkpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gcGFyYW1zWzBdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoY29uZGl0aW9uYWxzWzBdLm5hbWUsIGNvbmRpdGlvbmFsc1swXS5mbiwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZShjb25kaXRpb25hbHMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjLmZuO1xuICAgICAgfSksIHBhcmFtcyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBCaXR3aXNlIGxlZnQgc2hpZnQsIGJpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCwgYml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0XG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVNoaWZ0KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlQ29udmVyc2lvbihzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICc8PCc6ICdsZWZ0U2hpZnQnLFxuICAgICAgJz4+JzogJ3JpZ2h0QXJpdGhTaGlmdCcsXG4gICAgICAnPj4+JzogJ3JpZ2h0TG9nU2hpZnQnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbbm9kZSwgcGFyc2VDb252ZXJzaW9uKHN0YXRlKV07XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogY29udmVyc2lvbiBvcGVyYXRvcnMgJ3RvJyBhbmQgJ2luJ1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VDb252ZXJzaW9uKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlUmFuZ2Uoc3RhdGUpO1xuICAgIHZhciBvcGVyYXRvcnMgPSB7XG4gICAgICB0bzogJ3RvJyxcbiAgICAgIFwiaW5cIjogJ3RvJyAvLyBhbGlhcyBvZiAndG8nXG5cbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcblxuICAgICAgaWYgKG5hbWUgPT09ICdpbicgJiYgc3RhdGUudG9rZW4gPT09ICcnKSB7XG4gICAgICAgIC8vIGVuZCBvZiBleHByZXNzaW9uIC0+IHRoaXMgaXMgdGhlIHVuaXQgJ2luJyAoJ2luY2gnKVxuICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgU3ltYm9sTm9kZSgnaW4nKV0sIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3BlcmF0b3IgJ2EgdG8gYicgb3IgJ2EgaW4gYidcbiAgICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlUmFuZ2Uoc3RhdGUpXTtcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIHJhbmdlLCBcInN0YXJ0OmVuZFwiLCBcInN0YXJ0OnN0ZXA6ZW5kXCIsIFwiOlwiLCBcInN0YXJ0OlwiLCBcIjplbmRcIiwgZXRjXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJhbmdlKHN0YXRlKSB7XG4gICAgdmFyIG5vZGU7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnOicpIHtcbiAgICAgIC8vIGltcGxpY2l0IHN0YXJ0PTEgKG9uZS1iYXNlZClcbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleHBsaWNpdCBzdGFydFxuICAgICAgbm9kZSA9IHBhcnNlQWRkU3VidHJhY3Qoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHN0YXRlLmNvbmRpdGlvbmFsTGV2ZWwgIT09IHN0YXRlLm5lc3RpbmdMZXZlbCkge1xuICAgICAgLy8gd2UgaWdub3JlIHRoZSByYW5nZSBvcGVyYXRvciB3aGVuIGEgY29uZGl0aW9uYWwgb3BlcmF0b3IgaXMgYmVpbmcgcHJvY2Vzc2VkIG9uIHRoZSBzYW1lIGxldmVsXG4gICAgICBwYXJhbXMucHVzaChub2RlKTsgLy8gcGFyc2Ugc3RlcCBhbmQgZW5kXG5cbiAgICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHBhcmFtcy5sZW5ndGggPCAzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcpJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ10nIHx8IHN0YXRlLnRva2VuID09PSAnLCcgfHwgc3RhdGUudG9rZW4gPT09ICcnKSB7XG4gICAgICAgICAgLy8gaW1wbGljaXQgZW5kXG4gICAgICAgICAgcGFyYW1zLnB1c2gobmV3IFN5bWJvbE5vZGUoJ2VuZCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBleHBsaWNpdCBlbmRcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFkZFN1YnRyYWN0KHN0YXRlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBzdGVwLCBlbmRdXG4gICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzJdLCBwYXJhbXNbMV0pOyAvLyBzdGFydCwgZW5kLCBzdGVwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBsZW5ndGggPT09IDJcbiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBlbmRdXG4gICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzFdKTsgLy8gc3RhcnQsIGVuZFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBhZGQgb3Igc3VidHJhY3RcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQWRkU3VidHJhY3Qoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtcztcbiAgICBub2RlID0gcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICcrJzogJ2FkZCcsXG4gICAgICAnLSc6ICdzdWJ0cmFjdCdcbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIHBhcmFtcyA9IFtub2RlLCBwYXJzZU11bHRpcGx5RGl2aWRlKHN0YXRlKV07XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbXVsdGlwbHksIGRpdmlkZSwgbW9kdWx1c1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSkge1xuICAgIHZhciBub2RlLCBsYXN0LCBuYW1lLCBmbjtcbiAgICBub2RlID0gcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uKHN0YXRlKTtcbiAgICBsYXN0ID0gbm9kZTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJyonOiAnbXVsdGlwbHknLFxuICAgICAgJy4qJzogJ2RvdE11bHRpcGx5JyxcbiAgICAgICcvJzogJ2RpdmlkZScsXG4gICAgICAnLi8nOiAnZG90RGl2aWRlJyxcbiAgICAgICclJzogJ21vZCcsXG4gICAgICBtb2Q6ICdtb2QnXG4gICAgfTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yc1xuICAgICAgICBuYW1lID0gc3RhdGUudG9rZW47XG4gICAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgbGFzdCA9IHBhcnNlSW1wbGljaXRNdWx0aXBsaWNhdGlvbihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBbbm9kZSwgbGFzdF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUltcGxpY2l0TXVsdGlwbGljYXRpb24oc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbGFzdDtcbiAgICBub2RlID0gcGFyc2VSdWxlMihzdGF0ZSk7XG4gICAgbGFzdCA9IG5vZGU7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLlNZTUJPTCB8fCBzdGF0ZS50b2tlbiA9PT0gJ2luJyAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShub2RlKSB8fCBzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5OVU1CRVIgJiYgISgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGxhc3QpICYmICghKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobGFzdCkgfHwgbGFzdC5vcCA9PT0gJyEnKSB8fCBzdGF0ZS50b2tlbiA9PT0gJygnKSB7XG4gICAgICAgIC8vIHBhcnNlIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIHN5bWJvbDogICAgICBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICcyYScsICcoMiszKWEnLCAnYSBiJ1xuICAgICAgICAvLyBudW1iZXI6ICAgICAgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnKDIrMykyJ1xuICAgICAgICAvLyBwYXJlbnRoZXNpczogaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnMigzKzQpJywgJygzKzQpKDErMiknXG4gICAgICAgIGxhc3QgPSBwYXJzZVJ1bGUyKHN0YXRlKTtcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbGFzdF0sIHRydWVcbiAgICAgICAgLyogaW1wbGljaXQgKi9cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBJbmZhbW91cyBcInJ1bGUgMlwiIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9pc3N1ZXMvNzkyI2lzc3VlY29tbWVudC0zNjEwNjUzNzBcbiAgICogRXhwbGljaXQgZGl2aXNpb24gZ2V0cyBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAqIHdoZW4gdGhlIGRpdmlzaW9uIG1hdGNoZXMgdGhpcyBwYXR0ZXJuOiBbbnVtYmVyXSAvIFtudW1iZXJdIFtzeW1ib2xdXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJ1bGUyKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZVVuYXJ5KHN0YXRlKTtcbiAgICB2YXIgbGFzdCA9IG5vZGU7XG4gICAgdmFyIHRva2VuU3RhdGVzID0gW107XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gTWF0Y2ggdGhlIFwibnVtYmVyIC9cIiBwYXJ0IG9mIHRoZSBwYXR0ZXJuIFwibnVtYmVyIC8gbnVtYmVyIHN5bWJvbFwiXG4gICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcvJyAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShsYXN0KSkge1xuICAgICAgICAvLyBMb29rIGFoZWFkIHRvIHNlZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhIG51bWJlclxuICAgICAgICB0b2tlblN0YXRlcy5wdXNoKF9leHRlbmRzKHt9LCBzdGF0ZSkpO1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlIFwibnVtYmVyIC8gbnVtYmVyXCIgcGFydCBvZiB0aGUgcGF0dGVyblxuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5OVU1CRVIpIHtcbiAgICAgICAgICAvLyBMb29rIGFoZWFkIGFnYWluXG4gICAgICAgICAgdG9rZW5TdGF0ZXMucHVzaChfZXh0ZW5kcyh7fSwgc3RhdGUpKTtcbiAgICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlIFwic3ltYm9sXCIgcGFydCBvZiB0aGUgcGF0dGVybiwgb3IgYSBsZWZ0IHBhcmVudGhlc2lzXG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MIHx8IHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIG1hdGNoZWQgdGhlIHBhdHRlcm4gXCJudW1iZXIgLyBudW1iZXIgc3ltYm9sXCIuXG4gICAgICAgICAgICAvLyBSZXdpbmQgb25jZSBhbmQgYnVpbGQgdGhlIFwibnVtYmVyIC8gbnVtYmVyXCIgbm9kZTsgdGhlIHN5bWJvbCB3aWxsIGJlIGNvbnN1bWVkIGxhdGVyXG4gICAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgICB0b2tlblN0YXRlcy5wb3AoKTtcbiAgICAgICAgICAgIGxhc3QgPSBwYXJzZVVuYXJ5KHN0YXRlKTtcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtub2RlLCBsYXN0XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIG1hdGNoLCBzbyByZXdpbmRcbiAgICAgICAgICAgIHRva2VuU3RhdGVzLnBvcCgpO1xuXG4gICAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm90IGEgbWF0Y2gsIHNvIHJld2luZFxuICAgICAgICAgIF9leHRlbmRzKHN0YXRlLCB0b2tlblN0YXRlcy5wb3AoKSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFVuYXJ5IHBsdXMgYW5kIG1pbnVzLCBhbmQgbG9naWNhbCBhbmQgYml0d2lzZSBub3RcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlVW5hcnkoc3RhdGUpIHtcbiAgICB2YXIgbmFtZSwgcGFyYW1zLCBmbjtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJy0nOiAndW5hcnlNaW51cycsXG4gICAgICAnKyc6ICd1bmFyeVBsdXMnLFxuICAgICAgJ34nOiAnYml0Tm90JyxcbiAgICAgIG5vdDogJ25vdCdcbiAgICB9O1xuXG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgZm4gPSBvcGVyYXRvcnNbc3RhdGUudG9rZW5dO1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbcGFyc2VVbmFyeShzdGF0ZSldO1xuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUG93KHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogcG93ZXJcbiAgICogTm90ZTogcG93ZXIgb3BlcmF0b3IgaXMgcmlnaHQgYXNzb2NpYXRpdmVcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUG93KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlTGVmdEhhbmRPcGVyYXRvcnMoc3RhdGUpO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXicgfHwgc3RhdGUudG9rZW4gPT09ICcuXicpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gbmFtZSA9PT0gJ14nID8gJ3BvdycgOiAnZG90UG93JztcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlVW5hcnkoc3RhdGUpXTsgLy8gR28gYmFjayB0byB1bmFyeSwgd2UgY2FuIGhhdmUgJzJeLTMnXG5cbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBMZWZ0IGhhbmQgb3BlcmF0b3JzOiBmYWN0b3JpYWwgeCEsIGN0cmFuc3Bvc2UgeCdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRPcGVyYXRvcnMoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtcztcbiAgICBub2RlID0gcGFyc2VDdXN0b21Ob2RlcyhzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICchJzogJ2ZhY3RvcmlhbCcsXG4gICAgICAnXFwnJzogJ2N0cmFuc3Bvc2UnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGVdO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGN1c3RvbSBub2RlIGhhbmRsZXIuIEEgbm9kZSBoYW5kbGVyIGNhbiBiZSB1c2VkIHRvIHByb2Nlc3NcbiAgICogbm9kZXMgaW4gYSBjdXN0b20gd2F5LCBmb3IgZXhhbXBsZSBmb3IgaGFuZGxpbmcgYSBwbG90LlxuICAgKlxuICAgKiBBIGhhbmRsZXIgbXVzdCBiZSBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBwYXJzZSBmdW5jdGlvbi5cbiAgICogLSBtdXN0IGV4dGVuZCBtYXRoLmV4cHJlc3Npb24ubm9kZS5Ob2RlXG4gICAqIC0gbXVzdCBjb250YWluIGEgZnVuY3Rpb24gX2NvbXBpbGUoZGVmczogT2JqZWN0KSA6IHN0cmluZ1xuICAgKiAtIG11c3QgY29udGFpbiBhIGZ1bmN0aW9uIGZpbmQoZmlsdGVyOiBPYmplY3QpIDogTm9kZVtdXG4gICAqIC0gbXVzdCBjb250YWluIGEgZnVuY3Rpb24gdG9TdHJpbmcoKSA6IHN0cmluZ1xuICAgKiAtIHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCBjb250YWluaW5nIGFsbCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgICAgbm9kZXMgPSB7XG4gICAqICAgICAgICdwbG90JzogUGxvdEhhbmRsZXJcbiAgICogICAgIH1cbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBoYW5kbGVyIGlzIGNhbGxlZCBhczpcbiAgICpcbiAgICogICAgIG5vZGUgPSBuZXcgUGxvdEhhbmRsZXIocGFyYW1zKVxuICAgKlxuICAgKiBUaGUgaGFuZGxlciB3aWxsIGJlIGludm9rZWQgd2hlbiBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gbGlrZTpcbiAgICpcbiAgICogICAgIG5vZGUgPSBtYXRoLnBhcnNlKCdwbG90KHNpbih4KSwgeCknLCBub2RlcylcbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQ3VzdG9tTm9kZXMoc3RhdGUpIHtcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzdGF0ZS5leHRyYU5vZGVzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIHZhciBDdXN0b21Ob2RlID0gc3RhdGUuZXh0cmFOb2Rlc1tzdGF0ZS50b2tlbl07XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIHBhcmFtZXRlcnNcblxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgcGFyYW1zID0gW107XG4gICAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTsgLy8gcGFyc2UgYSBsaXN0IHdpdGggcGFyYW1ldGVyc1xuXG4gICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgfSAvLyBjcmVhdGUgYSBuZXcgY3VzdG9tIG5vZGVcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU1ZhbGlkYXRlVHlwZXNcblxuXG4gICAgICByZXR1cm4gbmV3IEN1c3RvbU5vZGUocGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VTeW1ib2woc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBzeW1ib2xzOiBmdW5jdGlvbnMsIHZhcmlhYmxlcywgY29uc3RhbnRzLCB1bml0c1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTeW1ib2woc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZTtcblxuICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShDT05TVEFOVFMsIG5hbWUpKSB7XG4gICAgICAgIC8vIHRydWUsIGZhbHNlLCBudWxsLCAuLi5cbiAgICAgICAgbm9kZSA9IG5ldyBDb25zdGFudE5vZGUoQ09OU1RBTlRTW25hbWVdKTtcbiAgICAgIH0gZWxzZSBpZiAoTlVNRVJJQ19DT05TVEFOVFMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gTmFOLCBJbmZpbml0eVxuICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKG5hbWUsICdudW1iZXInKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbmV3IFN5bWJvbE5vZGUobmFtZSk7XG4gICAgICB9IC8vIHBhcnNlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIG1hdHJpeCBpbmRleFxuXG5cbiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhY2Nlc3NvcnM6XG4gICAqIC0gZnVuY3Rpb24gaW52b2NhdGlvbiBpbiByb3VuZCBicmFja2V0cyAoLi4uKSwgZm9yIGV4YW1wbGUgc3FydCgyKVxuICAgKiAtIGluZGV4IGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cyBbLi4uXSwgZm9yIGV4YW1wbGUgQVsyLDNdXG4gICAqIC0gZG90IG5vdGF0aW9uIGZvciBwcm9wZXJ0aWVzLCBsaWtlIGZvby5iYXJcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAgICBOb2RlIG9uIHdoaWNoIHRvIGFwcGx5IHRoZSBwYXJhbWV0ZXJzLiBJZiB0aGVyZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5vIHBhcmFtZXRlcnMgaW4gdGhlIGV4cHJlc3Npb24sIHRoZSBub2RlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBpdHNlbGYgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW3R5cGVzXSAgRmlsdGVyIHRoZSB0eXBlcyBvZiBub3RhdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIFsnKCcsICdbJywgJy4nXVxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUsIHR5cGVzKSB7XG4gICAgdmFyIHBhcmFtcztcblxuICAgIHdoaWxlICgoc3RhdGUudG9rZW4gPT09ICcoJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ1snIHx8IHN0YXRlLnRva2VuID09PSAnLicpICYmICghdHlwZXMgfHwgdHlwZXMuaW5kZXhPZihzdGF0ZS50b2tlbikgIT09IC0xKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBwYXJhbXMgPSBbXTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSB8fCAoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShub2RlKSkge1xuICAgICAgICAgIC8vIGZ1bmN0aW9uIGludm9jYXRpb24gbGlrZSBmbigyLCAzKSBvciBvYmouZm4oMiwgMylcbiAgICAgICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7IC8vIHBhcnNlIGEgbGlzdCB3aXRoIHBhcmFtZXRlcnNcblxuICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUGFyZW50aGVzaXMgKSBleHBlY3RlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgbm9kZSA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZSwgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICgyKzMpKDQrNSkgb3Igc3FydCgyKSgxKzIpXG4gICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaXQgaGVyZSBidXQgbGV0IGl0IGJlIGhhbmRsZWQgYnkgcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uXG4gICAgICAgICAgLy8gd2l0aCBjb3JyZWN0IHByZWNlZGVuY2VcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbiA9PT0gJ1snKSB7XG4gICAgICAgIC8vIGluZGV4IG5vdGF0aW9uIGxpa2UgdmFyaWFibGVbMiwgM11cbiAgICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7XG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcnNlQXNzaWdubWVudChzdGF0ZSkpOyAvLyBwYXJzZSBhIGxpc3Qgd2l0aCBwYXJhbWV0ZXJzXG5cbiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUGFyZW50aGVzaXMgXSBleHBlY3RlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgQWNjZXNzb3JOb2RlKG5vZGUsIG5ldyBJbmRleE5vZGUocGFyYW1zKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkb3Qgbm90YXRpb24gbGlrZSB2YXJpYWJsZS5wcm9wXG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlICE9PSBUT0tFTlRZUEUuU1lNQk9MKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdQcm9wZXJ0eSBuYW1lIGV4cGVjdGVkIGFmdGVyIGRvdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zLnB1c2gobmV3IENvbnN0YW50Tm9kZShzdGF0ZS50b2tlbikpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgIHZhciBkb3ROb3RhdGlvbiA9IHRydWU7XG4gICAgICAgIG5vZGUgPSBuZXcgQWNjZXNzb3JOb2RlKG5vZGUsIG5ldyBJbmRleE5vZGUocGFyYW1zLCBkb3ROb3RhdGlvbikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGRvdWJsZSBxdW90ZXMgc3RyaW5nLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgc3RyO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCInKSB7XG4gICAgICBzdHIgPSBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsgLy8gY3JlYXRlIGNvbnN0YW50XG5cbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlcyBcIi4uLlwiXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJyAmJiBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJ1wiJykge1xuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxcXCcpIHtcbiAgICAgICAgLy8gZXNjYXBlIGNoYXJhY3RlciwgaW1tZWRpYXRlbHkgcHJvY2VzcyB0aGUgbmV4dFxuICAgICAgICAvLyBjaGFyYWN0ZXIgdG8gcHJldmVudCBzdG9wcGluZyBhdCBhIG5leHQgJ1xcXCInXG4gICAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH1cblxuICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ1wiJykge1xuICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2Ygc3RyaW5nIFwiIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKCdcIicgKyBzdHIgKyAnXCInKTsgLy8gdW5lc2NhcGUgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc2luZ2xlIHF1b3RlcyBzdHJpbmcuXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSkge1xuICAgIHZhciBub2RlLCBzdHI7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdcXCcnKSB7XG4gICAgICBzdHIgPSBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsgLy8gY3JlYXRlIGNvbnN0YW50XG5cbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU1hdHJpeChzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgc2luZ2xlIHF1b3RlcyAnLi4uJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSkge1xuICAgIHZhciBzdHIgPSAnJztcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycgJiYgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcXCcnKSB7XG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICdcXFxcJykge1xuICAgICAgICAvLyBlc2NhcGUgY2hhcmFjdGVyLCBpbW1lZGlhdGVseSBwcm9jZXNzIHRoZSBuZXh0XG4gICAgICAgIC8vIGNoYXJhY3RlciB0byBwcmV2ZW50IHN0b3BwaW5nIGF0IGEgbmV4dCAnXFwnJ1xuICAgICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcXCcnKSB7XG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0VuZCBvZiBzdHJpbmcgXFwnIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKCdcIicgKyBzdHIgKyAnXCInKTsgLy8gdW5lc2NhcGUgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIHRoZSBtYXRyaXhcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTWF0cml4KHN0YXRlKSB7XG4gICAgdmFyIGFycmF5LCBwYXJhbXMsIHJvd3MsIGNvbHM7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdbJykge1xuICAgICAgLy8gbWF0cml4IFsuLi5dXG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIG5vbi1lbXB0eSBtYXRyaXhcbiAgICAgICAgdmFyIHJvdyA9IHBhcnNlUm93KHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgIC8vIDIgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICByb3dzID0gMTtcbiAgICAgICAgICBwYXJhbXMgPSBbcm93XTsgLy8gdGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBhcmUgc2VwYXJhdGVkIGJ5IGRvdC1jb21tYSdzXG5cbiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICBwYXJhbXNbcm93c10gPSBwYXJzZVJvdyhzdGF0ZSk7XG4gICAgICAgICAgICByb3dzKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRW5kIG9mIG1hdHJpeCBdIGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gY2hlY2sgaWYgdGhlIG51bWJlciBvZiBjb2x1bW5zIG1hdGNoZXMgaW4gYWxsIHJvd3NcblxuICAgICAgICAgIGNvbHMgPSBwYXJhbXNbMF0uaXRlbXMubGVuZ3RoO1xuXG4gICAgICAgICAgZm9yICh2YXIgciA9IDE7IHIgPCByb3dzOyByKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXNbcl0uaXRlbXMubGVuZ3RoICE9PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHN0YXRlLCAnQ29sdW1uIGRpbWVuc2lvbnMgbWlzbWF0Y2ggJyArICcoJyArIHBhcmFtc1tyXS5pdGVtcy5sZW5ndGggKyAnICE9PSAnICsgY29scyArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJyYXkgPSBuZXcgQXJyYXlOb2RlKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gMSBkaW1lbnNpb25hbCB2ZWN0b3JcbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2YgbWF0cml4IF0gZXhwZWN0ZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7XG4gICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIGFycmF5ID0gcm93O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIGlzIGFuIGVtcHR5IG1hdHJpeCBcIlsgXVwiXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICBhcnJheSA9IG5ldyBBcnJheU5vZGUoW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIGFycmF5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHNpbmdsZSBjb21tYS1zZXBhcmF0ZWQgcm93IGZyb20gYSBtYXRyaXgsIGxpa2UgJ2EsIGIsIGMnXG4gICAqIEByZXR1cm4ge0FycmF5Tm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUm93KHN0YXRlKSB7XG4gICAgdmFyIHBhcmFtcyA9IFtwYXJzZUFzc2lnbm1lbnQoc3RhdGUpXTtcbiAgICB2YXIgbGVuID0gMTtcblxuICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJywnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gcGFyc2UgZXhwcmVzc2lvblxuXG4gICAgICBwYXJhbXNbbGVuXSA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7XG4gICAgICBsZW4rKztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFycmF5Tm9kZShwYXJhbXMpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhbiBvYmplY3QsIGVuY2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzey4uLn0sIGZvciBleGFtcGxlIHt2YWx1ZTogMn1cbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlT2JqZWN0KHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAneycpIHtcbiAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgdmFyIGtleTtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgIGRvIHtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7XG4gICAgICAgICAgLy8gcGFyc2Uga2V5XG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCInKSB7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2VuID09PSAnXFwnJykge1xuICAgICAgICAgICAga2V5ID0gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHtcbiAgICAgICAgICAgIGtleSA9IHN0YXRlLnRva2VuO1xuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1N5bWJvbCBvciBzdHJpbmcgZXhwZWN0ZWQgYXMgb2JqZWN0IGtleScpO1xuICAgICAgICAgIH0gLy8gcGFyc2Uga2V5L3ZhbHVlIHNlcGFyYXRvclxuXG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICc6Jykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdDb2xvbiA6IGV4cGVjdGVkIGFmdGVyIG9iamVjdCBrZXknKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIGtleVxuXG4gICAgICAgICAgcHJvcGVydGllc1trZXldID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuXG5cbiAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnQ29tbWEgLCBvciBicmFja2V0IH0gZXhwZWN0ZWQgYWZ0ZXIgb2JqZWN0IHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHZhciBub2RlID0gbmV3IE9iamVjdE5vZGUocHJvcGVydGllcyk7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU51bWJlcihzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIGEgbnVtYmVyXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZU51bWJlcihzdGF0ZSkge1xuICAgIHZhciBudW1iZXJTdHI7XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuTlVNQkVSKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgbnVtYmVyXG4gICAgICBudW1iZXJTdHIgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKG51bWVyaWMobnVtYmVyU3RyLCBjb25maWcubnVtYmVyKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUGFyZW50aGVzZXMoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJlbnRoZXNlc1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VQYXJlbnRoZXNlcyhzdGF0ZSkge1xuICAgIHZhciBub2RlOyAvLyBjaGVjayBpZiBpdCBpcyBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvblxuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgIC8vIHBhcmVudGhlc2VzICguLi4pXG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOyAvLyBzdGFydCBhZ2FpblxuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBQYXJlbnRoZXNpc05vZGUobm9kZSk7XG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlRW5kKHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogRXZhbHVhdGVkIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgbm90IHlldCBlbmRlZCBidXQgZXhwZWN0ZWQgdG8gZW5kXG4gICAqIEByZXR1cm4ge05vZGV9IHJlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlRW5kKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnJykge1xuICAgICAgLy8gc3ludGF4IGVycm9yIG9yIHVuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb25cbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1ZhbHVlIGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTaG9ydGN1dCBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCByb3cgdmFsdWUgKG9uZSBiYXNlZClcbiAgICogUmV0dXJucyB0aGUgbGluZSBvZiB0aGUgY3VycmVudGx5IGhhbmRsZWQgZXhwcmVzc2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICAvKiBUT0RPOiBpbXBsZW1lbnQga2VlcGluZyB0cmFjayBvbiB0aGUgcm93IG51bWJlclxuICBmdW5jdGlvbiByb3cgKCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgKi9cblxuICAvKipcbiAgICogU2hvcnRjdXQgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgY29sIHZhbHVlIChvbmUgYmFzZWQpXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiAocG9zaXRpb24pIHdoZXJlIHRoZSBsYXN0IHN0YXRlLnRva2VuIHN0YXJ0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbChzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5pbmRleCAtIHN0YXRlLnRva2VuLmxlbmd0aCArIDE7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlcnJvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7U3ludGF4RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgdmFyIGMgPSBjb2woc3RhdGUpO1xuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlICsgJyAoY2hhciAnICsgYyArICcpJyk7XG4gICAgZXJyb3JbXCJjaGFyXCJdID0gYztcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlcnJvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgdmFyIGMgPSBjb2woc3RhdGUpO1xuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlICsgJyAoY2hhciAnICsgYyArICcpJyk7XG4gICAgZXJyb3JbXCJjaGFyXCJdID0gYztcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cblxuICByZXR1cm4gcGFyc2U7XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2UgPSBjcmVhdGVQYXJzZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXBwbHlUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXBwbHkgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L2FwcGx5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdhcHBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc0ludGVnZXInXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguYXBwbHlcbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIGFwcGx5XG4gKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyO1xuICB2YXIgYXBwbHkgPSAoMCwgX2FwcGx5LmNyZWF0ZUFwcGx5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGlzSW50ZWdlcjogaXNJbnRlZ2VyXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIGNvbmNhdCBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ2FwcGx5Jywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGFwcGx5LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gY3JlYXRlQXBwbHlUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtblRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2x1bW4gPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L2NvbHVtblwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnY29sdW1uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0luZGV4JywgJ21hdHJpeCcsICdyYW5nZSddO1xuLyoqXG4gKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0cml4LmNvbHVtblxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgaW5kZXhgIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBjb2x1bW5cbiAqIGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAqL1xuXG52YXIgY3JlYXRlQ29sdW1uVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuICB2YXIgY29sdW1uID0gKDAsIF9jb2x1bW4uY3JlYXRlQ29sdW1uKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIEluZGV4OiBJbmRleCxcbiAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICByYW5nZTogcmFuZ2VcbiAgfSk7IC8vIEBzZWU6IGNvbW1lbnQgb2YgY29sdW1uIGl0c2VsZlxuXG4gIHJldHVybiB0eXBlZCgnY29sdW1uJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZnJvbSB6ZXJvLWJhc2VkIHRvIG9uZS1iYXNlZFxuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdCAtIDE7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29sdW1uVHJhbnNmb3JtID0gY3JlYXRlQ29sdW1uVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25jYXRUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29uY2F0ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9jb25jYXRcIik7XG5cbnZhciBuYW1lID0gJ2NvbmNhdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ29uY2F0VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG4gIHZhciBjb25jYXQgPSAoMCwgX2NvbmNhdC5jcmVhdGVDb25jYXQpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgaXNJbnRlZ2VyOiBpc0ludGVnZXJcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5yYW5nZVxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29uY2F0XG4gICAqIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWRcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKCdjb25jYXQnLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICB2YXIgbGFzdEluZGV4ID0gYXJncy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGxhc3QgPSBhcmdzW2xhc3RJbmRleF07XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShsYXN0KSkge1xuICAgICAgICBhcmdzW2xhc3RJbmRleF0gPSBsYXN0IC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdC5taW51cygxKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25jYXRUcmFuc2Zvcm0gPSBjcmVhdGVDb25jYXRUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpbHRlclRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZmlsdGVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRmlsdGVyVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguZmlsdGVyXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBhZGRzIHN1cHBvcnQgZm9yIGVxdWF0aW9ucyBhcyB0ZXN0IGZ1bmN0aW9uIGZvciBtYXRoLmZpbHRlcixcbiAgICogc28geW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSAnZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKScuXG4gICAqL1xuICBmdW5jdGlvbiBmaWx0ZXJUcmFuc2Zvcm0oYXJncywgbWF0aCwgc2NvcGUpIHtcbiAgICB2YXIgeCwgY2FsbGJhY2s7XG5cbiAgICBpZiAoYXJnc1swXSkge1xuICAgICAgeCA9IGFyZ3NbMF0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1sxXSkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShhcmdzWzFdKSB8fCAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkoYXJnc1sxXSkpIHtcbiAgICAgICAgLy8gYSBmdW5jdGlvbiBwb2ludGVyLCBsaWtlIGZpbHRlcihbMywgLTIsIDVdLCBteVRlc3RGdW5jdGlvbilcbiAgICAgICAgY2FsbGJhY2sgPSBhcmdzWzFdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhbiBleHByZXNzaW9uIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKVxuICAgICAgICBjYWxsYmFjayA9ICgwLCBfY29tcGlsZUlubGluZUV4cHJlc3Npb24uY29tcGlsZUlubGluZUV4cHJlc3Npb24pKGFyZ3NbMV0sIG1hdGgsIHNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZpbHRlclRyYW5zZm9ybS5yYXdBcmdzID0gdHJ1ZTsgLy8gb25lIGJhc2VkIHZlcnNpb24gb2YgZnVuY3Rpb24gZmlsdGVyXG5cbiAgdmFyIGZpbHRlciA9IHR5cGVkKCdmaWx0ZXInLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9maWx0ZXIsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoX2ZpbHRlcih4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBSZWdFeHAnOiBfYXJyYXkuZmlsdGVyUmVnRXhwLFxuICAgICdNYXRyaXgsIFJlZ0V4cCc6IGZ1bmN0aW9uIE1hdHJpeFJlZ0V4cCh4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoKDAsIF9hcnJheS5maWx0ZXJSZWdFeHApKHgudG9BcnJheSgpLCB0ZXN0KSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpbHRlclRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG4vKipcbiAqIEZpbHRlciB2YWx1ZXMgaW4gYSBjYWxsYmFjayBnaXZlbiBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogISEhIFBhc3NlcyBhIG9uZS1iYXNlZCBpbmRleCAhISFcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB4XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgdGhlIGZpbHRlcmVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlRmlsdGVyVHJhbnNmb3JtID0gY3JlYXRlRmlsdGVyVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBfZmlsdGVyKHgsIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG4gIHJldHVybiAoMCwgX2FycmF5LmZpbHRlcikoeCwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICBpZiAoYXJncyA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3MgPT09IDIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgW2luZGV4ICsgMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzIG9yIC0xXG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleCArIDFdLCBhcnJheSk7XG4gICAgfVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSByZXF1aXJlKFwiLi91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvblwiKTtcblxudmFyIG5hbWUgPSAnZm9yRWFjaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5mb3JFYWNoXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgb25lLWJhc2VkIGluZGV4IGluc3RlYWQgb2YgYSB6ZXJvLWJhc2VkIGluZGV4XG4gICAqL1xuICBmdW5jdGlvbiBmb3JFYWNoVHJhbnNmb3JtKGFyZ3MsIG1hdGgsIHNjb3BlKSB7XG4gICAgdmFyIHgsIGNhbGxiYWNrO1xuXG4gICAgaWYgKGFyZ3NbMF0pIHtcbiAgICAgIHggPSBhcmdzWzBdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnc1sxXSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUpKGFyZ3NbMV0pKSB7XG4gICAgICAgIC8vIGEgZnVuY3Rpb24gcG9pbnRlciwgbGlrZSBmb3JFYWNoKFszLCAtMiwgNV0sIG15VGVzdEZ1bmN0aW9uKVxuICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuIGV4cHJlc3Npb24gbGlrZSBmb3JFYWNoKFszLCAtMiwgNV0sIHggPiAwID8gY2FsbGJhY2sxKHgpIDogY2FsbGJhY2syKHgpIClcbiAgICAgICAgY2FsbGJhY2sgPSAoMCwgX2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uLmNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKShhcmdzWzFdLCBtYXRoLCBzY29wZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9mb3JFYWNoKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZvckVhY2hUcmFuc2Zvcm0ucmF3QXJncyA9IHRydWU7IC8vIG9uZS1iYXNlZCB2ZXJzaW9uIG9mIGZvckVhY2hcblxuICB2YXIgX2ZvckVhY2ggPSB0eXBlZCgnZm9yRWFjaCcsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhGdW5jdGlvbihhcnJheSwgY2FsbGJhY2spIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gICAgICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuXG4gICAgICB2YXIgcmVjdXJzZSA9IGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICgwLCBfYXJyYXkuZm9yRWFjaCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSArIDEpKTsgLy8gb25lIGJhc2VkIGluZGV4LCBoZW5jZSBpKzFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgICAgICBpZiAoYXJncyA9PT0gMSkge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4LCBhcnJheSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWN1cnNlKGFycmF5LnZhbHVlT2YoKSwgW10pOyAvLyBwYXNzIEFycmF5XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZm9yRWFjaFRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSBjcmVhdGVGb3JFYWNoVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2luZGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0luZGV4J107XG52YXIgY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5pbmRleFxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIG9uZS1iYXNlZCBpbmRleCBpbnN0ZWFkIG9mIGEgemVyby1iYXNlZCBpbmRleFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGluZGV4VHJhbnNmb3JtKCkge1xuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsgLy8gY2hhbmdlIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWQsIGFuZCBjb252ZXJ0IEJpZ051bWJlciB0byBudW1iZXJcblxuICAgICAgaWYgKCgwLCBfaXMuaXNSYW5nZSkoYXJnKSkge1xuICAgICAgICBhcmcuc3RhcnQtLTtcbiAgICAgICAgYXJnLmVuZCAtPSBhcmcuc3RlcCA+IDAgPyAwIDogMjtcbiAgICAgIH0gZWxzZSBpZiAoYXJnICYmIGFyZy5pc1NldCA9PT0gdHJ1ZSkge1xuICAgICAgICBhcmcgPSBhcmcubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgcmV0dXJuIHYgLSAxO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0FycmF5KShhcmcpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHJldHVybiB2IC0gMTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgYXJnLS07XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvTnVtYmVyKCkgLSAxO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykgey8vIGxlYXZlIGFzIGlzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UnKTtcbiAgICAgIH1cblxuICAgICAgYXJnc1tpXSA9IGFyZztcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gbmV3IEluZGV4KCk7XG4gICAgSW5kZXguYXBwbHkocmVzLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSBjcmVhdGVJbmRleFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFwVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uXCIpO1xuXG52YXIgbmFtZSA9ICdtYXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVNYXBUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5tYXBcbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBvbmUtYmFzZWQgaW5kZXggaW5zdGVhZCBvZiBhIHplcm8tYmFzZWQgaW5kZXhcbiAgICovXG4gIGZ1bmN0aW9uIG1hcFRyYW5zZm9ybShhcmdzLCBtYXRoLCBzY29wZSkge1xuICAgIHZhciB4LCBjYWxsYmFjaztcblxuICAgIGlmIChhcmdzWzBdKSB7XG4gICAgICB4ID0gYXJnc1swXS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChhcmdzWzFdKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGFyZ3NbMV0pIHx8ICgwLCBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlKShhcmdzWzFdKSkge1xuICAgICAgICAvLyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIG15VGVzdEZ1bmN0aW9uKVxuICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuIGV4cHJlc3Npb24gbGlrZSBmaWx0ZXIoWzMsIC0yLCA1XSwgeCA+IDApXG4gICAgICAgIGNhbGxiYWNrID0gKDAsIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5jb21waWxlSW5saW5lRXhwcmVzc2lvbikoYXJnc1sxXSwgbWF0aCwgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXAoeCwgY2FsbGJhY2spO1xuICB9XG5cbiAgbWFwVHJhbnNmb3JtLnJhd0FyZ3MgPSB0cnVlOyAvLyBvbmUtYmFzZWQgdmVyc2lvbiBvZiBtYXAgZnVuY3Rpb25cblxuICB2YXIgbWFwID0gdHlwZWQoJ21hcCcsIHtcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIF9tYXAoeCwgY2FsbGJhY2ssIHgpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKF9tYXAoeC52YWx1ZU9mKCksIGNhbGxiYWNrLCB4KSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1hcFRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG4vKipcbiAqIE1hcCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheS4gT25lLWJhc2VkIGluZGV4ZXNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtBcnJheX0gb3JpZ1xuICogQHJldHVybiB7QXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlTWFwVHJhbnNmb3JtID0gY3JlYXRlTWFwVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBfbWFwKGFycmF5LCBjYWxsYmFjaywgb3JpZykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJnc0NvdW50ID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoMCwgX2FycmF5Lm1hcCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAvLyB3ZSBjcmVhdGUgYSBjb3B5IG9mIHRoZSBpbmRleCBhcnJheSBhbmQgYXBwZW5kIHRoZSBuZXcgaW5kZXggdmFsdWVcbiAgICAgICAgcmV0dXJuIHJlY3Vyc2UoY2hpbGQsIGluZGV4LmNvbmNhdChpICsgMSkpOyAvLyBvbmUgYmFzZWQgaW5kZXgsIGhlbmNlIGkgKyAxXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW52b2tlIHRoZSAodHlwZWQpIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgIGlmIChhcmdzQ291bnQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnc0NvdW50ID09PSAyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4LCBvcmlnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXhUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWF4ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgbmFtZSA9ICdtYXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbGFyZ2VyJ107XG52YXIgY3JlYXRlTWF4VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuICB2YXIgbWF4ID0gKDAsIF9tYXguY3JlYXRlTWF4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGxhcmdlcjogbGFyZ2VyXG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGgubWF4XG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBtYXhcbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21heCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDIgJiYgKDAsIF9pcy5pc0NvbGxlY3Rpb24pKGFyZ3NbMF0pKSB7XG4gICAgICAgIHZhciBkaW0gPSBhcmdzWzFdO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1heC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXhUcmFuc2Zvcm0gPSBjcmVhdGVNYXhUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lYW5cIik7XG5cbnZhciBuYW1lID0gJ21lYW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkJywgJ2RpdmlkZSddO1xudmFyIGNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZTtcbiAgdmFyIG1lYW4gPSAoMCwgX21lYW4uY3JlYXRlTWVhbikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBhZGQ6IGFkZCxcbiAgICBkaXZpZGU6IGRpdmlkZVxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLm1lYW5cbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1lYW5cbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21lYW4nLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZFxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyICYmICgwLCBfaXMuaXNDb2xsZWN0aW9uKShhcmdzWzBdKSkge1xuICAgICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0gLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltLm1pbnVzKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtZWFuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSBjcmVhdGVNZWFuVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNaW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWluXCIpO1xuXG52YXIgbmFtZSA9ICdtaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddO1xudmFyIGNyZWF0ZU1pblRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyO1xuICB2YXIgbWluID0gKDAsIF9taW4uY3JlYXRlTWluKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIHNtYWxsZXI6IHNtYWxsZXJcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5taW5cbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1pblxuICAgKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnbWluJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbWluLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1pblRyYW5zZm9ybSA9IGNyZWF0ZU1pblRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3JhbmdlID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIG5hbWUgPSAncmFuZ2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9tYXRyaXgnLCAnP2JpZ251bWJlcicsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXInLCAnbGFyZ2VyRXEnXTtcbnZhciBjcmVhdGVSYW5nZVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgc21hbGxlckVxID0gX3JlZi5zbWFsbGVyRXEsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcixcbiAgICAgIGxhcmdlckVxID0gX3JlZi5sYXJnZXJFcTtcbiAgdmFyIHJhbmdlID0gKDAsIF9yYW5nZS5jcmVhdGVSYW5nZSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgICBzbWFsbGVyOiBzbWFsbGVyLFxuICAgIHNtYWxsZXJFcTogc21hbGxlckVxLFxuICAgIGxhcmdlcjogbGFyZ2VyLFxuICAgIGxhcmdlckVxOiBsYXJnZXJFcVxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnJhbmdlXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ3JhbmdlJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3QgIT09ICdib29sZWFuJykge1xuICAgICAgICAvLyBhcHBlbmQgYSBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlXG4gICAgICAgIGFyZ3MucHVzaCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJhbmdlLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZVRyYW5zZm9ybSA9IGNyZWF0ZVJhbmdlVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3dUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3JvdyA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvcm93XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBuYW1lID0gJ3Jvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdJbmRleCcsICdtYXRyaXgnLCAncmFuZ2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdHJpeC5jb2x1bW5cbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGluZGV4YCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29sdW1uXG4gKiBmcm9tIHplcm8tYmFzZWQgdG8gb25lLWJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZVJvd1RyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHJhbmdlID0gX3JlZi5yYW5nZTtcbiAgdmFyIHJvdyA9ICgwLCBfcm93LmNyZWF0ZVJvdykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBJbmRleDogSW5kZXgsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgcmFuZ2U6IHJhbmdlXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIHJvdyBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ3JvdycsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAgICAgIHZhciBsYXN0SW5kZXggPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdCA9IGFyZ3NbbGFzdEluZGV4XTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGxhc3QpKSB7XG4gICAgICAgIGFyZ3NbbGFzdEluZGV4XSA9IGxhc3QgLSAxO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcm93LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJvd1RyYW5zZm9ybSA9IGNyZWF0ZVJvd1RyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RkVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zdGQgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdGRcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIG5hbWUgPSAnc3RkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3RkXG4gKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gc3RkXG4gKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZVN0ZFRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzcXJ0ID0gX3JlZi5zcXJ0LFxuICAgICAgdmFyaWFuY2UgPSBfcmVmLnZhcmlhbmNlO1xuICB2YXIgc3RkID0gKDAsIF9zdGQuY3JlYXRlU3RkKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIHNxcnQ6IHNxcnQsXG4gICAgdmFyaWFuY2U6IHZhcmlhbmNlXG4gIH0pO1xuICByZXR1cm4gdHlwZWQoJ3N0ZCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3RkLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN0ZFRyYW5zZm9ybSA9IGNyZWF0ZVN0ZFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX3N1YnNldCA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0XCIpO1xuXG52YXIgbmFtZSA9ICdzdWJzZXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4J107XG52YXIgY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuICB2YXIgc3Vic2V0ID0gKDAsIF9zdWJzZXQuY3JlYXRlU3Vic2V0KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIG1hdHJpeDogbWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3Vic2V0XG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ3N1YnNldCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzdWJzZXQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gY3JlYXRlU3Vic2V0VHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdW1UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtXCIpO1xuXG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnN1bVxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gbWVhblxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG52YXIgbmFtZSA9ICdzdW0nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2FkZCcsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddO1xudmFyIGNyZWF0ZVN1bVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb247XG4gIHZhciBzdW0gPSAoMCwgX3N1bS5jcmVhdGVTdW0pKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgY29uZmlnOiBjb25maWcsXG4gICAgYWRkOiBhZGQsXG4gICAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uXG4gIH0pO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3VtLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bVRyYW5zZm9ybSA9IGNyZWF0ZVN1bVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSBjb21waWxlSW5saW5lRXhwcmVzc2lvbjtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxuLyoqXG4gKiBDb21waWxlIGFuIGlubGluZSBleHByZXNzaW9uIGxpa2UgXCJ4ID4gMFwiXG4gKiBAcGFyYW0ge05vZGV9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gc2NvcGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCBvbmUgYXJndW1lbnQgd2hpY2ggZmlsbHMgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIHZhcmlhYmxlIChsaWtlIFwieFwiKSBhbmQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKGV4cHJlc3Npb24sIG1hdGgsIHNjb3BlKSB7XG4gIC8vIGZpbmQgYW4gdW5kZWZpbmVkIHN5bWJvbFxuICB2YXIgc3ltYm9sID0gZXhwcmVzc2lvbi5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gKDAsIF9pcy5pc1N5bWJvbE5vZGUpKG5vZGUpICYmICEobm9kZS5uYW1lIGluIG1hdGgpICYmICEobm9kZS5uYW1lIGluIHNjb3BlKTtcbiAgfSlbMF07XG5cbiAgaWYgKCFzeW1ib2wpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVuZGVmaW5lZCB2YXJpYWJsZSBmb3VuZCBpbiBpbmxpbmUgZXhwcmVzc2lvbiBcIicgKyBleHByZXNzaW9uICsgJ1wiJyk7XG4gIH0gLy8gY3JlYXRlIGEgdGVzdCBmdW5jdGlvbiBmb3IgdGhpcyBlcXVhdGlvblxuXG5cbiAgdmFyIG5hbWUgPSBzeW1ib2wubmFtZTsgLy8gdmFyaWFibGUgbmFtZVxuXG4gIHZhciBzdWJTY29wZSA9IE9iamVjdC5jcmVhdGUoc2NvcGUpO1xuICB2YXIgZXEgPSBleHByZXNzaW9uLmNvbXBpbGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlubGluZUV4cHJlc3Npb24oeCkge1xuICAgIHN1YlNjb3BlW25hbWVdID0geDtcbiAgICByZXR1cm4gZXEuZXZhbHVhdGUoc3ViU2NvcGUpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcnJvclRyYW5zZm9ybSA9IGVycm9yVHJhbnNmb3JtO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gemVyby1iYXNlZCBpbmRpY2VzIHRvIG9uZS1iYXNlZCBpbmRpY2VzIGluIGVycm9yc1xuICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gKiBAcmV0dXJucyB7RXJyb3IgfCBJbmRleEVycm9yfSBSZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCBlcnJvclxuICovXG5mdW5jdGlvbiBlcnJvclRyYW5zZm9ybShlcnIpIHtcbiAgaWYgKGVyciAmJiBlcnIuaXNJbmRleEVycm9yKSB7XG4gICAgcmV0dXJuIG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGVyci5pbmRleCArIDEsIGVyci5taW4gKyAxLCBlcnIubWF4ICE9PSB1bmRlZmluZWQgPyBlcnIubWF4ICsgMSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICByZXR1cm4gZXJyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgbmFtZSA9ICd2YXJpYW5jZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ2FwcGx5JywgJ2lzTmFOJ107XG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnZhclxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIHZhclxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG5cbnZhciBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgYXBwbHkgPSBfcmVmLmFwcGx5LFxuICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOO1xuICB2YXIgdmFyaWFuY2UgPSAoMCwgX3ZhcmlhbmNlLmNyZWF0ZVZhcmlhbmNlKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGFkZDogYWRkLFxuICAgIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgZGl2aWRlOiBkaXZpZGUsXG4gICAgYXBwbHk6IGFwcGx5LFxuICAgIGlzTmFOOiBpc05hTlxuICB9KTtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdmFyaWFuY2UuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm0gPSBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVR5cGVkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90eXBlZC5jcmVhdGVUeXBlZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXN1bHRTZXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1Jlc3VsdFNldC5jcmVhdGVSZXN1bHRTZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmlnTnVtYmVyQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0JpZ051bWJlci5jcmVhdGVCaWdOdW1iZXJDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wbGV4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbXBsZXguY3JlYXRlQ29tcGxleENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZyYWN0aW9uQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ZyYWN0aW9uLmNyZWF0ZUZyYWN0aW9uQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZ2VDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfUmFuZ2UuY3JlYXRlUmFuZ2VDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXRyaXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTWF0cml4LmNyZWF0ZU1hdHJpeENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlbnNlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0RlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2xvbmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Nsb25lLmNyZWF0ZUNsb25lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzSW50ZWdlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNJbnRlZ2VyLmNyZWF0ZUlzSW50ZWdlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc05lZ2F0aXZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc05lZ2F0aXZlLmNyZWF0ZUlzTmVnYXRpdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNOdW1lcmljXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc051bWVyaWMuY3JlYXRlSXNOdW1lcmljO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhhc051bWVyaWNWYWx1ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaGFzTnVtZXJpY1ZhbHVlLmNyZWF0ZUhhc051bWVyaWNWYWx1ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc1Bvc2l0aXZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1Bvc2l0aXZlLmNyZWF0ZUlzUG9zaXRpdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNaZXJvXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1plcm8uY3JlYXRlSXNaZXJvO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzTmFOXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc05hTi5jcmVhdGVJc05hTjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUeXBlT2ZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3R5cGVPZi5jcmVhdGVUeXBlT2Y7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZFR5cGVvZlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdHlwZU9mLmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Y7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRXF1YWxTY2FsYXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VxdWFsU2NhbGFyLmNyZWF0ZUVxdWFsU2NhbGFyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TcGFyc2VNYXRyaXguY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9udW1iZXIuY3JlYXRlTnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0cmluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RyaW5nLmNyZWF0ZVN0cmluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCb29sZWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ib29sZWFuLmNyZWF0ZUJvb2xlYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmlnbnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9iaWdudW1iZXIuY3JlYXRlQmlnbnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBsZXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBsZXguY3JlYXRlQ29tcGxleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGcmFjdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZnJhY3Rpb24uY3JlYXRlRnJhY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXRyaXguY3JlYXRlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwbGl0VW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3BsaXRVbml0LmNyZWF0ZVNwbGl0VW5pdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbmFyeU1pbnVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmFyeU1pbnVzLmNyZWF0ZVVuYXJ5TWludXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5hcnlQbHVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmFyeVBsdXMuY3JlYXRlVW5hcnlQbHVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFic1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWJzLmNyZWF0ZUFicztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcHBseVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXBwbHkuY3JlYXRlQXBwbHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWRkU2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hZGRTY2FsYXIuY3JlYXRlQWRkU2NhbGFyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNicnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NicnQuY3JlYXRlQ2JydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDZWlsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jZWlsLmNyZWF0ZUNlaWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3ViZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3ViZS5jcmVhdGVDdWJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV4cFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXhwLmNyZWF0ZUV4cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFeHBtMVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXhwbS5jcmVhdGVFeHBtMTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpeC5jcmVhdGVGaXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmxvb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Zsb29yLmNyZWF0ZUZsb29yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdjZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2NkLmNyZWF0ZUdjZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMY21cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xjbS5jcmVhdGVMY207XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMTBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZy5jcmVhdGVMb2cxMDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb2cyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sb2cyLmNyZWF0ZUxvZzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tb2QuY3JlYXRlTW9kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU11bHRpcGx5U2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tdWx0aXBseVNjYWxhci5jcmVhdGVNdWx0aXBseVNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNdWx0aXBseVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbXVsdGlwbHkuY3JlYXRlTXVsdGlwbHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnRoUm9vdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnRoUm9vdC5jcmVhdGVOdGhSb290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpZ25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpZ24uY3JlYXRlU2lnbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcXJ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXJ0LmNyZWF0ZVNxcnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3F1YXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXVhcmUuY3JlYXRlU3F1YXJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnRyYWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdWJ0cmFjdC5jcmVhdGVTdWJ0cmFjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVYZ2NkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF94Z2NkLmNyZWF0ZVhnY2Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90TXVsdGlwbHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdE11bHRpcGx5LmNyZWF0ZURvdE11bHRpcGx5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdEFuZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYml0QW5kLmNyZWF0ZUJpdEFuZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCaXROb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdE5vdC5jcmVhdGVCaXROb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQml0T3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdE9yLmNyZWF0ZUJpdE9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdFhvclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYml0WG9yLmNyZWF0ZUJpdFhvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FyZy5jcmVhdGVBcmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29ualwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uai5jcmVhdGVDb25qO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUltXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbS5jcmVhdGVJbTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmUuY3JlYXRlUmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTm90XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ub3QuY3JlYXRlTm90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vci5jcmVhdGVPcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVYb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3hvci5jcmVhdGVYb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uY2F0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25jYXQuY3JlYXRlQ29uY2F0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbHVtblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29sdW1uLmNyZWF0ZUNvbHVtbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDcm9zc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3Jvc3MuY3JlYXRlQ3Jvc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGlhZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGlhZy5jcmVhdGVEaWFnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV5ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXllLmNyZWF0ZUV5ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWx0ZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpbHRlci5jcmVhdGVGaWx0ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmxhdHRlblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmxhdHRlbi5jcmVhdGVGbGF0dGVuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZvckVhY2hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZvckVhY2guY3JlYXRlRm9yRWFjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2V0TWF0cml4RGF0YVR5cGUuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSWRlbnRpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lkZW50aXR5LmNyZWF0ZUlkZW50aXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUtyb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2tyb24uY3JlYXRlS3JvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21hcC5jcmVhdGVNYXA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT25lc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfb25lcy5jcmVhdGVPbmVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmdlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYW5nZS5jcmVhdGVSYW5nZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXNoYXBlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXNoYXBlLmNyZWF0ZVJlc2hhcGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVzaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXNpemUuY3JlYXRlUmVzaXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvd1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcm93LmNyZWF0ZVJvdztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaXplLmNyZWF0ZVNpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3F1ZWV6ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3F1ZWV6ZS5jcmVhdGVTcXVlZXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3Vic2V0LmNyZWF0ZVN1YnNldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUcmFuc3Bvc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RyYW5zcG9zZS5jcmVhdGVUcmFuc3Bvc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3RyYW5zcG9zZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3RyYW5zcG9zZS5jcmVhdGVDdHJhbnNwb3NlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVplcm9zXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF96ZXJvcy5jcmVhdGVaZXJvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcmZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VyZi5jcmVhdGVFcmY7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbW9kZS5jcmVhdGVNb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb2RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Byb2QuY3JlYXRlUHJvZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGb3JtYXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Zvcm1hdC5jcmVhdGVGb3JtYXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUHJpbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ByaW50LmNyZWF0ZVByaW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRvXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90by5jcmVhdGVUbztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc1ByaW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1ByaW1lLmNyZWF0ZUlzUHJpbWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnVtZXJpY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnVtZXJpYy5jcmVhdGVOdW1lcmljO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpdmlkZVNjYWxhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGl2aWRlU2NhbGFyLmNyZWF0ZURpdmlkZVNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Bvdy5jcmVhdGVQb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUm91bmRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JvdW5kLmNyZWF0ZVJvdW5kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxvZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbG9nMy5jcmVhdGVMb2c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMXBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZzFwLmNyZWF0ZUxvZzFwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU50aFJvb3RzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9udGhSb290cy5jcmVhdGVOdGhSb290cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEb3RQb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdFBvdy5jcmVhdGVEb3RQb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90RGl2aWRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kb3REaXZpZGUuY3JlYXRlRG90RGl2aWRlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxzb2x2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHNvbHZlLmNyZWF0ZUxzb2x2ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVc29sdmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Vzb2x2ZS5jcmVhdGVVc29sdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGVmdFNoaWZ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sZWZ0U2hpZnQuY3JlYXRlTGVmdFNoaWZ0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJpZ2h0QXJpdGhTaGlmdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmlnaHRBcml0aFNoaWZ0LmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSaWdodExvZ1NoaWZ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yaWdodExvZ1NoaWZ0LmNyZWF0ZVJpZ2h0TG9nU2hpZnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQW5kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hbmQuY3JlYXRlQW5kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBhcmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmUuY3JlYXRlQ29tcGFyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wYXJlTmF0dXJhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tcGFyZU5hdHVyYWwuY3JlYXRlQ29tcGFyZU5hdHVyYWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29tcGFyZVRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmVUZXh0LmNyZWF0ZUNvbXBhcmVUZXh0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVxdWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9lcXVhbC5jcmVhdGVFcXVhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcXVhbFRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VxdWFsVGV4dC5jcmVhdGVFcXVhbFRleHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU21hbGxlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc21hbGxlci5jcmVhdGVTbWFsbGVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNtYWxsZXJFcVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc21hbGxlckVxLmNyZWF0ZVNtYWxsZXJFcTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMYXJnZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xhcmdlci5jcmVhdGVMYXJnZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGFyZ2VyRXFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xhcmdlckVxLmNyZWF0ZUxhcmdlckVxO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlZXBFcXVhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVlcEVxdWFsLmNyZWF0ZURlZXBFcXVhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbmVxdWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmVxdWFsLmNyZWF0ZVVuZXF1YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFydGl0aW9uU2VsZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QuY3JlYXRlUGFydGl0aW9uU2VsZWN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNvcnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NvcnQuY3JlYXRlU29ydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21heC5jcmVhdGVNYXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWluXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9taW4uY3JlYXRlTWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ltbXV0YWJsZURlbnNlTWF0cml4LmNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5kZXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTWF0cml4SW5kZXguY3JlYXRlSW5kZXhDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWJvbmFjY2lIZWFwQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ZpYm9uYWNjaUhlYXAuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYUNsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TcGEuY3JlYXRlU3BhQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5pdENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Vbml0LmNyZWF0ZVVuaXRDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbml0RnVuY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3VuaXQuY3JlYXRlVW5pdEZ1bmN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3BhcnNlLmNyZWF0ZVNwYXJzZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDcmVhdGVVbml0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVVbml0LmNyZWF0ZUNyZWF0ZVVuaXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNvcy5jcmVhdGVBY29zO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjb3NoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY29zaC5jcmVhdGVBY29zaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY290XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY290LmNyZWF0ZUFjb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvdGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjb3RoLmNyZWF0ZUFjb3RoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjc2NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjc2MuY3JlYXRlQWNzYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY3NjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNzY2guY3JlYXRlQWNzY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNlY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXNlYy5jcmVhdGVBc2VjO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFzZWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2VjaC5jcmVhdGVBc2VjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc2luXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2luLmNyZWF0ZUFzaW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNpbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FzaW5oLmNyZWF0ZUFzaW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUF0YW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW4uY3JlYXRlQXRhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdGFuMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXRhbjIuY3JlYXRlQXRhbjI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRhbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW5oLmNyZWF0ZUF0YW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29zLmNyZWF0ZUNvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb3NoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3NoLmNyZWF0ZUNvc2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ290XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3QuY3JlYXRlQ290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvdGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvdGguY3JlYXRlQ290aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDc2NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NzYy5jcmVhdGVDc2M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3NjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3NjaC5jcmVhdGVDc2NoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNlY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2VjLmNyZWF0ZVNlYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZWNoLmNyZWF0ZVNlY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2luXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaW4uY3JlYXRlU2luO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpbmguY3JlYXRlU2luaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUYW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Rhbi5jcmVhdGVUYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVGFuaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdGFuaC5jcmVhdGVUYW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldENhcnRlc2lhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0Q2FydGVzaWFuLmNyZWF0ZVNldENhcnRlc2lhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXREaWZmZXJlbmNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXREaWZmZXJlbmNlLmNyZWF0ZVNldERpZmZlcmVuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0RGlzdGluY3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NldERpc3RpbmN0LmNyZWF0ZVNldERpc3RpbmN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldEludGVyc2VjdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0SW50ZXJzZWN0LmNyZWF0ZVNldEludGVyc2VjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRJc1N1YnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0SXNTdWJzZXQuY3JlYXRlU2V0SXNTdWJzZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0TXVsdGlwbGljaXR5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRNdWx0aXBsaWNpdHkuY3JlYXRlU2V0TXVsdGlwbGljaXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFBvd2Vyc2V0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRQb3dlcnNldC5jcmVhdGVTZXRQb3dlcnNldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRTaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRTaXplLmNyZWF0ZVNldFNpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0U3ltRGlmZmVyZW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0U3ltRGlmZmVyZW5jZS5jcmVhdGVTZXRTeW1EaWZmZXJlbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFVuaW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRVbmlvbi5jcmVhdGVTZXRVbmlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBZGRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FkZC5jcmVhdGVBZGQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSHlwb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2h5cG90LmNyZWF0ZUh5cG90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU5vcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX25vcm0uY3JlYXRlTm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdC5jcmVhdGVEb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJhY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RyYWNlLmNyZWF0ZVRyYWNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mdW5jdGlvbi5jcmVhdGVJbmRleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Ob2RlLmNyZWF0ZU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNjZXNzb3JOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9BY2Nlc3Nvck5vZGUuY3JlYXRlQWNjZXNzb3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFycmF5Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQXJyYXlOb2RlLmNyZWF0ZUFycmF5Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQXNzaWdubWVudE5vZGUuY3JlYXRlQXNzaWdubWVudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmxvY2tOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9CbG9ja05vZGUuY3JlYXRlQmxvY2tOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbmRpdGlvbmFsTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQ29uZGl0aW9uYWxOb2RlLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25zdGFudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbnN0YW50Tm9kZS5jcmVhdGVDb25zdGFudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfSW5kZXhOb2RlLmNyZWF0ZUluZGV4Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVPYmplY3ROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9PYmplY3ROb2RlLmNyZWF0ZU9iamVjdE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT3BlcmF0b3JOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9PcGVyYXRvck5vZGUuY3JlYXRlT3BlcmF0b3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBhcmVudGhlc2lzTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfUGFyZW50aGVzaXNOb2RlLmNyZWF0ZVBhcmVudGhlc2lzTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JhbmdlTm9kZS5jcmVhdGVSYW5nZU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVsYXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JlbGF0aW9uYWxOb2RlLmNyZWF0ZVJlbGF0aW9uYWxOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN5bWJvbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1N5bWJvbE5vZGUuY3JlYXRlU3ltYm9sTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGdW5jdGlvbk5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0Z1bmN0aW9uTm9kZS5jcmVhdGVGdW5jdGlvbk5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmNyZWF0ZVBhcnNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBpbGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBpbGUuY3JlYXRlQ29tcGlsZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFdmFsdWF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXZhbHVhdGUuY3JlYXRlRXZhbHVhdGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZEV2YWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V2YWwuY3JlYXRlRGVwcmVjYXRlZEV2YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VyQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1BhcnNlci5jcmVhdGVQYXJzZXJDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQYXJzZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlci5jcmVhdGVQYXJzZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTHVwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sdXAuY3JlYXRlTHVwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9xci5jcmVhdGVRcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTbHVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NsdS5jcmVhdGVTbHU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTHVzb2x2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHVzb2x2ZS5jcmVhdGVMdXNvbHZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhlbHBDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfSGVscC5jcmVhdGVIZWxwQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2hhaW5DbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQ2hhaW4uY3JlYXRlQ2hhaW5DbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIZWxwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9oZWxwLmNyZWF0ZUhlbHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2hhaW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NoYWluLmNyZWF0ZUNoYWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGV0LmNyZWF0ZURldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbnZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludi5jcmVhdGVJbnY7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRWlnc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZWlncy5jcmVhdGVFaWdzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV4cG1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V4cG0yLmNyZWF0ZUV4cG07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3FydG1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NxcnRtLmNyZWF0ZVNxcnRtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpdmlkZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGl2aWRlLmNyZWF0ZURpdmlkZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEaXN0YW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGlzdGFuY2UuY3JlYXRlRGlzdGFuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW50ZXJzZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcnNlY3QuY3JlYXRlSW50ZXJzZWN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1bVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3VtLmNyZWF0ZVN1bTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNZWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWFuLmNyZWF0ZU1lYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWVkaWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWRpYW4uY3JlYXRlTWVkaWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWFkLmNyZWF0ZU1hZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYXJpYW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UuY3JlYXRlVmFyaWFuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZFZhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UuY3JlYXRlRGVwcmVjYXRlZFZhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVRdWFudGlsZVNlcVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcXVhbnRpbGVTZXEuY3JlYXRlUXVhbnRpbGVTZXE7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3RkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdGQuY3JlYXRlU3RkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbWJpbmF0aW9uc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tYmluYXRpb25zLmNyZWF0ZUNvbWJpbmF0aW9ucztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21iaW5hdGlvbnNXaXRoUmVwLmNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlR2FtbWFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2dhbW1hLmNyZWF0ZUdhbW1hO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhY3RvcmlhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmFjdG9yaWFsLmNyZWF0ZUZhY3RvcmlhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVLbGRpdmVyZ2VuY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2tsZGl2ZXJnZW5jZS5jcmVhdGVLbGRpdmVyZ2VuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTXVsdGlub21pYWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX211bHRpbm9taWFsLmNyZWF0ZU11bHRpbm9taWFsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBlcm11dGF0aW9uc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGVybXV0YXRpb25zLmNyZWF0ZVBlcm11dGF0aW9ucztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaWNrUmFuZG9tXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waWNrUmFuZG9tLmNyZWF0ZVBpY2tSYW5kb207XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZG9tXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYW5kb20uY3JlYXRlUmFuZG9tO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmRvbUludFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZG9tSW50LmNyZWF0ZVJhbmRvbUludDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGlybGluZ1MyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdGlybGluZ1MuY3JlYXRlU3RpcmxpbmdTMjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCZWxsTnVtYmVyc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYmVsbE51bWJlcnMuY3JlYXRlQmVsbE51bWJlcnM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2F0YWxhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY2F0YWxhbi5jcmVhdGVDYXRhbGFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBvc2l0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21wb3NpdGlvbi5jcmVhdGVDb21wb3NpdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaW1wbGlmeVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2ltcGxpZnkuY3JlYXRlU2ltcGxpZnk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVyaXZhdGl2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVyaXZhdGl2ZS5jcmVhdGVEZXJpdmF0aXZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhdGlvbmFsaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYXRpb25hbGl6ZS5jcmVhdGVSYXRpb25hbGl6ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXZpdmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXZpdmVyLmNyZWF0ZVJldml2ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVwbGFjZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JlcGxhY2VyLmNyZWF0ZVJlcGxhY2VyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVwcGVyY2FzZUVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVVcHBlcmNhc2VFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhbHNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlRmFsc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZUk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5maW5pdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVJbmZpbml0eTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMTjEwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE4xMDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMTjJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVMTjI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTE9HMTBFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE9HMTBFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxPRzJFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE9HMkU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTmFOXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTmFOO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51bGxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVOdWxsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBoaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVBoaTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVBpO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVwcGVyY2FzZVBpXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlVXBwZXJjYXNlUGk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU1FSVDFfMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVNRUlQxXzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU1FSVDJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVTUVJUMjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUYXVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVUYXU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJ1ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVRydWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVZlcnNpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRvbWljTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQXRvbWljTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdm9nYWRyb1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQXZvZ2Fkcm87XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9ock1hZ25ldG9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVCb2hyTWFnbmV0b247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9oclJhZGl1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQm9oclJhZGl1cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCb2x0em1hbm5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUJvbHR6bWFubjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ291bG9tYlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ291bG9tYjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZXV0ZXJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZURldXRlcm9uTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFZmltb3ZGYWN0b3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVmaW1vdkZhY3RvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFbGVjdHJpY0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVFbGVjdHJpY0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVsZWN0cm9uTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRWxlY3Ryb25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmFyYWRheVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRmFyYWRheTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGZXJtaUNvdXBsaW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVGZXJtaUNvdXBsaW5nO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbmVTdHJ1Y3R1cmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZpbmVTdHJ1Y3R1cmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlyc3RSYWRpYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZpcnN0UmFkaWF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdhc0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHYXNDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdyYXZpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUdyYXZpdHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSGFydHJlZUVuZXJneVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlSGFydHJlZUVuZXJneTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUtsaXR6aW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVLbGl0emluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb3NjaG1pZHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUxvc2NobWlkdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYWduZXRpY0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJNYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNb2xhck1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJNYXNzQzEyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNb2xhck1hc3NDMTI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNb2xhclZvbHVtZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJWb2x1bWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTmV1dHJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU5ldXRyb25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51Y2xlYXJNYWduZXRvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTnVjbGVhck1hZ25ldG9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja0NoYXJnZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUGxhbmNrQ2hhcmdlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tMZW5ndGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVBsYW5ja0xlbmd0aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tNYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tNYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tUZW1wZXJhdHVyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tUaW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tUaW1lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb3Rvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVByb3Rvbk1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJ5ZGJlcmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVJ5ZGJlcmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2Fja3VyVGV0cm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlU2Fja3VyVGV0cm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNvbmRSYWRpYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNlY29uZFJhZGlhdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcGVlZE9mTGlnaHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNwZWVkT2ZMaWdodDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGVmYW5Cb2x0em1hbm5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVZhY3V1bUltcGVkYW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlVmFjdXVtSW1wZWRhbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVdlYWtNaXhpbmdBbmdsZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlV2Vha01peGluZ0FuZ2xlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVdpZW5EaXNwbGFjZW1lbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXBwbHlUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FwcGx5Mi5jcmVhdGVBcHBseVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb2x1bW5UcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbHVtbjIuY3JlYXRlQ29sdW1uVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbHRlclRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmlsdGVyMi5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRm9yRWFjaFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZm9yRWFjaDIuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbmRleFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW5kZXguY3JlYXRlSW5kZXhUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWFwVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXAyLmNyZWF0ZU1hcFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXhUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21heDIuY3JlYXRlTWF4VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1lYW5UcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21lYW4yLmNyZWF0ZU1lYW5UcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWluVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9taW4yLmNyZWF0ZU1pblRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZ2UyLmNyZWF0ZVJhbmdlVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvd1RyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcm93Mi5jcmVhdGVSb3dUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3Vic2V0VHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdWJzZXQyLmNyZWF0ZVN1YnNldFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25jYXRUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbmNhdDIuY3JlYXRlQ29uY2F0VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0ZFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RkMi5jcmVhdGVTdGRUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3VtVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdW0yLmNyZWF0ZVN1bVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UyLmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtO1xuICB9XG59KTtcblxudmFyIF90eXBlZCA9IHJlcXVpcmUoXCIuL2NvcmUvZnVuY3Rpb24vdHlwZWRcIik7XG5cbnZhciBfUmVzdWx0U2V0ID0gcmVxdWlyZShcIi4vdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0XCIpO1xuXG52YXIgX0JpZ051bWJlciA9IHJlcXVpcmUoXCIuL3R5cGUvYmlnbnVtYmVyL0JpZ051bWJlclwiKTtcblxudmFyIF9Db21wbGV4ID0gcmVxdWlyZShcIi4vdHlwZS9jb21wbGV4L0NvbXBsZXhcIik7XG5cbnZhciBfRnJhY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uXCIpO1xuXG52YXIgX1JhbmdlID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvUmFuZ2VcIik7XG5cbnZhciBfTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvTWF0cml4XCIpO1xuXG52YXIgX0RlbnNlTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvRGVuc2VNYXRyaXhcIik7XG5cbnZhciBfY2xvbmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9jbG9uZVwiKTtcblxudmFyIF9pc0ludGVnZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXJcIik7XG5cbnZhciBfaXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmVcIik7XG5cbnZhciBfaXNOdW1lcmljID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljXCIpO1xuXG52YXIgX2hhc051bWVyaWNWYWx1ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2hhc051bWVyaWNWYWx1ZVwiKTtcblxudmFyIF9pc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZVwiKTtcblxudmFyIF9pc1plcm8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1plcm9cIik7XG5cbnZhciBfaXNOYU4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc05hTlwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfZXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsU2NhbGFyXCIpO1xuXG52YXIgX1NwYXJzZU1hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi90eXBlL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi90eXBlL3N0cmluZ1wiKTtcblxudmFyIF9ib29sZWFuID0gcmVxdWlyZShcIi4vdHlwZS9ib29sZWFuXCIpO1xuXG52YXIgX2JpZ251bWJlciA9IHJlcXVpcmUoXCIuL3R5cGUvYmlnbnVtYmVyL2Z1bmN0aW9uL2JpZ251bWJlclwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4vdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXhcIik7XG5cbnZhciBfZnJhY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL2ZyYWN0aW9uL2Z1bmN0aW9uL2ZyYWN0aW9uXCIpO1xuXG52YXIgX21hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uL21hdHJpeFwiKTtcblxudmFyIF9zcGxpdFVuaXQgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvZnVuY3Rpb24vc3BsaXRVbml0XCIpO1xuXG52YXIgX3VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXNcIik7XG5cbnZhciBfdW5hcnlQbHVzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy91bmFyeVBsdXNcIik7XG5cbnZhciBfYWJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnNcIik7XG5cbnZhciBfYXBwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvYXBwbHlcIik7XG5cbnZhciBfYWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGRTY2FsYXJcIik7XG5cbnZhciBfY2JydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydFwiKTtcblxudmFyIF9jZWlsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsXCIpO1xuXG52YXIgX2N1YmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmVcIik7XG5cbnZhciBfZXhwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBcIik7XG5cbnZhciBfZXhwbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTFcIik7XG5cbnZhciBfZml4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9maXhcIik7XG5cbnZhciBfZmxvb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yXCIpO1xuXG52YXIgX2djZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZ2NkXCIpO1xuXG52YXIgX2xjbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbGNtXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTBcIik7XG5cbnZhciBfbG9nMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMlwiKTtcblxudmFyIF9tb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL21vZFwiKTtcblxudmFyIF9tdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHlTY2FsYXJcIik7XG5cbnZhciBfbXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5XCIpO1xuXG52YXIgX250aFJvb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RcIik7XG5cbnZhciBfc2lnbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc2lnblwiKTtcblxudmFyIF9zcXJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0XCIpO1xuXG52YXIgX3NxdWFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlXCIpO1xuXG52YXIgX3N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdFwiKTtcblxudmFyIF94Z2NkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkXCIpO1xuXG52YXIgX2RvdE11bHRpcGx5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseVwiKTtcblxudmFyIF9iaXRBbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdEFuZFwiKTtcblxudmFyIF9iaXROb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdFwiKTtcblxudmFyIF9iaXRPciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3JcIik7XG5cbnZhciBfYml0WG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRYb3JcIik7XG5cbnZhciBfYXJnID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9hcmdcIik7XG5cbnZhciBfY29uaiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvY29ualwiKTtcblxudmFyIF9pbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvaW1cIik7XG5cbnZhciBfcmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L3JlXCIpO1xuXG52YXIgX25vdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvbm90XCIpO1xuXG52YXIgX29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC9vclwiKTtcblxudmFyIF94b3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL3hvclwiKTtcblxudmFyIF9jb25jYXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY29uY2F0XCIpO1xuXG52YXIgX2NvbHVtbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfY3Jvc3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3NcIik7XG5cbnZhciBfZGlhZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kaWFnXCIpO1xuXG52YXIgX2V5ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9leWVcIik7XG5cbnZhciBfZmlsdGVyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZpbHRlclwiKTtcblxudmFyIF9mbGF0dGVuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZsYXR0ZW5cIik7XG5cbnZhciBfZm9yRWFjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoXCIpO1xuXG52YXIgX2dldE1hdHJpeERhdGFUeXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlXCIpO1xuXG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5XCIpO1xuXG52YXIgX2tyb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgva3JvblwiKTtcblxudmFyIF9tYXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvbWFwXCIpO1xuXG52YXIgX29uZXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvb25lc1wiKTtcblxudmFyIF9yYW5nZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIF9yZXNoYXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2hhcGVcIik7XG5cbnZhciBfcmVzaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZVwiKTtcblxudmFyIF9yb3cgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcm93XCIpO1xuXG52YXIgX3NpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc2l6ZVwiKTtcblxudmFyIF9zcXVlZXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NxdWVlemVcIik7XG5cbnZhciBfc3Vic2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3N1YnNldFwiKTtcblxudmFyIF90cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvdHJhbnNwb3NlXCIpO1xuXG52YXIgX2N0cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZVwiKTtcblxudmFyIF96ZXJvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC96ZXJvc1wiKTtcblxudmFyIF9lcmYgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zcGVjaWFsL2VyZlwiKTtcblxudmFyIF9tb2RlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tb2RlXCIpO1xuXG52YXIgX3Byb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2RcIik7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RyaW5nL2Zvcm1hdFwiKTtcblxudmFyIF9wcmludCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0cmluZy9wcmludFwiKTtcblxudmFyIF90byA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3VuaXQvdG9cIik7XG5cbnZhciBfaXNQcmltZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWVcIik7XG5cbnZhciBfbnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL251bWVyaWNcIik7XG5cbnZhciBfZGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGVTY2FsYXJcIik7XG5cbnZhciBfcG93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3dcIik7XG5cbnZhciBfcm91bmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kXCIpO1xuXG52YXIgX2xvZzMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZ1wiKTtcblxudmFyIF9sb2cxcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXBcIik7XG5cbnZhciBfbnRoUm9vdHMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzXCIpO1xuXG52YXIgX2RvdFBvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93XCIpO1xuXG52YXIgX2RvdERpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlXCIpO1xuXG52YXIgX2xzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL2xzb2x2ZVwiKTtcblxudmFyIF91c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NvbHZlci91c29sdmVcIik7XG5cbnZhciBfbGVmdFNoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9sZWZ0U2hpZnRcIik7XG5cbnZhciBfcmlnaHRBcml0aFNoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnRcIik7XG5cbnZhciBfcmlnaHRMb2dTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRMb2dTaGlmdFwiKTtcblxudmFyIF9hbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL2FuZFwiKTtcblxudmFyIF9jb21wYXJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlXCIpO1xuXG52YXIgX2NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlTmF0dXJhbFwiKTtcblxudmFyIF9jb21wYXJlVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVRleHRcIik7XG5cbnZhciBfZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsXCIpO1xuXG52YXIgX2VxdWFsVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxUZXh0XCIpO1xuXG52YXIgX3NtYWxsZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJcIik7XG5cbnZhciBfc21hbGxlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyRXFcIik7XG5cbnZhciBfbGFyZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJcIik7XG5cbnZhciBfbGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlckVxXCIpO1xuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsXCIpO1xuXG52YXIgX3VuZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWxcIik7XG5cbnZhciBfcGFydGl0aW9uU2VsZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdFwiKTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NvcnRcIik7XG5cbnZhciBfbWF4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tYXhcIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9taW5cIik7XG5cbnZhciBfSW1tdXRhYmxlRGVuc2VNYXRyaXggPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9JbW11dGFibGVEZW5zZU1hdHJpeFwiKTtcblxudmFyIF9NYXRyaXhJbmRleCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L01hdHJpeEluZGV4XCIpO1xuXG52YXIgX0ZpYm9uYWNjaUhlYXAgPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9GaWJvbmFjY2lIZWFwXCIpO1xuXG52YXIgX1NwYSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1NwYVwiKTtcblxudmFyIF9Vbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L1VuaXRcIik7XG5cbnZhciBfdW5pdCA9IHJlcXVpcmUoXCIuL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0XCIpO1xuXG52YXIgX3NwYXJzZSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uL3NwYXJzZVwiKTtcblxudmFyIF9jcmVhdGVVbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L2Z1bmN0aW9uL2NyZWF0ZVVuaXRcIik7XG5cbnZhciBfYWNvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zXCIpO1xuXG52YXIgX2Fjb3NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NoXCIpO1xuXG52YXIgX2Fjb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdFwiKTtcblxudmFyIF9hY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290aFwiKTtcblxudmFyIF9hY3NjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2NcIik7XG5cbnZhciBfYWNzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2hcIik7XG5cbnZhciBfYXNlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjXCIpO1xuXG52YXIgX2FzZWNoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNoXCIpO1xuXG52YXIgX2FzaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpblwiKTtcblxudmFyIF9hc2luaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luaFwiKTtcblxudmFyIF9hdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW5cIik7XG5cbnZhciBfYXRhbjIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjJcIik7XG5cbnZhciBfYXRhbmggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmhcIik7XG5cbnZhciBfY29zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc1wiKTtcblxudmFyIF9jb3NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2hcIik7XG5cbnZhciBfY290ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdFwiKTtcblxudmFyIF9jb3RoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGhcIik7XG5cbnZhciBfY3NjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY1wiKTtcblxudmFyIF9jc2NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2hcIik7XG5cbnZhciBfc2VjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY1wiKTtcblxudmFyIF9zZWNoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2hcIik7XG5cbnZhciBfc2luID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpblwiKTtcblxudmFyIF9zaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmhcIik7XG5cbnZhciBfdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhblwiKTtcblxudmFyIF90YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmhcIik7XG5cbnZhciBfc2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhblwiKTtcblxudmFyIF9zZXREaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0RGlzdGluY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0RGlzdGluY3RcIik7XG5cbnZhciBfc2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdFwiKTtcblxudmFyIF9zZXRJc1N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldFwiKTtcblxudmFyIF9zZXRNdWx0aXBsaWNpdHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5XCIpO1xuXG52YXIgX3NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0XCIpO1xuXG52YXIgX3NldFNpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0U2l6ZVwiKTtcblxudmFyIF9zZXRTeW1EaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFN5bURpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0VW5pb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0VW5pb25cIik7XG5cbnZhciBfYWRkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGRcIik7XG5cbnZhciBfaHlwb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90XCIpO1xuXG52YXIgX25vcm0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL25vcm1cIik7XG5cbnZhciBfZG90ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2RvdFwiKTtcblxudmFyIF90cmFjZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFjZVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uXCIpO1xuXG52YXIgX05vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvTm9kZVwiKTtcblxudmFyIF9BY2Nlc3Nvck5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQWNjZXNzb3JOb2RlXCIpO1xuXG52YXIgX0FycmF5Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9BcnJheU5vZGVcIik7XG5cbnZhciBfQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQXNzaWdubWVudE5vZGVcIik7XG5cbnZhciBfQmxvY2tOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZVwiKTtcblxudmFyIF9Db25kaXRpb25hbE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQ29uZGl0aW9uYWxOb2RlXCIpO1xuXG52YXIgX0NvbnN0YW50Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9Db25zdGFudE5vZGVcIik7XG5cbnZhciBfRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9GdW5jdGlvbkFzc2lnbm1lbnROb2RlXCIpO1xuXG52YXIgX0luZGV4Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9JbmRleE5vZGVcIik7XG5cbnZhciBfT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9PYmplY3ROb2RlXCIpO1xuXG52YXIgX09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9PcGVyYXRvck5vZGVcIik7XG5cbnZhciBfUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZVwiKTtcblxudmFyIF9SYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvUmFuZ2VOb2RlXCIpO1xuXG52YXIgX1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1JlbGF0aW9uYWxOb2RlXCIpO1xuXG52YXIgX1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZVwiKTtcblxudmFyIF9GdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlXCIpO1xuXG52YXIgX3BhcnNlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9wYXJzZVwiKTtcblxudmFyIF9jb21waWxlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlXCIpO1xuXG52YXIgX2V2YWx1YXRlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZVwiKTtcblxudmFyIF9ldmFsID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsXCIpO1xuXG52YXIgX1BhcnNlciA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vUGFyc2VyXCIpO1xuXG52YXIgX3BhcnNlciA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyXCIpO1xuXG52YXIgX2x1cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9sdXBcIik7XG5cbnZhciBfcXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2RlY29tcG9zaXRpb24vcXJcIik7XG5cbnZhciBfc2x1ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL3NsdVwiKTtcblxudmFyIF9sdXNvbHZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZVwiKTtcblxudmFyIF9IZWxwID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9IZWxwXCIpO1xuXG52YXIgX0NoYWluID0gcmVxdWlyZShcIi4vdHlwZS9jaGFpbi9DaGFpblwiKTtcblxudmFyIF9oZWxwID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9oZWxwXCIpO1xuXG52YXIgX2NoYWluID0gcmVxdWlyZShcIi4vdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpblwiKTtcblxudmFyIF9kZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZGV0XCIpO1xuXG52YXIgX2ludiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pbnZcIik7XG5cbnZhciBfZWlncyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9laWdzXCIpO1xuXG52YXIgX2V4cG0yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2V4cG1cIik7XG5cbnZhciBfc3FydG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3FydG1cIik7XG5cbnZhciBfZGl2aWRlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGVcIik7XG5cbnZhciBfZGlzdGFuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9kaXN0YW5jZVwiKTtcblxudmFyIF9pbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3RcIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdW1cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhblwiKTtcblxudmFyIF9tZWRpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhblwiKTtcblxudmFyIF9tYWQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2VcIik7XG5cbnZhciBfcXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxXCIpO1xuXG52YXIgX3N0ZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3RkXCIpO1xuXG52YXIgX2NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1wiKTtcblxudmFyIF9jb21iaW5hdGlvbnNXaXRoUmVwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvY29tYmluYXRpb25zV2l0aFJlcFwiKTtcblxudmFyIF9nYW1tYSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hXCIpO1xuXG52YXIgX2ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2ZhY3RvcmlhbFwiKTtcblxudmFyIF9rbGRpdmVyZ2VuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9rbGRpdmVyZ2VuY2VcIik7XG5cbnZhciBfbXVsdGlub21pYWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9tdWx0aW5vbWlhbFwiKTtcblxudmFyIF9wZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9wZXJtdXRhdGlvbnNcIik7XG5cbnZhciBfcGlja1JhbmRvbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3BpY2tSYW5kb21cIik7XG5cbnZhciBfcmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tXCIpO1xuXG52YXIgX3JhbmRvbUludCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludFwiKTtcblxudmFyIF9zdGlybGluZ1MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzJcIik7XG5cbnZhciBfYmVsbE51bWJlcnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzXCIpO1xuXG52YXIgX2NhdGFsYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NhdGFsYW5cIik7XG5cbnZhciBfY29tcG9zaXRpb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NvbXBvc2l0aW9uXCIpO1xuXG52YXIgX3NpbXBsaWZ5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeVwiKTtcblxudmFyIF9kZXJpdmF0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZXJpdmF0aXZlXCIpO1xuXG52YXIgX3JhdGlvbmFsaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZVwiKTtcblxudmFyIF9yZXZpdmVyID0gcmVxdWlyZShcIi4vanNvbi9yZXZpdmVyXCIpO1xuXG52YXIgX3JlcGxhY2VyID0gcmVxdWlyZShcIi4vanNvbi9yZXBsYWNlclwiKTtcblxudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5cbnZhciBfcGh5c2ljYWxDb25zdGFudHMgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvcGh5c2ljYWxDb25zdGFudHNcIik7XG5cbnZhciBfYXBwbHkyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtXCIpO1xuXG52YXIgX2NvbHVtbjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9jb2x1bW4udHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZpbHRlcjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZvckVhY2gyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm1cIik7XG5cbnZhciBfaW5kZXggPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWFwMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21hcC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWF4MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21heC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWVhbjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9tZWFuLnRyYW5zZm9ybVwiKTtcblxudmFyIF9taW4yID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybVwiKTtcblxudmFyIF9yYW5nZTIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9yYW5nZS50cmFuc2Zvcm1cIik7XG5cbnZhciBfcm93MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3Vic2V0MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1YnNldC50cmFuc2Zvcm1cIik7XG5cbnZhciBfY29uY2F0MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3RkMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N0ZC50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3VtMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm1cIik7XG5cbnZhciBfdmFyaWFuY2UyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtXCIpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXAgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2x1cCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnYWJzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnbGFyZ2VyJywgJ2VxdWFsU2NhbGFyJywgJ3VuYXJ5TWludXMnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4JywgJ1NwYSddO1xudmFyIGNyZWF0ZUx1cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIFNwYXJzZU1hdHJpeCA9IF9yZWYuU3BhcnNlTWF0cml4LFxuICAgICAgU3BhID0gX3JlZi5TcGE7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgTGAsIGBVYCkgYW5kIGFcbiAgICogcm93IHBlcm11dGF0aW9uIHZlY3RvciBgcGAgd2hlcmUgYEFbcCw6XSA9IEwgKiBVYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubHVwKEEpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbWzIsIDFdLCBbMSwgNF1dXG4gICAqICAgIGNvbnN0IHIgPSBtYXRoLmx1cChtKVxuICAgKiAgICAvLyByID0ge1xuICAgKiAgICAvLyAgIEw6IFtbMSwgMF0sIFswLjUsIDFdXSxcbiAgICogICAgLy8gICBVOiBbWzIsIDFdLCBbMCwgMy41XV0sXG4gICAqICAgIC8vICAgUDogWzAsIDFdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNsdSwgbHNvbHZlLCBsdXNvbHZlLCB1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gQSAgICBBIHR3byBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgZm9yIHdoaWNoIHRvIGdldCB0aGUgTFVQIGRlY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3tMOiBBcnJheSB8IE1hdHJpeCwgVTogQXJyYXkgfCBNYXRyaXgsIFA6IEFycmF5LjxudW1iZXI+fX0gVGhlIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LCB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXggYW5kIHRoZSBwZXJtdXRhdGlvbiBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIERlbnNlTWF0cml4OiBmdW5jdGlvbiBEZW5zZU1hdHJpeChtKSB7XG4gICAgICByZXR1cm4gX2RlbnNlTFVQKG0pO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9zcGFyc2VMVVAobSk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYSkge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gbHVwLCB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlTFVQKG0pOyAvLyByZXN1bHRcblxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBMOiByLkwudmFsdWVPZigpLFxuICAgICAgICBVOiByLlUudmFsdWVPZigpLFxuICAgICAgICBwOiByLnBcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VMVVAobSkge1xuICAgIC8vIHJvd3MgJiBjb2x1bW5zXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gbS5fc2l6ZVsxXTsgLy8gbWluaW11bSByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbiA9IE1hdGgubWluKHJvd3MsIGNvbHVtbnMpOyAvLyBtYXRyaXggYXJyYXksIGNsb25lIG9yaWdpbmFsIGRhdGFcblxuICAgIHZhciBkYXRhID0gKDAsIF9vYmplY3QuY2xvbmUpKG0uX2RhdGEpOyAvLyBsIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBsZGF0YSA9IFtdO1xuICAgIHZhciBsc2l6ZSA9IFtyb3dzLCBuXTsgLy8gdSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdWRhdGEgPSBbXTtcbiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBwID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBwW2ldID0gaTtcbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBza2lwIGZpcnN0IGNvbHVtbiBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gbWluIGksalxuICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihpLCBqKTsgLy8gdltpLCBqXVxuXG4gICAgICAgICAgdmFyIHMgPSAwOyAvLyBsb29wIHVwIHRvIG1pblxuXG4gICAgICAgICAgZm9yIChrID0gMDsgayA8IG1pbjsgaysrKSB7XG4gICAgICAgICAgICAvLyBzID0gbFtpLCBrXSAtIGRhdGFbaywgal1cbiAgICAgICAgICAgIHMgPSBhZGRTY2FsYXIocywgbXVsdGlwbHlTY2FsYXIoZGF0YVtpXVtrXSwgZGF0YVtrXVtqXSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbaV1bal0gPSBzdWJ0cmFjdChkYXRhW2ldW2pdLCBzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyByb3cgd2l0aCBsYXJnZXIgdmFsdWUgaW4gY3ZlY3Rvciwgcm93ID49IGpcblxuXG4gICAgICB2YXIgcGkgPSBqO1xuICAgICAgdmFyIHBhYnN2ID0gMDtcbiAgICAgIHZhciB2amogPSAwOyAvLyBsb29wIHJvd3NcblxuICAgICAgZm9yIChpID0gajsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBkYXRhIEAgaSwgalxuICAgICAgICB2YXIgdiA9IGRhdGFbaV1bal07IC8vIGFic29sdXRlIHZhbHVlXG5cbiAgICAgICAgdmFyIGFic3YgPSBhYnModik7IC8vIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdGUgdmFsdWVcblxuICAgICAgICBpZiAobGFyZ2VyKGFic3YsIHBhYnN2KSkge1xuICAgICAgICAgIC8vIHN0b3JlIHJvd1xuICAgICAgICAgIHBpID0gaTsgLy8gdXBkYXRlIG1heCB2YWx1ZVxuXG4gICAgICAgICAgcGFic3YgPSBhYnN2OyAvLyB2YWx1ZSBAIFtqLCBqXVxuXG4gICAgICAgICAgdmpqID0gdjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKVxuXG5cbiAgICAgIGlmIChqICE9PSBwaSkge1xuICAgICAgICAvLyBzd2FwIHZhbHVlcyBqIDwtPiBwaSBpbiBwXG4gICAgICAgIHBbal0gPSBbcFtwaV0sIHBbcGldID0gcFtqXV1bMF07IC8vIHN3YXAgaiA8LT4gcGkgaW4gZGF0YVxuXG4gICAgICAgIERlbnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgZGF0YSk7XG4gICAgICB9IC8vIGNoZWNrIGNvbHVtbiBpcyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAvLyBsb29wIHJvd3MgKGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4KVxuICAgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHZhbHVlIEAgaSwgalxuICAgICAgICAgIHZhciB2aWogPSBkYXRhW2ldW2pdO1xuXG4gICAgICAgICAgaWYgKCFlcXVhbFNjYWxhcih2aWosIDApKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZGF0YVxuICAgICAgICAgICAgZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihkYXRhW2ldW2pdLCB2amopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBpbml0aWFsaXplIHJvdyBpbiBhcnJheXNcbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgaWYgKGkgPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAvLyBVXG4gICAgICAgICAgICB1ZGF0YVtpXSA9IFtdO1xuICAgICAgICAgIH0gLy8gTFxuXG5cbiAgICAgICAgICBsZGF0YVtpXSA9IFtdO1xuICAgICAgICB9IC8vIGNoZWNrIHdlIGFyZSBpbiB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgIGlmIChpIDwgaikge1xuICAgICAgICAgIC8vIGNoZWNrIHJvdyBleGlzdHMgaW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIC8vIFVcbiAgICAgICAgICAgIHVkYXRhW2ldW2pdID0gZGF0YVtpXVtqXTtcbiAgICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgICAgaWYgKGogPCByb3dzKSB7XG4gICAgICAgICAgICAvLyBMXG4gICAgICAgICAgICBsZGF0YVtpXVtqXSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gZGlhZ29uYWwgdmFsdWVcblxuXG4gICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgIGlmIChpIDwgY29sdW1ucykge1xuICAgICAgICAgICAgLy8gVVxuICAgICAgICAgICAgdWRhdGFbaV1bal0gPSBkYXRhW2ldW2pdO1xuICAgICAgICAgIH0gLy8gY2hlY2sgY29sdW1uIGV4aXN0cyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgICAgICBpZiAoaiA8IHJvd3MpIHtcbiAgICAgICAgICAgIC8vIExcbiAgICAgICAgICAgIGxkYXRhW2ldW2pdID0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAvLyBVXG4gICAgICAgICAgdWRhdGFbaV1bal0gPSAwO1xuICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAgIC8vIExcbiAgICAgICAgICBsZGF0YVtpXVtqXSA9IGRhdGFbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGwgbWF0cml4XG5cblxuICAgIHZhciBsID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGxkYXRhLFxuICAgICAgc2l6ZTogbHNpemVcbiAgICB9KTsgLy8gdSBtYXRyaXhcblxuICAgIHZhciB1ID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IHVkYXRhLFxuICAgICAgc2l6ZTogdXNpemVcbiAgICB9KTsgLy8gcCB2ZWN0b3JcblxuICAgIHZhciBwdiA9IFtdO1xuXG4gICAgZm9yIChpID0gMCwgbiA9IHAubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBwdltwW2ldXSA9IGk7XG4gICAgfSAvLyByZXR1cm4gbWF0cmljZXNcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEw6IGwsXG4gICAgICBVOiB1LFxuICAgICAgcDogcHYsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5QOiAnICsgdGhpcy5wO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlTFVQKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1uc1xuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIG1pbmltdW0gcm93cyBhbmQgY29sdW1uc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzLCBjb2x1bW5zKTsgLy8gbWF0cml4IGFycmF5cyAod2lsbCBub3QgYmUgbW9kaWZpZWQsIHRoYW5rcyB0byBwZXJtdXRhdGlvbiB2ZWN0b3IpXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIGwgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGx2YWx1ZXMgPSBbXTtcbiAgICB2YXIgbGluZGV4ID0gW107XG4gICAgdmFyIGxwdHIgPSBbXTtcbiAgICB2YXIgbHNpemUgPSBbcm93cywgbl07IC8vIHUgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHV2YWx1ZXMgPSBbXTtcbiAgICB2YXIgdWluZGV4ID0gW107XG4gICAgdmFyIHVwdHIgPSBbXTtcbiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JzLCAoY3VycmVudCBpbmRleCAtPiBvcmlnaW5hbCBpbmRleCkgYW5kIChvcmlnaW5hbCBpbmRleCAtPiBjdXJyZW50IGluZGV4KVxuXG4gICAgdmFyIHB2Q28gPSBbXTtcbiAgICB2YXIgcHZPYyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgcHZDb1tpXSA9IGk7XG4gICAgICBwdk9jW2ldID0gaTtcbiAgICB9IC8vIHN3YXAgaW5kaWNlcyBpbiBwZXJtdXRhdGlvbiB2ZWN0b3JzIChjb25kaXRpb24geCA8IHkpIVxuXG5cbiAgICB2YXIgc3dhcEluZGVjZXMgPSBmdW5jdGlvbiBzd2FwSW5kZWNlcyh4LCB5KSB7XG4gICAgICAvLyBmaW5kIHB2IGluZGVjZXMgZ2V0dGluZyBkYXRhIGZyb20geCBhbmQgeVxuICAgICAgdmFyIGt4ID0gcHZPY1t4XTtcbiAgICAgIHZhciBreSA9IHB2T2NbeV07IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3IgY3VycmVudCAtPiBvcmlnaW5hbFxuXG4gICAgICBwdkNvW2t4XSA9IHk7XG4gICAgICBwdkNvW2t5XSA9IHg7IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3Igb3JpZ2luYWwgLT4gY3VycmVudFxuXG4gICAgICBwdk9jW3hdID0ga3k7XG4gICAgICBwdk9jW3ldID0ga3g7XG4gICAgfTsgLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgLy8gc3BhcnNlIGFjY3VtdWxhdG9yXG4gICAgICB2YXIgc3BhID0gbmV3IFNwYSgpOyAvLyBjaGVjayBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBoYXMgYSB2YWx1ZSBAIGNvbHVtbiBqXG5cbiAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICAgIGxwdHIucHVzaChsdmFsdWVzLmxlbmd0aCk7IC8vIGZpcnN0IHZhbHVlIGluIGogY29sdW1uIGZvciBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG4gICAgICAgIGx2YWx1ZXMucHVzaCgxKTtcbiAgICAgICAgbGluZGV4LnB1c2goaik7XG4gICAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgICB1cHRyLnB1c2godXZhbHVlcy5sZW5ndGgpOyAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG5cbiAgICAgIHZhciBrMCA9IHB0cltqXTtcbiAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGNvcHkgY29sdW1uIGogaW50byBzcGFyc2UgYWNjdW11bGF0b3JcblxuICAgICAgZm9yIChrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gaW5kZXhba107IC8vIGNvcHkgY29sdW1uIHZhbHVlcyBpbnRvIHNwYXJzZSBhY2N1bXVsYXRvciAodXNlIHBlcm11dGF0aW9uIHZlY3RvcilcblxuICAgICAgICBzcGEuc2V0KHB2Q29baV0sIHZhbHVlc1trXSk7XG4gICAgICB9IC8vIHNraXAgZmlyc3QgY29sdW1uIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIC8vIGxvb3Agcm93cyBpbiBjb2x1bW4gaiAoYWJvdmUgZGlhZ29uYWwpXG4gICAgICAgIHNwYS5mb3JFYWNoKDAsIGogLSAxLCBmdW5jdGlvbiAoaywgdmtqKSB7XG4gICAgICAgICAgLy8gbG9vcCByb3dzIGluIGNvbHVtbiBrIChMKVxuICAgICAgICAgIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyhrLCBsdmFsdWVzLCBsaW5kZXgsIGxwdHIsIGZ1bmN0aW9uIChpLCB2aWspIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHJvdyBpcyBiZWxvdyBrXG4gICAgICAgICAgICBpZiAoaSA+IGspIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHNwYSB2YWx1ZVxuICAgICAgICAgICAgICBzcGEuYWNjdW11bGF0ZShpLCB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKHZpaywgdmtqKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gLy8gcm93IHdpdGggbGFyZ2VyIHZhbHVlIGluIHNwYSwgcm93ID49IGpcblxuXG4gICAgICB2YXIgcGkgPSBqO1xuICAgICAgdmFyIHZqaiA9IHNwYS5nZXQoaik7XG4gICAgICB2YXIgcGFic3YgPSBhYnModmpqKTsgLy8gbG9vcCB2YWx1ZXMgaW4gc3BhIChvcmRlciBieSByb3csIGJlbG93IGRpYWdvbmFsKVxuXG4gICAgICBzcGEuZm9yRWFjaChqICsgMSwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICAgIC8vIGFic29sdXRlIHZhbHVlXG4gICAgICAgIHZhciBhYnN2ID0gYWJzKHYpOyAvLyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gcGl2b3RlIHZhbHVlXG5cbiAgICAgICAgaWYgKGxhcmdlcihhYnN2LCBwYWJzdikpIHtcbiAgICAgICAgICAvLyBzdG9yZSByb3dcbiAgICAgICAgICBwaSA9IHg7IC8vIHVwZGF0ZSBtYXggdmFsdWVcblxuICAgICAgICAgIHBhYnN2ID0gYWJzdjsgLy8gdmFsdWUgQCBbaiwgal1cblxuICAgICAgICAgIHZqaiA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pOyAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKVxuXG4gICAgICBpZiAoaiAhPT0gcGkpIHtcbiAgICAgICAgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gTFxuICAgICAgICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzKGosIHBpLCBsc2l6ZVsxXSwgbHZhbHVlcywgbGluZGV4LCBscHRyKTsgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gVVxuXG5cbiAgICAgICAgU3BhcnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgdXNpemVbMV0sIHV2YWx1ZXMsIHVpbmRleCwgdXB0cik7IC8vIHN3YXAgdmFsdWVzIGluIHNwYVxuXG5cbiAgICAgICAgc3BhLnN3YXAoaiwgcGkpOyAvLyB1cGRhdGUgcGVybXV0YXRpb24gdmVjdG9yIChzd2FwIHZhbHVlcyBAIGosIHBpKVxuXG4gICAgICAgIHN3YXBJbmRlY2VzKGosIHBpKTtcbiAgICAgIH0gLy8gbG9vcCB2YWx1ZXMgaW4gc3BhIChvcmRlciBieSByb3cpXG5cblxuICAgICAgc3BhLmZvckVhY2goMCwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICAgIC8vIGNoZWNrIHdlIGFyZSBhYm92ZSBkaWFnb25hbFxuICAgICAgICBpZiAoeCA8PSBqKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgdXZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgIHVpbmRleC5wdXNoKHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSB2YWx1ZVxuICAgICAgICAgIHYgPSBkaXZpZGVTY2FsYXIodiwgdmpqKTsgLy8gY2hlY2sgdmFsdWUgaXMgbm9uIHplcm9cblxuICAgICAgICAgIGlmICghZXF1YWxTY2FsYXIodiwgMCkpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgICAgbHZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgICAgbGluZGV4LnB1c2goeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgX2xvb3AoKTtcbiAgICB9IC8vIHVwZGF0ZSBwdHJzXG5cblxuICAgIHVwdHIucHVzaCh1dmFsdWVzLmxlbmd0aCk7XG4gICAgbHB0ci5wdXNoKGx2YWx1ZXMubGVuZ3RoKTsgLy8gcmV0dXJuIG1hdHJpY2VzXG5cbiAgICByZXR1cm4ge1xuICAgICAgTDogbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICAgIHZhbHVlczogbHZhbHVlcyxcbiAgICAgICAgaW5kZXg6IGxpbmRleCxcbiAgICAgICAgcHRyOiBscHRyLFxuICAgICAgICBzaXplOiBsc2l6ZVxuICAgICAgfSksXG4gICAgICBVOiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgICAgdmFsdWVzOiB1dmFsdWVzLFxuICAgICAgICBpbmRleDogdWluZGV4LFxuICAgICAgICBwdHI6IHVwdHIsXG4gICAgICAgIHNpemU6IHVzaXplXG4gICAgICB9KSxcbiAgICAgIHA6IHB2Q28sXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5QOiAnICsgdGhpcy5wO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXAgPSBjcmVhdGVMdXA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVFyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAncXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ3plcm9zJywgJ2lkZW50aXR5JywgJ2lzWmVybycsICdlcXVhbCcsICdzaWduJywgJ3NxcnQnLCAnY29uaicsICd1bmFyeU1pbnVzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnY29tcGxleCddO1xudmFyIGNyZWF0ZVFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBzaWduID0gX3JlZi5zaWduLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIGNvbmogPSBfcmVmLmNvbmosXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGNvbXBsZXggPSBfcmVmLmNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgTWF0cml4IFFSIGRlY29tcG9zaXRpb24uIE1hdHJpeCBgQWAgaXMgZGVjb21wb3NlZCBpblxuICAgKiB0d28gbWF0cmljZXMgKGBRYCwgYFJgKSB3aGVyZSBgUWAgaXMgYW5cbiAgICogb3J0aG9nb25hbCBtYXRyaXggYW5kIGBSYCBpcyBhbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnFyKEEpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbXG4gICAqICAgICAgWzEsIC0xLCAgNF0sXG4gICAqICAgICAgWzEsICA0LCAtMl0sXG4gICAqICAgICAgWzEsICA0LCAgMl0sXG4gICAqICAgICAgWzEsICAtMSwgMF1cbiAgICogICAgXVxuICAgKiAgICBjb25zdCByZXN1bHQgPSBtYXRoLnFyKG0pXG4gICAqICAgIC8vIHIgPSB7XG4gICAqICAgIC8vICAgUTogW1xuICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgICAwLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgIDAuNSwgIC0wLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgIDAuNSwgICAwLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgIC0wLjVdLFxuICAgKiAgICAvLyAgIF0sXG4gICAqICAgIC8vICAgUjogW1xuICAgKiAgICAvLyAgICAgWzIsIDMsICAyXSxcbiAgICogICAgLy8gICAgIFswLCA1LCAtMl0sXG4gICAqICAgIC8vICAgICBbMCwgMCwgIDRdLFxuICAgKiAgICAvLyAgICAgWzAsIDAsICAwXVxuICAgKiAgICAvLyAgIF1cbiAgICogICAgLy8gfVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBsdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IEEgICAgQSB0d28gZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5XG4gICAqIGZvciB3aGljaCB0byBnZXQgdGhlIFFSIGRlY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3tROiBBcnJheSB8IE1hdHJpeCwgUjogQXJyYXkgfCBNYXRyaXh9fSBROiB0aGUgb3J0aG9nb25hbFxuICAgKiBtYXRyaXggYW5kIFI6IHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIF9leHRlbmRzKHR5cGVkKG5hbWUsIHtcbiAgICBEZW5zZU1hdHJpeDogZnVuY3Rpb24gRGVuc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9kZW5zZVFSKG0pO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9zcGFyc2VRUihtKTtcbiAgICB9LFxuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheShhKSB7XG4gICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXlcbiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyBsdXAsIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cblxuICAgICAgdmFyIHIgPSBfZGVuc2VRUihtKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUTogci5RLnZhbHVlT2YoKSxcbiAgICAgICAgUjogci5SLnZhbHVlT2YoKVxuICAgICAgfTtcbiAgICB9XG4gIH0pLCB7XG4gICAgX2RlbnNlUVJpbXBsOiBfZGVuc2VRUmltcGxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlUVJpbXBsKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1ucyAobSB4IG4pXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdOyAvLyBtXG5cbiAgICB2YXIgY29scyA9IG0uX3NpemVbMV07IC8vIG5cblxuICAgIHZhciBRID0gaWRlbnRpdHkoW3Jvd3NdLCAnZGVuc2UnKTtcbiAgICB2YXIgUWRhdGEgPSBRLl9kYXRhO1xuICAgIHZhciBSID0gbS5jbG9uZSgpO1xuICAgIHZhciBSZGF0YSA9IFIuX2RhdGE7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrO1xuICAgIHZhciB3ID0gemVyb3MoW3Jvd3NdLCAnJyk7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgTWF0aC5taW4oY29scywgcm93cyk7ICsraykge1xuICAgICAgLypcbiAgICAgICAqICoqay10aCBIb3VzZWhvbGQgbWF0cml4KipcbiAgICAgICAqXG4gICAgICAgKiBUaGUgbWF0cml4IEkgLSAyKnYqdHJhbnNwb3NlKHYpXG4gICAgICAgKiB4ICAgICA9IGZpcnN0IGNvbHVtbiBvZiBBXG4gICAgICAgKiB4MSAgICA9IGZpcnN0IGVsZW1lbnQgb2YgeFxuICAgICAgICogYWxwaGEgPSB4MSAvIHx4MXwgKiB8eHxcbiAgICAgICAqIGUxICAgID0gdHJhbnBvc2UoWzEsIDAsIDAsIC4uLl0pXG4gICAgICAgKiB1ICAgICA9IHggLSBhbHBoYSAqIGUxXG4gICAgICAgKiB2ICAgICA9IHUgLyB8dXxcbiAgICAgICAqXG4gICAgICAgKiBIb3VzZWhvbGQgbWF0cml4ID0gSSAtIDIgKiB2ICogdHJhbnBvc2UodilcbiAgICAgICAqXG4gICAgICAgKiAgKiBJbml0aWFsbHkgUSA9IEkgYW5kIFIgPSBBLlxuICAgICAgICogICogSG91c2Vob2xkIG1hdHJpeCBpcyBhIHJlZmxlY3Rpb24gaW4gYSBwbGFuZSBub3JtYWwgdG8gdiB3aGljaFxuICAgICAgICogICAgd2lsbCB6ZXJvIG91dCBhbGwgYnV0IHRoZSB0b3AgcmlnaHQgZWxlbWVudCBpbiBSLlxuICAgICAgICogICogQXBwcGx5aW5nIHJlZmxlY3Rpb24gdG8gYm90aCBRIGFuZCBSIHdpbGwgbm90IGNoYW5nZSBwcm9kdWN0LlxuICAgICAgICogICogUmVwZWF0IHRoaXMgcHJvY2VzcyBvbiB0aGUgKDEsMSkgbWlub3IgdG8gZ2V0IFIgYXMgYW4gdXBwZXJcbiAgICAgICAqICAgIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgICAgICogICogUmVmbGVjdGlvbnMgbGVhdmUgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29sdW1ucyBvZiBRIHVuY2hhbmdlZFxuICAgICAgICogICAgc28gUSByZW1haW5zIG90aG9nYW5hbC5cbiAgICAgICAqXG4gICAgICAgKi9cbiAgICAgIHZhciBwaXZvdCA9IFJkYXRhW2tdW2tdO1xuICAgICAgdmFyIHNnbiA9IHVuYXJ5TWludXMoZXF1YWwocGl2b3QsIDApID8gMSA6IHNpZ24ocGl2b3QpKTtcbiAgICAgIHZhciBjb25qU2duID0gY29uaihzZ24pO1xuICAgICAgdmFyIGFscGhhU3F1YXJlZCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgYWxwaGFTcXVhcmVkID0gYWRkU2NhbGFyKGFscGhhU3F1YXJlZCwgbXVsdGlwbHlTY2FsYXIoUmRhdGFbaV1ba10sIGNvbmooUmRhdGFbaV1ba10pKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhbHBoYSA9IG11bHRpcGx5U2NhbGFyKHNnbiwgc3FydChhbHBoYVNxdWFyZWQpKTtcblxuICAgICAgaWYgKCFpc1plcm8oYWxwaGEpKSB7XG4gICAgICAgIC8vIGZpcnN0IGVsZW1lbnQgaW4gdmVjdG9yIHVcbiAgICAgICAgdmFyIHUxID0gc3VidHJhY3QocGl2b3QsIGFscGhhKTsgLy8gdyA9IHYgKiB1MSAvIHx1fCAgICAob25seSBlbGVtZW50cyBrIHRvIChyb3dzLTEpIGFyZSB1c2VkKVxuXG4gICAgICAgIHdba10gPSAxO1xuXG4gICAgICAgIGZvciAoaSA9IGsgKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgd1tpXSA9IGRpdmlkZVNjYWxhcihSZGF0YVtpXVtrXSwgdTEpO1xuICAgICAgICB9IC8vIHRhdSA9IC0gY29uaih1MSAvIGFscGhhKVxuXG5cbiAgICAgICAgdmFyIHRhdSA9IHVuYXJ5TWludXMoY29uaihkaXZpZGVTY2FsYXIodTEsIGFscGhhKSkpO1xuICAgICAgICB2YXIgcyA9IHZvaWQgMDtcbiAgICAgICAgLypcbiAgICAgICAgICogdGF1IGFuZCB3IGhhdmUgYmVlbiBjaG9vc2VuIHNvIHRoYXRcbiAgICAgICAgICpcbiAgICAgICAgICogMiAqIHYgKiB0cmFucG9zZSh2KSA9IHRhdSAqIHcgKiB0cmFucG9zZSh3KVxuICAgICAgICAgKi9cblxuICAgICAgICAvKlxuICAgICAgICAgKiAtLSBjYWxjdWxhdGUgUiA9IFIgLSB0YXUgKiB3ICogdHJhbnBvc2UodykgKiBSIC0tXG4gICAgICAgICAqIE9ubHkgZG8gY2FsY3VsYXRpb24gd2l0aCByb3dzIGsgdG8gKHJvd3MtMSlcbiAgICAgICAgICogQWRkaXRpb25hbGx5IGNvbHVtbnMgMCB0byAoay0xKSB3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoaXNcbiAgICAgICAgICogICBtdWx0aXBsaWNhdGlvbiBzbyBkbyBub3QgYm90aGVyIHJlY2FsY3VsYXRpbmcgdGhlbVxuICAgICAgICAgKi9cblxuICAgICAgICBmb3IgKGogPSBrOyBqIDwgY29sczsgaisrKSB7XG4gICAgICAgICAgcyA9IDAuMDsgLy8gY2FsY3VsYXRlIGp0aCBlbGVtZW50IG9mIFt0cmFucG9zZSh3KSAqIFJdXG5cbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKGNvbmood1tpXSksIFJkYXRhW2ldW2pdKSk7XG4gICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGp0aCBlbGVtZW50IG9mIFt0YXUgKiB0cmFuc3Bvc2UodykgKiBSXVxuXG5cbiAgICAgICAgICBzID0gbXVsdGlwbHlTY2FsYXIocywgdGF1KTtcblxuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIFJkYXRhW2ldW2pdID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoUmRhdGFbaV1bal0sIG11bHRpcGx5U2NhbGFyKHdbaV0sIHMpKSwgY29ualNnbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICAqIC0tIGNhbGN1bGF0ZSBRID0gUSAtIHRhdSAqIFEgKiB3ICogdHJhbnNwb3NlKHcpIC0tXG4gICAgICAgICAqIFEgaXMgYSBzcXVhcmUgbWF0cml4IChyb3dzIHggcm93cylcbiAgICAgICAgICogT25seSBkbyBjYWxjdWxhdGlvbiB3aXRoIGNvbHVtbnMgayB0byAocm93cy0xKVxuICAgICAgICAgKiBBZGRpdGlvbmFsbHkgcm93cyAwIHRvIChrLTEpIHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhpc1xuICAgICAgICAgKiAgIG11bHRpcGxpY2F0aW9uIHNvIGRvIG5vdCBib3RoZXIgcmVjYWxjdWxhdGluZyB0aGVtXG4gICAgICAgICAqL1xuXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIHMgPSAwLjA7IC8vIGNhbGN1bGF0ZSBpdGggZWxlbWVudCBvZiBbUSAqIHddXG5cbiAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgcm93czsgaisrKSB7XG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKFFkYXRhW2ldW2pdLCB3W2pdKSk7XG4gICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGl0aCBlbGVtZW50IG9mIFt0YXUgKiBRICogd11cblxuXG4gICAgICAgICAgcyA9IG11bHRpcGx5U2NhbGFyKHMsIHRhdSk7XG5cbiAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgcm93czsgKytqKSB7XG4gICAgICAgICAgICBRZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdChRZGF0YVtpXVtqXSwgbXVsdGlwbHlTY2FsYXIocywgY29uaih3W2pdKSkpLCBjb25qU2duKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBtYXRyaWNlc1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgUTogUSxcbiAgICAgIFI6IFIsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnUTogJyArIHRoaXMuUS50b1N0cmluZygpICsgJ1xcblI6ICcgKyB0aGlzLlIudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlbnNlUVIobSkge1xuICAgIHZhciByZXQgPSBfZGVuc2VRUmltcGwobSk7XG5cbiAgICB2YXIgUmRhdGEgPSByZXQuUi5fZGF0YTtcblxuICAgIGlmIChtLl9kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB6ZXJvID0gUmRhdGFbMF1bMF0udHlwZSA9PT0gJ0NvbXBsZXgnID8gY29tcGxleCgwKSA6IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICYmIGogPCAoUmRhdGFbMF0gfHwgW10pLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgUmRhdGFbaV1bal0gPSB6ZXJvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zcGFyc2VRUihtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdxciBub3QgaW1wbGVtZW50ZWQgZm9yIHNwYXJzZSBtYXRyaWNlcyB5ZXQnKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVFyID0gY3JlYXRlUXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNsdSA9IHZvaWQgMDtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc1NxciA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NTcXJcIik7XG5cbnZhciBfY3NMdSA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NMdVwiKTtcblxudmFyIG5hbWUgPSAnc2x1JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlU2x1ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZSxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGNzU3FyID0gKDAsIF9jc1Nxci5jcmVhdGVDc1Nxcikoe1xuICAgIGFkZDogYWRkLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgdmFyIGNzTHUgPSAoMCwgX2NzTHUuY3JlYXRlQ3NMdSkoe1xuICAgIGFiczogYWJzLFxuICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gICAgbGFyZ2VyOiBsYXJnZXIsXG4gICAgbGFyZ2VyRXE6IGxhcmdlckVxLFxuICAgIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBTcGFyc2UgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBmdWxsIHBpdm90aW5nLiBTcGFyc2UgTWF0cml4IGBBYCBpcyBkZWNvbXBvc2VkIGluIHR3byBtYXRyaWNlcyAoYExgLCBgVWApIGFuZCB0d28gcGVybXV0YXRpb24gdmVjdG9ycyAoYHBpbnZgLCBgcWApIHdoZXJlXG4gICAqXG4gICAqIGBQICogQSAqIFEgPSBMICogVWBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNsdShBLCBvcmRlciwgdGhyZXNob2xkKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IG1hdGguc3BhcnNlKFtbNCwzXSwgWzYsIDNdXSlcbiAgICogICAgbWF0aC5zbHUoQSwgMSwgMC4wMDEpXG4gICAqICAgIC8vIHJldHVybnM6XG4gICAqICAgIC8vIHtcbiAgICogICAgLy8gICBMOiBbWzEsIDBdLCBbMS41LCAxXV1cbiAgICogICAgLy8gICBVOiBbWzQsIDNdLCBbMCwgLTEuNV1dXG4gICAqICAgIC8vICAgcDogWzAsIDFdXG4gICAqICAgIC8vICAgcTogWzAsIDFdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgbHNvbHZlLCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtTcGFyc2VNYXRyaXh9IEEgICAgICAgICAgICAgIEEgdHdvIGRpbWVuc2lvbmFsIHNwYXJzZSBtYXRyaXggZm9yIHdoaWNoIHRvIGdldCB0aGUgTFUgZGVjb21wb3NpdGlvbi5cbiAgICogQHBhcmFtIHtOdW1iZXJ9ICAgICAgIG9yZGVyICAgICAgICAgIFRoZSBTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXI6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAtIE5hdHVyYWwgb3JkZXJpbmcsIG5vIHBlcm11dGF0aW9uIHZlY3RvciBxIGlzIHJldHVybmVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIE1hdHJpeCBtdXN0IGJlIHNxdWFyZSwgc3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWxpc2lzIGlzIHBlcmZvcm1lZCBvbiBNID0gQSArIEEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEnICogQS4gRGVuc2UgY29sdW1ucyBmcm9tIEEnIGFyZSBkcm9wcGVkLCBBIHJlY3JlYXRlZCBmcm9tIEEnLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFwcHJvcHJpYXRlZm9yIExVIGZhY3Rvcml6YXRpb24gb2YgdW5zeW1tZXRyaWMgbWF0cmljZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEnICogQS4gVGhpcyBpcyBiZXN0IHVzZWQgZm9yIExVIGZhY3Rvcml6YXRpb24gaXMgbWF0cml4IE0gaGFzIG5vIGRlbnNlIHJvd3MuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgZGVuc2Ugcm93IGlzIGEgcm93IHdpdGggbW9yZSB0aGFuIDEwKnNxcihjb2x1bW5zKSBlbnRyaWVzLlxuICAgKiBAcGFyYW0ge051bWJlcn0gICAgICAgdGhyZXNob2xkICAgICAgIFBhcnRpYWwgcGl2b3RpbmcgdGhyZXNob2xkICgxIGZvciBwYXJ0aWFsIHBpdm90aW5nKVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCwgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IGFuZCB0aGUgcGVybXV0YXRpb24gdmVjdG9ycy5cbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlck51bWJlcihhLCBvcmRlciwgdGhyZXNob2xkKSB7XG4gICAgICAvLyB2ZXJpZnkgb3JkZXJcbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShvcmRlcikgfHwgb3JkZXIgPCAwIHx8IG9yZGVyID4gMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bWJvbGljIE9yZGVyaW5nIGFuZCBBbmFseXNpcyBvcmRlciBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyIGluIHRoZSBpbnRlcnZhbCBbMCwgM10nKTtcbiAgICAgIH0gLy8gdmVyaWZ5IHRocmVzaG9sZFxuXG5cbiAgICAgIGlmICh0aHJlc2hvbGQgPCAwIHx8IHRocmVzaG9sZCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCBtdXN0IGJlIGEgbnVtYmVyIGZyb20gMCB0byAxJyk7XG4gICAgICB9IC8vIHBlcmZvcm0gc3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzXG5cblxuICAgICAgdmFyIHMgPSBjc1NxcihvcmRlciwgYSwgZmFsc2UpOyAvLyBwZXJmb3JtIGx1IGRlY29tcG9zaXRpb25cblxuICAgICAgdmFyIGYgPSBjc0x1KGEsIHMsIHRocmVzaG9sZCk7IC8vIHJldHVybiBkZWNvbXBvc2l0aW9uXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIEw6IGYuTCxcbiAgICAgICAgVTogZi5VLFxuICAgICAgICBwOiBmLnBpbnYsXG4gICAgICAgIHE6IHMucSxcbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5wOiAnICsgdGhpcy5wLnRvU3RyaW5nKCkgKyAodGhpcy5xID8gJ1xcbnE6ICcgKyB0aGlzLnEudG9TdHJpbmcoKSA6ICcnKSArICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2x1ID0gY3JlYXRlU2x1OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXJpdmF0aXZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGVyaXZhdGl2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAncGFyc2UnLCAnc2ltcGxpZnknLCAnZXF1YWwnLCAnaXNaZXJvJywgJ251bWVyaWMnLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnUGFyZW50aGVzaXNOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVEZXJpdmF0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgc2ltcGxpZnkgPSBfcmVmLnNpbXBsaWZ5LFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLFxuICAgICAgQ29uc3RhbnROb2RlID0gX3JlZi5Db25zdGFudE5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgUGFyZW50aGVzaXNOb2RlID0gX3JlZi5QYXJlbnRoZXNpc05vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuXG4gIC8qKlxuICAgKiBUYWtlcyB0aGUgZGVyaXZhdGl2ZSBvZiBhbiBleHByZXNzaW9uIGV4cHJlc3NlZCBpbiBwYXJzZXIgTm9kZXMuXG4gICAqIFRoZSBkZXJpdmF0aXZlIHdpbGwgYmUgdGFrZW4gb3ZlciB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaW4gdGhlXG4gICAqIHNlY29uZCBwYXJhbWV0ZXIuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYWJsZXMgaW4gdGhlIGV4cHJlc3Npb24sXG4gICAqIGl0IHdpbGwgcmV0dXJuIGEgcGFydGlhbCBkZXJpdmF0aXZlLlxuICAgKlxuICAgKiBUaGlzIHVzZXMgcnVsZXMgb2YgZGlmZmVyZW50aWF0aW9uIHdoaWNoIGNhbiBiZSBmb3VuZCBoZXJlOlxuICAgKlxuICAgKiAtIFtEaWZmZXJlbnRpYXRpb24gcnVsZXMgKFdpa2lwZWRpYSldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RpZmZlcmVudGlhdGlvbl9ydWxlcylcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSlcbiAgICogICAgIGRlcml2YXRpdmUoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKCd4XjInLCAneCcpICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSB7MiAqIHh9XG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3heMicsICd4Jywge3NpbXBsaWZ5OiBmYWxzZX0pICAvLyBOb2RlIHsyICogMSAqIHggXiAoMiAtIDEpXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3NpbigyeCknLCAneCcpKSAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogY29zKDIgKiB4KX1cbiAgICogICAgIG1hdGguZGVyaXZhdGl2ZSgnMip4JywgJ3gnKS5ldmFsdWF0ZSgpICAgICAgICAgIC8vIG51bWJlciAyXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3heMicsICd4JykuZXZhbHVhdGUoe3g6IDR9KSAgICAvLyBudW1iZXIgOFxuICAgKiAgICAgY29uc3QgZiA9IG1hdGgucGFyc2UoJ3heMicpXG4gICAqICAgICBjb25zdCB4ID0gbWF0aC5wYXJzZSgneCcpXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoZiwgeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogeH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzaW1wbGlmeSwgcGFyc2UsIGV2YWx1YXRlXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgICAgICAgIFRoZSBleHByZXNzaW9uIHRvIGRpZmZlcmVudGlhdGVcbiAgICogQHBhcmFtICB7U3ltYm9sTm9kZSB8IHN0cmluZ30gdmFyaWFibGUgVGhlIHZhcmlhYmxlIG92ZXIgd2hpY2ggdG8gZGlmZmVyZW50aWF0ZVxuICAgKiBAcGFyYW0gIHt7c2ltcGxpZnk6IGJvb2xlYW59fSBbb3B0aW9uc11cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgaXMgb25lIG9wdGlvbiBhdmFpbGFibGUsIGBzaW1wbGlmeWAsIHdoaWNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRydWUgYnkgZGVmYXVsdC4gV2hlbiBmYWxzZSwgb3V0cHV0IHdpbGwgbm90XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNpbXBsaWZpZWQuXG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9ICAgIFRoZSBkZXJpdmF0aXZlIG9mIGBleHByYFxuICAgKi9cbiAgdmFyIGRlcml2YXRpdmUgPSB0eXBlZCgnZGVyaXZhdGl2ZScsIHtcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZVN5bWJvbE5vZGVPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjb25zdE5vZGVzID0ge307XG4gICAgICBjb25zdFRhZyhjb25zdE5vZGVzLCBleHByLCB2YXJpYWJsZS5uYW1lKTtcblxuICAgICAgdmFyIHJlcyA9IF9kZXJpdmF0aXZlKGV4cHIsIGNvbnN0Tm9kZXMpO1xuXG4gICAgICByZXR1cm4gb3B0aW9ucy5zaW1wbGlmeSA/IHNpbXBsaWZ5KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSc6IGZ1bmN0aW9uIE5vZGVTeW1ib2xOb2RlKGV4cHIsIHZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSwge1xuICAgICAgICBzaW1wbGlmeTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBTeW1ib2xOb2RlJzogZnVuY3Rpb24gc3RyaW5nU3ltYm9sTm9kZShleHByLCB2YXJpYWJsZSkge1xuICAgICAgcmV0dXJuIGRlcml2YXRpdmUocGFyc2UoZXhwciksIHZhcmlhYmxlKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIFN5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ1N5bWJvbE5vZGVPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCB2YXJpYWJsZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBzdHJpbmcnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmcoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSkpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmdPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE5vZGVTdHJpbmcoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKGV4cHIsIHBhcnNlKHZhcmlhYmxlKSk7XG4gICAgfSxcbiAgICAnTm9kZSwgc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlU3RyaW5nT2JqZWN0KGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpO1xuICAgIH0gLy8gVE9ETzogcmVwbGFjZSB0aGUgOCBzaWduYXR1cmVzIGFib3ZlIHdpdGggNCBhcyBzb29uIGFzIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIG9wdGlvbmFsIGFyZ3VtZW50c1xuXG4gICAgLyogVE9ETzogaW1wbGVtZW50IGFuZCB0ZXN0IHN5bnRheCB3aXRoIG9yZGVyIG9mIGRlcml2YXRpdmVzIC0+IGltcGxlbWVudCBhcyBhbiBvcHRpb24ge29yZGVyOiBudW1iZXJ9XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUsIENvbnN0YW50Tm9kZSc6IGZ1bmN0aW9uIChleHByLCB2YXJpYWJsZSwge29yZGVyfSkge1xuICAgICAgbGV0IHJlcyA9IGV4cHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXI7IGkrKykge1xuICAgICAgICBsZXQgY29uc3ROb2RlcyA9IHt9XG4gICAgICAgIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIGV4cHIsIHZhcmlhYmxlLm5hbWUpXG4gICAgICAgIHJlcyA9IF9kZXJpdmF0aXZlKHJlcywgY29uc3ROb2RlcylcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gICAgKi9cblxuICB9KTtcbiAgZGVyaXZhdGl2ZS5fc2ltcGxpZnkgPSB0cnVlO1xuXG4gIGRlcml2YXRpdmUudG9UZXggPSBmdW5jdGlvbiAoZGVyaXYpIHtcbiAgICByZXR1cm4gX2Rlcml2VGV4LmFwcGx5KG51bGwsIGRlcml2LmFyZ3MpO1xuICB9OyAvLyBGSVhNRTogbW92ZSB0aGUgdG9UZXggbWV0aG9kIG9mIGRlcml2YXRpdmUgdG8gbGF0ZXguanMuIERpZmZpY3VsdHkgaXMgdGhhdCBpdCByZWxpZXMgb24gcGFyc2UuXG4gIC8vIE5PVEU6IHRoZSBvcHRpb25hbCBcIm9yZGVyXCIgcGFyYW1ldGVyIGhlcmUgaXMgY3VycmVudGx5IHVudXNlZFxuXG5cbiAgdmFyIF9kZXJpdlRleCA9IHR5cGVkKCdfZGVyaXZUZXgnLCB7XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZShleHByLCB4KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoZXhwcikgJiYgKDAsIF9pcy50eXBlT2YpKGV4cHIudmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KHBhcnNlKGV4cHIudmFsdWUpLnRvU3RyaW5nKCksIHgudG9TdHJpbmcoKSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KGV4cHIudG9TdHJpbmcoKSwgeC50b1N0cmluZygpLCAxKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiBOb2RlQ29uc3RhbnROb2RlKGV4cHIsIHgpIHtcbiAgICAgIGlmICgoMCwgX2lzLnR5cGVPZikoeC52YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBfZGVyaXZUZXgoZXhwciwgcGFyc2UoeC52YWx1ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gJ2Rlcml2YXRpdmUnIGlzIGEgbm9uLXN0cmluZyBjb25zdGFudFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdOb2RlLCBTeW1ib2xOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZUNvbnN0YW50Tm9kZShleHByLCB4LCBvcmRlcikge1xuICAgICAgcmV0dXJuIF9kZXJpdlRleChleHByLnRvU3RyaW5nKCksIHgubmFtZSwgb3JkZXIudmFsdWUpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nLCBudW1iZXInOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmdOdW1iZXIoZXhwciwgeCwgb3JkZXIpIHtcbiAgICAgIHZhciBkO1xuXG4gICAgICBpZiAob3JkZXIgPT09IDEpIHtcbiAgICAgICAgZCA9ICd7ZFxcXFxvdmVyIGQnICsgeCArICd9JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQgPSAne2ReeycgKyBvcmRlciArICd9XFxcXG92ZXIgZCcgKyB4ICsgJ157JyArIG9yZGVyICsgJ319JztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGQgKyBcIlxcXFxsZWZ0W1wiLmNvbmNhdChleHByLCBcIlxcXFxyaWdodF1cIik7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIERvZXMgYSBkZXB0aC1maXJzdCBzZWFyY2ggb24gdGhlIGV4cHJlc3Npb24gdHJlZSB0byBpZGVudGlmeSB3aGF0IE5vZGVzXG4gICAqIGFyZSBjb25zdGFudHMgKGUuZy4gMiArIDIpLCBhbmQgc3RvcmVzIHRoZSBvbmVzIHRoYXQgYXJlIGNvbnN0YW50cyBpblxuICAgKiBjb25zdE5vZGVzLiBDbGFzc2lmaWNhdGlvbiBpcyBkb25lIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqICAgMS4gQ29uc3RhbnROb2RlcyBhcmUgY29uc3RhbnRzLlxuICAgKiAgIDIuIElmIHRoZXJlIGV4aXN0cyBhIFN5bWJvbE5vZGUsIG9mIHdoaWNoIHdlIGFyZSBkaWZmZXJlbnRpYXRpbmcgb3ZlcixcbiAgICogICAgICBpbiB0aGUgc3VidHJlZSBpdCBpcyBub3QgY29uc3RhbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29uc3ROb2RlcyAgSG9sZHMgdGhlIG5vZGVzIHRoYXQgYXJlIGNvbnN0YW50XG4gICAqIEBwYXJhbSAge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHBhcmFtICB7c3RyaW5nfSB2YXJOYW1lICAgICBWYXJpYWJsZSB0aGF0IHdlIGFyZSBkaWZmZXJlbnRpYXRpbmdcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIGlmIG5vZGUgaXMgY29uc3RhbnRcbiAgICovXG4gIC8vIFRPRE86IGNhbiB3ZSByZXdyaXRlIGNvbnN0VGFnIGludG8gYSBwdXJlIGZ1bmN0aW9uP1xuXG5cbiAgdmFyIGNvbnN0VGFnID0gdHlwZWQoJ2NvbnN0VGFnJywge1xuICAgICdPYmplY3QsIENvbnN0YW50Tm9kZSwgc3RyaW5nJzogZnVuY3Rpb24gT2JqZWN0Q29uc3RhbnROb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUpIHtcbiAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBTeW1ib2xOb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBPYmplY3RTeW1ib2xOb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUsIHZhck5hbWUpIHtcbiAgICAgIC8vIFRyZWF0IG90aGVyIHZhcmlhYmxlcyBsaWtlIGNvbnN0YW50cy4gRm9yIHJlYXNvbmluZywgc2VlOlxuICAgICAgLy8gICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXJ0aWFsX2Rlcml2YXRpdmVcbiAgICAgIGlmIChub2RlLm5hbWUgIT09IHZhck5hbWUpIHtcbiAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBQYXJlbnRoZXNpc05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdFBhcmVudGhlc2lzTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICByZXR1cm4gY29uc3RUYWcoY29uc3ROb2Rlcywgbm9kZS5jb250ZW50LCB2YXJOYW1lKTtcbiAgICB9LFxuICAgICdPYmplY3QsIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uQXNzaWdubWVudE5vZGVTdHJpbmcoY29uc3ROb2Rlcywgbm9kZSwgdmFyTmFtZSkge1xuICAgICAgaWYgKG5vZGUucGFyYW1zLmluZGV4T2YodmFyTmFtZSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuZXhwciwgdmFyTmFtZSk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uTm9kZU9wZXJhdG9yTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGlzQ29uc3QgPSBjb25zdFRhZyhjb25zdE5vZGVzLCBub2RlLmFyZ3NbMF0sIHZhck5hbWUpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaXNDb25zdCA9IGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuYXJnc1tpXSwgdmFyTmFtZSkgJiYgaXNDb25zdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NvbnN0KSB7XG4gICAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBBcHBsaWVzIGRpZmZlcmVudGlhdGlvbiBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtICB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gbm9kZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGNvbnN0Tm9kZXMgIEhvbGRzIHRoZSBub2RlcyB0aGF0IGFyZSBjb25zdGFudFxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSAgICBUaGUgZGVyaXZhdGl2ZSBvZiBgZXhwcmBcbiAgICovXG5cbiAgdmFyIF9kZXJpdmF0aXZlID0gdHlwZWQoJ19kZXJpdmF0aXZlJywge1xuICAgICdDb25zdGFudE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIENvbnN0YW50Tm9kZU9iamVjdChub2RlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgIH0sXG4gICAgJ1N5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIFN5bWJvbE5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDEpO1xuICAgIH0sXG4gICAgJ1BhcmVudGhlc2lzTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gUGFyZW50aGVzaXNOb2RlT2JqZWN0KG5vZGUsIGNvbnN0Tm9kZXMpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKF9kZXJpdmF0aXZlKG5vZGUuY29udGVudCwgY29uc3ROb2RlcykpO1xuICAgIH0sXG4gICAgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2Rlcml2YXRpdmUobm9kZS5leHByLCBjb25zdE5vZGVzKTtcbiAgICB9LFxuICAgICdGdW5jdGlvbk5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICBmdW5jQXJnc0NoZWNrKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uc3ROb2Rlc1tub2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcmcwID0gbm9kZS5hcmdzWzBdO1xuICAgICAgdmFyIGFyZzE7XG4gICAgICB2YXIgZGl2ID0gZmFsc2U7IC8vIGlzIG91dHB1dCBhIGZyYWN0aW9uP1xuXG4gICAgICB2YXIgbmVnYXRpdmUgPSBmYWxzZTsgLy8gaXMgb3V0cHV0IG5lZ2F0aXZlP1xuXG4gICAgICB2YXIgZnVuY0Rlcml2YXRpdmU7XG5cbiAgICAgIHN3aXRjaCAobm9kZS5uYW1lKSB7XG4gICAgICAgIGNhc2UgJ2NicnQnOlxuICAgICAgICAgIC8vIGQvZHgoY2JydCh4KSkgPSAxIC8gKDN4XigyLzMpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2NyZWF0ZUNvbnN0YW50Tm9kZSgzKSwgbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMCwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDIpLCBjcmVhdGVDb25zdGFudE5vZGUoMyldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc3FydCc6XG4gICAgICAgIGNhc2UgJ250aFJvb3QnOlxuICAgICAgICAgIC8vIGQvZHgoc3FydCh4KSkgPSAxIC8gKDIqc3FydCh4KSlcbiAgICAgICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtjcmVhdGVDb25zdGFudE5vZGUoMiksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbYXJnMF0pXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAvLyBSZWFycmFuZ2UgZnJvbSBudGhSb290KHgsIGEpIC0+IHheKDEvYSlcbiAgICAgICAgICAgIGFyZzEgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5vZGUuYXJnc1sxXV0pOyAvLyBJcyBhIHZhcmlhYmxlP1xuXG4gICAgICAgICAgICBjb25zdE5vZGVzW2FyZzFdID0gY29uc3ROb2Rlc1tub2RlLmFyZ3NbMV1dO1xuICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAsIGFyZzFdKSwgY29uc3ROb2Rlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbG9nMTAnOlxuICAgICAgICAgIGFyZzEgPSBjcmVhdGVDb25zdGFudE5vZGUoMTApO1xuXG4gICAgICAgIC8qIGZhbGwgdGhyb3VnaCEgKi9cblxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICAgIGlmICghYXJnMSAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBkL2R4KGxvZyh4KSkgPSAxIC8geFxuICAgICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBhcmcwLmNsb25lKCk7XG4gICAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSAmJiBhcmcxIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDIgJiYgY29uc3ROb2Rlc1tub2RlLmFyZ3NbMV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGQvZHgobG9nKHgsIGMpKSA9IDEgLyAoeCpsbihjKSlcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIG5ldyBGdW5jdGlvbk5vZGUoJ2xvZycsIFthcmcxIHx8IG5vZGUuYXJnc1sxXV0pXSk7XG4gICAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgLy8gZC9keChsb2coZih4KSwgZyh4KSkpID0gZC9keChsb2coZih4KSkgLyBsb2coZyh4KSkpXG4gICAgICAgICAgICByZXR1cm4gX2Rlcml2YXRpdmUobmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW2FyZzBdKSwgbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW25vZGUuYXJnc1sxXV0pXSksIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Bvdyc6XG4gICAgICAgICAgY29uc3ROb2Rlc1thcmcxXSA9IGNvbnN0Tm9kZXNbbm9kZS5hcmdzWzFdXTsgLy8gUGFzcyB0byBwb3cgb3BlcmF0b3Igbm9kZSBwYXJzZXJcblxuICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLCBub2RlLmFyZ3NbMV1dKSwgY29uc3ROb2Rlcyk7XG5cbiAgICAgICAgY2FzZSAnZXhwJzpcbiAgICAgICAgICAvLyBkL2R4KGVeeCkgPSBlXnhcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ2V4cCcsIFthcmcwLmNsb25lKCldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzaW4nOlxuICAgICAgICAgIC8vIGQvZHgoc2luKHgpKSA9IGNvcyh4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnY29zJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nvcyc6XG4gICAgICAgICAgLy8gZC9keChjb3MoeCkpID0gLXNpbih4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25ldyBGdW5jdGlvbk5vZGUoJ3NpbicsIFthcmcwLmNsb25lKCldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Rhbic6XG4gICAgICAgICAgLy8gZC9keCh0YW4oeCkpID0gc2VjKHgpXjJcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ3NlYycsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgICAvLyBkL2R4KHNlYyh4KSkgPSBzZWMoeCl0YW4oeClcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IEZ1bmN0aW9uTm9kZSgndGFuJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY3NjJzpcbiAgICAgICAgICAvLyBkL2R4KGNzYyh4KSkgPSAtY3NjKHgpY290KHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCdjb3QnLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjb3QnOlxuICAgICAgICAgIC8vIGQvZHgoY290KHgpKSA9IC1jc2MoeCleMlxuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ2NzYycsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNpbic6XG4gICAgICAgICAgLy8gZC9keChhc2luKHgpKSA9IDEgLyBzcXJ0KDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fjb3MnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvcyh4KSkgPSAtMSAvIHNxcnQoMSAtIHheMilcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2F0YW4nOlxuICAgICAgICAgIC8vIGQvZHgoYXRhbih4KSkgPSAxIC8gKHheMiArIDEpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2FzZWMnOlxuICAgICAgICAgIC8vIGQvZHgoYXNlYyh4KSkgPSAxIC8gKHx4fCpzcXJ0KHheMiAtIDEpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY3NjJzpcbiAgICAgICAgICAvLyBkL2R4KGFjc2MoeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yIC0gMSkpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY290JzpcbiAgICAgICAgICAvLyBkL2R4KGFjb3QoeCkpID0gLTEgLyAoeF4yICsgMSlcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NpbmgnOlxuICAgICAgICAgIC8vIGQvZHgoc2luaCh4KSkgPSBjb3NoKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdjb3NoJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nvc2gnOlxuICAgICAgICAgIC8vIGQvZHgoY29zaCh4KSkgPSBzaW5oKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzaW5oJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3RhbmgnOlxuICAgICAgICAgIC8vIGQvZHgodGFuaCh4KSkgPSBzZWNoKHgpXjJcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ3NlY2gnLCBbYXJnMC5jbG9uZSgpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlY2gnOlxuICAgICAgICAgIC8vIGQvZHgoc2VjaCh4KSkgPSAtc2VjaCh4KXRhbmgoeClcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIG5ldyBGdW5jdGlvbk5vZGUoJ3RhbmgnLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjc2NoJzpcbiAgICAgICAgICAvLyBkL2R4KGNzY2goeCkpID0gLWNzY2goeCljb3RoKHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCdjb3RoJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY290aCc6XG4gICAgICAgICAgLy8gZC9keChjb3RoKHgpKSA9IC1jc2NoKHgpXjJcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuZXcgRnVuY3Rpb25Ob2RlKCdjc2NoJywgW2FyZzAuY2xvbmUoKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMildKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhc2luaCc6XG4gICAgICAgICAgLy8gZC9keChhc2luaCh4KSkgPSAxIC8gc3FydCh4XjIgKyAxKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvc2gnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvc2goeCkpID0gMSAvIHNxcnQoeF4yIC0gMSk7IFhYWCBwb3RlbnRpYWxseSBvbmx5IGZvciB4ID49IDEgKHRoZSByZWFsIHNwZWN0cnVtKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKSwgY3JlYXRlQ29uc3RhbnROb2RlKDEpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhdGFuaCc6XG4gICAgICAgICAgLy8gZC9keChhdGFuaCh4KSkgPSAxIC8gKDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNlY2gnOlxuICAgICAgICAgIC8vIGQvZHgoYXNlY2goeCkpID0gLTEgLyAoeCpzcXJ0KDEgLSB4XjIpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNzY2gnOlxuICAgICAgICAgIC8vIGQvZHgoYWNzY2goeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yICsgMSkpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvdGgnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvdGgoeCkpID0gLTEgLyAoMSAtIHheMilcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWJzJzpcbiAgICAgICAgICAvLyBkL2R4KGFicyh4KSkgPSBhYnMoeCkveFxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZSgnYWJzJyksIFthcmcwLmNsb25lKCldKSwgYXJnMC5jbG9uZSgpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZ2FtbWEnOiAvLyBOZWVkcyBkaWdhbW1hIGZ1bmN0aW9uLCBkL2R4KGdhbW1hKHgpKSA9IGdhbW1hKHgpZGlnYW1tYSh4KVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBcIicgKyBub2RlLm5hbWUgKyAnXCIgaXMgbm90IHN1cHBvcnRlZCBieSBkZXJpdmF0aXZlLCBvciBhIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaXMgcGFzc2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcCwgZnVuYztcblxuICAgICAgaWYgKGRpdikge1xuICAgICAgICBvcCA9ICcvJztcbiAgICAgICAgZnVuYyA9ICdkaXZpZGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3AgPSAnKic7XG4gICAgICAgIGZ1bmMgPSAnbXVsdGlwbHknO1xuICAgICAgfVxuICAgICAgLyogQXBwbHkgY2hhaW4gcnVsZSB0byBhbGwgZnVuY3Rpb25zOlxuICAgICAgICAgRih4KSAgPSBmKGcoeCkpXG4gICAgICAgICBGJyh4KSA9IGcnKHgpKmYnKGcoeCkpICovXG5cblxuICAgICAgdmFyIGNoYWluRGVyaXZhdGl2ZSA9IF9kZXJpdmF0aXZlKGFyZzAsIGNvbnN0Tm9kZXMpO1xuXG4gICAgICBpZiAobmVnYXRpdmUpIHtcbiAgICAgICAgY2hhaW5EZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2NoYWluRGVyaXZhdGl2ZV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShvcCwgZnVuYywgW2NoYWluRGVyaXZhdGl2ZSwgZnVuY0Rlcml2YXRpdmVdKTtcbiAgICB9LFxuICAgICdPcGVyYXRvck5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE9wZXJhdG9yTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICBpZiAoY29uc3ROb2Rlc1tub2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKycpIHtcbiAgICAgICAgLy8gZC9keChzdW0oZih4KSkgPSBzdW0oZicoeCkpXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShhcmcsIGNvbnN0Tm9kZXMpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnLScpIHtcbiAgICAgICAgLy8gZC9keCgrLy1mKHgpKSA9ICsvLWYnKHgpXG4gICAgICAgIGlmIChub2RlLmlzVW5hcnkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpXSk7XG4gICAgICAgIH0gLy8gTGluZWFyaXR5IG9mIGRpZmZlcmVudGlhdGlvbiwgZC9keChmKHgpICsvLSBnKHgpKSA9IGYnKHgpICsvLSBnJyh4KVxuXG5cbiAgICAgICAgaWYgKG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpLCBfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMV0sIGNvbnN0Tm9kZXMpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICAvLyBkL2R4KGMqZih4KSkgPSBjKmYnKHgpXG4gICAgICAgIHZhciBjb25zdGFudFRlcm1zID0gbm9kZS5hcmdzLmZpbHRlcihmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnN0Tm9kZXNbYXJnXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29uc3RhbnRUZXJtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIG5vbkNvbnN0YW50VGVybXMgPSBub2RlLmFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zdE5vZGVzW2FyZ10gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgbm9uQ29uc3RhbnROb2RlID0gbm9uQ29uc3RhbnRUZXJtcy5sZW5ndGggPT09IDEgPyBub25Db25zdGFudFRlcm1zWzBdIDogbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIG5vbkNvbnN0YW50VGVybXMpO1xuICAgICAgICAgIHZhciBuZXdBcmdzID0gY29uc3RhbnRUZXJtcy5jb25jYXQoX2Rlcml2YXRpdmUobm9uQ29uc3RhbnROb2RlLCBjb25zdE5vZGVzKSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBuZXdBcmdzKTtcbiAgICAgICAgfSAvLyBQcm9kdWN0IFJ1bGUsIGQvZHgoZih4KSpnKHgpKSA9IGYnKHgpKmcoeCkgKyBmKHgpKmcnKHgpXG5cblxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmdPdXRlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5Jywgbm9kZS5hcmdzLm1hcChmdW5jdGlvbiAoYXJnSW5uZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdJbm5lciA9PT0gYXJnT3V0ZXIgPyBfZGVyaXZhdGl2ZShhcmdJbm5lciwgY29uc3ROb2RlcykgOiBhcmdJbm5lci5jbG9uZSgpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy8nICYmIG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICB2YXIgYXJnMCA9IG5vZGUuYXJnc1swXTtcbiAgICAgICAgdmFyIGFyZzEgPSBub2RlLmFyZ3NbMV07IC8vIGQvZHgoZih4KSAvIGMpID0gZicoeCkgLyBjXG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbYXJnMV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtfZGVyaXZhdGl2ZShhcmcwLCBjb25zdE5vZGVzKSwgYXJnMV0pO1xuICAgICAgICB9IC8vIFJlY2lwcm9jYWwgUnVsZSwgZC9keChjIC8gZih4KSkgPSAtYyhmJyh4KS9mKHgpXjIpXG5cblxuICAgICAgICBpZiAoY29uc3ROb2Rlc1thcmcwXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2FyZzBdKSwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzEuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICB9IC8vIFF1b3RpZW50IHJ1bGUsIGQvZHgoZih4KSAvIGcoeCkpID0gKGYnKHgpZyh4KSAtIGYoeClnJyh4KSkgLyBnKHgpXjJcblxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoYXJnMCwgY29uc3ROb2RlcyksIGFyZzEuY2xvbmUoKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2FyZzAuY2xvbmUoKSwgX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyldKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcxLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnXicgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICAgIHZhciBfYXJnID0gbm9kZS5hcmdzWzBdO1xuICAgICAgICB2YXIgX2FyZzIgPSBub2RlLmFyZ3NbMV07XG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbX2FyZ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIElmIGlzIHNlY3JldGx5IGNvbnN0YW50OyAwXmYoeCkgPSAxIChpbiBKUyksIDFeZih4KSA9IDFcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2FyZykgJiYgKGlzWmVybyhfYXJnLnZhbHVlKSB8fCBlcXVhbChfYXJnLnZhbHVlLCAxKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICAgICAgfSAvLyBkL2R4KGNeZih4KSkgPSBjXmYoeCkqbG4oYykqZicoeClcblxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbX2FyZy5jbG9uZSgpXSksIF9kZXJpdmF0aXZlKF9hcmcyLmNsb25lKCksIGNvbnN0Tm9kZXMpXSldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25zdE5vZGVzW19hcmcyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hcmcyKSkge1xuICAgICAgICAgICAgLy8gSWYgaXMgc2VjcmV0bHkgY29uc3RhbnQ7IGYoeCleMCA9IDEgLT4gZC9keCgxKSA9IDBcbiAgICAgICAgICAgIGlmIChpc1plcm8oX2FyZzIudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICAgICAgICB9IC8vIElnbm9yZSBleHBvbmVudDsgZih4KV4xID0gZih4KVxuXG5cbiAgICAgICAgICAgIGlmIChlcXVhbChfYXJnMi52YWx1ZSwgMSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKF9hcmcsIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gRWxlbWVudGFyeSBQb3dlciBSdWxlLCBkL2R4KGYoeCleYykgPSBjKmYnKHgpKmYoeCleKGMtMSlcblxuXG4gICAgICAgICAgdmFyIHBvd01pbnVzT25lID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW19hcmcyLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pO1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19hcmcyLmNsb25lKCksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2RlcyksIHBvd01pbnVzT25lXSldKTtcbiAgICAgICAgfSAvLyBGdW5jdGlvbmFsIFBvd2VyIFJ1bGUsIGQvZHgoZl5nKSA9IGZeZypbZicqKGcvZikgKyBnJ2xuKGYpXVxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBfYXJnMi5jbG9uZSgpXSksIG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW19hcmcyLmNsb25lKCksIF9hcmcuY2xvbmUoKV0pXSksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZzIsIGNvbnN0Tm9kZXMpLCBuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbX2FyZy5jbG9uZSgpXSldKV0pXSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgXCInICsgbm9kZS5vcCArICdcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlcml2YXRpdmUsIG9yIGEgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcyBwYXNzZWQnKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogRW5zdXJlcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgYSBmdW5jdGlvbiBhcmUgY29ycmVjdCxcbiAgICogYW5kIHdpbGwgdGhyb3cgYW4gZXJyb3Igb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uTm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGZ1bmNBcmdzQ2hlY2sobm9kZSkge1xuICAgIC8vIFRPRE8gYWRkIG1pbiwgbWF4IGV0Y1xuICAgIGlmICgobm9kZS5uYW1lID09PSAnbG9nJyB8fCBub2RlLm5hbWUgPT09ICdudGhSb290JyB8fCBub2RlLm5hbWUgPT09ICdwb3cnKSAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGVyZSBzaG91bGQgYmUgYW4gaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgaWYgd2UgcmVhY2ggaGVyZVxuICAgIC8vIENoYW5nZSBhbGwgYXJncyB0byBjb25zdGFudHMgdG8gYXZvaWQgdW5pZGVudGlmaWVkXG4gICAgLy8gc3ltYm9sIGVycm9yIHdoZW4gY29tcGlsaW5nIGZ1bmN0aW9uXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICBub2RlLmFyZ3NbaV0gPSBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgfVxuXG4gICAgbm9kZS5jb21waWxlKCkuZXZhbHVhdGUoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFR5cGVFcnJvciwgYnV0IG5vbmUgZm91bmQnKTtcbiAgfVxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGNvbnN0YW50IG5vZGUgd2l0aCBhIHNwZWNpZmljIHR5cGVcbiAgICogKG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbilcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVUeXBlXVxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29uc3RhbnROb2RlKHZhbHVlLCB2YWx1ZVR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKHZhbHVlLCB2YWx1ZVR5cGUgfHwgY29uZmlnLm51bWJlcikpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2YXRpdmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVyaXZhdGl2ZSA9IGNyZWF0ZURlcml2YXRpdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhdGlvbmFsaXplID0gdm9pZCAwO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29uc3RhbnQgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvbnN0YW50XCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29yZSA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3NpbXBsaWZ5Q29yZVwiKTtcblxudmFyIG5hbWUgPSAncmF0aW9uYWxpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2VxdWFsJywgJ2lzWmVybycsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdwYXJzZScsICdzaW1wbGlmeScsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdTeW1ib2xOb2RlJywgJ1BhcmVudGhlc2lzTm9kZSddO1xudmFyIGNyZWF0ZVJhdGlvbmFsaXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2UsXG4gICAgICBzaW1wbGlmeSA9IF9yZWYuc2ltcGxpZnksXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcbiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSAoMCwgX3NpbXBsaWZ5Q29uc3RhbnQuY3JlYXRlU2ltcGxpZnlDb25zdGFudCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSk7XG4gIHZhciBzaW1wbGlmeUNvcmUgPSAoMCwgX3NpbXBsaWZ5Q29yZS5jcmVhdGVTaW1wbGlmeUNvcmUpKHtcbiAgICBlcXVhbDogZXF1YWwsXG4gICAgaXNaZXJvOiBpc1plcm8sXG4gICAgYWRkOiBhZGQsXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBkaXZpZGU6IGRpdmlkZSxcbiAgICBwb3c6IHBvdyxcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi5cbiAgICogSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0c1xuICAgKiB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nXG4gICAqIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICByYXRpb25hbGl6ZShleHByKVxuICAgKiAgICAgcmF0aW9uYWxpemUoZXhwciwgZGV0YWlsZWQpXG4gICAqICAgICByYXRpb25hbGl6ZShleHByLCBzY29wZSlcbiAgICogICAgIHJhdGlvbmFsaXplKGV4cHIsIHNjb3BlLCBkZXRhaWxlZClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCdzaW4oeCkreScpXG4gICAqICAgICAgICAgICAgICAgICAgIC8vICBFcnJvcjogVGhlcmUgaXMgYW4gdW5zb2x2ZWQgZnVuY3Rpb24gY2FsbFxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnMngveSAtIHkvKHgrMSknKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyAoMip4XjIteV4yKzIqeCkvKHgqeSt5KVxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnKDJ4KzEpXjYnKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyA2NCp4XjYrMTkyKnheNSsyNDAqeF40KzE2MCp4XjMrNjAqeF4yKzEyKngrMVxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnMngvKCAoMngtMSkgLyAoM3grMikgKSAtIDV4LyAoICgzeCs0KSAvICgyeF4yLTUpICkgKyAzJylcbiAgICogICAgICAgICAgICAgICAgICAgLy8gLTIwKnheNCsyOCp4XjMrMTA0KnheMis2KngtMTIpLyg2KnheMis1KngtNClcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3gvKDEteCkvKHgtMikvKHgtMykvKHgtNCkgKyAyeC8gKCAoMS0yeCkvKDItM3gpICkvICgoMy00eCkvKDQtNXgpICknKSA9XG4gICAqICAgICAgICAgICAgICAgICAgIC8vICgtMzAqeF43KzM0NCp4XjYtMTUwNip4XjUrMzIwMCp4XjQtMzQ3Mip4XjMrMTg0Nip4XjItMzgxKngpL1xuICAgKiAgICAgICAgICAgICAgICAgICAvLyAgICAgKC04KnheNis5MCp4XjUtMzgzKnheNCs3ODAqeF4zLTc5Nyp4XjIrMzkwKngtNzIpXG4gICAqXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCd4K3greCt5Jyx7eToxfSkgLy8gMyp4KzFcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3greCt4K3knLHt9KSAgICAvLyAzKngreVxuICAgKlxuICAgKiAgICAgY29uc3QgcmV0ID0gbWF0aC5yYXRpb25hbGl6ZSgneCt4K3greScse30sdHJ1ZSlcbiAgICogICAgICAgICAgICAgICAgICAgLy8gcmV0LmV4cHJlc3Npb249Myp4K3ksIHJldC52YXJpYWJsZXMgPSBbXCJ4XCIsXCJ5XCJdXG4gICAqICAgICBjb25zdCByZXQgPSBtYXRoLnJhdGlvbmFsaXplKCctMis1eF4yJyx7fSx0cnVlKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyByZXQuZXhwcmVzc2lvbj01KnheMi0yLCByZXQudmFyaWFibGVzID0gW1wieFwiXSwgcmV0LmNvZWZmaWNpZW50cz1bLTIsMCw1XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5XG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV8c3RyaW5nfSBleHByICAgIFRoZSBleHByZXNzaW9uIHRvIGNoZWNrIGlmIGlzIGEgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqIEBwYXJhbSAge09iamVjdHxib29sZWFufSAgICAgIG9wdGlvbmFsIHNjb3BlIG9mIGV4cHJlc3Npb24gb3IgdHJ1ZSBmb3IgYWxyZWFkeSBldmFsdWF0ZWQgcmF0aW9uYWwgZXhwcmVzc2lvbiBhdCBpbnB1dFxuICAgKiBAcGFyYW0gIHtCb29sZWFufSAgZGV0YWlsZWQgICBvcHRpb25hbCBUcnVlIGlmIHJldHVybiBhbiBvYmplY3QsIGZhbHNlIGlmIHJldHVybiBleHByZXNzaW9uIG5vZGUgKGRlZmF1bHQpXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdCB8IE5vZGV9ICAgIFRoZSByYXRpb25hbCBwb2x5bm9taWFsIG9mIGBleHByYCBvciBuYSBvYmplY3RcbiAgICogICAgICAgICAgICB7T2JqZWN0fVxuICAgKiAgICAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZX0gZXhwcmVzc2lvbjogbm9kZSBzaW1wbGlmaWVkIGV4cHJlc3Npb25cbiAgICogICAgICAgICAgICAgIHtFeHByZXNzaW9uIE5vZGV9IG51bWVyYXRvcjogc2ltcGxpZmllZCBudW1lcmF0b3Igb2YgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZSB8IGJvb2xlYW59IGRlbm9taW5hdG9yOiBzaW1wbGlmaWVkIGRlbm9taW5hdG9yIG9yIGZhbHNlIChpZiB0aGVyZSBpcyBubyBkZW5vbWluYXRvcilcbiAgICogICAgICAgICAgICAgIHtBcnJheX0gICAgICAgICAgIHZhcmlhYmxlczogIHZhcmlhYmxlIG5hbWVzXG4gICAqICAgICAgICAgICAgICB7QXJyYXl9ICAgICAgICAgICBjb2VmZmljaWVudHM6IGNvZWZmaWNpZW50cyBvZiBudW1lcmF0b3Igc29ydGVkIGJ5IGluY3JlYXNlZCBleHBvbmVudFxuICAgKiAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZX0gIG5vZGUgc2ltcGxpZmllZCBleHByZXNzaW9uXG4gICAqXG4gICAqL1xuXG4gIHZhciByYXRpb25hbGl6ZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHt9LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBib29sZWFuJzogZnVuY3Rpb24gc3RyaW5nQm9vbGVhbihleHByLCBkZXRhaWxlZCkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCB7fSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHNjb3BlLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QsIGJvb2xlYW4nOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCBzY29wZSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgTm9kZTogZnVuY3Rpb24gTm9kZShleHByKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUoZXhwciwge30sIGZhbHNlKTtcbiAgICB9LFxuICAgICdOb2RlLCBib29sZWFuJzogZnVuY3Rpb24gTm9kZUJvb2xlYW4oZXhwciwgZGV0YWlsZWQpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCB7fSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCBzY29wZSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCwgYm9vbGVhbic6IGZ1bmN0aW9uIE5vZGVPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkge1xuICAgICAgdmFyIHNldFJ1bGVzID0gcnVsZXNSYXRpb25hbGl6ZSgpOyAvLyBSdWxlcyBmb3IgY2hhbmdlIHBvbHlub21pYWwgaW4gbmVhciBjYW5vbmljYWwgZm9ybVxuXG4gICAgICB2YXIgcG9seVJldCA9IHBvbHlub21pYWwoZXhwciwgc2NvcGUsIHRydWUsIHNldFJ1bGVzLmZpcnN0UnVsZXMpOyAvLyBDaGVjayBpZiBleHByZXNzaW9uIGlzIGEgcmF0aW9uYWxpemFibGUgcG9seW5vbWlhbFxuXG4gICAgICB2YXIgblZhcnMgPSBwb2x5UmV0LnZhcmlhYmxlcy5sZW5ndGg7XG4gICAgICBleHByID0gcG9seVJldC5leHByZXNzaW9uO1xuXG4gICAgICBpZiAoblZhcnMgPj0gMSkge1xuICAgICAgICAvLyBJZiBleHByZXNzaW9uIGluIG5vdCBhIGNvbnN0YW50XG4gICAgICAgIGV4cHIgPSBleHBhbmRQb3dlcihleHByKTsgLy8gRmlyc3QgZXhwYW5kIHBvd2VyIG9mIHBvbHlub21pYWxzIChjYW5ub3QgYmUgbWFkZSBmcm9tIHJ1bGVzISlcblxuICAgICAgICB2YXIgc0JlZm9yZTsgLy8gUHJldmlvdXMgZXhwcmVzc2lvblxuXG4gICAgICAgIHZhciBydWxlcztcbiAgICAgICAgdmFyIGVEaXN0ckRpdiA9IHRydWU7XG4gICAgICAgIHZhciByZWRvSW5pYyA9IGZhbHNlO1xuICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlcywge30sIHtcbiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFwcGx5IHRoZSBpbml0aWFsIHJ1bGVzLCBpbmNsdWRpbmcgc3VjYyBkaXYgcnVsZXNcblxuICAgICAgICB2YXIgcztcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIC8vIEFwcGx5IGFsdGVybmF0ZWx5ICBzdWNjZXNzaXZlIGRpdmlzaW9uIHJ1bGVzIGFuZCBkaXN0ci5kaXYucnVsZXNcbiAgICAgICAgICBydWxlcyA9IGVEaXN0ckRpdiA/IHNldFJ1bGVzLmRpc3RyRGl2UnVsZXMgOiBzZXRSdWxlcy5zdWNEaXZSdWxlcztcbiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgcnVsZXMpOyAvLyB1bnRpbCBubyBtb3JlIGNoYW5nZXNcblxuICAgICAgICAgIGVEaXN0ckRpdiA9ICFlRGlzdHJEaXY7IC8vIFN3YXAgYmV0d2VlbiBEaXN0ci5EaXYgYW5kIFN1Y2MuIERpdi4gUnVsZXNcblxuICAgICAgICAgIHMgPSBleHByLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBpZiAocyA9PT0gc0JlZm9yZSkge1xuICAgICAgICAgICAgYnJlYWs7IC8vIE5vIGNoYW5nZXMgOiBlbmQgb2YgdGhlIGxvb3BcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWRvSW5pYyA9IHRydWU7XG4gICAgICAgICAgc0JlZm9yZSA9IHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVkb0luaWMpIHtcbiAgICAgICAgICAvLyBBcHBseSBmaXJzdCBydWxlcyBhZ2FpbiB3aXRob3V0IHN1Y2MgZGl2IHJ1bGVzIChpZiB0aGVyZSBhcmUgY2hhbmdlcylcbiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluLCB7fSwge1xuICAgICAgICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmluYWxSdWxlcywge30sIHtcbiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFwcGx5IGZpbmFsIHJ1bGVzXG4gICAgICB9IC8vIE5WYXJzID49IDFcblxuXG4gICAgICB2YXIgY29lZmZpY2llbnRzID0gW107XG4gICAgICB2YXIgcmV0UmF0aW9uYWxpemUgPSB7fTtcblxuICAgICAgaWYgKGV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgJiYgZXhwci5pc0JpbmFyeSgpICYmIGV4cHIub3AgPT09ICcvJykge1xuICAgICAgICAvLyBTZXBhcmF0ZSBudW1lcmF0b3IgZnJvbSBkZW5vbWluYXRvclxuICAgICAgICBpZiAoblZhcnMgPT09IDEpIHtcbiAgICAgICAgICBleHByLmFyZ3NbMF0gPSBwb2x5VG9DYW5vbmljYWwoZXhwci5hcmdzWzBdLCBjb2VmZmljaWVudHMpO1xuICAgICAgICAgIGV4cHIuYXJnc1sxXSA9IHBvbHlUb0Nhbm9uaWNhbChleHByLmFyZ3NbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRldGFpbGVkKSB7XG4gICAgICAgICAgcmV0UmF0aW9uYWxpemUubnVtZXJhdG9yID0gZXhwci5hcmdzWzBdO1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLmRlbm9taW5hdG9yID0gZXhwci5hcmdzWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoblZhcnMgPT09IDEpIHtcbiAgICAgICAgICBleHByID0gcG9seVRvQ2Fub25pY2FsKGV4cHIsIGNvZWZmaWNpZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGV0YWlsZWQpIHtcbiAgICAgICAgICByZXRSYXRpb25hbGl6ZS5udW1lcmF0b3IgPSBleHByO1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLmRlbm9taW5hdG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBuVmFyc1xuXG5cbiAgICAgIGlmICghZGV0YWlsZWQpIHJldHVybiBleHByO1xuICAgICAgcmV0UmF0aW9uYWxpemUuY29lZmZpY2llbnRzID0gY29lZmZpY2llbnRzO1xuICAgICAgcmV0UmF0aW9uYWxpemUudmFyaWFibGVzID0gcG9seVJldC52YXJpYWJsZXM7XG4gICAgICByZXRSYXRpb25hbGl6ZS5leHByZXNzaW9uID0gZXhwcjtcbiAgICAgIHJldHVybiByZXRSYXRpb25hbGl6ZTtcbiAgICB9IC8vIF5eXl5eXl4gZW5kIG9mIHJhdGlvbmFsaXplIF5eXl5eXl5eXG5cbiAgfSk7IC8vIGVuZCBvZiB0eXBlZCByYXRpb25hbGl6ZVxuXG4gIC8qKlxuICAgKiAgRnVuY3Rpb24gdG8gc2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB1c2luZyBhbiBvcHRpb25hbCBzY29wZSBhbmRcbiAgICogIHJldHVybiBpdCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIHBvbHlub21pYWwgZXhwcmVzc2lvbiwgaS5lLlxuICAgKiAgYW4gZXhwcmVzc2lvbiB3aXRoIG9uZSBvciBtb3JlIHZhcmlhYmxlcyBhbmQgdGhlIG9wZXJhdG9yc1xuICAgKiAgKywgLSwgKiwgYW5kIF4sIHdoZXJlIHRoZSBleHBvbmVudCBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHBvbHlub21pYWwoZXhwcixzY29wZSxleHRlbmRlZCwgcnVsZXMpXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgIFRoZSBleHByZXNzaW9uIHRvIHNpbXBsaWZ5IGFuZCBjaGVjayBpZiBpcyBwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICogQHBhcmFtICB7b2JqZWN0fSBzY29wZSAgICAgICAgICAgT3B0aW9uYWwgc2NvcGUgZm9yIGV4cHJlc3Npb24gc2ltcGxpZmljYXRpb25cbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gZXh0ZW5kZWQgICAgICAgT3B0aW9uYWwuIERlZmF1bHQgaXMgZmFsc2UuIFdoZW4gdHJ1ZSBhbGxvd3MgZGl2aWRlIG9wZXJhdG9yLlxuICAgKiBAcGFyYW0gIHthcnJheX0gIHJ1bGVzICAgICAgICAgICBPcHRpb25hbC4gRGVmYXVsdCBpcyBubyBydWxlLlxuICAgKlxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqICAgICAgICAgICAge09iamVjdH0gbm9kZTogICBub2RlIHNpbXBsaWZpZWQgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgIHtBcnJheX0gIHZhcmlhYmxlczogIHZhcmlhYmxlIG5hbWVzXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHBvbHlub21pYWwoZXhwciwgc2NvcGUsIGV4dGVuZGVkLCBydWxlcykge1xuICAgIHZhciB2YXJpYWJsZXMgPSBbXTtcbiAgICB2YXIgbm9kZSA9IHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCBzY29wZSwge1xuICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgfSk7IC8vIFJlc29sdmVzIGFueSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyB3aXRoIGFsbCBkZWZpbmVkIHBhcmFtZXRlcnNcblxuICAgIGV4dGVuZGVkID0gISFleHRlbmRlZDtcbiAgICB2YXIgb3BlciA9ICcrLSonICsgKGV4dGVuZGVkID8gJy8nIDogJycpO1xuICAgIHJlY1BvbHkobm9kZSk7XG4gICAgdmFyIHJldEZ1bmMgPSB7fTtcbiAgICByZXRGdW5jLmV4cHJlc3Npb24gPSBub2RlO1xuICAgIHJldEZ1bmMudmFyaWFibGVzID0gdmFyaWFibGVzO1xuICAgIHJldHVybiByZXRGdW5jOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiAgRnVuY3Rpb24gdG8gc2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB1c2luZyBhbiBvcHRpb25hbCBzY29wZSBhbmRcbiAgICAgKiAgcmV0dXJuIGl0IGlmIHRoZSBleHByZXNzaW9uIGlzIGEgcG9seW5vbWlhbCBleHByZXNzaW9uLCBpLmUuXG4gICAgICogIGFuIGV4cHJlc3Npb24gd2l0aCBvbmUgb3IgbW9yZSB2YXJpYWJsZXMgYW5kIHRoZSBvcGVyYXRvcnNcbiAgICAgKiAgKywgLSwgKiwgYW5kIF4sIHdoZXJlIHRoZSBleHBvbmVudCBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBTeW50YXg6XG4gICAgICpcbiAgICAgKiAgICAgcmVjUG9seShub2RlKVxuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICAgICAgICAgVGhlIGN1cnJlbnQgc3ViIHRyZWUgZXhwcmVzc2lvbiBpbiByZWN1cnNpb25cbiAgICAgKlxuICAgICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgICBub3RoaW5nLCB0aHJvdyBhbiBleGNlcHRpb24gaWYgZXJyb3JcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHJlY1BvbHkobm9kZSkge1xuICAgICAgdmFyIHRwID0gbm9kZS50eXBlOyAvLyBub2RlIHR5cGVcblxuICAgICAgaWYgKHRwID09PSAnRnVuY3Rpb25Ob2RlJykge1xuICAgICAgICAvLyBObyBmdW5jdGlvbiBjYWxsIGluIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTtcbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdPcGVyYXRvck5vZGUnKSB7XG4gICAgICAgIGlmIChub2RlLm9wID09PSAnXicpIHtcbiAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgbmVnYXRpdmUgZXhwb25lbnRzIGxpa2UgaW4gJzEveF4oLTIpJ1xuICAgICAgICAgIGlmIChub2RlLmFyZ3NbMV0udHlwZSAhPT0gJ0NvbnN0YW50Tm9kZScgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikocGFyc2VGbG9hdChub2RlLmFyZ3NbMV0udmFsdWUpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhIG5vbi1pbnRlZ2VyIGV4cG9uZW50Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG9wZXIuaW5kZXhPZihub2RlLm9wKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgJyArIG5vZGUub3AgKyAnIGludmFsaWQgaW4gcG9seW5vbWlhbCBleHByZXNzaW9uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gdHlwZSBvZiBvcGVyYXRvclxuXG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnU3ltYm9sTm9kZScpIHtcbiAgICAgICAgdmFyIF9uYW1lID0gbm9kZS5uYW1lOyAvLyB2YXJpYWJsZSBuYW1lXG5cbiAgICAgICAgdmFyIHBvcyA9IHZhcmlhYmxlcy5pbmRleE9mKF9uYW1lKTtcblxuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgIC8vIG5ldyB2YXJpYWJsZSBpbiBleHByZXNzaW9uXG4gICAgICAgICAgdmFyaWFibGVzLnB1c2goX25hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnUGFyZW50aGVzaXNOb2RlJykge1xuICAgICAgICByZWNQb2x5KG5vZGUuY29udGVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRwICE9PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgJyArIHRwICsgJyBpcyBub3QgYWxsb3dlZCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb24nKTtcbiAgICAgIH1cbiAgICB9IC8vIGVuZCBvZiByZWNQb2x5XG5cbiAgfSAvLyBlbmQgb2YgcG9seW5vbWlhbFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcnVsZSBzZXQgdG8gcmF0aW9uYWxpemUgYW4gcG9seW5vbWlhbCBleHByZXNzaW9uIGluIHJhdGlvbmFsaXplXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHJ1bGVzUmF0aW9uYWxpemUoKVxuICAgKlxuICAgKiBAcmV0dXJuIHthcnJheX0gICAgICAgIHJ1bGUgc2V0IHRvIHJhdGlvbmFsaXplIGFuIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHJ1bGVzUmF0aW9uYWxpemUoKSB7XG4gICAgdmFyIG9sZFJ1bGVzID0gW3NpbXBsaWZ5Q29yZSwgLy8gc0NvcmVcbiAgICB7XG4gICAgICBsOiAnbituJyxcbiAgICAgIHI6ICcyKm4nXG4gICAgfSwge1xuICAgICAgbDogJ24rLW4nLFxuICAgICAgcjogJzAnXG4gICAgfSwgc2ltcGxpZnlDb25zdGFudCwgLy8gc0NvbnN0YW50XG4gICAge1xuICAgICAgbDogJ24qKG4xXi0xKScsXG4gICAgICByOiAnbi9uMSdcbiAgICB9LCB7XG4gICAgICBsOiAnbipuMV4tbjInLFxuICAgICAgcjogJ24vbjFebjInXG4gICAgfSwge1xuICAgICAgbDogJ24xXi0xJyxcbiAgICAgIHI6ICcxL24xJ1xuICAgIH0sIHtcbiAgICAgIGw6ICduKihuMS9uMiknLFxuICAgICAgcjogJyhuKm4xKS9uMidcbiAgICB9LCB7XG4gICAgICBsOiAnMSpuJyxcbiAgICAgIHI6ICduJ1xuICAgIH1dO1xuICAgIHZhciBydWxlc0ZpcnN0ID0gW3tcbiAgICAgIGw6ICcoLW4xKS8oLW4yKScsXG4gICAgICByOiAnbjEvbjInXG4gICAgfSwgLy8gVW5hcnkgZGl2aXNpb25cbiAgICB7XG4gICAgICBsOiAnKC1uMSkqKC1uMiknLFxuICAgICAgcjogJ24xKm4yJ1xuICAgIH0sIC8vIFVuYXJ5IG11bHRpcGxpY2F0aW9uXG4gICAge1xuICAgICAgbDogJ24xLS1uMicsXG4gICAgICByOiAnbjErbjInXG4gICAgfSwgLy8gJy0tJyBlbGltaW5hdGlvblxuICAgIHtcbiAgICAgIGw6ICduMS1uMicsXG4gICAgICByOiAnbjErKC1uMiknXG4gICAgfSwgLy8gU3VidHJhY3Rpb24gdHVybiBpbnRvIGFkZCB3aXRoIHVu77+9cnkgbWludXNcbiAgICB7XG4gICAgICBsOiAnKG4xK24yKSpuMycsXG4gICAgICByOiAnKG4xKm4zICsgbjIqbjMpJ1xuICAgIH0sIC8vIERpc3RyaWJ1dGl2ZSAxXG4gICAge1xuICAgICAgbDogJ24xKihuMituMyknLFxuICAgICAgcjogJyhuMSpuMituMSpuMyknXG4gICAgfSwgLy8gRGlzdHJpYnV0aXZlIDJcbiAgICB7XG4gICAgICBsOiAnYzEqbiArIGMyKm4nLFxuICAgICAgcjogJyhjMStjMikqbidcbiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50c1xuICAgIHtcbiAgICAgIGw6ICdjMSpuICsgbicsXG4gICAgICByOiAnKGMxKzEpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAnYzEqbiAtIGMyKm4nLFxuICAgICAgcjogJyhjMS1jMikqbidcbiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50c1xuICAgIHtcbiAgICAgIGw6ICdjMSpuIC0gbicsXG4gICAgICByOiAnKGMxLTEpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAndi9jJyxcbiAgICAgIHI6ICcoMS9jKSp2J1xuICAgIH0sIC8vIHZhcmlhYmxlL2NvbnN0YW50IChuZXchKVxuICAgIHtcbiAgICAgIGw6ICd2Ly1jJyxcbiAgICAgIHI6ICctKDEvYykqdidcbiAgICB9LCAvLyB2YXJpYWJsZS9jb25zdGFudCAobmV3ISlcbiAgICB7XG4gICAgICBsOiAnLXYqLWMnLFxuICAgICAgcjogJ2MqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDFcbiAgICB7XG4gICAgICBsOiAnLXYqYycsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDJcbiAgICB7XG4gICAgICBsOiAndiotYycsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDNcbiAgICB7XG4gICAgICBsOiAndipjJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gSW52ZXJzaW9uIGNvbnN0YW50IGFuZCB2YXJpYWJsZSA0XG4gICAge1xuICAgICAgbDogJy0oLW4xKm4yKScsXG4gICAgICByOiAnKG4xKm4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICctKG4xKm4yKScsXG4gICAgICByOiAnKC1uMSpuMiknXG4gICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb25cbiAgICB7XG4gICAgICBsOiAnLSgtbjErbjIpJyxcbiAgICAgIHI6ICcobjEtbjIpJ1xuICAgIH0sIC8vIFVuYXJ5IHByb3BhZ2F0aW9uXG4gICAge1xuICAgICAgbDogJy0objErbjIpJyxcbiAgICAgIHI6ICcoLW4xLW4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICcobjFebjIpXm4zJyxcbiAgICAgIHI6ICcobjFeKG4yKm4zKSknXG4gICAgfSwgLy8gUG93ZXIgdG8gUG93ZXJcbiAgICB7XG4gICAgICBsOiAnLSgtbjEvbjIpJyxcbiAgICAgIHI6ICcobjEvbjIpJ1xuICAgIH0sIC8vIERpdmlzaW9uIGFuZCBVbmFyeVxuICAgIHtcbiAgICAgIGw6ICctKG4xL24yKScsXG4gICAgICByOiAnKC1uMS9uMiknXG4gICAgfV07IC8vIERpdmlzYW8gYW5kIFVuYXJ5XG5cbiAgICB2YXIgcnVsZXNEaXN0ckRpdiA9IFt7XG4gICAgICBsOiAnKG4xL24yICsgbjMvbjQpJyxcbiAgICAgIHI6ICcoKG4xKm40ICsgbjMqbjIpLyhuMipuNCkpJ1xuICAgIH0sIC8vIFN1bSBvZiBmcmFjdGlvbnNcbiAgICB7XG4gICAgICBsOiAnKG4xL24yICsgbjMpJyxcbiAgICAgIHI6ICcoKG4xICsgbjMqbjIpL24yKSdcbiAgICB9LCAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMVxuICAgIHtcbiAgICAgIGw6ICcobjEgKyBuMi9uMyknLFxuICAgICAgcjogJygobjEqbjMgKyBuMikvbjMpJ1xuICAgIH1dOyAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMVxuXG4gICAgdmFyIHJ1bGVzU3VjRGl2ID0gW3tcbiAgICAgIGw6ICcobjEvKG4yL24zKSknLFxuICAgICAgcjogJygobjEqbjMpL24yKSdcbiAgICB9LCAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvblxuICAgIHtcbiAgICAgIGw6ICcobjEvbjIvbjMpJyxcbiAgICAgIHI6ICcobjEvKG4yKm4zKSknXG4gICAgfV07XG4gICAgdmFyIHNldFJ1bGVzID0ge307IC8vIHJ1bGVzIHNldCBpbiA0IHN0ZXBzLlxuICAgIC8vIEFsbCBydWxlcyA9PiBpbmZpbml0ZSBsb29wXG4gICAgLy8gc2V0UnVsZXMuYWxsUnVsZXMgPW9sZFJ1bGVzLmNvbmNhdChydWxlc0ZpcnN0LHJ1bGVzRGlzdHJEaXYscnVsZXNTdWNEaXYpXG5cbiAgICBzZXRSdWxlcy5maXJzdFJ1bGVzID0gb2xkUnVsZXMuY29uY2F0KHJ1bGVzRmlyc3QsIHJ1bGVzU3VjRGl2KTsgLy8gRmlyc3QgcnVsZSBzZXRcblxuICAgIHNldFJ1bGVzLmRpc3RyRGl2UnVsZXMgPSBydWxlc0Rpc3RyRGl2OyAvLyBKdXN0IGRpc3RyLiBkaXYuIHJ1bGVzXG5cbiAgICBzZXRSdWxlcy5zdWNEaXZSdWxlcyA9IHJ1bGVzU3VjRGl2OyAvLyBKdXMgc3VjYy4gZGl2LiBydWxlc1xuXG4gICAgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluID0gb2xkUnVsZXMuY29uY2F0KHJ1bGVzRmlyc3QpOyAvLyBMYXN0IHJ1bGVzIHNldCB3aXRob3V0IHN1Y2MuIGRpdi5cbiAgICAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvblxuICAgIC8vIFNlY29uZCBydWxlIHNldC5cbiAgICAvLyBUaGVyZSBpcyBubyBhZ2dyZWdhdGUgZXhwcmVzc2lvbiB3aXRoIHBhcmVudGVzaXMsIGJ1dCB0aGUgb25seSB2YXJpYWJsZSBjYW4gYmUgc2NhdHRlcmVkLlxuXG4gICAgc2V0UnVsZXMuZmluYWxSdWxlcyA9IFtzaW1wbGlmeUNvcmUsIC8vIHNpbXBsaWZ5LnJ1bGVzWzBdXG4gICAge1xuICAgICAgbDogJ24qLW4nLFxuICAgICAgcjogJy1uXjInXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDFcbiAgICB7XG4gICAgICBsOiAnbipuJyxcbiAgICAgIHI6ICduXjInXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDJcbiAgICBzaW1wbGlmeUNvbnN0YW50LCAvLyBzaW1wbGlmeS5ydWxlc1sxNF0gb2xkIDNyZCBpbmRleCBpbiBvbGRSdWxlc1xuICAgIHtcbiAgICAgIGw6ICduKi1uXm4xJyxcbiAgICAgIHI6ICctbl4objErMSknXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDNcbiAgICB7XG4gICAgICBsOiAnbipuXm4xJyxcbiAgICAgIHI6ICduXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgNFxuICAgIHtcbiAgICAgIGw6ICduXm4xKi1uXm4yJyxcbiAgICAgIHI6ICctbl4objErbjIpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA1XG4gICAge1xuICAgICAgbDogJ25ebjEqbl5uMicsXG4gICAgICByOiAnbl4objErbjIpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA2XG4gICAge1xuICAgICAgbDogJ25ebjEqLW4nLFxuICAgICAgcjogJy1uXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgN1xuICAgIHtcbiAgICAgIGw6ICduXm4xKm4nLFxuICAgICAgcjogJ25eKG4xKzEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA4XG4gICAge1xuICAgICAgbDogJ25ebjEvLW4nLFxuICAgICAgcjogJy1uXihuMS0xKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgOFxuICAgIHtcbiAgICAgIGw6ICduXm4xL24nLFxuICAgICAgcjogJ25eKG4xLTEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAxXG4gICAge1xuICAgICAgbDogJ24vLW5ebjEnLFxuICAgICAgcjogJy1uXigxLW4xKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgMlxuICAgIHtcbiAgICAgIGw6ICduL25ebjEnLFxuICAgICAgcjogJ25eKDEtbjEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAzXG4gICAge1xuICAgICAgbDogJ25ebjEvLW5ebjInLFxuICAgICAgcjogJ25eKG4xLW4yKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNFxuICAgIHtcbiAgICAgIGw6ICduXm4xL25ebjInLFxuICAgICAgcjogJ25eKG4xLW4yKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNVxuICAgIHtcbiAgICAgIGw6ICduMSsoLW4yKm4zKScsXG4gICAgICByOiAnbjEtbjIqbjMnXG4gICAgfSwgLy8gU29sdmluZyB1c2VsZXNzIHBhcmVudGhlc2lzIDFcbiAgICB7XG4gICAgICBsOiAndiooLWMpJyxcbiAgICAgIHI6ICctYyp2J1xuICAgIH0sIC8vIFNvbHZpbmcgdXNlbGVzcyB1bmFyeSAyXG4gICAge1xuICAgICAgbDogJ24xKy1uMicsXG4gICAgICByOiAnbjEtbjInXG4gICAgfSwgLy8gU29sdmluZyArLSB0b2dldGhlciAobmV3ISlcbiAgICB7XG4gICAgICBsOiAndipjJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gaW52ZXJzaW9uIGNvbnN0YW50IHdpdGggdmFyaWFibGVcbiAgICB7XG4gICAgICBsOiAnKG4xXm4yKV5uMycsXG4gICAgICByOiAnKG4xXihuMipuMykpJ1xuICAgIH0gLy8gUG93ZXIgdG8gUG93ZXJcbiAgICBdO1xuICAgIHJldHVybiBzZXRSdWxlcztcbiAgfSAvLyBFbmQgcnVsZXNSYXRpb25hbGl6ZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogIEV4cGFuZCByZWN1cnNpdmVseSBhIHRyZWUgbm9kZSBmb3IgaGFuZGxpbmcgd2l0aCBleHByZXNzaW9ucyB3aXRoIGV4cG9uZW50c1xuICAgKiAgKGl0J3Mgbm90IGZvciBjb25zdGFudHMsIHN5bWJvbHMgb3IgZnVuY3Rpb25zIHdpdGggZXhwb25lbnRzKVxuICAgKiAgUFM6IFRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBpbnRlcm5hbCBmb3IgcmVjdXJzaW9uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIGV4cGFuZFBvd2VyKG5vZGUpXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV9IG5vZGUgICAgICAgICBDdXJyZW50IGV4cHJlc3Npb24gbm9kZVxuICAgKiBAcGFyYW0gIHtub2RlfSBwYXJlbnQgICAgICAgUGFyZW50IGN1cnJlbnQgbm9kZSBpbnNpZGUgdGhlIHJlY3Vyc2lvblxuICAgKiBAcGFyYW0gIChpbnR9ICAgICAgICAgICAgICAgUGFyZW50IG51bWJlciBvZiBjaGlkIGluc2lkZSB0aGUgcmVyY3Vyc2lvblxuICAgKlxuICAgKiBAcmV0dXJuIHtub2RlfSAgICAgICAgbm9kZSBleHByZXNzaW9uIHdpdGggYWxsIHBvd2VycyBleHBhbmRlZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBleHBhbmRQb3dlcihub2RlLCBwYXJlbnQsIGluZFBhcmVudCkge1xuICAgIHZhciB0cCA9IG5vZGUudHlwZTtcbiAgICB2YXIgaW50ZXJuYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMTsgLy8gVFJVRSBpbiBpbnRlcm5hbCBjYWxsc1xuXG4gICAgaWYgKHRwID09PSAnT3BlcmF0b3JOb2RlJyAmJiBub2RlLmlzQmluYXJ5KCkpIHtcbiAgICAgIHZhciBkb2VzID0gZmFsc2U7XG4gICAgICB2YXIgdmFsO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgIC8vIEZpcnN0IG9wZXJhdG9yOiBQYXJlbnRoZXNpcyBvciBVbmFyeU1pbnVzXG4gICAgICAgIGlmICgobm9kZS5hcmdzWzBdLnR5cGUgPT09ICdQYXJlbnRoZXNpc05vZGUnIHx8IG5vZGUuYXJnc1swXS50eXBlID09PSAnT3BlcmF0b3JOb2RlJykgJiYgbm9kZS5hcmdzWzFdLnR5cGUgPT09ICdDb25zdGFudE5vZGUnKSB7XG4gICAgICAgICAgLy8gU2Vjb25kIG9wZXJhdG9yOiBDb25zdGFudFxuICAgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQobm9kZS5hcmdzWzFdLnZhbHVlKTtcbiAgICAgICAgICBkb2VzID0gdmFsID49IDIgJiYgKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkb2VzKSB7XG4gICAgICAgIC8vIEV4cG9uZW50ID49IDJcbiAgICAgICAgLy8gQmVmb3JlOlxuICAgICAgICAvLyAgICAgICAgICAgIG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgLy8gcGFyZW50IHBvd1xuICAgICAgICAvLyAgICAgICAgICAgIGNvbnN0YW50XG4gICAgICAgIC8vXG4gICAgICAgIGlmICh2YWwgPiAyKSB7XG4gICAgICAgICAgLy8gRXhwb25lbnQgPiAyLFxuICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID4gMilcbiAgICAgICAgICAvLyAgICAgICAgICAgICBvcGVyYXRvciBBIC0tPiBTdWJ0cmVlXG4gICAgICAgICAgLy8gcGFyZW50ICAqXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgICAvLyAgICAgICAgICAgICBwb3dcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgY29uc3RhbnQgLSAxXG4gICAgICAgICAgLy9cbiAgICAgICAgICB2YXIgbkVzcVRvcG8gPSBub2RlLmFyZ3NbMF07XG4gICAgICAgICAgdmFyIG5EaXJUb3BvID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbbm9kZS5hcmdzWzBdLmNsb25lRGVlcCgpLCBuZXcgQ29uc3RhbnROb2RlKHZhbCAtIDEpXSk7XG4gICAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbkVzcVRvcG8sIG5EaXJUb3BvXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXhwbyA9IDIgLSBubyBwb3dlclxuICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID0gIDIpXG4gICAgICAgICAgLy8gICAgICAgICAgICAgb3BlcmF0b3IgQSAtLT4gU3VidHJlZVxuICAgICAgICAgIC8vIHBhcmVudCAgIG9wZXJcbiAgICAgICAgICAvLyAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWUpXG4gICAgICAgICAgLy9cbiAgICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLmFyZ3NbMF0sIG5vZGUuYXJnc1swXS5jbG9uZURlZXAoKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVybmFsKSB7XG4gICAgICAgICAgLy8gQ2hhbmdlIHBhcmVudCByZWZlcmVuY2VzIGluIGludGVybmFsIHJlY3Vyc2l2ZSBjYWxsc1xuICAgICAgICAgIGlmIChpbmRQYXJlbnQgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgcGFyZW50LmNvbnRlbnQgPSBub2RlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnQuYXJnc1tpbmRQYXJlbnRdID0gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZG9lc1xuXG4gICAgfSAvLyBiaW5hcnkgT3BlcmF0b3JOb2RlXG5cblxuICAgIGlmICh0cCA9PT0gJ1BhcmVudGhlc2lzTm9kZScpIHtcbiAgICAgIC8vIFJlY3Vyc2lvblxuICAgICAgZXhwYW5kUG93ZXIobm9kZS5jb250ZW50LCBub2RlLCAnY29udGVudCcpO1xuICAgIH0gZWxzZSBpZiAodHAgIT09ICdDb25zdGFudE5vZGUnICYmIHRwICE9PSAnU3ltYm9sTm9kZScpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4cGFuZFBvd2VyKG5vZGUuYXJnc1tpXSwgbm9kZSwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgLy8gcmV0dXJuIHRoZSByb290IG5vZGVcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfSAvLyBFbmQgZXhwYW5kUG93ZXJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEF1eGlsYXJ5IGZ1bmN0aW9uIGZvciByYXRpb25hbGl6ZVxuICAgKiBDb252ZXJ0IG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgaW4gb25lIHZhcmlhYmxlIGluIGEgY2Fub25pY2FsIHBvbHlub21pYWxcbiAgICogd2l0aCBvbmUgdGVybSBmb3IgZWFjaCBleHBvbmVudCBpbiBkZWNyZWFzaW5nIG9yZGVyXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHBvbHlUb0Nhbm9uaWNhbChub2RlIFssIGNvZWZmaWNpZW50c10pXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgICAgVGhlIG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgZXhwcmVzc2lvbiB0byBjb252ZXJ0IGluIGEgYSBjYW5vbmljYWwgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqXG4gICAqICAgICAgICBUaGUgc3RyaW5nIG9yIHRyZWUgZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBhdCBiZWxvdyBzeW50YXgsIHdpdGggZnJlZSBzcGFjZXM6XG4gICAqICAgICAgICAgKCAgKF4oLSk/IHwgWystXT8gKWN0ZSAoKik/IHZhciAoXmV4cG8pPyAgfCBjdGUgKStcbiAgICogICAgICAgV2hlcmUgJ3ZhcicgaXMgb25lIHZhcmlhYmxlIHdpdGggYW55IHZhbGlkIG5hbWVcbiAgICogICAgICAgICAgICAgJ2N0ZScgYXJlIHJlYWwgbnVtZXJpYyBjb25zdGFudHMgd2l0aCBhbnkgdmFsdWUuIEl0IGNhbiBiZSBvbWl0dGVkIGlmIGVxdWFsIHRoYW4gMVxuICAgKiAgICAgICAgICAgICAnZXhwbycgYXJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiAwLiBJdCBjYW4gYmUgb21pdHRlZCBpZiBlcXVhbCB0aGFuIDEuXG4gICAqXG4gICAqIEBwYXJhbSAge2FycmF5fSAgIGNvZWZmaWNpZW50cyAgICAgICAgICAgICBPcHRpb25hbCByZXR1cm5zIGNvZWZmaWNpZW50cyBzb3J0ZWQgYnkgaW5jcmVhc2VkIGV4cG9uZW50XG4gICAqXG4gICAqXG4gICAqIEByZXR1cm4ge25vZGV9ICAgICAgICBuZXcgbm9kZSB0cmVlIHdpdGggb25lIHZhcmlhYmxlIHBvbHlub21pYWwgb3Igc3RyaW5nIGVycm9yLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBvbHlUb0Nhbm9uaWNhbChub2RlLCBjb2VmZmljaWVudHMpIHtcbiAgICBpZiAoY29lZmZpY2llbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvZWZmaWNpZW50cyA9IFtdO1xuICAgIH0gLy8gY29lZmZpY2llbnRzLlxuXG5cbiAgICBjb2VmZmljaWVudHNbMF0gPSAwOyAvLyBpbmRleCBpcyB0aGUgZXhwb25lbnRcblxuICAgIHZhciBvID0ge307XG4gICAgby5jdGUgPSAxO1xuICAgIG8ub3BlciA9ICcrJzsgLy8gZmlyZTogbWFyayB3aXRoICogb3IgXiB3aGVuIGZpbmRzICogb3IgXiBkb3duIHRyZWUsIHJlc2V0IHRvIFwiXCIgd2l0aCArIGFuZCAtLlxuICAgIC8vICAgICAgIEl0IGlzIHVzZWQgdG8gZGVkdWNlIHRoZSBleHBvbmVudDogMSBmb3IgKiwgMCBmb3IgXCJcIi5cblxuICAgIG8uZmlyZSA9ICcnO1xuICAgIHZhciBtYXhFeHBvID0gMDsgLy8gbWF4aW11bSBleHBvbmVudFxuXG4gICAgdmFyIHZhcm5hbWUgPSAnJzsgLy8gdmFyaWFibGUgbmFtZVxuXG4gICAgcmVjdXJQb2wobm9kZSwgbnVsbCwgbyk7XG4gICAgbWF4RXhwbyA9IGNvZWZmaWNpZW50cy5sZW5ndGggLSAxO1xuICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgdmFyIG5vO1xuXG4gICAgZm9yICh2YXIgaSA9IG1heEV4cG87IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoY29lZmZpY2llbnRzW2ldID09PSAwKSBjb250aW51ZTtcbiAgICAgIHZhciBuMSA9IG5ldyBDb25zdGFudE5vZGUoZmlyc3QgPyBjb2VmZmljaWVudHNbaV0gOiBNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pKTtcbiAgICAgIHZhciBvcCA9IGNvZWZmaWNpZW50c1tpXSA8IDAgPyAnLScgOiAnKyc7XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBJcyBub3QgYSBjb25zdGFudCB3aXRob3V0IHZhcmlhYmxlXG4gICAgICAgIHZhciBuMiA9IG5ldyBTeW1ib2xOb2RlKHZhcm5hbWUpO1xuXG4gICAgICAgIGlmIChpID4gMSkge1xuICAgICAgICAgIHZhciBuMyA9IG5ldyBDb25zdGFudE5vZGUoaSk7XG4gICAgICAgICAgbjIgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuMiwgbjNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2VmZmljaWVudHNbaV0gPT09IC0xICYmIGZpcnN0KSB7XG4gICAgICAgICAgbjEgPSBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbbjJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pID09PSAxKSB7XG4gICAgICAgICAgbjEgPSBuMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuMSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbjEsIG4yXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgIG5vID0gbjE7XG4gICAgICB9IGVsc2UgaWYgKG9wID09PSAnKycpIHtcbiAgICAgICAgbm8gPSBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtubywgbjFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtubywgbjFdKTtcbiAgICAgIH1cblxuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IC8vIGZvclxuXG5cbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm87XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZSBhdXhpbGFyeSBmdW5jdGlvbiBpbnNpZGUgcG9seVRvQ2Fub25pY2FsIGZvclxuICAgICAqIGNvbnZlcnRpbmcgZXhwcmVzc2lvbiBpbiBjYW5vbmljYWwgZm9ybVxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgIHJlY3VyUG9sKG5vZGUsIG5vUGFpLCBvYmopXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICBUaGUgY3VycmVudCBzdWJwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0gIHtOb2RlIHwgTnVsbH0gIG5vUGFpICAgVGhlIGN1cnJlbnQgcGFyZW50IG5vZGVcbiAgICAgKiBAcGFyYW0gIHtvYmplY3R9ICAgIG9iaiAgICAgICAgT2JqZWN0IHdpdGggbWFueSBpbnRlcm5hbCBmbGFnc1xuICAgICAqXG4gICAgICogQHJldHVybiB7fSAgICAgICAgICAgICAgICAgICAgTm8gcmV0dXJuLiBJZiBlcnJvciwgdGhyb3dzIGFuIGV4Y2VwdGlvblxuICAgICAqL1xuXG5cbiAgICBmdW5jdGlvbiByZWN1clBvbChub2RlLCBub1BhaSwgbykge1xuICAgICAgdmFyIHRwID0gbm9kZS50eXBlO1xuXG4gICAgICBpZiAodHAgPT09ICdGdW5jdGlvbk5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIEZ1bmN0aW9uTmFtZSAqKioqKlxuICAgICAgICAvLyBObyBmdW5jdGlvbiBjYWxsIGluIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTtcbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdPcGVyYXRvck5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIE9wZXJhdG9yTmFtZSAqKioqKlxuICAgICAgICBpZiAoJystKl4nLmluZGV4T2Yobm9kZS5vcCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ09wZXJhdG9yICcgKyBub2RlLm9wICsgJyBpbnZhbGlkJyk7XG5cbiAgICAgICAgaWYgKG5vUGFpICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gLSh1bmFyeSksXiAgOiBjaGlsZHJlbiBvZiAqLCssLVxuICAgICAgICAgIGlmICgobm9kZS5mbiA9PT0gJ3VuYXJ5TWludXMnIHx8IG5vZGUuZm4gPT09ICdwb3cnKSAmJiBub1BhaS5mbiAhPT0gJ2FkZCcgJiYgbm9QYWkuZm4gIT09ICdzdWJ0cmFjdCcgJiYgbm9QYWkuZm4gIT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCAnICsgbm9kZS5vcCArICcgcGxhY2luZycpO1xuICAgICAgICAgIH0gLy8gLSwrLCogOiBjaGlsZHJlbiBvZiArLC1cblxuXG4gICAgICAgICAgaWYgKChub2RlLmZuID09PSAnc3VidHJhY3QnIHx8IG5vZGUuZm4gPT09ICdhZGQnIHx8IG5vZGUuZm4gPT09ICdtdWx0aXBseScpICYmIG5vUGFpLmZuICE9PSAnYWRkJyAmJiBub1BhaS5mbiAhPT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICcgKyBub2RlLm9wICsgJyBwbGFjaW5nJyk7XG4gICAgICAgICAgfSAvLyAtLCsgOiBmaXJzdCBjaGlsZFxuXG5cbiAgICAgICAgICBpZiAoKG5vZGUuZm4gPT09ICdzdWJ0cmFjdCcgfHwgbm9kZS5mbiA9PT0gJ2FkZCcgfHwgbm9kZS5mbiA9PT0gJ3VuYXJ5TWludXMnKSAmJiBvLm5vRmlsICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIG5vZGUub3AgKyAnIHBsYWNpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSGFzIHBhcmVudFxuICAgICAgICAvLyBGaXJlcnM6IF4sKiAgICAgICBPbGQ6ICAgXiwmLC0odW5hcnkpOiBmaXJlcnNcblxuXG4gICAgICAgIGlmIChub2RlLm9wID09PSAnXicgfHwgbm9kZS5vcCA9PT0gJyonKSB7XG4gICAgICAgICAgby5maXJlID0gbm9kZS5vcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBub2RlLmFyZ3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgLy8gKywtOiByZXNldCBmaXJlXG4gICAgICAgICAgaWYgKG5vZGUuZm4gPT09ICd1bmFyeU1pbnVzJykgby5vcGVyID0gJy0nO1xuXG4gICAgICAgICAgaWYgKG5vZGUub3AgPT09ICcrJyB8fCBub2RlLmZuID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICBvLmZpcmUgPSAnJztcbiAgICAgICAgICAgIG8uY3RlID0gMTsgLy8gZGVmYXVsdCBpZiB0aGVyZSBpcyBubyBjb25zdGFudFxuXG4gICAgICAgICAgICBvLm9wZXIgPSBfaSA9PT0gMCA/ICcrJyA6IG5vZGUub3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgby5ub0ZpbCA9IF9pOyAvLyBudW1iZXIgb2Ygc29uXG5cbiAgICAgICAgICByZWN1clBvbChub2RlLmFyZ3NbX2ldLCBub2RlLCBvKTtcbiAgICAgICAgfSAvLyBmb3IgaW4gY2hpbGRyZW5cblxuICAgICAgfSBlbHNlIGlmICh0cCA9PT0gJ1N5bWJvbE5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIFN5bWJvbE5hbWUgKioqKipcbiAgICAgICAgaWYgKG5vZGUubmFtZSAhPT0gdmFybmFtZSAmJiB2YXJuYW1lICE9PSAnJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFybmFtZSA9IG5vZGUubmFtZTtcblxuICAgICAgICBpZiAobm9QYWkgPT09IG51bGwpIHtcbiAgICAgICAgICBjb2VmZmljaWVudHNbMV0gPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBeOiBTeW1ib2wgaXMgRmlyc3QgY2hpbGRcblxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nICYmIG8ubm9GaWwgIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luIHBvd2VyIHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIGZpcnN0IHBhcmFtZXRlcicpO1xuICAgICAgICB9IC8vICo6IFN5bWJvbCBpcyBTZWNvbmQgY2hpbGRcblxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJyonICYmIG8ubm9GaWwgIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luIG11bHRpcGx5IHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIHNlY29uZCBwYXJhbWV0ZXInKTtcbiAgICAgICAgfSAvLyBTeW1ib2w6IGZpcmVycyAnJywqID0+IGl0IG1lYW5zIHRoZXJlIGlzIG5vIGV4cG9uZW50IGFib3ZlLCBzbyBpdCdzIDEgKGN0ZSAqIHZhcilcblxuXG4gICAgICAgIGlmIChvLmZpcmUgPT09ICcnIHx8IG8uZmlyZSA9PT0gJyonKSB7XG4gICAgICAgICAgaWYgKG1heEV4cG8gPCAxKSBjb2VmZmljaWVudHNbMV0gPSAwO1xuICAgICAgICAgIGNvZWZmaWNpZW50c1sxXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgICAgbWF4RXhwbyA9IE1hdGgubWF4KDEsIG1heEV4cG8pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICB2YXIgdmFsb3IgPSBwYXJzZUZsb2F0KG5vZGUudmFsdWUpO1xuXG4gICAgICAgIGlmIChub1BhaSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvZWZmaWNpZW50c1swXSA9IHZhbG9yO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nKSB7XG4gICAgICAgICAgLy8gY3RlOiBzZWNvbmQgIGNoaWxkIG9mIHBvd2VyXG4gICAgICAgICAgaWYgKG8ubm9GaWwgIT09IDEpIHRocm93IG5ldyBFcnJvcignQ29uc3RhbnQgY2Fubm90IGJlIHBvd2VyZWQnKTtcblxuICAgICAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWxvcikgfHwgdmFsb3IgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24taW50ZWdlciBleHBvbmVudCBpcyBub3QgYWxsb3dlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAodmFyIF9pMiA9IG1heEV4cG8gKyAxOyBfaTIgPCB2YWxvcjsgX2kyKyspIHtcbiAgICAgICAgICAgIGNvZWZmaWNpZW50c1tfaTJdID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsb3IgPiBtYXhFeHBvKSBjb2VmZmljaWVudHNbdmFsb3JdID0gMDtcbiAgICAgICAgICBjb2VmZmljaWVudHNbdmFsb3JdICs9IG8uY3RlICogKG8ub3BlciA9PT0gJysnID8gMSA6IC0xKTtcbiAgICAgICAgICBtYXhFeHBvID0gTWF0aC5tYXgodmFsb3IsIG1heEV4cG8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG8uY3RlID0gdmFsb3I7IC8vIEN0ZTogZmlyZXIgJycgPT4gVGhlcmUgaXMgbm8gZXhwb25lbnQgYW5kIG5vIG11bHRpcGxpY2F0aW9uLCBzbyB0aGUgZXhwb25lbnQgaXMgMC5cblxuICAgICAgICBpZiAoby5maXJlID09PSAnJykge1xuICAgICAgICAgIGNvZWZmaWNpZW50c1swXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwZSAnICsgdHAgKyAnIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICB9XG4gICAgfSAvLyBFbmQgb2YgcmVjdXJQb2xcblxuICB9IC8vIEVuZCBvZiBwb2x5VG9DYW5vbmljYWxcblxuXG4gIHJldHVybiByYXRpb25hbGl6ZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYXRpb25hbGl6ZSA9IGNyZWF0ZVJhdGlvbmFsaXplOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3V0aWxcIik7XG5cbnZhciBfc2ltcGxpZnlDb3JlID0gcmVxdWlyZShcIi4vc2ltcGxpZnkvc2ltcGxpZnlDb3JlXCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29uc3RhbnQgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvbnN0YW50XCIpO1xuXG52YXIgX3Jlc29sdmUgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9yZXNvbHZlXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnc2ltcGxpZnknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ3BhcnNlJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAncG93JywgJ2lzWmVybycsICdlcXVhbCcsICc/ZnJhY3Rpb24nLCAnP2JpZ251bWJlcicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZVNpbXBsaWZ5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcbiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSAoMCwgX3NpbXBsaWZ5Q29uc3RhbnQuY3JlYXRlU2ltcGxpZnlDb25zdGFudCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSk7XG4gIHZhciBzaW1wbGlmeUNvcmUgPSAoMCwgX3NpbXBsaWZ5Q29yZS5jcmVhdGVTaW1wbGlmeUNvcmUpKHtcbiAgICBlcXVhbDogZXF1YWwsXG4gICAgaXNaZXJvOiBpc1plcm8sXG4gICAgYWRkOiBhZGQsXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBkaXZpZGU6IGRpdmlkZSxcbiAgICBwb3c6IHBvdyxcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcbiAgdmFyIHJlc29sdmUgPSAoMCwgX3Jlc29sdmUuY3JlYXRlUmVzb2x2ZSkoe1xuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcblxuICB2YXIgX2NyZWF0ZVV0aWwgPSAoMCwgX3V0aWwuY3JlYXRlVXRpbCkoe1xuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSksXG4gICAgICBpc0NvbW11dGF0aXZlID0gX2NyZWF0ZVV0aWwuaXNDb21tdXRhdGl2ZSxcbiAgICAgIGlzQXNzb2NpYXRpdmUgPSBfY3JlYXRlVXRpbC5pc0Fzc29jaWF0aXZlLFxuICAgICAgZmxhdHRlbiA9IF9jcmVhdGVVdGlsLmZsYXR0ZW4sXG4gICAgICB1bmZsYXR0ZW5yID0gX2NyZWF0ZVV0aWwudW5mbGF0dGVucixcbiAgICAgIHVuZmxhdHRlbmwgPSBfY3JlYXRlVXRpbC51bmZsYXR0ZW5sLFxuICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTaW1wbGlmeSBhbiBleHByZXNzaW9uIHRyZWUuXG4gICAqXG4gICAqIEEgbGlzdCBvZiBydWxlcyBhcmUgYXBwbGllZCB0byBhbiBleHByZXNzaW9uLCByZXBlYXRpbmcgb3ZlciB0aGUgbGlzdCB1bnRpbFxuICAgKiBubyBmdXJ0aGVyIGNoYW5nZXMgYXJlIG1hZGUuXG4gICAqIEl0J3MgcG9zc2libGUgdG8gcGFzcyBhIGN1c3RvbSBzZXQgb2YgcnVsZXMgdG8gdGhlIGZ1bmN0aW9uIGFzIHNlY29uZFxuICAgKiBhcmd1bWVudC4gQSBydWxlIGNhbiBiZSBzcGVjaWZpZWQgYXMgYW4gb2JqZWN0LCBzdHJpbmcsIG9yIGZ1bmN0aW9uOlxuICAgKlxuICAgKiAgICAgY29uc3QgcnVsZXMgPSBbXG4gICAqICAgICAgIHsgbDogJ24xKm4zICsgbjIqbjMnLCByOiAnKG4xK24yKSpuMycgfSxcbiAgICogICAgICAgJ24xKm4zICsgbjIqbjMgLT4gKG4xK24yKSpuMycsXG4gICAqICAgICAgIGZ1bmN0aW9uIChub2RlKSB7XG4gICAqICAgICAgICAgLy8gLi4uIHJldHVybiBhIG5ldyBub2RlIG9yIHJldHVybiB0aGUgbm9kZSB1bmNoYW5nZWRcbiAgICogICAgICAgICByZXR1cm4gbm9kZVxuICAgKiAgICAgICB9XG4gICAqICAgICBdXG4gICAqXG4gICAqIFN0cmluZyBhbmQgb2JqZWN0IHJ1bGVzIGNvbnNpc3Qgb2YgYSBsZWZ0IGFuZCByaWdodCBwYXR0ZXJuLiBUaGUgbGVmdCBpc1xuICAgKiB1c2VkIHRvIG1hdGNoIGFnYWluc3QgdGhlIGV4cHJlc3Npb24gYW5kIHRoZSByaWdodCBkZXRlcm1pbmVzIHdoYXQgbWF0Y2hlc1xuICAgKiBhcmUgcmVwbGFjZWQgd2l0aC4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGEgcGF0dGVybiBhbmQgYSBub3JtYWxcbiAgICogZXhwcmVzc2lvbiBpcyB0aGF0IHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmVcbiAgICogaW50ZXJwcmV0ZWQgYXMgd2lsZGNhcmRzOlxuICAgKlxuICAgKiAtICduJyAtIG1hdGNoZXMgYW55IE5vZGVcbiAgICogLSAnYycgLSBtYXRjaGVzIGFueSBDb25zdGFudE5vZGVcbiAgICogLSAndicgLSBtYXRjaGVzIGFueSBOb2RlIHRoYXQgaXMgbm90IGEgQ29uc3RhbnROb2RlXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGxpc3Qgb2YgcnVsZXMgaXMgZXhwb3NlZCBvbiB0aGUgZnVuY3Rpb24gYXMgYHNpbXBsaWZ5LnJ1bGVzYFxuICAgKiBhbmQgY2FuIGJlIHVzZWQgYXMgYSBiYXNpcyB0byBidWlsdCBhIHNldCBvZiBjdXN0b20gcnVsZXMuXG4gICAqXG4gICAqIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHRoZW9yeSwgc2VlOlxuICAgKlxuICAgKiAtIFtTdHJhdGVnaWVzIGZvciBzaW1wbGlmeWluZyBtYXRoIGV4cHJlc3Npb25zIChTdGFja292ZXJmbG93KV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU0MDIyNy9zdHJhdGVnaWVzLWZvci1zaW1wbGlmeWluZy1tYXRoLWV4cHJlc3Npb25zKVxuICAgKiAtIFtTeW1ib2xpYyBjb21wdXRhdGlvbiAtIFNpbXBsaWZpY2F0aW9uIChXaWtpcGVkaWEpXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW1ib2xpY19jb21wdXRhdGlvbiNTaW1wbGlmaWNhdGlvbilcbiAgICpcbiAgICogIEFuIG9wdGlvbmFsIGBvcHRpb25zYCBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIGFzIGxhc3QgYXJndW1lbnQgb2YgYHNpbXBsaWZ5YC5cbiAgICogIFRoZXJlIGlzIGN1cnJlbnRseSBvbmUgb3B0aW9uIGF2YWlsYWJsZTogYGV4YWN0RnJhY3Rpb25zYCwgYSBib29sZWFuIHdoaWNoXG4gICAqICBpcyBgdHJ1ZWAgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnkoZXhwcilcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzKVxuICAgKiAgICAgc2ltcGxpZnkoZXhwciwgcnVsZXMpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUsIG9wdGlvbnMpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBzY29wZSlcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHNjb3BlLCBvcHRpb25zKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzIgKiAxICogeCBeICgyIC0gMSknKSAgICAgIC8vIE5vZGUgXCIyICogeFwiXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5KCcyICogMyAqIHgnLCB7eDogNH0pICAgICAgICAvLyBOb2RlIFwiMjRcIlxuICAgKiAgICAgY29uc3QgZiA9IG1hdGgucGFyc2UoJzIgKiAxICogeCBeICgyIC0gMSknKVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeShmKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSBcIjIgKiB4XCJcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzAuNCAqIHgnLCB7fSwge2V4YWN0RnJhY3Rpb25zOiB0cnVlfSkgIC8vIE5vZGUgXCJ4ICogMiAvIDVcIlxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMC40ICogeCcsIHt9LCB7ZXhhY3RGcmFjdGlvbnM6IGZhbHNlfSkgLy8gTm9kZSBcIjAuNCAqIHhcIlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGRlcml2YXRpdmUsIHBhcnNlLCBldmFsdWF0ZSwgcmF0aW9uYWxpemVcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlIHwgc3RyaW5nfSBleHByXG4gICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgc2ltcGxpZmllZFxuICAgKiBAcGFyYW0ge0FycmF5PHtsOnN0cmluZywgcjogc3RyaW5nfSB8IHN0cmluZyB8IGZ1bmN0aW9uPn0gW3J1bGVzXVxuICAgKiAgICAgICAgICAgIE9wdGlvbmFsIGxpc3Qgd2l0aCBjdXN0b20gcnVsZXNcbiAgICogQHJldHVybiB7Tm9kZX0gUmV0dXJucyB0aGUgc2ltcGxpZmllZCBmb3JtIG9mIGBleHByYFxuICAgKi9cblxuXG4gIHZhciBzaW1wbGlmeSA9IHR5cGVkKCdzaW1wbGlmeScsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RPYmplY3QoZXhwciwgc2NvcGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShwYXJzZShleHByKSwgc2ltcGxpZnkucnVsZXMsIHNjb3BlLCBvcHRpb25zKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIEFycmF5JzogZnVuY3Rpb24gc3RyaW5nQXJyYXkoZXhwciwgcnVsZXMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShwYXJzZShleHByKSwgcnVsZXMsIHt9LCB7fSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBBcnJheSwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nQXJyYXlPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgQXJyYXksIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nQXJyYXlPYmplY3RPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdChleHByLCBzY29wZSkge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdE9iamVjdChleHByLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBOb2RlOiBmdW5jdGlvbiBOb2RlKGV4cHIpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBzaW1wbGlmeS5ydWxlcywge30sIHt9KTtcbiAgICB9LFxuICAgICdOb2RlLCBBcnJheSc6IGZ1bmN0aW9uIE5vZGVBcnJheShleHByLCBydWxlcykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIEFycmF5LCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlQXJyYXlPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkoZXhwciwgcnVsZXMsIHNjb3BlLCB7fSk7XG4gICAgfSxcbiAgICAnTm9kZSwgQXJyYXksIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZUFycmF5T2JqZWN0T2JqZWN0KGV4cHIsIHJ1bGVzLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcnVsZXMgPSBfYnVpbGRSdWxlcyhydWxlcyk7XG4gICAgICB2YXIgcmVzID0gcmVzb2x2ZShleHByLCBzY29wZSk7XG4gICAgICByZXMgPSByZW1vdmVQYXJlbnMocmVzKTtcbiAgICAgIHZhciB2aXNpdGVkID0ge307XG4gICAgICB2YXIgc3RyID0gcmVzLnRvU3RyaW5nKHtcbiAgICAgICAgcGFyZW50aGVzaXM6ICdhbGwnXG4gICAgICB9KTtcblxuICAgICAgd2hpbGUgKCF2aXNpdGVkW3N0cl0pIHtcbiAgICAgICAgdmlzaXRlZFtzdHJdID0gdHJ1ZTtcbiAgICAgICAgX2xhc3RzeW0gPSAwOyAvLyBjb3VudGVyIGZvciBwbGFjZWhvbGRlciBzeW1ib2xzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNbaV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcyA9IHJ1bGVzW2ldKHJlcywgb3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYXR0ZW4ocmVzKTtcbiAgICAgICAgICAgIHJlcyA9IGFwcGx5UnVsZShyZXMsIHJ1bGVzW2ldKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1bmZsYXR0ZW5sKHJlcyk7IC8vIHVzaW5nIGxlZnQtaGVhdnkgYmluYXJ5IHRyZWUgaGVyZSBzaW5jZSBjdXN0b20gcnVsZSBmdW5jdGlvbnMgbWF5IGV4cGVjdCBpdFxuICAgICAgICB9XG5cbiAgICAgICAgc3RyID0gcmVzLnRvU3RyaW5nKHtcbiAgICAgICAgICBwYXJlbnRoZXNpczogJ2FsbCdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgc2ltcGxpZnkuc2ltcGxpZnlDb3JlID0gc2ltcGxpZnlDb3JlO1xuICBzaW1wbGlmeS5yZXNvbHZlID0gcmVzb2x2ZTtcblxuICBmdW5jdGlvbiByZW1vdmVQYXJlbnMobm9kZSkge1xuICAgIHJldHVybiBub2RlLnRyYW5zZm9ybShmdW5jdGlvbiAobm9kZSwgcGF0aCwgcGFyZW50KSB7XG4gICAgICByZXR1cm4gKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkobm9kZSkgPyByZW1vdmVQYXJlbnMobm9kZS5jb250ZW50KSA6IG5vZGU7XG4gICAgfSk7XG4gIH0gLy8gQWxsIGNvbnN0YW50cyB0aGF0IGFyZSBhbGxvd2VkIGluIHJ1bGVzXG5cblxuICB2YXIgU1VQUE9SVEVEX0NPTlNUQU5UUyA9IHtcbiAgICBcInRydWVcIjogdHJ1ZSxcbiAgICBcImZhbHNlXCI6IHRydWUsXG4gICAgZTogdHJ1ZSxcbiAgICBpOiB0cnVlLFxuICAgIEluZmluaXR5OiB0cnVlLFxuICAgIExOMjogdHJ1ZSxcbiAgICBMTjEwOiB0cnVlLFxuICAgIExPRzJFOiB0cnVlLFxuICAgIExPRzEwRTogdHJ1ZSxcbiAgICBOYU46IHRydWUsXG4gICAgcGhpOiB0cnVlLFxuICAgIHBpOiB0cnVlLFxuICAgIFNRUlQxXzI6IHRydWUsXG4gICAgU1FSVDI6IHRydWUsXG4gICAgdGF1OiB0cnVlIC8vIG51bGw6IGZhbHNlLFxuICAgIC8vIHVuZGVmaW5lZDogZmFsc2UsXG4gICAgLy8gdmVyc2lvbjogZmFsc2UsXG5cbiAgfTsgLy8gQXJyYXkgb2Ygc3RyaW5ncywgdXNlZCB0byBidWlsZCB0aGUgcnVsZVNldC5cbiAgLy8gRWFjaCBsIChsZWZ0IHNpZGUpIGFuZCByIChyaWdodCBzaWRlKSBhcmUgcGFyc2VkIGJ5XG4gIC8vIHRoZSBleHByZXNzaW9uIHBhcnNlciBpbnRvIGEgbm9kZSB0cmVlLlxuICAvLyBMZWZ0IGhhbmQgc2lkZXMgYXJlIG1hdGNoZWQgdG8gc3VidHJlZXMgd2l0aGluIHRoZVxuICAvLyBleHByZXNzaW9uIHRvIGJlIHBhcnNlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgcmlnaHRcbiAgLy8gaGFuZCBzaWRlLlxuICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY29uc3RyYWludHMgb24gY29uc3RhbnRzIChlaXRoZXIgaW4gdGhlIGZvcm0gb2YgYSAnPScgZXhwcmVzc2lvbiBvciBhIGNhbGxiYWNrIFtjYWxsYmFjayBhbGxvd3MgdGhpbmdzIGxpa2UgY29tcGFyaW5nIHN5bWJvbHMgYWxwaGFiZXRpY2FsbHldKVxuICAvLyBUbyBldmFsdWF0ZSBsaHMgY29uc3RhbnRzIGZvciByaHMgY29uc3RhbnRzLCB1c2U6IHsgbDogJ2MxK2MyJywgcjogJ2MzJywgZXZhbHVhdGU6ICdjMyA9IGMxICsgYzInIH0uIE11bHRpcGxlIGFzc2lnbm1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgJzsnIGluIGJsb2NrIGZvcm1hdC5cbiAgLy8gSXQgaXMgcG9zc2libGUgdG8gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCB3aXRoIGNvbmZsaWN0aW5nIHJ1bGVzXG5cbiAgc2ltcGxpZnkucnVsZXMgPSBbc2ltcGxpZnlDb3JlLCAvLyB7IGw6ICduKzAnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduXjAnLCByOiAnMScgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICcwKm4nLCByOiAnMCcgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduL24nLCByOiAnMSd9LCAgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduXjEnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICcrbjEnLCByOiduMScgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduLS1uMScsIHI6J24rbjEnIH0sIC8vIHNpbXBsaWZ5Q29yZVxuICB7XG4gICAgbDogJ2xvZyhlKScsXG4gICAgcjogJzEnXG4gIH0sIC8vIHRlbXBvcmFyeSBydWxlc1xuICB7XG4gICAgbDogJ24tbjEnLFxuICAgIHI6ICduKy1uMSdcbiAgfSwgLy8gdGVtcG9yYXJpbHkgcmVwbGFjZSAnc3VidHJhY3QnIHNvIHdlIGNhbiBmdXJ0aGVyIGZsYXR0ZW4gdGhlICdhZGQnIG9wZXJhdG9yXG4gIHtcbiAgICBsOiAnLShjKnYpJyxcbiAgICByOiAnKC1jKSAqIHYnXG4gIH0sIC8vIG1ha2Ugbm9uLWNvbnN0YW50IHRlcm1zIHBvc2l0aXZlXG4gIHtcbiAgICBsOiAnLXYnLFxuICAgIHI6ICcoLTEpICogdidcbiAgfSwge1xuICAgIGw6ICduL24xXm4yJyxcbiAgICByOiAnbipuMV4tbjInXG4gIH0sIC8vIHRlbXBvcmFyaWx5IHJlcGxhY2UgJ2RpdmlkZScgc28gd2UgY2FuIGZ1cnRoZXIgZmxhdHRlbiB0aGUgJ211bHRpcGx5JyBvcGVyYXRvclxuICB7XG4gICAgbDogJ24vbjEnLFxuICAgIHI6ICduKm4xXi0xJ1xuICB9LCAvLyBleHBhbmQgbmVzdGVkIGV4cG9uZW50aWF0aW9uXG4gIHtcbiAgICBsOiAnKG4gXiBuMSkgXiBuMicsXG4gICAgcjogJ24gXiAobjEgKiBuMiknXG4gIH0sIC8vIGNvbGxlY3QgbGlrZSBmYWN0b3JzXG4gIHtcbiAgICBsOiAnbipuJyxcbiAgICByOiAnbl4yJ1xuICB9LCB7XG4gICAgbDogJ24gKiBuXm4xJyxcbiAgICByOiAnbl4objErMSknXG4gIH0sIHtcbiAgICBsOiAnbl5uMSAqIG5ebjInLFxuICAgIHI6ICduXihuMStuMiknXG4gIH0sIC8vIGNvbGxlY3QgbGlrZSB0ZXJtc1xuICB7XG4gICAgbDogJ24rbicsXG4gICAgcjogJzIqbidcbiAgfSwge1xuICAgIGw6ICduKy1uJyxcbiAgICByOiAnMCdcbiAgfSwge1xuICAgIGw6ICduMSpuMiArIG4yJyxcbiAgICByOiAnKG4xKzEpKm4yJ1xuICB9LCB7XG4gICAgbDogJ24xKm4zICsgbjIqbjMnLFxuICAgIHI6ICcobjErbjIpKm4zJ1xuICB9LCAvLyByZW1vdmUgcGFyZW50aGVzaXMgaW4gdGhlIGNhc2Ugb2YgbmVnYXRpbmcgYSBxdWFudGl0aXlcbiAge1xuICAgIGw6ICduMSArIC0xICogKG4yICsgbjMpJyxcbiAgICByOiAnbjEgKyAtMSAqIG4yICsgLTEgKiBuMydcbiAgfSwgc2ltcGxpZnlDb25zdGFudCwge1xuICAgIGw6ICcoLW4pKm4xJyxcbiAgICByOiAnLShuKm4xKSdcbiAgfSwgLy8gbWFrZSBmYWN0b3JzIHBvc2l0aXZlIChhbmQgdW5kbyAnbWFrZSBub24tY29uc3RhbnQgdGVybXMgcG9zaXRpdmUnKVxuICAvLyBvcmRlcmluZyBvZiBjb25zdGFudHNcbiAge1xuICAgIGw6ICdjK3YnLFxuICAgIHI6ICd2K2MnLFxuICAgIGNvbnRleHQ6IHtcbiAgICAgIGFkZDoge1xuICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBsOiAndipjJyxcbiAgICByOiAnYyp2JyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBtdWx0aXBseToge1xuICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH0sIC8vIHVuZG8gdGVtcG9yYXJ5IHJ1bGVzXG4gIC8vIHsgbDogJygtMSkgKiBuJywgcjogJy1uJyB9LCAvLyAjODExIGFkZGVkIHRlc3Qgd2hpY2ggcHJvdmVkIHRoaXMgaXMgcmVkdW5kYW50XG4gIHtcbiAgICBsOiAnbistbjEnLFxuICAgIHI6ICduLW4xJ1xuICB9LCAvLyB1bmRvIHJlcGxhY2UgJ3N1YnRyYWN0J1xuICB7XG4gICAgbDogJ24qKG4xXi0xKScsXG4gICAgcjogJ24vbjEnXG4gIH0sIC8vIHVuZG8gcmVwbGFjZSAnZGl2aWRlJ1xuICB7XG4gICAgbDogJ24qbjFeLW4yJyxcbiAgICByOiAnbi9uMV5uMidcbiAgfSwge1xuICAgIGw6ICduMV4tMScsXG4gICAgcjogJzEvbjEnXG4gIH0sIHtcbiAgICBsOiAnbioobjEvbjIpJyxcbiAgICByOiAnKG4qbjEpL24yJ1xuICB9LCAvLyAnKicgYmVmb3JlICcvJ1xuICB7XG4gICAgbDogJ24tKG4xK24yKScsXG4gICAgcjogJ24tbjEtbjInXG4gIH0sIC8vICctJyBiZWZvcmUgJysnXG4gIC8vIHsgbDogJyhuMS9uMikvbjMnLCByOiAnbjEvKG4yKm4zKScgfSxcbiAgLy8geyBsOiAnKG4qbjEpLyhuKm4yKScsIHI6ICduMS9uMicgfSxcbiAge1xuICAgIGw6ICcxKm4nLFxuICAgIHI6ICduJ1xuICB9LCAvLyB0aGlzIHBhdHRlcm4gY2FuIGJlIHByb2R1Y2VkIGJ5IHNpbXBsaWZ5Q29uc3RhbnRcbiAge1xuICAgIGw6ICduMS8objIvbjMpJyxcbiAgICByOiAnKG4xKm4zKS9uMidcbiAgfV07XG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgc3RyaW5nIGFycmF5IG9mIHJ1bGVzIGludG8gbm9kZXNcbiAgICpcbiAgICogRXhhbXBsZSBzeW50YXggZm9yIHJ1bGVzOlxuICAgKlxuICAgKiBQb3NpdGlvbiBjb25zdGFudHMgdG8gdGhlIGxlZnQgaW4gYSBwcm9kdWN0OlxuICAgKiB7IGw6ICduMSAqIGMxJywgcjogJ2MxICogbjEnIH1cbiAgICogbjEgaXMgYW55IE5vZGUsIGFuZCBjMSBpcyBhIENvbnN0YW50Tm9kZS5cbiAgICpcbiAgICogQXBwbHkgZGlmZmVyZW5jZSBvZiBzcXVhcmVzIGZvcm11bGE6XG4gICAqIHsgbDogJyhuMSAtIG4yKSAqIChuMSArIG4yKScsIHI6ICduMV4yIC0gbjJeMicgfVxuICAgKiBuMSwgbjIgbWVhbiBhbnkgTm9kZS5cbiAgICpcbiAgICogU2hvcnQgaGFuZCBub3RhdGlvbjpcbiAgICogJ24xICogYzEgLT4gYzEgKiBuMSdcbiAgICovXG5cbiAgZnVuY3Rpb24gX2J1aWxkUnVsZXMocnVsZXMpIHtcbiAgICAvLyBBcnJheSBvZiBydWxlcyB0byBiZSB1c2VkIHRvIHNpbXBsaWZ5IGV4cHJlc3Npb25zXG4gICAgdmFyIHJ1bGVTZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBydWxlID0gcnVsZXNbaV07XG4gICAgICB2YXIgbmV3UnVsZSA9IHZvaWQgMDtcblxuICAgICAgdmFyIHJ1bGVUeXBlID0gX3R5cGVvZihydWxlKTtcblxuICAgICAgc3dpdGNoIChydWxlVHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBsciA9IHJ1bGUuc3BsaXQoJy0+Jyk7XG5cbiAgICAgICAgICAgIGlmIChsci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgcnVsZSA9IHtcbiAgICAgICAgICAgICAgICBsOiBsclswXSxcbiAgICAgICAgICAgICAgICByOiBsclsxXVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgU3ludGF4RXJyb3IoJ0NvdWxkIG5vdCBwYXJzZSBydWxlOiAnICsgcnVsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIG5ld1J1bGUgPSB7XG4gICAgICAgICAgICBsOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5sKSksXG4gICAgICAgICAgICByOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5yKSlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJ1bGUuY29udGV4dCkge1xuICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHJ1bGUuY29udGV4dDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocnVsZS5ldmFsdWF0ZSkge1xuICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHBhcnNlKHJ1bGUuZXZhbHVhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc0Fzc29jaWF0aXZlKG5ld1J1bGUubCkpIHtcbiAgICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obmV3UnVsZS5sKTtcblxuICAgICAgICAgICAgdmFyIGV4cGFuZHN5bSA9IF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpO1xuXG4gICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkID0ge307XG4gICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkLmwgPSBtYWtlTm9kZShbbmV3UnVsZS5sLmNsb25lKCksIGV4cGFuZHN5bV0pOyAvLyBQdXNoIHRoZSBleHBhbmRzeW0gaW50byB0aGUgZGVlcGVzdCBwb3NzaWJsZSBicmFuY2guXG4gICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIG1hdGNoIHRoZSBuZXdSdWxlIGFnYWluc3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSBnZXRTcGxpdHMoKSBsYXRlciBvbi5cblxuICAgICAgICAgICAgZmxhdHRlbihuZXdSdWxlLmV4cGFuZGVkLmwpO1xuICAgICAgICAgICAgdW5mbGF0dGVucihuZXdSdWxlLmV4cGFuZGVkLmwpO1xuICAgICAgICAgICAgbmV3UnVsZS5leHBhbmRlZC5yID0gbWFrZU5vZGUoW25ld1J1bGUuciwgZXhwYW5kc3ltXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIG5ld1J1bGUgPSBydWxlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHJ1bGU6ICcgKyBydWxlVHlwZSk7XG4gICAgICB9IC8vIGNvbnNvbGUubG9nKCdBZGRpbmcgcnVsZTogJyArIHJ1bGVzW2ldKVxuICAgICAgLy8gY29uc29sZS5sb2cobmV3UnVsZSlcblxuXG4gICAgICBydWxlU2V0LnB1c2gobmV3UnVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVTZXQ7XG4gIH1cblxuICB2YXIgX2xhc3RzeW0gPSAwO1xuXG4gIGZ1bmN0aW9uIF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbE5vZGUoJ19wJyArIF9sYXN0c3ltKyspO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2ltcGxmaWVkIGZvcm0gb2Ygbm9kZSwgb3IgdGhlIG9yaWdpbmFsIG5vZGUgaWYgbm8gc2ltcGxpZmljYXRpb24gd2FzIHBvc3NpYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBub2RlXG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IFRoZSBzaW1wbGlmaWVkIGZvcm0gb2YgYGV4cHJgLCBvciB0aGUgb3JpZ2luYWwgbm9kZSBpZiBubyBzaW1wbGlmaWNhdGlvbiB3YXMgcG9zc2libGUuXG4gICAqL1xuXG5cbiAgdmFyIGFwcGx5UnVsZSA9IHR5cGVkKCdhcHBseVJ1bGUnLCB7XG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3Qobm9kZSwgcnVsZSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ0VudGVyaW5nIGFwcGx5UnVsZSgnICsgbm9kZS50b1N0cmluZygpICsgJyknKVxuICAgICAgLy8gRG8gbm90IGNsb25lIG5vZGUgdW5sZXNzIHdlIGZpbmQgYSBtYXRjaFxuICAgICAgdmFyIHJlcyA9IG5vZGU7IC8vIEZpcnN0IHJlcGxhY2Ugb3VyIGNoaWxkIG5vZGVzIHdpdGggdGhlaXIgc2ltcGxpZmllZCB2ZXJzaW9uc1xuICAgICAgLy8gSWYgYSBjaGlsZCBjb3VsZCBub3QgYmUgc2ltcGxpZmllZCwgdGhlIGFzc2lnbm1lbnRzIHdpbGwgaGF2ZVxuICAgICAgLy8gbm8gZWZmZWN0IHNpbmNlIHRoZSBub2RlIGlzIHJldHVybmVkIHVuY2hhbmdlZFxuXG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlIHx8IHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgICBpZiAocmVzLmFyZ3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXMuYXJnc1tpXSA9IGFwcGx5UnVsZShyZXMuYXJnc1tpXSwgcnVsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlcyBpbnN0YW5jZW9mIFBhcmVudGhlc2lzTm9kZSkge1xuICAgICAgICBpZiAocmVzLmNvbnRlbnQpIHtcbiAgICAgICAgICByZXMuY29udGVudCA9IGFwcGx5UnVsZShyZXMuY29udGVudCwgcnVsZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVHJ5IHRvIG1hdGNoIGEgcnVsZSBhZ2FpbnN0IHRoaXMgbm9kZVxuXG5cbiAgICAgIHZhciByZXBsID0gcnVsZS5yO1xuXG4gICAgICB2YXIgbWF0Y2hlcyA9IF9ydWxlTWF0Y2gocnVsZS5sLCByZXMpWzBdOyAvLyBJZiB0aGUgcnVsZSBpcyBhc3NvY2lhdGl2ZSBvcGVyYXRvciwgd2UgY2FuIHRyeSBtYXRjaGluZyBpdCB3aGlsZSBhbGxvd2luZyBhZGRpdGlvbmFsIHRlcm1zLlxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbWF0Y2ggcnVsZXMgbGlrZSAnbituJyB0byB0aGUgZXhwcmVzc2lvbiAnKDEreCkreCcgb3IgZXZlbiAneCsxK3gnIGlmIHRoZSBvcGVyYXRvciBpcyBjb21tdXRhdGl2ZS5cblxuXG4gICAgICBpZiAoIW1hdGNoZXMgJiYgcnVsZS5leHBhbmRlZCkge1xuICAgICAgICByZXBsID0gcnVsZS5leHBhbmRlZC5yO1xuICAgICAgICBtYXRjaGVzID0gX3J1bGVNYXRjaChydWxlLmV4cGFuZGVkLmwsIHJlcylbMF07XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIC8vIGNvbnN0IGJlZm9yZSA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSlcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG5vZGUgYnkgY2xvbmluZyB0aGUgcmhzIG9mIHRoZSBtYXRjaGVkIHJ1bGVcbiAgICAgICAgLy8gd2Uga2VlcCBhbnkgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gc3RhdGUgaWYgcmVsZXZhbnRcbiAgICAgICAgdmFyIGltcGxpY2l0ID0gcmVzLmltcGxpY2l0O1xuICAgICAgICByZXMgPSByZXBsLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKGltcGxpY2l0ICYmICdpbXBsaWNpdCcgaW4gcmVwbCkge1xuICAgICAgICAgIHJlcy5pbXBsaWNpdCA9IHRydWU7XG4gICAgICAgIH0gLy8gUmVwbGFjZSBwbGFjZWhvbGRlcnMgd2l0aCB0aGVpciByZXNwZWN0aXZlIG5vZGVzIHdpdGhvdXQgdHJhdmVyc2luZyBkZWVwZXIgaW50byB0aGUgcmVwbGFjZWQgbm9kZXNcblxuXG4gICAgICAgIHJlcyA9IHJlcy50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBpZiAobm9kZS5pc1N5bWJvbE5vZGUgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG1hdGNoZXMucGxhY2Vob2xkZXJzLCBub2RlLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5wbGFjZWhvbGRlcnNbbm9kZS5uYW1lXS5jbG9uZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyAvLyBjb25zdCBhZnRlciA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSlcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1NpbXBsaWZpZWQgJyArIGJlZm9yZSArICcgdG8gJyArIGFmdGVyKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBHZXQgKGJpbmFyeSkgY29tYmluYXRpb25zIG9mIGEgZmxhdHRlbmVkIGJpbmFyeSBub2RlXG4gICAqIGUuZy4gKyhub2RlMSwgbm9kZTIsIG5vZGUzKSAtPiBbXG4gICAqICAgICAgICArKG5vZGUxLCAgKyhub2RlMiwgbm9kZTMpKSxcbiAgICogICAgICAgICsobm9kZTIsICArKG5vZGUxLCBub2RlMykpLFxuICAgKiAgICAgICAgKyhub2RlMywgICsobm9kZTEsIG5vZGUyKSldXG4gICAqXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGdldFNwbGl0cyhub2RlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciByaWdodCwgcmlnaHRBcmdzO1xuICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG5cbiAgICBpZiAoaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDApO1xuICAgICAgICByaWdodEFyZ3Muc3BsaWNlKGksIDEpO1xuICAgICAgICByaWdodCA9IHJpZ2h0QXJncy5sZW5ndGggPT09IDEgPyByaWdodEFyZ3NbMF0gOiBtYWtlTm9kZShyaWdodEFyZ3MpO1xuICAgICAgICByZXMucHVzaChtYWtlTm9kZShbbm9kZS5hcmdzW2ldLCByaWdodF0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDEpO1xuICAgICAgcmlnaHQgPSByaWdodEFyZ3MubGVuZ3RoID09PSAxID8gcmlnaHRBcmdzWzBdIDogbWFrZU5vZGUocmlnaHRBcmdzKTtcbiAgICAgIHJlcy5wdXNoKG1ha2VOb2RlKFtub2RlLmFyZ3NbMF0sIHJpZ2h0XSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNldCB1bmlvbiBvZiB0d28gbWF0Y2gtcGxhY2Vob2xkZXJzIG9yIG51bGwgaWYgdGhlcmUgaXMgYSBjb25mbGljdC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBtZXJnZU1hdGNoKG1hdGNoMSwgbWF0Y2gyKSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyczoge31cbiAgICB9OyAvLyBTb21lIG1hdGNoZXMgbWF5IG5vdCBoYXZlIHBsYWNlaG9sZGVyczsgdGhpcyBpcyBPS1xuXG4gICAgaWYgKCFtYXRjaDEucGxhY2Vob2xkZXJzICYmICFtYXRjaDIucGxhY2Vob2xkZXJzKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSBpZiAoIW1hdGNoMS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJldHVybiBtYXRjaDI7XG4gICAgfSBlbHNlIGlmICghbWF0Y2gyLnBsYWNlaG9sZGVycykge1xuICAgICAgcmV0dXJuIG1hdGNoMTtcbiAgICB9IC8vIFBsYWNlaG9sZGVycyB3aXRoIHRoZSBzYW1lIGtleSBtdXN0IG1hdGNoIGV4YWN0bHlcblxuXG4gICAgZm9yICh2YXIga2V5IGluIG1hdGNoMS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJlcy5wbGFjZWhvbGRlcnNba2V5XSA9IG1hdGNoMS5wbGFjZWhvbGRlcnNba2V5XTtcblxuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShtYXRjaDIucGxhY2Vob2xkZXJzLCBrZXkpKSB7XG4gICAgICAgIGlmICghX2V4YWN0TWF0Y2gobWF0Y2gxLnBsYWNlaG9sZGVyc1trZXldLCBtYXRjaDIucGxhY2Vob2xkZXJzW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfa2V5IGluIG1hdGNoMi5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJlcy5wbGFjZWhvbGRlcnNbX2tleV0gPSBtYXRjaDIucGxhY2Vob2xkZXJzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIENvbWJpbmUgdHdvIGxpc3RzIG9mIG1hdGNoZXMgYnkgYXBwbHlpbmcgbWVyZ2VNYXRjaCB0byB0aGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIGxpc3RzIG9mIG1hdGNoZXMuXG4gICAqIEVhY2ggbGlzdCByZXByZXNlbnRzIG1hdGNoZXMgZm91bmQgaW4gb25lIGNoaWxkIG9mIGEgbm9kZS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBjb21iaW5lQ2hpbGRNYXRjaGVzKGxpc3QxLCBsaXN0Mikge1xuICAgIHZhciByZXMgPSBbXTtcblxuICAgIGlmIChsaXN0MS5sZW5ndGggPT09IDAgfHwgbGlzdDIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHZhciBtZXJnZWQ7XG5cbiAgICBmb3IgKHZhciBpMSA9IDA7IGkxIDwgbGlzdDEubGVuZ3RoOyBpMSsrKSB7XG4gICAgICBmb3IgKHZhciBpMiA9IDA7IGkyIDwgbGlzdDIubGVuZ3RoOyBpMisrKSB7XG4gICAgICAgIG1lcmdlZCA9IG1lcmdlTWF0Y2gobGlzdDFbaTFdLCBsaXN0MltpMl0pO1xuXG4gICAgICAgIGlmIChtZXJnZWQpIHtcbiAgICAgICAgICByZXMucHVzaChtZXJnZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogQ29tYmluZSBtdWx0aXBsZSBsaXN0cyBvZiBtYXRjaGVzIGJ5IGFwcGx5aW5nIG1lcmdlTWF0Y2ggdG8gdGhlIGNhcnRlc2lhbiBwcm9kdWN0IG9mIHR3byBsaXN0cyBvZiBtYXRjaGVzLlxuICAgKiBFYWNoIGxpc3QgcmVwcmVzZW50cyBtYXRjaGVzIGZvdW5kIGluIG9uZSBjaGlsZCBvZiBhIG5vZGUuXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHVuaXF1ZSBtYXRjaGVzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXRjaGVzKGNoaWxkTWF0Y2hlcykge1xuICAgIGlmIChjaGlsZE1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY2hpbGRNYXRjaGVzO1xuICAgIH1cblxuICAgIHZhciBzZXRzID0gY2hpbGRNYXRjaGVzLnJlZHVjZShjb21iaW5lQ2hpbGRNYXRjaGVzKTtcbiAgICB2YXIgdW5pcXVlU2V0cyA9IFtdO1xuICAgIHZhciB1bmlxdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHMgPSBKU09OLnN0cmluZ2lmeShzZXRzW2ldKTtcblxuICAgICAgaWYgKCF1bmlxdWVbc10pIHtcbiAgICAgICAgdW5pcXVlW3NdID0gdHJ1ZTtcbiAgICAgICAgdW5pcXVlU2V0cy5wdXNoKHNldHNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWVTZXRzO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgbm9kZSBtYXRjaGVzIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcnVsZVxuICAgKiBAcGFyYW0ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHJldHVybiB7T2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF0Y2gsIGlmIGl0IGV4aXN0cy5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfcnVsZU1hdGNoKHJ1bGUsIG5vZGUsIGlzU3BsaXQpIHtcbiAgICAvLyAgICBjb25zb2xlLmxvZygnRW50ZXJpbmcgX3J1bGVNYXRjaCgnICsgSlNPTi5zdHJpbmdpZnkocnVsZSkgKyAnLCAnICsgSlNPTi5zdHJpbmdpZnkobm9kZSkgKyAnKScpXG4gICAgLy8gICAgY29uc29sZS5sb2coJ3J1bGUgPSAnICsgcnVsZSlcbiAgICAvLyAgICBjb25zb2xlLmxvZygnbm9kZSA9ICcgKyBub2RlKVxuICAgIC8vICAgIGNvbnNvbGUubG9nKCdFbnRlcmluZyBfcnVsZU1hdGNoKCcgKyBydWxlLnRvU3RyaW5nKCkgKyAnLCAnICsgbm9kZS50b1N0cmluZygpICsgJyknKVxuICAgIHZhciByZXMgPSBbe1xuICAgICAgcGxhY2Vob2xkZXJzOiB7fVxuICAgIH1dO1xuXG4gICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUgJiYgbm9kZSBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSB8fCBydWxlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlICYmIG5vZGUgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUpIHtcbiAgICAgIC8vIElmIHRoZSBydWxlIGlzIGFuIE9wZXJhdG9yTm9kZSBvciBhIEZ1bmN0aW9uTm9kZSwgdGhlbiBub2RlIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHtcbiAgICAgICAgaWYgKHJ1bGUub3AgIT09IG5vZGUub3AgfHwgcnVsZS5mbiAhPT0gbm9kZS5mbikge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBydWxlIGFuZCBub2RlIG1hdGNoLiBTZWFyY2ggdGhlIGNoaWxkcmVuIG9mIHJ1bGUgYW5kIG5vZGUuXG5cblxuICAgICAgaWYgKG5vZGUuYXJncy5sZW5ndGggPT09IDEgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMSB8fCAhaXNBc3NvY2lhdGl2ZShub2RlKSB8fCBpc1NwbGl0KSB7XG4gICAgICAgIC8vIEV4cGVjdCBub24tYXNzb2NpYXRpdmUgb3BlcmF0b3JzIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgdmFyIGNoaWxkTWF0Y2hlcyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNoaWxkTWF0Y2ggPSBfcnVsZU1hdGNoKHJ1bGUuYXJnc1tpXSwgbm9kZS5hcmdzW2ldKTtcblxuICAgICAgICAgIGlmIChjaGlsZE1hdGNoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2hpbGQgZGlkIG5vdCBtYXRjaCwgc28gc3RvcCBzZWFyY2hpbmcgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9IC8vIFRoZSBjaGlsZCBtYXRjaGVkLCBzbyBhZGQgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gdGhlIGNoaWxkIHRvIG91ciByZXN1bHRcblxuXG4gICAgICAgICAgY2hpbGRNYXRjaGVzLnB1c2goY2hpbGRNYXRjaCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXMgPSBtZXJnZUNoaWxkTWF0Y2hlcyhjaGlsZE1hdGNoZXMpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID49IDIgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBub2RlIGlzIGZsYXR0ZW5lZCwgcnVsZSBpcyBub3RcbiAgICAgICAgLy8gQXNzb2NpYXRpdmUgb3BlcmF0b3JzL2Z1bmN0aW9ucyBjYW4gYmUgc3BsaXQgaW4gZGlmZmVyZW50IHdheXMgc28gd2UgY2hlY2sgaWYgdGhlIHJ1bGUgbWF0Y2hlcyBlYWNoXG4gICAgICAgIC8vIHRoZW0gYW5kIHJldHVybiB0aGVpciB1bmlvbi5cbiAgICAgICAgdmFyIHNwbGl0cyA9IGdldFNwbGl0cyhub2RlLCBydWxlLmNvbnRleHQpO1xuICAgICAgICB2YXIgc3BsaXRNYXRjaGVzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHNwbGl0cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICB2YXIgbWF0Y2hTZXQgPSBfcnVsZU1hdGNoKHJ1bGUsIHNwbGl0c1tfaV0sIHRydWUpOyAvLyByZWN1cnNpbmcgYXQgdGhlIHNhbWUgdHJlZSBkZXB0aCBoZXJlXG5cblxuICAgICAgICAgIHNwbGl0TWF0Y2hlcyA9IHNwbGl0TWF0Y2hlcy5jb25jYXQobWF0Y2hTZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNwbGl0TWF0Y2hlcztcbiAgICAgIH0gZWxzZSBpZiAocnVsZS5hcmdzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1VuZXhwZWN0ZWQgbm9uLWJpbmFyeSBhc3NvY2lhdGl2ZSBmdW5jdGlvbjogJyArIHJ1bGUudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBydWxlIGFuZCBub2RlLCBzbyBubyBtYXRjaFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgLy8gSWYgdGhlIHJ1bGUgaXMgYSBTeW1ib2xOb2RlLCB0aGVuIGl0IGNhcnJpZXMgYSBzcGVjaWFsIG1lYW5pbmdcbiAgICAgIC8vIGFjY29yZGluZyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzeW1ib2wgbm9kZSBuYW1lLlxuICAgICAgLy8gYy4qIG1hdGNoZXMgYSBDb25zdGFudE5vZGVcbiAgICAgIC8vIG4uKiBtYXRjaGVzIGFueSBub2RlXG4gICAgICBpZiAocnVsZS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bWJvbCBpbiBydWxlIGhhcyAwIGxlbmd0aC4uLiE/Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTVVBQT1JURURfQ09OU1RBTlRTW3J1bGUubmFtZV0pIHtcbiAgICAgICAgLy8gYnVpbHQtaW4gY29uc3RhbnQgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlLm5hbWVbMF0gPT09ICduJyB8fCBydWxlLm5hbWUuc3Vic3RyaW5nKDAsIDIpID09PSAnX3AnKSB7XG4gICAgICAgIC8vIHJ1bGUgbWF0Y2hlcyBfYW55dGhpbmdfLCBzbyBhc3NpZ24gdGhpcyBub2RlIHRvIHRoZSBydWxlLm5hbWUgcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gQXNzaWduIG5vZGUgdG8gdGhlIHJ1bGUubmFtZSBwbGFjZWhvbGRlci5cbiAgICAgICAgLy8gT3VyIHBhcmVudCB3aWxsIGNoZWNrIGZvciBtYXRjaGVzIGFtb25nIHBsYWNlaG9sZGVycy5cbiAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTtcbiAgICAgIH0gZWxzZSBpZiAocnVsZS5uYW1lWzBdID09PSAndicpIHtcbiAgICAgICAgLy8gcnVsZSBtYXRjaGVzIGFueSB2YXJpYWJsZSB0aGluZyAobm90IGEgQ29uc3RhbnROb2RlKVxuICAgICAgICBpZiAoISgwLCBfaXMuaXNDb25zdGFudE5vZGUpKG5vZGUpKSB7XG4gICAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNaXMtbWF0Y2g6IHJ1bGUgd2FzIGV4cGVjdGluZyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIENvbnN0YW50Tm9kZVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlLm5hbWVbMF0gPT09ICdjJykge1xuICAgICAgICAvLyBydWxlIG1hdGNoZXMgYW55IENvbnN0YW50Tm9kZVxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkge1xuICAgICAgICAgIHJlc1swXS5wbGFjZWhvbGRlcnNbcnVsZS5uYW1lXSA9IG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTWlzLW1hdGNoOiBydWxlIHdhcyBleHBlY3RpbmcgYSBDb25zdGFudE5vZGVcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzeW1ib2wgaW4gcnVsZTogJyArIHJ1bGUubmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7XG4gICAgICAvLyBMaXRlcmFsIGNvbnN0YW50IG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgaWYgKCFlcXVhbChydWxlLnZhbHVlLCBub2RlLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNvbWUgb3RoZXIgbm9kZSB3YXMgZW5jb3VudGVyZWQgd2hpY2ggd2UgYXJlbid0IHByZXBhcmVkIGZvciwgc28gbm8gbWF0Y2hcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IC8vIEl0J3MgYSBtYXRjaCFcbiAgICAvLyBjb25zb2xlLmxvZygnX3J1bGVNYXRjaCgnICsgcnVsZS50b1N0cmluZygpICsgJywgJyArIG5vZGUudG9TdHJpbmcoKSArICcpIGZvdW5kIGEgbWF0Y2gnKVxuXG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcCBhbmQgcSAoYW5kIGFsbCB0aGVpciBjaGlsZHJlbiBub2RlcykgYXJlIGlkZW50aWNhbC5cbiAgICpcbiAgICogQHBhcmFtIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBwXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXRjaCwgaWYgaXQgZXhpc3RzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9leGFjdE1hdGNoKHAsIHEpIHtcbiAgICBpZiAocCBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSAmJiBxIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7XG4gICAgICBpZiAoIWVxdWFsKHAudmFsdWUsIHEudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBTeW1ib2xOb2RlICYmIHEgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSB7XG4gICAgICBpZiAocC5uYW1lICE9PSBxLm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocCBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSAmJiBxIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlIHx8IHAgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUgJiYgcSBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgaWYgKHAgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHtcbiAgICAgICAgaWYgKHAub3AgIT09IHEub3AgfHwgcC5mbiAhPT0gcS5mbikge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAgIGlmIChwLm5hbWUgIT09IHEubmFtZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocC5hcmdzLmxlbmd0aCAhPT0gcS5hcmdzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghX2V4YWN0TWF0Y2gocC5hcmdzW2ldLCBxLmFyZ3NbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzaW1wbGlmeTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeSA9IGNyZWF0ZVNpbXBsaWZ5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAncmVzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZScsICdGdW5jdGlvbk5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ1BhcmVudGhlc2lzTm9kZSddO1xudmFyIGNyZWF0ZVJlc29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlO1xuXG4gIC8qKlxuICAgKiByZXNvbHZlKGV4cHIsIHNjb3BlKSByZXBsYWNlcyB2YXJpYWJsZSBub2RlcyB3aXRoIHRoZWlyIHNjb3BlZCB2YWx1ZXNcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnkucmVzb2x2ZShleHByLCBzY29wZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5LnJlc29sdmUoJ3ggKyB5Jywge3g6MSwgeToyfSkgICAgICAgICAgIC8vIE5vZGUgezEgKyAyfVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeS5yZXNvbHZlKG1hdGgucGFyc2UoJ3greScpLCB7eDoxLCB5OjJ9KSAvLyBOb2RlIHsxICsgMn1cbiAgICogICAgIG1hdGguc2ltcGxpZnkoJ3greScsIHt4OjIsIHk6J3greCd9KS50b1N0cmluZygpICAgICAgLy8gXCI2XCJcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqICAgICBUaGUgZXhwcmVzc2lvbiB0cmVlIHRvIGJlIHNpbXBsaWZpZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIHdpdGggdmFyaWFibGVzIHRvIGJlIHJlc29sdmVkXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlKG5vZGUsIHNjb3BlKSB7XG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSkge1xuICAgICAgdmFyIHZhbHVlID0gc2NvcGVbbm9kZS5uYW1lXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUsIHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gcGFyc2UoU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoYXJnLCBzY29wZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGFyZ3MsIG5vZGUuaW1wbGljaXQpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkobm9kZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHJlc29sdmUobm9kZS5jb250ZW50LCBzY29wZSkpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0Z1bmN0aW9uTm9kZSkobm9kZSkpIHtcbiAgICAgIHZhciBfYXJncyA9IG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShhcmcsIHNjb3BlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShub2RlLm5hbWUsIF9hcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlc29sdmUgPSBjcmVhdGVSZXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF91dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxudmFyIF9ub29wID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL25vb3BcIik7XG5cbi8vIFRPRE8gdGhpcyBjb3VsZCBiZSBpbXByb3ZlZCBieSBzaW1wbGlmeWluZyBzZXBlcmF0ZWQgY29uc3RhbnRzIHVuZGVyIGFzc29jaWF0aXZlIGFuZCBjb21tdXRhdGl2ZSBvcGVyYXRvcnNcbnZhciBuYW1lID0gJ3NpbXBsaWZ5Q29uc3RhbnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdGhXaXRoVHJhbnNmb3JtJywgJz9mcmFjdGlvbicsICc/YmlnbnVtYmVyJywgJ0NvbnN0YW50Tm9kZScsICdPcGVyYXRvck5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuXG4gIHZhciBfY3JlYXRlVXRpbCA9ICgwLCBfdXRpbC5jcmVhdGVVdGlsKSh7XG4gICAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gICAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZVxuICB9KSxcbiAgICAgIGlzQ29tbXV0YXRpdmUgPSBfY3JlYXRlVXRpbC5pc0NvbW11dGF0aXZlLFxuICAgICAgaXNBc3NvY2lhdGl2ZSA9IF9jcmVhdGVVdGlsLmlzQXNzb2NpYXRpdmUsXG4gICAgICBhbGxDaGlsZHJlbiA9IF9jcmVhdGVVdGlsLmFsbENoaWxkcmVuLFxuICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247XG5cbiAgZnVuY3Rpb24gc2ltcGxpZnlDb25zdGFudChleHByLCBvcHRpb25zKSB7XG4gICAgdmFyIHJlcyA9IGZvbGRGcmFjdGlvbihleHByLCBvcHRpb25zKTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKHJlcykgPyByZXMgOiBfdG9Ob2RlKHJlcyk7XG4gIH1cblxuICBmdW5jdGlvbiBfZXZhbChmbm5hbWUsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF90b051bWJlcihtYXRoV2l0aFRyYW5zZm9ybVtmbm5hbWVdLmFwcGx5KG51bGwsIGFyZ3MpLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChpZ25vcmUpIHtcbiAgICAgIC8vIHNvbWV0aW1lcyB0aGUgaW1wbGljaXQgdHlwZSBjb252ZXJzaW9uIGNhdXNlcyB0aGUgZXZhbHVhdGlvbiB0byBmYWlsLCBzbyB3ZSdsbCB0cnkgYWdhaW4gYWZ0ZXIgcmVtb3ZpbmcgRnJhY3Rpb25zXG4gICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNGcmFjdGlvbikoeCkpIHtcbiAgICAgICAgICByZXR1cm4geC52YWx1ZU9mKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF90b051bWJlcihtYXRoV2l0aFRyYW5zZm9ybVtmbm5hbWVdLmFwcGx5KG51bGwsIGFyZ3MpLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICB2YXIgX3RvTm9kZSA9IHR5cGVkKHtcbiAgICBGcmFjdGlvbjogX2ZyYWN0aW9uVG9Ob2RlLFxuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gdW5hcnlNaW51c05vZGUobmV3IENvbnN0YW50Tm9kZSgtbikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShuKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gdW5hcnlNaW51c05vZGUobmV3IENvbnN0YW50Tm9kZSgtbikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShuKTsgLy8gb2xkIHBhcmFtZXRlcnM6IChuLnRvU3RyaW5nKCksICdudW1iZXInKVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleChzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IENvbXBsZXggbnVtYmVyIHRvIE5vZGUnKTtcbiAgICB9XG4gIH0pOyAvLyBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgZnJhY3Rpb24gb25seSBpZiBpdCBjYW4gYmUgZXhwcmVzc2VkIGV4YWN0bHlcblxuXG4gIGZ1bmN0aW9uIF9leGFjdEZyYWN0aW9uKG4sIG9wdGlvbnMpIHtcbiAgICB2YXIgZXhhY3RGcmFjdGlvbnMgPSBvcHRpb25zICYmIG9wdGlvbnMuZXhhY3RGcmFjdGlvbnMgIT09IGZhbHNlO1xuXG4gICAgaWYgKGV4YWN0RnJhY3Rpb25zICYmIGlzRmluaXRlKG4pICYmIGZyYWN0aW9uKSB7XG4gICAgICB2YXIgZiA9IGZyYWN0aW9uKG4pO1xuXG4gICAgICBpZiAoZi52YWx1ZU9mKCkgPT09IG4pIHtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG47XG4gIH0gLy8gQ29udmVydCBudW1iZXJzIHRvIGEgcHJlZmVycmVkIG51bWJlciB0eXBlIGluIHByZWZlcmVuY2Ugb3JkZXI6IEZyYWN0aW9uLCBudW1iZXIsIENvbXBsZXhcbiAgLy8gQmlnTnVtYmVycyBhcmUgbGVmdCBhbG9uZVxuXG5cbiAgdmFyIF90b051bWJlciA9IHR5cGVkKHtcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICAgIGlmIChiaWdudW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICgwLCBfbm9vcC5ub0JpZ251bWJlcikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiaWdudW1iZXIocyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdGcmFjdGlvbicpIHtcbiAgICAgICAgaWYgKGZyYWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoMCwgX25vb3Aubm9GcmFjdGlvbikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcmFjdGlvbihzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuID0gcGFyc2VGbG9hdChzKTtcbiAgICAgICAgcmV0dXJuIF9leGFjdEZyYWN0aW9uKG4sIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBPYmplY3QnOiBmdW5jdGlvbiBGcmFjdGlvbk9iamVjdChzLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9LFxuICAgIC8vIHdlIGRvbid0IG5lZWQgb3B0aW9ucyBoZXJlXG4gICAgJ0JpZ051bWJlciwgT2JqZWN0JzogZnVuY3Rpb24gQmlnTnVtYmVyT2JqZWN0KHMsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH0sXG4gICAgLy8gd2UgZG9uJ3QgbmVlZCBvcHRpb25zIGhlcmVcbiAgICAnbnVtYmVyLCBPYmplY3QnOiBmdW5jdGlvbiBudW1iZXJPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIF9leGFjdEZyYWN0aW9uKHMsIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIE9iamVjdCc6IGZ1bmN0aW9uIENvbXBsZXhPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgaWYgKHMuaW0gIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZXhhY3RGcmFjdGlvbihzLnJlLCBvcHRpb25zKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHVuYXJ5TWludXNOb2RlKG4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25dKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9mcmFjdGlvblRvTm9kZShmKSB7XG4gICAgdmFyIG47XG4gICAgdmFyIHZuID0gZi5zICogZi5uO1xuXG4gICAgaWYgKHZuIDwgMCkge1xuICAgICAgbiA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFtuZXcgQ29uc3RhbnROb2RlKC12bildKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IG5ldyBDb25zdGFudE5vZGUodm4pO1xuICAgIH1cblxuICAgIGlmIChmLmQgPT09IDEpIHtcbiAgICAgIHJldHVybiBuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuLCBuZXcgQ29uc3RhbnROb2RlKGYuZCldKTtcbiAgfVxuICAvKlxuICAgKiBDcmVhdGUgYSBiaW5hcnkgdHJlZSBmcm9tIGEgbGlzdCBvZiBGcmFjdGlvbnMgYW5kIE5vZGVzLlxuICAgKiBUcmllcyB0byBmb2xkIEZyYWN0aW9ucyBieSBldmFsdWF0aW5nIHRoZW0gdW50aWwgdGhlIGZpcnN0IE5vZGUgaW4gdGhlIGxpc3QgaXMgaGl0LCBzb1xuICAgKiBgYXJnc2Agc2hvdWxkIGJlIHNvcnRlZCB0byBoYXZlIHRoZSBGcmFjdGlvbnMgYXQgdGhlIHN0YXJ0IChpZiB0aGUgb3BlcmF0b3IgaXMgY29tbXV0YXRpdmUpLlxuICAgKiBAcGFyYW0gYXJncyAtIGxpc3Qgb2YgRnJhY3Rpb25zIGFuZCBOb2Rlc1xuICAgKiBAcGFyYW0gZm4gLSBldmFsdWF0b3IgZm9yIHRoZSBiaW5hcnkgb3BlcmF0aW9uIGV2YWx1YXRvciB0aGF0IGFjY2VwdHMgdHdvIEZyYWN0aW9uc1xuICAgKiBAcGFyYW0gbWFrZU5vZGUgLSBjcmVhdGVzIGEgYmluYXJ5IE9wZXJhdG9yTm9kZS9GdW5jdGlvbk5vZGUgZnJvbSBhIGxpc3Qgb2YgY2hpbGQgTm9kZXNcbiAgICogaWYgYXJncy5sZW5ndGggaXMgMSwgcmV0dXJucyBhcmdzWzBdXG4gICAqIEByZXR1cm4gLSBFaXRoZXIgYSBOb2RlIHJlcHJlc2VudGluZyBhIGJpbmFyeSBleHByZXNzaW9uIG9yIEZyYWN0aW9uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZm9sZE9wKGZuLCBhcmdzLCBtYWtlTm9kZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoYSkgJiYgISgwLCBfaXMuaXNOb2RlKShiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBfZXZhbChmbiwgW2EsIGJdLCBvcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoaWdub3JlYW5kY29udGludWUpIHt9XG5cbiAgICAgICAgYSA9IF90b05vZGUoYSk7XG4gICAgICAgIGIgPSBfdG9Ob2RlKGIpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF9pcy5pc05vZGUpKGEpKSB7XG4gICAgICAgIGEgPSBfdG9Ob2RlKGEpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF9pcy5pc05vZGUpKGIpKSB7XG4gICAgICAgIGIgPSBfdG9Ob2RlKGIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFrZU5vZGUoW2EsIGJdKTtcbiAgICB9KTtcbiAgfSAvLyBkZXN0cm95cyB0aGUgb3JpZ2luYWwgbm9kZSBhbmQgcmV0dXJucyBhIGZvbGRlZCBvbmVcblxuXG4gIGZ1bmN0aW9uIGZvbGRGcmFjdGlvbihub2RlLCBvcHRpb25zKSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOlxuICAgICAgICByZXR1cm4gbm9kZTtcblxuICAgICAgY2FzZSAnQ29uc3RhbnROb2RlJzpcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAnbnVtYmVyJyB8fCAhaXNOYU4obm9kZS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gX3RvTnVtYmVyKG5vZGUudmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG5cbiAgICAgIGNhc2UgJ0Z1bmN0aW9uTm9kZSc6XG4gICAgICAgIGlmIChtYXRoV2l0aFRyYW5zZm9ybVtub2RlLm5hbWVdICYmIG1hdGhXaXRoVHJhbnNmb3JtW25vZGUubmFtZV0ucmF3QXJncykge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIFByb2Nlc3Mgb3BlcmF0b3JzIGFzIE9wZXJhdG9yTm9kZVxuICAgICAgICAgIHZhciBvcGVyYXRvckZ1bmN0aW9ucyA9IFsnYWRkJywgJ211bHRpcGx5J107XG5cbiAgICAgICAgICBpZiAob3BlcmF0b3JGdW5jdGlvbnMuaW5kZXhPZihub2RlLm5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7IC8vIElmIGFsbCBhcmdzIGFyZSBudW1iZXJzXG5cbiAgICAgICAgICAgIGlmICghYXJncy5zb21lKF9pcy5pc05vZGUpKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9ldmFsKG5vZGUubmFtZSwgYXJncywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZWFuZGNvbnRpbmUpIHt9XG4gICAgICAgICAgICB9IC8vIENvbnZlcnQgYWxsIGFyZ3MgdG8gbm9kZXMgYW5kIGNvbnN0cnVjdCBhIHN5bWJvbGljIGZ1bmN0aW9uIGNhbGxcblxuXG4gICAgICAgICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKGFyZykgPyBhcmcgOiBfdG9Ob2RlKGFyZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUubmFtZSwgYXJncyk7XG4gICAgICAgICAgfSBlbHNlIHsvLyB0cmVhdCBhcyBvcGVyYXRvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZSc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZm4gPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICB2YXIgX2FyZ3M7XG5cbiAgICAgICAgICB2YXIgcmVzO1xuICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgICAgICAgIF9hcmdzID0gW2ZvbGRGcmFjdGlvbihub2RlLmFyZ3NbMF0sIG9wdGlvbnMpXTtcblxuICAgICAgICAgICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoX2FyZ3NbMF0pKSB7XG4gICAgICAgICAgICAgIHJlcyA9IF9ldmFsKGZuLCBfYXJncywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMgPSBtYWtlTm9kZShfYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0Fzc29jaWF0aXZlKG5vZGUpKSB7XG4gICAgICAgICAgICBfYXJncyA9IGFsbENoaWxkcmVuKG5vZGUpO1xuICAgICAgICAgICAgX2FyZ3MgPSBfYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gZm9sZEZyYWN0aW9uKGFyZywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlzQ29tbXV0YXRpdmUoZm4pKSB7XG4gICAgICAgICAgICAgIC8vIGNvbW11dGF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgICB2YXIgY29uc3RzID0gW107XG4gICAgICAgICAgICAgIHZhciB2YXJzID0gW107XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKF9hcmdzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3RzLnB1c2goX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXJzLnB1c2goX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjb25zdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgY29uc3RzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdmFycy51bnNoaWZ0KHJlcyk7XG4gICAgICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCB2YXJzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gd2Ugd29uJ3QgY2hhbmdlIHRoZSBjaGlsZHJlbiBvcmRlciBzaW5jZSBpdCdzIG5vdCBuZWNjZXNzYXJ5XG4gICAgICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCBfYXJncywgbWFrZU5vZGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBub24tY29tbXV0YXRpdmUgYmluYXJ5IG9wZXJhdG9yXG4gICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgX2FyZ3MsIG1ha2VOb2RlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbm9uLWFzc29jaWF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgX2FyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXMgPSBmb2xkT3AoZm4sIF9hcmdzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdQYXJlbnRoZXNpc05vZGUnOlxuICAgICAgICAvLyByZW1vdmUgdGhlIHVuZWNjZXNzYXJ5IHBhcmVudGhlc2lzXG4gICAgICAgIHJldHVybiBmb2xkRnJhY3Rpb24obm9kZS5jb250ZW50LCBvcHRpb25zKTtcblxuICAgICAgY2FzZSAnQWNjZXNzb3JOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQXJyYXlOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQXNzaWdubWVudE5vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdCbG9ja05vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnSW5kZXhOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnT2JqZWN0Tm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ1JhbmdlTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaW1wbGVtZW50ZWQgbm9kZSB0eXBlIGluIHNpbXBsaWZ5Q29uc3RhbnQ6IFwiLmNvbmNhdChub2RlLnR5cGUpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnlDb25zdGFudDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gY3JlYXRlU2ltcGxpZnlDb25zdGFudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2ltcGxpZnlDb3JlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2ltcGxpZnlDb3JlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2VxdWFsJywgJ2lzWmVybycsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdQYXJlbnRoZXNpc05vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeUNvcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcbiAgdmFyIG5vZGUwID0gbmV3IENvbnN0YW50Tm9kZSgwKTtcbiAgdmFyIG5vZGUxID0gbmV3IENvbnN0YW50Tm9kZSgxKTtcbiAgLyoqXG4gICAqIHNpbXBsaWZ5Q29yZSgpIHBlcmZvcm1zIHNpbmdsZSBwYXNzIHNpbXBsaWZpY2F0aW9uIHN1aXRhYmxlIGZvclxuICAgKiBhcHBsaWNhdGlvbnMgcmVxdWlyaW5nIHVsdGltYXRlIHBlcmZvcm1hbmNlLiBJbiBjb250cmFzdCwgc2ltcGxpZnkoKVxuICAgKiBleHRlbmRzIHNpbXBsaWZ5Q29yZSgpIHdpdGggYWRkaXRpb25hbCBwYXNzZXMgdG8gcHJvdmlkZSBkZWVwZXJcbiAgICogc2ltcGxpZmljYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5LnNpbXBsaWZ5Q29yZShleHByKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IGYgPSBtYXRoLnBhcnNlKCcyICogMSAqIHggXiAoMiAtIDEpJylcbiAgICogICAgIG1hdGguc2ltcGxpZnkuc2ltcGlmeUNvcmUoZikgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgezIgKiB4fVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMiAqIDEgKiB4IF4gKDIgLSAxKScsIFttYXRoLnNpbXBsaWZ5LnNpbXBpZnlDb3JlXSkgLy8gTm9kZSB7MiAqIHh9XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGVyaXZhdGl2ZVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogICAgIFRoZSBleHByZXNzaW9uIHRvIGJlIHNpbXBsaWZpZWRcbiAgICovXG5cbiAgZnVuY3Rpb24gc2ltcGxpZnlDb3JlKG5vZGUpIHtcbiAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgIHZhciBhMCA9IHNpbXBsaWZ5Q29yZShub2RlLmFyZ3NbMF0pO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJysnKSB7XG4gICAgICAgIC8vIHVuYXJ5IHBsdXNcbiAgICAgICAgcmV0dXJuIGEwO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIC8vIHVuYXJ5IG1pbnVzXG4gICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShhMCkpIHtcbiAgICAgICAgICBpZiAoYTAuaXNVbmFyeSgpICYmIGEwLm9wID09PSAnLScpIHtcbiAgICAgICAgICAgIHJldHVybiBhMC5hcmdzWzBdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYTAuaXNCaW5hcnkoKSAmJiBhMC5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbYTAuYXJnc1sxXSwgYTAuYXJnc1swXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFthMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICB2YXIgX2EgPSBzaW1wbGlmeUNvcmUobm9kZS5hcmdzWzBdKTtcblxuICAgICAgdmFyIGExID0gc2ltcGxpZnlDb3JlKG5vZGUuYXJnc1sxXSk7XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKycpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYTE7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKGFkZChfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpICYmIGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gX2E7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoYTEpICYmIGExLmlzVW5hcnkoKSAmJiBhMS5vcCA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbX2EsIGExLmFyZ3NbMF1dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGExID8gW19hLCBhMV0gOiBbX2FdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkgJiYgYTEpIHtcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShzdWJ0cmFjdChfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbYTFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaWYgKG5vZGUuZm4gPT09IFwic3VidHJhY3RcIiAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG5cblxuICAgICAgICBpZiAobm9kZS5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkgJiYgaXNaZXJvKGExLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShhMSkgJiYgYTEuaXNVbmFyeSgpICYmIGExLm9wID09PSAnLScpIHtcbiAgICAgICAgICAgIHJldHVybiBzaW1wbGlmeUNvcmUobmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBbX2EsIGExLmFyZ3NbMF1dKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2EpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKF9hLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGExO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGExLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoX2EpICYmIF9hLmlzQmluYXJ5KCkgJiYgX2Eub3AgPT09IG5vZGUub3ApIHtcbiAgICAgICAgICAgIHZhciBhMDAgPSBfYS5hcmdzWzBdO1xuXG4gICAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTAwKSkge1xuICAgICAgICAgICAgICB2YXIgYTAwYTEgPSBuZXcgQ29uc3RhbnROb2RlKG11bHRpcGx5KGEwMC52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2EwMGExLCBfYS5hcmdzWzFdXSwgbm9kZS5pbXBsaWNpdCk7IC8vIGNvbnN0YW50cyBvbiBsZWZ0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2ExLCBfYV0sIG5vZGUuaW1wbGljaXQpOyAvLyBjb25zdGFudHMgb24gbGVmdFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0sIG5vZGUuaW1wbGljaXQpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09PSAnLycpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTA7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkgJiYgKGVxdWFsKGExLnZhbHVlLCAxKSB8fCBlcXVhbChhMS52YWx1ZSwgMikgfHwgZXF1YWwoYTEudmFsdWUsIDQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUoZGl2aWRlKF9hLnZhbHVlLCBhMS52YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkpIHtcbiAgICAgICAgICBpZiAoaXNaZXJvKGExLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUxO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoYTEudmFsdWUsIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4gX2E7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkpIHtcbiAgICAgICAgICAgICAgLy8gZm9sZCBjb25zdGFudFxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShwb3coX2EudmFsdWUsIGExLnZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKF9hKSAmJiBfYS5pc0JpbmFyeSgpICYmIF9hLm9wID09PSAnXicpIHtcbiAgICAgICAgICAgICAgdmFyIGEwMSA9IF9hLmFyZ3NbMV07XG5cbiAgICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGEwMSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2EuYXJnc1swXSwgbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShhMDEudmFsdWUsIGExLnZhbHVlKSldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgYyA9IHNpbXBsaWZ5Q29yZShub2RlLmNvbnRlbnQpO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkoYykgfHwgKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGMpIHx8ICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGMpKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFBhcmVudGhlc2lzTm9kZShjKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgYXJncyA9IG5vZGUuYXJncy5tYXAoc2ltcGxpZnlDb3JlKS5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkoYXJnKSA/IGFyZy5jb250ZW50IDogYXJnO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShzaW1wbGlmeUNvcmUobm9kZS5mbiksIGFyZ3MpO1xuICAgIH0gZWxzZSB7Ly8gY2Fubm90IHNpbXBsaWZ5XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnlDb3JlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbXBsaWZ5Q29yZSA9IGNyZWF0ZVNpbXBsaWZ5Q29yZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVXRpbCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIG5hbWUgPSAnc2ltcGxpZnlVdGlsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZVV0aWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGU7XG4gIC8vIFRPRE8gY29tbXV0YXRpdmUvYXNzb2NpYXRpdmUgcHJvcGVydGllcyByZWx5IG9uIHRoZSBhcmd1bWVudHNcbiAgLy8gZS5nLiBtdWx0aXBseSBpcyBub3QgY29tbXV0YXRpdmUgZm9yIG1hdHJpY2VzXG4gIC8vIFRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBjYWxjdWxhdGVkIGZyb20gYW4gYXJndW1lbnQgdG8gc2ltcGxpZnksIG9yIHBvc3NpYmx5IHNvbWV0aGluZyBpbiBtYXRoLmNvbmZpZ1xuICAvLyB0aGUgb3RoZXIgb3B0aW9uIGlzIGZvciB0eXBlZCgpIHRvIHNwZWNpZnkgYSByZXR1cm4gdHlwZSBzbyB0aGF0IHdlIGNhbiBldmFsdWF0ZSB0aGUgdHlwZSBvZiBhcmd1bWVudHNcbiAgdmFyIGNvbW11dGF0aXZlID0ge1xuICAgIGFkZDogdHJ1ZSxcbiAgICBtdWx0aXBseTogdHJ1ZVxuICB9O1xuICB2YXIgYXNzb2NpYXRpdmUgPSB7XG4gICAgYWRkOiB0cnVlLFxuICAgIG11bHRpcGx5OiB0cnVlXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29udGV4dCwgbmFtZSkgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHRbbmFtZV0sICdjb21tdXRhdGl2ZScpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFtuYW1lXS5jb21tdXRhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbXV0YXRpdmVbbmFtZV0gfHwgZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBpc0Fzc29jaWF0aXZlKG5vZGUsIGNvbnRleHQpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKG5vZGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29udGV4dCwgbmFtZSkgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHRbbmFtZV0sICdhc3NvY2lhdGl2ZScpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFtuYW1lXS5hc3NvY2lhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzb2NpYXRpdmVbbmFtZV0gfHwgZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEZsYXR0ZW4gYWxsIGFzc29jaWF0aXZlIG9wZXJhdG9ycyBpbiBhbiBleHByZXNzaW9uIHRyZWUuXG4gICAqIEFzc3VtZXMgcGFyZW50aGVzZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBmbGF0dGVuKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuYXJncyB8fCBub2RlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBub2RlLmFyZ3MgPSBhbGxDaGlsZHJlbihub2RlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmbGF0dGVuKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoaWxkcmVuIG9mIGEgbm9kZSBhcyBpZiBpdCBoYXMgYmVlbiBmbGF0dGVuZWQuXG4gICAqIFRPRE8gaW1wbGVtZW50IGZvciBGdW5jdGlvbk5vZGVzXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gYWxsQ2hpbGRyZW4obm9kZSkge1xuICAgIHZhciBvcDtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTtcblxuICAgIHZhciBmaW5kQ2hpbGRyZW4gPSBmdW5jdGlvbiBmaW5kQ2hpbGRyZW4obm9kZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5hcmdzW2ldO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShjaGlsZCkgJiYgb3AgPT09IGNoaWxkLm9wKSB7XG4gICAgICAgICAgZmluZENoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgb3AgPSBub2RlLm9wO1xuICAgICAgZmluZENoaWxkcmVuKG5vZGUpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogIFVuZmxhdHRlbiBhbGwgZmxhdHRlbmVkIG9wZXJhdG9ycyB0byBhIHJpZ2h0LWhlYXZ5IGJpbmFyeSB0cmVlLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHVuZmxhdHRlbnIobm9kZSkge1xuICAgIGlmICghbm9kZS5hcmdzIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpO1xuICAgIHZhciBsID0gbm9kZS5hcmdzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB1bmZsYXR0ZW5yKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKGwgPiAyICYmIGlzQXNzb2NpYXRpdmUobm9kZSkpIHtcbiAgICAgIHZhciBjdXJub2RlID0gbm9kZS5hcmdzLnBvcCgpO1xuXG4gICAgICB3aGlsZSAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY3Vybm9kZSA9IG1ha2VOb2RlKFtub2RlLmFyZ3MucG9wKCksIGN1cm5vZGVdKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5hcmdzID0gY3Vybm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogIFVuZmxhdHRlbiBhbGwgZmxhdHRlbmVkIG9wZXJhdG9ycyB0byBhIGxlZnQtaGVhdnkgYmluYXJ5IHRyZWUuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5mbGF0dGVubChub2RlKSB7XG4gICAgaWYgKCFub2RlLmFyZ3MgfHwgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG4gICAgdmFyIGwgPSBub2RlLmFyZ3MubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHVuZmxhdHRlbmwobm9kZS5hcmdzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAobCA+IDIgJiYgaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgdmFyIGN1cm5vZGUgPSBub2RlLmFyZ3Muc2hpZnQoKTtcblxuICAgICAgd2hpbGUgKG5vZGUuYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGN1cm5vZGUgPSBtYWtlTm9kZShbY3Vybm9kZSwgbm9kZS5hcmdzLnNoaWZ0KCldKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5hcmdzID0gY3Vybm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSkge1xuICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgYXJncywgbm9kZS5pbXBsaWNpdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZShub2RlLm5hbWUpLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uOiBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uLFxuICAgIGlzQ29tbXV0YXRpdmU6IGlzQ29tbXV0YXRpdmUsXG4gICAgaXNBc3NvY2lhdGl2ZTogaXNBc3NvY2lhdGl2ZSxcbiAgICBmbGF0dGVuOiBmbGF0dGVuLFxuICAgIGFsbENoaWxkcmVuOiBhbGxDaGlsZHJlbixcbiAgICB1bmZsYXR0ZW5yOiB1bmZsYXR0ZW5yLFxuICAgIHVuZmxhdHRlbmw6IHVuZmxhdHRlbmxcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVdGlsID0gY3JlYXRlVXRpbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTHNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zb2x2ZVZhbGlkYXRpb24gPSByZXF1aXJlKFwiLi91dGlscy9zb2x2ZVZhbGlkYXRpb25cIik7XG5cbnZhciBuYW1lID0gJ2xzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3N1YnRyYWN0JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBlcXVhdGlvbiBzeXN0ZW0gYnkgZm9yd2FyZHMgc3Vic3RpdHV0aW9uLiBNYXRyaXggbXVzdCBiZSBhIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgKlxuICAgKiBgTCAqIHggPSBiYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubHNvbHZlKEwsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IGxzb2x2ZShhLCBiKSAgLy8gW1stNS41XSwgWzIwXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgc2x1LCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXgsIEFycmF5fSBMICAgICAgIEEgTiB4IE4gbWF0cml4IG9yIGFycmF5IChMKVxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IGIgICAgICAgQSBjb2x1bW4gdmVjdG9yIHdpdGggdGhlIGIgdmFsdWVzXG4gICAqXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4IHwgQXJyYXl9ICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgbGluZWFyIHN5c3RlbSBzb2x1dGlvbiAoeClcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFycmF5TWF0cml4KG0sIGIpIHtcbiAgICAgIC8vIHByb2Nlc3MgbWF0cml4XG4gICAgICByZXR1cm4gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9kZW5zZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXlcbiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHIudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7XG4gICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYlxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIHggPSBbXTsgLy8gZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBtLl9kYXRhOyAvLyBmb3J3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gYltqXVxuICAgICAgdmFyIGJqID0gYmRhdGFbal1bMF0gfHwgMDsgLy8geFtqXVxuXG4gICAgICB2YXIgeGogPSB2b2lkIDA7IC8vIGZvcndhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2ampcblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGogKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIGNvcHkgb2YgYlxuICAgICAgICAgIGJkYXRhW2ldID0gW3N1YnRyYWN0KGJkYXRhW2ldWzBdIHx8IDAsIG11bHRpcGx5U2NhbGFyKHhqLCBkYXRhW2ldW2pdKSldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB6ZXJvIEAgalxuICAgICAgICB4aiA9IDA7XG4gICAgICB9IC8vIHVwZGF0ZSB4XG5cblxuICAgICAgeFtqXSA9IFt4al07XG4gICAgfSAvLyByZXR1cm4gdmVjdG9yXG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogeCxcbiAgICAgIHNpemU6IFtyb3dzLCAxXVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBpLCBrOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGZvcndhcmQgc29sdmUgbSAqIHggPSBiLCBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyBmb3J3YXJkIHN1YnN0aXR1dGlvbiAob3V0ZXIgcHJvZHVjdCkgYXZvaWRzIGlubmVyIGxvb3Bpbmcgd2hlbiBiaiA9PT0gMFxuXG4gICAgICBpZiAoIWVxdWFsU2NhbGFyKGJqLCAwKSkge1xuICAgICAgICAvLyB2YWx1ZSBAIFtqLCBqXVxuICAgICAgICB2YXIgdmpqID0gMDsgLy8gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXggdmFsdWVzICYgaW5kZXggKGNvbHVtbiBqKVxuXG4gICAgICAgIHZhciBqdmFsdWVzID0gW107XG4gICAgICAgIHZhciBqaW5kZXggPSBbXTsgLy8gbGFzdCBpbmRleCBpbiBjb2x1bW5cblxuICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal1cblxuICAgICAgICBmb3IgKGsgPSBwdHJbal07IGsgPCBsOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gaW5kZXhba107IC8vIGNoZWNrIHJvdyAocm93cyBhcmUgbm90IHNvcnRlZCEpXG5cbiAgICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHZqalxuICAgICAgICAgICAgdmpqID0gdmFsdWVzW2tdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IGopIHtcbiAgICAgICAgICAgIC8vIHN0b3JlIGxvd2VyIHRyaWFuZ3VsYXJcbiAgICAgICAgICAgIGp2YWx1ZXMucHVzaCh2YWx1ZXNba10pO1xuICAgICAgICAgICAgamluZGV4LnB1c2goaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGF0IHRoaXMgcG9pbnQgd2UgbXVzdCBoYXZlIGEgdmFsdWUgQCBbaiwgal1cblxuXG4gICAgICAgIGlmIChlcXVhbFNjYWxhcih2amosIDApKSB7XG4gICAgICAgICAgLy8gc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQsIHRoZXJlIGlzIG5vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB2YXIgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3AgbG93ZXIgdHJpYW5ndWxhclxuXG4gICAgICAgIGZvciAoayA9IDAsIGwgPSBqaW5kZXgubGVuZ3RoOyBrIDwgbDsgaysrKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGppbmRleFtrXTsgLy8gdXBkYXRlIGNvcHkgb2YgYlxuXG4gICAgICAgICAgYmRhdGFbaV0gPSBbc3VidHJhY3QoYmRhdGFbaV1bMF0gfHwgMCwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07XG4gICAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICAgIHhbal0gPSBbeGpdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHhcbiAgICAgICAgeFtqXSA9IFswXTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMc29sdmUgPSBjcmVhdGVMc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUx1c29sdmUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NvbHZlVmFsaWRhdGlvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL3NvbHZlVmFsaWRhdGlvblwiKTtcblxudmFyIF9jc0lwdmVjID0gcmVxdWlyZShcIi4uL3NwYXJzZS9jc0lwdmVjXCIpO1xuXG52YXIgbmFtZSA9ICdsdXNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdsdXAnLCAnc2x1JywgJ3Vzb2x2ZScsICdsc29sdmUnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbHVwID0gX3JlZi5sdXAsXG4gICAgICBzbHUgPSBfcmVmLnNsdSxcbiAgICAgIHVzb2x2ZSA9IF9yZWYudXNvbHZlLFxuICAgICAgbHNvbHZlID0gX3JlZi5sc29sdmUsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gYEEgKiB4ID0gYmAgd2hlcmUgYEFgIGlzIGFuIFtuIHggbl0gbWF0cml4IGFuZCBgYmAgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmx1c29sdmUoQSwgYikgICAgIC8vIHJldHVybnMgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBzb2x1dGlvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGJcbiAgICogICAgbWF0aC5sdXNvbHZlKGx1cCwgYikgICAvLyByZXR1cm5zIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgc29sdXRpb24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiLCBsdXAgPSBtYXRoLmx1cChBKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgbSA9IFtbMSwgMCwgMCwgMF0sIFswLCAyLCAwLCAwXSwgWzAsIDAsIDMsIDBdLCBbMCwgMCwgMCwgNF1dXG4gICAqXG4gICAqICAgIGNvbnN0IHggPSBtYXRoLmx1c29sdmUobSwgWy0xLCAtMSwgLTEsIC0xXSkgICAgICAgIC8vIHggPSBbWy0xXSwgWy0wLjVdLCBbLTEvM10sIFstMC4yNV1dXG4gICAqXG4gICAqICAgIGNvbnN0IGYgPSBtYXRoLmx1cChtKVxuICAgKiAgICBjb25zdCB4MSA9IG1hdGgubHVzb2x2ZShmLCBbLTEsIC0xLCAtMSwgLTFdKSAgICAgICAvLyB4MSA9IFtbLTFdLCBbLTAuNV0sIFstMS8zXSwgWy0wLjI1XV1cbiAgICogICAgY29uc3QgeDIgPSBtYXRoLmx1c29sdmUoZiwgWzEsIDIsIDEsIC0xXSkgICAgICAgICAgLy8geDIgPSBbWzFdLCBbMV0sIFsxLzNdLCBbLTAuMjVdXVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IG1hdGgubHVzb2x2ZShhLCBiKSAgLy8gW1syXSwgWzVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBzbHUsIGxzb2x2ZSwgdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXkgfCBPYmplY3R9IEEgICAgICBJbnZlcnRpYmxlIE1hdHJpeCBvciB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb25cbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gYiAgICAgICAgICAgICAgIENvbHVtbiBWZWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcmRlcl0gICAgICAgICAgICAgICAgIFRoZSBTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXIsIHNlZSBzbHUgZm9yIGRldGFpbHMuIE1hdHJpeCBtdXN0IGJlIGEgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbdGhyZXNob2xkXSAgICAgICAgICAgICBQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCAoMSBmb3IgcGFydGlhbCBwaXZvdGluZyksIHNlZSBzbHUgZm9yIGRldGFpbHMuIE1hdHJpeCBtdXN0IGJlIGEgU3BhcnNlTWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeCB8IEFycmF5fSAgICAgICAgICAgQ29sdW1uIHZlY3RvciB3aXRoIHRoZSBzb2x1dGlvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGJcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBjb252ZXJ0IGEgdG8gbWF0cml4XG4gICAgICBhID0gbWF0cml4KGEpOyAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb25cblxuICAgICAgdmFyIGQgPSBsdXAoYSk7IC8vIHNvbHZlXG5cbiAgICAgIHZhciB4ID0gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7IC8vIGNvbnZlcnQgcmVzdWx0IHRvIGFycmF5XG5cblxuICAgICAgcmV0dXJuIHgudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gbWF0cml4IGx1cCBkZWNvbXBvc2l0aW9uXG4gICAgICB2YXIgZCA9IGx1cChhKTsgLy8gc29sdmVcblxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIG51bGwsIGIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb25cbiAgICAgIHZhciBkID0gbHVwKGEpOyAvLyBzb2x2ZVxuXG4gICAgICByZXR1cm4gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeE51bWJlck51bWJlcihhLCBiLCBvcmRlciwgdGhyZXNob2xkKSB7XG4gICAgICAvLyBtYXRyaXggbHUgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGQgPSBzbHUoYSwgb3JkZXIsIHRocmVzaG9sZCk7IC8vIHNvbHZlXG5cbiAgICAgIHJldHVybiBfbHVzb2x2ZShkLkwsIGQuVSwgZC5wLCBkLnEsIGIpO1xuICAgIH0sXG4gICAgJ09iamVjdCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBPYmplY3RBcnJheU1hdHJpeChkLCBiKSB7XG4gICAgICAvLyBzb2x2ZVxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIGQucSwgYik7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfdG9NYXRyaXgoYSkge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgbWF0cml4XG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGEpKSB7XG4gICAgICByZXR1cm4gYTtcbiAgICB9IC8vIGNoZWNrIGFycmF5XG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKGEpKSB7XG4gICAgICByZXR1cm4gbWF0cml4KGEpO1xuICAgIH0gLy8gdGhyb3dcblxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBNYXRyaXggTFUgZGVjb21wb3NpdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2x1c29sdmUobCwgdSwgcCwgcSwgYikge1xuICAgIC8vIHZlcmlmeSBMLCBVLCBQXG4gICAgbCA9IF90b01hdHJpeChsKTtcbiAgICB1ID0gX3RvTWF0cml4KHUpOyAvLyB2YWxpZGF0ZSBtYXRyaXggYW5kIHZlY3RvclxuXG4gICAgYiA9IHNvbHZlVmFsaWRhdGlvbihsLCBiLCBmYWxzZSk7IC8vIGFwcGx5IHJvdyBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkIChiIGlzIGEgRGVuc2VNYXRyaXgpXG5cbiAgICBpZiAocCkge1xuICAgICAgYi5fZGF0YSA9ICgwLCBfY3NJcHZlYy5jc0lwdmVjKShwLCBiLl9kYXRhKTtcbiAgICB9IC8vIHVzZSBmb3J3YXJkIHN1YnN0aXR1dGlvbiB0byByZXNvbHZlIEwgKiB5ID0gYlxuXG5cbiAgICB2YXIgeSA9IGxzb2x2ZShsLCBiKTsgLy8gdXNlIGJhY2t3YXJkIHN1YnN0aXR1dGlvbiB0byByZXNvbHZlIFUgKiB4ID0geVxuXG4gICAgdmFyIHggPSB1c29sdmUodSwgeSk7IC8vIGFwcGx5IGNvbHVtbiBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkICh4IGlzIGEgRGVuc2VNYXRyaXgpXG5cbiAgICBpZiAocSkge1xuICAgICAgeC5fZGF0YSA9ICgwLCBfY3NJcHZlYy5jc0lwdmVjKShxLCB4Ll9kYXRhKTtcbiAgICB9IC8vIHJldHVybiBzb2x1dGlvblxuXG5cbiAgICByZXR1cm4geDtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUx1c29sdmUgPSBjcmVhdGVMdXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVc29sdmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NvbHZlVmFsaWRhdGlvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL3NvbHZlVmFsaWRhdGlvblwiKTtcblxudmFyIG5hbWUgPSAndXNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVVc29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIHNvbHZlVmFsaWRhdGlvbiA9ICgwLCBfc29sdmVWYWxpZGF0aW9uLmNyZWF0ZVNvbHZlVmFsaWRhdGlvbikoe1xuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIFNvbHZlcyB0aGUgbGluZWFyIGVxdWF0aW9uIHN5c3RlbSBieSBiYWNrd2FyZCBzdWJzdGl0dXRpb24uIE1hdHJpeCBtdXN0IGJlIGFuIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgKlxuICAgKiBgVSAqIHggPSBiYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudXNvbHZlKFUsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IHVzb2x2ZShhLCBiKSAgLy8gW1s4XSwgWzldXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBzbHUsIHVzb2x2ZSwgbHVzb2x2ZVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IFUgICAgICAgQSBOIHggTiBtYXRyaXggb3IgYXJyYXkgKFUpXG4gICAqIEBwYXJhbSB7TWF0cml4LCBBcnJheX0gYiAgICAgICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgYiB2YWx1ZXNcbiAgICpcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXggfCBBcnJheX0gIEEgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBsaW5lYXIgc3lzdGVtIHNvbHV0aW9uICh4KVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdTcGFyc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QXJyYXlNYXRyaXgobSwgYikge1xuICAgICAgLy8gcHJvY2VzcyBtYXRyaXhcbiAgICAgIHJldHVybiBfc3BhcnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG4gICAgICB2YXIgciA9IF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpOyAvLyByZXN1bHRcblxuXG4gICAgICByZXR1cm4gci52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VCYWNrd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7XG4gICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYlxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIHggPSBbXTsgLy8gYXJyYXlzXG5cbiAgICB2YXIgZGF0YSA9IG0uX2RhdGE7IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpXG5cbiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyB4W2pdXG5cbiAgICAgIHZhciB4aiA9IHZvaWQgMDsgLy8gYmFja3dhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2ampcblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGogLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIC8vIHVwZGF0ZSBjb3B5IG9mIGJcbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSB8fCAwLCBtdWx0aXBseVNjYWxhcih4aiwgZGF0YVtpXVtqXSkpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gemVybyB2YWx1ZSBAIGpcbiAgICAgICAgeGogPSAwO1xuICAgICAgfSAvLyB1cGRhdGUgeFxuXG5cbiAgICAgIHhbal0gPSBbeGpdO1xuICAgIH0gLy8gcmV0dXJuIGNvbHVtbiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBpLCBrOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpXG5cbiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyBiYWNrd2FyZCBzdWJzdGl0dXRpb24gKG91dGVyIHByb2R1Y3QpIGF2b2lkcyBpbm5lciBsb29waW5nIHdoZW4gYmogPT09IDBcblxuICAgICAgaWYgKCFlcXVhbFNjYWxhcihiaiwgMCkpIHtcbiAgICAgICAgLy8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgdmFyIHZqaiA9IDA7IC8vIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IHZhbHVlcyAmIGluZGV4IChjb2x1bW4gailcblxuICAgICAgICB2YXIganZhbHVlcyA9IFtdO1xuICAgICAgICB2YXIgamluZGV4ID0gW107IC8vIGZpcnN0ICYgbGFzdCBpbmRlY2VzIGluIGNvbHVtblxuXG4gICAgICAgIHZhciBmID0gcHRyW2pdO1xuICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal0sIGxvb3AgYmFja3dhcmRzXG5cbiAgICAgICAgZm9yIChrID0gbCAtIDE7IGsgPj0gZjsgay0tKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3dcblxuICAgICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdmpqXG4gICAgICAgICAgICB2amogPSB2YWx1ZXNba107XG4gICAgICAgICAgfSBlbHNlIGlmIChpIDwgaikge1xuICAgICAgICAgICAgLy8gc3RvcmUgdXBwZXIgdHJpYW5ndWxhclxuICAgICAgICAgICAganZhbHVlcy5wdXNoKHZhbHVlc1trXSk7XG4gICAgICAgICAgICBqaW5kZXgucHVzaChpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gYXQgdGhpcyBwb2ludCB3ZSBtdXN0IGhhdmUgYSB2YWx1ZSBAIFtqLCBqXVxuXG5cbiAgICAgICAgaWYgKGVxdWFsU2NhbGFyKHZqaiwgMCkpIHtcbiAgICAgICAgICAvLyBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCwgdGhlcmUgaXMgbm8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xpbmVhciBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCBzaW5jZSBtYXRyaXggaXMgc2luZ3VsYXInKTtcbiAgICAgICAgfSAvLyBjYWxjdWxhdGUgeGpcblxuXG4gICAgICAgIHZhciB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCB1cHBlciB0cmlhbmd1bGFyXG5cbiAgICAgICAgZm9yIChrID0gMCwgbCA9IGppbmRleC5sZW5ndGg7IGsgPCBsOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gamluZGV4W2tdOyAvLyB1cGRhdGUgY29weSBvZiBiXG5cbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07XG4gICAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICAgIHhbal0gPSBbeGpdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHhcbiAgICAgICAgeFtqXSA9IFswXTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVVc29sdmUgPSBjcmVhdGVVc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvbHZlVmFsaWRhdGlvbiA9IGNyZWF0ZVNvbHZlVmFsaWRhdGlvbjtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG5mdW5jdGlvbiBjcmVhdGVTb2x2ZVZhbGlkYXRpb24oX3JlZikge1xuICB2YXIgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgbWF0cml4IGFuZCBjb2x1bW4gdmVjdG9yIGIgZm9yIGJhY2t3YXJkL2ZvcndhcmQgc3Vic3RpdHV0aW9uIGFsZ29yaXRobXMuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBtICAgICAgICAgICAgQW4gTiB4IE4gbWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGIgICAgQSBjb2x1bW4gdmVjdG9yXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gY29weSAgICAgICAgUmV0dXJuIGEgY29weSBvZiB2ZWN0b3IgYlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeH0gICAgICAgIERlbnNlIGNvbHVtbiB2ZWN0b3IgYlxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIHNvbHZlVmFsaWRhdGlvbihtLCBiLCBjb3B5KSB7XG4gICAgLy8gbWF0cml4IHNpemVcbiAgICB2YXIgc2l6ZSA9IG0uc2l6ZSgpOyAvLyB2YWxpZGF0ZSBtYXRyaXggZGltZW5zaW9uc1xuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyB2YWxpZGF0ZSByb3dzICYgY29sdW1uc1xuXG4gICAgaWYgKHJvd3MgIT09IGNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9IC8vIHZhcnNcblxuXG4gICAgdmFyIGRhdGEsIGksIGJkYXRhOyAvLyBjaGVjayBiIGlzIG1hdHJpeFxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGIpKSB7XG4gICAgICAvLyBtYXRyaXggc2l6ZVxuICAgICAgdmFyIG1zaXplID0gYi5zaXplKCk7IC8vIHZlY3RvclxuXG4gICAgICBpZiAobXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGNoZWNrIHZlY3RvciBsZW5ndGhcbiAgICAgICAgaWYgKG1zaXplWzBdICE9PSByb3dzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeClcblxuICAgICAgICBiZGF0YSA9IGIuX2RhdGE7IC8vIGxvb3AgYiBkYXRhXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHJvdyBhcnJheVxuICAgICAgICAgIGRhdGFbaV0gPSBbYmRhdGFbaV1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdLFxuICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gdHdvIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAobXNpemUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yXG4gICAgICAgIGlmIChtc2l6ZVswXSAhPT0gcm93cyB8fCBtc2l6ZVsxXSAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjaGVjayBtYXRyaXggdHlwZVxuXG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoYikpIHtcbiAgICAgICAgICAvLyBjaGVjayBhIGNvcHkgaXMgbmVlZGVkXG4gICAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBkYXRhIGFycmF5XG4gICAgICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeClcblxuICAgICAgICAgICAgYmRhdGEgPSBiLl9kYXRhOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgIC8vIHJvdyBhcnJheVxuICAgICAgICAgICAgICBkYXRhW2ldID0gW2JkYXRhW2ldWzBdXTtcbiAgICAgICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeFxuXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICBzaXplOiBbcm93cywgMV0sXG4gICAgICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSAvLyBiIGlzIGFscmVhZHkgYSBjb2x1bW4gdmVjdG9yXG5cblxuICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIGRhdGFbaV0gPSBbMF07XG4gICAgICAgIH0gLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuXG4gICAgICAgIHZhciB2YWx1ZXMgPSBiLl92YWx1ZXM7XG4gICAgICAgIHZhciBpbmRleCA9IGIuX2luZGV4O1xuICAgICAgICB2YXIgcHRyID0gYi5fcHRyOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4gMFxuXG4gICAgICAgIGZvciAodmFyIGsxID0gcHRyWzFdLCBrID0gcHRyWzBdOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIGkgPSBpbmRleFtrXTsgLy8gYWRkIHRvIGRhdGFcblxuICAgICAgICAgIGRhdGFbaV1bMF0gPSB2YWx1ZXNba107XG4gICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeFxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBzaXplOiBbcm93cywgMV0sXG4gICAgICAgICAgZGF0YXR5cGU6IGIuX2RhdGF0eXBlXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aHJvdyBlcnJvclxuXG5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICB9IC8vIGNoZWNrIGIgaXMgYXJyYXlcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNBcnJheSkoYikpIHtcbiAgICAgIC8vIHNpemVcbiAgICAgIHZhciBhc2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKShiKTsgLy8gY2hlY2sgbWF0cml4IGRpbWVuc2lvbnMsIHZlY3RvclxuXG4gICAgICBpZiAoYXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGNoZWNrIHZlY3RvciBsZW5ndGhcbiAgICAgICAgaWYgKGFzaXplWzBdICE9PSByb3dzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107IC8vIGxvb3AgYlxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNpemUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yXG4gICAgICAgIGlmIChhc2l6ZVswXSAhPT0gcm93cyB8fCBhc2l6ZVsxXSAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjcmVhdGUgZGF0YSBhcnJheVxuXG5cbiAgICAgICAgZGF0YSA9IFtdOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1bMF1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aHJvdyBlcnJvclxuXG5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQW1kID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc0ZrZWVwID0gcmVxdWlyZShcIi4vY3NGa2VlcFwiKTtcblxudmFyIF9jc0ZsaXAgPSByZXF1aXJlKFwiLi9jc0ZsaXBcIik7XG5cbnZhciBfY3NUZGZzID0gcmVxdWlyZShcIi4vY3NUZGZzXCIpO1xuXG52YXIgbmFtZSA9ICdjc0FtZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJ107XG52YXIgY3JlYXRlQ3NBbWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcblxuICAvKipcbiAgICogQXBwcm94aW1hdGUgbWluaW11bSBkZWdyZWUgb3JkZXJpbmcuIFRoZSBtaW5pbXVtIGRlZ3JlZSBhbGdvcml0aG0gaXMgYSB3aWRlbHkgdXNlZFxuICAgKiBoZXVyaXN0aWMgZm9yIGZpbmRpbmcgYSBwZXJtdXRhdGlvbiBQIHNvIHRoYXQgUCpBKlAnIGhhcyBmZXdlciBub256ZXJvcyBpbiBpdHMgZmFjdG9yaXphdGlvblxuICAgKiB0aGFuIEEuIEl0IGlzIGEgZ3JlYWR5IG1ldGhvZCB0aGF0IHNlbGVjdHMgdGhlIHNwYXJzZXN0IHBpdm90IHJvdyBhbmQgY29sdW1uIGR1cmluZyB0aGUgY291cnNlXG4gICAqIG9mIGEgcmlnaHQgbG9va2luZyBzcGFyc2UgQ2hvbGVza3kgZmFjdG9yaXphdGlvbi5cbiAgICpcbiAgICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9yZGVyICAgIDA6IE5hdHVyYWwsIDE6IENob2xlc2t5LCAyOiBMVSwgMzogUVJcbiAgICogQHBhcmFtIHtNYXRyaXh9IG0gICAgICAgIFNwYXJzZSBNYXRyaXhcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBjc0FtZChvcmRlciwgYSkge1xuICAgIC8vIGNoZWNrIGlucHV0IHBhcmFtZXRlcnNcbiAgICBpZiAoIWEgfHwgb3JkZXIgPD0gMCB8fCBvcmRlciA+IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gYSBtYXRyaXggYXJyYXlzXG5cblxuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciBtID0gYXNpemVbMF07XG4gICAgdmFyIG4gPSBhc2l6ZVsxXTsgLy8gaW5pdGlhbGl6ZSB2YXJzXG5cbiAgICB2YXIgbGVtYXggPSAwOyAvLyBkZW5zZSB0aHJlc2hvbGRcblxuICAgIHZhciBkZW5zZSA9IE1hdGgubWF4KDE2LCAxMCAqIE1hdGguc3FydChuKSk7XG4gICAgZGVuc2UgPSBNYXRoLm1pbihuIC0gMiwgZGVuc2UpOyAvLyBjcmVhdGUgdGFyZ2V0IG1hdHJpeCBDXG5cbiAgICB2YXIgY20gPSBfY3JlYXRlVGFyZ2V0TWF0cml4KG9yZGVyLCBhLCBtLCBuLCBkZW5zZSk7IC8vIGRyb3AgZGlhZ29uYWwgZW50cmllc1xuXG5cbiAgICAoMCwgX2NzRmtlZXAuY3NGa2VlcCkoY20sIF9kaWFnLCBudWxsKTsgLy8gQyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgY2luZGV4ID0gY20uX2luZGV4O1xuICAgIHZhciBjcHRyID0gY20uX3B0cjsgLy8gbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gQ1xuXG4gICAgdmFyIGNueiA9IGNwdHJbbl07IC8vIGFsbG9jYXRlIHJlc3VsdCAobisxKVxuXG4gICAgdmFyIFAgPSBbXTsgLy8gY3JlYXRlIHdvcmtzcGFjZSAoOCAqIChuICsgMSkpXG5cbiAgICB2YXIgVyA9IFtdO1xuICAgIHZhciBsZW4gPSAwOyAvLyBmaXJzdCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgbnYgPSBuICsgMTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgbmV4dCA9IDIgKiAobiArIDEpOyAvLyBuZXh0IG4gKyAxIGVudHJpZXNcblxuICAgIHZhciBoZWFkID0gMyAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIGVsZW4gPSA0ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgZGVncmVlID0gNSAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIHcgPSA2ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgaGhlYWQgPSA3ICogKG4gKyAxKTsgLy8gbGFzdCBuICsgMSBlbnRyaWVzXG4gICAgLy8gdXNlIFAgYXMgd29ya3NwYWNlIGZvciBsYXN0XG5cbiAgICB2YXIgbGFzdCA9IFA7IC8vIGluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGhcblxuICAgIHZhciBtYXJrID0gX2luaXRpYWxpemVRdW90aWVudEdyYXBoKG4sIGNwdHIsIFcsIGxlbiwgaGVhZCwgbGFzdCwgbmV4dCwgaGhlYWQsIG52LCB3LCBlbGVuLCBkZWdyZWUpOyAvLyBpbml0aWFsaXplIGRlZ3JlZSBsaXN0c1xuXG5cbiAgICB2YXIgbmVsID0gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCk7IC8vIG1pbmltdW0gZGVncmVlIG5vZGVcblxuXG4gICAgdmFyIG1pbmRlZyA9IDA7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMSwgazIsIGUsIHBqLCBsbiwgbnZpLCBwaywgZWxuLCBwMSwgcDIsIHBuLCBoLCBkOyAvLyB3aGlsZSAoc2VsZWN0aW5nIHBpdm90cykgZG9cblxuICAgIHdoaWxlIChuZWwgPCBuKSB7XG4gICAgICAvLyBzZWxlY3Qgbm9kZSBvZiBtaW5pbXVtIGFwcHJveGltYXRlIGRlZ3JlZS4gYW1kKCkgaXMgbm93IHJlYWR5IHRvIHN0YXJ0IGVsaW1pbmF0aW5nIHRoZSBncmFwaC4gSXQgZmlyc3RcbiAgICAgIC8vIGZpbmRzIGEgbm9kZSBrIG9mIG1pbmltdW0gZGVncmVlIGFuZCByZW1vdmVzIGl0IGZyb20gaXRzIGRlZ3JlZSBsaXN0LiBUaGUgdmFyaWFibGUgbmVsIGtlZXBzIHRyYWNrIG9mIHRob3dcbiAgICAgIC8vIG1hbnkgbm9kZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQuXG4gICAgICBmb3IgKGsgPSAtMTsgbWluZGVnIDwgbiAmJiAoayA9IFdbaGVhZCArIG1pbmRlZ10pID09PSAtMTsgbWluZGVnKyspIHtcbiAgICAgICAgO1xuICAgICAgfVxuXG4gICAgICBpZiAoV1tuZXh0ICsga10gIT09IC0xKSB7XG4gICAgICAgIGxhc3RbV1tuZXh0ICsga11dID0gLTE7XG4gICAgICB9IC8vIHJlbW92ZSBrIGZyb20gZGVncmVlIGxpc3RcblxuXG4gICAgICBXW2hlYWQgKyBtaW5kZWddID0gV1tuZXh0ICsga107IC8vIGVsZW5rID0gfEVrfFxuXG4gICAgICB2YXIgZWxlbmsgPSBXW2VsZW4gKyBrXTsgLy8gIyBvZiBub2RlcyBrIHJlcHJlc2VudHNcblxuICAgICAgdmFyIG52ayA9IFdbbnYgKyBrXTsgLy8gV1tudiArIGtdIG5vZGVzIG9mIEEgZWxpbWluYXRlZFxuXG4gICAgICBuZWwgKz0gbnZrOyAvLyBDb25zdHJ1Y3QgYSBuZXcgZWxlbWVudC4gVGhlIG5ldyBlbGVtZW50IExrIGlzIGNvbnN0cnVjdGVkIGluIHBsYWNlIGlmIHxFa3wgPSAwLiBudltpXSBpc1xuICAgICAgLy8gbmVnYXRlZCBmb3IgYWxsIG5vZGVzIGkgaW4gTGsgdG8gZmxhZyB0aGVtIGFzIG1lbWJlcnMgb2YgdGhpcyBzZXQuIEVhY2ggbm9kZSBpIGlzIHJlbW92ZWQgZnJvbSB0aGVcbiAgICAgIC8vIGRlZ3JlZSBsaXN0cy4gQWxsIGVsZW1lbnRzIGUgaW4gRWsgYXJlIGFic29ydmVkIGludG8gZWxlbWVudCBrLlxuXG4gICAgICB2YXIgZGsgPSAwOyAvLyBmbGFnIGsgYXMgaW4gTGtcblxuICAgICAgV1tudiArIGtdID0gLW52aztcbiAgICAgIHZhciBwID0gY3B0cltrXTsgLy8gZG8gaW4gcGxhY2UgaWYgV1tlbGVuICsga10gPT09IDBcblxuICAgICAgdmFyIHBrMSA9IGVsZW5rID09PSAwID8gcCA6IGNuejtcbiAgICAgIHZhciBwazIgPSBwazE7XG5cbiAgICAgIGZvciAoazEgPSAxOyBrMSA8PSBlbGVuayArIDE7IGsxKyspIHtcbiAgICAgICAgaWYgKGsxID4gZWxlbmspIHtcbiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGtcbiAgICAgICAgICBlID0gazsgLy8gbGlzdCBvZiBub2RlcyBzdGFydHMgYXQgY2luZGV4W3BqXVxuXG4gICAgICAgICAgcGogPSBwOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBrXG5cbiAgICAgICAgICBsbiA9IFdbbGVuICsga10gLSBlbGVuaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGVcbiAgICAgICAgICBlID0gY2luZGV4W3ArK107XG4gICAgICAgICAgcGogPSBjcHRyW2VdOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBlXG5cbiAgICAgICAgICBsbiA9IFdbbGVuICsgZV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGsyID0gMTsgazIgPD0gbG47IGsyKyspIHtcbiAgICAgICAgICBpID0gY2luZGV4W3BqKytdOyAvLyBjaGVjayAgbm9kZSBpIGRlYWQsIG9yIHNlZW5cblxuICAgICAgICAgIGlmICgobnZpID0gV1tudiArIGldKSA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIFdbZGVncmVlICsgTGtdICs9IHNpemUgb2Ygbm9kZSBpXG5cblxuICAgICAgICAgIGRrICs9IG52aTsgLy8gbmVnYXRlIFdbbnYgKyBpXSB0byBkZW5vdGUgaSBpbiBMa1xuXG4gICAgICAgICAgV1tudiArIGldID0gLW52aTsgLy8gcGxhY2UgaSBpbiBMa1xuXG4gICAgICAgICAgY2luZGV4W3BrMisrXSA9IGk7XG5cbiAgICAgICAgICBpZiAoV1tuZXh0ICsgaV0gIT09IC0xKSB7XG4gICAgICAgICAgICBsYXN0W1dbbmV4dCArIGldXSA9IGxhc3RbaV07XG4gICAgICAgICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlbW92ZSBpIGZyb20gZGVncmVlIGxpc3RcblxuXG4gICAgICAgICAgaWYgKGxhc3RbaV0gIT09IC0xKSB7XG4gICAgICAgICAgICBXW25leHQgKyBsYXN0W2ldXSA9IFdbbmV4dCArIGldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBXW2hlYWQgKyBXW2RlZ3JlZSArIGldXSA9IFdbbmV4dCArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlICE9PSBrKSB7XG4gICAgICAgICAgLy8gYWJzb3JiIGUgaW50byBrXG4gICAgICAgICAgY3B0cltlXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkoayk7IC8vIGUgaXMgbm93IGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgICBXW3cgKyBlXSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY2luZGV4W2Nuei4uLm56bWF4XSBpcyBmcmVlXG5cblxuICAgICAgaWYgKGVsZW5rICE9PSAwKSB7XG4gICAgICAgIGNueiA9IHBrMjtcbiAgICAgIH0gLy8gZXh0ZXJuYWwgZGVncmVlIG9mIGsgLSB8TGtcXGl8XG5cblxuICAgICAgV1tkZWdyZWUgKyBrXSA9IGRrOyAvLyBlbGVtZW50IGsgaXMgaW4gY2luZGV4W3BrMS4ucGsyLTFdXG5cbiAgICAgIGNwdHJba10gPSBwazE7XG4gICAgICBXW2xlbiArIGtdID0gcGsyIC0gcGsxOyAvLyBrIGlzIG5vdyBhbiBlbGVtZW50XG5cbiAgICAgIFdbZWxlbiArIGtdID0gLTI7IC8vIEZpbmQgc2V0IGRpZmZlcmVuY2VzLiBUaGUgc2NhbjEgZnVuY3Rpb24gbm93IGNvbXB1dGVzIHRoZSBzZXQgZGlmZmVyZW5jZXMgfExlIFxcIExrfCBmb3IgYWxsIGVsZW1lbnRzIGUuIEF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICAgIC8vIHNjYW4sIG5vIGVudHJ5IGluIHRoZSB3IGFycmF5IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtYXJrLlxuICAgICAgLy8gY2xlYXIgdyBpZiBuZWNlc3NhcnlcblxuICAgICAgbWFyayA9IF93Y2xlYXIobWFyaywgbGVtYXgsIFcsIHcsIG4pOyAvLyBzY2FuIDE6IGZpbmQgfExlXFxMa3xcblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGlmIFdbZWxlbiArIGldIGVtcHR5LCBza2lwIGl0XG5cbiAgICAgICAgaWYgKChlbG4gPSBXW2VsZW4gKyBpXSkgPD0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIFdbbnYgKyBpXSB3YXMgbmVnYXRlZFxuXG5cbiAgICAgICAgbnZpID0gLVdbbnYgKyBpXTtcbiAgICAgICAgdmFyIHdudmkgPSBtYXJrIC0gbnZpOyAvLyBzY2FuIEVpXG5cbiAgICAgICAgZm9yIChwID0gY3B0cltpXSwgcDEgPSBjcHRyW2ldICsgZWxuIC0gMTsgcCA8PSBwMTsgcCsrKSB7XG4gICAgICAgICAgZSA9IGNpbmRleFtwXTtcblxuICAgICAgICAgIGlmIChXW3cgKyBlXSA+PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBkZWNyZW1lbnQgfExlXFxMa3xcbiAgICAgICAgICAgIFdbdyArIGVdIC09IG52aTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFdbdyArIGVdICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBlbnN1cmUgZSBpcyBhIGxpdmUgZWxlbWVudCwgMXN0IHRpbWUgZSBzZWVuIGluIHNjYW4gMVxuICAgICAgICAgICAgV1t3ICsgZV0gPSBXW2RlZ3JlZSArIGVdICsgd252aTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZGVncmVlIHVwZGF0ZVxuICAgICAgLy8gVGhlIHNlY29uZCBwYXNzIGNvbXB1dGVzIHRoZSBhcHByb3hpbWF0ZSBkZWdyZWUgZGksIHBydW5lcyB0aGUgc2V0cyBFaSBhbmQgQWksIGFuZCBjb21wdXRlcyBhIGhhc2hcbiAgICAgIC8vIGZ1bmN0aW9uIGgoaSkgZm9yIGFsbCBub2RlcyBpbiBMay5cbiAgICAgIC8vIHNjYW4yOiBkZWdyZWUgdXBkYXRlXG5cblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgLy8gY29uc2lkZXIgbm9kZSBpIGluIExrXG4gICAgICAgIGkgPSBjaW5kZXhbcGtdO1xuICAgICAgICBwMSA9IGNwdHJbaV07XG4gICAgICAgIHAyID0gcDEgKyBXW2VsZW4gKyBpXSAtIDE7XG4gICAgICAgIHBuID0gcDE7IC8vIHNjYW4gRWlcblxuICAgICAgICBmb3IgKGggPSAwLCBkID0gMCwgcCA9IHAxOyBwIDw9IHAyOyBwKyspIHtcbiAgICAgICAgICBlID0gY2luZGV4W3BdOyAvLyBjaGVjayBlIGlzIGFuIHVuYWJzb3JiZWQgZWxlbWVudFxuXG4gICAgICAgICAgaWYgKFdbdyArIGVdICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBkZXh0ID0gfExlXFxMa3xcbiAgICAgICAgICAgIHZhciBkZXh0ID0gV1t3ICsgZV0gLSBtYXJrO1xuXG4gICAgICAgICAgICBpZiAoZGV4dCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gc3VtIHVwIHRoZSBzZXQgZGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgZCArPSBkZXh0OyAvLyBrZWVwIGUgaW4gRWlcblxuICAgICAgICAgICAgICBjaW5kZXhbcG4rK10gPSBlOyAvLyBjb21wdXRlIHRoZSBoYXNoIG9mIG5vZGUgaVxuXG4gICAgICAgICAgICAgIGggKz0gZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFnZ3Jlc3NpdmUgYWJzb3JiLiBlLT5rXG4gICAgICAgICAgICAgIGNwdHJbZV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGspOyAvLyBlIGlzIGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgICAgICAgV1t3ICsgZV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBXW2VsZW4gKyBpXSA9IHxFaXxcblxuXG4gICAgICAgIFdbZWxlbiArIGldID0gcG4gLSBwMSArIDE7XG4gICAgICAgIHZhciBwMyA9IHBuO1xuICAgICAgICB2YXIgcDQgPSBwMSArIFdbbGVuICsgaV07IC8vIHBydW5lIGVkZ2VzIGluIEFpXG5cbiAgICAgICAgZm9yIChwID0gcDIgKyAxOyBwIDwgcDQ7IHArKykge1xuICAgICAgICAgIGogPSBjaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaiBkZWFkIG9yIGluIExrXG5cbiAgICAgICAgICB2YXIgbnZqID0gV1tudiArIGpdO1xuXG4gICAgICAgICAgaWYgKG52aiA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIGRlZ3JlZShpKSArPSB8anxcblxuXG4gICAgICAgICAgZCArPSBudmo7IC8vIHBsYWNlIGogaW4gbm9kZSBsaXN0IG9mIGlcblxuICAgICAgICAgIGNpbmRleFtwbisrXSA9IGo7IC8vIGNvbXB1dGUgaGFzaCBmb3Igbm9kZSBpXG5cbiAgICAgICAgICBoICs9IGo7XG4gICAgICAgIH0gLy8gY2hlY2sgZm9yIG1hc3MgZWxpbWluYXRpb25cblxuXG4gICAgICAgIGlmIChkID09PSAwKSB7XG4gICAgICAgICAgLy8gYWJzb3JiIGkgaW50byBrXG4gICAgICAgICAgY3B0cltpXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkoayk7XG4gICAgICAgICAgbnZpID0gLVdbbnYgKyBpXTsgLy8gfExrfCAtPSB8aXxcblxuICAgICAgICAgIGRrIC09IG52aTsgLy8gfGt8ICs9IFdbbnYgKyBpXVxuXG4gICAgICAgICAgbnZrICs9IG52aTtcbiAgICAgICAgICBuZWwgKz0gbnZpO1xuICAgICAgICAgIFdbbnYgKyBpXSA9IDA7IC8vIG5vZGUgaSBpcyBkZWFkXG5cbiAgICAgICAgICBXW2VsZW4gKyBpXSA9IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSBkZWdyZWUoaSlcbiAgICAgICAgICBXW2RlZ3JlZSArIGldID0gTWF0aC5taW4oV1tkZWdyZWUgKyBpXSwgZCk7IC8vIG1vdmUgZmlyc3Qgbm9kZSB0byBlbmRcblxuICAgICAgICAgIGNpbmRleFtwbl0gPSBjaW5kZXhbcDNdOyAvLyBtb3ZlIDFzdCBlbC4gdG8gZW5kIG9mIEVpXG5cbiAgICAgICAgICBjaW5kZXhbcDNdID0gY2luZGV4W3AxXTsgLy8gYWRkIGsgYXMgMXN0IGVsZW1lbnQgaW4gb2YgRWlcblxuICAgICAgICAgIGNpbmRleFtwMV0gPSBrOyAvLyBuZXcgbGVuIG9mIGFkai4gbGlzdCBvZiBub2RlIGlcblxuICAgICAgICAgIFdbbGVuICsgaV0gPSBwbiAtIHAxICsgMTsgLy8gZmluYWxpemUgaGFzaCBvZiBpXG5cbiAgICAgICAgICBoID0gKGggPCAwID8gLWggOiBoKSAlIG47IC8vIHBsYWNlIGkgaW4gaGFzaCBidWNrZXRcblxuICAgICAgICAgIFdbbmV4dCArIGldID0gV1toaGVhZCArIGhdO1xuICAgICAgICAgIFdbaGhlYWQgKyBoXSA9IGk7IC8vIHNhdmUgaGFzaCBvZiBpIGluIGxhc3RbaV1cblxuICAgICAgICAgIGxhc3RbaV0gPSBoO1xuICAgICAgICB9XG4gICAgICB9IC8vIGZpbmFsaXplIHxMa3xcblxuXG4gICAgICBXW2RlZ3JlZSArIGtdID0gZGs7XG4gICAgICBsZW1heCA9IE1hdGgubWF4KGxlbWF4LCBkayk7IC8vIGNsZWFyIHdcblxuICAgICAgbWFyayA9IF93Y2xlYXIobWFyayArIGxlbWF4LCBsZW1heCwgVywgdywgbik7IC8vIFN1cGVybm9kZSBkZXRlY3Rpb24uIFN1cGVybm9kZSBkZXRlY3Rpb24gcmVsaWVzIG9uIHRoZSBoYXNoIGZ1bmN0aW9uIGgoaSkgY29tcHV0ZWQgZm9yIGVhY2ggbm9kZSBpLlxuICAgICAgLy8gSWYgdHdvIG5vZGVzIGhhdmUgaWRlbnRpY2FsIGFkamFjZW5jeSBsaXN0cywgdGhlaXIgaGFzaCBmdW5jdGlvbnMgd2lsIGJlIGlkZW50aWNhbC5cblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGkgaXMgZGVhZCwgc2tpcCBpdFxuXG4gICAgICAgIGlmIChXW252ICsgaV0gPj0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIHNjYW4gaGFzaCBidWNrZXQgb2Ygbm9kZSBpXG5cblxuICAgICAgICBoID0gbGFzdFtpXTtcbiAgICAgICAgaSA9IFdbaGhlYWQgKyBoXTsgLy8gaGFzaCBidWNrZXQgd2lsbCBiZSBlbXB0eVxuXG4gICAgICAgIFdbaGhlYWQgKyBoXSA9IC0xO1xuXG4gICAgICAgIGZvciAoOyBpICE9PSAtMSAmJiBXW25leHQgKyBpXSAhPT0gLTE7IGkgPSBXW25leHQgKyBpXSwgbWFyaysrKSB7XG4gICAgICAgICAgbG4gPSBXW2xlbiArIGldO1xuICAgICAgICAgIGVsbiA9IFdbZWxlbiArIGldO1xuXG4gICAgICAgICAgZm9yIChwID0gY3B0cltpXSArIDE7IHAgPD0gY3B0cltpXSArIGxuIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICBXW3cgKyBjaW5kZXhbcF1dID0gbWFyaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgamxhc3QgPSBpOyAvLyBjb21wYXJlIGkgd2l0aCBhbGwgalxuXG4gICAgICAgICAgZm9yIChqID0gV1tuZXh0ICsgaV07IGogIT09IC0xOykge1xuICAgICAgICAgICAgdmFyIG9rID0gV1tsZW4gKyBqXSA9PT0gbG4gJiYgV1tlbGVuICsgal0gPT09IGVsbjtcblxuICAgICAgICAgICAgZm9yIChwID0gY3B0cltqXSArIDE7IG9rICYmIHAgPD0gY3B0cltqXSArIGxuIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICAgIC8vIGNvbXBhcmUgaSBhbmQgalxuICAgICAgICAgICAgICBpZiAoV1t3ICsgY2luZGV4W3BdXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAgIG9rID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBjaGVjayBpIGFuZCBqIGFyZSBpZGVudGljYWxcblxuXG4gICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgLy8gYWJzb3JiIGogaW50byBpXG4gICAgICAgICAgICAgIGNwdHJbal0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGkpO1xuICAgICAgICAgICAgICBXW252ICsgaV0gKz0gV1tudiArIGpdO1xuICAgICAgICAgICAgICBXW252ICsgal0gPSAwOyAvLyBub2RlIGogaXMgZGVhZFxuXG4gICAgICAgICAgICAgIFdbZWxlbiArIGpdID0gLTE7IC8vIGRlbGV0ZSBqIGZyb20gaGFzaCBidWNrZXRcblxuICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07XG4gICAgICAgICAgICAgIFdbbmV4dCArIGpsYXN0XSA9IGo7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBqIGFuZCBpIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgamxhc3QgPSBqO1xuICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIEZpbmFsaXplIG5ldyBlbGVtZW50LiBUaGUgZWxpbWluYXRpb24gb2Ygbm9kZSBrIGlzIG5lYXJseSBjb21wbGV0ZS4gQWxsIG5vZGVzIGkgaW4gTGsgYXJlIHNjYW5uZWQgb25lIGxhc3QgdGltZS5cbiAgICAgIC8vIE5vZGUgaSBpcyByZW1vdmVkIGZyb20gTGsgaWYgaXQgaXMgZGVhZC4gVGhlIGZsYWdnZWQgc3RhdHVzIG9mIG52W2ldIGlzIGNsZWFyZWQuXG5cblxuICAgICAgZm9yIChwID0gcGsxLCBwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrICBpIGlzIGRlYWQsIHNraXAgaXRcblxuICAgICAgICBpZiAoKG52aSA9IC1XW252ICsgaV0pIDw9IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyByZXN0b3JlIFdbbnYgKyBpXVxuXG5cbiAgICAgICAgV1tudiArIGldID0gbnZpOyAvLyBjb21wdXRlIGV4dGVybmFsIGRlZ3JlZShpKVxuXG4gICAgICAgIGQgPSBXW2RlZ3JlZSArIGldICsgZGsgLSBudmk7XG4gICAgICAgIGQgPSBNYXRoLm1pbihkLCBuIC0gbmVsIC0gbnZpKTtcblxuICAgICAgICBpZiAoV1toZWFkICsgZF0gIT09IC0xKSB7XG4gICAgICAgICAgbGFzdFtXW2hlYWQgKyBkXV0gPSBpO1xuICAgICAgICB9IC8vIHB1dCBpIGJhY2sgaW4gZGVncmVlIGxpc3RcblxuXG4gICAgICAgIFdbbmV4dCArIGldID0gV1toZWFkICsgZF07XG4gICAgICAgIGxhc3RbaV0gPSAtMTtcbiAgICAgICAgV1toZWFkICsgZF0gPSBpOyAvLyBmaW5kIG5ldyBtaW5pbXVtIGRlZ3JlZVxuXG4gICAgICAgIG1pbmRlZyA9IE1hdGgubWluKG1pbmRlZywgZCk7XG4gICAgICAgIFdbZGVncmVlICsgaV0gPSBkOyAvLyBwbGFjZSBpIGluIExrXG5cbiAgICAgICAgY2luZGV4W3ArK10gPSBpO1xuICAgICAgfSAvLyAjIG5vZGVzIGFic29yYmVkIGludG8ga1xuXG5cbiAgICAgIFdbbnYgKyBrXSA9IG52azsgLy8gbGVuZ3RoIG9mIGFkaiBsaXN0IG9mIGVsZW1lbnQga1xuXG4gICAgICBpZiAoKFdbbGVuICsga10gPSBwIC0gcGsxKSA9PT0gMCkge1xuICAgICAgICAvLyBrIGlzIGEgcm9vdCBvZiB0aGUgdHJlZVxuICAgICAgICBjcHRyW2tdID0gLTE7IC8vIGsgaXMgbm93IGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgV1t3ICsga10gPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbmsgIT09IDApIHtcbiAgICAgICAgLy8gZnJlZSB1bnVzZWQgc3BhY2UgaW4gTGtcbiAgICAgICAgY256ID0gcDtcbiAgICAgIH1cbiAgICB9IC8vIFBvc3RvcmRlcmluZy4gVGhlIGVsaW1pbmF0aW9uIGlzIGNvbXBsZXRlLCBidXQgbm8gcGVybXV0YXRpb24gaGFzIGJlZW4gY29tcHV0ZWQuIEFsbCB0aGF0IGlzIGxlZnRcbiAgICAvLyBvZiB0aGUgZ3JhcGggaXMgdGhlIGFzc2VtYmx5IHRyZWUgKHB0cikgYW5kIGEgc2V0IG9mIGRlYWQgbm9kZXMgYW5kIGVsZW1lbnRzIChpIGlzIGEgZGVhZCBub2RlIGlmXG4gICAgLy8gbnZbaV0gaXMgemVybyBhbmQgYSBkZWFkIGVsZW1lbnQgaWYgbnZbaV0gPiAwKS4gSXQgaXMgZnJvbSB0aGlzIGluZm9ybWF0aW9uIG9ubHkgdGhhdCB0aGUgZmluYWwgcGVybXV0YXRpb25cbiAgICAvLyBpcyBjb21wdXRlZC4gVGhlIHRyZWUgaXMgcmVzdG9yZWQgYnkgdW5mbGlwcGluZyBhbGwgb2YgcHRyLlxuICAgIC8vIGZpeCBhc3NlbWJseSB0cmVlXG5cblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNwdHJbaV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGNwdHJbaV0pO1xuICAgIH1cblxuICAgIGZvciAoaiA9IDA7IGogPD0gbjsgaisrKSB7XG4gICAgICBXW2hlYWQgKyBqXSA9IC0xO1xuICAgIH0gLy8gcGxhY2UgdW5vcmRlcmVkIG5vZGVzIGluIGxpc3RzXG5cblxuICAgIGZvciAoaiA9IG47IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBza2lwIGlmIGogaXMgYW4gZWxlbWVudFxuICAgICAgaWYgKFdbbnYgKyBqXSA+IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHBsYWNlIGogaW4gbGlzdCBvZiBpdHMgcGFyZW50XG5cblxuICAgICAgV1tuZXh0ICsgal0gPSBXW2hlYWQgKyBjcHRyW2pdXTtcbiAgICAgIFdbaGVhZCArIGNwdHJbal1dID0gajtcbiAgICB9IC8vIHBsYWNlIGVsZW1lbnRzIGluIGxpc3RzXG5cblxuICAgIGZvciAoZSA9IG47IGUgPj0gMDsgZS0tKSB7XG4gICAgICAvLyBza2lwIHVubGVzcyBlIGlzIGFuIGVsZW1lbnRcbiAgICAgIGlmIChXW252ICsgZV0gPD0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNwdHJbZV0gIT09IC0xKSB7XG4gICAgICAgIC8vIHBsYWNlIGUgaW4gbGlzdCBvZiBpdHMgcGFyZW50XG4gICAgICAgIFdbbmV4dCArIGVdID0gV1toZWFkICsgY3B0cltlXV07XG4gICAgICAgIFdbaGVhZCArIGNwdHJbZV1dID0gZTtcbiAgICAgIH1cbiAgICB9IC8vIHBvc3RvcmRlciB0aGUgYXNzZW1ibHkgdHJlZVxuXG5cbiAgICBmb3IgKGsgPSAwLCBpID0gMDsgaSA8PSBuOyBpKyspIHtcbiAgICAgIGlmIChjcHRyW2ldID09PSAtMSkge1xuICAgICAgICBrID0gKDAsIF9jc1RkZnMuY3NUZGZzKShpLCBrLCBXLCBoZWFkLCBuZXh0LCBQLCB3KTtcbiAgICAgIH1cbiAgICB9IC8vIHJlbW92ZSBsYXN0IGl0ZW0gaW4gYXJyYXlcblxuXG4gICAgUC5zcGxpY2UoUC5sZW5ndGggLSAxLCAxKTsgLy8gcmV0dXJuIFBcblxuICAgIHJldHVybiBQO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgbWF0cml4IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBhcHByb3hpbWF0ZSBtaW5pbXVtIGRlZ3JlZSBvcmRlcmluZyBhbGdvcml0aG0uIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZSBtYXRyaXggTSBhcyBpbnB1dCBhbmQgcmV0dXJucyBhIHBlcm11dGF0aW9uXG4gICAqIHZlY3RvciBQLiBUaGUgYW1kIGFsZ29yaXRobSBvcGVyYXRlcyBvbiBhIHN5bW1ldHJpeCBtYXRyaXgsIHNvIG9uZSBvZiB0aHJlZSBzeW1tZXRyaWMgbWF0cmljZXMgaXMgZm9ybWVkLlxuICAgKlxuICAgKiBPcmRlcjogMFxuICAgKiAgIEEgbmF0dXJhbCBvcmRlcmluZyBQPW51bGwgbWF0cml4IGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBPcmRlcjogMVxuICAgKiAgIE1hdHJpeCBtdXN0IGJlIHNxdWFyZS4gVGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgYSBDaG9sZXNreSBvciBMVSBmYWN0b3JpemF0aW9uLlxuICAgKiAgIFAgPSBNICsgTSdcbiAgICpcbiAgICogT3JkZXI6IDJcbiAgICogICBEZW5zZSBjb2x1bW5zIGZyb20gTScgYXJlIGRyb3BwZWQsIE0gcmVjcmVhdGVkIGZyb20gTScuIFRoaXMgaXMgYXBwcm9wcmlhdGVmb3IgTFUgZmFjdG9yaXphdGlvbiBvZiB1bnN5bW1ldHJpYyBtYXRyaWNlcy5cbiAgICogICBQID0gTScgKiBNXG4gICAqXG4gICAqIE9yZGVyOiAzXG4gICAqICAgVGhpcyBpcyBiZXN0IHVzZWQgZm9yIFFSIGZhY3Rvcml6YXRpb24gb3IgTFUgZmFjdG9yaXphdGlvbiBpcyBtYXRyaXggTSBoYXMgbm8gZGVuc2Ugcm93cy4gQSBkZW5zZSByb3cgaXMgYSByb3cgd2l0aCBtb3JlIHRoYW4gMTAqc3FyKGNvbHVtbnMpIGVudHJpZXMuXG4gICAqICAgUCA9IE0nICogTVxuICAgKi9cblxuICBmdW5jdGlvbiBfY3JlYXRlVGFyZ2V0TWF0cml4KG9yZGVyLCBhLCBtLCBuLCBkZW5zZSkge1xuICAgIC8vIGNvbXB1dGUgQSdcbiAgICB2YXIgYXQgPSB0cmFuc3Bvc2UoYSk7IC8vIGNoZWNrIG9yZGVyID0gMSwgbWF0cml4IG11c3QgYmUgc3F1YXJlXG5cbiAgICBpZiAob3JkZXIgPT09IDEgJiYgbiA9PT0gbSkge1xuICAgICAgLy8gQyA9IEEgKyBBJ1xuICAgICAgcmV0dXJuIGFkZChhLCBhdCk7XG4gICAgfSAvLyBjaGVjayBvcmRlciA9IDIsIGRyb3AgZGVuc2UgY29sdW1ucyBmcm9tIE0nXG5cblxuICAgIGlmIChvcmRlciA9PT0gMikge1xuICAgICAgLy8gdHJhbnNwb3NlIGFycmF5c1xuICAgICAgdmFyIHRpbmRleCA9IGF0Ll9pbmRleDtcbiAgICAgIHZhciB0cHRyID0gYXQuX3B0cjsgLy8gbmV3IGNvbHVtbiBpbmRleFxuXG4gICAgICB2YXIgcDIgPSAwOyAvLyBsb29wIEEnIGNvbHVtbnMgKHJvd3MpXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbTsgaisrKSB7XG4gICAgICAgIC8vIGNvbHVtbiBqIG9mIEFUIHN0YXJ0cyBoZXJlXG4gICAgICAgIHZhciBwID0gdHB0cltqXTsgLy8gbmV3IGNvbHVtbiBqIHN0YXJ0cyBoZXJlXG5cbiAgICAgICAgdHB0cltqXSA9IHAyOyAvLyBza2lwIGRlbnNlIGNvbCBqXG5cbiAgICAgICAgaWYgKHRwdHJbaiArIDFdIC0gcCA+IGRlbnNlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gbWFwIHJvd3MgaW4gY29sdW1uIGogb2YgQVxuXG5cbiAgICAgICAgZm9yICh2YXIgcDEgPSB0cHRyW2ogKyAxXTsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICB0aW5kZXhbcDIrK10gPSB0aW5kZXhbcF07XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZmluYWxpemUgQVRcblxuXG4gICAgICB0cHRyW21dID0gcDI7IC8vIHJlY3JlYXRlIEEgZnJvbSBuZXcgdHJhbnNwb3NlIG1hdHJpeFxuXG4gICAgICBhID0gdHJhbnNwb3NlKGF0KTsgLy8gdXNlIEEnICogQVxuXG4gICAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpO1xuICAgIH0gLy8gdXNlIEEnICogQSwgc3F1YXJlIG9yIHJlY3Rhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpO1xuICB9XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHF1b3RpZW50IGdyYXBoLiBUaGVyZSBhcmUgZm91ciBraW5kIG9mIG5vZGVzIGFuZCBlbGVtZW50cyB0aGF0IG11c3QgYmUgcmVwcmVzZW50ZWQ6XG4gICAqXG4gICAqICAtIEEgbGl2ZSBub2RlIGlzIGEgbm9kZSBpIChvciBhIHN1cGVybm9kZSkgdGhhdCBoYXMgbm90IGJlZW4gc2VsZWN0ZWQgYXMgYSBwaXZvdCBuYWQgaGFzIG5vdCBiZWVuIG1lcmdlZCBpbnRvIGFub3RoZXIgc3VwZXJub2RlLlxuICAgKiAgLSBBIGRlYWQgbm9kZSBpIGlzIG9uZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZ3JhcGgsIGhhdmluZyBiZWVuIGFic29ydmVkIGludG8gciA9IGZsaXAocHRyW2ldKS5cbiAgICogIC0gQSBsaXZlIGVsZW1lbnQgZSBpcyBvbmUgdGhhdCBpcyBpbiB0aGUgZ3JhcGgsIGhhdmluZyBiZWVuIGZvcm1lZCB3aGVuIG5vZGUgZSB3YXMgc2VsZWN0ZWQgYXMgdGhlIHBpdm90LlxuICAgKiAgLSBBIGRlYWQgZWxlbWVudCBlIGlzIG9uZSB0aGF0IGhhcyBiZW5uIGFic29ydmVkIGludG8gYSBzdWJzZXF1ZW50IGVsZW1lbnQgcyA9IGZsaXAocHRyW2VdKS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfaW5pdGlhbGl6ZVF1b3RpZW50R3JhcGgobiwgY3B0ciwgVywgbGVuLCBoZWFkLCBsYXN0LCBuZXh0LCBoaGVhZCwgbnYsIHcsIGVsZW4sIGRlZ3JlZSkge1xuICAgIC8vIEluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGhcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgV1tsZW4gKyBrXSA9IGNwdHJbayArIDFdIC0gY3B0cltrXTtcbiAgICB9XG5cbiAgICBXW2xlbiArIG5dID0gMDsgLy8gaW5pdGlhbGl6ZSB3b3Jrc3BhY2VcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykge1xuICAgICAgLy8gZGVncmVlIGxpc3QgaSBpcyBlbXB0eVxuICAgICAgV1toZWFkICsgaV0gPSAtMTtcbiAgICAgIGxhc3RbaV0gPSAtMTtcbiAgICAgIFdbbmV4dCArIGldID0gLTE7IC8vIGhhc2ggbGlzdCBpIGlzIGVtcHR5XG5cbiAgICAgIFdbaGhlYWQgKyBpXSA9IC0xOyAvLyBub2RlIGkgaXMganVzdCBvbmUgbm9kZVxuXG4gICAgICBXW252ICsgaV0gPSAxOyAvLyBub2RlIGkgaXMgYWxpdmVcblxuICAgICAgV1t3ICsgaV0gPSAxOyAvLyBFayBvZiBub2RlIGkgaXMgZW1wdHlcblxuICAgICAgV1tlbGVuICsgaV0gPSAwOyAvLyBkZWdyZWUgb2Ygbm9kZSBpXG5cbiAgICAgIFdbZGVncmVlICsgaV0gPSBXW2xlbiArIGldO1xuICAgIH0gLy8gY2xlYXIgd1xuXG5cbiAgICB2YXIgbWFyayA9IF93Y2xlYXIoMCwgMCwgVywgdywgbik7IC8vIG4gaXMgYSBkZWFkIGVsZW1lbnRcblxuXG4gICAgV1tlbGVuICsgbl0gPSAtMjsgLy8gbiBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZVxuXG4gICAgY3B0cltuXSA9IC0xOyAvLyBuIGlzIGEgZGVhZCBlbGVtZW50XG5cbiAgICBXW3cgKyBuXSA9IDA7IC8vIHJldHVybiBtYXJrXG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBkZWdyZWUgbGlzdHMuIEVhY2ggbm9kZSBpcyBwbGFjZWQgaW4gaXRzIGRlZ3JlZSBsaXN0cy4gTm9kZXMgb2YgemVybyBkZWdyZWUgYXJlIGVsaW1pbmF0ZWQgaW1tZWRpYXRlbHkuIE5vZGVzIHdpdGhcbiAgICogZGVncmVlID49IGRlbnNlIGFyZSBhbHNvbCBlbGltaW5hdGVkIGFuZCBtZXJnZWQgaW50byBhIHBsYWNlaG9sZGVyIG5vZGUgbiwgYSBkZWFkIGVsZW1lbnQuIFRoZXMgbm9kZXMgd2lsbCBhcHBlcmEgbGFzdCBpbiB0aGVcbiAgICogb3V0cHV0IHBlcm11dGF0aW9uIHAuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCkge1xuICAgIC8vIHJlc3VsdFxuICAgIHZhciBuZWwgPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBkZWdyZWUgQCBpXG4gICAgICB2YXIgZCA9IFdbZGVncmVlICsgaV07IC8vIGNoZWNrIG5vZGUgaSBpcyBlbXB0eVxuXG4gICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAvLyBlbGVtZW50IGkgaXMgZGVhZFxuICAgICAgICBXW2VsZW4gKyBpXSA9IC0yO1xuICAgICAgICBuZWwrKzsgLy8gaSBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZVxuXG4gICAgICAgIGNwdHJbaV0gPSAtMTtcbiAgICAgICAgV1t3ICsgaV0gPSAwO1xuICAgICAgfSBlbHNlIGlmIChkID4gZGVuc2UpIHtcbiAgICAgICAgLy8gYWJzb3JiIGkgaW50byBlbGVtZW50IG5cbiAgICAgICAgV1tudiArIGldID0gMDsgLy8gbm9kZSBpIGlzIGRlYWRcblxuICAgICAgICBXW2VsZW4gKyBpXSA9IC0xO1xuICAgICAgICBuZWwrKztcbiAgICAgICAgY3B0cltpXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkobik7XG4gICAgICAgIFdbbnYgKyBuXSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGggPSBXW2hlYWQgKyBkXTtcblxuICAgICAgICBpZiAoaCAhPT0gLTEpIHtcbiAgICAgICAgICBsYXN0W2hdID0gaTtcbiAgICAgICAgfSAvLyBwdXQgbm9kZSBpIGluIGRlZ3JlZSBsaXN0IGRcblxuXG4gICAgICAgIFdbbmV4dCArIGldID0gV1toZWFkICsgZF07XG4gICAgICAgIFdbaGVhZCArIGRdID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmVsO1xuICB9XG5cbiAgZnVuY3Rpb24gX3djbGVhcihtYXJrLCBsZW1heCwgVywgdywgbikge1xuICAgIGlmIChtYXJrIDwgMiB8fCBtYXJrICsgbGVtYXggPCAwKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgICBpZiAoV1t3ICsga10gIT09IDApIHtcbiAgICAgICAgICBXW3cgKyBrXSA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWFyayA9IDI7XG4gICAgfSAvLyBhdCB0aGlzIHBvaW50LCBXIFswLi5uLTFdIDwgbWFyayBob2xkc1xuXG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaWFnKGksIGopIHtcbiAgICByZXR1cm4gaSAhPT0gajtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQW1kID0gY3JlYXRlQ3NBbWQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQ291bnRzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc0xlYWYgPSByZXF1aXJlKFwiLi9jc0xlYWZcIik7XG5cbnZhciBuYW1lID0gJ2NzQ291bnRzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3RyYW5zcG9zZSddO1xudmFyIGNyZWF0ZUNzQ291bnRzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgY29sdW1uIGNvdW50cyB1c2luZyB0aGUgdXBwZXIgdHJpYW5ndWxhciBwYXJ0IG9mIEEuXG4gICAqIEl0IHRyYW5zcG9zZXMgQSBpbnRlcm5hbGx5LCBub25lIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBtb2RpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgIFRoZSBzcGFyc2UgbWF0cml4IEFcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGF0YSAgICAgICAgIENvdW50IHRoZSBjb2x1bW5zIG9mIEEnQSBpbnN0ZWFkXG4gICAqXG4gICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICBBbiBhcnJheSBvZiBzaXplIG4gb2YgdGhlIGNvbHVtbiBjb3VudHMgb3IgbnVsbCBvbiBlcnJvclxuICAgKlxuICAgKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBwYXJlbnQsIHBvc3QsIGF0YSkge1xuICAgIC8vIGNoZWNrIGlucHV0c1xuICAgIGlmICghYSB8fCAhcGFyZW50IHx8ICFwb3N0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGEgbWF0cml4IGFycmF5c1xuXG5cbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbSA9IGFzaXplWzBdO1xuICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcmlhYmxlc1xuXG4gICAgdmFyIGksIGosIGssIEosIHAsIHAwLCBwMTsgLy8gd29ya3NwYWNlIHNpemVcblxuICAgIHZhciBzID0gNCAqIG4gKyAoYXRhID8gbiArIG0gKyAxIDogMCk7IC8vIGFsbG9jYXRlIHdvcmtzcGFjZVxuXG4gICAgdmFyIHcgPSBbXTsgLy8gKHMpXG5cbiAgICB2YXIgYW5jZXN0b3IgPSAwOyAvLyBmaXJzdCBuIGVudHJpZXNcblxuICAgIHZhciBtYXhmaXJzdCA9IG47IC8vIG5leHQgbiBlbnRyaWVzXG5cbiAgICB2YXIgcHJldmxlYWYgPSAyICogbjsgLy8gbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciBmaXJzdCA9IDMgKiBuOyAvLyBuZXh0IG4gZW50cmllc1xuXG4gICAgdmFyIGhlYWQgPSA0ICogbjsgLy8gbmV4dCBuICsgMSBlbnRyaWVzICh1c2VkIHdoZW4gYXRhIGlzIHRydWUpXG5cbiAgICB2YXIgbmV4dCA9IDUgKiBuICsgMTsgLy8gbGFzdCBlbnRyaWVzIGluIHdvcmtzcGFjZVxuICAgIC8vIGNsZWFyIHdvcmtzcGFjZSB3WzAuLnMtMV1cblxuICAgIGZvciAoayA9IDA7IGsgPCBzOyBrKyspIHtcbiAgICAgIHdba10gPSAtMTtcbiAgICB9IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG5cbiAgICB2YXIgY29sY291bnQgPSBbXTsgLy8gKG4pXG4gICAgLy8gQVQgPSBBJ1xuXG4gICAgdmFyIGF0ID0gdHJhbnNwb3NlKGEpOyAvLyBhdCBhcnJheXNcblxuICAgIHZhciB0aW5kZXggPSBhdC5faW5kZXg7XG4gICAgdmFyIHRwdHIgPSBhdC5fcHRyOyAvLyBmaW5kIHdbZmlyc3QgKyBqXVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgaiA9IHBvc3Rba107IC8vIGNvbGNvdW50W2pdPTEgaWYgaiBpcyBhIGxlYWZcblxuICAgICAgY29sY291bnRbal0gPSB3W2ZpcnN0ICsgal0gPT09IC0xID8gMSA6IDA7XG5cbiAgICAgIGZvciAoOyBqICE9PSAtMSAmJiB3W2ZpcnN0ICsgal0gPT09IC0xOyBqID0gcGFyZW50W2pdKSB7XG4gICAgICAgIHdbZmlyc3QgKyBqXSA9IGs7XG4gICAgICB9XG4gICAgfSAvLyBpbml0aWFsaXplIGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKGF0YSkge1xuICAgICAgLy8gaW52ZXJ0IHBvc3RcbiAgICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgd1twb3N0W2tdXSA9IGs7XG4gICAgICB9IC8vIGxvb3Agcm93cyAoY29sdW1ucyBpbiBBVClcblxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIC8vIHZhbHVlcyBpbiBjb2x1bW4gaSBvZiBBVFxuICAgICAgICBmb3IgKGsgPSBuLCBwMCA9IHRwdHJbaV0sIHAxID0gdHB0cltpICsgMV0sIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICBrID0gTWF0aC5taW4oaywgd1t0aW5kZXhbcF1dKTtcbiAgICAgICAgfSAvLyBwbGFjZSByb3cgaSBpbiBsaW5rZWQgbGlzdCBrXG5cblxuICAgICAgICB3W25leHQgKyBpXSA9IHdbaGVhZCArIGtdO1xuICAgICAgICB3W2hlYWQgKyBrXSA9IGk7XG4gICAgICB9XG4gICAgfSAvLyBlYWNoIG5vZGUgaW4gaXRzIG93biBzZXRcblxuXG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgd1thbmNlc3RvciArIGldID0gaTtcbiAgICB9XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyBqIGlzIHRoZSBrdGggbm9kZSBpbiBwb3N0b3JkZXJlZCBldHJlZVxuICAgICAgaiA9IHBvc3Rba107IC8vIGNoZWNrIGogaXMgbm90IGEgcm9vdFxuXG4gICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dLS07XG4gICAgICB9IC8vIEo9aiBmb3IgTEwnPUEgY2FzZVxuXG5cbiAgICAgIGZvciAoSiA9IGF0YSA/IHdbaGVhZCArIGtdIDogajsgSiAhPT0gLTE7IEogPSBhdGEgPyB3W25leHQgKyBKXSA6IC0xKSB7XG4gICAgICAgIGZvciAocCA9IHRwdHJbSl07IHAgPCB0cHRyW0ogKyAxXTsgcCsrKSB7XG4gICAgICAgICAgaSA9IHRpbmRleFtwXTtcbiAgICAgICAgICB2YXIgciA9ICgwLCBfY3NMZWFmLmNzTGVhZikoaSwgaiwgdywgZmlyc3QsIG1heGZpcnN0LCBwcmV2bGVhZiwgYW5jZXN0b3IpOyAvLyBjaGVjayBBKGksaikgaXMgaW4gc2tlbGV0b25cblxuICAgICAgICAgIGlmIChyLmpsZWFmID49IDEpIHtcbiAgICAgICAgICAgIGNvbGNvdW50W2pdKys7XG4gICAgICAgICAgfSAvLyBjaGVjayBhY2NvdW50IGZvciBvdmVybGFwIGluIHFcblxuXG4gICAgICAgICAgaWYgKHIuamxlYWYgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbGNvdW50W3IucV0tLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudFtqXSAhPT0gLTEpIHtcbiAgICAgICAgd1thbmNlc3RvciArIGpdID0gcGFyZW50W2pdO1xuICAgICAgfVxuICAgIH0gLy8gc3VtIHVwIGNvbGNvdW50J3Mgb2YgZWFjaCBjaGlsZFxuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dICs9IGNvbGNvdW50W2pdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb2xjb3VudDtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0NvdW50cyA9IGNyZWF0ZUNzQ291bnRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0RmcyA9IGNzRGZzO1xuXG52YXIgX2NzTWFya2VkID0gcmVxdWlyZShcIi4vY3NNYXJrZWRcIik7XG5cbnZhciBfY3NNYXJrID0gcmVxdWlyZShcIi4vY3NNYXJrXCIpO1xuXG52YXIgX2NzVW5mbGlwID0gcmVxdWlyZShcIi4vY3NVbmZsaXBcIik7XG5cbi8qKlxuICogRGVwdGgtZmlyc3Qgc2VhcmNoIGNvbXB1dGVzIHRoZSBub256ZXJvIHBhdHRlcm4geGkgb2YgdGhlIGRpcmVjdGVkIGdyYXBoIEcgKE1hdHJpeCkgc3RhcnRpbmdcbiAqIGF0IG5vZGVzIGluIEIgKHNlZSBjc1JlYWNoKCkpLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaiAgICAgICAgICAgICAgIFRoZSBzdGFydGluZyBub2RlIGZvciB0aGUgREZTIGFsZ29yaXRobVxuICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4IHRvIHNlYXJjaCwgcHRyIGFycmF5IG1vZGlmaWVkLCB0aGVuIHJlc3RvcmVkXG4gKiBAcGFyYW0ge051bWJlcn0gIHRvcCAgICAgICAgICAgICBTdGFydCBpbmRleCBpbiBzdGFjayB4aVt0b3AuLm4tMV1cbiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEJcbiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yLCBtdXN0IGJlIG51bGwgZm9yIEwgKiB4ID0gYlxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIE5ldyB2YWx1ZSBvZiB0b3BcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc0RmcyhqLCBnLCB0b3AsIHhpLCBwaW52KSB7XG4gIC8vIGcgYXJyYXlzXG4gIHZhciBpbmRleCA9IGcuX2luZGV4O1xuICB2YXIgcHRyID0gZy5fcHRyO1xuICB2YXIgc2l6ZSA9IGcuX3NpemU7IC8vIGNvbHVtbnNcblxuICB2YXIgbiA9IHNpemVbMV07IC8vIHZhcnNcblxuICB2YXIgaSwgcCwgcDI7IC8vIGluaXRpYWxpemUgaGVhZFxuXG4gIHZhciBoZWFkID0gMDsgLy8gaW5pdGlhbGl6ZSB0aGUgcmVjdXJzaW9uIHN0YWNrXG5cbiAgeGlbMF0gPSBqOyAvLyBsb29wXG5cbiAgd2hpbGUgKGhlYWQgPj0gMCkge1xuICAgIC8vIGdldCBqIGZyb20gdGhlIHRvcCBvZiB0aGUgcmVjdXJzaW9uIHN0YWNrXG4gICAgaiA9IHhpW2hlYWRdOyAvLyBhcHBseSBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBqbmV3ID0gcGludiA/IHBpbnZbal0gOiBqOyAvLyBjaGVjayBub2RlIGogaXMgbWFya2VkXG5cbiAgICBpZiAoISgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKHB0ciwgaikpIHtcbiAgICAgIC8vIG1hcmsgbm9kZSBqIGFzIHZpc2l0ZWRcbiAgICAgICgwLCBfY3NNYXJrLmNzTWFyaykocHRyLCBqKTsgLy8gdXBkYXRlIHN0YWNrIChsYXN0IG4gZW50cmllcyBpbiB4aSlcblxuICAgICAgeGlbbiArIGhlYWRdID0gam5ldyA8IDAgPyAwIDogKDAsIF9jc1VuZmxpcC5jc1VuZmxpcCkocHRyW2puZXddKTtcbiAgICB9IC8vIG5vZGUgaiBkb25lIGlmIG5vIHVudmlzaXRlZCBuZWlnaGJvcnNcblxuXG4gICAgdmFyIGRvbmUgPSAxOyAvLyBleGFtaW5lIGFsbCBuZWlnaGJvcnMgb2Ygaiwgc3RhY2sgKGxhc3QgbiBlbnRyaWVzIGluIHhpKVxuXG4gICAgZm9yIChwID0geGlbbiArIGhlYWRdLCBwMiA9IGpuZXcgPCAwID8gMCA6ICgwLCBfY3NVbmZsaXAuY3NVbmZsaXApKHB0cltqbmV3ICsgMV0pOyBwIDwgcDI7IHArKykge1xuICAgICAgLy8gY29uc2lkZXIgbmVpZ2hib3Igbm9kZSBpXG4gICAgICBpID0gaW5kZXhbcF07IC8vIGNoZWNrIHdlIGhhdmUgdmlzaXRlZCBub2RlIGksIHNraXAgaXRcblxuICAgICAgaWYgKCgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKHB0ciwgaSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHBhdXNlIGRlcHRoLWZpcnN0IHNlYXJjaCBvZiBub2RlIGosIHVwZGF0ZSBzdGFjayAobGFzdCBuIGVudHJpZXMgaW4geGkpXG5cblxuICAgICAgeGlbbiArIGhlYWRdID0gcDsgLy8gc3RhcnQgZGZzIGF0IG5vZGUgaVxuXG4gICAgICB4aVsrK2hlYWRdID0gaTsgLy8gbm9kZSBqIGlzIG5vdCBkb25lXG5cbiAgICAgIGRvbmUgPSAwOyAvLyBicmVhaywgdG8gc3RhcnQgZGZzKGkpXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gLy8gY2hlY2sgZGVwdGgtZmlyc3Qgc2VhcmNoIGF0IG5vZGUgaiBpcyBkb25lXG5cblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyByZW1vdmUgaiBmcm9tIHRoZSByZWN1cnNpb24gc3RhY2tcbiAgICAgIGhlYWQtLTsgLy8gYW5kIHBsYWNlIGluIHRoZSBvdXRwdXQgc3RhY2tcblxuICAgICAgeGlbLS10b3BdID0gajtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9wO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0V0cmVlID0gY3NFdHJlZTtcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgZWxpbWluYXRpb24gdHJlZSBvZiBNYXRyaXggQSAodXNpbmcgdHJpdShBKSkgb3IgdGhlXG4gKiBlbGltaW5hdGlvbiB0cmVlIG9mIEEnQSB3aXRob3V0IGZvcm1pbmcgQSdBLlxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgYSAgICAgICAgICAgICAgIFRoZSBBIE1hdHJpeFxuICogQHBhcmFtIHtib29sZWFufSBhdGEgICAgICAgICAgICAgQSB2YWx1ZSBvZiB0cnVlIHRoZSBmdW5jdGlvbiBjb21wdXRlcyB0aGUgZXRyZWUgb2YgQSdBXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NFdHJlZShhLCBhdGEpIHtcbiAgLy8gY2hlY2sgaW5wdXRzXG4gIGlmICghYSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGEgYXJyYXlzXG5cblxuICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gIHZhciBhcHRyID0gYS5fcHRyO1xuICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1uc1xuXG4gIHZhciBtID0gYXNpemVbMF07XG4gIHZhciBuID0gYXNpemVbMV07IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG4gIHZhciBwYXJlbnQgPSBbXTsgLy8gKG4pXG4gIC8vIGFsbG9jYXRlIHdvcmtzcGFjZVxuXG4gIHZhciB3ID0gW107IC8vIChuICsgKGF0YSA/IG0gOiAwKSlcblxuICB2YXIgYW5jZXN0b3IgPSAwOyAvLyBmaXJzdCBuIGVudHJpZXMgaW4gd1xuXG4gIHZhciBwcmV2ID0gbjsgLy8gbGFzdCBtIGVudHJpZXMgKGF0YSA9IHRydWUpXG5cbiAgdmFyIGksIGluZXh0OyAvLyBjaGVjayB3ZSBhcmUgY2FsY3VsYXRpbmcgQSdBXG5cbiAgaWYgKGF0YSkge1xuICAgIC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgd1twcmV2ICsgaV0gPSAtMTtcbiAgICB9XG4gIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgIC8vIG5vZGUgayBoYXMgbm8gcGFyZW50IHlldFxuICAgIHBhcmVudFtrXSA9IC0xOyAvLyBub3IgZG9lcyBrIGhhdmUgYW4gYW5jZXN0b3JcblxuICAgIHdbYW5jZXN0b3IgKyBrXSA9IC0xOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGtcblxuICAgIGZvciAodmFyIHAwID0gYXB0cltrXSwgcDEgPSBhcHRyW2sgKyAxXSwgcCA9IHAwOyBwIDwgcDE7IHArKykge1xuICAgICAgLy8gcm93XG4gICAgICB2YXIgciA9IGFpbmRleFtwXTsgLy8gbm9kZVxuXG4gICAgICBpID0gYXRhID8gd1twcmV2ICsgcl0gOiByOyAvLyB0cmF2ZXJzZSBmcm9tIGkgdG8ga1xuXG4gICAgICBmb3IgKDsgaSAhPT0gLTEgJiYgaSA8IGs7IGkgPSBpbmV4dCkge1xuICAgICAgICAvLyBpbmV4dCA9IGFuY2VzdG9yIG9mIGlcbiAgICAgICAgaW5leHQgPSB3W2FuY2VzdG9yICsgaV07IC8vIHBhdGggY29tcHJlc3Npb25cblxuICAgICAgICB3W2FuY2VzdG9yICsgaV0gPSBrOyAvLyBjaGVjayBubyBhbmMuLCBwYXJlbnQgaXMga1xuXG4gICAgICAgIGlmIChpbmV4dCA9PT0gLTEpIHtcbiAgICAgICAgICBwYXJlbnRbaV0gPSBrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhdGEpIHtcbiAgICAgICAgd1twcmV2ICsgcl0gPSBrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzRmtlZXAgPSBjc0ZrZWVwO1xuXG4vKipcbiAqIEtlZXBzIGVudHJpZXMgaW4gdGhlIG1hdHJpeCB3aGVuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHJlbW92ZXMgdGhlIGVudHJ5IG90aGVyd2lzZVxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgIFRoZSBzcGFyc2UgbWF0cml4XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24sIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJnczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgZW50cnkgcm93XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIGVudHJ5IGNvbHVtblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBlbnRyeSB2YWx1ZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7YW55fSAgICAgIG90aGVyICAgICAgICAgIFRoZSBzdGF0ZVxuICpcbiAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiB0aGUgbWF0cml4XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NGa2VlcChhLCBjYWxsYmFjaywgb3RoZXIpIHtcbiAgLy8gYSBhcnJheXNcbiAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIGNvbHVtbnNcblxuICB2YXIgbiA9IGFzaXplWzFdOyAvLyBub256ZXJvIGl0ZW1zXG5cbiAgdmFyIG56ID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBnZXQgY3VycmVudCBsb2NhdGlvbiBvZiBjb2wgalxuICAgIHZhciBwID0gYXB0cltqXTsgLy8gcmVjb3JkIG5ldyBsb2NhdGlvbiBvZiBjb2wgalxuXG4gICAgYXB0cltqXSA9IG56O1xuXG4gICAgZm9yICg7IHAgPCBhcHRyW2ogKyAxXTsgcCsrKSB7XG4gICAgICAvLyBjaGVjayB3ZSBuZWVkIHRvIGtlZXAgdGhpcyBpdGVtXG4gICAgICBpZiAoY2FsbGJhY2soYWluZGV4W3BdLCBqLCBhdmFsdWVzID8gYXZhbHVlc1twXSA6IDEsIG90aGVyKSkge1xuICAgICAgICAvLyBrZWVwIEEoaSxqKVxuICAgICAgICBhaW5kZXhbbnpdID0gYWluZGV4W3BdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG9ubHkpXG5cbiAgICAgICAgaWYgKGF2YWx1ZXMpIHtcbiAgICAgICAgICBhdmFsdWVzW256XSA9IGF2YWx1ZXNbcF07XG4gICAgICAgIH0gLy8gaW5jcmVtZW50IG5vbnplcm8gaXRlbXNcblxuXG4gICAgICAgIG56Kys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGZpbmFsaXplIEFcblxuXG4gIGFwdHJbbl0gPSBuejsgLy8gdHJpbSBhcnJheXNcblxuICBhaW5kZXguc3BsaWNlKG56LCBhaW5kZXgubGVuZ3RoIC0gbnopOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG9ubHkpXG5cbiAgaWYgKGF2YWx1ZXMpIHtcbiAgICBhdmFsdWVzLnNwbGljZShueiwgYXZhbHVlcy5sZW5ndGggLSBueik7XG4gIH0gLy8gcmV0dXJuIG51bWJlciBvZiBub256ZXJvIGl0ZW1zXG5cblxuICByZXR1cm4gbno7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzRmxpcCA9IGNzRmxpcDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIFwiZmxpcHNcIiBpdHMgaW5wdXQgYWJvdXQgdGhlIGludGVnZXIgLTEuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICBpICAgICAgICAgICAgICAgVGhlIHZhbHVlIHRvIGZsaXBcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc0ZsaXAoaSkge1xuICAvLyBmbGlwIHRoZSB2YWx1ZVxuICByZXR1cm4gLWkgLSAyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0lwdmVjID0gY3NJcHZlYztcblxuLyoqXG4gKiBQZXJtdXRlcyBhIHZlY3RvcjsgeCA9IFAnYi4gSW4gTUFUTEFCIG5vdGF0aW9uLCB4KHApPWIuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcCAgICAgICAgICAgVGhlIHBlcm11dGF0aW9uIHZlY3RvciBvZiBsZW5ndGggbi4gbnVsbCB2YWx1ZSBkZW5vdGVzIGlkZW50aXR5XG4gKiBAcGFyYW0ge0FycmF5fSBiICAgICAgICAgICBUaGUgaW5wdXQgdmVjdG9yXG4gKlxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgVGhlIG91dHB1dCB2ZWN0b3IgeCA9IFAnYlxuICovXG5mdW5jdGlvbiBjc0lwdmVjKHAsIGIpIHtcbiAgLy8gdmFyc1xuICB2YXIgaztcbiAgdmFyIG4gPSBiLmxlbmd0aDtcbiAgdmFyIHggPSBbXTsgLy8gY2hlY2sgcGVybXV0YXRpb24gdmVjdG9yIHdhcyBwcm92aWRlZCwgcCA9IG51bGwgZGVub3RlcyBpZGVudGl0eVxuXG4gIGlmIChwKSB7XG4gICAgLy8gbG9vcCB2ZWN0b3JcbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyBhcHBseSBwZXJtdXRhdGlvblxuICAgICAgeFtwW2tdXSA9IGJba107XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGxvb3AgdmVjdG9yXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8geFtpXSA9IGJbaV1cbiAgICAgIHhba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB4O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0xlYWYgPSBjc0xlYWY7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGogaXMgYSBsZWFmIG9mIHRoZSBpdGggcm93IHN1YnRyZWUuXG4gKiBDb25zaWRlciBBKGksaiksIG5vZGUgaiBpbiBpdGggcm93IHN1YnRyZWUgYW5kIHJldHVybiBsY2EoanByZXYsailcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgaXRoIHJvdyBzdWJ0cmVlXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgbm9kZSB0byB0ZXN0XG4gKiBAcGFyYW0ge0FycmF5fSAgIHcgICAgICAgICAgICAgICBUaGUgd29ya3NwYWNlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGZpcnN0ICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgZmlyc3QgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgbWF4Zmlyc3QgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBtYXhmaXJzdCBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9ICBwcmV2bGVhZiAgICAgICAgVGhlIGluZGV4IG9mZnNldCB3aXRoaW4gdGhlIHdvcmtzcGFjZSBmb3IgdGhlIHByZXZsZWFmIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGFuY2VzdG9yICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgYW5jZXN0b3IgYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NMZWFmKGksIGosIHcsIGZpcnN0LCBtYXhmaXJzdCwgcHJldmxlYWYsIGFuY2VzdG9yKSB7XG4gIHZhciBzLCBzcGFyZW50OyAvLyBvdXIgcmVzdWx0XG5cbiAgdmFyIGpsZWFmID0gMDtcbiAgdmFyIHE7IC8vIGNoZWNrIGogaXMgYSBsZWFmXG5cbiAgaWYgKGkgPD0gaiB8fCB3W2ZpcnN0ICsgal0gPD0gd1ttYXhmaXJzdCArIGldKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IC8vIHVwZGF0ZSBtYXggZmlyc3Rbal0gc2VlbiBzbyBmYXJcblxuXG4gIHdbbWF4Zmlyc3QgKyBpXSA9IHdbZmlyc3QgKyBqXTsgLy8ganByZXYgPSBwcmV2aW91cyBsZWFmIG9mIGl0aCBzdWJ0cmVlXG5cbiAgdmFyIGpwcmV2ID0gd1twcmV2bGVhZiArIGldO1xuICB3W3ByZXZsZWFmICsgaV0gPSBqOyAvLyBjaGVjayBqIGlzIGZpcnN0IG9yIHN1YnNlcXVlbnQgbGVhZlxuXG4gIGlmIChqcHJldiA9PT0gLTEpIHtcbiAgICAvLyAxc3QgbGVhZiwgcSA9IHJvb3Qgb2YgaXRoIHN1YnRyZWVcbiAgICBqbGVhZiA9IDE7XG4gICAgcSA9IGk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXBkYXRlIGpsZWFmXG4gICAgamxlYWYgPSAyOyAvLyBxID0gbGVhc3QgY29tbW9uIGFuY2VzdGVyIChqcHJldixqKVxuXG4gICAgZm9yIChxID0ganByZXY7IHEgIT09IHdbYW5jZXN0b3IgKyBxXTsgcSA9IHdbYW5jZXN0b3IgKyBxXSkge1xuICAgICAgO1xuICAgIH1cblxuICAgIGZvciAocyA9IGpwcmV2OyBzICE9PSBxOyBzID0gc3BhcmVudCkge1xuICAgICAgLy8gcGF0aCBjb21wcmVzc2lvblxuICAgICAgc3BhcmVudCA9IHdbYW5jZXN0b3IgKyBzXTtcbiAgICAgIHdbYW5jZXN0b3IgKyBzXSA9IHE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBqbGVhZjogamxlYWYsXG4gICAgcTogcVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0x1ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc1Nwc29sdmUgPSByZXF1aXJlKFwiLi9jc1Nwc29sdmVcIik7XG5cbnZhciBuYW1lID0gJ2NzTHUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnYWJzJywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseScsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlQ3NMdSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGNzU3Bzb2x2ZSA9ICgwLCBfY3NTcHNvbHZlLmNyZWF0ZUNzU3Bzb2x2ZSkoe1xuICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3RcbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgbnVtZXJpYyBMVSBmYWN0b3JpemF0aW9uIG9mIHRoZSBzcGFyc2UgbWF0cml4IEEuIEltcGxlbWVudHMgYSBMZWZ0LWxvb2tpbmcgTFUgZmFjdG9yaXphdGlvblxuICAgKiBhbGdvcml0aG0gdGhhdCBjb21wdXRlcyBMIGFuZCBVIG9uZSBjb2x1bW4gYXQgYSB0dW1lLiBBdCB0aGUga3RoIHN0ZXAsIGl0IGFjY2VzcyBjb2x1bW5zIDEgdG8gay0xIG9mIExcbiAgICogYW5kIGNvbHVtbiBrIG9mIEEuIEdpdmVuIHRoZSBmaWxsLXJlZHVjaW5nIGNvbHVtbiBvcmRlcmluZyBxIChzZWUgcGFyYW1ldGVyIHMpIGNvbXB1dGVzIEwsIFUgYW5kIHBpbnYgc29cbiAgICogTCAqIFUgPSBBKHAsIHEpLCB3aGVyZSBwIGlzIHRoZSBpbnZlcnNlIG9mIHBpbnYuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgbSAgICAgICAgICAgICAgIFRoZSBBIE1hdHJpeCB0byBmYWN0b3JpemVcbiAgICogQHBhcmFtIHtPYmplY3R9ICBzICAgICAgICAgICAgICAgVGhlIHN5bWJvbGljIGFuYWx5c2lzIGZyb20gY3NTcXIoKS4gUHJvdmlkZXMgdGhlIGZpbGwtcmVkdWNpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIG9yZGVyaW5nIHFcbiAgICogQHBhcmFtIHtOdW1iZXJ9ICB0b2wgICAgICAgICAgICAgUGFydGlhbCBwaXZvdGluZyB0aHJlc2hvbGQgKDEgZm9yIHBhcnRpYWwgcGl2b3RpbmcpXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIFRoZSBudW1lcmljIExVIGZhY3Rvcml6YXRpb24gb2YgQSBvciBudWxsXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBjc0x1KG0sIHMsIHRvbCkge1xuICAgIC8vIHZhbGlkYXRlIGlucHV0XG4gICAgaWYgKCFtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIG0gYXJyYXlzXG5cblxuICAgIHZhciBzaXplID0gbS5fc2l6ZTsgLy8gY29sdW1uc1xuXG4gICAgdmFyIG4gPSBzaXplWzFdOyAvLyBzeW1ib2xpYyBhbmFseXNpcyByZXN1bHRcblxuICAgIHZhciBxO1xuICAgIHZhciBsbnogPSAxMDA7XG4gICAgdmFyIHVueiA9IDEwMDsgLy8gdXBkYXRlIHN5bWJvbGljIGFuYWx5c2lzIHBhcmFtZXRlcnNcblxuICAgIGlmIChzKSB7XG4gICAgICBxID0gcy5xO1xuICAgICAgbG56ID0gcy5sbnogfHwgbG56O1xuICAgICAgdW56ID0gcy51bnogfHwgdW56O1xuICAgIH0gLy8gTCBhcnJheXNcblxuXG4gICAgdmFyIGx2YWx1ZXMgPSBbXTsgLy8gKGxueilcblxuICAgIHZhciBsaW5kZXggPSBbXTsgLy8gKGxueilcblxuICAgIHZhciBscHRyID0gW107IC8vIChuICsgMSlcbiAgICAvLyBMXG5cbiAgICB2YXIgTCA9IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBsdmFsdWVzLFxuICAgICAgaW5kZXg6IGxpbmRleCxcbiAgICAgIHB0cjogbHB0cixcbiAgICAgIHNpemU6IFtuLCBuXVxuICAgIH0pOyAvLyBVIGFycmF5c1xuXG4gICAgdmFyIHV2YWx1ZXMgPSBbXTsgLy8gKHVueilcblxuICAgIHZhciB1aW5kZXggPSBbXTsgLy8gKHVueilcblxuICAgIHZhciB1cHRyID0gW107IC8vIChuICsgMSlcbiAgICAvLyBVXG5cbiAgICB2YXIgVSA9IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB1dmFsdWVzLFxuICAgICAgaW5kZXg6IHVpbmRleCxcbiAgICAgIHB0cjogdXB0cixcbiAgICAgIHNpemU6IFtuLCBuXVxuICAgIH0pOyAvLyBpbnZlcnNlIG9mIHBlcm11dGF0aW9uIHZlY3RvclxuXG4gICAgdmFyIHBpbnYgPSBbXTsgLy8gKG4pXG4gICAgLy8gdmFyc1xuXG4gICAgdmFyIGksIHA7IC8vIGFsbG9jYXRlIGFycmF5c1xuXG4gICAgdmFyIHggPSBbXTsgLy8gKG4pXG5cbiAgICB2YXIgeGkgPSBbXTsgLy8gKDIgKiBuKVxuICAgIC8vIGluaXRpYWxpemUgdmFyaWFibGVzXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBjbGVhciB3b3Jrc3BhY2VcbiAgICAgIHhbaV0gPSAwOyAvLyBubyByb3dzIHBpdm90YWwgeWV0XG5cbiAgICAgIHBpbnZbaV0gPSAtMTsgLy8gbm8gY29scyBvZiBMIHlldFxuXG4gICAgICBscHRyW2kgKyAxXSA9IDA7XG4gICAgfSAvLyByZXNldCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiBMIGFuZCBVXG5cblxuICAgIGxueiA9IDA7XG4gICAgdW56ID0gMDsgLy8gY29tcHV0ZSBMKDosaykgYW5kIFUoOixrKVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGxwdHJba10gPSBsbno7XG4gICAgICB1cHRyW2tdID0gdW56OyAvLyBhcHBseSBjb2x1bW4gcGVybXV0YXRpb25zIGlmIG5lZWRlZFxuXG4gICAgICB2YXIgY29sID0gcSA/IHFba10gOiBrOyAvLyBzb2x2ZSB0cmlhbmd1bGFyIHN5c3RlbSwgeCA9IExcXEEoOixjb2wpXG5cbiAgICAgIHZhciB0b3AgPSBjc1Nwc29sdmUoTCwgbSwgY29sLCB4aSwgeCwgcGludiwgMSk7IC8vIGZpbmQgcGl2b3RcblxuICAgICAgdmFyIGlwaXYgPSAtMTtcbiAgICAgIHZhciBhID0gLTE7IC8vIGxvb3AgeGlbXSBmcm9tIHRvcCAtPiBuXG5cbiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgICAvLyB4W2ldIGlzIG5vbnplcm9cbiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayByb3cgaSBpcyBub3QgeWV0IHBpdm90YWxcblxuICAgICAgICBpZiAocGludltpXSA8IDApIHtcbiAgICAgICAgICAvLyBhYnNvbHV0ZSB2YWx1ZSBvZiB4W2ldXG4gICAgICAgICAgdmFyIHhhYnMgPSBhYnMoeFtpXSk7IC8vIGNoZWNrIGFic291bHRlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdCB2YWx1ZVxuXG4gICAgICAgICAgaWYgKGxhcmdlcih4YWJzLCBhKSkge1xuICAgICAgICAgICAgLy8gbGFyZ2VzdCBwaXZvdCBjYW5kaWRhdGUgc28gZmFyXG4gICAgICAgICAgICBhID0geGFicztcbiAgICAgICAgICAgIGlwaXYgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB4KGkpIGlzIHRoZSBlbnRyeSBVKHBpbnZbaV0saylcbiAgICAgICAgICB1aW5kZXhbdW56XSA9IHBpbnZbaV07XG4gICAgICAgICAgdXZhbHVlc1t1bnorK10gPSB4W2ldO1xuICAgICAgICB9XG4gICAgICB9IC8vIHZhbGlkYXRlIHdlIGZvdW5kIGEgdmFsaWQgcGl2b3RcblxuXG4gICAgICBpZiAoaXBpdiA9PT0gLTEgfHwgYSA8PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyB1cGRhdGUgYWN0dWFsIHBpdm90IGNvbHVtbiwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGRpYWdvbmFsIHZhbHVlXG5cblxuICAgICAgaWYgKHBpbnZbY29sXSA8IDAgJiYgbGFyZ2VyRXEoYWJzKHhbY29sXSksIG11bHRpcGx5KGEsIHRvbCkpKSB7XG4gICAgICAgIGlwaXYgPSBjb2w7XG4gICAgICB9IC8vIHRoZSBjaG9zZW4gcGl2b3RcblxuXG4gICAgICB2YXIgcGl2b3QgPSB4W2lwaXZdOyAvLyBsYXN0IGVudHJ5IGluIFUoOixrKSBpcyBVKGssaylcblxuICAgICAgdWluZGV4W3Vuel0gPSBrO1xuICAgICAgdXZhbHVlc1t1bnorK10gPSBwaXZvdDsgLy8gaXBpdiBpcyB0aGUga3RoIHBpdm90IHJvd1xuXG4gICAgICBwaW52W2lwaXZdID0gazsgLy8gZmlyc3QgZW50cnkgaW4gTCg6LGspIGlzIEwoayxrKSA9IDFcblxuICAgICAgbGluZGV4W2xuel0gPSBpcGl2O1xuICAgICAgbHZhbHVlc1tsbnorK10gPSAxOyAvLyBMKGsrMTpuLGspID0geCAvIHBpdm90XG5cbiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayB4KGkpIGlzIGFuIGVudHJ5IGluIEwoOixrKVxuXG4gICAgICAgIGlmIChwaW52W2ldIDwgMCkge1xuICAgICAgICAgIC8vIHNhdmUgdW5wZXJtdXRlZCByb3cgaW4gTFxuICAgICAgICAgIGxpbmRleFtsbnpdID0gaTsgLy8gc2NhbGUgcGl2b3QgY29sdW1uXG5cbiAgICAgICAgICBsdmFsdWVzW2xueisrXSA9IGRpdmlkZVNjYWxhcih4W2ldLCBwaXZvdCk7XG4gICAgICAgIH0gLy8geFswLi5uLTFdID0gMCBmb3IgbmV4dCBrXG5cblxuICAgICAgICB4W2ldID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgbHB0cltuXSA9IGxuejtcbiAgICB1cHRyW25dID0gdW56OyAvLyBmaXggcm93IGluZGljZXMgb2YgTCBmb3IgZmluYWwgcGludlxuXG4gICAgZm9yIChwID0gMDsgcCA8IGxuejsgcCsrKSB7XG4gICAgICBsaW5kZXhbcF0gPSBwaW52W2xpbmRleFtwXV07XG4gICAgfSAvLyB0cmltIGFycmF5c1xuXG5cbiAgICBsdmFsdWVzLnNwbGljZShsbnosIGx2YWx1ZXMubGVuZ3RoIC0gbG56KTtcbiAgICBsaW5kZXguc3BsaWNlKGxueiwgbGluZGV4Lmxlbmd0aCAtIGxueik7XG4gICAgdXZhbHVlcy5zcGxpY2UodW56LCB1dmFsdWVzLmxlbmd0aCAtIHVueik7XG4gICAgdWluZGV4LnNwbGljZSh1bnosIHVpbmRleC5sZW5ndGggLSB1bnopOyAvLyByZXR1cm4gTFUgZmFjdG9yXG5cbiAgICByZXR1cm4ge1xuICAgICAgTDogTCxcbiAgICAgIFU6IFUsXG4gICAgICBwaW52OiBwaW52XG4gICAgfTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0x1ID0gY3JlYXRlQ3NMdTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NNYXJrID0gY3NNYXJrO1xuXG52YXIgX2NzRmxpcCA9IHJlcXVpcmUoXCIuL2NzRmxpcFwiKTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgbm9kZSBhdCB3W2pdXG4gKlxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXhcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc01hcmsodywgaikge1xuICAvLyBtYXJrIHdbal1cbiAgd1tqXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkod1tqXSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzTWFya2VkID0gY3NNYXJrZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBub2RlIGF0IHdbal0gaXMgbWFya2VkXG4gKlxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXhcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc01hcmtlZCh3LCBqKSB7XG4gIC8vIGNoZWNrIG5vZGUgaXMgbWFya2VkXG4gIHJldHVybiB3W2pdIDwgMDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NQZXJtdXRlID0gY3NQZXJtdXRlO1xuXG4vKipcbiAqIFBlcm11dGVzIGEgc3BhcnNlIG1hdHJpeCBDID0gUCAqIEEgKiBRXG4gKlxuICogQHBhcmFtIHtTcGFyc2VNYXRyaXh9ICBhICAgICAgICAgVGhlIE1hdHJpeCBBXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgcm93IHBlcm11dGF0aW9uIHZlY3RvclxuICogQHBhcmFtIHtBcnJheX0gICBxICAgICAgICAgICAgICAgVGhlIGNvbHVtbiBwZXJtdXRhdGlvbiB2ZWN0b3JcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVzICAgICAgICAgIENyZWF0ZSBhIHBhdHRlcm4gbWF0cml4IChmYWxzZSksIHZhbHVlcyBhbmQgcGF0dGVybiBvdGhlcndpc2VcbiAqXG4gKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBDID0gUCAqIEEgKiBRLCBudWxsIG9uIGVycm9yXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NQZXJtdXRlKGEsIHBpbnYsIHEsIHZhbHVlcykge1xuICAvLyBhIGFycmF5c1xuICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gIHZhciBtID0gYXNpemVbMF07XG4gIHZhciBuID0gYXNpemVbMV07IC8vIGMgYXJyYXlzXG5cbiAgdmFyIGN2YWx1ZXMgPSB2YWx1ZXMgJiYgYS5fdmFsdWVzID8gW10gOiBudWxsO1xuICB2YXIgY2luZGV4ID0gW107IC8vIChhcHRyW25dKVxuXG4gIHZhciBjcHRyID0gW107IC8vIChuICsgMSlcbiAgLy8gaW5pdGlhbGl6ZSB2YXJzXG5cbiAgdmFyIG56ID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAvLyBjb2x1bW4gayBvZiBDIGlzIGNvbHVtbiBxW2tdIG9mIEFcbiAgICBjcHRyW2tdID0gbno7IC8vIGFwcGx5IGNvbHVtbiBwZXJtdXRhdGlvblxuXG4gICAgdmFyIGogPSBxID8gcVtrXSA6IGs7IC8vIGxvb3AgdmFsdWVzIGluIGNvbHVtbiBqIG9mIEFcblxuICAgIGZvciAodmFyIHQwID0gYXB0cltqXSwgdDEgPSBhcHRyW2ogKyAxXSwgdCA9IHQwOyB0IDwgdDE7IHQrKykge1xuICAgICAgLy8gcm93IGkgb2YgQSBpcyByb3cgcGludltpXSBvZiBDXG4gICAgICB2YXIgciA9IHBpbnYgPyBwaW52W2FpbmRleFt0XV0gOiBhaW5kZXhbdF07IC8vIGluZGV4XG5cbiAgICAgIGNpbmRleFtuel0gPSByOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHBvcHVsYXRlIHZhbHVlc1xuXG4gICAgICBpZiAoY3ZhbHVlcykge1xuICAgICAgICBjdmFsdWVzW256XSA9IGF2YWx1ZXNbdF07XG4gICAgICB9IC8vIGluY3JlbWVudCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50c1xuXG5cbiAgICAgIG56Kys7XG4gICAgfVxuICB9IC8vIGZpbmFsaXplIHRoZSBsYXN0IGNvbHVtbiBvZiBDXG5cblxuICBjcHRyW25dID0gbno7IC8vIHJldHVybiBDIG1hdHJpeFxuXG4gIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgIGluZGV4OiBjaW5kZXgsXG4gICAgcHRyOiBjcHRyLFxuICAgIHNpemU6IFttLCBuXSxcbiAgICBkYXRhdHlwZTogYWR0XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1Bvc3QgPSBjc1Bvc3Q7XG5cbnZhciBfY3NUZGZzID0gcmVxdWlyZShcIi4vY3NUZGZzXCIpO1xuXG4vKipcbiAqIFBvc3Qgb3JkZXIgYSB0cmVlIG9mIGZvcmVzdFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9ICAgcGFyZW50ICAgICAgICAgIFRoZSB0cmVlIG9yIGZvcmVzdFxuICogQHBhcmFtIHtOdW1iZXJ9ICBuICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNvbHVtbnNcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc1Bvc3QocGFyZW50LCBuKSB7XG4gIC8vIGNoZWNrIGlucHV0c1xuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIHZhcnNcblxuXG4gIHZhciBrID0gMDtcbiAgdmFyIGo7IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG4gIHZhciBwb3N0ID0gW107IC8vIChuKVxuICAvLyB3b3Jrc3BhY2UsIGhlYWQ6IGZpcnN0IG4gZW50cmllcywgbmV4dDogbmV4dCBuIGVudHJpZXMsIHN0YWNrOiBsYXN0IG4gZW50cmllc1xuXG4gIHZhciB3ID0gW107IC8vICgzICogbilcblxuICB2YXIgaGVhZCA9IDA7XG4gIHZhciBuZXh0ID0gbjtcbiAgdmFyIHN0YWNrID0gMiAqIG47IC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG5cbiAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgIC8vIGVtcHR5IGxpbmtlZCBsaXN0c1xuICAgIHdbaGVhZCArIGpdID0gLTE7XG4gIH0gLy8gdHJhdmVyc2Ugbm9kZXMgaW4gcmV2ZXJzZSBvcmRlclxuXG5cbiAgZm9yIChqID0gbiAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgLy8gY2hlY2sgaiBpcyBhIHJvb3RcbiAgICBpZiAocGFyZW50W2pdID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBhZGQgaiB0byBsaXN0IG9mIGl0cyBwYXJlbnRcblxuXG4gICAgd1tuZXh0ICsgal0gPSB3W2hlYWQgKyBwYXJlbnRbal1dO1xuICAgIHdbaGVhZCArIHBhcmVudFtqXV0gPSBqO1xuICB9IC8vIGxvb3Agbm9kZXNcblxuXG4gIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBza2lwIGogaWYgaXQgaXMgbm90IGEgcm9vdFxuICAgIGlmIChwYXJlbnRbal0gIT09IC0xKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIGRlcHRoLWZpcnN0IHNlYXJjaFxuXG5cbiAgICBrID0gKDAsIF9jc1RkZnMuY3NUZGZzKShqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjayk7XG4gIH1cblxuICByZXR1cm4gcG9zdDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NSZWFjaCA9IGNzUmVhY2g7XG5cbnZhciBfY3NNYXJrZWQgPSByZXF1aXJlKFwiLi9jc01hcmtlZFwiKTtcblxudmFyIF9jc01hcmsgPSByZXF1aXJlKFwiLi9jc01hcmtcIik7XG5cbnZhciBfY3NEZnMgPSByZXF1aXJlKFwiLi9jc0Rmc1wiKTtcblxuLyoqXG4gKiBUaGUgY3NSZWFjaCBmdW5jdGlvbiBjb21wdXRlcyBYID0gUmVhY2goQiksIHdoZXJlIEIgaXMgdGhlIG5vbnplcm8gcGF0dGVybiBvZiB0aGUgbi1ieS0xXG4gKiBzcGFyc2UgY29sdW1uIG9mIHZlY3RvciBiLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2V0IG9mIG5vZGVzIHJlYWNoYWJsZSBmcm9tIGFueSBub2RlIGluIEIuIFRoZVxuICogbm9uemVybyBwYXR0ZXJuIHhpIG9mIHRoZSBzb2x1dGlvbiB4IHRvIHRoZSBzcGFyc2UgbGluZWFyIHN5c3RlbSBMeD1iIGlzIGdpdmVuIGJ5IFg9UmVhY2goQikuXG4gKlxuICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4XG4gKiBAcGFyYW0ge01hdHJpeH0gIGIgICAgICAgICAgICAgICBUaGUgQiBtYXRyaXhcbiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEJcbiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGZvciB0aGUgbm9uemVybyBwYXR0ZXJuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NSZWFjaChnLCBiLCBrLCB4aSwgcGludikge1xuICAvLyBnIGFycmF5c1xuICB2YXIgZ3B0ciA9IGcuX3B0cjtcbiAgdmFyIGdzaXplID0gZy5fc2l6ZTsgLy8gYiBhcnJheXNcblxuICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gIHZhciBicHRyID0gYi5fcHRyOyAvLyBjb2x1bW5zXG5cbiAgdmFyIG4gPSBnc2l6ZVsxXTsgLy8gdmFyc1xuXG4gIHZhciBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgdG9wXG5cbiAgdmFyIHRvcCA9IG47IC8vIGxvb3AgY29sdW1uIGluZGVjZXMgaW4gQlxuXG4gIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgLy8gbm9kZSBpXG4gICAgdmFyIGkgPSBiaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaSBpcyBtYXJrZWRcblxuICAgIGlmICghKDAsIF9jc01hcmtlZC5jc01hcmtlZCkoZ3B0ciwgaSkpIHtcbiAgICAgIC8vIHN0YXJ0IGEgZGZzIGF0IHVubWFya2VkIG5vZGUgaVxuICAgICAgdG9wID0gKDAsIF9jc0Rmcy5jc0RmcykoaSwgZywgdG9wLCB4aSwgcGludik7XG4gICAgfVxuICB9IC8vIGxvb3AgY29sdW1ucyBmcm9tIHRvcCAtPiBuIC0gMVxuXG5cbiAgZm9yIChwID0gdG9wOyBwIDwgbjsgcCsrKSB7XG4gICAgLy8gcmVzdG9yZSBHXG4gICAgKDAsIF9jc01hcmsuY3NNYXJrKShncHRyLCB4aVtwXSk7XG4gIH1cblxuICByZXR1cm4gdG9wO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1Nwc29sdmUgPSB2b2lkIDA7XG5cbnZhciBfY3NSZWFjaCA9IHJlcXVpcmUoXCIuL2NzUmVhY2hcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjc1Nwc29sdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5JywgJ3N1YnRyYWN0J107XG52YXIgY3JlYXRlQ3NTcHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gY3NTcHNvbHZlKCkgY29tcHV0ZXMgdGhlIHNvbHV0aW9uIHRvIEcgKiB4ID0gYmssIHdoZXJlIGJrIGlzIHRoZVxuICAgKiBrdGggY29sdW1uIG9mIEIuIFdoZW4gbG8gaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgRyA9IEwgaXMgbG93ZXIgdHJpYW5ndWxhciB3aXRoIHRoZVxuICAgKiBkaWFnb25hbCBlbnRyeSBhcyB0aGUgZmlyc3QgZW50cnkgaW4gZWFjaCBjb2x1bW4uIFdoZW4gbG8gaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgRyA9IFVcbiAgICogaXMgdXBwZXIgdHJpYW5ndWxhciB3aXRoIHRoZSBkaWFnb25hbCBlbnRyeSBhcyB0aGUgbGFzdCBlbnRyeSBpbiBlYWNoIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4fSAgYiAgICAgICAgICAgICAgIFRoZSBCIG1hdHJpeFxuICAgKiBAcGFyYW0ge051bWJlcn0gIGsgICAgICAgICAgICAgICBUaGUga3RoIGNvbHVtbiBpbiBCXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbiBlbnRyaWVzIGlzIHRoZSBub256ZXJvIHBhdHRlcm4sIHRoZSBsYXN0IG4gZW50cmllcyBpcyB0aGUgc3RhY2tcbiAgICogQHBhcmFtIHtBcnJheX0gICB4ICAgICAgICAgICAgICAgVGhlIHNvbHV0b24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gRyAqIHggPSBiXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgcGludiAgICAgICAgICAgIFRoZSBpbnZlcnNlIHJvdyBwZXJtdXRhdGlvbiB2ZWN0b3IsIG11c3QgYmUgbnVsbCBmb3IgTCAqIHggPSBiXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG8gICAgICAgICAgICAgIFRoZSBsb3dlciAodHJ1ZSkgdXBwZXIgdHJpYW5ndWxhciAoZmFsc2UpIGZsYWdcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGZvciB0aGUgbm9uemVybyBwYXR0ZXJuXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gY3NTcHNvbHZlKGcsIGIsIGssIHhpLCB4LCBwaW52LCBsbykge1xuICAgIC8vIGcgYXJyYXlzXG4gICAgdmFyIGd2YWx1ZXMgPSBnLl92YWx1ZXM7XG4gICAgdmFyIGdpbmRleCA9IGcuX2luZGV4O1xuICAgIHZhciBncHRyID0gZy5fcHRyO1xuICAgIHZhciBnc2l6ZSA9IGcuX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gZ3NpemVbMV07IC8vIGIgYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBwLCBwMCwgcDEsIHE7IC8vIHhpW3RvcC4ubi0xXSA9IGNzUmVhY2goQig6LGspKVxuXG4gICAgdmFyIHRvcCA9ICgwLCBfY3NSZWFjaC5jc1JlYWNoKShnLCBiLCBrLCB4aSwgcGludik7IC8vIGNsZWFyIHhcblxuICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgeFt4aVtwXV0gPSAwO1xuICAgIH0gLy8gc2NhdHRlciBiXG5cblxuICAgIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICB4W2JpbmRleFtwXV0gPSBidmFsdWVzW3BdO1xuICAgIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAodmFyIHB4ID0gdG9wOyBweCA8IG47IHB4KyspIHtcbiAgICAgIC8vIHggYXJyYXkgaW5kZXggZm9yIHB4XG4gICAgICB2YXIgaiA9IHhpW3B4XTsgLy8gYXBwbHkgcGVybXV0YXRpb24gdmVjdG9yIChVIHggPSBiKSwgaiBtYXBzIHRvIGNvbHVtbiBKIG9mIEdcblxuICAgICAgdmFyIEogPSBwaW52ID8gcGludltqXSA6IGo7IC8vIGNoZWNrIGNvbHVtbiBKIGlzIGVtcHR5XG5cbiAgICAgIGlmIChKIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY29sdW1uIHZhbHVlIGluZGVjZXMgaW4gRywgcDAgPD0gcCA8IHAxXG5cblxuICAgICAgcDAgPSBncHRyW0pdO1xuICAgICAgcDEgPSBncHRyW0ogKyAxXTsgLy8geChqKSAvPSBHKGosailcblxuICAgICAgeFtqXSA9IGRpdmlkZVNjYWxhcih4W2pdLCBndmFsdWVzW2xvID8gcDAgOiBwMSAtIDFdKTsgLy8gZmlyc3QgZW50cnkgTChqLGopXG5cbiAgICAgIHAgPSBsbyA/IHAwICsgMSA6IHAwO1xuICAgICAgcSA9IGxvID8gcDEgOiBwMSAtIDE7IC8vIGxvb3BcblxuICAgICAgZm9yICg7IHAgPCBxOyBwKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciBpID0gZ2luZGV4W3BdOyAvLyB4KGkpIC09IEcoaSxqKSAqIHgoailcblxuICAgICAgICB4W2ldID0gc3VidHJhY3QoeFtpXSwgbXVsdGlwbHkoZ3ZhbHVlc1twXSwgeFtqXSkpO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIHRvcCBvZiBzdGFja1xuXG5cbiAgICByZXR1cm4gdG9wO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzU3Bzb2x2ZSA9IGNyZWF0ZUNzU3Bzb2x2ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NTcXIgPSB2b2lkIDA7XG5cbnZhciBfY3NQZXJtdXRlID0gcmVxdWlyZShcIi4vY3NQZXJtdXRlXCIpO1xuXG52YXIgX2NzUG9zdCA9IHJlcXVpcmUoXCIuL2NzUG9zdFwiKTtcblxudmFyIF9jc0V0cmVlID0gcmVxdWlyZShcIi4vY3NFdHJlZVwiKTtcblxudmFyIF9jc0FtZCA9IHJlcXVpcmUoXCIuL2NzQW1kXCIpO1xuXG52YXIgX2NzQ291bnRzID0gcmVxdWlyZShcIi4vY3NDb3VudHNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjc1Nxcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJ107XG52YXIgY3JlYXRlQ3NTcXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcbiAgdmFyIGNzQW1kID0gKDAsIF9jc0FtZC5jcmVhdGVDc0FtZCkoe1xuICAgIGFkZDogYWRkLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgdmFyIGNzQ291bnRzID0gKDAsIF9jc0NvdW50cy5jcmVhdGVDc0NvdW50cykoe1xuICAgIHRyYW5zcG9zZTogdHJhbnNwb3NlXG4gIH0pO1xuICAvKipcbiAgICogU3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzIGZvciBRUiBhbmQgTFUgZGVjb21wb3NpdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSAgb3JkZXIgICAgICAgICAgIFRoZSBvcmRlcmluZyBzdHJhdGVneSAoc2VlIGNzQW1kIGZvciBtb3JlIGRldGFpbHMpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgYSAgICAgICAgICAgICAgIFRoZSBBIG1hdHJpeFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHFyICAgICAgICAgICAgICBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIFFSIGRlY29tcG9zaXRpb24gKHRydWUpIG9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFseXNpcyBmb3IgTFUgZGVjb21wb3NpdGlvbiAoZmFsc2UpXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICAgICAgIFRoZSBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIG1hdHJpeCBBXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBjc1NxcihvcmRlciwgYSwgcXIpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcnNcblxuICAgIHZhciBrOyAvLyBzeW1ib2xpYyBhbmFseXNpcyByZXN1bHRcblxuICAgIHZhciBzID0ge307IC8vIGZpbGwtcmVkdWNpbmcgb3JkZXJpbmdcblxuICAgIHMucSA9IGNzQW1kKG9yZGVyLCBhKTsgLy8gdmFsaWRhdGUgcmVzdWx0c1xuXG4gICAgaWYgKG9yZGVyICYmICFzLnEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gUVIgc3ltYm9saWMgYW5hbHlzaXNcblxuXG4gICAgaWYgKHFyKSB7XG4gICAgICAvLyBhcHBseSBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkXG4gICAgICB2YXIgYyA9IG9yZGVyID8gKDAsIF9jc1Blcm11dGUuY3NQZXJtdXRlKShhLCBudWxsLCBzLnEsIDApIDogYTsgLy8gZXRyZWUgb2YgQycqQywgd2hlcmUgQz1BKDoscSlcblxuICAgICAgcy5wYXJlbnQgPSAoMCwgX2NzRXRyZWUuY3NFdHJlZSkoYywgMSk7IC8vIHBvc3Qgb3JkZXIgZWxpbWluYXRpb24gdHJlZVxuXG4gICAgICB2YXIgcG9zdCA9ICgwLCBfY3NQb3N0LmNzUG9zdCkocy5wYXJlbnQsIG4pOyAvLyBjb2wgY291bnRzIGNob2woQycqQylcblxuICAgICAgcy5jcCA9IGNzQ291bnRzKGMsIHMucGFyZW50LCBwb3N0LCAxKTsgLy8gY2hlY2sgd2UgaGF2ZSBldmVyeXRoaW5nIG5lZWRlZCB0byBjYWxjdWxhdGUgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHNcblxuICAgICAgaWYgKGMgJiYgcy5wYXJlbnQgJiYgcy5jcCAmJiBfdmNvdW50KGMsIHMpKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50c1xuICAgICAgICBmb3IgKHMudW56ID0gMCwgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgICBzLnVueiArPSBzLmNwW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvciBMVSBmYWN0b3JpemF0aW9uIG9ubHksIGd1ZXNzIG5ueihMKSBhbmQgbm56KFUpXG4gICAgICBzLnVueiA9IDQgKiBhcHRyW25dICsgbjtcbiAgICAgIHMubG56ID0gcy51bno7XG4gICAgfSAvLyByZXR1cm4gcmVzdWx0IFNcblxuXG4gICAgcmV0dXJuIHM7XG4gIH07XG4gIC8qKlxuICAgKiBDb21wdXRlIG5ueihWKSA9IHMubG56LCBzLnBpbnYsIHMubGVmdG1vc3QsIHMubTIgZnJvbSBBIGFuZCBzLnBhcmVudFxuICAgKi9cblxuICBmdW5jdGlvbiBfdmNvdW50KGEsIHMpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIG0gPSBhc2l6ZVswXTtcbiAgICB2YXIgbiA9IGFzaXplWzFdOyAvLyBpbml0aWFsaXplIHMgYXJyYXlzXG5cbiAgICBzLnBpbnYgPSBbXTsgLy8gKG0gKyBuKVxuXG4gICAgcy5sZWZ0bW9zdCA9IFtdOyAvLyAobSlcbiAgICAvLyB2YXJzXG5cbiAgICB2YXIgcGFyZW50ID0gcy5wYXJlbnQ7XG4gICAgdmFyIHBpbnYgPSBzLnBpbnY7XG4gICAgdmFyIGxlZnRtb3N0ID0gcy5sZWZ0bW9zdDsgLy8gd29ya3NwYWNlLCBuZXh0OiBmaXJzdCBtIGVudHJpZXMsIGhlYWQ6IG5leHQgbiBlbnRyaWVzLCB0YWlsOiBuZXh0IG4gZW50cmllcywgbnF1ZTogbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciB3ID0gW107IC8vIChtICsgMyAqIG4pXG5cbiAgICB2YXIgbmV4dCA9IDA7XG4gICAgdmFyIGhlYWQgPSBtO1xuICAgIHZhciB0YWlsID0gbSArIG47XG4gICAgdmFyIG5xdWUgPSBtICsgMiAqIG47IC8vIHZhcnNcblxuICAgIHZhciBpLCBrLCBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgd1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gcXVldWUgayBpcyBlbXB0eVxuICAgICAgd1toZWFkICsga10gPSAtMTtcbiAgICAgIHdbdGFpbCArIGtdID0gLTE7XG4gICAgICB3W25xdWUgKyBrXSA9IDA7XG4gICAgfSAvLyBpbml0aWFsaXplIHJvdyBhcnJheXNcblxuXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgbGVmdG1vc3RbaV0gPSAtMTtcbiAgICB9IC8vIGxvb3AgY29sdW1ucyBiYWNrd2FyZHNcblxuXG4gICAgZm9yIChrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAvLyB2YWx1ZXMgJiBpbmRleCBmb3IgY29sdW1uIGtcbiAgICAgIGZvciAocDAgPSBhcHRyW2tdLCBwMSA9IGFwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgIC8vIGxlZnRtb3N0W2ldID0gbWluKGZpbmQoQShpLDopKSlcbiAgICAgICAgbGVmdG1vc3RbYWluZGV4W3BdXSA9IGs7XG4gICAgICB9XG4gICAgfSAvLyBzY2FuIHJvd3MgaW4gcmV2ZXJzZSBvcmRlclxuXG5cbiAgICBmb3IgKGkgPSBtIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIHJvdyBpIGlzIG5vdCB5ZXQgb3JkZXJlZFxuICAgICAgcGludltpXSA9IC0xO1xuICAgICAgayA9IGxlZnRtb3N0W2ldOyAvLyBjaGVjayByb3cgaSBpcyBlbXB0eVxuXG4gICAgICBpZiAoayA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIGZpcnN0IHJvdyBpbiBxdWV1ZSBrXG5cblxuICAgICAgaWYgKHdbbnF1ZSArIGtdKysgPT09IDApIHtcbiAgICAgICAgd1t0YWlsICsga10gPSBpO1xuICAgICAgfSAvLyBwdXQgaSBhdCBoZWFkIG9mIHF1ZXVlIGtcblxuXG4gICAgICB3W25leHQgKyBpXSA9IHdbaGVhZCArIGtdO1xuICAgICAgd1toZWFkICsga10gPSBpO1xuICAgIH1cblxuICAgIHMubG56ID0gMDtcbiAgICBzLm0yID0gbTsgLy8gZmluZCByb3cgcGVybXV0YXRpb24gYW5kIG5ueihWKVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gcmVtb3ZlIHJvdyBpIGZyb20gcXVldWUga1xuICAgICAgaSA9IHdbaGVhZCArIGtdOyAvLyBjb3VudCBWKGssaykgYXMgbm9uemVyb1xuXG4gICAgICBzLmxueisrOyAvLyBhZGQgYSBmaWN0aXRpb3VzIHJvd1xuXG4gICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgaSA9IHMubTIrKztcbiAgICAgIH0gLy8gYXNzb2NpYXRlIHJvdyBpIHdpdGggVig6LGspXG5cblxuICAgICAgcGludltpXSA9IGs7IC8vIHNraXAgaWYgVihrKzE6bSxrKSBpcyBlbXB0eVxuXG4gICAgICBpZiAoLS1ucXVlW2tdIDw9IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIG5xdWVba10gaXMgbm56IChWKGsrMTptLGspKVxuXG5cbiAgICAgIHMubG56ICs9IHdbbnF1ZSArIGtdOyAvLyBtb3ZlIGFsbCByb3dzIHRvIHBhcmVudCBvZiBrXG5cbiAgICAgIHZhciBwYSA9IHBhcmVudFtrXTtcblxuICAgICAgaWYgKHBhICE9PSAtMSkge1xuICAgICAgICBpZiAod1tucXVlICsgcGFdID09PSAwKSB7XG4gICAgICAgICAgd1t0YWlsICsgcGFdID0gd1t0YWlsICsga107XG4gICAgICAgIH1cblxuICAgICAgICB3W25leHQgKyB3W3RhaWwgKyBrXV0gPSB3W2hlYWQgKyBwYV07XG4gICAgICAgIHdbaGVhZCArIHBhXSA9IHdbbmV4dCArIGldO1xuICAgICAgICB3W25xdWUgKyBwYV0gKz0gd1tucXVlICsga107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgaWYgKHBpbnZbaV0gPCAwKSB7XG4gICAgICAgIHBpbnZbaV0gPSBrKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1NxciA9IGNyZWF0ZUNzU3FyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1RkZnMgPSBjc1RkZnM7XG5cbi8qKlxuICogRGVwdGgtZmlyc3Qgc2VhcmNoIGFuZCBwb3N0b3JkZXIgb2YgYSB0cmVlIHJvb3RlZCBhdCBub2RlIGpcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgdHJlZSBub2RlXG4gKiBAcGFyYW0ge051bWJlcn0gIGtcbiAqIEBwYXJhbSB7QXJyYXl9ICAgdyAgICAgICAgICAgICAgIFRoZSB3b3Jrc3BhY2UgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaGVhZCAgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBoZWFkIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIG5leHQgICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgbmV4dCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gICBwb3N0ICAgICAgICAgICAgVGhlIHBvc3Qgb3JkZXJpbmcgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgc3RhY2sgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBzdGFjayBhcnJheVxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzVGRmcyhqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjaykge1xuICAvLyB2YXJpYWJsZXNcbiAgdmFyIHRvcCA9IDA7IC8vIHBsYWNlIGogb24gdGhlIHN0YWNrXG5cbiAgd1tzdGFja10gPSBqOyAvLyB3aGlsZSAoc3RhY2sgaXMgbm90IGVtcHR5KVxuXG4gIHdoaWxlICh0b3AgPj0gMCkge1xuICAgIC8vIHAgPSB0b3Agb2Ygc3RhY2tcbiAgICB2YXIgcCA9IHdbc3RhY2sgKyB0b3BdOyAvLyBpID0geW91bmdlc3QgY2hpbGQgb2YgcFxuXG4gICAgdmFyIGkgPSB3W2hlYWQgKyBwXTtcblxuICAgIGlmIChpID09PSAtMSkge1xuICAgICAgLy8gcCBoYXMgbm8gdW5vcmRlcmVkIGNoaWxkcmVuIGxlZnRcbiAgICAgIHRvcC0tOyAvLyBub2RlIHAgaXMgdGhlIGt0aCBwb3N0b3JkZXJlZCBub2RlXG5cbiAgICAgIHBvc3RbaysrXSA9IHA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlbW92ZSBpIGZyb20gY2hpbGRyZW4gb2YgcFxuICAgICAgd1toZWFkICsgcF0gPSB3W25leHQgKyBpXTsgLy8gaW5jcmVtZW50IHRvcFxuXG4gICAgICArK3RvcDsgLy8gc3RhcnQgZGZzIG9uIGNoaWxkIG5vZGUgaVxuXG4gICAgICB3W3N0YWNrICsgdG9wXSA9IGk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGs7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzVW5mbGlwID0gY3NVbmZsaXA7XG5cbnZhciBfY3NGbGlwID0gcmVxdWlyZShcIi4vY3NGbGlwXCIpO1xuXG4vKipcbiAqIEZsaXBzIHRoZSB2YWx1ZSBpZiBpdCBpcyBuZWdhdGl2ZSBvZiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gZmxpcFxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzVW5mbGlwKGkpIHtcbiAgLy8gZmxpcCB0aGUgdmFsdWUgaWYgaXQgaXMgbmVnYXRpdmVcbiAgcmV0dXJuIGkgPCAwID8gKDAsIF9jc0ZsaXAuY3NGbGlwKShpKSA6IGk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFicyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2Ficyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFicyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBudW1iZXIuIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzXG4gICAqIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hYnMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWJzKDMuNSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMy41XG4gICAqICAgIG1hdGguYWJzKC00LjIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNC4yXG4gICAqXG4gICAqICAgIG1hdGguYWJzKFszLCAtNSwgLTEsIDAsIDJdKSAgLy8gcmV0dXJucyBBcnJheSBbMywgNSwgMSwgMCwgMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpZ25cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgQSBudW1iZXIgb3IgbWF0cml4IGZvciB3aGljaCB0byBnZXQgdGhlIGFic29sdXRlIHZhbHVlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1cbiAgICogICAgICAgICAgICBBYnNvbHV0ZSB2YWx1ZSBvZiBgeGBcbiAgICovXG4gIHZhciBhYnMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFic051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWJzLCB0cnVlKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFicztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBYnMgPSBjcmVhdGVBYnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFkZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNFwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnYWRkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlQWRkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXgsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQWRkIHR3byBvciBtb3JlIHZhbHVlcywgYHggKyB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFkZCh4LCB5KVxuICAgKiAgICBtYXRoLmFkZCh4LCB5LCB6LCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFkZCgyLCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDVcbiAgICogICAgbWF0aC5hZGQoMiwgMywgNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA5XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCgtNCwgMSlcbiAgICogICAgbWF0aC5hZGQoYSwgYikgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggLTIgKyA0aVxuICAgKlxuICAgKiAgICBtYXRoLmFkZChbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLnVuaXQoJzUgY20nKVxuICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCcyLjEgbW0nKVxuICAgKiAgICBtYXRoLmFkZChjLCBkKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCA1Mi4xIG1tXG4gICAqXG4gICAqICAgIG1hdGguYWRkKFwiMi4zXCIsIFwiNFwiKSAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDYuM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3VidHJhY3QsIHN1bVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gYWRkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gYWRkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gU3VtIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBhZGQgPSB0eXBlZChuYW1lLCAoMCwgX29iamVjdC5leHRlbmQpKHtcbiAgICAvLyB3ZSBleHRlbmQgdGhlIHNpZ25hdHVyZXMgb2YgYWRkU2NhbGFyIHdpdGggc2lnbmF0dXJlcyBkZWFsaW5nIHdpdGggbWF0cmljZXNcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIGFkZFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYWRkU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhZGQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFkZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWRkKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhZGRTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeCwgeSwgYWRkU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBhZGRTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGFkZFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgYW55JzogYWRkU2NhbGFyLFxuICAgICdhbnksIGFueSwgLi4uYW55JzogZnVuY3Rpb24gYW55QW55QW55KHgsIHksIHJlc3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBhZGQoeCwgeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBhZGQocmVzdWx0LCByZXN0W2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0sIGFkZFNjYWxhci5zaWduYXR1cmVzKSk7XG4gIHJldHVybiBhZGQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWRkID0gY3JlYXRlQWRkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGRTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2FkZFNjYWxhcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFkZFNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEFkZCB0d28gc2NhbGFyIHZhbHVlcywgYHggKyB5YC5cbiAgICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlOiBpdCBpcyB1c2VkIGJ5IHRoZSBwdWJsaWMgZnVuY3Rpb25cbiAgICogYGFkZGBcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbGxlY3Rpb25zIChBcnJheSBvciBNYXRyaXgpLlxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0fSB4ICAgRmlyc3QgdmFsdWUgdG8gYWRkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gYWRkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9ICAgICBTdW0gb2YgYHhgIGFuZCBgeWBcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhciBhZGRTY2FsYXIgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5hZGROdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4geC5hZGQoeSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucGx1cyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmFkZCh5KTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKHgudmFsdWUgPT09IG51bGwgfHwgeC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB4IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpO1xuICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwgfHwgeS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB5IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpO1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkgdGhyb3cgbmV3IEVycm9yKCdVbml0cyBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIHZhciByZXMgPSB4LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSBhZGRTY2FsYXIocmVzLnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFkZFNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGRTY2FsYXIgPSBjcmVhdGVBZGRTY2FsYXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNicnQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjYnJ0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdpc05lZ2F0aXZlJywgJ3VuYXJ5TWludXMnLCAnbWF0cml4JywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJywgJ0ZyYWN0aW9uJ107XG52YXIgY3JlYXRlQ2JydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBGcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb247XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY2JydCh4KVxuICAgKiAgICBtYXRoLmNicnQoeCwgYWxsUm9vdHMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNicnQoMjcpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgIG1hdGguY3ViZSgzKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI3XG4gICAqICAgIG1hdGguY2JydCgtNjQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIC00XG4gICAqICAgIG1hdGguY2JydChtYXRoLnVuaXQoJzI3IG1eMycpKSAvLyByZXR1cm5zIFVuaXQgMyBtXG4gICAqICAgIG1hdGguY2JydChbMjcsIDY0LCAxMjVdKSAgICAgICAvLyByZXR1cm5zIFszLCA0LCA1XVxuICAgKlxuICAgKiAgICBjb25zdCB4ID0gbWF0aC5jb21wbGV4KCc4aScpXG4gICAqICAgIG1hdGguY2JydCh4KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS43MzIwNTA4MDc1Njg5ICsgaVxuICAgKiAgICBtYXRoLmNicnQoeCwgdHJ1ZSkgICAgICAgICAgICAgLy8gcmV0dXJucyBNYXRyaXggW1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIDEuNzMyMDUwODA3NTY4OSArIGlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIC0xLjczMjA1MDgwNzU2ODkgKyBpXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAtMmlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzcXVhcmUsIHNxcnQsIGN1YmVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsUm9vdHNdICBPcHRpb25hbCwgZmFsc2UgYnkgZGVmYXVsdC4gT25seSBhcHBsaWNhYmxlXG4gICAqICAgICAgICAgICAgd2hlbiBgeGAgaXMgYSBudW1iZXIgb3IgY29tcGxleCBudW1iZXIuIElmIHRydWUsIGFsbCBjb21wbGV4XG4gICAqICAgICAgICAgICAgcm9vdHMgYXJlIHJldHVybmVkLCBpZiBmYWxzZSAoZGVmYXVsdCkgdGhlIHByaW5jaXBhbCByb290IGlzXG4gICAqICAgICAgICAgICAgcmV0dXJuZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiBgeGBcbiAgICovXG4gIHZhciBjYnJ0ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jYnJ0TnVtYmVyLFxuICAgIC8vIG5vdGU6IHNpZ25hdHVyZSAnbnVtYmVyLCBib29sZWFuJyBpcyBhbHNvIHN1cHBvcnRlZCxcbiAgICAvLyAgICAgICBjcmVhdGVkIGJ5IHR5cGVkIGFzIGl0IGtub3dzIGhvdyB0byBjb252ZXJ0IG51bWJlciB0byBDb21wbGV4XG4gICAgQ29tcGxleDogX2NicnRDb21wbGV4LFxuICAgICdDb21wbGV4LCBib29sZWFuJzogX2NicnRDb21wbGV4LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmNicnQoKTtcbiAgICB9LFxuICAgIFVuaXQ6IF9jYnJ0VW5pdCxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGNicnQoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNicnQsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QgZm9yIGEgY29tcGxleCBudW1iZXJcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbFJvb3RzXSAgIElmIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFsbCB0aHJlZSByb290cy4gSWYgZmFsc2Ugb3IgdW5kZWZpbmVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIHtDb21wbGV4IHwgQXJyYXkuPENvbXBsZXg+IHwgTWF0cml4LjxDb21wbGV4Pn0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdChzKSBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jYnJ0Q29tcGxleCh4LCBhbGxSb290cykge1xuICAgIC8vIGh0dHBzOi8vd3d3Lndpa2l3YW5kLmNvbS9lbi9DdWJlX3Jvb3QjL0NvbXBsZXhfbnVtYmVyc1xuICAgIHZhciBhcmczID0geC5hcmcoKSAvIDM7XG4gICAgdmFyIGFicyA9IHguYWJzKCk7IC8vIHByaW5jaXBhbCByb290OlxuXG4gICAgdmFyIHByaW5jaXBhbCA9IG5ldyBDb21wbGV4KCgwLCBfbnVtYmVyLmNicnROdW1iZXIpKGFicyksIDApLm11bChuZXcgQ29tcGxleCgwLCBhcmczKS5leHAoKSk7XG5cbiAgICBpZiAoYWxsUm9vdHMpIHtcbiAgICAgIHZhciBhbGwgPSBbcHJpbmNpcGFsLCBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyArIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpLCBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyAtIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpXTtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gYWxsIDogbWF0cml4KGFsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmluY2lwYWw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QgZm9yIGEgVW5pdFxuICAgKiBAcGFyYW0ge1VuaXR9IHhcbiAgICogQHJldHVybiB7VW5pdH0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2NicnRVbml0KHgpIHtcbiAgICBpZiAoeC52YWx1ZSAmJiAoMCwgX2lzLmlzQ29tcGxleCkoeC52YWx1ZSkpIHtcbiAgICAgIHZhciByZXN1bHQgPSB4LmNsb25lKCk7XG4gICAgICByZXN1bHQudmFsdWUgPSAxLjA7XG4gICAgICByZXN1bHQgPSByZXN1bHQucG93KDEuMCAvIDMpOyAvLyBDb21wdXRlIHRoZSB1bml0c1xuXG4gICAgICByZXN1bHQudmFsdWUgPSBfY2JydENvbXBsZXgoeC52YWx1ZSk7IC8vIENvbXB1dGUgdGhlIHZhbHVlXG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBuZWdhdGUgPSBpc05lZ2F0aXZlKHgudmFsdWUpO1xuXG4gICAgICBpZiAobmVnYXRlKSB7XG4gICAgICAgIHgudmFsdWUgPSB1bmFyeU1pbnVzKHgudmFsdWUpO1xuICAgICAgfSAvLyBUT0RPOiBjcmVhdGUgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoaXNcblxuXG4gICAgICB2YXIgdGhpcmQ7XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh4LnZhbHVlKSkge1xuICAgICAgICB0aGlyZCA9IG5ldyBCaWdOdW1iZXIoMSkuZGl2KDMpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzRnJhY3Rpb24pKHgudmFsdWUpKSB7XG4gICAgICAgIHRoaXJkID0gbmV3IEZyYWN0aW9uKDEsIDMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcmQgPSAxIC8gMztcbiAgICAgIH1cblxuICAgICAgdmFyIF9yZXN1bHQgPSB4LnBvdyh0aGlyZCk7XG5cbiAgICAgIGlmIChuZWdhdGUpIHtcbiAgICAgICAgX3Jlc3VsdC52YWx1ZSA9IHVuYXJ5TWludXMoX3Jlc3VsdC52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYnJ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNicnQgPSBjcmVhdGVDYnJ0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDZWlsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyMiA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NlaWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ3JvdW5kJ107XG52YXIgY3JlYXRlQ2VpbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHJvdW5kID0gX3JlZi5yb3VuZDtcblxuICAvKipcbiAgICogUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHlcbiAgICogSWYgYHhgIGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBwbHVzIGluZmluaXR5LlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY2VpbCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jZWlsKDMuMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqICAgIG1hdGguY2VpbCgzLjgpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLmNlaWwoLTQuMikgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGguY2VpbCgtNC43KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTRcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguY2VpbChjKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDQgLSAyaVxuICAgKlxuICAgKiAgICBtYXRoLmNlaWwoWzMuMiwgMy44LCAtNC43XSkgIC8vIHJldHVybnMgQXJyYXkgWzQsIDQsIC00XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmxvb3IsIGZpeCwgcm91bmRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIE51bWJlciB0byBiZSByb3VuZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuICB2YXIgY2VpbCA9IHR5cGVkKCdjZWlsJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICgoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIyLmNlaWxOdW1iZXIpKHgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jZWlsKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5jZWlsKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguY2VpbCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBjZWlsKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjZWlsLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2VpbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDZWlsID0gY3JlYXRlQ2VpbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3ViZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2N1YmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVDdWJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLCBgeCAqIHggKiB4YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY3ViZSgyKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDhcbiAgICogICAgbWF0aC5wb3coMiwgMykgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOFxuICAgKiAgICBtYXRoLmN1YmUoNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NFxuICAgKiAgICA0ICogNCAqIDQgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NFxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoWzEsIDIsIDMsIDRdKSAvLyByZXR1cm5zIEFycmF5IFsxLCA4LCAyNywgNjRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtdWx0aXBseSwgc3F1YXJlLCBwb3csIGNicnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4ICBOdW1iZXIgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IEN1YmUgb2YgeFxuICAgKi9cbiAgdmFyIGN1YmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmN1YmVOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5tdWwoeCkubXVsKHgpOyAvLyBJcyBmYXN0ZXIgdGhhbiBwb3coeCwgMylcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnRpbWVzKHgpLnRpbWVzKHgpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnBvdygzKTsgLy8gSXMgZmFzdGVyIHRoYW4gbXVsKCltdWwoKW11bCgpXG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGN1YmUoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGN1YmUsIHRydWUpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5wb3coMyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGN1YmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3ViZSA9IGNyZWF0ZUN1YmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURpdmlkZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZGl2aWRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdtdWx0aXBseScsICdlcXVhbFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnaW52J107XG52YXIgY3JlYXRlRGl2aWRlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBpbnYgPSBfcmVmLmludjtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBEaXZpZGUgdHdvIHZhbHVlcywgYHggLyB5YC5cbiAgICogVG8gZGl2aWRlIG1hdHJpY2VzLCBgeGAgaXMgbXVsdGlwbGllZCB3aXRoIHRoZSBpbnZlcnNlIG9mIGB5YDogYHggKiBpbnYoeSlgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZGl2aWRlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmRpdmlkZSgyLCAzKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNjY2NjY2NjY2NjY2NjY2NlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC5jb21wbGV4KDUsIDE0KVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGguZGl2aWRlKGEsIGIpICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDIgKyAzaVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gW1s3LCAtNl0sIFsxMywgLTRdXVxuICAgKiAgICBjb25zdCBkID0gW1sxLCAyXSwgWzQsIDNdXVxuICAgKiAgICBtYXRoLmRpdmlkZShjLCBkKSAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1stOSwgNF0sIFstMTEsIDZdXVxuICAgKlxuICAgKiAgICBjb25zdCBlID0gbWF0aC51bml0KCcxOCBrbScpXG4gICAqICAgIG1hdGguZGl2aWRlKGUsIDQuNSkgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDQga21cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgIE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geSAgICAgICAgICBEZW5vbWluYXRvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgIFF1b3RpZW50LCBgeCAvIHlgXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnZGl2aWRlJywgKDAsIF9vYmplY3QuZXh0ZW5kKSh7XG4gICAgLy8gd2UgZXh0ZW5kIHRoZSBzaWduYXR1cmVzIG9mIGRpdmlkZVNjYWxhciB3aXRoIHNpZ25hdHVyZXMgZGVhbGluZyB3aXRoIG1hdHJpY2VzXG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1hdHJpeCByaWdodCBkaXZpc2lvbiB1c2luZyBwc2V1ZG8gaW52ZXJzZVxuICAgICAgLy8gaHR0cHM6Ly93d3cubWF0aHdvcmtzLm5sL2hlbHAvbWF0bGFiL3JlZi9tcmRpdmlkZS5odG1sXG4gICAgICAvLyBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL29jdGF2ZS9kb2MvaW50ZXJwcmV0ZXIvQXJpdGhtZXRpYy1PcHMuaHRtbFxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTIyNjM5MzIvaG93LWRvZXMtZ251LW9jdGF2ZS1tYXRyaXgtZGl2aXNpb24td29yay1nZXR0aW5nLXVuZXhwZWN0ZWQtYmVoYXZpb3VyXG4gICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBhbnlBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTtcbiAgICB9XG4gIH0sIGRpdmlkZVNjYWxhci5zaWduYXR1cmVzKSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlID0gY3JlYXRlRGl2aWRlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXZpZGVTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdkaXZpZGVTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbnVtZXJpYyddO1xudmFyIGNyZWF0ZURpdmlkZVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljO1xuXG4gIC8qKlxuICAgKiBEaXZpZGUgdHdvIHNjYWxhciB2YWx1ZXMsIGB4IC8geWAuXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzZTogaXQgaXMgdXNlZCBieSB0aGUgcHVibGljIGZ1bmN0aW9uc1xuICAgKiBgZGl2aWRlYCBhbmQgYGludmAuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IHkgICAgICAgICAgRGVub21pbmF0b3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0gICAgIFF1b3RpZW50LCBgeCAvIHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgZGl2aWRlU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCAvIHk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmRpdih5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnVW5pdCwgbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyRnJhY3Rpb25CaWdOdW1iZXIoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTsgLy8gVE9ETzogbW92ZSB0aGUgZGl2aWRlIGZ1bmN0aW9uIHRvIFVuaXQuanMsIGl0IHVzZXMgaW50ZXJuYWxzIG9mIFVuaXRcblxuICAgICAgdmFyIG9uZSA9IG51bWVyaWMoMSwgKDAsIF9pcy50eXBlT2YpKHkpKTtcbiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcihyZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZShvbmUpIDogcmVzLnZhbHVlLCB5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlclVuaXQoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHkuY2xvbmUoKTtcbiAgICAgIHJlcyA9IHJlcy5wb3coLTEpOyAvLyBUT0RPOiBtb3ZlIHRoZSBkaXZpZGUgZnVuY3Rpb24gdG8gVW5pdC5qcywgaXQgdXNlcyBpbnRlcm5hbHMgb2YgVW5pdFxuXG4gICAgICB2YXIgb25lID0gbnVtZXJpYygxLCAoMCwgX2lzLnR5cGVPZikoeCkpO1xuICAgICAgcmVzLnZhbHVlID0gZGl2aWRlU2NhbGFyKHgsIHkudmFsdWUgPT09IG51bGwgPyB5Ll9ub3JtYWxpemUob25lKSA6IHkudmFsdWUpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZGl2aWRlKHkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkaXZpZGVTY2FsYXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlU2NhbGFyID0gY3JlYXRlRGl2aWRlU2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3REaXZpZGUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90RGl2aWRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEb3REaXZpZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAyID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogRGl2aWRlIHR3byBtYXRyaWNlcyBlbGVtZW50IHdpc2UuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGJvdGggbWF0cmljZXMgYW5kXG4gICAqIHNjYWxhciB2YWx1ZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5kb3REaXZpZGUoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90RGl2aWRlKDIsIDQpICAgLy8gcmV0dXJucyAwLjVcbiAgICpcbiAgICogICAgYSA9IFtbOSwgNV0sIFs2LCAxXV1cbiAgICogICAgYiA9IFtbMywgMl0sIFs1LCAyXV1cbiAgICpcbiAgICogICAgbWF0aC5kb3REaXZpZGUoYSwgYikgICAvLyByZXR1cm5zIFtbMywgMi41XSwgWzEuMiwgMC41XV1cbiAgICogICAgbWF0aC5kaXZpZGUoYSwgYikgICAgICAvLyByZXR1cm5zIFtbMS43NSwgMC43NV0sIFstMS43NSwgMi4yNV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGUsIG11bHRpcGx5LCBkb3RNdWx0aXBseVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtZXJhdG9yXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBEZW5vbWluYXRvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBRdW90aWVudCwgYHggLi8geWBcbiAgICovXG5cbiAgdmFyIGRvdERpdmlkZSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBkaXZpZGVTY2FsYXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBkaXZpZGVTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdERpdmlkZShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90RGl2aWRlKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3REaXZpZGUoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdERpdmlkZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3REaXZpZGUgPSBjcmVhdGVEb3REaXZpZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdE11bHRpcGx5ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90TXVsdGlwbHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJ107XG52YXIgY3JlYXRlRG90TXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXI7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA5ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBNdWx0aXBseSB0d28gbWF0cmljZXMgZWxlbWVudCB3aXNlLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyBib3RoIG1hdHJpY2VzIGFuZFxuICAgKiBzY2FsYXIgdmFsdWVzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoMiwgNCkgLy8gcmV0dXJucyA4XG4gICAqXG4gICAqICAgIGEgPSBbWzksIDVdLCBbNiwgMV1dXG4gICAqICAgIGIgPSBbWzMsIDJdLCBbNSwgMl1dXG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoYSwgYikgLy8gcmV0dXJucyBbWzI3LCAxMF0sIFszMCwgMl1dXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgLy8gcmV0dXJucyBbWzUyLCAyOF0sIFsyMywgMTRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIGRpdmlkZSwgZG90RGl2aWRlXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBMZWZ0IGhhbmQgdmFsdWVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFJpZ2h0IGhhbmQgdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGljYXRpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGRvdE11bHRpcGx5ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IG11bHRpcGx5U2NhbGFyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDkoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbXVsdGlwbHlTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdE11bHRpcGx5KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RNdWx0aXBseShtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90TXVsdGlwbHkoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdE11bHRpcGx5O1xufSk7XG5leHBvcnRzLmNyZWF0ZURvdE11bHRpcGx5ID0gY3JlYXRlRG90TXVsdGlwbHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdFBvdyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90UG93JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJywgJ21hdHJpeCcsICdwb3cnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEb3RQb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5IGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdFBvdyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kb3RQb3coMiwgMykgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIG1hdGguZG90UG93KGEsIDIpICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzEsIDRdLCBbMTYsIDldXVxuICAgKiAgICBtYXRoLnBvdyhhLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1s5LCA4XSwgWzE2LCAxN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwb3csIHNxcnQsIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFRoZSBiYXNlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgIFRoZSBleHBvbmVudFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiBgeGAgdG8gdGhlIHBvd2VyIGB5YFxuICAgKi9cblxuICB2YXIgZG90UG93ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IHBvdyxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgcG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHBvdyk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90UG93KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RQb3cobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdFBvdyh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkb3RQb3csIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRvdFBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBkb3RQb3csIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgZG90UG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZG90UG93LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBkb3RQb3csIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZG90UG93O1xufSk7XG5leHBvcnRzLmNyZWF0ZURvdFBvdyA9IGNyZWF0ZURvdFBvdzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZXhwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRXhwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBleHBvbmVudCBvZiBhIHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXhwKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmV4cCgyKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLnBvdyhtYXRoLmUsIDIpICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLmxvZyhtYXRoLmV4cCgyKSkgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICpcbiAgICogICAgbWF0aC5leHAoWzEsIDIsIDNdKVxuICAgKiAgICAvLyByZXR1cm5zIEFycmF5IFtcbiAgICogICAgLy8gICAyLjcxODI4MTgyODQ1OTA0NSxcbiAgICogICAgLy8gICA3LjM4OTA1NjA5ODkzMDY0OTUsXG4gICAqICAgIC8vICAgMjAuMDg1NTM2OTIzMTg3NjY4XG4gICAqICAgIC8vIF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cG0xLCBsb2csIHBvd1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgQSBudW1iZXIgb3IgbWF0cml4IHRvIGV4cG9uZW50aWF0ZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEV4cG9uZW50IG9mIGB4YFxuICAgKi9cbiAgdmFyIGV4cCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZXhwTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5leHAoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIFRPRE86IGV4cChzcGFyc2UpIHNob3VsZCByZXR1cm4gYSBkZW5zZSBtYXRyaXggc2luY2UgZXhwKDApPT0xXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGV4cCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGV4cDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHAgPSBjcmVhdGVFeHA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUV4cG0xID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZXhwbTEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUV4cG0xID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9Db21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHN1YnRyYWN0aW5nIDEgZnJvbSB0aGUgZXhwb25lbnRpYWwgdmFsdWUuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5leHBtMSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5leHBtMSgyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2LjM4OTA1NjA5ODkzMDY1XG4gICAqICAgIG1hdGgucG93KG1hdGguZSwgMikgLSAxICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNi4zODkwNTYwOTg5MzA2NDk1XG4gICAqICAgIG1hdGgubG9nKG1hdGguZXhwbTEoMikgKyAxKSAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKlxuICAgKiAgICBtYXRoLmV4cG0xKFsxLCAyLCAzXSlcbiAgICogICAgLy8gcmV0dXJucyBBcnJheSBbXG4gICAqICAgIC8vICAgMS43MTgyODE4Mjg0NTkwNDUsXG4gICAqICAgIC8vICAgNi4zODkwNTYwOTg5MzA2NDk1LFxuICAgKiAgICAvLyAgIDE5LjA4NTUzNjkyMzE4NzY2OFxuICAgKiAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgcG93XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG51bWJlciBvciBtYXRyaXggdG8gYXBwbHkgZXhwbTFcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBFeHBvbmVudCBvZiBgeGBcbiAgICovXG4gIHZhciBleHBtMSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZXhwbTFOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICB2YXIgciA9IE1hdGguZXhwKHgucmUpO1xuICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleChyICogTWF0aC5jb3MoeC5pbSkgLSAxLCByICogTWF0aC5zaW4oeC5pbSkpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCkubWludXMoMSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGV4cG0xKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZXhwbTE7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwbTEgPSBjcmVhdGVFeHBtMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRml4ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ZpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdDb21wbGV4JywgJ2NlaWwnLCAnZmxvb3InXTtcbnZhciBjcmVhdGVGaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXgsXG4gICAgICBjZWlsID0gX3JlZi5jZWlsLFxuICAgICAgZmxvb3IgPSBfcmVmLmZsb29yO1xuXG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgemVyby5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZpeCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5maXgoMy4yKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGguZml4KDMuOCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZpeCgtNC4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGguZml4KC00LjcpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTRcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguZml4KGMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAyaVxuICAgKlxuICAgKiAgICBtYXRoLmZpeChbMy4yLCAzLjgsIC00LjddKSAgIC8vIHJldHVybnMgQXJyYXkgWzMsIDMsIC00XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZmxvb3IsIHJvdW5kXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIGZpeCA9IHR5cGVkKCdmaXgnLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHggPiAwID8gZmxvb3IoeCkgOiBjZWlsKHgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4gbmV3IF9Db21wbGV4KHgucmUgPiAwID8gTWF0aC5mbG9vcih4LnJlKSA6IE1hdGguY2VpbCh4LnJlKSwgeC5pbSA+IDAgPyBNYXRoLmZsb29yKHguaW0pIDogTWF0aC5jZWlsKHguaW0pKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzTmVnYXRpdmUoKSA/IGNlaWwoeCkgOiBmbG9vcih4KTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5zIDwgMCA/IHguY2VpbCgpIDogeC5mbG9vcigpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBmaXgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGZpeCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpeDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGaXggPSBjcmVhdGVGaXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZsb29yID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBuYW1lID0gJ2Zsb29yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdyb3VuZCddO1xudmFyIGNyZWF0ZUZsb29yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgcm91bmQgPSBfcmVmLnJvdW5kO1xuXG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgbWludXMgaW5maW5pdHkuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcigzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGguZmxvb3IoMy44KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZsb29yKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC01XG4gICAqICAgIG1hdGguZmxvb3IoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTVcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguZmxvb3IoYykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAzaVxuICAgKlxuICAgKiAgICBtYXRoLmZsb29yKFszLjIsIDMuOCwgLTQuN10pIC8vIHJldHVybnMgQXJyYXkgWzMsIDMsIC01XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZml4LCByb3VuZFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFJvdW5kZWQgdmFsdWVcbiAgICovXG4gIHZhciBmbG9vciA9IHR5cGVkKCdmbG9vcicsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHJvdW5kKHgpLCBjb25maWcuZXBzaWxvbikpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmZsb29yKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5mbG9vcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LmZsb29yKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGZsb29yKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBmbG9vciwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsb29yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZsb29yID0gY3JlYXRlRmxvb3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUdjZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDRcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZ2NkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVHY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIG9yIG1vcmUgdmFsdWVzIG9yIGFycmF5cy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmdjZChhLCBiKVxuICAgKiAgICBtYXRoLmdjZChhLCBiLCBjLCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmdjZCgtNCwgNikgICAgICAgICAgICAgIC8vIHJldHVybnMgMlxuICAgKiAgICBtYXRoLmdjZCgyNSwgMTUsIC0xMCkgICAgICAgIC8vIHJldHVybnMgNVxuICAgKlxuICAgKiAgICBtYXRoLmdjZChbOCwgLTRdLCBbMTIsIDZdKSAgIC8vIHJldHVybnMgWzQsIDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBsY20sIHhnY2RcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgVHdvIG9yIG1vcmUgaW50ZWdlciBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yXG4gICAqL1xuXG4gIHZhciBnY2QgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5nY2ROdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2djZEJpZ051bWJlcixcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5nY2QoeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA0KHgsIHksIGdjZCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgZ2NkLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgZ2NkKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBnY2QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGdjZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZ2NkKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHgsIHksIGdjZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgZ2NkLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGdjZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBnY2QsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGdjZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogbmVlZCBhIHNtYXJ0ZXIgbm90YXRpb24gaGVyZVxuICAgICdBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXIsIC4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXJBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGEsIGIsIGFyZ3MpIHtcbiAgICAgIHZhciByZXMgPSBnY2QoYSwgYik7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXMgPSBnY2QocmVzLCBhcmdzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZ2NkO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIGdjZCBmb3IgQmlnTnVtYmVyc1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIGdyZWF0ZXN0IGNvbW1vbiBkZW5vbWluYXRvciBvZiBhIGFuZCBiXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9nY2RCaWdOdW1iZXIoYSwgYikge1xuICAgIGlmICghYS5pc0ludCgpIHx8ICFiLmlzSW50KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBnY2QgbXVzdCBiZSBpbnRlZ2VyIG51bWJlcnMnKTtcbiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cblxuXG4gICAgdmFyIHplcm8gPSBuZXcgQmlnTnVtYmVyKDApO1xuXG4gICAgd2hpbGUgKCFiLmlzWmVybygpKSB7XG4gICAgICB2YXIgciA9IGEubW9kKGIpO1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcjtcbiAgICB9XG5cbiAgICByZXR1cm4gYS5sdCh6ZXJvKSA/IGEubmVnKCkgOiBhO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlR2NkID0gY3JlYXRlR2NkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVIeXBvdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBuYW1lID0gJ2h5cG90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGRTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3NxcnQnLCAnc21hbGxlcicsICdpc1Bvc2l0aXZlJ107XG52YXIgY3JlYXRlSHlwb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgaHlwb3RlbnVzYSBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICAgaHlwb3QoYSwgYiwgYywgLi4uKSA9IHNxcnQoYV4yICsgYl4yICsgY14yICsgLi4uKVxuICAgKlxuICAgKiBGb3IgbWF0cml4IGlucHV0LCB0aGUgaHlwb3RlbnVzYSBpcyBjYWxjdWxhdGVkIGZvciBhbGwgdmFsdWVzIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaHlwb3QoYSwgYiwgLi4uKVxuICAgKiAgICAgbWF0aC5oeXBvdChbYSwgYiwgYywgLi4uXSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmh5cG90KDMsIDQpICAgICAgLy8gNVxuICAgKiAgICAgbWF0aC5oeXBvdCgzLCA0LCA1KSAgIC8vIDcuMDcxMDY3ODExODY1NDc1NVxuICAgKiAgICAgbWF0aC5oeXBvdChbMywgNCwgNV0pIC8vIDcuMDcxMDY3ODExODY1NDc1NVxuICAgKiAgICAgbWF0aC5oeXBvdCgtMikgICAgICAgIC8vIDJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBhYnMsIG5vcm1cbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGFyZ3MgICAgQSBsaXN0IHdpdGggbnVtZXJpYyB2YWx1ZXMgb3IgYW4gQXJyYXkgb3IgTWF0cml4LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXggYW5kIEFycmF5IGlucHV0IGlzIGZsYXR0ZW5lZCBhbmQgcmV0dXJucyBhXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBudW1iZXIgZm9yIHRoZSB3aG9sZSBtYXRyaXguXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgaHlwb3RoZW51c2Egb2YgdGhlIGlucHV0IHZhbHVlcy5cbiAgICovXG4gIHZhciBoeXBvdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uIG51bWJlciB8IEJpZ051bWJlcic6IF9oeXBvdCxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIGh5cG90LmFwcGx5KGh5cG90LCAoMCwgX2FycmF5LmZsYXR0ZW4pKHgpKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBoeXBvdC5hcHBseShoeXBvdCwgKDAsIF9hcnJheS5mbGF0dGVuKSh4LnRvQXJyYXkoKSkpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2EgZm9yIGFuIEFycmF5IHdpdGggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlciB8IEJpZ051bWJlcj59IGFyZ3NcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyfSBSZXR1cm5zIHRoZSByZXN1bHRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2h5cG90KGFyZ3MpIHtcbiAgICAvLyBjb2RlIGJhc2VkIG9uIGBoeXBvdGAgZnJvbSBlczYtc2hpbTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGF1bG1pbGxyL2VzNi1zaGltL2Jsb2IvbWFzdGVyL2VzNi1zaGltLmpzI0wxNjE5LUwxNjMzXG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgdmFyIGxhcmdlc3QgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhYnMoYXJnc1tpXSk7XG5cbiAgICAgIGlmIChzbWFsbGVyKGxhcmdlc3QsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseVNjYWxhcihyZXN1bHQsIG11bHRpcGx5U2NhbGFyKGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSksIGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSkpKTtcbiAgICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKHJlc3VsdCwgMSk7XG4gICAgICAgIGxhcmdlc3QgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGFkZFNjYWxhcihyZXN1bHQsIGlzUG9zaXRpdmUodmFsdWUpID8gbXVsdGlwbHlTY2FsYXIoZGl2aWRlU2NhbGFyKHZhbHVlLCBsYXJnZXN0KSwgZGl2aWRlU2NhbGFyKHZhbHVlLCBsYXJnZXN0KSkgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG11bHRpcGx5U2NhbGFyKGxhcmdlc3QsIHNxcnQocmVzdWx0KSk7XG4gIH1cblxuICByZXR1cm4gaHlwb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlSHlwb3QgPSBjcmVhdGVIeXBvdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTGNtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsY20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlTGNtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgZm9yIHR3byBvciBtb3JlIHZhbHVlcyBvciBhcnJheXMuXG4gICAqXG4gICAqIGxjbSBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICAgbGNtKGEsIGIpID0gYWJzKGEgKiBiKSAvIGdjZChhLCBiKVxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGNtKGEsIGIpXG4gICAqICAgIG1hdGgubGNtKGEsIGIsIGMsIC4uLilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubGNtKDQsIDYpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMlxuICAgKiAgICBtYXRoLmxjbSg2LCAyMSkgICAgICAgICAgICAgIC8vIHJldHVybnMgNDJcbiAgICogICAgbWF0aC5sY20oNiwgMjEsIDUpICAgICAgICAgICAvLyByZXR1cm5zIDIxMFxuICAgKlxuICAgKiAgICBtYXRoLmxjbShbNCwgNl0sIFs2LCAyMV0pICAgIC8vIHJldHVybnMgWzEyLCA0Ml1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGdjZCwgeGdjZFxuICAgKlxuICAgKiBAcGFyYW0gey4uLiBudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgVHdvIG9yIG1vcmUgaW50ZWdlciBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGVcbiAgICovXG5cbiAgdmFyIGxjbSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmxjbU51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfbGNtQmlnTnVtYmVyLFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmxjbSh5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDYoeCwgeSwgbGNtKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBsY20sIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsY20pO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxjbShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGNtKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsY20oeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbGNtLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsY20sIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgbGNtLCB0cnVlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGxjbSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGNtLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiBuZWVkIGEgc21hcnRlciBub3RhdGlvbiBoZXJlXG4gICAgJ0FycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgLi4uQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYSwgYiwgYXJncykge1xuICAgICAgdmFyIHJlcyA9IGxjbShhLCBiKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlcyA9IGxjbShyZXMsIGFyZ3NbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsY207XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgbGNtIGZvciB0d28gQmlnTnVtYmVyc1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgb2YgYSBhbmQgYlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbGNtQmlnTnVtYmVyKGEsIGIpIHtcbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKGEuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGlmIChiLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYjtcbiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cbiAgICAvLyBldmFsdWF0ZSBsY20gaGVyZSBpbmxpbmUgdG8gcmVkdWNlIG92ZXJoZWFkXG5cblxuICAgIHZhciBwcm9kID0gYS50aW1lcyhiKTtcblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgdmFyIHQgPSBiO1xuICAgICAgYiA9IGEubW9kKHQpO1xuICAgICAgYSA9IHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2QuZGl2KGEpLmFicygpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTGNtID0gY3JlYXRlTGNtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsb2cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2RpdmlkZVNjYWxhcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlTG9nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nKHgpXG4gICAqICAgIG1hdGgubG9nKHgsIGJhc2UpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxvZygzLjUpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxLjI1Mjc2Mjk2ODQ5NTM2OFxuICAgKiAgICBtYXRoLmV4cChtYXRoLmxvZygyLjQpKSAgICAgICAgLy8gcmV0dXJucyAyLjRcbiAgICpcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTAwMDBcbiAgICogICAgbWF0aC5sb2coMTAwMDAsIDEwKSAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmxvZygxMDAwMCkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqICAgIG1hdGgubG9nKDEwMjQsIDIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgIG1hdGgucG93KDIsIDEwKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nMiwgbG9nMTAsIGxvZzFwXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IFtiYXNlPWVdXG4gICAqICAgICAgICAgICAgT3B0aW9uYWwgYmFzZSBmb3IgdGhlIGxvZ2FyaXRobS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgbmF0dXJhbFxuICAgKiAgICAgICAgICAgIGxvZ2FyaXRobSBvZiBgeGAgaXMgY2FsY3VsYXRlZC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGxvZ2FyaXRobSBvZiBgeGBcbiAgICovXG4gIHZhciBsb2cgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZ051bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5sb2coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubG9nKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG93bmdyYWRlIHRvIG51bWJlciwgcmV0dXJuIENvbXBsZXggdmFsdWVkIHJlc3VsdFxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKS5sb2coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgbG9nYXJpdGhtIGZvciBhIHNwZWNpZmllZCBiYXNlLCBsb2coeCwgYmFzZSlcbiAgICAgIHJldHVybiBkaXZpZGVTY2FsYXIobG9nKHgpLCBsb2coYmFzZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsb2c7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nID0gY3JlYXRlTG9nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxMCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2xvZzEwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107XG52YXIgY3JlYXRlTG9nMTAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBfQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSAxMC1iYXNlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGN1bGF0aW5nIGBsb2coeCwgMTApYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzEwKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzEwKDAuMDAwMDEpICAgICAgICAgICAgLy8gcmV0dXJucyAtNVxuICAgKiAgICBtYXRoLmxvZzEwKDEwMDAwKSAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nKDEwMDAwKSAvIG1hdGgubG9nKDEwKSAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTAwMDBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nLCBsb2cxcCwgbG9nMlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGB4YFxuICAgKi9cbiAgdmFyIGxvZzEwID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5sb2cxME51bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCwgMCkubG9nKCkuZGl2KE1hdGguTE4xMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCkubG9nKCkuZGl2KE1hdGguTE4xMCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sb2coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleCh4LnRvTnVtYmVyKCksIDApLmxvZygpLmRpdihNYXRoLkxOMTApO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBsb2cxMCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxvZzEwO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzEwID0gY3JlYXRlTG9nMTA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzFwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nMXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2RpdmlkZVNjYWxhcicsICdsb2cnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBsb2cgPSBfcmVmLmxvZyxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtIG9mIGEgYHZhbHVlKzFgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMXAoeClcbiAgICogICAgbWF0aC5sb2cxcCh4LCBiYXNlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cxcCgyLjUpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEuMjUyNzYyOTY4NDk1MzY4XG4gICAqICAgIG1hdGguZXhwKG1hdGgubG9nMXAoMS40KSkgICAgICAgLy8gcmV0dXJucyAyLjRcbiAgICpcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMDAwXG4gICAqICAgIG1hdGgubG9nMXAoOTk5OSwgMTApICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nMXAoOTk5OSkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgbG9nMiwgbG9nMTBcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYHgrMWAuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gW2Jhc2U9ZV1cbiAgICogICAgICAgICAgICBPcHRpb25hbCBiYXNlIGZvciB0aGUgbG9nYXJpdGhtLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBuYXR1cmFsXG4gICAqICAgICAgICAgICAgbG9nYXJpdGhtIG9mIGB4KzFgIGlzIGNhbGN1bGF0ZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYHgrMWBcbiAgICovXG4gIHZhciBsb2cxcCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAtMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZzFwKSh4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGNvbXBsZXggdmFsdWUgY29tcHV0YXRpb25cbiAgICAgICAgcmV0dXJuIF9sb2cxcENvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogX2xvZzFwQ29tcGxleCxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICB2YXIgeSA9IHgucGx1cygxKTtcblxuICAgICAgaWYgKCF5LmlzTmVnYXRpdmUoKSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHkubG4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIF9sb2cxcENvbXBsZXgobmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGxvZzFwKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgbG9nYXJpdGhtIGZvciBhIHNwZWNpZmllZCBiYXNlLCBsb2cxcCh4LCBiYXNlKVxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihsb2cxcCh4KSwgbG9nKGJhc2UpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIGNvbXBsZXggbnVtYmVyICsgMVxuICAgKiBAcGFyYW0ge0NvbXBsZXh9IHhcbiAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9sb2cxcENvbXBsZXgoeCkge1xuICAgIHZhciB4UmUxcCA9IHgucmUgKyAxO1xuICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZyhNYXRoLnNxcnQoeFJlMXAgKiB4UmUxcCArIHguaW0gKiB4LmltKSksIE1hdGguYXRhbjIoeC5pbSwgeFJlMXApKTtcbiAgfVxuXG4gIHJldHVybiBsb2cxcDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxcCA9IGNyZWF0ZUxvZzFwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIDItYmFzZSBvZiBhIHZhbHVlLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGN1bGF0aW5nIGBsb2coeCwgMilgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cyKDAuMDMxMjUpICAgICAgICAgICAvLyByZXR1cm5zIC01XG4gICAqICAgIG1hdGgubG9nMigxNikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nMigxNikgLyBtYXRoLmxvZzIoMikgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgucG93KDIsIDQpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXhwLCBsb2csIGxvZzFwLCBsb2cxMFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIDItYmFzZSBsb2dhcml0aG0gb2YgYHhgXG4gICAqL1xuICB2YXIgbG9nMiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIubG9nMk51bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBfbG9nMkNvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogX2xvZzJDb21wbGV4LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIGlmICgheC5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LmxvZygyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIF9sb2cyQ29tcGxleChuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nMik7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBsb2cyIGZvciBhIGNvbXBsZXggdmFsdWVcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbG9nMkNvbXBsZXgoeCkge1xuICAgIHZhciBuZXdYID0gTWF0aC5zcXJ0KHgucmUgKiB4LnJlICsgeC5pbSAqIHguaW0pO1xuICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZzIgPyBNYXRoLmxvZzIobmV3WCkgOiBNYXRoLmxvZyhuZXdYKSAvIE1hdGguTE4yLCBNYXRoLmF0YW4yKHguaW0sIHgucmUpIC8gTWF0aC5MTjIpO1xuICB9XG5cbiAgcmV0dXJuIGxvZzI7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nMiA9IGNyZWF0ZUxvZzI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1vZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ21vZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVNb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTYuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG1vZHVsdXMsIHRoZSByZW1haW5kZXIgb2YgYW4gaW50ZWdlciBkaXZpc2lvbi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogVGhlIG1vZHVsdXMgaXMgZGVmaW5lZCBhczpcbiAgICpcbiAgICogICAgIHggLSB5ICogZmxvb3IoeCAvIHkpXG4gICAqXG4gICAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubW9kKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm1vZCg4LCAzKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICogICAgbWF0aC5tb2QoMTEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIGlzT2RkKHgpIHtcbiAgICogICAgICByZXR1cm4gbWF0aC5tb2QoeCwgMikgIT0gMFxuICAgKiAgICB9XG4gICAqXG4gICAqICAgIGlzT2RkKDIpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgaXNPZGQoMykgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0geCBEaXZpZGVuZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB5IERpdmlzb3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIGB4YCBkaXZpZGVkIGJ5IGB5YC5cbiAgICovXG5cbiAgdmFyIG1vZCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm1vZE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHkuaXNaZXJvKCkgPyB4IDogeC5tb2QoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5tb2QoeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA1KHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIG1vZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbW9kKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtb2QobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG1vZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBtb2QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBtb2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbW9kLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBtb2QsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbW9kO1xufSk7XG5leHBvcnRzLmNyZWF0ZU1vZCA9IGNyZWF0ZU1vZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTXVsdGlwbHkgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ211bHRpcGx5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVNdWx0aXBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIE11bHRpcGx5IHR3byBvciBtb3JlIHZhbHVlcywgYHggKiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgbWF0cml4IHByb2R1Y3QgaXMgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm11bHRpcGx5KHgsIHkpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoeCwgeSwgeiwgLi4uKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aXBseSg0LCA1LjIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAyMC44XG4gICAqICAgIG1hdGgubXVsdGlwbHkoMiwgMywgNCkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMjRcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDUgKyAxNGlcbiAgICpcbiAgICogICAgY29uc3QgYyA9IFtbMSwgMl0sIFs0LCAzXV1cbiAgICogICAgY29uc3QgZCA9IFtbMSwgMiwgM10sIFszLCAtNCwgN11dXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYywgZCkgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzcsIC02LCAxN10sIFsxMywgLTQsIDMzXV1cbiAgICpcbiAgICogICAgY29uc3QgZSA9IG1hdGgudW5pdCgnMi4xIGttJylcbiAgICogICAgbWF0aC5tdWx0aXBseSgzLCBlKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgNi4zIGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGUsIHByb2QsIGNyb3NzLCBkb3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gbXVsdGlwbHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSBNdWx0aXBsaWNhdGlvbiBvZiBgeGAgYW5kIGB5YFxuICAgKi9cblxuICB2YXIgbXVsdGlwbHkgPSB0eXBlZChuYW1lLCAoMCwgX29iamVjdC5leHRlbmQpKHtcbiAgICAvLyB3ZSBleHRlbmQgdGhlIHNpZ25hdHVyZXMgb2YgbXVsdGlwbHlTY2FsYXIgd2l0aCBzaWduYXR1cmVzIGRlYWxpbmcgd2l0aCBtYXRyaWNlc1xuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICAgIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeSkpOyAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cblxuICAgICAgdmFyIG0gPSBtdWx0aXBseShtYXRyaXgoeCksIG1hdHJpeCh5KSk7IC8vIHJldHVybiBhcnJheSBvciBzY2FsYXJcblxuICAgICAgcmV0dXJuICgwLCBfaXMuaXNNYXRyaXgpKG0pID8gbS52YWx1ZU9mKCkgOiBtO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRpbWVuc2lvbnNcbiAgICAgIHZhciB4c2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgdmFyIHlzaXplID0geS5zaXplKCk7IC8vIGNoZWNrIGRpbWVuc2lvbnNcblxuICAgICAgX3ZhbGlkYXRlTWF0cml4RGltZW5zaW9ucyh4c2l6ZSwgeXNpemUpOyAvLyBwcm9jZXNzIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAoeHNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zXG4gICAgICAgIGlmICh5c2l6ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAvLyBWZWN0b3IgKiBWZWN0b3JcbiAgICAgICAgICByZXR1cm4gX211bHRpcGx5VmVjdG9yVmVjdG9yKHgsIHksIHhzaXplWzBdKTtcbiAgICAgICAgfSAvLyBWZWN0b3IgKiBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoeCwgeSk7XG4gICAgICB9IC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zXG5cblxuICAgICAgaWYgKHlzaXplLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBNYXRyaXggKiBWZWN0b3JcbiAgICAgICAgcmV0dXJuIF9tdWx0aXBseU1hdHJpeFZlY3Rvcih4LCB5KTtcbiAgICAgIH0gLy8gTWF0cml4ICogTWF0cml4XG5cblxuICAgICAgcmV0dXJuIF9tdWx0aXBseU1hdHJpeE1hdHJpeCh4LCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIE1hdHJpeCAqIE1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG11bHRpcGx5KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBNYXRyaXggKiBNYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgoeCwgeS5zdG9yYWdlKCkpLCB5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBhbnknOiBtdWx0aXBseVNjYWxhcixcbiAgICAnYW55LCBhbnksIC4uLmFueSc6IGZ1bmN0aW9uIGFueUFueUFueSh4LCB5LCByZXN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbXVsdGlwbHkoeCwgeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseShyZXN1bHQsIHJlc3RbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfSwgbXVsdGlwbHlTY2FsYXIuc2lnbmF0dXJlcykpO1xuXG4gIGZ1bmN0aW9uIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoc2l6ZTEsIHNpemUyKSB7XG4gICAgLy8gY2hlY2sgbGVmdCBvcGVyYW5kIGRpbWVuc2lvbnNcbiAgICBzd2l0Y2ggKHNpemUxLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyBjaGVjayBzaXplMlxuICAgICAgICBzd2l0Y2ggKHNpemUyLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIC8vIFZlY3RvciB4IFZlY3RvclxuICAgICAgICAgICAgaWYgKHNpemUxWzBdICE9PSBzaXplMlswXSkge1xuICAgICAgICAgICAgICAvLyB0aHJvdyBlcnJvclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoIGluIG11bHRpcGxpY2F0aW9uLiBWZWN0b3JzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBWZWN0b3IgeCBNYXRyaXhcbiAgICAgICAgICAgIGlmIChzaXplMVswXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gVmVjdG9yIGxlbmd0aCAoJyArIHNpemUxWzBdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggcm93cyAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBCIGhhcyAnICsgc2l6ZTIubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgLy8gY2hlY2sgc2l6ZTJcbiAgICAgICAgc3dpdGNoIChzaXplMi5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAvLyBNYXRyaXggeCBWZWN0b3JcbiAgICAgICAgICAgIGlmIChzaXplMVsxXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IGNvbHVtbnMgKCcgKyBzaXplMVsxXSArICcpIG11c3QgbWF0Y2ggVmVjdG9yIGxlbmd0aCAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBNYXRyaXggeCBNYXRyaXhcbiAgICAgICAgICAgIGlmIChzaXplMVsxXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IEEgY29sdW1ucyAoJyArIHNpemUxWzFdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiByb3dzICgnICsgc2l6ZTJbMF0gKyAnKScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IG11bHRpcGx5IGEgMSBvciAyIGRpbWVuc2lvbmFsIG1hdHJpeCAoTWF0cml4IEIgaGFzICcgKyBzaXplMi5sZW5ndGggKyAnIGRpbWVuc2lvbnMpJyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBBIGhhcyAnICsgc2l6ZTEubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICAgU2NhbGFyIHZhbHVlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX211bHRpcGx5VmVjdG9yVmVjdG9yKGEsIGIsIG4pIHtcbiAgICAvLyBjaGVjayBlbXB0eSB2ZWN0b3JcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgdHdvIGVtcHR5IHZlY3RvcnMnKTtcbiAgICB9IC8vIGEgZGVuc2VcblxuXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgZGVuc2VcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG5cblxuICAgIHZhciBjID0gbWYoYWRhdGFbMF0sIGJkYXRhWzBdKTsgLy8gbG9vcCBkYXRhXG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IG47IGkrKykge1xuICAgICAgLy8gbXVsdGlwbHkgYW5kIGFjY3VtdWxhdGVcbiAgICAgIGMgPSBhZihjLCBtZihhZGF0YVtpXSwgYmRhdGFbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE0pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoYSwgYikge1xuICAgIC8vIHByb2Nlc3Mgc3RvcmFnZVxuICAgIGlmIChiLnN0b3JhZ2UoKSAhPT0gJ2RlbnNlJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciBTcGFyc2VNYXRyaXggbm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTSlcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBNYXRyaXggICAoTXhOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIERlbnNlIFZlY3RvciAgIChOKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciBhbGVuZ3RoID0gYXNpemVbMF07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBzdW0gKGRvIG5vdCBpbml0aWFsaXplIGl0IHdpdGggemVybylcbiAgICAgIHZhciBzdW0gPSBtZihhZGF0YVswXSwgYmRhdGFbMF1bal0pOyAvLyBsb29wIHZlY3RvclxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFsZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihhZGF0YVtpXSwgYmRhdGFbaV1bal0pKTtcbiAgICAgIH1cblxuICAgICAgY1tqXSA9IHN1bTtcbiAgICB9IC8vIHJldHVybiBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGEuY3JlYXRlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogYyxcbiAgICAgIHNpemU6IFtiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTSlcbiAgICovXG5cblxuICB2YXIgX211bHRpcGx5TWF0cml4VmVjdG9yID0gdHlwZWQoJ19tdWx0aXBseU1hdHJpeFZlY3RvcicsIHtcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yLFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseVNwYXJzZU1hdHJpeFZlY3RvclxuICB9KTtcbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIE1hdHJpeCAgICAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBNYXRyaXggICAgICAgICAoTXhDKVxuICAgKi9cblxuXG4gIHZhciBfbXVsdGlwbHlNYXRyaXhNYXRyaXggPSB0eXBlZCgnX211bHRpcGx5TWF0cml4TWF0cml4Jywge1xuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBfbXVsdGlwbHlEZW5zZU1hdHJpeERlbnNlTWF0cml4LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogX211bHRpcGx5RGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgsXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChNKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yKGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgYWNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgYyA9IFtdOyAvLyBsb29wIG1hdHJpeCBhIHJvd3NcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJvd3M7IGkrKykge1xuICAgICAgLy8gY3VycmVudCByb3dcbiAgICAgIHZhciByb3cgPSBhZGF0YVtpXTsgLy8gc3VtIChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG5cbiAgICAgIHZhciBzdW0gPSBtZihyb3dbMF0sIGJkYXRhWzBdKTsgLy8gbG9vcCBtYXRyaXggYSBjb2x1bW5zXG5cbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYWNvbHVtbnM7IGorKykge1xuICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihyb3dbal0sIGJkYXRhW2pdKSk7XG4gICAgICB9XG5cbiAgICAgIGNbaV0gPSBzdW07XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYXJvd3NdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIERlbnNlTWF0cml4ICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhDKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseURlbnNlTWF0cml4RGVuc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgZGVuc2VcbiAgICB2YXIgYWRhdGEgPSBhLl9kYXRhO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBiIGRlbnNlXG5cbiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGFjb2x1bW5zID0gYXNpemVbMV07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggYSByb3dzXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgIC8vIGN1cnJlbnQgcm93XG4gICAgICB2YXIgcm93ID0gYWRhdGFbaV07IC8vIGluaXRpYWxpemUgcm93IGFycmF5XG5cbiAgICAgIGNbaV0gPSBbXTsgLy8gbG9vcCBtYXRyaXggYiBjb2x1bW5zXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmNvbHVtbnM7IGorKykge1xuICAgICAgICAvLyBzdW0gKGF2b2lkIGluaXRpYWxpemluZyBzdW0gdG8gemVybylcbiAgICAgICAgdmFyIHN1bSA9IG1mKHJvd1swXSwgYmRhdGFbMF1bal0pOyAvLyBsb29wIG1hdHJpeCBhIGNvbHVtbnNcblxuICAgICAgICBmb3IgKHZhciB4ID0gMTsgeCA8IGFjb2x1bW5zOyB4KyspIHtcbiAgICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgICBzdW0gPSBhZihzdW0sIG1mKHJvd1t4XSwgYmRhdGFbeF1bal0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNbaV1bal0gPSBzdW07XG4gICAgICB9XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeChhLCBiKSB7XG4gICAgLy8gYSBkZW5zZVxuICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgc3BhcnNlXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGIgbWF0cml4XG5cbiAgICBpZiAoIWJ2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IERlbnNlIE1hdHJpeCB0aW1lcyBQYXR0ZXJuIG9ubHkgTWF0cml4Jyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgYXJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgYmNvbHVtbnMgPSBic2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjdmFsdWVzID0gW107XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGMgbWF0cml4XG5cbiAgICB2YXIgYyA9IGIuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pOyAvLyBsb29wIGIgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgamIgPSAwOyBqYiA8IGJjb2x1bW5zOyBqYisrKSB7XG4gICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICBjcHRyW2piXSA9IGNpbmRleC5sZW5ndGg7IC8vIGluZGVjZXMgaW4gY29sdW1uIGpiXG5cbiAgICAgIHZhciBrYjAgPSBicHRyW2piXTtcbiAgICAgIHZhciBrYjEgPSBicHRyW2piICsgMV07IC8vIGRvIG5vdCBwcm9jZXNzIGNvbHVtbiBqYiBpZiBubyBkYXRhIGV4aXN0c1xuXG4gICAgICBpZiAoa2IxID4ga2IwKSB7XG4gICAgICAgIC8vIGxhc3Qgcm93IG1hcmsgcHJvY2Vzc2VkXG4gICAgICAgIHZhciBsYXN0ID0gMDsgLy8gbG9vcCBhIHJvd3NcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyBjb2x1bW4gbWFya1xuICAgICAgICAgIHZhciBtYXJrID0gaSArIDE7IC8vIENbaSwgamJdXG5cbiAgICAgICAgICB2YXIgY2lqID0gdm9pZCAwOyAvLyB2YWx1ZXMgaW4gYiBjb2x1bW4galxuXG4gICAgICAgICAgZm9yICh2YXIga2IgPSBrYjA7IGtiIDwga2IxOyBrYisrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIHZhciBpYiA9IGJpbmRleFtrYl07IC8vIGNoZWNrIHZhbHVlIGhhcyBiZWVuIGluaXRpYWxpemVkXG5cbiAgICAgICAgICAgIGlmIChsYXN0ICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAgIC8vIGZpcnN0IHZhbHVlIGluIGNvbHVtbiBqYlxuICAgICAgICAgICAgICBjaWogPSBtZihhZGF0YVtpXVtpYl0sIGJ2YWx1ZXNba2JdKTsgLy8gdXBkYXRlIG1hcmtcblxuICAgICAgICAgICAgICBsYXN0ID0gbWFyaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFjY3VtdWxhdGUgdmFsdWVcbiAgICAgICAgICAgICAgY2lqID0gYWYoY2lqLCBtZihhZGF0YVtpXVtpYl0sIGJ2YWx1ZXNba2JdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBjaGVjayBjb2x1bW4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB2YWx1ZSAhPSAwXG5cblxuICAgICAgICAgIGlmIChsYXN0ID09PSBtYXJrICYmICFlcShjaWosIHplcm8pKSB7XG4gICAgICAgICAgICAvLyBwdXNoIHJvdyAmIHZhbHVlXG4gICAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIGN2YWx1ZXMucHVzaChjaWopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAoTSwgMSlcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhWZWN0b3IoYSwgYikge1xuICAgIC8vIGEgc3BhcnNlXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgYSBtYXRyaXhcblxuICAgIGlmICghYXZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgUGF0dGVybiBvbmx5IE1hdHJpeCB0aW1lcyBEZW5zZSBNYXRyaXgnKTtcbiAgICB9IC8vIGIgZGVuc2VcblxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdO1xuICAgIHZhciBicm93cyA9IGIuX3NpemVbMF07IC8vIHJlc3VsdFxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdXBkYXRlIHB0clxuXG4gICAgY3B0clswXSA9IDA7IC8vIHJvd3MgaW4gYlxuXG4gICAgZm9yICh2YXIgaWIgPSAwOyBpYiA8IGJyb3dzOyBpYisrKSB7XG4gICAgICAvLyBiW2liXVxuICAgICAgdmFyIHZiaSA9IGJkYXRhW2liXTsgLy8gY2hlY2sgYltpYl0gIT0gMCwgYXZvaWQgbG9vcHNcblxuICAgICAgaWYgKCFlcSh2YmksIHplcm8pKSB7XG4gICAgICAgIC8vIEEgdmFsdWVzICYgaW5kZXggaW4gaWIgY29sdW1uXG4gICAgICAgIGZvciAodmFyIGthMCA9IGFwdHJbaWJdLCBrYTEgPSBhcHRyW2liICsgMV0sIGthID0ga2EwOyBrYSA8IGthMTsga2ErKykge1xuICAgICAgICAgIC8vIGEgcm93XG4gICAgICAgICAgdmFyIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgaWYgKCF3W2lhXSkge1xuICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgIHdbaWFdID0gdHJ1ZTsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDXG5cbiAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBXG5cbiAgICAgICAgICAgIHhbaWFdID0gbWYodmJpLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpLCBhdmFsdWVzW2thXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gY29weSB2YWx1ZXMgZnJvbSB4IHRvIGNvbHVtbiBqYiBvZiBjXG5cblxuICAgIGZvciAodmFyIHAxID0gY2luZGV4Lmxlbmd0aCwgcCA9IDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAvLyByb3dcbiAgICAgIHZhciBpYyA9IGNpbmRleFtwXTsgLy8gY29weSB2YWx1ZVxuXG4gICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbMV0gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIDFdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhDKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVNwYXJzZU1hdHJpeERlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIHNwYXJzZVxuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGEgbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IFBhdHRlcm4gb25seSBNYXRyaXggdGltZXMgRGVuc2UgTWF0cml4Jyk7XG4gICAgfSAvLyBiIGRlbnNlXG5cblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYS5fc2l6ZVswXTtcbiAgICB2YXIgYnJvd3MgPSBiLl9zaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGIuX3NpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBlcXVhbFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IFtdO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBjIG1hdHJpeFxuXG4gICAgdmFyIGMgPSBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW2Fyb3dzLCBiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeCA9IFtdOyAvLyB2ZWN0b3Igd2l0aCBtYXJrcyBpbmRpY2F0aW5nIGEgdmFsdWUgeFtpXSBleGlzdHMgaW4gYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIGxvb3AgYiBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqYiA9IDA7IGpiIDwgYmNvbHVtbnM7IGpiKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGNwdHJbamJdID0gY2luZGV4Lmxlbmd0aDsgLy8gbWFyayBpbiB3b3Jrc3BhY2UgZm9yIGN1cnJlbnQgY29sdW1uXG5cbiAgICAgIHZhciBtYXJrID0gamIgKyAxOyAvLyByb3dzIGluIGpiXG5cbiAgICAgIGZvciAodmFyIGliID0gMDsgaWIgPCBicm93czsgaWIrKykge1xuICAgICAgICAvLyBiW2liLCBqYl1cbiAgICAgICAgdmFyIHZiaWogPSBiZGF0YVtpYl1bamJdOyAvLyBjaGVjayBiW2liLCBqYl0gIT0gMCwgYXZvaWQgbG9vcHNcblxuICAgICAgICBpZiAoIWVxKHZiaWosIHplcm8pKSB7XG4gICAgICAgICAgLy8gQSB2YWx1ZXMgJiBpbmRleCBpbiBpYiBjb2x1bW5cbiAgICAgICAgICBmb3IgKHZhciBrYTAgPSBhcHRyW2liXSwga2ExID0gYXB0cltpYiArIDFdLCBrYSA9IGthMDsga2EgPCBrYTE7IGthKyspIHtcbiAgICAgICAgICAgIC8vIGEgcm93XG4gICAgICAgICAgICB2YXIgaWEgPSBhaW5kZXhba2FdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqXG5cbiAgICAgICAgICAgIGlmICh3W2lhXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAvLyBpYSBpcyBuZXcgZW50cnkgaW4galxuICAgICAgICAgICAgICB3W2lhXSA9IG1hcms7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQ1xuXG4gICAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBXG5cbiAgICAgICAgICAgICAgeFtpYV0gPSBtZih2YmlqLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBpIGV4aXN0cyBpbiBDIGFscmVhZHlcbiAgICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpaiwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY29weSB2YWx1ZXMgZnJvbSB4IHRvIGNvbHVtbiBqYiBvZiBjXG5cblxuICAgICAgZm9yICh2YXIgcDAgPSBjcHRyW2piXSwgcDEgPSBjaW5kZXgubGVuZ3RoLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbYmNvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBjO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgc3BhcnNlXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBzcGFyc2VcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGIuX3NpemVbMV07IC8vIGZsYWcgaW5kaWNhdGluZyBib3RoIG1hdHJpY2VzIChhICYgYikgY29udGFpbiBkYXRhXG5cbiAgICB2YXIgdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjdmFsdWVzID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGMgbWF0cml4XG5cbiAgICB2YXIgYyA9IGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pOyAvLyB3b3Jrc3BhY2VcblxuICAgIHZhciB4ID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyaWFibGVzXG5cbiAgICB2YXIga2EsIGthMCwga2ExLCBrYiwga2IwLCBrYjEsIGlhLCBpYjsgLy8gbG9vcCBiIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGpiID0gMDsgamIgPCBiY29sdW1uczsgamIrKykge1xuICAgICAgLy8gdXBkYXRlIHB0clxuICAgICAgY3B0cltqYl0gPSBjaW5kZXgubGVuZ3RoOyAvLyBtYXJrIGluIHdvcmtzcGFjZSBmb3IgY3VycmVudCBjb2x1bW5cblxuICAgICAgdmFyIG1hcmsgPSBqYiArIDE7IC8vIEIgdmFsdWVzICYgaW5kZXggaW4galxuXG4gICAgICBmb3IgKGtiMCA9IGJwdHJbamJdLCBrYjEgPSBicHRyW2piICsgMV0sIGtiID0ga2IwOyBrYiA8IGtiMTsga2IrKykge1xuICAgICAgICAvLyBiIHJvd1xuICAgICAgICBpYiA9IGJpbmRleFtrYl07IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgLy8gbG9vcCB2YWx1ZXMgaW4gYVs6LGliXVxuICAgICAgICAgIGZvciAoa2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7IC8vIHgoaWEpID0gQVxuXG4gICAgICAgICAgICAgIHhbaWFdID0gbWYoYnZhbHVlc1trYl0sIGF2YWx1ZXNba2FdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICAgICAgICB4W2lhXSA9IGFmKHhbaWFdLCBtZihidmFsdWVzW2tiXSwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbG9vcCB2YWx1ZXMgaW4gYVs6LGliXVxuICAgICAgICAgIGZvciAoa2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyBtYXRyaXggdmFsdWVzIChwYXR0ZXJuIG1hdHJpeClcblxuXG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIC8vIGNvcHkgdmFsdWVzIGZyb20geCB0byBjb2x1bW4gamIgb2YgY1xuICAgICAgICBmb3IgKHZhciBwMCA9IGNwdHJbamJdLCBwMSA9IGNpbmRleC5sZW5ndGgsIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgICAgIGN2YWx1ZXNbcF0gPSB4W2ljXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIHJldHVybiBtdWx0aXBseTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseSA9IGNyZWF0ZU11bHRpcGx5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseVNjYWxhciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbXVsdGlwbHlTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVNdWx0aXBseVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIE11bHRpcGx5IHR3byBzY2FsYXIgdmFsdWVzLCBgeCAqIHlgLlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCB1c2U6IGl0IGlzIHVzZWQgYnkgdGhlIHB1YmxpYyBmdW5jdGlvblxuICAgKiBgbXVsdGlwbHlgXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gbXVsdGlwbHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0gICAgIE11bHRpcGxpY2F0aW9uIG9mIGB4YCBhbmQgYHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgbXVsdGlwbHlTY2FsYXIgPSB0eXBlZCgnbXVsdGlwbHlTY2FsYXInLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5tdWx0aXBseU51bWJlcixcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bCh5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC50aW1lcyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bCh5KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlciB8IENvbXBsZXgsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXhVbml0KHgsIHkpIHtcbiAgICAgIHZhciByZXMgPSB5LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSByZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZSh4KSA6IG11bHRpcGx5U2NhbGFyKHJlcy52YWx1ZSwgeCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ1VuaXQsIG51bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyIHwgQ29tcGxleCc6IGZ1bmN0aW9uIFVuaXROdW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXgoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHJlcy52YWx1ZSA9PT0gbnVsbCA/IHJlcy5fbm9ybWFsaXplKHkpIDogbXVsdGlwbHlTY2FsYXIocmVzLnZhbHVlLCB5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bHRpcGx5KHkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtdWx0aXBseVNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseVNjYWxhciA9IGNyZWF0ZU11bHRpcGx5U2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbm9ybSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ3BvdycsICdjb25qJywgJ3NxcnQnLCAnbXVsdGlwbHknLCAnZXF1YWxTY2FsYXInLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbWF0cml4J107XG52YXIgY3JlYXRlTm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBjb25qID0gX3JlZi5jb25qLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG5vcm0gb2YgYSBudW1iZXIsIHZlY3RvciBvciBtYXRyaXguXG4gICAqXG4gICAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHAgaXMgb3B0aW9uYWwuIElmIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gMi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0oeClcbiAgICogICAgbWF0aC5ub3JtKHgsIHApXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFicygtMy41KSAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKiAgICBtYXRoLm5vcm0oLTMuNSkgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0obWF0aC5jb21wbGV4KDMsIC00KSkgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFsxLCAyLCAtM10sIEluZmluaXR5KSAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgIG1hdGgubm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpICAgICAgIC8vIHJldHVybnMgMVxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0oWzMsIDRdLCAyKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpICAgICAgICAgIC8vIHJldHVybnMgNlxuICAgKiAgICBtYXRoLm5vcm0oW1sxLCAyXSwgWzMsIDRdXSwgJ2luZicpICAgICAvLyByZXR1cm5zIDdcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sICdmcm8nKSAgICAgLy8gcmV0dXJucyA1LjQ3NzIyNTU3NTA1MTY2MVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWJzLCBoeXBvdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBub3JtXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IHN0cmluZ30gW3A9Ml1cbiAgICogICAgICAgICAgICBWZWN0b3Igc3BhY2UuXG4gICAqICAgICAgICAgICAgU3VwcG9ydGVkIG51bWJlcnMgaW5jbHVkZSBJbmZpbml0eSBhbmQgLUluZmluaXR5LlxuICAgKiAgICAgICAgICAgIFN1cHBvcnRlZCBzdHJpbmdzIGFyZTogJ2luZicsICctaW5mJywgYW5kICdmcm8nIChUaGUgRnJvYmVuaXVzIG5vcm0pXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gdGhlIHAtbm9ybVxuICAgKi9cbiAgdmFyIG5vcm0gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBNYXRoLmFicyxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgLy8gbm9ybSh4KSA9IGFicyh4KVxuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICBcImJvb2xlYW5cIjogZnVuY3Rpb24gYm9vbGVhbih4KSB7XG4gICAgICAvLyBub3JtKHgpID0gYWJzKHgpXG4gICAgICByZXR1cm4gTWF0aC5hYnMoeCk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIF9ub3JtKG1hdHJpeCh4KSwgMik7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gX25vcm0oeCwgMik7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciB8IGJvb2xlYW4sIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJCb29sZWFuTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgpIHtcbiAgICAgIC8vIGlnbm9yZSBzZWNvbmQgcGFyYW1ldGVyLCBUT0RPOiByZW1vdmUgdGhlIG9wdGlvbiBvZiBzZWNvbmQgcGFyYW1ldGVyIGZvciB0aGVzZSB0eXBlc1xuICAgICAgcmV0dXJuIG5vcm0oeCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgsIHApIHtcbiAgICAgIHJldHVybiBfbm9ybShtYXRyaXgoeCksIHApO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgsIHApIHtcbiAgICAgIHJldHVybiBfbm9ybSh4LCBwKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBub3JtIGZvciBhbiBhcnJheVxuICAgKiBAcGFyYW0ge01hdHJpeH0geFxuICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gcFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBub3JtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9ub3JtKHgsIHApIHtcbiAgICAvLyBzaXplXG4gICAgdmFyIHNpemVYID0geC5zaXplKCk7IC8vIGNoZWNrIGlmIGl0IGlzIGEgdmVjdG9yXG5cbiAgICBpZiAoc2l6ZVgubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBjaGVjayBwXG4gICAgICBpZiAocCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IHAgPT09ICdpbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCwgSW5maW5pdHkpID0gbWF4KGFicyh4KSlcbiAgICAgICAgdmFyIHBpbmYgPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgdiA9IGFicyh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKHYsIHBpbmYpKSB7XG4gICAgICAgICAgICBwaW5mID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gcGluZjtcbiAgICAgIH1cblxuICAgICAgaWYgKHAgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSB8fCBwID09PSAnLWluZicpIHtcbiAgICAgICAgLy8gbm9ybSh4LCAtSW5maW5pdHkpID0gbWluKGFicyh4KSlcbiAgICAgICAgdmFyIG5pbmY7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09PSAwXG5cbiAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciB2ID0gYWJzKHZhbHVlKTtcblxuICAgICAgICAgIGlmICghbmluZiB8fCBzbWFsbGVyKHYsIG5pbmYpKSB7XG4gICAgICAgICAgICBuaW5mID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gbmluZiB8fCAwO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gJ2ZybycpIHtcbiAgICAgICAgcmV0dXJuIF9ub3JtKHgsIDIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHAgPT09ICdudW1iZXInICYmICFpc05hTihwKSkge1xuICAgICAgICAvLyBjaGVjayBwICE9IDBcbiAgICAgICAgaWYgKCFlcXVhbFNjYWxhcihwLCAwKSkge1xuICAgICAgICAgIC8vIG5vcm0oeCwgcCkgPSBzdW0oYWJzKHhpKSBeIHApIF4gMS9wXG4gICAgICAgICAgdmFyIG4gPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgbiA9IGFkZChwb3coYWJzKHZhbHVlKSwgcCksIG4pO1xuICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgIHJldHVybiBwb3cobiwgMSAvIHApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIH0gLy8gaW52YWxpZCBwYXJhbWV0ZXIgdmFsdWVcblxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZScpO1xuICAgIH0gLy8gTXhOIG1hdHJpeFxuXG5cbiAgICBpZiAoc2l6ZVgubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBjaGVjayBwXG4gICAgICBpZiAocCA9PT0gMSkge1xuICAgICAgICAvLyBub3JtKHgpID0gdGhlIGxhcmdlc3QgY29sdW1uIHN1bVxuICAgICAgICB2YXIgYyA9IFtdOyAvLyByZXN1bHRcblxuICAgICAgICB2YXIgbWF4YyA9IDA7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09IDBcblxuICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgIHZhciBqID0gaW5kZXhbMV07XG4gICAgICAgICAgdmFyIGNqID0gYWRkKGNbal0gfHwgMCwgYWJzKHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKGNqLCBtYXhjKSkge1xuICAgICAgICAgICAgbWF4YyA9IGNqO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNbal0gPSBjajtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBtYXhjO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IHAgPT09ICdpbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCkgPSB0aGUgbGFyZ2VzdCByb3cgc3VtXG4gICAgICAgIHZhciByID0gW107IC8vIHJlc3VsdFxuXG4gICAgICAgIHZhciBtYXhyID0gMDsgLy8gc2tpcCB6ZXJvcyBzaW5jZSBhYnMoMCkgPT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgdmFyIGkgPSBpbmRleFswXTtcbiAgICAgICAgICB2YXIgcmkgPSBhZGQocltpXSB8fCAwLCBhYnModmFsdWUpKTtcblxuICAgICAgICAgIGlmIChsYXJnZXIocmksIG1heHIpKSB7XG4gICAgICAgICAgICBtYXhyID0gcmk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcltpXSA9IHJpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIG1heHI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSAnZnJvJykge1xuICAgICAgICAvLyBub3JtKHgpID0gc3FydChzdW0oZGlhZyh4J3gpKSlcbiAgICAgICAgdmFyIGZybyA9IDA7XG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgZnJvID0gYWRkKGZybywgbXVsdGlwbHkodmFsdWUsIGNvbmoodmFsdWUpKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYWJzKHNxcnQoZnJvKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSAyKSB7XG4gICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZSwgbWlzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiBtYXRyaXggc2luZ3VsYXIgdmFsdWUgZGVjb21wb3NpdGlvbicpO1xuICAgICAgfSAvLyBpbnZhbGlkIHBhcmFtZXRlciB2YWx1ZVxuXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIHZhbHVlJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm07XG59KTtcbmV4cG9ydHMuY3JlYXRlTm9ybSA9IGNyZWF0ZU5vcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU50aFJvb3ROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZU50aFJvb3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDZcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbnRoUm9vdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlTnRoUm9vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLlxuICAgKiBUaGUgcHJpbmNpcGFsIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwgaXMgdGhlIHBvc2l0aXZlIHJlYWxcbiAgICogc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uXG4gICAqXG4gICAqICAgICB4XnJvb3QgPSBBXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubnRoUm9vdChhKVxuICAgKiAgICAgbWF0aC5udGhSb290KGEsIHJvb3QpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5udGhSb290KDksIDIpICAgIC8vIHJldHVybnMgMywgYXMgM14yID09IDlcbiAgICogICAgIG1hdGguc3FydCg5KSAgICAgICAgICAvLyByZXR1cm5zIDMsIGFzIDNeMiA9PSA5XG4gICAqICAgICBtYXRoLm50aFJvb3QoNjQsIDMpICAgLy8gcmV0dXJucyA0LCBhcyA0XjMgPT0gNjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeCB8IENvbXBsZXh9IGFcbiAgICogICAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG50aCByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbcm9vdD0yXSAgICBUaGUgcm9vdC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRoZSBudGggcm9vdCBvZiBgYWBcbiAgICovXG5cbiAgdmFyIGNvbXBsZXhFcnIgPSAnJyArICdDb21wbGV4IG51bWJlciBub3Qgc3VwcG9ydGVkIGluIGZ1bmN0aW9uIG50aFJvb3QuICcgKyAnVXNlIG50aFJvb3RzIGluc3RlYWQuJztcbiAgdmFyIG50aFJvb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm50aFJvb3ROdW1iZXIpKHgsIDIpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5udGhSb290TnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBfYmlnTnRoUm9vdCh4LCBuZXcgX0JpZ051bWJlcigyKSk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21wbGV4RXJyKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBudW1iZXInOiBmdW5jdGlvbiBDb21wbGV4TnVtYmVyKHgsIHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21wbGV4RXJyKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaWdOdGhSb290LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBudGhSb290KHgsIDIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRlbnNpdHkgbXVzdCBiZSBvbmUgKG5vIHplcm9zIGluIG1hdHJpeClcbiAgICAgIGlmICh5LmRlbnNpdHkoKSA9PT0gMSkge1xuICAgICAgICAvLyBzcGFyc2UgKyBzcGFyc2VcbiAgICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIG50aFJvb3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhyb3cgZXhjZXB0aW9uXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBudGhSb290LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gZGVuc2l0eSBtdXN0IGJlIG9uZSAobm8gemVyb3MgaW4gbWF0cml4KVxuICAgICAgaWYgKHkuZGVuc2l0eSgpID09PSAxKSB7XG4gICAgICAgIC8vIGRlbnNlICsgc3BhcnNlXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBudGhSb290LCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBudGhSb290KTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIG50aFJvb3QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG50aFJvb3QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBkZW5zaXR5IG11c3QgYmUgb25lIChubyB6ZXJvcyBpbiBtYXRyaXgpXG4gICAgICBpZiAoeS5kZW5zaXR5KCkgPT09IDEpIHtcbiAgICAgICAgLy8gc3BhcnNlIC0gc2NhbGFyXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBudGhSb290LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRocm93IGV4Y2VwdGlvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbnRoUm9vdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbnRoUm9vdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbnRoUm9vdDtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBmb3IgQmlnTnVtYmVycywgc29sdmUgeF5yb290ID09IGFcbiAgICogaHR0cHM6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9OdGhfcm9vdCNKYXZhU2NyaXB0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSByb290XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9iaWdOdGhSb290KGEsIHJvb3QpIHtcbiAgICB2YXIgcHJlY2lzaW9uID0gX0JpZ051bWJlci5wcmVjaXNpb247XG5cbiAgICB2YXIgQmlnID0gX0JpZ051bWJlci5jbG9uZSh7XG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbiArIDJcbiAgICB9KTtcblxuICAgIHZhciB6ZXJvID0gbmV3IF9CaWdOdW1iZXIoMCk7XG4gICAgdmFyIG9uZSA9IG5ldyBCaWcoMSk7XG4gICAgdmFyIGludiA9IHJvb3QuaXNOZWdhdGl2ZSgpO1xuXG4gICAgaWYgKGludikge1xuICAgICAgcm9vdCA9IHJvb3QubmVnKCk7XG4gICAgfVxuXG4gICAgaWYgKHJvb3QuaXNaZXJvKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgfVxuXG4gICAgaWYgKGEuaXNOZWdhdGl2ZSgpICYmICFyb290LmFicygpLm1vZCgyKS5lcXVhbHMoMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG9kZCB3aGVuIGEgaXMgbmVnYXRpdmUuJyk7XG4gICAgfSAvLyBlZGdlIGNhc2VzIHplcm8gYW5kIGluZmluaXR5XG5cblxuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gaW52ID8gbmV3IEJpZyhJbmZpbml0eSkgOiAwO1xuICAgIH1cblxuICAgIGlmICghYS5pc0Zpbml0ZSgpKSB7XG4gICAgICByZXR1cm4gaW52ID8gemVybyA6IGE7XG4gICAgfVxuXG4gICAgdmFyIHggPSBhLmFicygpLnBvdyhvbmUuZGl2KHJvb3QpKTsgLy8gSWYgYSA8IDAsIHdlIHJlcXVpcmUgdGhhdCByb290IGlzIGFuIG9kZCBpbnRlZ2VyLFxuICAgIC8vIHNvICgtMSkgXiAoMS9yb290KSA9IC0xXG5cbiAgICB4ID0gYS5pc05lZygpID8geC5uZWcoKSA6IHg7XG4gICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKChpbnYgPyBvbmUuZGl2KHgpIDogeCkudG9QcmVjaXNpb24ocHJlY2lzaW9uKSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290ID0gY3JlYXRlTnRoUm9vdDtcbnZhciBjcmVhdGVOdGhSb290TnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5udGhSb290TnVtYmVyLFxuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIubnRoUm9vdE51bWJlclxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290TnVtYmVyID0gY3JlYXRlTnRoUm9vdE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTnRoUm9vdHMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdudGhSb290cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZGl2aWRlU2NhbGFyJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVOdGhSb290cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdHMgb2YgYSB2YWx1ZS5cbiAgICogQW4gbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLFxuICAgKiBpcyBhIHBvc2l0aXZlIHJlYWwgc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uIFwieF5yb290ID0gQVwiLlxuICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgY29tcGxleCB2YWx1ZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5udGhSb290cyh4KVxuICAgKiAgICBtYXRoLm50aFJvb3RzKHgsIHJvb3QpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm50aFJvb3RzKDEpXG4gICAqICAgIC8vIHJldHVybnMgW1xuICAgKiAgICAvLyAgIHtyZTogMSwgaW06IDB9LFxuICAgKiAgICAvLyAgIHtyZTogLTEsIGltOiAwfVxuICAgKiAgICAvLyBdXG4gICAqICAgIG50aFJvb3RzKDEsIDMpXG4gICAqICAgIC8vIHJldHVybnMgW1xuICAgKiAgICAvLyAgIHsgcmU6IDEsIGltOiAwIH0sXG4gICAqICAgIC8vICAgeyByZTogLTAuNDk5OTk5OTk5OTk5OTk5OCwgaW06IDAuODY2MDI1NDAzNzg0NDM4NyB9LFxuICAgKiAgICAvLyAgIHsgcmU6IC0wLjUwMDAwMDAwMDAwMDAwMDQsIGltOiAtMC44NjYwMjU0MDM3ODQ0Mzg1IH1cbiAgICogICAgXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbnRoUm9vdCwgcG93LCBzcXJ0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIG50aFJvb3RzID0gdHlwZWQobmFtZSwge1xuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIF9udGhDb21wbGV4Um9vdHMoeCwgMik7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogX250aENvbXBsZXhSb290c1xuICB9KTtcbiAgLyoqXG4gICAqIEVhY2ggZnVuY3Rpb24gaGVyZSByZXR1cm5zIGEgcmVhbCBtdWx0aXBsZSBvZiBpIGFzIGEgQ29tcGxleCB2YWx1ZS5cbiAgICogQHBhcmFtICB7bnVtYmVyfSB2YWxcbiAgICogQHJldHVybiB7Q29tcGxleH0gdmFsLCBpKnZhbCwgLXZhbCBvciAtaSp2YWwgZm9yIGluZGV4IDAsIDEsIDIsIDNcbiAgICovXG4gIC8vIFRoaXMgaXMgdXNlZCB0byBmaXggZmxvYXQgYXJ0aWZhY3RzIGZvciB6ZXJvLXZhbHVlZCBjb21wb25lbnRzLlxuXG4gIHZhciBfY2FsY3VsYXRlRXhhY3RSZXN1bHQgPSBbZnVuY3Rpb24gcmVhbFBvcyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgodmFsLCAwKTtcbiAgfSwgZnVuY3Rpb24gaW1hZ1Bvcyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgdmFsKTtcbiAgfSwgZnVuY3Rpb24gcmVhbE5lZyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoLXZhbCwgMCk7XG4gIH0sIGZ1bmN0aW9uIGltYWdOZWcodmFsKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC12YWwpO1xuICB9XTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBDb21wbGV4IE51bWJlciBhIHVzaW5nIERlIE1vdmlyZSdzIFRoZW9yZW0uXG4gICAqIEBwYXJhbSAge0NvbXBsZXh9IGFcbiAgICogQHBhcmFtICB7bnVtYmVyfSByb290XG4gICAqIEByZXR1cm4ge0FycmF5fSBhcnJheSBvZiBuIENvbXBsZXggUm9vdHNcbiAgICovXG5cbiAgZnVuY3Rpb24gX250aENvbXBsZXhSb290cyhhLCByb290KSB7XG4gICAgaWYgKHJvb3QgPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybycpO1xuICAgIGlmIChyb290ID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgIGlmIChyb290ICUgMSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIGlmIChhID09PSAwIHx8IGEuYWJzKCkgPT09IDApIHJldHVybiBbbmV3IENvbXBsZXgoMCwgMCldO1xuICAgIHZhciBhSXNOdW1lcmljID0gdHlwZW9mIGEgPT09ICdudW1iZXInO1xuICAgIHZhciBvZmZzZXQ7IC8vIGRldGVybWluZSB0aGUgb2Zmc2V0IChhcmd1bWVudCBvZiBhKS8ocGkvMilcblxuICAgIGlmIChhSXNOdW1lcmljIHx8IGEucmUgPT09IDAgfHwgYS5pbSA9PT0gMCkge1xuICAgICAgaWYgKGFJc051bWVyaWMpIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYSA8IDApOyAvLyBudW1lcmljIHZhbHVlIG9uIHRoZSByZWFsIGF4aXNcbiAgICAgIH0gZWxzZSBpZiAoYS5pbSA9PT0gMCkge1xuICAgICAgICBvZmZzZXQgPSAyICogKyhhLnJlIDwgMCk7IC8vIGNvbXBsZXggdmFsdWUgb24gdGhlIHJlYWwgYXhpc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYS5pbSA8IDApICsgMTsgLy8gY29tcGxleCB2YWx1ZSBvbiB0aGUgaW1hZ2luYXJ5IGF4aXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYXJnID0gYS5hcmcoKTtcbiAgICB2YXIgYWJzID0gYS5hYnMoKTtcbiAgICB2YXIgcm9vdHMgPSBbXTtcbiAgICB2YXIgciA9IE1hdGgucG93KGFicywgMSAvIHJvb3QpO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCByb290OyBrKyspIHtcbiAgICAgIHZhciBoYWxmUGlGYWN0b3IgPSAob2Zmc2V0ICsgNCAqIGspIC8gcm9vdDtcbiAgICAgIC8qKlxuICAgICAgICogSWYgKG9mZnNldCArIDQqaykvcm9vdCBpcyBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiBwaS8yXG4gICAgICAgKiB0aGVuIHdlIGNhbiBwcm9kdWNlIGEgbW9yZSBleGFjdCByZXN1bHQuXG4gICAgICAgKi9cblxuICAgICAgaWYgKGhhbGZQaUZhY3RvciA9PT0gTWF0aC5yb3VuZChoYWxmUGlGYWN0b3IpKSB7XG4gICAgICAgIHJvb3RzLnB1c2goX2NhbGN1bGF0ZUV4YWN0UmVzdWx0W2hhbGZQaUZhY3RvciAlIDRdKHIpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJvb3RzLnB1c2gobmV3IENvbXBsZXgoe1xuICAgICAgICByOiByLFxuICAgICAgICBwaGk6IChhcmcgKyAyICogTWF0aC5QSSAqIGspIC8gcm9vdFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiByb290cztcbiAgfVxuXG4gIHJldHVybiBudGhSb290cztcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290cyA9IGNyZWF0ZU50aFJvb3RzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQb3cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbnVtYmVyMiA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3Bvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnaWRlbnRpdHknLCAnbXVsdGlwbHknLCAnbWF0cml4JywgJ2ZyYWN0aW9uJywgJ251bWJlcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlUG93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBudW1iZXIgPSBfcmVmLm51bWJlcixcbiAgICAgIGZyYWN0aW9uID0gX3JlZi5mcmFjdGlvbixcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgYHggXiB5YC5cbiAgICogTWF0cml4IGV4cG9uZW50aWF0aW9uIGlzIHN1cHBvcnRlZCBmb3Igc3F1YXJlIG1hdHJpY2VzIGB4YCwgYW5kIHBvc2l0aXZlXG4gICAqIGludGVnZXIgZXhwb25lbnRzIGB5YC5cbiAgICpcbiAgICogRm9yIGN1YmljIHJvb3RzIG9mIG5lZ2F0aXZlIG51bWJlcnMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmluY2lwYWxcbiAgICogcm9vdCBieSBkZWZhdWx0LiBJbiBvcmRlciB0byBsZXQgdGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVhbCByb290LFxuICAgKiBtYXRoLmpzIGNhbiBiZSBjb25maWd1cmVkIHdpdGggYG1hdGguY29uZmlnKHtwcmVkaWN0YWJsZTogdHJ1ZX0pYC5cbiAgICogVG8gcmV0cmlldmUgYWxsIGN1YmljIHJvb3RzIG9mIGEgdmFsdWUsIHVzZSBgbWF0aC5jYnJ0KHgsIHRydWUpYC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnBvdyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5wb3coMiwgMykgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgbWF0aC5wb3coYSwgMikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC01ICsgMTJpXG4gICAqXG4gICAqICAgIGNvbnN0IGIgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIG1hdGgucG93KGIsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzksIDhdLCBbMTYsIDE3XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBzcXJ0LCBjYnJ0LCBudGhSb290XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFRoZSBiYXNlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IHkgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBleHBvbmVudFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSB2YWx1ZSBvZiBgeGAgdG8gdGhlIHBvd2VyIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfcG93LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucG93KHkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIGlmICh5LmlzSW50ZWdlcigpIHx8IHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHgucG93KHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCkucG93KHkudG9OdW1iZXIoKSwgMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICBpZiAoeS5kICE9PSAxKSB7XG4gICAgICAgIGlmIChjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIHBvdyBkb2VzIG5vdCBzdXBwb3J0IG5vbi1pbnRlZ2VyIGV4cG9uZW50cyBmb3IgZnJhY3Rpb25zLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBfcG93KHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyJzogX3Bvd0FycmF5LFxuICAgICdBcnJheSwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIF9wb3dBcnJheSh4LCB5LnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX3Bvd01hdHJpeCxcbiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIF9wb3dNYXRyaXgoeCwgeS50b051bWJlcigpKTtcbiAgICB9LFxuICAgICdVbml0LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnksIGZvciB0d28gbnVtYmVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleH0gcmVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9wb3coeCwgeSkge1xuICAgIC8vIEFsdGVybmF0aXZlbHkgY291bGQgZGVmaW5lIGEgJ3JlYWxtb2RlJyBjb25maWcgb3B0aW9uIG9yIHNvbWV0aGluZywgYnV0XG4gICAgLy8gJ3ByZWRpY3RhYmxlJyB3aWxsIHdvcmsgZm9yIG5vd1xuICAgIGlmIChjb25maWcucHJlZGljdGFibGUgJiYgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgJiYgeCA8IDApIHtcbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB5IGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIGZyYWN0aW9uXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgeUZyYWMgPSBmcmFjdGlvbih5KTtcbiAgICAgICAgdmFyIHlOdW0gPSBudW1iZXIoeUZyYWMpO1xuXG4gICAgICAgIGlmICh5ID09PSB5TnVtIHx8IE1hdGguYWJzKCh5IC0geU51bSkgLyB5KSA8IDFlLTE0KSB7XG4gICAgICAgICAgaWYgKHlGcmFjLmQgJSAyID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gKHlGcmFjLm4gJSAyID09PSAwID8gMSA6IC0xKSAqIE1hdGgucG93KC14LCB5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7fSAvLyBmcmFjdGlvbigpIHRocm93cyBhbiBlcnJvciBpZiB5IGlzIEluZmluaXR5LCBldGMuXG4gICAgICAvLyBVbmFibGUgdG8gZXhwcmVzcyB5IGFzIGEgZnJhY3Rpb24sIHNvIGNvbnRpbnVlIG9uXG5cbiAgICB9IC8vICoqZm9yIHByZWRpY3RhYmxlIG1vZGUqKiB4XkluZmluaXR5ID09PSBOYU4gaWYgeCA8IC0xXG4gICAgLy8gTi5CLiB0aGlzIGJlaGF2b3VyIGlzIGRpZmZlcmVudCBmcm9tIGBNYXRoLnBvd2Agd2hpY2ggZ2l2ZXNcbiAgICAvLyAoLTIpXkluZmluaXR5ID09PSBJbmZpbml0eVxuXG5cbiAgICBpZiAoY29uZmlnLnByZWRpY3RhYmxlICYmICh4IDwgLTEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCA+IC0xICYmIHggPCAwICYmIHkgPT09IC1JbmZpbml0eSkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgfHwgeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyMi5wb3dOdW1iZXIpKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiB0aGUgZm9sbG93aW5nIGluZmluaXR5IGNoZWNrcyBhcmUgZHVwbGljYXRlZCBmcm9tIHBvd051bWJlci4gRGVkdXBsaWNhdGUgdGhpcyBzb21laG93XG4gICAgICAvLyB4XkluZmluaXR5ID09PSAwIGlmIC0xIDwgeCA8IDFcbiAgICAgIC8vIEEgcmVhbCBudW1iZXIgMCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGNvbXBsZXgoMClcbiAgICAgIGlmICh4ICogeCA8IDEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCAqIHggPiAxICYmIHkgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLnBvdyh5LCAwKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgYSAyZCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcG93QXJyYXkoeCwgeSkge1xuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSB8fCB5IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRm9yIEFeYiwgYiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAodmFsdWUgaXMgJyArIHkgKyAnKScpO1xuICAgIH0gLy8gdmVyaWZ5IHRoYXQgQSBpcyBhIDIgZGltZW5zaW9uYWwgc3F1YXJlIG1hdHJpeFxuXG5cbiAgICB2YXIgcyA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KTtcblxuICAgIGlmIChzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3IgQV5iLCBBIG11c3QgYmUgMiBkaW1lbnNpb25hbCAoQSBoYXMgJyArIHMubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgIH1cblxuICAgIGlmIChzWzBdICE9PSBzWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvciBBXmIsIEEgbXVzdCBiZSBzcXVhcmUgKHNpemUgaXMgJyArIHNbMF0gKyAneCcgKyBzWzFdICsgJyknKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gaWRlbnRpdHkoc1swXSkudmFsdWVPZigpO1xuICAgIHZhciBweCA9IHg7XG5cbiAgICB3aGlsZSAoeSA+PSAxKSB7XG4gICAgICBpZiAoKHkgJiAxKSA9PT0gMSkge1xuICAgICAgICByZXMgPSBtdWx0aXBseShweCwgcmVzKTtcbiAgICAgIH1cblxuICAgICAgeSA+Pj0gMTtcbiAgICAgIHB4ID0gbXVsdGlwbHkocHgsIHB4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHBvd2VyIG9mIGEgMmQgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3Bvd01hdHJpeCh4LCB5KSB7XG4gICAgcmV0dXJuIG1hdHJpeChfcG93QXJyYXkoeC52YWx1ZU9mKCksIHkpKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVBvdyA9IGNyZWF0ZVBvdzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm91bmROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZVJvdW5kID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlcjIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIE5PX0lOVCA9ICdOdW1iZXIgb2YgZGVjaW1hbHMgaW4gZnVuY3Rpb24gcm91bmQgbXVzdCBiZSBhbiBpbnRlZ2VyJztcbnZhciBuYW1lID0gJ3JvdW5kJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICd6ZXJvcycsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVSb3VuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFJvdW5kIGEgdmFsdWUgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoeClcbiAgICogICAgbWF0aC5yb3VuZCh4LCBuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5yb3VuZCgzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGgucm91bmQoMy44KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLnJvdW5kKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGgucm91bmQoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTVcbiAgICogICAgbWF0aC5yb3VuZChtYXRoLnBpLCAzKSAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjE0MlxuICAgKiAgICBtYXRoLnJvdW5kKDEyMy40NTY3OCwgMikgICAgIC8vIHJldHVybnMgbnVtYmVyIDEyMy40NlxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC5jb21wbGV4KDMuMiwgLTIuNylcbiAgICogICAgbWF0aC5yb3VuZChjKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMyAtIDNpXG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoWzMuMiwgMy44LCAtNC43XSkgLy8gcmV0dXJucyBBcnJheSBbMywgNCwgLTVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjZWlsLCBmaXgsIGZsb29yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBOdW1iZXIgdG8gYmUgcm91bmRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheX0gW249MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGRlY2ltYWxzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuXG4gIHZhciByb3VuZCA9IHR5cGVkKG5hbWUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcm91bmROdW1iZXJTaWduYXR1cmVzKSwge30sIHtcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnJvdW5kKCk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogZnVuY3Rpb24gQ29tcGxleE51bWJlcih4LCBuKSB7XG4gICAgICBpZiAobiAlIDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geC5yb3VuZChuKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBDb21wbGV4QmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBfbiA9IG4udG9OdW1iZXIoKTtcblxuICAgICAgcmV0dXJuIHgucm91bmQoX24pO1xuICAgIH0sXG4gICAgJ251bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpLnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudG9EZWNpbWFsUGxhY2VzKDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4LnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnJvdW5kKCk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIG51bWJlcic6IGZ1bmN0aW9uIEZyYWN0aW9uTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmIChuICUgMSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4LnJvdW5kKG4pO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSByb3VuZCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCByb3VuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcm91bmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJDb21wbGV4QmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhciBpcyB6ZXJvXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgLy8gZG8gbm90IGV4ZWN1dGUgYWxnb3JpdGhtLCByZXN1bHQgd2lsbCBiZSBhIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IENvbXBsZXggfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhciBpcyB6ZXJvXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgLy8gZG8gbm90IGV4ZWN1dGUgYWxnb3JpdGhtLCByZXN1bHQgd2lsbCBiZSBhIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCByb3VuZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCByb3VuZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSkpO1xuICByZXR1cm4gcm91bmQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlUm91bmQgPSBjcmVhdGVSb3VuZDtcbnZhciByb3VuZE51bWJlclNpZ25hdHVyZXMgPSB7XG4gIG51bWJlcjogX251bWJlcjIucm91bmROdW1iZXIsXG4gICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCBuKSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgfVxuXG4gICAgaWYgKG4gPCAwIHx8IG4gPiAxNSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOdW1iZXIgb2YgZGVjaW1hbHMgaW4gZnVuY3Rpb24gcm91bmQgbXVzdCBiZSBpbiB0ZSByYW5nZSBvZiAwLTE1Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfbnVtYmVyMi5yb3VuZE51bWJlcikoeCwgbik7XG4gIH1cbn07XG52YXIgY3JlYXRlUm91bmROdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7XG4gIHJldHVybiB0eXBlZChuYW1lLCByb3VuZE51bWJlclNpZ25hdHVyZXMpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJvdW5kTnVtYmVyID0gY3JlYXRlUm91bmROdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzaWduJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdjb21wbGV4J107XG52YXIgY3JlYXRlU2lnbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBjb21wbGV4ID0gX3JlZi5jb21wbGV4LFxuICAgICAgX0ZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc2lnbiBvZiBhIHZhbHVlLiBUaGUgc2lnbiBvZiBhIHZhbHVlIHggaXM6XG4gICAqXG4gICAqIC0gIDEgd2hlbiB4ID4gMFxuICAgKiAtIC0xIHdoZW4geCA8IDBcbiAgICogLSAgMCB3aGVuIHggPT0gMFxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2lnbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zaWduKDMuNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5zaWduKC00LjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIC0xXG4gICAqICAgIG1hdGguc2lnbigwKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwXG4gICAqXG4gICAqICAgIG1hdGguc2lnbihbMywgNSwgLTIsIDAsIDJdKSAgLy8gcmV0dXJucyBbMSwgMSwgLTEsIDAsIDFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhYnNcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgVGhlIG51bWJlciBmb3Igd2hpY2ggdG8gZGV0ZXJtaW5lIHRoZSBzaWduXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1lXG4gICAqICAgICAgICAgICAgVGhlIHNpZ24gb2YgYHhgXG4gICAqL1xuICB2YXIgc2lnbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2lnbk51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmltID09PSAwID8gY29tcGxleCgoMCwgX251bWJlci5zaWduTnVtYmVyKSh4LnJlKSkgOiB4LnNpZ24oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcih4LmNtcCgwKSk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBfRnJhY3Rpb24oeC5zLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc2lnbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc2lnbiwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiBzaWduKHgudmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzaWduO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSBjcmVhdGVTaWduOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXJ0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3NxcnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVTcXJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3FydCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zcXJ0KDI1KSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICogICAgbWF0aC5zcXVhcmUoNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI1XG4gICAqICAgIG1hdGguc3FydCgtNCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDJpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzcXVhcmUsIG11bHRpcGx5LCBjdWJlLCBjYnJ0LCBzcXJ0bVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiBgeGBcbiAgICovXG4gIHZhciBzcXJ0ID0gdHlwZWQoJ3NxcnQnLCB7XG4gICAgbnVtYmVyOiBfc3FydE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNxcnQoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIGlmICgheC5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LnNxcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGRvd25ncmFkZSB0byBudW1iZXIgdG8gZG8gY29tcGxleCB2YWx1ZSBjb21wdXRhdGlvblxuICAgICAgICByZXR1cm4gX3NxcnROdW1iZXIoeC50b051bWJlcigpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc3FydCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc3FydCwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIC8vIFNvbWVkYXkgd2lsbCB3b3JrIGZvciBjb21wbGV4IHVuaXRzIHdoZW4gdGhleSBhcmUgaW1wbGVtZW50ZWRcbiAgICAgIHJldHVybiB4LnBvdygwLjUpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgc3FydCBmb3IgYSBudW1iZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlciB8IENvbXBsZXh9IFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHhcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3NxcnROdW1iZXIoeCkge1xuICAgIGlmIChpc05hTih4KSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9IGVsc2UgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgIHJldHVybiBNYXRoLnNxcnQoeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5zcXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNxcnQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydCA9IGNyZWF0ZVNxcnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWFyZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3NxdWFyZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVNxdWFyZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLCBgeCAqIHhgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3F1YXJlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZSgyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLnNxdWFyZSgzKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKiAgICBtYXRoLnBvdygzLCAyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKiAgICBtYXRoLm11bHRpcGx5KDMsIDMpICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZShbMSwgMiwgMywgNF0pICAvLyByZXR1cm5zIEFycmF5IFsxLCA0LCA5LCAxNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBjdWJlLCBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgTnVtYmVyIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIHNxdWFyZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9XG4gICAqICAgICAgICAgICAgU3F1YXJlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIHNxdWFyZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc3F1YXJlTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudGltZXMoeCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBzcXVhcmUoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNxdWFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiB4LnBvdygyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3F1YXJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWFyZSA9IGNyZWF0ZVNxdWFyZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3VidHJhY3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDVcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ3N1YnRyYWN0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdhZGRTY2FsYXInLCAndW5hcnlNaW51cycsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnRyYWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICAvLyBUT0RPOiBzcGxpdCBmdW5jdGlvbiBzdWJ0cmFjdCBpbiB0d286IHN1YnRyYWN0IGFuZCBzdWJ0cmFjdFNjYWxhclxuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMSkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTAgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTApKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFN1YnRyYWN0IHR3byB2YWx1ZXMsIGB4IC0geWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdCg1LjMsIDIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjNcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGguc3VidHJhY3QoYSwgYikgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC0yICsgMmlcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdChbNSwgNywgNF0sIDQpICAvLyByZXR1cm5zIEFycmF5IFsxLCAzLCAwXVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC51bml0KCcyLjEga20nKVxuICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCc1MDBtJylcbiAgICogICAgbWF0aC5zdWJ0cmFjdChjLCBkKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMS42IGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhZGRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgSW5pdGlhbCB2YWx1ZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHlcbiAgICogICAgICAgICAgICBWYWx1ZSB0byBzdWJ0cmFjdCBmcm9tIGB4YFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgU3VidHJhY3Rpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIHN1YnRyYWN0ID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCAtIHk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnN1Yih5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5taW51cyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnN1Yih5KTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKHgudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeCBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeSBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaXRzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0geC5jbG9uZSgpO1xuICAgICAgcmVzLnZhbHVlID0gc3VidHJhY3QocmVzLnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgY2hlY2tFcXVhbERpbWVuc2lvbnMoeCwgeSk7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIGNoZWNrRXF1YWxEaW1lbnNpb25zKHgsIHkpO1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIHN1YnRyYWN0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzdWJ0cmFjdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc3VidHJhY3QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzdWJ0cmFjdCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB1bmFyeU1pbnVzKHkpLCBhZGRTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHN1YnRyYWN0LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBzdWJ0cmFjdCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdWJ0cmFjdDtcbn0pO1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIG1hdHJpeCB4IGFuZCB5IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnMuXG4gKiBUaHJvd3MgYSBEaW1lbnNpb25FcnJvciB3aGVuIGRpbWVuc2lvbnMgYXJlIG5vdCBlcXVhbFxuICogQHBhcmFtIHtNYXRyaXh9IHhcbiAqIEBwYXJhbSB7TWF0cml4fSB5XG4gKi9cblxuZXhwb3J0cy5jcmVhdGVTdWJ0cmFjdCA9IGNyZWF0ZVN1YnRyYWN0O1xuXG5mdW5jdGlvbiBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KSB7XG4gIHZhciB4c2l6ZSA9IHguc2l6ZSgpO1xuICB2YXIgeXNpemUgPSB5LnNpemUoKTtcblxuICBpZiAoeHNpemUubGVuZ3RoICE9PSB5c2l6ZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHhzaXplLmxlbmd0aCwgeXNpemUubGVuZ3RoKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeU1pbnVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAndW5hcnlNaW51cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVVuYXJ5TWludXMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUsIGFwcGx5IGEgdW5hcnkgbWludXMgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLiBCb29sZWFuIHZhbHVlcyBhbmRcbiAgICogc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlci4gRm9yIGNvbXBsZXggbnVtYmVycywgYm90aCByZWFsIGFuZFxuICAgKiBjb21wbGV4IHZhbHVlIGFyZSBpbnZlcnRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5TWludXMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudW5hcnlNaW51cygzLjUpICAgICAgLy8gcmV0dXJucyAtMy41XG4gICAqICAgIG1hdGgudW5hcnlNaW51cygtNC4yKSAgICAgLy8gcmV0dXJucyA0LjJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFkZCwgc3VidHJhY3QsIHVuYXJ5UGx1c1xuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIGludmVydGVkLlxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHZhbHVlIHdpdGggaW52ZXJ0ZWQgc2lnbi5cbiAgICovXG4gIHZhciB1bmFyeU1pbnVzID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci51bmFyeU1pbnVzTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubmVnKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5uZWcoKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5uZWcoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHVuYXJ5TWludXMoeC52YWx1ZSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB1bmFyeU1pbnVzKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB1bmFyeU1pbnVzLCB0cnVlKTtcbiAgICB9IC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBzdHJpbmdcblxuICB9KTtcbiAgcmV0dXJuIHVuYXJ5TWludXM7XG59KTtcbmV4cG9ydHMuY3JlYXRlVW5hcnlNaW51cyA9IGNyZWF0ZVVuYXJ5TWludXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5UGx1cyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3VuYXJ5UGx1cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlVW5hcnlQbHVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIFVuYXJ5IHBsdXMgb3BlcmF0aW9uLlxuICAgKiBCb29sZWFuIHZhbHVlcyBhbmQgc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciwgbnVtZXJpYyB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZCBhcyBpcy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5UGx1cyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC51bmFyeVBsdXMoMy41KSAgICAgIC8vIHJldHVybnMgMy41XG4gICAqICAgIG1hdGgudW5hcnlQbHVzKDEpICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHVuYXJ5TWludXMsIGFkZCwgc3VidHJhY3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBzdHJpbmcgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgSW5wdXQgdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGlucHV0IHZhbHVlIHdoZW4gbnVtZXJpYywgY29udmVydHMgdG8gYSBudW1iZXIgd2hlbiBpbnB1dCBpcyBub24tbnVtZXJpYy5cbiAgICovXG4gIHZhciB1bmFyeVBsdXMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnVuYXJ5UGx1c051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBjb21wbGV4IG51bWJlcnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7IC8vIGJpZ251bWJlcnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBmcmFjdGlvbnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB1bmFyeVBsdXMoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHVuYXJ5UGx1cywgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYm9vbGVhbiB8IHN0cmluZyc6IGZ1bmN0aW9uIGJvb2xlYW5TdHJpbmcoeCkge1xuICAgICAgLy8gY29udmVydCB0byBhIG51bWJlciBvciBiaWdudW1iZXJcbiAgICAgIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoK3gpIDogK3g7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHVuYXJ5UGx1cztcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeVBsdXMgPSBjcmVhdGVVbmFyeVBsdXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVhnY2QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3hnY2QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVYZ2NkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy5cbiAgICogU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4dGVuZGVkX0V1Y2xpZGVhbl9hbGdvcml0aG0uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC54Z2NkKGEsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnhnY2QoOCwgMTIpICAgICAgICAgICAgIC8vIHJldHVybnMgWzQsIC0xLCAxXVxuICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLnhnY2QoMzYxNjMsIDIxMTk5KSAgICAgIC8vIHJldHVybnMgWzEyNDcsIC03LCAxMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGdjZCwgbGNtXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBhICBBbiBpbnRlZ2VyIG51bWJlclxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gYiAgQW4gaW50ZWdlciBudW1iZXJcbiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgMyBpbnRlZ2VycyBgW2RpdiwgbSwgbl1gXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYGRpdiA9IGdjZChhLCBiKWAgYW5kIGBhKm0gKyBiKm4gPSBkaXZgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihhLCBiKSB7XG4gICAgICB2YXIgcmVzID0gKDAsIF9udW1iZXIueGdjZE51bWJlcikoYSwgYik7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IHJlcyA6IG1hdHJpeChyZXMpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX3hnY2RCaWdOdW1iZXIgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIEZyYWN0aW9uXG5cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgeGdjZCBmb3IgdHdvIEJpZ051bWJlcnNcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGFcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGJcbiAgICogQHJldHVybiB7QmlnTnVtYmVyW119IHJlc3VsdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfeGdjZEJpZ051bWJlcihhLCBiKSB7XG4gICAgLy8gc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9FdWNsaWRlYW5fYWxnb3JpdGhtXG4gICAgdmFyIC8vIHVzZWQgdG8gc3dhcCB0d28gdmFyaWFibGVzXG4gICAgdDtcbiAgICB2YXIgLy8gcXVvdGllbnRcbiAgICBxO1xuICAgIHZhciAvLyByZW1haW5kZXJcbiAgICByO1xuICAgIHZhciB6ZXJvID0gbmV3IEJpZ051bWJlcigwKTtcbiAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcbiAgICB2YXIgeCA9IHplcm87XG4gICAgdmFyIGxhc3R4ID0gb25lO1xuICAgIHZhciB5ID0gb25lO1xuICAgIHZhciBsYXN0eSA9IHplcm87XG5cbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24geGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgcSA9IGEuZGl2KGIpLmZsb29yKCk7XG4gICAgICByID0gYS5tb2QoYik7XG4gICAgICB0ID0geDtcbiAgICAgIHggPSBsYXN0eC5taW51cyhxLnRpbWVzKHgpKTtcbiAgICAgIGxhc3R4ID0gdDtcbiAgICAgIHQgPSB5O1xuICAgICAgeSA9IGxhc3R5Lm1pbnVzKHEudGltZXMoeSkpO1xuICAgICAgbGFzdHkgPSB0O1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcjtcbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuXG4gICAgaWYgKGEubHQoemVybykpIHtcbiAgICAgIHJlcyA9IFthLm5lZygpLCBsYXN0eC5uZWcoKSwgbGFzdHkubmVnKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBbYSwgIWEuaXNaZXJvKCkgPyBsYXN0eCA6IDAsIGxhc3R5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IHJlcyA6IG1hdHJpeChyZXMpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlWGdjZCA9IGNyZWF0ZVhnY2Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdEFuZCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdiaXRBbmQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQml0QW5kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSBBTkQgdHdvIHZhbHVlcywgYHggJiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpdEFuZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXRBbmQoNTMsIDEzMSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqXG4gICAqICAgIG1hdGguYml0QW5kKFsxLCAxMiwgMzFdLCA0MikgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMCwgOCwgMTBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGFuZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gYW5kXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBBTkQgb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGJpdEFuZCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdEFuZE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRBbmRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNih4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRBbmQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdEFuZChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0QW5kKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRBbmQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgYml0QW5kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgYml0QW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGJpdEFuZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0QW5kLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdEFuZDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXRBbmQgPSBjcmVhdGVCaXRBbmQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE5vdCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYml0Tm90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQml0Tm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQml0d2lzZSBOT1QgdmFsdWUsIGB+eGAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpdE5vdCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXROb3QoMSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtMlxuICAgKlxuICAgKiAgICBtYXRoLmJpdE5vdChbMiwgLTMsIDRdKSAgICAgIC8vIHJldHVybnMgQXJyYXkgWy0zLCAyLCA1XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXRPciwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBub3RcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IE5PVCBvZiBgeGBcbiAgICovXG4gIHZhciBiaXROb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmJpdE5vdE51bWJlcixcbiAgICBCaWdOdW1iZXI6IF9iaXR3aXNlLmJpdE5vdEJpZ051bWJlcixcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGJpdE5vdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdE5vdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXROb3QgPSBjcmVhdGVCaXROb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE9yID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdE9yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUJpdE9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIE9SIHR3byB2YWx1ZXMsIGB4IHwgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgbG93ZXN0IHByaW50IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcih4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcigxLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDNcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcihbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gb3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IE9SIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBiaXRPciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdE9yTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaXR3aXNlLmJpdE9yQmlnTnVtYmVyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYml0T3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRPcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0T3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdE9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRPcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB5LCBiaXRPciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBiaXRPciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0T3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYml0T3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlQml0T3IgPSBjcmVhdGVCaXRPcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQml0WG9yID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdFhvcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVCaXRYb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIEJpdHdpc2UgWE9SIHR3byB2YWx1ZXMsIGB4IF4geWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRYb3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYml0WG9yKDEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLmJpdFhvcihbMiwgMywgNF0sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzYsIDcsIDBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0T3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIHhvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8geG9yXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBYT1Igb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGJpdFhvciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdFhvck51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRYb3IsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBiaXRYb3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGJpdFhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGJpdFhvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0WG9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRYb3IobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdFhvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBiaXRYb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGJpdFhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBiaXRYb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgYml0WG9yLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBiaXRYb3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYml0WG9yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJpdFhvciA9IGNyZWF0ZUJpdFhvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTGVmdFNoaWZ0ID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgbmFtZSA9ICdsZWZ0U2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTGVmdFNoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA4ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTA4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIGxlZnQgbG9naWNhbCBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPDwgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxlZnRTaGlmdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sZWZ0U2hpZnQoMSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqXG4gICAqICAgIG1hdGgubGVmdFNoaWZ0KFsxLCAyLCAzXSwgNCkgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMTYsIDMyLCA2NF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGxlZnRTaGlmdCwgYml0Tm90LCBiaXRPciwgYml0WG9yLCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggVmFsdWUgdG8gYmUgc2hpZnRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHkgQW1vdW50IG9mIHNoaWZ0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYHhgIHNoaWZ0ZWQgbGVmdCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIGxlZnRTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmxlZnRTaGlmdE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5sZWZ0U2hpZnRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsZWZ0U2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGVmdFNoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsZWZ0U2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbGVmdFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7XG4gICAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGVmdFNoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGVmdFNoaWZ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUxlZnRTaGlmdCA9IGNyZWF0ZUxlZnRTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRBcml0aFNoaWZ0ID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdyaWdodEFyaXRoU2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUmlnaHRBcml0aFNoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA4ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTA4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIHJpZ2h0IGFyaXRobWV0aWMgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMsIGB4ID4+IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodEFyaXRoU2hpZnQoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRBcml0aFNoaWZ0KDQsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0QXJpdGhTaGlmdChbMTYsIC0zMiwgNjRdLCA0KSAgIC8vIHJldHVybnMgQXJyYXkgWzEsIC0yLCAzXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBiZSBzaGlmdGVkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlcn0geSBBbW91bnQgb2Ygc2hpZnRzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBgeGAgc2lnbi1maWxsZWQgc2hpZnRlZCByaWdodCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIHJpZ2h0QXJpdGhTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLnJpZ2h0QXJpdGhTaGlmdE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5yaWdodEFyaXRoU2hpZnRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCByaWdodEFyaXRoU2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodEFyaXRoU2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRBcml0aFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7XG4gICAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRBcml0aFNoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCA9IGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRMb2dTaGlmdCA9IHZvaWQgMDtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3JpZ2h0TG9nU2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUmlnaHRMb2dTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wOCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0wOCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0IG9mIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPj4+IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodExvZ1NoaWZ0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0TG9nU2hpZnQoNCwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRMb2dTaGlmdChbMTYsIC0zMiwgNjRdLCA0KSAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDNdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0T3IsIGJpdFhvciwgbGVmdFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IFZhbHVlIHRvIGJlIHNoaWZ0ZWRcbiAgICogQHBhcmFtICB7bnVtYmVyfSB5IEFtb3VudCBvZiBzaGlmdHNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGB4YCB6ZXJvLWZpbGxlZCBzaGlmdGVkIHJpZ2h0IGB5YCB0aW1lc1xuICAgKi9cblxuICB2YXIgcmlnaHRMb2dTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLnJpZ2h0TG9nU2hpZnROdW1iZXIsXG4gICAgLy8gJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogLi4uLCAvLyBUT0RPOiBpbXBsZW1lbnQgQmlnTnVtYmVyIHN1cHBvcnQgZm9yIHJpZ2h0TG9nU2hpZnRcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA4KHgsIHksIHJpZ2h0TG9nU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIHJpZ2h0TG9nU2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHJpZ2h0TG9nU2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodExvZ1NoaWZ0KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRMb2dTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmlnaHRMb2dTaGlmdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSaWdodExvZ1NoaWZ0ID0gY3JlYXRlUmlnaHRMb2dTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmVsbE51bWJlcnMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdiZWxsTnVtYmVycyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnaXNOZWdhdGl2ZScsICdpc0ludGVnZXInLCAnc3RpcmxpbmdTMiddO1xudmFyIGNyZWF0ZUJlbGxOdW1iZXJzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgc3RpcmxpbmdTMiA9IF9yZWYuc3RpcmxpbmdTMjtcblxuICAvKipcbiAgICogVGhlIEJlbGwgTnVtYmVycyBjb3VudCB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgb2YgYSBzZXQuIEEgcGFydGl0aW9uIGlzIGEgcGFpcndpc2UgZGlzam9pbnQgc3Vic2V0IG9mIFMgd2hvc2UgdW5pb24gaXMgUy5cbiAgICogYmVsbE51bWJlcnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogbiA+PSAwXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICBtYXRoLmJlbGxOdW1iZXJzKG4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDMpIC8vIHJldHVybnMgNVxuICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDgpIC8vIHJldHVybnMgNDE0MFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3RpcmxpbmdTMlxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBUb3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIEIobilcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihuKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJlbGxOdW1iZXJzJyk7XG4gICAgICB9IC8vIFN1bSAoaz0wLCBuKSBTKG4saykuXG5cblxuICAgICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykge1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBzdGlybGluZ1MyKG4sIGkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJlbGxOdW1iZXJzID0gY3JlYXRlQmVsbE51bWJlcnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNhdGFsYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjYXRhbGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ2F0YWxhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc05lZ2F0aXZlID0gX3JlZi5pc05lZ2F0aXZlLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy5cbiAgICogY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguY2F0YWxhbihuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jYXRhbGFuKDMpIC8vIHJldHVybnMgNVxuICAgKiAgICBtYXRoLmNhdGFsYW4oOCkgLy8gcmV0dXJucyAxNDMwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiZWxsTnVtYmVyc1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBudGggQ2F0YWxhbiBudW1iZXJcbiAgICogQHJldHVybiB7TnVtYmVyIHwgQmlnTnVtYmVyfSAgICAgQ24obilcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihuKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNhdGFsYW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihjb21iaW5hdGlvbnMobXVsdGlwbHlTY2FsYXIobiwgMiksIG4pLCBhZGRTY2FsYXIobiwgMSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2F0YWxhbiA9IGNyZWF0ZUNhdGFsYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBvc2l0aW9uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29tcG9zaXRpb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkU2NhbGFyJywgJ2NvbWJpbmF0aW9ucycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZUNvbXBvc2l0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb3NpdGlvbiBjb3VudHMgb2YgbiBpbnRvIGsgcGFydHMuXG4gICAqXG4gICAqIGNvbXBvc2l0aW9uIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguY29tcG9zaXRpb24obiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY29tcG9zaXRpb24oNSwgMykgLy8gcmV0dXJucyA2XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFJldHVybnMgdGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIGlmICghaXNJbnRlZ2VyKG4pIHx8ICFpc1Bvc2l0aXZlKG4pIHx8ICFpc0ludGVnZXIoaykgfHwgIWlzUG9zaXRpdmUoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21wb3NpdGlvbicpO1xuICAgICAgfSBlbHNlIGlmIChsYXJnZXIoaywgbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIGNvbXBvc2l0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5hdGlvbnMoYWRkU2NhbGFyKG4sIC0xKSwgYWRkU2NhbGFyKGssIC0xKSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wb3NpdGlvbiA9IGNyZWF0ZUNvbXBvc2l0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdGlybGluZ1MyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3RpcmxpbmdTMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnc3VidHJhY3QnLCAnbXVsdGlwbHlTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ3BvdycsICdmYWN0b3JpYWwnLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZVN0aXJsaW5nUzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgZmFjdG9yaWFsID0gX3JlZi5mYWN0b3JpYWwsXG4gICAgICBjb21iaW5hdGlvbnMgPSBfcmVmLmNvbWJpbmF0aW9ucyxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgU3RpcmxpbmcgbnVtYmVycyBvZiB0aGUgc2Vjb25kIGtpbmQsIGNvdW50cyB0aGUgbnVtYmVyIG9mIHdheXMgdG8gcGFydGl0aW9uXG4gICAqIGEgc2V0IG9mIG4gbGFiZWxsZWQgb2JqZWN0cyBpbnRvIGsgbm9uZW1wdHkgdW5sYWJlbGxlZCBzdWJzZXRzLlxuICAgKiBzdGlybGluZ1MyIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDFcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguc3RpcmxpbmdTMihuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdGlybGluZ1MyKDUsIDMpIC8vcmV0dXJucyAyNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmVsbE51bWJlcnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFMobixrKVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCFpc0ludGVnZXIobikgfHwgaXNOZWdhdGl2ZShuKSB8fCAhaXNJbnRlZ2VyKGspIHx8IGlzTmVnYXRpdmUoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gc3RpcmxpbmdTMicpO1xuICAgICAgfSBlbHNlIGlmIChsYXJnZXIoaywgbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIHN0aXJsaW5nUzInKTtcbiAgICAgIH0gLy8gMS9rISBTdW0oaT0wIC0+IGspIFsoLTEpXihrLWkpKkMoayxqKSogaV5uXVxuXG5cbiAgICAgIHZhciBrRmFjdG9yaWFsID0gZmFjdG9yaWFsKGspO1xuICAgICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGs7IGkrKykge1xuICAgICAgICB2YXIgbmVnYXRpdmVPbmUgPSBwb3coLTEsIHN1YnRyYWN0KGssIGkpKTtcbiAgICAgICAgdmFyIGtDaG9vc2VJID0gY29tYmluYXRpb25zKGssIGkpO1xuICAgICAgICB2YXIgaVBvd2VyID0gcG93KGksIG4pO1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihrQ2hvb3NlSSwgaVBvd2VyKSwgbmVnYXRpdmVPbmUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihyZXN1bHQsIGtGYWN0b3JpYWwpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3RpcmxpbmdTMiA9IGNyZWF0ZVN0aXJsaW5nUzI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFyZyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdhcmcnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBcmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYGF0YW4yKGIsIGEpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFyZyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAyKVxuICAgKiAgICBtYXRoLmFyZyhhKSAvIG1hdGgucGkgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4yNVxuICAgKlxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KCcyICsgM2knKVxuICAgKiAgICBtYXRoLmFyZyhiKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC45ODI3OTM3MjMyNDczMjlcbiAgICogICAgbWF0aC5hdGFuMigzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuOTgyNzkzNzIzMjQ3MzI5XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICByZSwgaW0sIGNvbmosIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmd1bWVudCBvZiB4XG4gICAqL1xuICB2YXIgYXJnID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBNYXRoLmF0YW4yKDAsIHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguY29uc3RydWN0b3IuYXRhbjIoMCwgeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFyZygpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogaW1wbGVtZW50IEJpZ051bWJlciBzdXBwb3J0IGZvciBmdW5jdGlvbiBhcmdcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFyZyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFyZztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcmcgPSBjcmVhdGVBcmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmogPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnY29uaic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbmogPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhIGNvbXBsZXggdmFsdWUuXG4gICAqIElmIGB4ID0gYStiaWAsIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBgeGAgaXMgYGEgLSBiaWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb25qKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbmoobWF0aC5jb21wbGV4KCcyICsgM2knKSkgIC8vIHJldHVybnMgQ29tcGxleCAyIC0gM2lcbiAgICogICAgbWF0aC5jb25qKG1hdGguY29tcGxleCgnMiAtIDNpJykpICAvLyByZXR1cm5zIENvbXBsZXggMiArIDNpXG4gICAqICAgIG1hdGguY29uaihtYXRoLmNvbXBsZXgoJy01LjJpJykpICAvLyByZXR1cm5zIENvbXBsZXggNS4yaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGltLCBhcmcsIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiB4XG4gICAqL1xuICB2YXIgY29uaiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jb25qdWdhdGUoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY29uaik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbmo7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uaiA9IGNyZWF0ZUNvbmo7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUltID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ltJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYmAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pbSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKiAgICBtYXRoLmltKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgLTUuMlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgyLjQpKSAgICAgLy8gcmV0dXJucyBudW1iZXIgMFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGNvbmosIGFicywgYXJnXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgQSBjb21wbGV4IG51bWJlciBvciBhcnJheSB3aXRoIGNvbXBsZXggbnVtYmVyc1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gVGhlIGltYWdpbmFyeSBwYXJ0IG9mIHhcbiAgICovXG4gIHZhciBpbSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4Lm11bCgwKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguaW07XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGltKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaW07XG59KTtcbmV4cG9ydHMuY3JlYXRlSW0gPSBjcmVhdGVJbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAncmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVSZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVhbCBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKiAgICBtYXRoLmltKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgMFxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgyLjQpKSAgICAgLy8gcmV0dXJucyBudW1iZXIgMi40XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpbSwgY29uaiwgYWJzLCBhcmdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBBIGNvbXBsZXggbnVtYmVyIG9yIGFycmF5IHdpdGggY29tcGxleCBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgcmVhbCBwYXJ0IG9mIHhcbiAgICovXG4gIHZhciByZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yZTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgcmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZSA9IGNyZWF0ZVJlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXN0YW5jZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Rpc3RhbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdzdWJ0cmFjdCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAndW5hcnlNaW51cycsICdzcXJ0JywgJ2FicyddO1xudmFyIGNyZWF0ZURpc3RhbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIGFicyA9IF9yZWYuYWJzO1xuXG4gIC8qKlxuICAgICogQ2FsY3VsYXRlczpcbiAgICAqICAgIFRoZSBldWNsZWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzIGluIE4tZGltZW5zaW9uYWwgc3BhY2VzLlxuICAgICogICAgRGlzdGFuY2UgYmV0d2VlbiBwb2ludCBhbmQgYSBsaW5lIGluIDIgYW5kIDMgZGltZW5zaW9uYWwgc3BhY2VzLlxuICAgICogICAgUGFpcndpc2UgZGlzdGFuY2UgYmV0d2VlbiBhIHNldCBvZiAyRCBvciAzRCBwb2ludHNcbiAgICAqIE5PVEU6XG4gICAgKiAgICBXaGVuIHN1YnN0aXR1dGluZyBjb2VmZmljaWVudHMgb2YgYSBsaW5lKGEsIGIgYW5kIGMpLCB1c2UgYXggKyBieSArIGMgPSAwIGluc3RlYWQgb2YgYXggKyBieSA9IGNcbiAgICAqICAgIEZvciBwYXJhbWV0cmljIGVxdWF0aW9uIG9mIGEgM0QgbGluZSwgeDAsIHkwLCB6MCwgYSwgYiwgYyBhcmUgZnJvbTogKHjiiJJ4MCwgeeKIknkwLCB64oiSejApID0gdChhLCBiLCBjKVxuICAgICpcbiAgICAqIFN5bnRheDpcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gxLCB5MV0sIFt4MiwgeTJdKVxuICAgICotICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDV9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDd9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFt4MiwgeTIsIHoyXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50T25lWDogNCwgcG9pbnRPbmVZOiA1LCBwb2ludE9uZVo6IDh9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDcsIHBvaW50VHdvWjogOX0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTEsIC4uLiAsIE4xXSwgW3gyLCB5MiwgLi4uICwgTjJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbW0FdLCBbQl0sIFtDXS4uLl0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTFdLCBbTGluZVB0WDEsIExpbmVQdFkxXSwgW0xpbmVQdFgyLCBMaW5lUHRZMl0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKHtwb2ludFg6IDEsIHBvaW50WTogNH0sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzfSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFtMaW5lUHRYMSwgTGluZVB0WTEsIExpbmVQdFoxXSwgW0xpbmVQdFgyLCBMaW5lUHRZMiwgTGluZVB0WjJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRYOiAxLCBwb2ludFk6IDQsIHBvaW50WjogN30sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzLCBsaW5lT25lUHRaOiA0fSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDgsIGxpbmVUd29QdFo6IDV9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxXSwgW3hDb2VmZkxpbmUsIHlDb2VmZkxpbmUsIGNvbnN0YW50XSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMTAsIHBvaW50WTogMTB9LCB7eENvZWZmTGluZTogOCwgeUNvZWZmTGluZTogMSwgY29uc3RhbnQ6IDN9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFt4MCwgeTAsIHowLCBhLXRDb2VmZiwgYi10Q29lZmYsIGMtdENvZWZmXSkgcG9pbnQgYW5kIHBhcmFtZXRyaWMgZXF1YXRpb24gb2YgM0QgbGluZVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeCwgeSwgel0sIFt4MCwgeTAsIHowLCBhLCBiLCBjXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMiwgcG9pbnRZOiA1LCBwb2ludFo6IDl9LCB7eDA6IDQsIHkwOiA2LCB6MDogMywgYTogNCwgYjogMiwgYzogMH0pXG4gICAgKlxuICAgICogRXhhbXBsZXM6XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFswLDBdLCBbNCw0XSkgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDUuNjU2OVxuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRPbmVYOiAwLCBwb2ludE9uZVk6IDB9LFxuICAgICogICAgIHtwb2ludFR3b1g6IDEwLCBwb2ludFR3b1k6IDEwfSkgICAgICAgICAgICAgICAgLy8gUmV0dXJucyAxNC4xNDIxMzU2MjM3MzA5NTFcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDFdLCBbNCwgLTIsIDJdKSAgICAgICAgICAgIC8vIFJldHVybnMgMy43NDE2NlxuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDUsIHBvaW50T25lWjogOH0sXG4gICAgKiAgICAge3BvaW50VHdvWDogMiwgcG9pbnRUd29ZOiA3LCBwb2ludFR3b1o6IDl9KSAgICAvLyBSZXR1cm5zIDNcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDEsIDBdLCBbMCwgLTEsIDAsIC0xXSkgICAgIC8vIFJldHVybnMgMlxuICAgICogICAgbWF0aC5kaXN0YW5jZShbWzEsIDJdLCBbMSwgMl0sIFsxLCAzXV0pICAgICAgICAgLy8gUmV0dXJucyBbMCwgMSwgMV1cbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW1sxLDIsNF0sIFsxLDIsNl0sIFs4LDEsM11dKSAgICAgIC8vIFJldHVybnMgWzIsIDcuMTQxNDI4NDI4NTQyODUsIDcuNjgxMTQ1NzQ3ODY4NjA4XVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbMTAsIDEwXSwgWzgsIDEsIDNdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyAxMS41MzUyMzAzMTY3OTYzODdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEwLCAxMF0sIFsyLCAzXSwgWy04LCAwXSkgICAgICAgIC8vIFJldHVybnMgOC43NTk5NTMxMzAzNjI4NDdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoXG4gICAgKiAgICAge3BvaW50WDogMSwgcG9pbnRZOiA0fSxcbiAgICAqICAgICB7bGluZU9uZVB0WDogNiwgbGluZU9uZVB0WTogM30sXG4gICAgKiAgICAge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KSAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDIuNzIwNTQ5MzcyNjI0NzQ0XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFsyLCAzLCAxXSwgWzEsIDEsIDIsIDUsIDAsIDFdKSAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1N1xuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRYOiAyLCBwb2ludFk6IDMsIHBvaW50WjogMX0sXG4gICAgKiAgICAge3gwOiAxLCB5MDogMSwgejA6IDIsIGE6IDUsIGI6IDAsIGM6IDF9ICAgICAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1N1xuICAgICpcbiAgICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCBPYmplY3R9IHggICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IHBvaW50XG4gICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgT2JqZWN0fSB5ICAgIENvLW9yZGluYXRlcyBvZiBzZWNvbmQgcG9pbnRcbiAgICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgZGlzdGFuY2UgZnJvbSB0d28vdGhyZWUgcG9pbnRzXG4gICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5QXJyYXkoeCwgeSwgeikge1xuICAgICAgLy8gUG9pbnQgdG8gTGluZSAyRCAoeD1Qb2ludCwgeT1MaW5lUG9pbnQxLCB6PUxpbmVQb2ludDIpXG4gICAgICBpZiAoeC5sZW5ndGggPT09IDIgJiYgeS5sZW5ndGggPT09IDIgJiYgei5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzJkKHopKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgdGhpcmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KHpbMV0sIHpbMF0pLCBzdWJ0cmFjdCh5WzFdLCB5WzBdKSk7XG4gICAgICAgIHZhciB4Q29lZmYgPSBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihtLCBtKSwgeVswXSk7XG4gICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHlbMF0pKTtcbiAgICAgICAgdmFyIGNvbnN0YW50ID0geFsxXTtcbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHhDb2VmZiwgeUNvZWZmLCBjb25zdGFudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnT2JqZWN0LCBPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE9iamVjdE9iamVjdE9iamVjdCh4LCB5LCB6KSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh6KS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgbGluZU9uZVB0WCBhbmQgbGluZU9uZVB0WSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBsaW5lVHdvUHRYIGFuZCBsaW5lVHdvUHRZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncG9pbnRYJyBpbiB4ICYmICdwb2ludFknIGluIHggJiYgJ2xpbmVPbmVQdFgnIGluIHkgJiYgJ2xpbmVPbmVQdFknIGluIHkgJiYgJ2xpbmVUd29QdFgnIGluIHogJiYgJ2xpbmVUd29QdFknIGluIHopIHtcbiAgICAgICAgICB2YXIgbSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdCh6LmxpbmVUd29QdFksIHoubGluZVR3b1B0WCksIHN1YnRyYWN0KHkubGluZU9uZVB0WSwgeS5saW5lT25lUHRYKSk7XG4gICAgICAgICAgdmFyIHhDb2VmZiA9IG11bHRpcGx5U2NhbGFyKG11bHRpcGx5U2NhbGFyKG0sIG0pLCB5LmxpbmVPbmVQdFgpO1xuICAgICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHkubGluZU9uZVB0WCkpO1xuICAgICAgICAgIHZhciBjb25zdGFudCA9IHgucG9pbnRYO1xuICAgICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUyRCh4LnBvaW50WCwgeC5wb2ludFksIHhDb2VmZiwgeUNvZWZmLCBjb25zdGFudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyBQb2ludCB0byBMaW5lIDJEICh4PVtwb2ludFgsIHBvaW50WV0sIHk9W3gtY29lZmYsIHktY29lZmYsIGNvbnN0XSlcbiAgICAgIGlmICh4Lmxlbmd0aCA9PT0gMiAmJiB5Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHlbMF0sIHlbMV0sIHlbMl0pO1xuICAgICAgfSBlbHNlIGlmICh4Lmxlbmd0aCA9PT0gMyAmJiB5Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAvLyBQb2ludCB0byBMaW5lIDNEXG4gICAgICAgIGlmICghXzNkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCA2IG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lM0QoeFswXSwgeFsxXSwgeFsyXSwgeVswXSwgeVsxXSwgeVsyXSwgeVszXSwgeVs0XSwgeVs1XSk7XG4gICAgICB9IGVsc2UgaWYgKHgubGVuZ3RoID09PSB5Lmxlbmd0aCAmJiB4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gUG9pbnQgTi1kaW1lbnNpb25zXG4gICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoeCwgeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBPYmplY3RPYmplY3QoeCwgeSkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfM2QoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgeENvZWZmTGluZSwgeUNvZWZmTGluZSBhbmQgY29uc3RhbnQgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludFgnIGluIHggJiYgJ3BvaW50WScgaW4geCAmJiAneENvZWZmTGluZScgaW4geSAmJiAneUNvZWZmTGluZScgaW4geSAmJiAnY29uc3RhbnQnIGluIHkpIHtcbiAgICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lMkQoeC5wb2ludFgsIHgucG9pbnRZLCB5LnhDb2VmZkxpbmUsIHkueUNvZWZmTGluZSwgeS5jb25zdGFudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMyAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gTGluZSAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFgsIHBvaW50WSBhbmQgcG9pbnRaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHgwLCB5MCwgejAsIGEsIGIgYW5kIGMgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludFgnIGluIHggJiYgJ3BvaW50WScgaW4geCAmJiAneDAnIGluIHkgJiYgJ3kwJyBpbiB5ICYmICd6MCcgaW4geSAmJiAnYScgaW4geSAmJiAnYicgaW4geSAmJiAnYycgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUzRCh4LnBvaW50WCwgeC5wb2ludFksIHgucG9pbnRaLCB5LngwLCB5LnkwLCB5LnowLCB5LmEsIHkuYiwgeS5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBQb2ludCB0byBQb2ludCAyRFxuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVggYW5kIHBvaW50T25lWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFR3b1ggYW5kIHBvaW50VHdvWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3BvaW50T25lWCcgaW4geCAmJiAncG9pbnRPbmVZJyBpbiB4ICYmICdwb2ludFR3b1gnIGluIHkgJiYgJ3BvaW50VHdvWScgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoW3gucG9pbnRPbmVYLCB4LnBvaW50T25lWV0sIFt5LnBvaW50VHdvWCwgeS5wb2ludFR3b1ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAzICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAvLyBQb2ludCB0byBQb2ludCAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVgsIHBvaW50T25lWSBhbmQgcG9pbnRPbmVaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHBvaW50VHdvWCwgcG9pbnRUd29ZIGFuZCBwb2ludFR3b1ogc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludE9uZVgnIGluIHggJiYgJ3BvaW50T25lWScgaW4geCAmJiAncG9pbnRPbmVaJyBpbiB4ICYmICdwb2ludFR3b1gnIGluIHkgJiYgJ3BvaW50VHdvWScgaW4geSAmJiAncG9pbnRUd29aJyBpbiB5KSB7XG4gICAgICAgICAgcmV0dXJuIF9ldWNsaWRlYW5EaXN0YW5jZShbeC5wb2ludE9uZVgsIHgucG9pbnRPbmVZLCB4LnBvaW50T25lWl0sIFt5LnBvaW50VHdvWCwgeS5wb2ludFR3b1ksIHkucG9pbnRUd29aXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYXJyKSB7XG4gICAgICBpZiAoIV9wYWlyd2lzZShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29ycmVjdCBhcnJheSBmb3JtYXQgZW50ZXJlZCBmb3IgcGFpcndpc2UgZGlzdGFuY2UgY2FsY3VsYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9kaXN0YW5jZVBhaXJ3aXNlKGFycik7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaXNOdW1iZXIoYSkge1xuICAgIC8vIGRpc3RhbmNlIHN1cHBvcnRzIG51bWJlcnMgYW5kIGJpZ251bWJlcnNcbiAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInIHx8ICgwLCBfaXMuaXNCaWdOdW1iZXIpKGEpO1xuICB9XG5cbiAgZnVuY3Rpb24gXzJkKGEpIHtcbiAgICAvLyBjaGVja3MgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIGNvcnJlY3QgaW4gY291bnQgYW5kIGFyZSB2YWxpZCAoc2hvdWxkIGJlIG51bWJlcnMpXG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICBhID0gX29iamVjdFRvQXJyYXkoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9pc051bWJlcihhWzBdKSAmJiBfaXNOdW1iZXIoYVsxXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfM2QoYSkge1xuICAgIC8vIGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcmUgY29ycmVjdCBpbiBjb3VudCBhbmQgYXJlIHZhbGlkIChzaG91bGQgYmUgbnVtYmVycylcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgIGEgPSBfb2JqZWN0VG9BcnJheShhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2lzTnVtYmVyKGFbMF0pICYmIF9pc051bWJlcihhWzFdKSAmJiBfaXNOdW1iZXIoYVsyXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfY29udGFpbnNPbmx5TnVtYmVycyhhKSB7XG4gICAgLy8gY2hlY2tzIGlmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGFyZSBjb3JyZWN0IGluIGNvdW50IGFuZCBhcmUgdmFsaWQgKHNob3VsZCBiZSBudW1iZXJzKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBhLmV2ZXJ5KF9pc051bWJlcik7XG4gIH1cblxuICBmdW5jdGlvbiBfcGFyYW1ldHJpY0xpbmUoYSkge1xuICAgIGlmIChhLmNvbnN0cnVjdG9yICE9PSBBcnJheSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBfaXNOdW1iZXIoYVswXSkgJiYgX2lzTnVtYmVyKGFbMV0pICYmIF9pc051bWJlcihhWzJdKSAmJiBfaXNOdW1iZXIoYVszXSkgJiYgX2lzTnVtYmVyKGFbNF0pICYmIF9pc051bWJlcihhWzVdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9vYmplY3RUb0FycmF5KG8pIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgIHZhciBhID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGEucHVzaChvW2tleXNbaV1dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9wYWlyd2lzZShhKSB7XG4gICAgLy8gY2hlY2tzIGZvciB2YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIF9kaXN0YW5jZVBhaXJ3aXNlKEFycmF5KVxuICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMiAmJiBfaXNOdW1iZXIoYVswXVswXSkgJiYgX2lzTnVtYmVyKGFbMF1bMV0pKSB7XG4gICAgICBpZiAoYS5zb21lKGZ1bmN0aW9uIChhSSkge1xuICAgICAgICByZXR1cm4gYUkubGVuZ3RoICE9PSAyIHx8ICFfaXNOdW1iZXIoYUlbMF0pIHx8ICFfaXNOdW1iZXIoYUlbMV0pO1xuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMgJiYgX2lzTnVtYmVyKGFbMF1bMF0pICYmIF9pc051bWJlcihhWzBdWzFdKSAmJiBfaXNOdW1iZXIoYVswXVsyXSkpIHtcbiAgICAgIGlmIChhLnNvbWUoZnVuY3Rpb24gKGFJKSB7XG4gICAgICAgIHJldHVybiBhSS5sZW5ndGggIT09IDMgfHwgIV9pc051bWJlcihhSVswXSkgfHwgIV9pc051bWJlcihhSVsxXSkgfHwgIV9pc051bWJlcihhSVsyXSk7XG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTJEKHgsIHksIGEsIGIsIGMpIHtcbiAgICB2YXIgbnVtID0gYWJzKGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgeCksIG11bHRpcGx5U2NhbGFyKGIsIHkpKSwgYykpO1xuICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihhLCBhKSwgbXVsdGlwbHlTY2FsYXIoYiwgYikpKTtcbiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTNEKHgsIHksIHosIHgwLCB5MCwgejAsIGEsIGIsIGMpIHtcbiAgICB2YXIgbnVtID0gW3N1YnRyYWN0KG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHkwLCB5KSwgYyksIG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHowLCB6KSwgYikpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh6MCwgeiksIGEpLCBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh4MCwgeCksIGMpKSwgc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeDAsIHgpLCBiKSwgbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeTAsIHkpLCBhKSldO1xuICAgIG51bSA9IHNxcnQoYWRkU2NhbGFyKGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihudW1bMF0sIG51bVswXSksIG11bHRpcGx5U2NhbGFyKG51bVsxXSwgbnVtWzFdKSksIG11bHRpcGx5U2NhbGFyKG51bVsyXSwgbnVtWzJdKSkpO1xuICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgYSksIG11bHRpcGx5U2NhbGFyKGIsIGIpKSwgbXVsdGlwbHlTY2FsYXIoYywgYykpKTtcbiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9ldWNsaWRlYW5EaXN0YW5jZSh4LCB5KSB7XG4gICAgdmFyIHZlY3RvclNpemUgPSB4Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICB2YXIgZGlmZiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlY3RvclNpemU7IGkrKykge1xuICAgICAgZGlmZiA9IHN1YnRyYWN0KHhbaV0sIHlbaV0pO1xuICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKG11bHRpcGx5U2NhbGFyKGRpZmYsIGRpZmYpLCByZXN1bHQpO1xuICAgIH1cblxuICAgIHJldHVybiBzcXJ0KHJlc3VsdCk7XG4gIH1cblxuICBmdW5jdGlvbiBfZGlzdGFuY2VQYWlyd2lzZShhKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBwb2ludEEgPSBbXTtcbiAgICB2YXIgcG9pbnRCID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHBvaW50QSA9IFthW2ldWzBdLCBhW2ldWzFdXTtcbiAgICAgICAgICBwb2ludEIgPSBbYVtqXVswXSwgYVtqXVsxXV07XG4gICAgICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICBwb2ludEEgPSBbYVtpXVswXSwgYVtpXVsxXSwgYVtpXVsyXV07XG4gICAgICAgICAgcG9pbnRCID0gW2Fbal1bMF0sIGFbal1bMV0sIGFbal1bMl1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnB1c2goX2V1Y2xpZGVhbkRpc3RhbmNlKHBvaW50QSwgcG9pbnRCKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZURpc3RhbmNlID0gY3JlYXRlRGlzdGFuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUludGVyc2VjdCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ludGVyc2VjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnYWJzJywgJ2FkZCcsICdhZGRTY2FsYXInLCAnbWF0cml4JywgJ211bHRpcGx5JywgJ211bHRpcGx5U2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdzbWFsbGVyJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlSW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiB0d28gbGluZXMgaW4gdHdvIG9yIHRocmVlIGRpbWVuc2lvbnNcbiAgICogYW5kIG9mIGEgbGluZSBhbmQgYSBwbGFuZSBpbiB0aHJlZSBkaW1lbnNpb25zLiBUaGUgaW5wdXRzIGFyZSBpbiB0aGUgZm9ybSBvZlxuICAgKiBhcnJheXMgb3IgMSBkaW1lbnNpb25hbCBtYXRyaWNlcy4gVGhlIGxpbmUgaW50ZXJzZWN0aW9uIGZ1bmN0aW9ucyByZXR1cm4gbnVsbFxuICAgKiBpZiB0aGUgbGluZXMgZG8gbm90IG1lZXQuXG4gICAqXG4gICAqIE5vdGU6IEZpbGwgdGhlIHBsYW5lIGNvZWZmaWNpZW50cyBhcyBgeCArIHkgKyB6ID0gY2AgYW5kIG5vdCBhcyBgeCArIHkgKyB6ICsgYyA9IDBgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KGVuZFBvaW50MUxpbmUxLCBlbmRQb2ludDJMaW5lMSwgZW5kUG9pbnQxTGluZTIsIGVuZFBvaW50MkxpbmUyKVxuICAgKiAgICBtYXRoLmludGVyc2VjdChlbmRQb2ludDEsIGVuZFBvaW50MiwgcGxhbmVDb2VmZmljaWVudHMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyBbNSwgNV1cbiAgICogICAgbWF0aC5pbnRlcnNlY3QoWzAsIDAsIDBdLCBbMTAsIDEwLCAwXSwgWzEwLCAwLCAwXSwgWzAsIDEwLCAwXSkgIC8vIFJldHVybnMgWzUsIDUsIDBdXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KFsxLCAwLCAxXSwgIFs0LCAtMiwgMl0sIFsxLCAxLCAxLCA2XSkgICAgICAgICAgICAvLyBSZXR1cm5zIFs3LCAtNCwgM11cbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHcgICBDby1vcmRpbmF0ZXMgb2YgZmlyc3QgZW5kLXBvaW50IG9mIGZpcnN0IGxpbmVcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHggICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIGVuZC1wb2ludCBvZiBmaXJzdCBsaW5lXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB5ICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIENvLWVmZmljaWVudHMgb2YgdGhlIHBsYW5lJ3MgZXF1YXRpb25cbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHogICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIG51bGwgaWYgdGhlIGNhbGN1bGF0aW9uIGlzIGZvciBsaW5lIGFuZCBwbGFuZVxuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgICAgICAgIFJldHVybnMgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiBsaW5lcy9saW5lcy1wbGFuZXNcbiAgICovXG4gIHZhciBpbnRlcnNlY3QgPSB0eXBlZCgnaW50ZXJzZWN0Jywge1xuICAgICdBcnJheSwgQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheUFycmF5KHgsIHksIHBsYW5lKSB7XG4gICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfNGQocGxhbmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggNCBudW1iZXJzIGV4cGVjdGVkIGFzIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfaW50ZXJzZWN0TGluZVBsYW5lKHhbMF0sIHhbMV0sIHhbMl0sIHlbMF0sIHlbMV0sIHlbMl0sIHBsYW5lWzBdLCBwbGFuZVsxXSwgcGxhbmVbMl0sIHBsYW5lWzNdKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXksIEFycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXlBcnJheUFycmF5KHcsIHgsIHksIHopIHtcbiAgICAgIGlmICh3Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAoIV8yZCh3KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciB0aGlyZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmb3VydGggYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfaW50ZXJzZWN0MmQodywgeCwgeSwgeik7XG4gICAgICB9IGVsc2UgaWYgKHcubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICghXzNkKHcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZvdXJ0aCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9pbnRlcnNlY3QzZCh3WzBdLCB3WzFdLCB3WzJdLCB4WzBdLCB4WzFdLCB4WzJdLCB5WzBdLCB5WzFdLCB5WzJdLCB6WzBdLCB6WzFdLCB6WzJdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5cyB3aXRoIHR3byBvciB0aGVlIGRpbWVuc2lvbmFsIHBvaW50cyBleHBlY3RlZCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXhNYXRyaXgoeCwgeSwgcGxhbmUpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoaW50ZXJzZWN0KHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSwgcGxhbmUudmFsdWVPZigpKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgsIE1hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4TWF0cml4TWF0cml4KHcsIHgsIHksIHopIHtcbiAgICAgIC8vIFRPRE86IG91dHB1dCBtYXRyaXggdHlwZSBzaG91bGQgbWF0Y2ggaW5wdXQgbWF0cml4IHR5cGVcbiAgICAgIHJldHVybiBtYXRyaXgoaW50ZXJzZWN0KHcudmFsdWVPZigpLCB4LnZhbHVlT2YoKSwgeS52YWx1ZU9mKCksIHoudmFsdWVPZigpKSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaXNOdW1lcmljKGEpIHtcbiAgICAvLyBpbnRlcnNlY3Qgc3VwcG9ydHMgbnVtYmVycyBhbmQgYmlnbnVtYmVyc1xuICAgIHJldHVybiB0eXBlb2YgYSA9PT0gJ251bWJlcicgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoYSk7XG4gIH1cblxuICBmdW5jdGlvbiBfMmQoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMiAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfM2QoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMyAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSkgJiYgX2lzTnVtZXJpYyh4WzJdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF80ZCh4KSB7XG4gICAgcmV0dXJuIHgubGVuZ3RoID09PSA0ICYmIF9pc051bWVyaWMoeFswXSkgJiYgX2lzTnVtZXJpYyh4WzFdKSAmJiBfaXNOdW1lcmljKHhbMl0pICYmIF9pc051bWVyaWMoeFszXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0MmQocDFhLCBwMWIsIHAyYSwgcDJiKSB7XG4gICAgdmFyIG8xID0gcDFhO1xuICAgIHZhciBvMiA9IHAyYTtcbiAgICB2YXIgZDEgPSBzdWJ0cmFjdChvMSwgcDFiKTtcbiAgICB2YXIgZDIgPSBzdWJ0cmFjdChvMiwgcDJiKTtcbiAgICB2YXIgZGV0ID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoZDFbMF0sIGQyWzFdKSwgbXVsdGlwbHlTY2FsYXIoZDJbMF0sIGQxWzFdKSk7XG5cbiAgICBpZiAoc21hbGxlcihhYnMoZGV0KSwgY29uZmlnLmVwc2lsb24pKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgZDIwbzExID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8xWzFdKTtcbiAgICB2YXIgZDIxbzEwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8xWzBdKTtcbiAgICB2YXIgZDIwbzIxID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8yWzFdKTtcbiAgICB2YXIgZDIxbzIwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8yWzBdKTtcbiAgICB2YXIgdCA9IGRpdmlkZVNjYWxhcihhZGRTY2FsYXIoc3VidHJhY3Qoc3VidHJhY3QoZDIwbzExLCBkMjFvMTApLCBkMjBvMjEpLCBkMjFvMjApLCBkZXQpO1xuICAgIHJldHVybiBhZGQobXVsdGlwbHkoZDEsIHQpLCBvMSk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0M2RIZWxwZXIoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkge1xuICAgIC8vIChhIC0gYikqKGMgLSBkKSArIChlIC0gZikqKGcgLSBoKSArIChpIC0gaikqKGsgLSBsKVxuICAgIHZhciBhZGQxID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoYSwgYiksIHN1YnRyYWN0KGMsIGQpKTtcbiAgICB2YXIgYWRkMiA9IG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KGUsIGYpLCBzdWJ0cmFjdChnLCBoKSk7XG4gICAgdmFyIGFkZDMgPSBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdChpLCBqKSwgc3VidHJhY3QoaywgbCkpO1xuICAgIHJldHVybiBhZGRTY2FsYXIoYWRkU2NhbGFyKGFkZDEsIGFkZDIpLCBhZGQzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbnRlcnNlY3QzZCh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCB4MywgeTMsIHozLCB4NCwgeTQsIHo0KSB7XG4gICAgdmFyIGQxMzQzID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDQsIHgzLCB5MSwgeTMsIHk0LCB5MywgejEsIHozLCB6NCwgejMpO1xuXG4gICAgdmFyIGQ0MzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHg0LCB4MywgeDIsIHgxLCB5NCwgeTMsIHkyLCB5MSwgejQsIHozLCB6MiwgejEpO1xuXG4gICAgdmFyIGQxMzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDIsIHgxLCB5MSwgeTMsIHkyLCB5MSwgejEsIHozLCB6MiwgejEpO1xuXG4gICAgdmFyIGQ0MzQzID0gX2ludGVyc2VjdDNkSGVscGVyKHg0LCB4MywgeDQsIHgzLCB5NCwgeTMsIHk0LCB5MywgejQsIHozLCB6NCwgejMpO1xuXG4gICAgdmFyIGQyMTIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgyLCB4MSwgeDIsIHgxLCB5MiwgeTEsIHkyLCB5MSwgejIsIHoxLCB6MiwgejEpO1xuXG4gICAgdmFyIHRhID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGQxMzQzLCBkNDMyMSksIG11bHRpcGx5U2NhbGFyKGQxMzIxLCBkNDM0MykpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihkMjEyMSwgZDQzNDMpLCBtdWx0aXBseVNjYWxhcihkNDMyMSwgZDQzMjEpKSk7XG4gICAgdmFyIHRiID0gZGl2aWRlU2NhbGFyKGFkZFNjYWxhcihkMTM0MywgbXVsdGlwbHlTY2FsYXIodGEsIGQ0MzIxKSksIGQ0MzQzKTtcbiAgICB2YXIgcGF4ID0gYWRkU2NhbGFyKHgxLCBtdWx0aXBseVNjYWxhcih0YSwgc3VidHJhY3QoeDIsIHgxKSkpO1xuICAgIHZhciBwYXkgPSBhZGRTY2FsYXIoeTEsIG11bHRpcGx5U2NhbGFyKHRhLCBzdWJ0cmFjdCh5MiwgeTEpKSk7XG4gICAgdmFyIHBheiA9IGFkZFNjYWxhcih6MSwgbXVsdGlwbHlTY2FsYXIodGEsIHN1YnRyYWN0KHoyLCB6MSkpKTtcbiAgICB2YXIgcGJ4ID0gYWRkU2NhbGFyKHgzLCBtdWx0aXBseVNjYWxhcih0Yiwgc3VidHJhY3QoeDQsIHgzKSkpO1xuICAgIHZhciBwYnkgPSBhZGRTY2FsYXIoeTMsIG11bHRpcGx5U2NhbGFyKHRiLCBzdWJ0cmFjdCh5NCwgeTMpKSk7XG4gICAgdmFyIHBieiA9IGFkZFNjYWxhcih6MywgbXVsdGlwbHlTY2FsYXIodGIsIHN1YnRyYWN0KHo0LCB6MykpKTtcblxuICAgIGlmIChlcXVhbFNjYWxhcihwYXgsIHBieCkgJiYgZXF1YWxTY2FsYXIocGF5LCBwYnkpICYmIGVxdWFsU2NhbGFyKHBheiwgcGJ6KSkge1xuICAgICAgcmV0dXJuIFtwYXgsIHBheSwgcGF6XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2ludGVyc2VjdExpbmVQbGFuZSh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCB4LCB5LCB6LCBjKSB7XG4gICAgdmFyIHgxeCA9IG11bHRpcGx5U2NhbGFyKHgxLCB4KTtcbiAgICB2YXIgeDJ4ID0gbXVsdGlwbHlTY2FsYXIoeDIsIHgpO1xuICAgIHZhciB5MXkgPSBtdWx0aXBseVNjYWxhcih5MSwgeSk7XG4gICAgdmFyIHkyeSA9IG11bHRpcGx5U2NhbGFyKHkyLCB5KTtcbiAgICB2YXIgejF6ID0gbXVsdGlwbHlTY2FsYXIoejEsIHopO1xuICAgIHZhciB6MnogPSBtdWx0aXBseVNjYWxhcih6Miwgeik7XG4gICAgdmFyIHQgPSBkaXZpZGVTY2FsYXIoc3VidHJhY3Qoc3VidHJhY3Qoc3VidHJhY3QoYywgeDF4KSwgeTF5KSwgejF6KSwgc3VidHJhY3Qoc3VidHJhY3Qoc3VidHJhY3QoYWRkU2NhbGFyKGFkZFNjYWxhcih4MngsIHkyeSksIHoyeiksIHgxeCksIHkxeSksIHoxeikpO1xuICAgIHZhciBweCA9IGFkZFNjYWxhcih4MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeDIsIHgxKSkpO1xuICAgIHZhciBweSA9IGFkZFNjYWxhcih5MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeTIsIHkxKSkpO1xuICAgIHZhciBweiA9IGFkZFNjYWxhcih6MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoejIsIHoxKSkpO1xuICAgIHJldHVybiBbcHgsIHB5LCBwel07IC8vIFRPRE86IEFkZCBjYXNlcyB3aGVuIGxpbmUgaXMgcGFyYWxsZWwgdG8gdGhlIHBsYW5lOlxuICAgIC8vICAgICAgIChhKSBubyBpbnRlcnNlY3Rpb24sXG4gICAgLy8gICAgICAgKGIpIGxpbmUgY29udGFpbmVkIGluIHBsYW5lXG4gIH1cblxuICByZXR1cm4gaW50ZXJzZWN0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUludGVyc2VjdCA9IGNyZWF0ZUludGVyc2VjdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQW5kID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhbmQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ25vdCddO1xudmFyIGNyZWF0ZUFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIG5vdCA9IF9yZWYubm90O1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgYW5kYC4gVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGJvdGggZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFuZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hbmQoMiwgNCkgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgYSA9IFsyLCAwLCAwXVxuICAgKiAgICBiID0gWzMsIDcsIDBdXG4gICAqICAgIGMgPSAwXG4gICAqXG4gICAqICAgIG1hdGguYW5kKGEsIGIpICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIGZhbHNlXVxuICAgKiAgICBtYXRoLmFuZChhLCBjKSAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBub3QsIG9yLCB4b3JcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gYm90aCBpbnB1dHMgYXJlIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciBhbmQgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5hbmROdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCkgJiYgKHkucmUgIT09IDAgfHwgeS5pbSAhPT0gMCk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICF4LmlzWmVybygpICYmICF5LmlzWmVybygpICYmICF4LmlzTmFOKCkgJiYgIXkuaXNOYU4oKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIGFuZCh4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGFuZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYW5kKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbmQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh5KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBhbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAobm90KHkpKSB7XG4gICAgICAgIC8vIHJldHVybiB6ZXJvIG1hdHJpeFxuICAgICAgICByZXR1cm4gemVyb3MoeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh4KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBhbmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChub3QoeCkpIHtcbiAgICAgICAgLy8gcmV0dXJuIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh4LnNpemUoKSwgeC5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYW5kO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFuZCA9IGNyZWF0ZUFuZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm90ID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbm90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogTG9naWNhbCBgbm90YC4gRmxpcHMgYm9vbGVhbiB2YWx1ZSBvZiBhIGdpdmVuIHBhcmFtZXRlci5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm5vdCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5ub3QoMikgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGgubm90KDApICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGgubm90KHRydWUpICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBhID0gWzIsIC03LCAwXVxuICAgKiAgICBtYXRoLm5vdChhKSAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFuZCwgb3IsIHhvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBpbnB1dCBpcyBhIHplcm8gb3IgZW1wdHkgdmFsdWUuXG4gICAqL1xuICB2YXIgbm90ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5ub3ROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yZSA9PT0gMCAmJiB4LmltID09PSAwO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguaXNaZXJvKCkgfHwgeC5pc05hTigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC52YWx1ZSAhPT0gbnVsbCA/IG5vdCh4LnZhbHVlKSA6IHRydWU7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIG5vdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5vdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb3QgPSBjcmVhdGVOb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9yID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA1XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdvcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNSA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgb3JgLiBUZXN0IGlmIGF0IGxlYXN0IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgub3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgub3IoMiwgNCkgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgYSA9IFsyLCA1LCAwXVxuICAgKiAgICBiID0gWzAsIDIyLCAwXVxuICAgKiAgICBjID0gMFxuICAgKlxuICAgKiAgICBtYXRoLm9yKGEsIGIpICAgLy8gcmV0dXJucyBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdXG4gICAqICAgIG1hdGgub3IoYiwgYykgICAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhbmQsIG5vdCwgeG9yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY2hlY2tcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdHJ1ZSB3aGVuIG9uZSBvZiB0aGUgaW5wdXRzIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciBvciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm9yTnVtYmVyLFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCB8fCB5LnJlICE9PSAwIHx8IHkuaW0gIT09IDA7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICF4LmlzWmVybygpICYmICF4LmlzTmFOKCkgfHwgIXkuaXNaZXJvKCkgJiYgIXkuaXNOYU4oKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIG9yKHgudmFsdWUgfHwgMCwgeS52YWx1ZSB8fCAwKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgb3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gb3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBvciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgb3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlT3IgPSBjcmVhdGVPcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlWG9yID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd4b3InO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlWG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBMb2dpY2FsIGB4b3JgLiBUZXN0IHdoZXRoZXIgb25lIGFuZCBvbmx5IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgueG9yKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnhvcigyLCA0KSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgYSA9IFsyLCAwLCAwXVxuICAgKiAgICBiID0gWzIsIDcsIDBdXG4gICAqICAgIGMgPSAwXG4gICAqXG4gICAqICAgIG1hdGgueG9yKGEsIGIpICAgLy8gcmV0dXJucyBbZmFsc2UsIHRydWUsIGZhbHNlXVxuICAgKiAgICBtYXRoLnhvcihhLCBjKSAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFuZCwgbm90LCBvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBvbmUgYW5kIG9ubHkgb25lIGlucHV0IGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciB4b3IgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci54b3JOdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCkgIT09ICh5LnJlICE9PSAwIHx8IHkuaW0gIT09IDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiAoIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKSkgIT09ICgheS5pc1plcm8oKSAmJiAheS5pc05hTigpKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIHhvcih4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHhvcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgeG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgeG9yKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB4b3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHhvcihtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4geG9yKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgeG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIHhvciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCB4b3IsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHhvciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB4b3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlWG9yID0gY3JlYXRlWG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcHBseSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhcHBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc0ludGVnZXInXTtcbnZhciBjcmVhdGVBcHBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcblxuICAvKipcbiAgICogQXBwbHkgYSBmdW5jdGlvbiB0aGF0IG1hcHMgYW4gYXJyYXkgdG8gYSBzY2FsYXJcbiAgICogYWxvbmcgYSBnaXZlbiBheGlzIG9mIGEgbWF0cml4IG9yIGFycmF5LlxuICAgKiBSZXR1cm5zIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIG9uZSBsZXNzIGRpbWVuc2lvbiB0aGFuIHRoZSBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5hcHBseShBLCBkaW0sIGNhbGxiYWNrKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZGltOiBudW1iZXJgIGlzIGEgemVyby1iYXNlZCBkaW1lbnNpb24gb3ZlciB3aGljaCB0byBjb25jYXRlbmF0ZSB0aGUgbWF0cmljZXMuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICBjb25zdCBzdW0gPSBtYXRoLnN1bVxuICAgKlxuICAgKiAgICBtYXRoLmFwcGx5KEEsIDAsIHN1bSkgICAgICAgICAgICAgLy8gcmV0dXJucyBbNCwgNl1cbiAgICogICAgbWF0aC5hcHBseShBLCAxLCBzdW0pICAgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDddXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtYXAsIGZpbHRlciwgZm9yRWFjaFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheSAgIFRoZSBpbnB1dCBNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICAgICBUaGUgZGltZW5zaW9uIGFsb25nIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBhcHBsaWVkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgYXBwbGllZC4gVGhpcyBGdW5jdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCB0YWtlIGFuIGFycmF5IG9yIDEtZCBtYXRyaXggYXMgYW4gaW5wdXQgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgbnVtYmVyLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmVzICAgIFRoZSByZXNpZHVhbCBtYXRyaXggd2l0aCB0aGUgZnVuY3Rpb24gYXBwbGllZCBvdmVyIHNvbWUgZGltZW5zaW9uLlxuICAgKi9cbiAgdmFyIGFwcGx5ID0gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyLCBmdW5jdGlvbic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyRnVuY3Rpb24obWF0LCBkaW0sIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihkaW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludGVnZXIgbnVtYmVyIGV4cGVjdGVkIGZvciBkaW1lbnNpb24nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNpemUgPSBBcnJheS5pc0FycmF5KG1hdCkgPyAoMCwgX2FycmF5LmFycmF5U2l6ZSkobWF0KSA6IG1hdC5zaXplKCk7XG5cbiAgICAgIGlmIChkaW0gPCAwIHx8IGRpbSA+PSBzaXplLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihkaW0sIHNpemUubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKG1hdCkpIHtcbiAgICAgICAgcmV0dXJuIG1hdC5jcmVhdGUoX2FwcGx5KG1hdC52YWx1ZU9mKCksIGRpbSwgY2FsbGJhY2spKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfYXBwbHkobWF0LCBkaW0sIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXBwbHk7XG59KTtcbi8qKlxuICogUmVjdXJzaXZlbHkgcmVkdWNlIGEgbWF0cml4XG4gKiBAcGFyYW0ge0FycmF5fSBtYXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldFxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUFwcGx5ID0gY3JlYXRlQXBwbHk7XG5cbmZ1bmN0aW9uIF9hcHBseShtYXQsIGRpbSwgY2FsbGJhY2spIHtcbiAgdmFyIGksIHJldCwgdHJhbjtcblxuICBpZiAoZGltIDw9IDApIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWF0WzBdKSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG1hdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW4gPSBfc3dpdGNoKG1hdCk7XG4gICAgICByZXQgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRyYW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gX2FwcGx5KHRyYW5baV0sIGRpbSAtIDEsIGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0ID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSBfYXBwbHkobWF0W2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuLyoqXG4gKiBUcmFuc3Bvc2UgYSBtYXRyaXhcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdFxuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc3dpdGNoKG1hdCkge1xuICB2YXIgSSA9IG1hdC5sZW5ndGg7XG4gIHZhciBKID0gbWF0WzBdLmxlbmd0aDtcbiAgdmFyIGksIGo7XG4gIHZhciByZXQgPSBbXTtcblxuICBmb3IgKGogPSAwOyBqIDwgSjsgaisrKSB7XG4gICAgdmFyIHRtcCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IEk7IGkrKykge1xuICAgICAgdG1wLnB1c2gobWF0W2ldW2pdKTtcbiAgICB9XG5cbiAgICByZXQucHVzaCh0bXApO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29sdW1uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdjb2x1bW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG52YXIgY3JlYXRlQ29sdW1uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIE1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jb2x1bW4odmFsdWUsIGluZGV4KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgY29sdW1uXG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5jb2x1bW4oZCwgMSkgLy8gcmV0dXJucyBbWzJdLCBbNF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcm93XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfSB2YWx1ZSAgIEFuIGFycmF5IG9yIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGNvbHVtblxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICBUaGUgcmV0cmlldmVkIGNvbHVtblxuICAgKi9cbiAgdmFyIGNvbHVtbiA9IHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBudW1iZXInOiBfY29sdW1uLFxuICAgICdBcnJheSwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXIodmFsdWUsIGNvbHVtbikge1xuICAgICAgcmV0dXJuIF9jb2x1bW4obWF0cml4KCgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSkpLCBjb2x1bW4pLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29sdW1uO1xuICAvKipcbiAgICogUmV0cmlldmUgYSBjb2x1bW4gb2YgYSBtYXRyaXhcbiAgICogQHBhcmFtIHtNYXRyaXggfSB2YWx1ZSAgQSBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiAgVGhlIGluZGV4IG9mIHRoZSBjb2x1bW5cbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIHJldHJpZXZlZCBjb2x1bW5cbiAgICovXG5cbiAgZnVuY3Rpb24gX2NvbHVtbih2YWx1ZSwgY29sdW1uKSB7XG4gICAgLy8gY2hlY2sgZGltZW5zaW9uc1xuICAgIGlmICh2YWx1ZS5zaXplKCkubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGNvbHVtbiwgdmFsdWUuc2l6ZSgpWzFdKTtcbiAgICB2YXIgcm93UmFuZ2UgPSByYW5nZSgwLCB2YWx1ZS5zaXplKClbMF0pO1xuICAgIHZhciBpbmRleCA9IG5ldyBJbmRleChyb3dSYW5nZSwgY29sdW1uKTtcbiAgICByZXR1cm4gdmFsdWUuc3Vic2V0KGluZGV4KTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtbiA9IGNyZWF0ZUNvbHVtbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uY2F0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29uY2F0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdpc0ludGVnZXInXTtcbnZhciBjcmVhdGVDb25jYXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcblxuICAvKipcbiAgICogQ29uY2F0ZW5hdGUgdHdvIG9yIG1vcmUgbWF0cmljZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLilcbiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLiwgZGltKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZGltOiBudW1iZXJgIGlzIGEgemVyby1iYXNlZCBkaW1lbnNpb24gb3ZlciB3aGljaCB0byBjb25jYXRlbmF0ZSB0aGUgbWF0cmljZXMuXG4gICAqICAgQnkgZGVmYXVsdCB0aGUgbGFzdCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpY2VzLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMl0sIFs1LCA2XV1cbiAgICogICAgY29uc3QgQiA9IFtbMywgNF0sIFs3LCA4XV1cbiAgICpcbiAgICogICAgbWF0aC5jb25jYXQoQSwgQikgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMiwgMywgNF0sIFs1LCA2LCA3LCA4XV1cbiAgICogICAgbWF0aC5jb25jYXQoQSwgQiwgMCkgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMl0sIFs1LCA2XSwgWzMsIDRdLCBbNywgOF1dXG4gICAqICAgIG1hdGguY29uY2F0KCdoZWxsbycsICcgJywgJ3dvcmxkJykgLy8gcmV0dXJucyAnaGVsbG8gd29ybGQnXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaXplLCBzcXVlZXplLCBzdWJzZXQsIHRyYW5zcG9zZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiBBcnJheSB8IE1hdHJpeH0gYXJncyAgICAgVHdvIG9yIG1vcmUgbWF0cmljZXNcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IENvbmNhdGVuYXRlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gVE9ETzogY2hhbmdlIHNpZ25hdHVyZSB0byAnLi4uQXJyYXkgfCBNYXRyaXgsIGRpbT8nIHdoZW4gc3VwcG9ydGVkXG4gICAgJy4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJncykge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgZGltID0gLTE7IC8vIHplcm8tYmFzZWQgZGltZW5zaW9uXG5cbiAgICAgIHZhciBwcmV2RGltO1xuICAgICAgdmFyIGFzTWF0cml4ID0gZmFsc2U7XG4gICAgICB2YXIgbWF0cmljZXMgPSBbXTsgLy8gY29udGFpbnMgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlzXG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJnc1tpXTsgLy8gdGVzdCB3aGV0aGVyIHdlIG5lZWQgdG8gcmV0dXJuIGEgTWF0cml4IChpZiBub3Qgd2UgcmV0dXJuIGFuIEFycmF5KVxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShhcmcpKSB7XG4gICAgICAgICAgYXNNYXRyaXggPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGFyZykgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoYXJnKSkge1xuICAgICAgICAgIGlmIChpICE9PSBsZW4gLSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpbWVuc2lvbiBtdXN0IGJlIHNwZWNpZmllZCBhcyBsYXN0IGFyZ3VtZW50Jyk7XG4gICAgICAgICAgfSAvLyBsYXN0IGFyZ3VtZW50IGNvbnRhaW5zIHRoZSBkaW1lbnNpb24gb24gd2hpY2ggdG8gY29uY2F0ZW5hdGVcblxuXG4gICAgICAgICAgcHJldkRpbSA9IGRpbTtcbiAgICAgICAgICBkaW0gPSBhcmcudmFsdWVPZigpOyAvLyBjaGFuZ2UgQmlnTnVtYmVyIHRvIG51bWJlclxuXG4gICAgICAgICAgaWYgKCFpc0ludGVnZXIoZGltKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW50ZWdlciBudW1iZXIgZXhwZWN0ZWQgZm9yIGRpbWVuc2lvbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaW0gPCAwIHx8IGkgPiAwICYmIGRpbSA+IHByZXZEaW0pIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHdvdWxkIGJlIG1vcmUgY2xlYXIgd2hlbiB0aHJvd2luZyBhIERpbWVuc2lvbkVycm9yIGhlcmVcbiAgICAgICAgICAgIHRocm93IG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGRpbSwgcHJldkRpbSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIGEgbWF0cml4IG9yIGFycmF5XG4gICAgICAgICAgdmFyIG0gPSAoMCwgX29iamVjdC5jbG9uZSkoYXJnKS52YWx1ZU9mKCk7XG4gICAgICAgICAgdmFyIHNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkobSk7XG4gICAgICAgICAgbWF0cmljZXNbaV0gPSBtO1xuICAgICAgICAgIHByZXZEaW0gPSBkaW07XG4gICAgICAgICAgZGltID0gc2l6ZS5sZW5ndGggLSAxOyAvLyB2ZXJpZnkgd2hldGhlciBlYWNoIG9mIHRoZSBtYXRyaWNlcyBoYXMgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnNcblxuICAgICAgICAgIGlmIChpID4gMCAmJiBkaW0gIT09IHByZXZEaW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IocHJldkRpbSArIDEsIGRpbSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0cmljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQXQgbGVhc3Qgb25lIG1hdHJpeCBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0gbWF0cmljZXMuc2hpZnQoKTtcblxuICAgICAgd2hpbGUgKG1hdHJpY2VzLmxlbmd0aCkge1xuICAgICAgICByZXMgPSBfY29uY2F0KHJlcywgbWF0cmljZXMuc2hpZnQoKSwgZGltLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFzTWF0cml4ID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICAnLi4uc3RyaW5nJzogZnVuY3Rpb24gc3RyaW5nKGFyZ3MpIHtcbiAgICAgIHJldHVybiBhcmdzLmpvaW4oJycpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogUmVjdXJzaXZlbHkgY29uY2F0ZW5hdGUgdHdvIG1hdHJpY2VzLlxuICogVGhlIGNvbnRlbnRzIG9mIHRoZSBtYXRyaWNlcyBpcyBub3QgY2xvbmVkLlxuICogQHBhcmFtIHtBcnJheX0gYSAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYiAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtudW1iZXJ9IGNvbmNhdERpbSAgICBUaGUgZGltZW5zaW9uIG9uIHdoaWNoIHRvIGNvbmNhdGVuYXRlICh6ZXJvLWJhc2VkKVxuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICBUaGUgY3VycmVudCBkaW0gKHplcm8tYmFzZWQpXG4gKiBAcmV0dXJuIHtBcnJheX0gYyAgICAgICAgICAgIFRoZSBjb25jYXRlbmF0ZWQgbWF0cml4XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29uY2F0ID0gY3JlYXRlQ29uY2F0O1xuXG5mdW5jdGlvbiBfY29uY2F0KGEsIGIsIGNvbmNhdERpbSwgZGltKSB7XG4gIGlmIChkaW0gPCBjb25jYXREaW0pIHtcbiAgICAvLyByZWN1cnNlIGludG8gbmV4dCBkaW1lbnNpb25cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgdmFyIGMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY1tpXSA9IF9jb25jYXQoYVtpXSwgYltpXSwgY29uY2F0RGltLCBkaW0gKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfSBlbHNlIHtcbiAgICAvLyBjb25jYXRlbmF0ZSB0aGlzIGRpbWVuc2lvblxuICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDcm9zcyA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Nyb3NzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZUNyb3NzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byB2ZWN0b3JzIGluIHRocmVlIGRpbWVuc2lvbmFsIHNwYWNlLlxuICAgKiBUaGUgY3Jvc3MgcHJvZHVjdCBvZiBgQSA9IFthMSwgYTIsIGEzXWAgYW5kIGBCID0gW2IxLCBiMiwgYjNdYCBpcyBkZWZpbmVkXG4gICAqIGFzOlxuICAgKlxuICAgKiAgICBjcm9zcyhBLCBCKSA9IFtcbiAgICogICAgICBhMiAqIGIzIC0gYTMgKiBiMixcbiAgICogICAgICBhMyAqIGIxIC0gYTEgKiBiMyxcbiAgICogICAgICBhMSAqIGIyIC0gYTIgKiBiMVxuICAgKiAgICBdXG4gICAqXG4gICAqIElmIG9uZSBvZiB0aGUgaW5wdXQgdmVjdG9ycyBoYXMgYSBkaW1lbnNpb24gZ3JlYXRlciB0aGFuIDEsIHRoZSBvdXRwdXRcbiAgICogdmVjdG9yIHdpbGwgYmUgYSAxeDMgKDItZGltZW5zaW9uYWwpIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNyb3NzKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNyb3NzKFsxLCAxLCAwXSwgICBbMCwgMSwgMV0pICAgICAgIC8vIFJldHVybnMgWzEsIC0xLCAxXVxuICAgKiAgICBtYXRoLmNyb3NzKFszLCAtMywgMV0sICBbNCwgOSwgMl0pICAgICAgIC8vIFJldHVybnMgWy0xNSwgLTIsIDM5XVxuICAgKiAgICBtYXRoLmNyb3NzKFsyLCAzLCA0XSwgICBbNSwgNiwgN10pICAgICAgIC8vIFJldHVybnMgWy0zLCA2LCAtM11cbiAgICogICAgbWF0aC5jcm9zcyhbWzEsIDIsIDNdXSwgW1s0XSwgWzVdLCBbNl1dKSAvLyBSZXR1cm5zIFtbLTMsIDYsIC0zXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGRvdCwgbXVsdGlwbHlcbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHggICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIG1hdHJpeChfY3Jvc3MoeC50b0FycmF5KCksIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgudG9BcnJheSgpLCB5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgsIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogX2Nyb3NzXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjcm9zcyBwcm9kdWN0IGZvciB0d28gYXJyYXlzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHggIEZpcnN0IHZlY3RvclxuICAgKiBAcGFyYW0ge0FycmF5fSB5ICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB4IGFuZCB5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jcm9zcyh4LCB5KSB7XG4gICAgdmFyIGhpZ2hlc3REaW1lbnNpb24gPSBNYXRoLm1heCgoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCkubGVuZ3RoLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeSkubGVuZ3RoKTtcbiAgICB4ID0gKDAsIF9hcnJheS5zcXVlZXplKSh4KTtcbiAgICB5ID0gKDAsIF9hcnJheS5zcXVlZXplKSh5KTtcbiAgICB2YXIgeFNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG4gICAgdmFyIHlTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHkpO1xuXG4gICAgaWYgKHhTaXplLmxlbmd0aCAhPT0gMSB8fCB5U2l6ZS5sZW5ndGggIT09IDEgfHwgeFNpemVbMF0gIT09IDMgfHwgeVNpemVbMF0gIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZWN0b3JzIHdpdGggbGVuZ3RoIDMgZXhwZWN0ZWQgJyArICcoU2l6ZSBBID0gWycgKyB4U2l6ZS5qb2luKCcsICcpICsgJ10sIEIgPSBbJyArIHlTaXplLmpvaW4oJywgJykgKyAnXSknKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvZHVjdCA9IFtzdWJ0cmFjdChtdWx0aXBseSh4WzFdLCB5WzJdKSwgbXVsdGlwbHkoeFsyXSwgeVsxXSkpLCBzdWJ0cmFjdChtdWx0aXBseSh4WzJdLCB5WzBdKSwgbXVsdGlwbHkoeFswXSwgeVsyXSkpLCBzdWJ0cmFjdChtdWx0aXBseSh4WzBdLCB5WzFdKSwgbXVsdGlwbHkoeFsxXSwgeVswXSkpXTtcblxuICAgIGlmIChoaWdoZXN0RGltZW5zaW9uID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm9kdWN0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByb2R1Y3Q7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3Jvc3MgPSBjcmVhdGVDcm9zczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3RyYW5zcG9zZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2N0cmFuc3Bvc2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAndHJhbnNwb3NlJywgJ2NvbmonXTtcbnZhciBjcmVhdGVDdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlLFxuICAgICAgY29uaiA9IF9yZWYuY29uajtcblxuICAvKipcbiAgICogVHJhbnNwb3NlIGFuZCBjb21wbGV4IGNvbmp1Z2F0ZSBhIG1hdHJpeC4gQWxsIHZhbHVlcyBvZiB0aGUgbWF0cml4IGFyZVxuICAgKiByZWZsZWN0ZWQgb3ZlciBpdHMgbWFpbiBkaWFnb25hbCBhbmQgdGhlbiB0aGUgY29tcGxleCBjb25qdWdhdGUgaXNcbiAgICogdGFrZW4uIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjb21wbGV4IGNvbmp1Z2F0aW9uIGZvciBzY2FsYXJzIGFuZFxuICAgKiB2ZWN0b3JzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmN0cmFuc3Bvc2UoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIG1hdGguY29tcGxleCg2LDcpXV1cbiAgICogICAgIG1hdGguY3RyYW5zcG9zZShBKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCA0XSwgWzIsIDVdLCBbMywge3JlOjYsaW06N31dXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHRyYW5zcG9zZSwgZGlhZywgaW52LCBzdWJzZXQsIHNxdWVlemVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgTWF0cml4IHRvIGJlIGN0cmFuc3Bvc2VkXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgIFRoZSBjdHJhbnNwb3NlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgcmV0dXJuIGNvbmoodHJhbnNwb3NlKHgpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUN0cmFuc3Bvc2UgPSBjcmVhdGVDdHJhbnNwb3NlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXQgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGV0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICd1bmFyeU1pbnVzJywgJ2x1cCddO1xudmFyIGNyZWF0ZURldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHVuYXJ5TWludXMgPSBfcmVmLnVuYXJ5TWludXMsXG4gICAgICBsdXAgPSBfcmVmLmx1cDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRldCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kZXQoW1sxLCAyXSwgWzMsIDRdXSkgLy8gcmV0dXJucyAtMlxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1xuICAgKiAgICAgIFstMiwgMiwgM10sXG4gICAqICAgICAgWy0xLCAxLCAzXSxcbiAgICogICAgICBbMiwgMCwgLTFdXG4gICAqICAgIF1cbiAgICogICAgbWF0aC5kZXQoQSkgLy8gcmV0dXJucyA2XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpbnZcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgQSBtYXRyaXhcbiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGV0ZXJtaW5hbnQgb2YgYHhgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBkZXQoeCkge1xuICAgICAgdmFyIHNpemU7XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICBzaXplID0geC5zaXplKCk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgICAgeCA9IG1hdHJpeCh4KTtcbiAgICAgICAgc2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYSBzY2FsYXJcbiAgICAgICAgc2l6ZSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAvLyBzY2FsYXJcbiAgICAgICAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHgpO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4LnZhbHVlT2YoKVswXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsIGFycmF5XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGV0KHguY2xvbmUoKS52YWx1ZU9mKCksIHJvd3MsIGNvbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5W119IG1hdHJpeCAgQSBzcXVhcmUsIHR3byBkaW1lbnNpb25hbCBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgICAgIE51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXggKHplcm8tYmFzZWQpXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xzICAgICBOdW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4ICh6ZXJvLWJhc2VkKVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBkZXRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2RldChtYXRyaXgsIHJvd3MsIGNvbHMpIHtcbiAgICBpZiAocm93cyA9PT0gMSkge1xuICAgICAgLy8gdGhpcyBpcyBhIDEgeCAxIG1hdHJpeFxuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKShtYXRyaXhbMF1bMF0pO1xuICAgIH0gZWxzZSBpZiAocm93cyA9PT0gMikge1xuICAgICAgLy8gdGhpcyBpcyBhIDIgeCAyIG1hdHJpeFxuICAgICAgLy8gdGhlIGRldGVybWluYW50IG9mIFthMTEsYTEyO2EyMSxhMjJdIGlzIGRldCA9IGExMSphMjItYTIxKmExMlxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG11bHRpcGx5KG1hdHJpeFswXVswXSwgbWF0cml4WzFdWzFdKSwgbXVsdGlwbHkobWF0cml4WzFdWzBdLCBtYXRyaXhbMF1bMV0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgTFUgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGRlY29tcCA9IGx1cChtYXRyaXgpOyAvLyBUaGUgZGV0ZXJtaW5hbnQgaXMgdGhlIHByb2R1Y3Qgb2YgdGhlIGRpYWdvbmFsIGVudHJpZXMgb2YgVSAoYW5kIHRob3NlIG9mIEwsIGJ1dCB0aGV5IGFyZSBhbGwgMSlcblxuICAgICAgdmFyIGRldCA9IGRlY29tcC5VWzBdWzBdO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgcm93czsgX2krKykge1xuICAgICAgICBkZXQgPSBtdWx0aXBseShkZXQsIGRlY29tcC5VW19pXVtfaV0pO1xuICAgICAgfSAvLyBUaGUgZGV0ZXJtaW5hbnQgd2lsbCBiZSBtdWx0aXBsaWVkIGJ5IDEgb3IgLTEgZGVwZW5kaW5nIG9uIHRoZSBwYXJpdHkgb2YgdGhlIHBlcm11dGF0aW9uIG1hdHJpeC5cbiAgICAgIC8vIFRoaXMgY2FuIGJlIGRldGVybWluZWQgYnkgY291bnRpbmcgdGhlIGN5Y2xlcy4gVGhpcyBpcyByb3VnaGx5IGEgbGluZWFyIHRpbWUgYWxnb3JpdGhtLlxuXG5cbiAgICAgIHZhciBldmVuQ3ljbGVzID0gMDtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciB2aXNpdGVkID0gW107XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHdoaWxlICh2aXNpdGVkW2ldKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPj0gcm93cykgYnJlYWs7XG4gICAgICAgIHZhciBqID0gaTtcbiAgICAgICAgdmFyIGN5Y2xlTGVuID0gMDtcblxuICAgICAgICB3aGlsZSAoIXZpc2l0ZWRbZGVjb21wLnBbal1dKSB7XG4gICAgICAgICAgdmlzaXRlZFtkZWNvbXAucFtqXV0gPSB0cnVlO1xuICAgICAgICAgIGogPSBkZWNvbXAucFtqXTtcbiAgICAgICAgICBjeWNsZUxlbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN5Y2xlTGVuICUgMiA9PT0gMCkge1xuICAgICAgICAgIGV2ZW5DeWNsZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbkN5Y2xlcyAlIDIgPT09IDAgPyBkZXQgOiB1bmFyeU1pbnVzKGRldCk7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGV0ID0gY3JlYXRlRGV0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaWFnID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkaWFnJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCcsICdTcGFyc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEaWFnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXhcbiAgICpcbiAgICogV2hlbiBgeGAgaXMgYSB2ZWN0b3IsIGEgbWF0cml4IHdpdGggdmVjdG9yIGB4YCBvbiB0aGUgZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogV2hlbiBgeGAgaXMgYSB0d28gZGltZW5zaW9uYWwgbWF0cml4LCB0aGUgbWF0cml4ZXMgYGtgdGggZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZCBhcyB2ZWN0b3IuXG4gICAqIFdoZW4gayBpcyBwb3NpdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdXBlciBkaWFnb25hbC5cbiAgICogV2hlbiBrIGlzIG5lZ2F0aXZlLCB0aGUgdmFsdWVzIGFyZSBwbGFjZWQgb24gdGhlIHN1YiBkaWFnb25hbC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5kaWFnKFgpXG4gICAqICAgICBtYXRoLmRpYWcoWCwgZm9ybWF0KVxuICAgKiAgICAgbWF0aC5kaWFnKFgsIGspXG4gICAqICAgICBtYXRoLmRpYWcoWCwgaywgZm9ybWF0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIC8vIGNyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeFxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSkgICAgICAvLyByZXR1cm5zIFtbMSwgMCwgMF0sIFswLCAyLCAwXSwgWzAsIDAsIDNdXVxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgMSkgICAvLyByZXR1cm5zIFtbMCwgMSwgMCwgMF0sIFswLCAwLCAyLCAwXSwgWzAsIDAsIDAsIDNdXVxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgLTEpICAvLyByZXR1cm5zIFtbMCwgMCwgMF0sIFsxLCAwLCAwXSwgWzAsIDIsIDBdLCBbMCwgMCwgM11dXG4gICAqXG4gICAqICAgIC8vIHJldHJpZXZlIHRoZSBkaWFnb25hbCBmcm9tIGEgbWF0cml4XG4gICAqICAgIGNvbnN0IGEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl0sIFs3LCA4LCA5XV1cbiAgICogICAgbWF0aC5kaWFnKGEpICAgLy8gcmV0dXJucyBbMSwgNSwgOV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBvbmVzLCB6ZXJvcywgaWRlbnRpdHlcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgICAgICBBIHR3byBkaW1lbnNpb25hbCBtYXRyaXggb3IgYSB2ZWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICBUaGUgZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yIHJldHJpZXZlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXQ9J2RlbnNlJ10gICBUaGUgbWF0cml4IHN0b3JhZ2UgZm9ybWF0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWF0cml4IHwgQXJyYXl9IERpYWdvbmFsIG1hdHJpeCBmcm9tIGlucHV0IHZlY3Rvciwgb3IgZGlhZ29uYWwgZnJvbSBpbnB1dCBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIEZJWE1FOiBzaW1wbGlmeSB0aGlzIGh1Z2UgYW1vdW50IG9mIHNpZ25hdHVyZXMgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyBvcHRpb25hbCBhcmd1bWVudHNcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KSwgbnVsbCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHgsIGspIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCBrLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheUJpZ051bWJlcih4LCBrKSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheVN0cmluZyh4LCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIGZvcm1hdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgaywgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBCaWdOdW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5QmlnTnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBNYXRyaXhOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIE1hdHJpeFN0cmluZyh4LCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssIHguc2l6ZSgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQmlnTnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ3JlZWF0ZSBkaWFnb25hbCBtYXRyaXggZnJvbSBhIHZlY3RvciBvciB2aWNlIHZlcnNhXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBTdG9yYWdlIGZvcm1hdCBmb3IgbWF0cml4LiBJZiBudWxsLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gQXJyYXkgaXMgcmV0dXJuZWRcbiAgICogQHJldHVybnMge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfZGlhZyh4LCBrLCBzaXplLCBmb3JtYXQpIHtcbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NlY29uZCBwYXJhbWV0ZXIgaW4gZnVuY3Rpb24gZGlhZyBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICB9XG5cbiAgICB2YXIga1N1cGVyID0gayA+IDAgPyBrIDogMDtcbiAgICB2YXIga1N1YiA9IGsgPCAwID8gLWsgOiAwOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfY3JlYXRlRGlhZ29uYWxNYXRyaXgoeCwgaywgZm9ybWF0LCBzaXplWzBdLCBrU3ViLCBrU3VwZXIpO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBfZ2V0RGlhZ29uYWwoeCwgaywgZm9ybWF0LCBzaXplLCBrU3ViLCBrU3VwZXIpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggZm9yIGZ1bmN0aW9uIGRpYWcgbXVzdCBiZSAyIGRpbWVuc2lvbmFsJyk7XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRGlhZ29uYWxNYXRyaXgoeCwgaywgZm9ybWF0LCBsLCBrU3ViLCBrU3VwZXIpIHtcbiAgICAvLyBtYXRyaXggc2l6ZVxuICAgIHZhciBtcyA9IFtsICsga1N1YiwgbCArIGtTdXBlcl07XG5cbiAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdCAhPT0gJ3NwYXJzZScgJiYgZm9ybWF0ICE9PSAnZGVuc2UnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBtYXRyaXggdHlwZSBcIi5jb25jYXQoZm9ybWF0LCBcIlxcXCJcIikpO1xuICAgIH0gLy8gY3JlYXRlIGRpYWdvbmFsIG1hdHJpeFxuXG5cbiAgICB2YXIgbSA9IGZvcm1hdCA9PT0gJ3NwYXJzZScgPyBTcGFyc2VNYXRyaXguZGlhZ29uYWwobXMsIHgsIGspIDogRGVuc2VNYXRyaXguZGlhZ29uYWwobXMsIHgsIGspOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG4gICAgcmV0dXJuIGZvcm1hdCAhPT0gbnVsbCA/IG0gOiBtLnZhbHVlT2YoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9nZXREaWFnb25hbCh4LCBrLCBmb3JtYXQsIHMsIGtTdWIsIGtTdXBlcikge1xuICAgIC8vIGNoZWNrIHggaXMgYSBNYXRyaXhcbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgIC8vIGdldCBkaWFnb25hbCBtYXRyaXhcbiAgICAgIHZhciBkbSA9IHguZGlhZ29uYWwoayk7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcmV0dXJuIGEgbWF0cml4XG5cbiAgICAgIGlmIChmb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gY2hlY2sgd2UgbmVlZCB0byBjaGFuZ2UgbWF0cml4IGZvcm1hdFxuICAgICAgICBpZiAoZm9ybWF0ICE9PSBkbS5zdG9yYWdlKCkpIHtcbiAgICAgICAgICByZXR1cm4gbWF0cml4KGRtLCBmb3JtYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG0udmFsdWVPZigpO1xuICAgIH0gLy8gdmVjdG9yIHNpemVcblxuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihzWzBdIC0ga1N1Yiwgc1sxXSAtIGtTdXBlcik7IC8vIGRpYWdvbmFsIHZhbHVlc1xuXG4gICAgdmFyIHZlY3RvciA9IFtdOyAvLyBsb29wIGRpYWdvbmFsXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmVjdG9yW2ldID0geFtpICsga1N1Yl1baSArIGtTdXBlcl07XG4gICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gZm9ybWF0ICE9PSBudWxsID8gbWF0cml4KHZlY3RvcikgOiB2ZWN0b3I7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEaWFnID0gY3JlYXRlRGlhZzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRG90ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZG90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZURvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjdG9ycy4gVGhlIGRvdCBwcm9kdWN0IG9mXG4gICAqIGBBID0gW2ExLCBhMiwgYTMsIC4uLiwgYW5dYCBhbmQgYEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl1gIGlzIGRlZmluZWQgYXM6XG4gICAqXG4gICAqICAgIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kb3QoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDE1XG4gICAqICAgIG1hdGgubXVsdGlwbHkoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAvLyByZXR1cm5zIG51bWJlciAxNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIGNyb3NzXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICAgIFNlY29uZCB2ZWN0b3JcbiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LnRvQXJyYXkoKSwgeS50b0FycmF5KCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LnRvQXJyYXkoKSwgeSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBfZG90KHgsIHkudG9BcnJheSgpKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBfZG90XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBmb3IgdHdvIGFycmF5c1xuICAgKiBAcGFyYW0ge0FycmF5fSB4ICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtIHtBcnJheX0geSAgU2Vjb25kIHZlY3RvclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCBvZiB4IGFuZCB5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAvLyBUT0RPOiBkb3VibGUgY29kZSB3aXRoIG1hdGgubXVsdGlwbHlcblxuICBmdW5jdGlvbiBfZG90KHgsIHkpIHtcbiAgICB2YXIgeFNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG4gICAgdmFyIHlTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHkpO1xuICAgIHZhciBsZW4gPSB4U2l6ZVswXTtcbiAgICBpZiAoeFNpemUubGVuZ3RoICE9PSAxIHx8IHlTaXplLmxlbmd0aCAhPT0gMSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvciBleHBlY3RlZCcpOyAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZVxuXG4gICAgaWYgKHhTaXplWzBdICE9PSB5U2l6ZVswXSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgbXVzdCBoYXZlIGVxdWFsIGxlbmd0aCAoJyArIHhTaXplWzBdICsgJyAhPSAnICsgeVNpemVbMF0gKyAnKScpO1xuICAgIGlmIChsZW4gPT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiBlbXB0eSB2ZWN0b3JzJyk7XG4gICAgdmFyIHByb2QgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgcHJvZCA9IGFkZChwcm9kLCBtdWx0aXBseSh4W2ldLCB5W2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Q7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3QgPSBjcmVhdGVEb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUVpZ3MgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIG5hbWUgPSAnZWlncyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnbWF0cml4JywgJ2FkZFNjYWxhcicsICdlcXVhbCcsICdzdWJ0cmFjdCcsICdhYnMnLCAnYXRhbicsICdjb3MnLCAnc2luJywgJ211bHRpcGx5U2NhbGFyJywgJ2ludicsICdiaWdudW1iZXInLCAnbXVsdGlwbHknLCAnYWRkJ107XG52YXIgY3JlYXRlRWlncyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGF0YW4gPSBfcmVmLmF0YW4sXG4gICAgICBjb3MgPSBfcmVmLmNvcyxcbiAgICAgIHNpbiA9IF9yZWYuc2luLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGFkZCA9IF9yZWYuYWRkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIGVpZ2VudmFsdWUgYW5kIGVpZ2VudmVjdG9yIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4LlxuICAgKiBPbmx5IGFwcGxpY2FibGUgdG8gdHdvIGRpbWVuc2lvbmFsIHN5bW1ldHJpYyBtYXRyaWNlcy4gVXNlcyBKYWNvYmlcbiAgICogQWxnb3JpdGhtLiBNYXRyaXggY29udGFpbmluZyBtaXhlZCB0eXBlICgnbnVtYmVyJywgJ2JpZ251bWJlcicsICdmcmFjdGlvbicpXG4gICAqIG9mIGVsZW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLiBJbnB1dCBtYXRyaXggb3IgMkQgYXJyYXkgc2hvdWxkIGNvbnRhaW4gYWxsIGVsZW1lbnRzXG4gICAqIG9mIGVpdGhlciAnbnVtYmVyJywgJ2JpZ251bWJlcicgb3IgJ2ZyYWN0aW9uJyB0eXBlLiBGb3IgJ251bWJlcicgYW5kICdmcmFjdGlvbicsIHRoZVxuICAgKiBlaWdlbnZhbHVlcyBhcmUgb2YgJ251bWJlcicgdHlwZS4gRm9yICdiaWdudW1iZXInIHRoZSBlaWdlbnZhbHVlcyBhcmUgb2YgJydiaWdudW1iZXInIHR5cGUuXG4gICAqIEVpZ2VudmVjdG9ycyBhcmUgYWx3YXlzIG9mICdudW1iZXInIHR5cGUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguZWlncyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IEggPSBbWzUsIDIuM10sIFsyLjMsIDFdXVxuICAgKiAgICAgY29uc3QgYW5zID0gbWF0aC5laWdzKEgpIC8vIHJldHVybnMge3ZhbHVlczogW0UxLEUyLi4uc29ydGVkXSwgdmVjdG9yczogW3YxLHYyLi4uLiBjb3JyZXNwb25kaW5nIHZlY3RvcnNdfVxuICAgKiAgICAgY29uc3QgRSA9IGFucy52YWx1ZXNcbiAgICogICAgIGNvbnN0IFUgPSBhbnMudmVjdG9yc1xuICAgKiAgICAgY29uc3QgVVR4SHhVID0gbWF0aC5tdWx0aXBseShtYXRoLnRyYW5zcG9zZShVKSwgSCwgVSkgLy8gcm90YXRlcyBIIHRvIHRoZSBlaWdlbi1yZXByZXNlbnRhdGlvblxuICAgKiAgICAgRVswXSA9PSBVVHhIeFVbMF1bMF0gIC8vIHJldHVybnMgdHJ1ZVxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGludlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgZGlhZ29uYWxpemVkXG4gICAqIEByZXR1cm4ge3t2YWx1ZXM6IEFycmF5LCB2ZWN0b3JzOiBBcnJheX0gfCB7dmFsdWVzOiBNYXRyaXgsIHZlY3RvcnM6IE1hdHJpeH19IE9iamVjdCBjb250YWluaW5nIGVpZ2VudmFsdWVzIChBcnJheSBvciBNYXRyaXgpIGFuZCBlaWdlbnZlY3RvcnMgKDJEIEFycmF5L01hdHJpeCkuXG4gICAqL1xuICB2YXIgZWlncyA9IHR5cGVkKCdlaWdzJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICAvLyBjaGVjayBhcnJheSBzaXplXG4gICAgICB2YXIgbWF0ID0gbWF0cml4KHgpO1xuICAgICAgdmFyIHNpemUgPSBtYXQuc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH0gLy8gdXNlIGRlbnNlIDJEIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICAgIHZhciBhbnMgPSBjaGVja0FuZFN1Ym1pdChtYXQsIHNpemVbMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBhbnNbMF0sXG4gICAgICAgIHZlY3RvcnM6IGFuc1sxXVxuICAgICAgfTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIC8vIHVzZSBkZW5zZSAyRCBhcnJheSBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gZGVuc2UgbWF0cml4XG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFucyA9IGNoZWNrQW5kU3VibWl0KHgsIHNpemVbMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBtYXRyaXgoYW5zWzBdKSxcbiAgICAgICAgdmVjdG9yczogbWF0cml4KGFuc1sxXSlcbiAgICAgIH07XG4gICAgfVxuICB9KTsgLy8gSXMgdGhlIG1hdHJpeFxuICAvLyBzeW1tZXRyaWMgP1xuXG4gIGZ1bmN0aW9uIGlzU3ltbWV0cmljKHgsIG4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBuOyBqKyspIHtcbiAgICAgICAgLy8gbm90IHN5bW10cmljXG4gICAgICAgIGlmICghZXF1YWwoeFtpXVtqXSwgeFtqXVtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBtYXRyaXggaXMgbm90IHN5bW1ldHJpYycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGNoZWNrIGlucHV0IGZvciBwb3NzaWJsZSBwcm9ibGVtc1xuICAvLyBhbmQgcGVyZm9ybSBkaWFnb25hbGl6YXRpb24gZWZmaWNpZW50bHkgZm9yXG4gIC8vIHNwZWNpZmljIHR5cGUgb2YgbnVtYmVyXG5cblxuICBmdW5jdGlvbiBjaGVja0FuZFN1Ym1pdCh4LCBuKSB7XG4gICAgdmFyIHR5cGUgPSB4LmRhdGF0eXBlKCk7IC8vIHR5cGUgY2hlY2tcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSB4LmdldERhdGFUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgIT09ICdudW1iZXInICYmIHR5cGUgIT09ICdCaWdOdW1iZXInICYmIHR5cGUgIT09ICdGcmFjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlID09PSAnbWl4ZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01peGVkIG1hdHJpeCBlbGVtZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWF0cml4IGVsZW1lbnQgdHlwZSBub3Qgc3VwcG9ydGVkICgnICsgdHlwZSArICcpJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzU3ltbWV0cmljKHgudG9BcnJheSgpLCBuKTtcbiAgICB9IC8vIHBlcmZvcm0gZWZmaWNpZW50IGNhbGN1bGF0aW9uIGZvciAnbnVtYmVycydcblxuXG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGlhZyh4LnRvQXJyYXkoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnRnJhY3Rpb24nKSB7XG4gICAgICB2YXIgeEFyciA9IHgudG9BcnJheSgpOyAvLyBjb252ZXJ0IGZyYWN0aW9uIHRvIG51bWJlcnNcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICB4QXJyW2ldW2pdID0geEFycltpXVtqXS52YWx1ZU9mKCk7XG4gICAgICAgICAgeEFycltqXVtpXSA9IHhBcnJbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpYWcoeC50b0FycmF5KCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0JpZ051bWJlcicpIHtcbiAgICAgIHJldHVybiBkaWFnQmlnKHgudG9BcnJheSgpKTtcbiAgICB9XG4gIH0gLy8gZGlhZ29uYWxpemF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgKGVmZmljaWVudClcblxuXG4gIGZ1bmN0aW9uIGRpYWcoeCkge1xuICAgIHZhciBOID0geC5sZW5ndGg7XG4gICAgdmFyIGUwID0gTWF0aC5hYnMoY29uZmlnLmVwc2lsb24gLyBOKTtcbiAgICB2YXIgcHNpO1xuICAgIHZhciBTaWogPSBuZXcgQXJyYXkoTik7IC8vIFNpaiBpcyBJZGVudGl0eSBNYXRyaXhcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBTaWpbaV0gPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICAgIFNpaltpXVtpXSA9IDEuMDtcbiAgICB9IC8vIGluaXRpYWwgZXJyb3JcblxuXG4gICAgdmFyIFZhYiA9IGdldEFpaih4KTtcblxuICAgIHdoaWxlIChNYXRoLmFicyhWYWJbMV0pID49IE1hdGguYWJzKGUwKSkge1xuICAgICAgdmFyIF9pID0gVmFiWzBdWzBdO1xuICAgICAgdmFyIGogPSBWYWJbMF1bMV07XG4gICAgICBwc2kgPSBnZXRUaGV0YSh4W19pXVtfaV0sIHhbal1bal0sIHhbX2ldW2pdKTtcbiAgICAgIHggPSB4MSh4LCBwc2ksIF9pLCBqKTtcbiAgICAgIFNpaiA9IFNpajEoU2lqLCBwc2ksIF9pLCBqKTtcbiAgICAgIFZhYiA9IGdldEFpaih4KTtcbiAgICB9XG5cbiAgICB2YXIgRWkgPSBjcmVhdGVBcnJheShOLCAwKTsgLy8gZWlnZW52YWx1ZXNcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IE47IF9pMisrKSB7XG4gICAgICBFaVtfaTJdID0geFtfaTJdW19pMl07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRpbmcoKDAsIF9vYmplY3QuY2xvbmUpKEVpKSwgKDAsIF9vYmplY3QuY2xvbmUpKFNpaikpO1xuICB9IC8vIGRpYWdvbmFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgYmlnTnVtYmVyXG5cblxuICBmdW5jdGlvbiBkaWFnQmlnKHgpIHtcbiAgICB2YXIgTiA9IHgubGVuZ3RoO1xuICAgIHZhciBlMCA9IGFicyhjb25maWcuZXBzaWxvbiAvIE4pO1xuICAgIHZhciBwc2k7XG4gICAgdmFyIFNpaiA9IG5ldyBBcnJheShOKTsgLy8gU2lqIGlzIElkZW50aXR5IE1hdHJpeFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIFNpaltpXSA9IGNyZWF0ZUFycmF5KE4sIDApO1xuICAgICAgU2lqW2ldW2ldID0gMS4wO1xuICAgIH0gLy8gaW5pdGlhbCBlcnJvclxuXG5cbiAgICB2YXIgVmFiID0gZ2V0QWlqQmlnKHgpO1xuXG4gICAgd2hpbGUgKGFicyhWYWJbMV0pID49IGFicyhlMCkpIHtcbiAgICAgIHZhciBfaTMgPSBWYWJbMF1bMF07XG4gICAgICB2YXIgaiA9IFZhYlswXVsxXTtcbiAgICAgIHBzaSA9IGdldFRoZXRhQmlnKHhbX2kzXVtfaTNdLCB4W2pdW2pdLCB4W19pM11bal0pO1xuICAgICAgeCA9IHgxQmlnKHgsIHBzaSwgX2kzLCBqKTtcbiAgICAgIFNpaiA9IFNpajFCaWcoU2lqLCBwc2ksIF9pMywgaik7XG4gICAgICBWYWIgPSBnZXRBaWpCaWcoeCk7XG4gICAgfVxuXG4gICAgdmFyIEVpID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vIGVpZ2VudmFsdWVzXG5cbiAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBOOyBfaTQrKykge1xuICAgICAgRWlbX2k0XSA9IHhbX2k0XVtfaTRdO1xuICAgIH0gLy8gcmV0dXJuIFtjbG9uZShFaSksIGNsb25lKFNpaildXG5cblxuICAgIHJldHVybiBzb3J0aW5nKCgwLCBfb2JqZWN0LmNsb25lKShFaSksICgwLCBfb2JqZWN0LmNsb25lKShTaWopKTtcbiAgfSAvLyBnZXQgYW5nbGVcblxuXG4gIGZ1bmN0aW9uIGdldFRoZXRhKGFpaSwgYWpqLCBhaWopIHtcbiAgICB2YXIgZGVub20gPSBhamogLSBhaWk7XG5cbiAgICBpZiAoTWF0aC5hYnMoZGVub20pIDw9IGNvbmZpZy5lcHNpbG9uKSB7XG4gICAgICByZXR1cm4gTWF0aC5QSSAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwLjUgKiBNYXRoLmF0YW4oMiAqIGFpaiAvIChhamogLSBhaWkpKTtcbiAgICB9XG4gIH0gLy8gZ2V0IGFuZ2xlXG5cblxuICBmdW5jdGlvbiBnZXRUaGV0YUJpZyhhaWksIGFqaiwgYWlqKSB7XG4gICAgdmFyIGRlbm9tID0gc3VidHJhY3QoYWpqLCBhaWkpO1xuXG4gICAgaWYgKGFicyhkZW5vbSkgPD0gY29uZmlnLmVwc2lsb24pIHtcbiAgICAgIHJldHVybiBiaWdudW1iZXIoLTEpLmFjb3MoKS5kaXYoNCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcigwLjUsIGF0YW4obXVsdGlwbHkoMiwgYWlqLCBpbnYoZGVub20pKSkpO1xuICAgIH1cbiAgfSAvLyB1cGRhdGUgZWlndmVjXG5cblxuICBmdW5jdGlvbiBTaWoxKFNpaiwgdGhldGEsIGksIGopIHtcbiAgICB2YXIgTiA9IFNpai5sZW5ndGg7XG4gICAgdmFyIGMgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHMgPSBNYXRoLnNpbih0aGV0YSk7XG4gICAgdmFyIFNraSA9IGNyZWF0ZUFycmF5KE4sIDApO1xuICAgIHZhciBTa2ogPSBjcmVhdGVBcnJheShOLCAwKTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgTjsgaysrKSB7XG4gICAgICBTa2lba10gPSBjICogU2lqW2tdW2ldIC0gcyAqIFNpaltrXVtqXTtcbiAgICAgIFNraltrXSA9IHMgKiBTaWpba11baV0gKyBjICogU2lqW2tdW2pdO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBOOyBfaysrKSB7XG4gICAgICBTaWpbX2tdW2ldID0gU2tpW19rXTtcbiAgICAgIFNpaltfa11bal0gPSBTa2pbX2tdO1xuICAgIH1cblxuICAgIHJldHVybiBTaWo7XG4gIH0gLy8gdXBkYXRlIGVpZ3ZlYyBmb3Igb3ZlcmxhcFxuXG5cbiAgZnVuY3Rpb24gU2lqMUJpZyhTaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBTaWoubGVuZ3RoO1xuICAgIHZhciBjID0gY29zKHRoZXRhKTtcbiAgICB2YXIgcyA9IHNpbih0aGV0YSk7XG4gICAgdmFyIFNraSA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG4gICAgdmFyIFNraiA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2tpW2tdID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYywgU2lqW2tdW2ldKSwgbXVsdGlwbHlTY2FsYXIocywgU2lqW2tdW2pdKSk7XG4gICAgICBTa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgU2lqW2tdW2ldKSwgbXVsdGlwbHlTY2FsYXIoYywgU2lqW2tdW2pdKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2syID0gMDsgX2syIDwgTjsgX2syKyspIHtcbiAgICAgIFNpaltfazJdW2ldID0gU2tpW19rMl07XG4gICAgICBTaWpbX2syXVtqXSA9IFNraltfazJdO1xuICAgIH1cblxuICAgIHJldHVybiBTaWo7XG4gIH0gLy8gdXBkYXRlIG1hdHJpeFxuXG5cbiAgZnVuY3Rpb24geDFCaWcoSGlqLCB0aGV0YSwgaSwgaikge1xuICAgIHZhciBOID0gSGlqLmxlbmd0aDtcbiAgICB2YXIgYyA9IGJpZ251bWJlcihjb3ModGhldGEpKTtcbiAgICB2YXIgcyA9IGJpZ251bWJlcihzaW4odGhldGEpKTtcbiAgICB2YXIgYzIgPSBtdWx0aXBseVNjYWxhcihjLCBjKTtcbiAgICB2YXIgczIgPSBtdWx0aXBseVNjYWxhcihzLCBzKTtcbiAgICB2YXIgQWtpID0gY3JlYXRlQXJyYXkoTiwgYmlnbnVtYmVyKDApKTtcbiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgYmlnbnVtYmVyKDApKTsgLy8gMmNzIEhpalxuXG4gICAgdmFyIGNzSGlqID0gbXVsdGlwbHkoYmlnbnVtYmVyKDIpLCBjLCBzLCBIaWpbaV1bal0pOyAvLyAgQWlpXG5cbiAgICB2YXIgQWlpID0gYWRkU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGMyLCBIaWpbaV1baV0pLCBjc0hpaiksIG11bHRpcGx5U2NhbGFyKHMyLCBIaWpbal1bal0pKTtcbiAgICB2YXIgQWpqID0gYWRkKG11bHRpcGx5U2NhbGFyKHMyLCBIaWpbaV1baV0pLCBjc0hpaiwgbXVsdGlwbHlTY2FsYXIoYzIsIEhpaltqXVtqXSkpOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgQWtpW2tdID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIocywgSGlqW2pdW2tdKSk7XG4gICAgICBBa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIoYywgSGlqW2pdW2tdKSk7XG4gICAgfSAvLyBNb2RpZnkgSGlqXG5cblxuICAgIEhpaltpXVtpXSA9IEFpaTtcbiAgICBIaWpbal1bal0gPSBBamo7XG4gICAgSGlqW2ldW2pdID0gYmlnbnVtYmVyKDApO1xuICAgIEhpaltqXVtpXSA9IGJpZ251bWJlcigwKTsgLy8gMCAgdG8gaVxuXG4gICAgZm9yICh2YXIgX2szID0gMDsgX2szIDwgTjsgX2szKyspIHtcbiAgICAgIGlmIChfazMgIT09IGkgJiYgX2szICE9PSBqKSB7XG4gICAgICAgIEhpaltpXVtfazNdID0gQWtpW19rM107XG4gICAgICAgIEhpaltfazNdW2ldID0gQWtpW19rM107XG4gICAgICAgIEhpaltqXVtfazNdID0gQWtqW19rM107XG4gICAgICAgIEhpaltfazNdW2pdID0gQWtqW19rM107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEhpajtcbiAgfSAvLyB1cGRhdGUgbWF0cml4XG5cblxuICBmdW5jdGlvbiB4MShIaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBIaWoubGVuZ3RoO1xuICAgIHZhciBjID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzID0gTWF0aC5zaW4odGhldGEpO1xuICAgIHZhciBjMiA9IGMgKiBjO1xuICAgIHZhciBzMiA9IHMgKiBzO1xuICAgIHZhciBBa2kgPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vICBBaWlcblxuICAgIHZhciBBaWkgPSBjMiAqIEhpaltpXVtpXSAtIDIgKiBjICogcyAqIEhpaltpXVtqXSArIHMyICogSGlqW2pdW2pdO1xuICAgIHZhciBBamogPSBzMiAqIEhpaltpXVtpXSArIDIgKiBjICogcyAqIEhpaltpXVtqXSArIGMyICogSGlqW2pdW2pdOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgQWtpW2tdID0gYyAqIEhpaltpXVtrXSAtIHMgKiBIaWpbal1ba107XG4gICAgICBBa2pba10gPSBzICogSGlqW2ldW2tdICsgYyAqIEhpaltqXVtrXTtcbiAgICB9IC8vIE1vZGlmeSBIaWpcblxuXG4gICAgSGlqW2ldW2ldID0gQWlpO1xuICAgIEhpaltqXVtqXSA9IEFqajtcbiAgICBIaWpbaV1bal0gPSAwO1xuICAgIEhpaltqXVtpXSA9IDA7IC8vIDAgIHRvIGlcblxuICAgIGZvciAodmFyIF9rNCA9IDA7IF9rNCA8IE47IF9rNCsrKSB7XG4gICAgICBpZiAoX2s0ICE9PSBpICYmIF9rNCAhPT0gaikge1xuICAgICAgICBIaWpbaV1bX2s0XSA9IEFraVtfazRdO1xuICAgICAgICBIaWpbX2s0XVtpXSA9IEFraVtfazRdO1xuICAgICAgICBIaWpbal1bX2s0XSA9IEFraltfazRdO1xuICAgICAgICBIaWpbX2s0XVtqXSA9IEFraltfazRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBIaWo7XG4gIH0gLy8gZ2V0IG1heCBvZmYtZGlhZ29uYWwgdmFsdWUgZnJvbSBVcHBlciBEaWFnb25hbFxuXG5cbiAgZnVuY3Rpb24gZ2V0QWlqKE1paikge1xuICAgIHZhciBOID0gTWlqLmxlbmd0aDtcbiAgICB2YXIgbWF4TWlqID0gMDtcbiAgICB2YXIgbWF4SUogPSBbMCwgMV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgTjsgaisrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhtYXhNaWopIDwgTWF0aC5hYnMoTWlqW2ldW2pdKSkge1xuICAgICAgICAgIG1heE1paiA9IE1hdGguYWJzKE1paltpXVtqXSk7XG4gICAgICAgICAgbWF4SUogPSBbaSwgal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW21heElKLCBtYXhNaWpdO1xuICB9IC8vIGdldCBtYXggb2ZmLWRpYWdvbmFsIHZhbHVlIGZyb20gVXBwZXIgRGlhZ29uYWxcblxuXG4gIGZ1bmN0aW9uIGdldEFpakJpZyhNaWopIHtcbiAgICB2YXIgTiA9IE1pai5sZW5ndGg7XG4gICAgdmFyIG1heE1paiA9IDA7XG4gICAgdmFyIG1heElKID0gWzAsIDFdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICBpZiAoYWJzKG1heE1paikgPCBhYnMoTWlqW2ldW2pdKSkge1xuICAgICAgICAgIG1heE1paiA9IGFicyhNaWpbaV1bal0pO1xuICAgICAgICAgIG1heElKID0gW2ksIGpdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFttYXhJSiwgbWF4TWlqXTtcbiAgfSAvLyBzb3J0IHJlc3VsdHNcblxuXG4gIGZ1bmN0aW9uIHNvcnRpbmcoRSwgUykge1xuICAgIHZhciBOID0gRS5sZW5ndGg7XG4gICAgdmFyIEVmID0gQXJyYXkoTik7XG4gICAgdmFyIFNmID0gQXJyYXkoTik7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2Zba10gPSBBcnJheShOKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdmFyIG1pbklEID0gMDtcbiAgICAgIHZhciBtaW5FID0gRVswXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBFLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChFW2pdIDwgbWluRSkge1xuICAgICAgICAgIG1pbklEID0gajtcbiAgICAgICAgICBtaW5FID0gRVttaW5JRF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgRWZbaV0gPSBFLnNwbGljZShtaW5JRCwgMSlbMF07XG5cbiAgICAgIGZvciAodmFyIF9rNSA9IDA7IF9rNSA8IE47IF9rNSsrKSB7XG4gICAgICAgIFNmW19rNV1baV0gPSBTW19rNV1bbWluSURdO1xuXG4gICAgICAgIFNbX2s1XS5zcGxpY2UobWluSUQsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbKDAsIF9vYmplY3QuY2xvbmUpKEVmKSwgKDAsIF9vYmplY3QuY2xvbmUpKFNmKV07XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhcnJheSBvZiBhIGNlcnRhaW4gc2l6ZSBhbmQgZmlsbCBhbGwgaXRlbXMgd2l0aCBhbiBpbml0aWFsIHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtudW1iZXJbXX1cbiAgICovXG5cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheShzaXplLCB2YWx1ZSkge1xuICAgIC8vIFRPRE86IGFzIHNvb24gYXMgYWxsIGJyb3dzZXJzIHN1cHBvcnQgQXJyYXkuZmlsbCwgdXNlIHRoYXQgaW5zdGVhZCAoSUUgZG9lc24ndCBzdXBwb3J0IGl0KVxuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIHJldHVybiBlaWdzO1xufSk7XG5leHBvcnRzLmNyZWF0ZUVpZ3MgPSBjcmVhdGVFaWdzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdleHBtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnaWRlbnRpdHknLCAnaW52JywgJ211bHRpcGx5J107XG52YXIgY3JlYXRlRXhwbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHk7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1hdHJpeCBleHBvbmVudGlhbCwgZXhwbShBKSA9IGVeQS4gVGhlIG1hdHJpeCBtdXN0IGJlIHNxdWFyZS5cbiAgICogTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggZXhwKGEpLCB3aGljaCBwZXJmb3JtcyBlbGVtZW50LXdpc2VcbiAgICogZXhwb25lbnRpYXRpb24uXG4gICAqXG4gICAqIFRoZSBleHBvbmVudGlhbCBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBQYWTDqSBhcHByb3hpbWFudCB3aXRoIHNjYWxpbmcgYW5kXG4gICAqIHNxdWFyaW5nOyBzZWUgXCJOaW5ldGVlbiBEdWJpb3VzIFdheXMgdG8gQ29tcHV0ZSB0aGUgRXhwb25lbnRpYWwgb2YgYVxuICAgKiBNYXRyaXgsXCIgYnkgTW9sZXIgYW5kIFZhbiBMb2FuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmV4cG0oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBBID0gW1swLDJdLFswLDBdXVxuICAgKiAgICAgbWF0aC5leHBtKEEpICAgICAgICAvLyByZXR1cm5zIFtbMSwyXSxbMCwxXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBleHBcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IHggIEEgc3F1YXJlIE1hdHJpeFxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgVGhlIGV4cG9uZW50aWFsIG9mIHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoQSkge1xuICAgICAgLy8gQ2hlY2sgbWF0cml4IHNpemVcbiAgICAgIHZhciBzaXplID0gQS5zaXplKCk7XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMiB8fCBzaXplWzBdICE9PSBzaXplWzFdKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbiA9IHNpemVbMF07IC8vIERlc2lyZWQgYWNjdXJhY3kgb2YgdGhlIGFwcHJveGltYW50IChUaGUgYWN0dWFsIGFjY3VyYWN5XG4gICAgICAvLyB3aWxsIGJlIGFmZmVjdGVkIGJ5IHJvdW5kLW9mZiBlcnJvcilcblxuICAgICAgdmFyIGVwcyA9IDFlLTE1OyAvLyBUaGUgUGFkw6kgYXBwcm94aW1hbnQgaXMgbm90IHNvIGFjY3VyYXRlIHdoZW4gdGhlIHZhbHVlcyBvZiBBXG4gICAgICAvLyBhcmUgXCJsYXJnZVwiLCBzbyBzY2FsZSBBIGJ5IHBvd2VycyBvZiB0d28uIFRoZW4gY29tcHV0ZSB0aGVcbiAgICAgIC8vIGV4cG9uZW50aWFsLCBhbmQgc3F1YXJlIHRoZSByZXN1bHQgcmVwZWF0ZWRseSBhY2NvcmRpbmcgdG9cbiAgICAgIC8vIHRoZSBpZGVudGl0eSBlXkEgPSAoZV4oQS9tKSlebVxuICAgICAgLy8gQ29tcHV0ZSBpbmZpbml0eS1ub3JtIG9mIEEsIHx8QXx8LCB0byBzZWUgaG93IFwiYmlnXCIgaXQgaXNcblxuICAgICAgdmFyIGluZk5vcm0gPSBpbmZpbml0eU5vcm0oQSk7IC8vIEZpbmQgdGhlIG9wdGltYWwgc2NhbGluZyBmYWN0b3IgYW5kIG51bWJlciBvZiB0ZXJtcyBpbiB0aGVcbiAgICAgIC8vIFBhZMOpIGFwcHJveGltYW50IHRvIHJlYWNoIHRoZSBkZXNpcmVkIGFjY3VyYWN5XG5cbiAgICAgIHZhciBwYXJhbXMgPSBmaW5kUGFyYW1zKGluZk5vcm0sIGVwcyk7XG4gICAgICB2YXIgcSA9IHBhcmFtcy5xO1xuICAgICAgdmFyIGogPSBwYXJhbXMuajsgLy8gVGhlIFBhZGUgYXBwcm94aW1hdGlvbiB0byBlXkEgaXM6XG4gICAgICAvLyBScXEoQSkgPSBEcXEoQSkgXiAtMSAqIE5xcShBKVxuICAgICAgLy8gd2hlcmVcbiAgICAgIC8vIE5xcShBKSA9IHN1bShpPTAsIHEsICgycS1pKSFwISAvIFsgKDJxKSFpIShxLWkpISBdIEFeaVxuICAgICAgLy8gRHFxKEEpID0gc3VtKGk9MCwgcSwgKDJxLWkpIXEhIC8gWyAoMnEpIWkhKHEtaSkhIF0gKC1BKV5pXG4gICAgICAvLyBTY2FsZSBBIGJ5IDEgLyAyXmpcblxuICAgICAgdmFyIEFwb3MgPSBtdWx0aXBseShBLCBNYXRoLnBvdygyLCAtaikpOyAvLyBUaGUgaT0wIHRlcm0gaXMganVzdCB0aGUgaWRlbnRpdHkgbWF0cml4XG5cbiAgICAgIHZhciBOID0gaWRlbnRpdHkobik7XG4gICAgICB2YXIgRCA9IGlkZW50aXR5KG4pOyAvLyBJbml0aWFsaXphdGlvbiAoaT0wKVxuXG4gICAgICB2YXIgZmFjdG9yID0gMTsgLy8gSW5pdGlhbGl6YXRpb24gKGk9MSlcblxuICAgICAgdmFyIEFwb3NUb0kgPSBBcG9zOyAvLyBDbG9uaW5nIG5vdCBuZWNlc3NhcnlcblxuICAgICAgdmFyIGFsdGVybmF0ZSA9IC0xO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBxOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPiAxKSB7XG4gICAgICAgICAgQXBvc1RvSSA9IG11bHRpcGx5KEFwb3NUb0ksIEFwb3MpO1xuICAgICAgICAgIGFsdGVybmF0ZSA9IC1hbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBmYWN0b3IgPSBmYWN0b3IgKiAocSAtIGkgKyAxKSAvICgoMiAqIHEgLSBpICsgMSkgKiBpKTtcbiAgICAgICAgTiA9IGFkZChOLCBtdWx0aXBseShmYWN0b3IsIEFwb3NUb0kpKTtcbiAgICAgICAgRCA9IGFkZChELCBtdWx0aXBseShmYWN0b3IgKiBhbHRlcm5hdGUsIEFwb3NUb0kpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIFIgPSBtdWx0aXBseShpbnYoRCksIE4pOyAvLyBTcXVhcmUgaiB0aW1lc1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgajsgX2krKykge1xuICAgICAgICBSID0gbXVsdGlwbHkoUiwgUik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMCwgX2lzLmlzU3BhcnNlTWF0cml4KShBKSA/IEEuY3JlYXRlU3BhcnNlTWF0cml4KFIpIDogUjtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGluZmluaXR5Tm9ybShBKSB7XG4gICAgdmFyIG4gPSBBLnNpemUoKVswXTtcbiAgICB2YXIgaW5mTm9ybSA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFyIHJvd1N1bSA9IDA7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIHJvd1N1bSArPSBhYnMoQS5nZXQoW2ksIGpdKSk7XG4gICAgICB9XG5cbiAgICAgIGluZk5vcm0gPSBNYXRoLm1heChyb3dTdW0sIGluZk5vcm0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbmZOb3JtO1xuICB9XG4gIC8qKlxuICAgKiBGaW5kIHRoZSBiZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBQYWRlIGFwcHJveGltYW50IGdpdmVuXG4gICAqIHRoZSBtYXRyaXggbm9ybSBhbmQgZGVzaXJlZCBhY2N1cmFjeS4gUmV0dXJucyB0aGUgZmlyc3QgYWNjZXB0YWJsZVxuICAgKiBjb21iaW5hdGlvbiBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGNvbXB1dGF0aW9uYWwgbG9hZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBmaW5kUGFyYW1zKGluZk5vcm0sIGVwcykge1xuICAgIHZhciBtYXhTZWFyY2hTaXplID0gMzA7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG1heFNlYXJjaFNpemU7IGsrKykge1xuICAgICAgZm9yICh2YXIgcSA9IDA7IHEgPD0gazsgcSsrKSB7XG4gICAgICAgIHZhciBqID0gayAtIHE7XG5cbiAgICAgICAgaWYgKGVycm9yRXN0aW1hdGUoaW5mTm9ybSwgcSwgaikgPCBlcHMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcTogcSxcbiAgICAgICAgICAgIGo6IGpcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBhY2NlcHRhYmxlIHBhcmFtZXRlcnMgdG8gY29tcHV0ZSB0aGUgbWF0cml4IGV4cG9uZW50aWFsICh0cnkgaW5jcmVhc2luZyBtYXhTZWFyY2hTaXplIGluIGV4cG0uanMpJyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVzdGltYXRlZCBlcnJvciBvZiB0aGUgUGFkZSBhcHByb3hpbWFudCBmb3IgdGhlIGdpdmVuXG4gICAqIHBhcmFtZXRlcnMuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZXJyb3JFc3RpbWF0ZShpbmZOb3JtLCBxLCBqKSB7XG4gICAgdmFyIHFmYWMgPSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPD0gcTsgaSsrKSB7XG4gICAgICBxZmFjICo9IGk7XG4gICAgfVxuXG4gICAgdmFyIHR3b3FmYWMgPSBxZmFjO1xuXG4gICAgZm9yICh2YXIgX2kyID0gcSArIDE7IF9pMiA8PSAyICogcTsgX2kyKyspIHtcbiAgICAgIHR3b3FmYWMgKj0gX2kyO1xuICAgIH1cblxuICAgIHZhciB0d29xcDFmYWMgPSB0d29xZmFjICogKDIgKiBxICsgMSk7XG4gICAgcmV0dXJuIDguMCAqIE1hdGgucG93KGluZk5vcm0gLyBNYXRoLnBvdygyLCBqKSwgMiAqIHEpICogcWZhYyAqIHFmYWMgLyAodHdvcWZhYyAqIHR3b3FwMWZhYyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtID0gY3JlYXRlRXhwbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXllID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuLy8gVE9ETzogZnVuY3Rpb24gZXllIGlzIHJlbW92ZWQgc2luY2UgdjUuMC4wIChKdW5lIDIwMTgpLiBSZW1vdmUgaXQgc29tZSBkYXkuXG52YXIgY3JlYXRlRXllID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCdleWUnLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZXllKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gXCJleWVcIiBpcyByZW5hbWVkIHRvIFwiaWRlbnRpdHlcIiBzaW5jZSBtYXRoanMgdmVyc2lvbiA1LjAuMC4gJyArICdUbyBrZWVwIGV5ZSB3b3JraW5nLCBjcmVhdGUgYW4gYWxpYXMgZm9yIGl0IHVzaW5nIFwibWF0aC5pbXBvcnQoe2V5ZTogbWF0aC5pZGVudGl0eX0sIHtvdmVycmlkZTogdHJ1ZX0pXCInKTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeWUgPSBjcmVhdGVFeWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpbHRlciA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZpbHRlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZpbHRlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMgaW4gYW4gYXJyYXkgb3Igb25lIGRpbWVuc2lvbmFsIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZpbHRlcih4LCB0ZXN0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgZnVuY3Rpb24gaXNQb3NpdGl2ZSAoeCkge1xuICAgKiAgICAgIHJldHVybiB4ID4gMFxuICAgKiAgICB9XG4gICAqICAgIG1hdGguZmlsdGVyKFs2LCAtMiwgLTEsIDQsIDNdLCBpc1Bvc2l0aXZlKSAvLyByZXR1cm5zIFs2LCA0LCAzXVxuICAgKlxuICAgKiAgICBtYXRoLmZpbHRlcihbXCIyM1wiLCBcImZvb1wiLCBcIjEwMFwiLCBcIjU1XCIsIFwiYmFyXCJdLCAvWzAtOV0rLykgLy8gcmV0dXJucyBbXCIyM1wiLCBcIjEwMFwiLCBcIjU1XCJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmb3JFYWNoLCBtYXAsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBBIG9uZSBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCBSZWdFeHB9IHRlc3RcbiAgICogICAgICAgIEEgZnVuY3Rpb24gb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHRlc3QgaXRlbXMuXG4gICAqICAgICAgICBBbGwgZW50cmllcyBmb3Igd2hpY2ggYHRlc3RgIHJldHVybnMgdHJ1ZSBhcmUgcmV0dXJuZWQuXG4gICAqICAgICAgICBXaGVuIGB0ZXN0YCBpcyBhIGZ1bmN0aW9uLCBpdCBpcyBpbnZva2VkIHdpdGggdGhyZWUgcGFyYW1ldGVyczpcbiAgICogICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlXG4gICAqICAgICAgICBtYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgbWF0cml4LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKCdmaWx0ZXInLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9maWx0ZXJDYWxsYmFjayxcbiAgICAnTWF0cml4LCBmdW5jdGlvbic6IGZ1bmN0aW9uIE1hdHJpeEZ1bmN0aW9uKHgsIHRlc3QpIHtcbiAgICAgIHJldHVybiB4LmNyZWF0ZShfZmlsdGVyQ2FsbGJhY2soeC50b0FycmF5KCksIHRlc3QpKTtcbiAgICB9LFxuICAgICdBcnJheSwgUmVnRXhwJzogX2FycmF5LmZpbHRlclJlZ0V4cCxcbiAgICAnTWF0cml4LCBSZWdFeHAnOiBmdW5jdGlvbiBNYXRyaXhSZWdFeHAoeCwgdGVzdCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKCgwLCBfYXJyYXkuZmlsdGVyUmVnRXhwKSh4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogRmlsdGVyIHZhbHVlcyBpbiBhIGNhbGxiYWNrIGdpdmVuIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl9IHhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgYXJyYXlcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVGaWx0ZXIgPSBjcmVhdGVGaWx0ZXI7XG5cbmZ1bmN0aW9uIF9maWx0ZXJDYWxsYmFjayh4LCBjYWxsYmFjaykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuICByZXR1cm4gKDAsIF9hcnJheS5maWx0ZXIpKHgsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgLy8gaW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzIG9yIC0xXG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleF0sIGFycmF5KTtcbiAgICB9XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGbGF0dGVuID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmbGF0dGVuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZUZsYXR0ZW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaXggaW50byBhIHNpbmdsZSBkaW1lbnNpb25hbCBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mbGF0dGVuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmZsYXR0ZW4oW1sxLDJdLCBbMyw0XV0pICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvbmNhdCwgcmVzaXplLCBzaXplLCBzcXVlZXplXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICBNYXRyaXggdG8gYmUgZmxhdHRlbmVkXG4gICAqIEByZXR1cm4ge01hdHJpeCB8IEFycmF5fSBSZXR1cm5zIHRoZSBmbGF0dGVuZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKSgoMCwgX29iamVjdC5jbG9uZSkoeCkpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgdmFyIGZsYXQgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKCgwLCBfb2JqZWN0LmNsb25lKSh4LnRvQXJyYXkoKSkpOyAvLyBUT0RPOiByZXR1cm4gdGhlIHNhbWUgbWF0cml4IHR5cGUgYXMgeFxuXG4gICAgICByZXR1cm4gbWF0cml4KGZsYXQpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRmxhdHRlbiA9IGNyZWF0ZUZsYXR0ZW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2ggPSB2b2lkIDA7XG5cbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZnVuY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmb3JFYWNoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRm9yRWFjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgZWxlbWVudHMgb2YgYSBtYXRyaXgvYXJyYXksIGFuZCBleGVjdXRlcyB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mb3JFYWNoKHgsIGNhbGxiYWNrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mb3JFYWNoKFsxLCAyLCAzXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICogICAgICBjb25zb2xlLmxvZyh2YWx1ZSlcbiAgICogICAgfSlcbiAgICogICAgLy8gb3V0cHV0cyAxLCAyLCAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmaWx0ZXIsIG1hcCwgc29ydFxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSB4ICAgIFRoZSBtYXRyaXggdG8gaXRlcmF0ZSBvbi5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogX2ZvckVhY2gsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHguZm9yRWFjaChjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBmb3JFYWNoIGZvciBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVGb3JFYWNoID0gY3JlYXRlRm9yRWFjaDtcblxuZnVuY3Rpb24gX2ZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgKDAsIF9hcnJheS5mb3JFYWNoKSh2YWx1ZSwgZnVuY3Rpb24gKGNoaWxkLCBpKSB7XG4gICAgICAgIC8vIHdlIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGluZGV4IGFycmF5IGFuZCBhcHBlbmQgdGhlIG5ldyBpbmRleCB2YWx1ZVxuICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAzIG9yIC0xXG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZWN1cnNlKGFycmF5LCBbXSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnZ2V0TWF0cml4RGF0YVR5cGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksXG4gICAqIGZvciBleGFtcGxlICdudW1iZXInIGlmIGFsbCBpdGVtcyBhcmUgYSBudW1iZXIgYW5kICdDb21wbGV4JyBpZiBhbGwgdmFsdWVzXG4gICAqIGFyZSBjb21wbGV4IG51bWJlcnMuXG4gICAqIElmIGEgbWF0cml4IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZGF0YSB0eXBlLCBpdCB3aWxsIHJldHVybiAnbWl4ZWQnLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IHggPSBbIFsxLCAyLCAzXSwgWzQsIDUsIDZdIF1cbiAgICogICAgY29uc3QgbWl4ZWRYID0gWyBbMSwgdHJ1ZV0sIFsyLCAzXSBdXG4gICAqICAgIGNvbnN0IGZyYWN0aW9uWCA9IFsgW21hdGguZnJhY3Rpb24oMSwgMyldLCBbbWF0aC5mcmFjdGlvbigxLCAzXSBdXG4gICAqICAgIGNvbnN0IHVuaXRYID0gWyBbbWF0aC51bml0KCc1Y20nKV0sIFttYXRoLnVuaXQoJzVjbScpXSBdXG4gICAqICAgIGNvbnN0IGJpZ051bWJlclggPSBbIFttYXRoLmJpZ251bWJlcigxKV0sIFttYXRoLmJpZ251bWJlcigwKV0gXVxuICAgKiAgICBjb25zdCBzcGFyc2UgPSBtYXRoLnNwYXJzZSh4KVxuICAgKiAgICBjb25zdCBkZW5zZSA9IG1hdGgubWF0cml4KHgpXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeCkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoc3BhcnNlKSAgIC8vIHJldHVybnMgJ251bWJlcidcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShkZW5zZSkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUobWl4ZWRYKSAvLyByZXR1cm5zICdtaXhlZCdcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShmcmFjdGlvblgpIC8vIHJldHVybnMgJ0ZyYWN0aW9uJ1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKHVuaXRYKSAvLyByZXR1cm5zICdVbml0J1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKGJpZ051bWJlclgpIC8vIHJldHVybiAnQmlnTnVtYmVyJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICogIFNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXhcbiAgICpcbiAgICogQHBhcmFtIHsuLi5NYXRyaXggfCBBcnJheX0geCAgIFRoZSBNYXRyaXggd2l0aCB2YWx1ZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCB0eXBlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5nZXRBcnJheURhdGFUeXBlKSh4LCBfaXMudHlwZU9mKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiB4LmdldERhdGFUeXBlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJZGVudGl0eSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaWRlbnRpdHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlSWRlbnRpdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIDItZGltZW5zaW9uYWwgaWRlbnRpdHkgbWF0cml4IHdpdGggc2l6ZSBtIHggbiBvciBuIHggbi5cbiAgICogVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmlkZW50aXR5KG4pXG4gICAqICAgIG1hdGguaWRlbnRpdHkobiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLmlkZW50aXR5KG0sIG4pXG4gICAqICAgIG1hdGguaWRlbnRpdHkobSwgbiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLmlkZW50aXR5KFttLCBuXSlcbiAgICogICAgbWF0aC5pZGVudGl0eShbbSwgbl0sIGZvcm1hdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaWRlbnRpdHkoMykgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdLCBbMCwgMCwgMV1dXG4gICAqICAgIG1hdGguaWRlbnRpdHkoMywgMikgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwXSwgWzAsIDFdLCBbMCwgMF1dXG4gICAqXG4gICAqICAgIGNvbnN0IEEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gICAqICAgIG1hdGguaWRlbnRpdHkobWF0aC5zaXplKEEpKSAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGlhZywgb25lcywgemVyb3MsIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgTWF0cml4IHwgQXJyYXl9IHNpemUgICBUaGUgc2l6ZSBmb3IgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheSB8IG51bWJlcn0gQSBtYXRyaXggd2l0aCBvbmVzIG9uIHRoZSBkaWFnb25hbC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyBtYXRyaXgoW10pIDogW107XG4gICAgfSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhmb3JtYXQpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoZm9ybWF0KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXIocm93cykge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCByb3dzLCBjb25maWcubWF0cml4ID09PSAnTWF0cml4JyA/ICdkZW5zZScgOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3RyaW5nKHJvd3MsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCByb3dzLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKHJvd3MsIGNvbHMpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgY29scywgY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyAnZGVuc2UnIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHJvd3MsIGNvbHMsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCBjb2xzLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KHNpemUpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5U3RyaW5nKHNpemUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLnZhbHVlT2YoKSwgc2l6ZS5zdG9yYWdlKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4U3RyaW5nKHNpemUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpIHtcbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBmb3JtYXQgPyBtYXRyaXgoZm9ybWF0KSA6IFtdO1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfaWRlbnRpdHkoc2l6ZVswXSwgc2l6ZVswXSwgZm9ybWF0KTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gX2lkZW50aXR5KHNpemVbMF0sIHNpemVbMV0sIGZvcm1hdCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmVjdG9yIGNvbnRhaW5pbmcgdHdvIHZhbHVlcyBleHBlY3RlZCcpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGFuIGlkZW50aXR5IG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gcm93c1xuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gY29sc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF1cbiAgICogQHJldHVybnMge01hdHJpeH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfaWRlbnRpdHkocm93cywgY29scywgZm9ybWF0KSB7XG4gICAgLy8gQmlnTnVtYmVyIGNvbnN0cnVjdG9yIHdpdGggdGhlIHJpZ2h0IHByZWNpc2lvblxuICAgIHZhciBCaWcgPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShyb3dzKSB8fCAoMCwgX2lzLmlzQmlnTnVtYmVyKShjb2xzKSA/IEJpZ051bWJlciA6IG51bGw7XG4gICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHJvd3MpKSByb3dzID0gcm93cy50b051bWJlcigpO1xuICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShjb2xzKSkgY29scyA9IGNvbHMudG9OdW1iZXIoKTtcblxuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShyb3dzKSB8fCByb3dzIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGlkZW50aXR5IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoY29scykgfHwgY29scyA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBpZGVudGl0eSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgfVxuXG4gICAgdmFyIG9uZSA9IEJpZyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxO1xuICAgIHZhciBkZWZhdWx0VmFsdWUgPSBCaWcgPyBuZXcgQmlnKDApIDogMDtcbiAgICB2YXIgc2l6ZSA9IFtyb3dzLCBjb2xzXTsgLy8gY2hlY2sgd2UgbmVlZCB0byByZXR1cm4gYSBtYXRyaXhcblxuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIC8vIGNyZWF0ZSBkaWFnb25hbCBtYXRyaXggKHVzZSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHN0b3JhZ2UgZm9ybWF0KVxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ3NwYXJzZScpIHtcbiAgICAgICAgcmV0dXJuIFNwYXJzZU1hdHJpeC5kaWFnb25hbChzaXplLCBvbmUsIDAsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdkZW5zZScpIHtcbiAgICAgICAgcmV0dXJuIERlbnNlTWF0cml4LmRpYWdvbmFsKHNpemUsIG9uZSwgMCwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gbWF0cml4IHR5cGUgXFxcIlwiLmNvbmNhdChmb3JtYXQsIFwiXFxcIlwiKSk7XG4gICAgfSAvLyBjcmVhdGUgYW5kIHJlc2l6ZSBhcnJheVxuXG5cbiAgICB2YXIgcmVzID0gKDAsIF9hcnJheS5yZXNpemUpKFtdLCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBmaWxsIGluIG9uZXMgb24gdGhlIGRpYWdvbmFsXG5cbiAgICB2YXIgbWluaW11bSA9IHJvd3MgPCBjb2xzID8gcm93cyA6IGNvbHM7IC8vIGZpbGwgZGlhZ29uYWxcblxuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgbWluaW11bTsgZCsrKSB7XG4gICAgICByZXNbZF1bZF0gPSBvbmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUlkZW50aXR5ID0gY3JlYXRlSWRlbnRpdHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUludiA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIG5hbWUgPSAnaW52JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnYWRkU2NhbGFyJywgJ211bHRpcGx5JywgJ3VuYXJ5TWludXMnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2FicyddO1xudmFyIGNyZWF0ZUludiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgZGV0ID0gX3JlZi5kZXQsXG4gICAgICBpZGVudGl0eSA9IF9yZWYuaWRlbnRpdHksXG4gICAgICBhYnMgPSBfcmVmLmFicztcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgc3F1YXJlIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pbnYoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmludihbWzEsIDJdLCBbMywgNF1dKSAgLy8gcmV0dXJucyBbWy0yLCAxXSwgWzEuNSwgLTAuNV1dXG4gICAqICAgICBtYXRoLmludig0KSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjI1XG4gICAqICAgICAxIC8gNCAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjI1XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGV0LCB0cmFuc3Bvc2VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICAgIE1hdHJpeCB0byBiZSBpbnZlcnNlZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBpbnZlcnNlIG9mIGB4YC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgdmFyIHNpemUgPSAoMCwgX2lzLmlzTWF0cml4KSh4KSA/IHguc2l6ZSgpIDogKDAsIF9hcnJheS5hcnJheVNpemUpKHgpO1xuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoW2RpdmlkZVNjYWxhcigxLCB4LnZhbHVlT2YoKVswXSldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBbZGl2aWRlU2NhbGFyKDEsIHhbMF0pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAvLyB0d28gZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoX2ludih4LnZhbHVlT2YoKSwgcm93cywgY29scyksIHguc3RvcmFnZSgpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gYW4gQXJyYXlcbiAgICAgICAgICAgICAgICByZXR1cm4gX2ludih4LCByb3dzLCBjb2xzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIC8vIHNjYWxhclxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcigxLCB4KTsgLy8gRklYTUU6IGNyZWF0ZSBhIEJpZ051bWJlciBvbmUgd2hlbiBjb25maWd1cmVkIGZvciBiaWdudW1iZXJzXG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBhIHNxdWFyZSBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheVtdfSBtYXQgICAgIEEgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAgICAgTnVtYmVyIG9mIHJvd3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHMgICAgIE51bWJlciBvZiBjb2x1bW5zLCBtdXN0IGVxdWFsIHJvd3NcbiAgICogQHJldHVybiB7QXJyYXlbXX0gaW52ICAgIEludmVyc2UgbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9pbnYobWF0LCByb3dzLCBjb2xzKSB7XG4gICAgdmFyIHIsIHMsIGYsIHZhbHVlLCB0ZW1wO1xuXG4gICAgaWYgKHJvd3MgPT09IDEpIHtcbiAgICAgIC8vIHRoaXMgaXMgYSAxIHggMSBtYXRyaXhcbiAgICAgIHZhbHVlID0gbWF0WzBdWzBdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgaW52ZXJzZSwgZGV0ZXJtaW5hbnQgaXMgemVybycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1tkaXZpZGVTY2FsYXIoMSwgdmFsdWUpXV07XG4gICAgfSBlbHNlIGlmIChyb3dzID09PSAyKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgMiB4IDIgbWF0cml4XG4gICAgICB2YXIgZCA9IGRldChtYXQpO1xuXG4gICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBpbnZlcnNlLCBkZXRlcm1pbmFudCBpcyB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbW2RpdmlkZVNjYWxhcihtYXRbMV1bMV0sIGQpLCBkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhtYXRbMF1bMV0pLCBkKV0sIFtkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhtYXRbMV1bMF0pLCBkKSwgZGl2aWRlU2NhbGFyKG1hdFswXVswXSwgZCldXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBpcyBhIG1hdHJpeCBvZiAzIHggMyBvciBsYXJnZXJcbiAgICAgIC8vIGNhbGN1bGF0ZSBpbnZlcnNlIHVzaW5nIGdhdXNzLWpvcmRhbiBlbGltaW5hdGlvblxuICAgICAgLy8gICAgICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HYXVzc2lhbl9lbGltaW5hdGlvblxuICAgICAgLy8gICAgICBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL01hdHJpeEludmVyc2UuaHRtbFxuICAgICAgLy8gICAgICBodHRwOi8vbWF0aC51d3cuZWR1L35tY2ZhcmxhdC9pbnZlcnNlLmh0bVxuICAgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIG1hdHJpeCAob25seSB0aGUgYXJyYXlzLCBub3Qgb2YgdGhlIGVsZW1lbnRzKVxuICAgICAgdmFyIEEgPSBtYXQuY29uY2F0KCk7XG5cbiAgICAgIGZvciAociA9IDA7IHIgPCByb3dzOyByKyspIHtcbiAgICAgICAgQVtyXSA9IEFbcl0uY29uY2F0KCk7XG4gICAgICB9IC8vIGNyZWF0ZSBhbiBpZGVudGl0eSBtYXRyaXggd2hpY2ggaW4gdGhlIGVuZCB3aWxsIGNvbnRhaW4gdGhlXG4gICAgICAvLyBtYXRyaXggaW52ZXJzZVxuXG5cbiAgICAgIHZhciBCID0gaWRlbnRpdHkocm93cykudmFsdWVPZigpOyAvLyBsb29wIG92ZXIgYWxsIGNvbHVtbnMsIGFuZCBwZXJmb3JtIHJvdyByZWR1Y3Rpb25zXG5cbiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29sczsgYysrKSB7XG4gICAgICAgIC8vIFBpdm90aW5nOiBTd2FwIHJvdyBjIHdpdGggcm93IHIsIHdoZXJlIHJvdyByIGNvbnRhaW5zIHRoZSBsYXJnZXN0IGVsZW1lbnQgQVtyXVtjXVxuICAgICAgICB2YXIgQUJpZyA9IGFicyhBW2NdW2NdKTtcbiAgICAgICAgdmFyIHJCaWcgPSBjO1xuICAgICAgICByID0gYyArIDE7XG5cbiAgICAgICAgd2hpbGUgKHIgPCByb3dzKSB7XG4gICAgICAgICAgaWYgKGFicyhBW3JdW2NdKSA+IEFCaWcpIHtcbiAgICAgICAgICAgIEFCaWcgPSBhYnMoQVtyXVtjXSk7XG4gICAgICAgICAgICByQmlnID0gcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByKys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQUJpZyA9PT0gMCkge1xuICAgICAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHIgPSByQmlnO1xuXG4gICAgICAgIGlmIChyICE9PSBjKSB7XG4gICAgICAgICAgdGVtcCA9IEFbY107XG4gICAgICAgICAgQVtjXSA9IEFbcl07XG4gICAgICAgICAgQVtyXSA9IHRlbXA7XG4gICAgICAgICAgdGVtcCA9IEJbY107XG4gICAgICAgICAgQltjXSA9IEJbcl07XG4gICAgICAgICAgQltyXSA9IHRlbXA7XG4gICAgICAgIH0gLy8gZWxpbWluYXRlIG5vbi16ZXJvIHZhbHVlcyBvbiB0aGUgb3RoZXIgcm93cyBhdCBjb2x1bW4gY1xuXG5cbiAgICAgICAgdmFyIEFjID0gQVtjXTtcbiAgICAgICAgdmFyIEJjID0gQltjXTtcblxuICAgICAgICBmb3IgKHIgPSAwOyByIDwgcm93czsgcisrKSB7XG4gICAgICAgICAgdmFyIEFyID0gQVtyXTtcbiAgICAgICAgICB2YXIgQnIgPSBCW3JdO1xuXG4gICAgICAgICAgaWYgKHIgIT09IGMpIHtcbiAgICAgICAgICAgIC8vIGVsaW1pbmF0ZSB2YWx1ZSBhdCBjb2x1bW4gYyBhbmQgcm93IHJcbiAgICAgICAgICAgIGlmIChBcltjXSAhPT0gMCkge1xuICAgICAgICAgICAgICBmID0gZGl2aWRlU2NhbGFyKHVuYXJ5TWludXMoQXJbY10pLCBBY1tjXSk7IC8vIGFkZCAoZiAqIHJvdyBjKSB0byByb3cgciB0byBlbGltaW5hdGUgdGhlIHZhbHVlXG4gICAgICAgICAgICAgIC8vIGF0IGNvbHVtbiBjXG5cbiAgICAgICAgICAgICAgZm9yIChzID0gYzsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICAgIEFyW3NdID0gYWRkU2NhbGFyKEFyW3NdLCBtdWx0aXBseShmLCBBY1tzXSkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICAgIEJyW3NdID0gYWRkU2NhbGFyKEJyW3NdLCBtdWx0aXBseShmLCBCY1tzXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB2YWx1ZSBhdCBBY2MgdG8gMSxcbiAgICAgICAgICAgIC8vIGRpdmlkZSBlYWNoIHZhbHVlIG9uIHJvdyByIHdpdGggdGhlIHZhbHVlIGF0IEFjY1xuICAgICAgICAgICAgZiA9IEFjW2NdO1xuXG4gICAgICAgICAgICBmb3IgKHMgPSBjOyBzIDwgY29sczsgcysrKSB7XG4gICAgICAgICAgICAgIEFyW3NdID0gZGl2aWRlU2NhbGFyKEFyW3NdLCBmKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICBCcltzXSA9IGRpdmlkZVNjYWxhcihCcltzXSwgZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUludiA9IGNyZWF0ZUludjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlS3JvbiA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2tyb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ211bHRpcGx5U2NhbGFyJ107XG52YXIgY3JlYXRlS3JvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcjtcblxuICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiAyIG1hdHJpY2VzIG9yIHZlY3RvcnMuXG4gICAgICpcbiAgICAgKiBOT1RFOiBJZiBhIG9uZSBkaW1lbnNpb25hbCB2ZWN0b3IgLyBtYXRyaXggaXMgZ2l2ZW4sIGl0IHdpbGwgYmVcbiAgICAgKiB3cmFwcGVkIHNvIGl0cyB0d28gZGltZW5zaW9ucy5cbiAgICAgKiBTZWUgdGhlIGV4YW1wbGVzLlxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgbWF0aC5rcm9uKHgsIHkpXG4gICAgICpcbiAgICAgKiBFeGFtcGxlczpcbiAgICAgKlxuICAgICAqICAgIG1hdGgua3JvbihbWzEsIDBdLCBbMCwgMV1dLCBbWzEsIDJdLCBbMywgNF1dKVxuICAgICAqICAgIC8vIHJldHVybnMgWyBbIDEsIDIsIDAsIDAgXSwgWyAzLCA0LCAwLCAwIF0sIFsgMCwgMCwgMSwgMiBdLCBbIDAsIDAsIDMsIDQgXSBdXG4gICAgICpcbiAgICAgKiAgICBtYXRoLmtyb24oWzEsMV0sIFsyLDMsNF0pXG4gICAgICogICAgLy8gcmV0dXJucyBbIFsgMiwgMywgNCwgMiwgMywgNCBdIF1cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvOlxuICAgICAqXG4gICAgICogICAgbXVsdGlwbHksIGRvdCwgY3Jvc3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geSAgICAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgICBSZXR1cm5zIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5LnRvQXJyYXkoKSkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2tyb24oeCwgeS50b0FycmF5KCkpKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBfa3JvblxuICB9KTtcbiAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiB0d28gbWF0cmljZXMgLyB2ZWN0b3JzXG4gICAgICogQHBhcmFtIHtBcnJheX0gYSAgRmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gYiAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgeCBhbmQgeVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgZnVuY3Rpb24gX2tyb24oYSwgYikge1xuICAgIC8vIERlYWwgd2l0aCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgbWF0cmljaWVzLlxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYSkubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4XG4gICAgICBhID0gW2FdO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYikubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4XG4gICAgICBiID0gW2JdO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYSkubGVuZ3RoID4gMiB8fCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoYikubGVuZ3RoID4gMikge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgd2l0aCBkaW1lbnNpb25zIGdyZWF0ZXIgdGhlbiAyIGFyZSBub3Qgc3VwcG9ydGVkIGV4cGVjdGVkICcgKyAnKFNpemUgeCA9ICcgKyBKU09OLnN0cmluZ2lmeShhLmxlbmd0aCkgKyAnLCB5ID0gJyArIEpTT04uc3RyaW5naWZ5KGIubGVuZ3RoKSArICcpJyk7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBbXTtcbiAgICB2YXIgciA9IFtdO1xuICAgIHJldHVybiBhLm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGIubWFwKGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHIgPSBbXTtcbiAgICAgICAgdC5wdXNoKHIpO1xuICAgICAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICByZXR1cm4gYi5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiByLnB1c2gobXVsdGlwbHlTY2FsYXIoeSwgeCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pICYmIHQ7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVLcm9uID0gY3JlYXRlS3JvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFwID0gdm9pZCAwO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbWFwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTWFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5tYXAoeCwgY2FsbGJhY2spXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm1hcChbMSwgMiwgM10sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAqICAgICAgcmV0dXJuIHZhbHVlICogdmFsdWVcbiAgICogICAgfSkgIC8vIHJldHVybnMgWzEsIDQsIDldXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmaWx0ZXIsIGZvckVhY2gsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBUaGUgbWF0cml4IHRvIGl0ZXJhdGUgb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIG1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqIEByZXR1cm4ge01hdHJpeCB8IGFycmF5fSAgICAgVHJhbnNmb3JtZWQgbWFwIG9mIHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9tYXAsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHgubWFwKGNhbGxiYWNrKTtcbiAgICB9XG4gIH0pO1xufSk7XG4vKipcbiAqIE1hcCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVNYXAgPSBjcmVhdGVNYXA7XG5cbmZ1bmN0aW9uIF9tYXAoYXJyYXksIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDMgb3IgLTFcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVPbmVzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdvbmVzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlT25lcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1hdHJpeCBmaWxsZWQgd2l0aCBvbmVzLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yXG4gICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5vbmVzKG0pXG4gICAqICAgIG1hdGgub25lcyhtLCBmb3JtYXQpXG4gICAqICAgIG1hdGgub25lcyhtLCBuKVxuICAgKiAgICBtYXRoLm9uZXMobSwgbiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG5dKVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG5dLCBmb3JtYXQpXG4gICAqICAgIG1hdGgub25lcyhbbSwgbiwgcCwgLi4uXSlcbiAgICogICAgbWF0aC5vbmVzKFttLCBuLCBwLCAuLi5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm9uZXMoMykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMSwgMV1cbiAgICogICAgbWF0aC5vbmVzKDMsIDIpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAxXSwgWzEsIDFdLCBbMSwgMV1dXG4gICAqICAgIG1hdGgub25lcygzLCAyLCAnZGVuc2UnKSAgICAgICAvLyByZXR1cm5zIERlbnNlIE1hdHJpeCBbWzEsIDFdLCBbMSwgMV0sIFsxLCAxXV1cbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgbWF0aC5vbmVzKG1hdGguc2l6ZShBKSkgICAgICAgLy8gcmV0dXJucyBbWzEsIDEsIDFdLCBbMSwgMSwgMV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICB6ZXJvcywgaWRlbnRpdHksIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgQXJyYXl9IHNpemUgICAgVGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXggfCBudW1iZXJ9ICBBIG1hdHJpeCBmaWxsZWQgd2l0aCBvbmVzXG4gICAqL1xuICByZXR1cm4gdHlwZWQoJ29uZXMnLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IF9vbmVzKFtdKSA6IF9vbmVzKFtdLCAnZGVmYXVsdCcpO1xuICAgIH0sXG4gICAgLy8gbWF0aC5vbmVzKG0sIG4sIHAsIC4uLiwgZm9ybWF0KVxuICAgIC8vIFRPRE86IG1vcmUgYWNjdXJhdGUgc2lnbmF0dXJlICcuLi5udW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZycgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyB0aGlzXG4gICAgJy4uLm51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclN0cmluZyhzaXplKSB7XG4gICAgICB2YXIgbGFzdCA9IHNpemVbc2l6ZS5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5wb3AoKTtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsIGZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScpIHtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsICdkZWZhdWx0Jyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBBcnJheTogX29uZXMsXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgdmFyIGZvcm1hdCA9IHNpemUuc3RvcmFnZSgpO1xuICAgICAgcmV0dXJuIF9vbmVzKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfb25lcyhzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ3JlYXRlIGFuIEFycmF5IG9yIE1hdHJpeCB3aXRoIG9uZXNcbiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdD0nZGVmYXVsdCddXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfb25lcyhzaXplLCBmb3JtYXQpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxO1xuXG4gICAgX3ZhbGlkYXRlKHNpemUpO1xuXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gcmV0dXJuIGEgbWF0cml4XG4gICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkucmVzaXplKShhcnIsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzXG5cblxuICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IGZhbHNlO1xuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7XG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZS50b051bWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYXNCaWdOdW1iZXJzO1xuICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBvbmVzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU9uZXMgPSBjcmVhdGVPbmVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJ0aXRpb25TZWxlY3QgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3BhcnRpdGlvblNlbGVjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc051bWVyaWMnLCAnaXNOYU4nLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZVBhcnRpdGlvblNlbGVjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYyxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTixcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7XG4gIHZhciBhc2MgPSBjb21wYXJlO1xuXG4gIHZhciBkZXNjID0gZnVuY3Rpb24gZGVzYyhhLCBiKSB7XG4gICAgcmV0dXJuIC1jb21wYXJlKGEsIGIpO1xuICB9O1xuICAvKipcbiAgICogUGFydGl0aW9uLWJhc2VkIHNlbGVjdGlvbiBvZiBhbiBhcnJheSBvciAxRCBtYXRyaXguXG4gICAqIFdpbGwgZmluZCB0aGUga3RoIHNtYWxsZXN0IHZhbHVlLCBhbmQgbXV0YXRlcyB0aGUgaW5wdXQgYXJyYXkuXG4gICAqIFVzZXMgUXVpY2tzZWxlY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoeCwgaylcbiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFs1LCAxMCwgMV0sIDIpICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnQycsICdCJywgJ0EnLCAnRCddLCAxKSAvLyByZXR1cm5zICdCJ1xuICAgKlxuICAgKiAgICBmdW5jdGlvbiBzb3J0QnlMZW5ndGggKGEsIGIpIHtcbiAgICogICAgICByZXR1cm4gYS5sZW5ndGggLSBiLmxlbmd0aFxuICAgKiAgICB9XG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnTGFuZ2RvbicsICdUb20nLCAnU2FyYSddLCAyLCBzb3J0QnlMZW5ndGgpIC8vIHJldHVybnMgJ0xhbmdkb24nXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzb3J0XG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGsgICAgICAgICAgICBUaGUga3RoIHNtYWxsZXN0IHZhbHVlIHRvIGJlIHJldHJpZXZlZCB6ZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCAnYXNjJyB8ICdkZXNjJ30gW2NvbXBhcmU9J2FzYyddXG4gICAqICAgICAgICBBbiBvcHRpb25hbCBjb21wYXJhdG9yIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGFzXG4gICAqICAgICAgICBgY29tcGFyZShhLCBiKWAsIGFuZCBtdXN0IHJldHVybiAxIHdoZW4gYSA+IGIsIC0xIHdoZW4gYSA8IGIsXG4gICAqICAgICAgICBhbmQgMCB3aGVuIGEgPT0gYi5cbiAgICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUga3RoIGxvd2VzdCB2YWx1ZS5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlclN0cmluZyh4LCBrLCBjb21wYXJlKSB7XG4gICAgICBpZiAoY29tcGFyZSA9PT0gJ2FzYycpIHtcbiAgICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTtcbiAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIHJldHVybiBfcGFydGl0aW9uU2VsZWN0KHgsIGssIGRlc2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wYXJlIHN0cmluZyBtdXN0IGJlIFwiYXNjXCIgb3IgXCJkZXNjXCInKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBmdW5jdGlvbic6IF9wYXJ0aXRpb25TZWxlY3RcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3BhcnRpdGlvblNlbGVjdCh4LCBrLCBjb21wYXJlKSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGspIHx8IGsgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2sgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LnZhbHVlT2YoKSwgaywgY29tcGFyZSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LCBrLCBjb21wYXJlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFF1aWNrc2VsZWN0IGFsZ29yaXRobS5cbiAgICogQ29kZSBhZGFwdGVkIGZyb206XG4gICAqIGh0dHBzOi8vYmxvZy50ZWFtbGVhZG5ldC5jb20vMjAxMi8wNy9xdWljay1zZWxlY3QtYWxnb3JpdGhtLWZpbmQta3RoLWVsZW1lbnQuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGtcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHF1aWNrU2VsZWN0KGFyciwgaywgY29tcGFyZSkge1xuICAgIGlmIChrID49IGFyci5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignayBvdXQgb2YgYm91bmRzJyk7XG4gICAgfSAvLyBjaGVjayBmb3IgTmFOIHZhbHVlcyBzaW5jZSB0aGVzZSBjYW4gY2F1c2UgYW4gaW5maW5pdGUgd2hpbGUgbG9vcFxuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGlzTnVtZXJpYyhhcnJbaV0pICYmIGlzTmFOKGFycltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGFycltpXTsgLy8gcmV0dXJuIE5hTlxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmcm9tID0gMDtcbiAgICB2YXIgdG8gPSBhcnIubGVuZ3RoIC0gMTsgLy8gaWYgZnJvbSA9PSB0byB3ZSByZWFjaGVkIHRoZSBrdGggZWxlbWVudFxuXG4gICAgd2hpbGUgKGZyb20gPCB0bykge1xuICAgICAgdmFyIHIgPSBmcm9tO1xuICAgICAgdmFyIHcgPSB0bztcbiAgICAgIHZhciBwaXZvdCA9IGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAodG8gLSBmcm9tICsgMSkpICsgZnJvbV07IC8vIHN0b3AgaWYgdGhlIHJlYWRlciBhbmQgd3JpdGVyIG1lZXRzXG5cbiAgICAgIHdoaWxlIChyIDwgdykge1xuICAgICAgICAvLyBhcnJbcl0gPj0gcGl2b3RcbiAgICAgICAgaWYgKGNvbXBhcmUoYXJyW3JdLCBwaXZvdCkgPj0gMCkge1xuICAgICAgICAgIC8vIHB1dCB0aGUgbGFyZ2UgdmFsdWVzIGF0IHRoZSBlbmRcbiAgICAgICAgICB2YXIgdG1wID0gYXJyW3ddO1xuICAgICAgICAgIGFyclt3XSA9IGFycltyXTtcbiAgICAgICAgICBhcnJbcl0gPSB0bXA7XG4gICAgICAgICAgLS13O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRoZSB2YWx1ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHBpdm90LCBza2lwXG4gICAgICAgICAgKytyO1xuICAgICAgICB9XG4gICAgICB9IC8vIGlmIHdlIHN0ZXBwZWQgdXAgKHIrKykgd2UgbmVlZCB0byBzdGVwIG9uZSBkb3duIChhcnJbcl0gPiBwaXZvdClcblxuXG4gICAgICBpZiAoY29tcGFyZShhcnJbcl0sIHBpdm90KSA+IDApIHtcbiAgICAgICAgLS1yO1xuICAgICAgfSAvLyB0aGUgciBwb2ludGVyIGlzIG9uIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGsgZWxlbWVudHNcblxuXG4gICAgICBpZiAoayA8PSByKSB7XG4gICAgICAgIHRvID0gcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb20gPSByICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyW2tdO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFydGl0aW9uU2VsZWN0ID0gY3JlYXRlUGFydGl0aW9uU2VsZWN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9ub29wXCIpO1xuXG52YXIgbmFtZSA9ICdyYW5nZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCcsICc/YmlnbnVtYmVyJywgJ3NtYWxsZXInLCAnc21hbGxlckVxJywgJ2xhcmdlcicsICdsYXJnZXJFcSddO1xudmFyIGNyZWF0ZVJhbmdlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBzbWFsbGVyRXEgPSBfcmVmLnNtYWxsZXJFcSxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgbGFyZ2VyRXEgPSBfcmVmLmxhcmdlckVxO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYXJyYXkgZnJvbSBhIHJhbmdlLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgcmFuZ2UgZW5kIGlzIGV4Y2x1ZGVkLiBUaGlzIGNhbiBiZSBjdXN0b21pemVkIGJ5IHByb3ZpZGluZ1xuICAgKiBhbiBleHRyYSBwYXJhbWV0ZXIgYGluY2x1ZGVFbmRgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmdlKHN0ciBbLCBpbmNsdWRlRW5kXSkgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSBmcm9tIGEgc3RyaW5nLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIHN0cmluZyBjb250YWlucyB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGVkIGJ5IGEgY29sb24uXG4gICAqICAgICBtYXRoLnJhbmdlKHN0YXJ0LCBlbmQgWywgaW5jbHVkZUVuZF0pICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSB3aXRoIHN0YXJ0IGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIGFuZCBhIHN0ZXAgc2l6ZSBvZiAxLlxuICAgKiAgICAgbWF0aC5yYW5nZShzdGFydCwgZW5kLCBzdGVwIFssIGluY2x1ZGVFbmRdKSAgLy8gQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBzdGFydCwgc3RlcCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBlbmQuXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAtIGBzdHI6IHN0cmluZ2BcbiAgICogICBBIHN0cmluZyAnc3RhcnQ6ZW5kJyBvciAnc3RhcnQ6c3RlcDplbmQnXG4gICAqIC0gYHN0YXJ0OiB7bnVtYmVyIHwgQmlnTnVtYmVyfWBcbiAgICogICBTdGFydCBvZiB0aGUgcmFuZ2VcbiAgICogLSBgZW5kOiBudW1iZXIgfCBCaWdOdW1iZXJgXG4gICAqICAgRW5kIG9mIHRoZSByYW5nZSwgZXhjbHVkZWQgYnkgZGVmYXVsdCwgaW5jbHVkZWQgd2hlbiBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlXG4gICAqIC0gYHN0ZXA6IG51bWJlciB8IEJpZ051bWJlcmBcbiAgICogICBTdGVwIHNpemUuIERlZmF1bHQgdmFsdWUgaXMgMS5cbiAgICogLSBgaW5jbHVkZUVuZDogYm9vbGVhbmBcbiAgICogICBPcHRpb24gdG8gc3BlY2lmeSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIGVuZCBvciBub3QuIEZhbHNlIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5nZSgyLCA2KSAgICAgICAgLy8gWzIsIDMsIDQsIDVdXG4gICAqICAgICBtYXRoLnJhbmdlKDIsIC0zLCAtMSkgICAvLyBbMiwgMSwgMCwgLTEsIC0yXVxuICAgKiAgICAgbWF0aC5yYW5nZSgnMjoxOjYnKSAgICAgLy8gWzIsIDMsIDQsIDVdXG4gICAqICAgICBtYXRoLnJhbmdlKDIsIDYsIHRydWUpICAvLyBbMiwgMywgNCwgNSwgNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBvbmVzLCB6ZXJvcywgc2l6ZSwgc3Vic2V0XG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gYXJncyAgIFBhcmFtZXRlcnMgZGVzY3JpYmluZyB0aGUgcmFuZ2VzIGBzdGFydGAsIGBlbmRgLCBhbmQgb3B0aW9uYWwgYHN0ZXBgLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmFuZ2VcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gVE9ETzogc2ltcGxpZnkgc2lnbmF0dXJlcyB3aGVuIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIGRlZmF1bHQgdmFsdWVzIGFuZCBvcHRpb25hbCBhcmd1bWVudHNcbiAgICAvLyBUT0RPOiBhIG51bWJlciBvciBib29sZWFuIHNob3VsZCBub3QgYmUgY29udmVydGVkIHRvIHN0cmluZyBoZXJlXG4gICAgc3RyaW5nOiBfc3RyUmFuZ2UsXG4gICAgJ3N0cmluZywgYm9vbGVhbic6IF9zdHJSYW5nZSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgMSkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgcmV0dXJuIF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIDEpKSA6IF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgMSkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHtcbiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfcmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfcmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIEJpZ051bWJlciA9IHN0YXJ0LmNvbnN0cnVjdG9yO1xuICAgICAgcmV0dXJuIF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgcmV0dXJuIF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gc3RhcnQuY29uc3RydWN0b3I7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX2JpZ1JhbmdlSW5jKHN0YXJ0LCBlbmQsIG5ldyBCaWdOdW1iZXIoMSkpKSA6IF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCaWdOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHtcbiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfYmlnUmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfYmlnUmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfb3V0KGFycikge1xuICAgIGlmIChjb25maWcubWF0cml4ID09PSAnTWF0cml4Jykge1xuICAgICAgcmV0dXJuIG1hdHJpeCA/IG1hdHJpeChhcnIpIDogKDAsIF9ub29wLm5vTWF0cml4KSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICBmdW5jdGlvbiBfc3RyUmFuZ2Uoc3RyLCBpbmNsdWRlRW5kKSB7XG4gICAgdmFyIHIgPSBfcGFyc2Uoc3RyKTtcblxuICAgIGlmICghcikge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTdHJpbmcgXCInICsgc3RyICsgJ1wiIGlzIG5vIHZhbGlkIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgdmFyIGZuO1xuXG4gICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICBpZiAoYmlnbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKDAsIF9ub29wLm5vQmlnbnVtYmVyKSgpO1xuICAgICAgfVxuXG4gICAgICBmbiA9IGluY2x1ZGVFbmQgPyBfYmlnUmFuZ2VJbmMgOiBfYmlnUmFuZ2VFeDtcbiAgICAgIHJldHVybiBfb3V0KGZuKGJpZ251bWJlcihyLnN0YXJ0KSwgYmlnbnVtYmVyKHIuZW5kKSwgYmlnbnVtYmVyKHIuc3RlcCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4gPSBpbmNsdWRlRW5kID8gX3JhbmdlSW5jIDogX3JhbmdlRXg7XG4gICAgICByZXR1cm4gX291dChmbihyLnN0YXJ0LCByLmVuZCwgci5zdGVwKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHdoaWxlIChzbWFsbGVyKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHdoaWxlIChsYXJnZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIG51bWJlcnMuIEVuZCBpcyBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgeCA9IHN0YXJ0O1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICB3aGlsZSAoc21hbGxlckVxKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggKz0gc3RlcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJhbmdlIHdpdGggYmlnIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciB6ZXJvID0gYmlnbnVtYmVyKDApO1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcC5ndCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKHNtYWxsZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ID0geC5wbHVzKHN0ZXApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcC5sdCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKGxhcmdlcih4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIGJpZyBudW1iZXJzLiBFbmQgaXMgaW5jbHVkZWRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBlbmRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0ZXBcbiAgICogQHJldHVybnMge0FycmF5fSByYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9iaWdSYW5nZUluYyhzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgdmFyIHplcm8gPSBiaWdudW1iZXIoMCk7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIHggPSBzdGFydDtcblxuICAgIGlmIChzdGVwLmd0KHplcm8pKSB7XG4gICAgICB3aGlsZSAoc21hbGxlckVxKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCA9IHgucGx1cyhzdGVwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAubHQoemVybykpIHtcbiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgcmFuZ2UsXG4gICAqIFRoZSBzdHJpbmcgY29udGFpbnMgdGhlIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi5cbiAgICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmFuZ2UsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEZvciBleGFtcGxlIHN0cj0nMDoyOjExJy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJuIHt7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHN0ZXA6IG51bWJlcn0gfCBudWxsfSByYW5nZSBPYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIHN0YXJ0LCBlbmQsIHN0ZXBcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcGFyc2Uoc3RyKSB7XG4gICAgdmFyIGFyZ3MgPSBzdHIuc3BsaXQoJzonKTsgLy8gbnVtYmVyXG5cbiAgICB2YXIgbnVtcyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIC8vIHVzZSBOdW1iZXIgYW5kIG5vdCBwYXJzZUZsb2F0IGFzIE51bWJlciByZXR1cm5zIE5hTiBvbiBpbnZhbGlkIGdhcmJhZ2UgaW4gdGhlIHN0cmluZ1xuICAgICAgcmV0dXJuIE51bWJlcihhcmcpO1xuICAgIH0pO1xuICAgIHZhciBpbnZhbGlkID0gbnVtcy5zb21lKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgIHJldHVybiBpc05hTihudW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAobnVtcy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogbnVtc1swXSxcbiAgICAgICAgICBlbmQ6IG51bXNbMV0sXG4gICAgICAgICAgc3RlcDogMVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IG51bXNbMF0sXG4gICAgICAgICAgZW5kOiBudW1zWzJdLFxuICAgICAgICAgIHN0ZXA6IG51bXNbMV1cbiAgICAgICAgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2UgPSBjcmVhdGVSYW5nZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzaGFwZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3Jlc2hhcGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNJbnRlZ2VyJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVJlc2hhcGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogUmVzaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnNcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIHNpemVzKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbMSwgMiwgMywgNCwgNSwgNl0sIFsyLCAzXSlcbiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgIFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbMSwgNF0pXG4gICAqICAgICAvLyByZXR1cm5zIEFycmF5ICBbWzEsIDIsIDMsIDRdXVxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFs0XSlcbiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDMsIDRdXG4gICAqXG4gICAqICAgICBjb25zdCB4ID0gbWF0aC5tYXRyaXgoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdKVxuICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIFsyLCAyLCAyXSlcbiAgICogICAgIC8vIHJldHVybnMgTWF0cml4IFtbWzEsIDJdLCBbMywgNF1dLCBbWzUsIDZdLCBbNywgOF1dXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpemUsIHNxdWVlemUsIHJlc2l6ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0geCAgTWF0cml4IHRvIGJlIHJlc2hhcGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemVzICAgICAgICBPbmUgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpbnRlZ3JhbCBzaXplcyBmb3JcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggZGltZW5zaW9uXG4gICAqXG4gICAqIEByZXR1cm4geyogfCBBcnJheSB8IE1hdHJpeH0gICBBIHJlc2hhcGVkIGNsb25lIG9mIG1hdHJpeCBgeGBcbiAgICpcbiAgICogQHRocm93cyB7VHlwZUVycm9yfSAgICAgICAgICAgIElmIGBzaXplc2AgZG9lcyBub3QgY29udGFpbiBzb2xlbHkgaW50ZWdlcnNcbiAgICogQHRocm93cyB7RGltZW5zaW9uRXJyb3J9ICAgICAgIElmIHRoZSBwcm9kdWN0IG9mIHRoZSBuZXcgZGltZW5zaW9uIHNpemVzIGRvZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBlcXVhbCB0aGF0IG9mIHRoZSBvbGQgb25lc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHNpemVzKSB7XG4gICAgICBpZiAoeC5yZXNoYXBlKSB7XG4gICAgICAgIHJldHVybiB4LnJlc2hhcGUoc2l6ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX2FycmF5LnJlc2hhcGUpKHgudmFsdWVPZigpLCBzaXplcykpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgc2l6ZXMpIHtcbiAgICAgIHNpemVzLmZvckVhY2goZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIoc2l6ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUgZm9yIGRpbWVuc2lvbjogJyArIHNpemUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoMCwgX2FycmF5LnJlc2hhcGUpKHgsIHNpemVzKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2hhcGUgPSBjcmVhdGVSZXNoYXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNpemUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXNpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVJlc2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBSZXNpemUgYSBtYXRyaXhcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNpemUoeCwgc2l6ZSlcbiAgICogICAgIG1hdGgucmVzaXplKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgMywgNCwgNV0sIFszXSkgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDNdXG4gICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgM10sIFs1XSwgMCkgICAgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDMsIDAsIDBdXG4gICAqICAgICBtYXRoLnJlc2l6ZSgyLCBbMiwgM10sIDApICAgICAgICAgLy8gcmV0dXJucyBNYXRyaXggW1syLCAwLCAwXSwgWzAsIDAsIDBdXVxuICAgKiAgICAgbWF0aC5yZXNpemUoXCJoZWxsb1wiLCBbOF0sIFwiIVwiKSAgICAvLyByZXR1cm5zIHN0cmluZyAnaGVsbG8hISEnXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2l6ZSwgc3F1ZWV6ZSwgc3Vic2V0LCByZXNoYXBlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCAqfSB4ICAgICAgICAgICAgIE1hdHJpeCB0byBiZSByZXNpemVkXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHNpemUgICAgICAgICAgICAgIE9uZSBkaW1lbnNpb25hbCBhcnJheSB3aXRoIG51bWJlcnNcbiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtkZWZhdWx0VmFsdWU9MF0gWmVybyBieSBkZWZhdWx0LCBleGNlcHQgaW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvZiBhIHN0cmluZywgaW4gdGhhdCBjYXNlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9ICcgJ1xuICAgKiBAcmV0dXJuIHsqIHwgQXJyYXkgfCBNYXRyaXh9IEEgcmVzaXplZCBjbG9uZSBvZiBtYXRyaXggYHhgXG4gICAqL1xuICAvLyBUT0RPOiByZXdvcmsgcmVzaXplIHRvIGEgdHlwZWQtZnVuY3Rpb25cbiAgcmV0dXJuIGZ1bmN0aW9uIHJlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMiAmJiBhcmd1bWVudHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yKCdyZXNpemUnLCBhcmd1bWVudHMubGVuZ3RoLCAyLCAzKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkpIHtcbiAgICAgIHNpemUgPSBzaXplLnZhbHVlT2YoKTsgLy8gZ2V0IEFycmF5XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHNpemVbMF0pKSB7XG4gICAgICAvLyBjb252ZXJ0IGJpZ251bWJlcnMgdG8gbnVtYmVyc1xuICAgICAgc2l6ZSA9IHNpemUubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gISgwLCBfaXMuaXNCaWdOdW1iZXIpKHZhbHVlKSA/IHZhbHVlIDogdmFsdWUudG9OdW1iZXIoKTtcbiAgICAgIH0pO1xuICAgIH0gLy8gY2hlY2sgeCBpcyBhIE1hdHJpeFxuXG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgIC8vIHVzZSBvcHRpbWl6ZWQgbWF0cml4IGltcGxlbWVudGF0aW9uLCByZXR1cm4gY29weVxuICAgICAgcmV0dXJuIHgucmVzaXplKHNpemUsIGRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB4ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gcmVzaXplIHN0cmluZ1xuICAgICAgcmV0dXJuIF9yZXNpemVTdHJpbmcoeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICB9IC8vIGNoZWNrIHJlc3VsdCBzaG91bGQgYmUgYSBtYXRyaXhcblxuXG4gICAgdmFyIGFzTWF0cml4ID0gQXJyYXkuaXNBcnJheSh4KSA/IGZhbHNlIDogY29uZmlnLm1hdHJpeCAhPT0gJ0FycmF5JztcblxuICAgIGlmIChzaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gb3V0cHV0IGEgc2NhbGFyXG4gICAgICB3aGlsZSAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgICB4ID0geFswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IGFuIGFycmF5L21hdHJpeFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHggPSBbeF07XG4gICAgICB9XG5cbiAgICAgIHggPSAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgICB2YXIgcmVzID0gKDAsIF9hcnJheS5yZXNpemUpKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICByZXR1cm4gYXNNYXRyaXggPyBtYXRyaXgocmVzKSA6IHJlcztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXNpemUgYSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdENoYXI9JyAnXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfcmVzaXplU3RyaW5nKHN0ciwgc2l6ZSwgZGVmYXVsdENoYXIpIHtcbiAgICBpZiAoZGVmYXVsdENoYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0Q2hhciAhPT0gJ3N0cmluZycgfHwgZGVmYXVsdENoYXIubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmF1bHRDaGFyID0gJyAnO1xuICAgIH1cblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCwgMSk7XG4gICAgfVxuXG4gICAgdmFyIGxlbiA9IHNpemVbMF07XG5cbiAgICBpZiAodHlwZW9mIGxlbiAhPT0gJ251bWJlcicgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobGVuKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgIH1cblxuICAgIGlmIChzdHIubGVuZ3RoID4gbGVuKSB7XG4gICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBsZW4pO1xuICAgIH0gZWxzZSBpZiAoc3RyLmxlbmd0aCA8IGxlbikge1xuICAgICAgdmFyIHJlcyA9IHN0cjtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbGVuIC0gc3RyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgcmVzICs9IGRlZmF1bHRDaGFyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2l6ZSA9IGNyZWF0ZVJlc2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm93ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdyb3cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG52YXIgY3JlYXRlUm93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSByb3cgZnJvbSBhIE1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yb3codmFsdWUsIGluZGV4KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgcm93XG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5yb3coZCwgMSkgLy8gcmV0dXJucyBbWzMsIDRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IH0gdmFsdWUgICBBbiBhcnJheSBvciBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyAgICAgICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSByb3dcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICAgICAgVGhlIHJldHJpZXZlZCByb3dcbiAgICovXG4gIHZhciByb3cgPSB0eXBlZChuYW1lLCB7XG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX3JvdyxcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHZhbHVlLCByb3cpIHtcbiAgICAgIHJldHVybiBfcm93KG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKSwgcm93KS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJvdztcbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgcm93IG9mIGEgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4IH0gdmFsdWUgIEEgbWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgICAgIFRoZSBpbmRleCBvZiB0aGUgcm93XG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgIFRoZSByZXRyaWV2ZWQgcm93XG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9yb3codmFsdWUsIHJvdykge1xuICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICBpZiAodmFsdWUuc2l6ZSgpLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25hbCBtYXRyaXggaXMgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShyb3csIHZhbHVlLnNpemUoKVswXSk7XG4gICAgdmFyIGNvbHVtblJhbmdlID0gcmFuZ2UoMCwgdmFsdWUuc2l6ZSgpWzFdKTtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgocm93LCBjb2x1bW5SYW5nZSk7XG4gICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3cgPSBjcmVhdGVSb3c7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpemUgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAnc2l6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCddO1xudmFyIGNyZWF0ZVNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgbWF0cml4IG9yIHNjYWxhci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zaXplKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zaXplKDIuMykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtdXG4gICAqICAgICBtYXRoLnNpemUoJ2hlbGxvIHdvcmxkJykgICAgICAgIC8vIHJldHVybnMgWzExXVxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgIG1hdGguc2l6ZShBKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMiwgM11cbiAgICogICAgIG1hdGguc2l6ZShtYXRoLnJhbmdlKDEsNikpICAgICAgLy8gcmV0dXJucyBbNV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICByZXNpemUsIHNxdWVlemUsIHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG1hdHJpeFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gQSB2ZWN0b3Igd2l0aCBzaXplIG9mIGB4YC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKHguc2l6ZSgpKTtcbiAgICB9LFxuICAgIEFycmF5OiBfYXJyYXkuYXJyYXlTaXplLFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW3gubGVuZ3RoXSA6IG1hdHJpeChbeC5sZW5ndGhdKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyIHwgVW5pdCB8IGJvb2xlYW4gfCBudWxsJzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlclVuaXRCb29sZWFuTnVsbCh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW10gOiBtYXRyaXggPyBtYXRyaXgoW10pIDogKDAsIF9ub29wLm5vTWF0cml4KSgpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2l6ZSA9IGNyZWF0ZVNpemU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvcnQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzb3J0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ107XG52YXIgY3JlYXRlU29ydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmUsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWw7XG4gIHZhciBjb21wYXJlQXNjID0gY29tcGFyZTtcblxuICB2YXIgY29tcGFyZURlc2MgPSBmdW5jdGlvbiBjb21wYXJlRGVzYyhhLCBiKSB7XG4gICAgcmV0dXJuIC1jb21wYXJlKGEsIGIpO1xuICB9O1xuICAvKipcbiAgICogU29ydCB0aGUgaXRlbXMgaW4gYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zb3J0KHgpXG4gICAqICAgIG1hdGguc29ydCh4LCBjb21wYXJlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zb3J0KFs1LCAxMCwgMV0pIC8vIHJldHVybnMgWzEsIDUsIDEwXVxuICAgKiAgICBtYXRoLnNvcnQoWydDJywgJ0InLCAnQScsICdEJ10sIG1hdGguY29tcGFyZU5hdHVyYWwpXG4gICAqICAgIC8vIHJldHVybnMgWydBJywgJ0InLCAnQycsICdEJ11cbiAgICpcbiAgICogICAgZnVuY3Rpb24gc29ydEJ5TGVuZ3RoIChhLCBiKSB7XG4gICAqICAgICAgcmV0dXJuIGEubGVuZ3RoIC0gYi5sZW5ndGhcbiAgICogICAgfVxuICAgKiAgICBtYXRoLnNvcnQoWydMYW5nZG9uJywgJ1RvbScsICdTYXJhJ10sIHNvcnRCeUxlbmd0aClcbiAgICogICAgLy8gcmV0dXJucyBbJ1RvbScsICdTYXJhJywgJ0xhbmdkb24nXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmlsdGVyLCBmb3JFYWNoLCBtYXAsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8ICdhc2MnIHwgJ2Rlc2MnIHwgJ25hdHVyYWwnfSBbY29tcGFyZT0nYXNjJ11cbiAgICogICAgICAgIEFuIG9wdGlvbmFsIF9jb21wYXJhdG9yIGZ1bmN0aW9uIG9yIG5hbWUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYXNcbiAgICogICAgICAgIGBjb21wYXJlKGEsIGIpYCwgYW5kIG11c3QgcmV0dXJuIDEgd2hlbiBhID4gYiwgLTEgd2hlbiBhIDwgYixcbiAgICogICAgICAgIGFuZCAwIHdoZW4gYSA9PSBiLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgc29ydGVkIG1hdHJpeC5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICBfYXJyYXlJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIHguc29ydChjb21wYXJlQXNjKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIF9tYXRyaXhJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIG1hdHJpeCh4LnRvQXJyYXkoKS5zb3J0KGNvbXBhcmVBc2MpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBfY29tcGFyYXRvcikge1xuICAgICAgX2FycmF5SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiB4LnNvcnQoX2NvbXBhcmF0b3IpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBfY29tcGFyYXRvcikge1xuICAgICAgX21hdHJpeElzVmVjdG9yKHgpO1xuXG4gICAgICByZXR1cm4gbWF0cml4KHgudG9BcnJheSgpLnNvcnQoX2NvbXBhcmF0b3IpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5U3RyaW5nKHgsIG9yZGVyKSB7XG4gICAgICBfYXJyYXlJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIHguc29ydChfY29tcGFyYXRvcihvcmRlcikpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4U3RyaW5nKHgsIG9yZGVyKSB7XG4gICAgICBfbWF0cml4SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiBtYXRyaXgoeC50b0FycmF5KCkuc29ydChfY29tcGFyYXRvcihvcmRlcikpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29tcGFyYXRvciBmb3IgZ2l2ZW4gb3JkZXIgKCdhc2MnLCAnZGVzYycsICduYXR1cmFsJylcbiAgICogQHBhcmFtIHsnYXNjJyB8ICdkZXNjJyB8ICduYXR1cmFsJ30gb3JkZXJcbiAgICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgYSBfY29tcGFyYXRvciBmdW5jdGlvblxuICAgKi9cblxuICBmdW5jdGlvbiBfY29tcGFyYXRvcihvcmRlcikge1xuICAgIGlmIChvcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgIHJldHVybiBjb21wYXJlQXNjO1xuICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICdkZXNjJykge1xuICAgICAgcmV0dXJuIGNvbXBhcmVEZXNjO1xuICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICduYXR1cmFsJykge1xuICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyBcImFzY1wiLCBcImRlc2NcIiwgb3IgXCJuYXR1cmFsXCIgZXhwZWN0ZWQnKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHdoZXRoZXIgYW4gYXJyYXkgaXMgb25lIGRpbWVuc2lvbmFsXG4gICAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoaXMgaXMgbm90IHRoZSBjYXNlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2FycmF5SXNWZWN0b3IoYXJyYXkpIHtcbiAgICBpZiAoKDAsIF9hcnJheS5hcnJheVNpemUpKGFycmF5KS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25lIGRpbWVuc2lvbmFsIGFycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGEgbWF0cml4IGlzIG9uZSBkaW1lbnNpb25hbFxuICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZVxuICAgKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX21hdHJpeElzVmVjdG9yKG1hdHJpeCkge1xuICAgIGlmIChtYXRyaXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgZGltZW5zaW9uYWwgbWF0cml4IGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlU29ydCA9IGNyZWF0ZVNvcnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxcnRtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzcXJ0bSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ211bHRpcGx5JywgJ3NxcnQnLCAnc3VidHJhY3QnLCAnaW52JywgJ3NpemUnLCAnbWF4JywgJ2lkZW50aXR5J107XG52YXIgY3JlYXRlU3FydG0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBpbnYgPSBfcmVmLmludixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBtYXggPSBfcmVmLm1heCxcbiAgICAgIGlkZW50aXR5ID0gX3JlZi5pZGVudGl0eTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgYSBzcXVhcmUgbWF0cml4LlxuICAgKiBUaGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCBgWGAgb2YgYW5vdGhlciBtYXRyaXggYEFgIGlzIHN1Y2ggdGhhdCBgWCAqIFggPSBBYC5cbiAgICpcbiAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3F1YXJlX3Jvb3Rfb2ZfYV9tYXRyaXhcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgWCA9IG1hdGguc3FydG0oQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNxcnRtKFtbMSwgMl0sIFszLCA0XV0pIC8vIHJldHVybnMgW1stMiwgMV0sIFsxLjUsIC0wLjVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNxcnQsIHBvd1xuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gQSAgIFRoZSBzcXVhcmUgbWF0cml4IGBBYFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgbWF0cml4IGBBYFxuICAgKi9cbiAgdmFyIHNxcnRtID0gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KEEpIHtcbiAgICAgIHZhciBzaXplID0gKDAsIF9pcy5pc01hdHJpeCkoQSkgPyBBLnNpemUoKSA6ICgwLCBfYXJyYXkuYXJyYXlTaXplKShBKTtcblxuICAgICAgc3dpdGNoIChzaXplLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgLy8gU2luZ2xlIGVsZW1lbnQgQXJyYXkgfCBNYXRyaXhcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHNxcnQoQSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gVHdvLWRpbWVuc2lvbmFsIEFycmF5IHwgTWF0cml4XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGVubWFuQmVhdmVycyhBKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICB2YXIgX21heEl0ZXJhdGlvbnMgPSAxZTM7XG4gIHZhciBfdG9sZXJhbmNlID0gMWUtNjtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCB1c2luZyB0aGUgRGVubWFu4oCTQmVhdmVycyBpdGVyYXRpdmUgbWV0aG9kXG4gICAqXG4gICAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NxdWFyZV9yb290X29mX2FfbWF0cml4I0J5X0Rlbm1hbuKAk0JlYXZlcnNfaXRlcmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSBBICAgVGhlIHNxdWFyZSBtYXRyaXggYEFgXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgVGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBtYXRyaXggYEFgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9kZW5tYW5CZWF2ZXJzKEEpIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHZhciBZID0gQTtcbiAgICB2YXIgWiA9IGlkZW50aXR5KHNpemUoQSkpO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIFlrID0gWTtcbiAgICAgIFkgPSBtdWx0aXBseSgwLjUsIGFkZChZaywgaW52KFopKSk7XG4gICAgICBaID0gbXVsdGlwbHkoMC41LCBhZGQoWiwgaW52KFlrKSkpO1xuICAgICAgZXJyb3IgPSBtYXgoYWJzKHN1YnRyYWN0KFksIFlrKSkpO1xuXG4gICAgICBpZiAoZXJyb3IgPiBfdG9sZXJhbmNlICYmICsraXRlcmF0aW9ucyA+IF9tYXhJdGVyYXRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29tcHV0aW5nIHNxdWFyZSByb290IG9mIG1hdHJpeDogaXRlcmF0aXZlIG1ldGhvZCBjb3VsZCBub3QgY29udmVyZ2UnKTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChlcnJvciA+IF90b2xlcmFuY2UpO1xuXG4gICAgcmV0dXJuIFk7XG4gIH1cblxuICByZXR1cm4gc3FydG07XG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydG0gPSBjcmVhdGVTcXJ0bTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3F1ZWV6ZSA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3F1ZWV6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVTcXVlZXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBTcXVlZXplIGEgbWF0cml4LCByZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguc3F1ZWV6ZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc3F1ZWV6ZShbM10pICAgICAgICAgICAvLyByZXR1cm5zIDNcbiAgICogICAgIG1hdGguc3F1ZWV6ZShbWzNdXSkgICAgICAgICAvLyByZXR1cm5zIDNcbiAgICpcbiAgICogICAgIGNvbnN0IEEgPSBtYXRoLnplcm9zKDMsIDEpICAgIC8vIHJldHVybnMgW1swXSwgWzBdLCBbMF1dIChzaXplIDN4MSlcbiAgICogICAgIG1hdGguc3F1ZWV6ZShBKSAgICAgICAgICAgICAvLyByZXR1cm5zIFswLCAwLCAwXSAoc2l6ZSAzKVxuICAgKlxuICAgKiAgICAgY29uc3QgQiA9IG1hdGguemVyb3MoMSwgMykgICAgLy8gcmV0dXJucyBbWzAsIDAsIDBdXSAoc2l6ZSAxeDMpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQikgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF0gKHNpemUgMylcbiAgICpcbiAgICogICAgIC8vIG9ubHkgaW5uZXIgYW5kIG91dGVyIGRpbWVuc2lvbnMgYXJlIHJlbW92ZWRcbiAgICogICAgIGNvbnN0IEMgPSBtYXRoLnplcm9zKDIsIDEsIDMpIC8vIHJldHVybnMgW1tbMCwgMCwgMF1dLCBbWzAsIDAsIDBdXV0gKHNpemUgMngxeDMpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQykgICAgICAgICAgICAgLy8gcmV0dXJucyBbW1swLCAwLCAwXV0sIFtbMCwgMCwgMF1dXSAoc2l6ZSAyeDF4MylcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgIE1hdHJpeCB0byBiZSBzcXVlZXplZFxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gU3F1ZWV6ZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5zcXVlZXplKSgoMCwgX29iamVjdC5jbG9uZSkoeCkpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgdmFyIHJlcyA9ICgwLCBfYXJyYXkuc3F1ZWV6ZSkoeC50b0FycmF5KCkpOyAvLyBGSVhNRTogcmV0dXJuIHRoZSBzYW1lIHR5cGUgb2YgbWF0cml4IGFzIHRoZSBpbnB1dFxuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXMpID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXVlZXplID0gY3JlYXRlU3F1ZWV6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3Vic2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogR2V0IG9yIHNldCBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBzdHJpbmcuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICogICAgIG1hdGguc3Vic2V0KHZhbHVlLCBpbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIGEgc3Vic2V0XG4gICAqICAgICBtYXRoLnN1YnNldCh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50IFssIGRlZmF1bHRWYWx1ZV0pICAvLyByZXBsYWNlIGEgc3Vic2V0XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgc3Vic2V0XG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleCgxLCAwKSkgICAgICAgIC8vIHJldHVybnMgM1xuICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleChbMCwgMV0sIDEpKSAgIC8vIHJldHVybnMgW1syXSwgWzRdXVxuICAgKlxuICAgKiAgICAgLy8gcmVwbGFjZSBhIHN1YnNldFxuICAgKiAgICAgY29uc3QgZSA9IFtdXG4gICAqICAgICBjb25zdCBmID0gbWF0aC5zdWJzZXQoZSwgbWF0aC5pbmRleCgwLCBbMCwgMl0pLCBbNSwgNl0pICAvLyBmID0gW1s1LCA2XV1cbiAgICogICAgIGNvbnN0IGcgPSBtYXRoLnN1YnNldChmLCBtYXRoLmluZGV4KDEsIDEpLCA3LCAwKSAgICAgICAgIC8vIGcgPSBbWzUsIDZdLCBbMCwgN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2l6ZSwgcmVzaXplLCBzcXVlZXplLCBpbmRleFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBtYXRyaXggIEFuIGFycmF5LCBtYXRyaXgsIG9yIHN0cmluZ1xuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleCAgICAgICAgICAgICAgICAgICAgIEFuIGluZGV4IGNvbnRhaW5pbmcgcmFuZ2VzIGZvciBlYWNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uXG4gICAqIEBwYXJhbSB7Kn0gW3JlcGxhY2VtZW50XSAgICAgICAgICAgICAgICAgQW4gYXJyYXksIG1hdHJpeCwgb3Igc2NhbGFyLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHByb3ZpZGVkLCB0aGUgc3Vic2V0IGlzIHJlcGxhY2VkIHdpdGggcmVwbGFjZW1lbnQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgc3Vic2V0IGlzIHJldHVybmVkXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT11bmRlZmluZWRdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLm1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGxlZnQgdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gRWl0aGVyIHRoZSByZXRyaWV2ZWQgc3Vic2V0IG9yIHRoZSB1cGRhdGVkIG1hdHJpeC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gZ2V0IHN1YnNldFxuICAgICdBcnJheSwgSW5kZXgnOiBmdW5jdGlvbiBBcnJheUluZGV4KHZhbHVlLCBpbmRleCkge1xuICAgICAgdmFyIG0gPSBtYXRyaXgodmFsdWUpO1xuICAgICAgdmFyIHN1YnNldCA9IG0uc3Vic2V0KGluZGV4KTsgLy8gcmV0dXJucyBhIE1hdHJpeFxuXG4gICAgICByZXR1cm4gaW5kZXguaXNTY2FsYXIoKSA/IHN1YnNldCA6IHN1YnNldC52YWx1ZU9mKCk7IC8vIHJldHVybiBhbiBBcnJheSAobGlrZSB0aGUgaW5wdXQpXG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCc6IGZ1bmN0aW9uIE1hdHJpeEluZGV4KHZhbHVlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBJbmRleCc6IF9nZXRPYmplY3RQcm9wZXJ0eSxcbiAgICAnc3RyaW5nLCBJbmRleCc6IF9nZXRTdWJzdHJpbmcsXG4gICAgLy8gc2V0IHN1YnNldFxuICAgICdBcnJheSwgSW5kZXgsIGFueSc6IGZ1bmN0aW9uIEFycmF5SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKS5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50LCB1bmRlZmluZWQpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgSW5kZXgsIGFueSwgYW55JzogZnVuY3Rpb24gQXJyYXlJbmRleEFueUFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKSkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCwgYW55JzogZnVuY3Rpb24gTWF0cml4SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmNsb25lKCkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCwgYW55LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhJbmRleEFueUFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5jbG9uZSgpLnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBJbmRleCwgc3RyaW5nJzogX3NldFN1YnN0cmluZyxcbiAgICAnc3RyaW5nLCBJbmRleCwgc3RyaW5nLCBzdHJpbmcnOiBfc2V0U3Vic3RyaW5nLFxuICAgICdPYmplY3QsIEluZGV4LCBhbnknOiBfc2V0T2JqZWN0UHJvcGVydHlcbiAgfSk7XG59KTtcbi8qKlxuICogUmV0cmlldmUgYSBzdWJzZXQgb2YgYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICBzdHJpbmcgZnJvbSB3aGljaCB0byBnZXQgYSBzdWJzdHJpbmdcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IHN1YnN0cmluZ1xuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVN1YnNldCA9IGNyZWF0ZVN1YnNldDtcblxuZnVuY3Rpb24gX2dldFN1YnN0cmluZyhzdHIsIGluZGV4KSB7XG4gIGlmICghKDAsIF9pcy5pc0luZGV4KShpbmRleCkpIHtcbiAgICAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luZGV4IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLmxlbmd0aCwgMSk7XG4gIH0gLy8gdmFsaWRhdGUgd2hldGhlciB0aGUgcmFuZ2UgaXMgb3V0IG9mIHJhbmdlXG5cblxuICB2YXIgc3RyTGVuID0gc3RyLmxlbmd0aDtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5taW4oKVswXSwgc3RyTGVuKTtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5tYXgoKVswXSwgc3RyTGVuKTtcbiAgdmFyIHJhbmdlID0gaW5kZXguZGltZW5zaW9uKDApO1xuICB2YXIgc3Vic3RyID0gJyc7XG4gIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICBzdWJzdHIgKz0gc3RyLmNoYXJBdCh2KTtcbiAgfSk7XG4gIHJldHVybiBzdWJzdHI7XG59XG4vKipcbiAqIFJlcGxhY2UgYSBzdWJzdHJpbmcgaW4gYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICBzdHJpbmcgdG8gYmUgcmVwbGFjZWRcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudCAgICBSZXBsYWNlbWVudCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdFZhbHVlXSBEZWZhdWx0IHZhbHVlIHRvIGJlIHVzZXMgd2hlbiByZXNpemluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdHJpbmcuIGlzICcgJyBieSBkZWZhdWx0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSByZXN1bHRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc2V0U3Vic3RyaW5nKHN0ciwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgLy8gVE9ETzogYmV0dGVyIGVycm9yIG1lc3NhZ2VcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGluZGV4LnNpemUoKS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGluZGV4LnNpemUoKS5sZW5ndGgsIDEpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgIT09ICdzdHJpbmcnIHx8IGRlZmF1bHRWYWx1ZS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRlZmF1bHRWYWx1ZSA9ICcgJztcbiAgfVxuXG4gIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbigwKTtcbiAgdmFyIGxlbiA9IHJhbmdlLnNpemUoKVswXTtcblxuICBpZiAobGVuICE9PSByZXBsYWNlbWVudC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHJhbmdlLnNpemUoKVswXSwgcmVwbGFjZW1lbnQubGVuZ3RoKTtcbiAgfSAvLyB2YWxpZGF0ZSB3aGV0aGVyIHRoZSByYW5nZSBpcyBvdXQgb2YgcmFuZ2VcblxuXG4gIHZhciBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4Lm1pbigpWzBdKTtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5tYXgoKVswXSk7IC8vIGNvcHkgdGhlIHN0cmluZyBpbnRvIGFuIGFycmF5IHdpdGggY2hhcmFjdGVyc1xuXG4gIHZhciBjaGFycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IHN0ci5jaGFyQXQoaSk7XG4gIH1cblxuICByYW5nZS5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgY2hhcnNbdl0gPSByZXBsYWNlbWVudC5jaGFyQXQoaVswXSk7XG4gIH0pOyAvLyBpbml0aWFsaXplIHVuZGVmaW5lZCBjaGFyYWN0ZXJzIHdpdGggYSBzcGFjZVxuXG4gIGlmIChjaGFycy5sZW5ndGggPiBzdHJMZW4pIHtcbiAgICBmb3IgKHZhciBfaSA9IHN0ckxlbiAtIDEsIF9sZW4gPSBjaGFycy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgaWYgKCFjaGFyc1tfaV0pIHtcbiAgICAgICAgY2hhcnNbX2ldID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFycy5qb2luKCcnKTtcbn1cbi8qKlxuICogUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9nZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4KSB7XG4gIGlmIChpbmRleC5zaXplKCkubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpbmRleC5zaXplKCksIDEpO1xuICB9XG5cbiAgdmFyIGtleSA9IGluZGV4LmRpbWVuc2lvbigwKTtcblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQgYXMgaW5kZXggdG8gcmV0cmlldmUgYW4gb2JqZWN0IHByb3BlcnR5Jyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkob2JqZWN0LCBrZXkpO1xufVxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gKiBAcGFyYW0geyp9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHsqfSBSZXR1cm5zIHRoZSB1cGRhdGVkIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLCAxKTtcbiAgfVxuXG4gIHZhciBrZXkgPSBpbmRleC5kaW1lbnNpb24oMCk7XG5cbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGFzIGluZGV4IHRvIHJldHJpZXZlIGFuIG9iamVjdCBwcm9wZXJ0eScpO1xuICB9IC8vIGNsb25lIHRoZSBvYmplY3QsIGFuZCBhcHBseSB0aGUgcHJvcGVydHkgdG8gdGhlIGNsb25lXG5cblxuICB2YXIgdXBkYXRlZCA9ICgwLCBfb2JqZWN0LmNsb25lKShvYmplY3QpO1xuICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KSh1cGRhdGVkLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgcmV0dXJuIHVwZGF0ZWQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVRyYWNlID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3RyYWNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGQnXTtcbnZhciBjcmVhdGVUcmFjZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHRyYWNlIG9mIGEgbWF0cml4OiB0aGUgc3VtIG9mIHRoZSBlbGVtZW50cyBvbiB0aGUgbWFpblxuICAgKiBkaWFnb25hbCBvZiBhIHNxdWFyZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC50cmFjZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC50cmFjZShbWzEsIDJdLCBbMywgNF1dKSAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtcbiAgICogICAgICBbMSwgMiwgM10sXG4gICAqICAgICAgWy0xLCAyLCAzXSxcbiAgICogICAgICBbMiwgMCwgM11cbiAgICogICAgXVxuICAgKiAgICBtYXRoLnRyYWNlKEEpIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGlhZ1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBBIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0cmFjZSBvZiBgeGBcbiAgICovXG4gIHJldHVybiB0eXBlZCgndHJhY2UnLCB7XG4gICAgQXJyYXk6IGZ1bmN0aW9uIF9hcnJheVRyYWNlKHgpIHtcbiAgICAgIC8vIHVzZSBkZW5zZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBfZGVuc2VUcmFjZShtYXRyaXgoeCkpO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBfc3BhcnNlVHJhY2UsXG4gICAgRGVuc2VNYXRyaXg6IF9kZW5zZVRyYWNlLFxuICAgIGFueTogX29iamVjdC5jbG9uZVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VUcmFjZShtKSB7XG4gICAgLy8gbWF0cml4IHNpemUgJiBkYXRhXG4gICAgdmFyIHNpemUgPSBtLl9zaXplO1xuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIC8vIHZlY3RvclxuICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgIC8vIHJldHVybiBkYXRhWzBdXG4gICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKShkYXRhWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsXG4gICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdO1xuICAgICAgICAgIHZhciBjb2xzID0gc2l6ZVsxXTtcblxuICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAvLyBjYWx1bGF0ZSBzdW1cbiAgICAgICAgICAgIHZhciBzdW0gPSAwOyAvLyBsb29wIGRpYWdvbmFsXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgIHN1bSA9IGFkZChzdW0sIGRhdGFbaV1baV0pO1xuICAgICAgICAgICAgfSAvLyByZXR1cm4gdHJhY2VcblxuXG4gICAgICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIG11bHRpIGRpbWVuc2lvbmFsXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSB0d28gZGltZW5zaW9uYWwgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlVHJhY2UobSkge1xuICAgIC8vIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7XG4gICAgdmFyIHNpemUgPSBtLl9zaXplOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyBtYXRyaXggbXVzdCBiZSBzcXVhcmVcblxuICAgIGlmIChyb3dzID09PSBjb2x1bW5zKSB7XG4gICAgICAvLyBjYWx1bGF0ZSBzdW1cbiAgICAgIHZhciBzdW0gPSAwOyAvLyBjaGVjayB3ZSBoYXZlIGRhdGEgKGF2b2lkIGxvb3BpbmcgY29sdW1ucylcblxuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGxvb3AgY29sdW1uc1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICAgICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuXG4gICAgICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgICAgICB2YXIgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3dcblxuICAgICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgICAgLy8gYWNjdW11bGF0ZSB2YWx1ZVxuICAgICAgICAgICAgICBzdW0gPSBhZGQoc3VtLCB2YWx1ZXNba10pOyAvLyBleGl0IGxvb3BcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGkgPiBqKSB7XG4gICAgICAgICAgICAgIC8vIGV4aXQgbG9vcCwgbm8gdmFsdWUgb24gdGhlIGRpYWdvbmFsIGZvciBjb2x1bW4galxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcmV0dXJuIHRyYWNlXG5cblxuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFjZSA9IGNyZWF0ZVRyYWNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFuc3Bvc2UgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAndHJhbnNwb3NlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVRyYW5zcG9zZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogVHJhbnNwb3NlIGEgbWF0cml4LiBBbGwgdmFsdWVzIG9mIHRoZSBtYXRyaXggYXJlIHJlZmxlY3RlZCBvdmVyIGl0c1xuICAgKiBtYWluIGRpYWdvbmFsLiBPbmx5IGFwcGxpY2FibGUgdG8gdHdvIGRpbWVuc2lvbmFsIG1hdHJpY2VzIGNvbnRhaW5pbmdcbiAgICogYSB2ZWN0b3IgKGkuZS4gaGF2aW5nIHNpemUgYFsxLG5dYCBvciBgW24sMV1gKS4gT25lIGRpbWVuc2lvbmFsXG4gICAqIHZlY3RvcnMgYW5kIHNjYWxhcnMgcmV0dXJuIHRoZSBpbnB1dCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudHJhbnNwb3NlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgIG1hdGgudHJhbnNwb3NlKEEpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbWzEsIDRdLCBbMiwgNV0sIFszLCA2XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBkaWFnLCBpbnYsIHN1YnNldCwgc3F1ZWV6ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgdHJhbnNwb3NlZFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICBUaGUgdHJhbnNwb3NlZCBtYXRyaXhcbiAgICovXG4gIHZhciB0cmFuc3Bvc2UgPSB0eXBlZCgndHJhbnNwb3NlJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gdHJhbnNwb3NlKG1hdHJpeCh4KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgLy8gbWF0cml4IHNpemVcbiAgICAgIHZhciBzaXplID0geC5zaXplKCk7IC8vIHJlc3VsdFxuXG4gICAgICB2YXIgYzsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cbiAgICAgIHN3aXRjaCAoc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIHZlY3RvclxuICAgICAgICAgIGMgPSB4LmNsb25lKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHJvd3MgYW5kIGNvbHVtbnNcbiAgICAgICAgICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICAgICAgICAgIHZhciBjb2x1bW5zID0gc2l6ZVsxXTsgLy8gY2hlY2sgY29sdW1uc1xuXG4gICAgICAgICAgICBpZiAoY29sdW1ucyA9PT0gMCkge1xuICAgICAgICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Nhbm5vdCB0cmFuc3Bvc2UgYSAyRCBtYXRyaXggd2l0aCBubyBjb2x1bW5zIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9IC8vIHByb2Nlc3Mgc3RvcmFnZSBmb3JtYXRcblxuXG4gICAgICAgICAgICBzd2l0Y2ggKHguc3RvcmFnZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnNlJzpcbiAgICAgICAgICAgICAgICBjID0gX2RlbnNlVHJhbnNwb3NlKHgsIHJvd3MsIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3NwYXJzZSc6XG4gICAgICAgICAgICAgICAgYyA9IF9zcGFyc2VUcmFuc3Bvc2UoeCwgcm93cywgY29sdW1ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWxcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgYSB2ZWN0b3Igb3IgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLl9zaXplKSArICcpJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0sXG4gICAgLy8gc2NhbGFyc1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VUcmFuc3Bvc2UobSwgcm93cywgY29sdW1ucykge1xuICAgIC8vIG1hdHJpeCBhcnJheVxuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gdHJhbnNwb3NlZCBtYXRyaXggZGF0YVxuXG4gICAgdmFyIHRyYW5zcG9zZWQgPSBbXTtcbiAgICB2YXIgdHJhbnNwb3NlZFJvdzsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gaW5pdGlhbGl6ZSByb3dcbiAgICAgIHRyYW5zcG9zZWRSb3cgPSB0cmFuc3Bvc2VkW2pdID0gW107IC8vIGxvb3Agcm93c1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBzZXQgZGF0YVxuICAgICAgICB0cmFuc3Bvc2VkUm93W2ldID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGFbaV1bal0pO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB0cmFuc3Bvc2VkLFxuICAgICAgc2l6ZTogW2NvbHVtbnMsIHJvd3NdLFxuICAgICAgZGF0YXR5cGU6IG0uX2RhdGF0eXBlXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlVHJhbnNwb3NlKG0sIHJvd3MsIGNvbHVtbnMpIHtcbiAgICAvLyBtYXRyaXggYXJyYXlzXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyByZXN1bHQgbWF0cmljZXNcblxuICAgIHZhciBjdmFsdWVzID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHJvdyBjb3VudHNcblxuICAgIHZhciB3ID0gW107XG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHJvd3M7IHgrKykge1xuICAgICAgd1t4XSA9IDA7XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciBwLCBsLCBqOyAvLyBsb29wIHZhbHVlcyBpbiBtYXRyaXhcblxuICAgIGZvciAocCA9IDAsIGwgPSBpbmRleC5sZW5ndGg7IHAgPCBsOyBwKyspIHtcbiAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gcm93XG4gICAgICB3W2luZGV4W3BdXSsrO1xuICAgIH0gLy8gY3VtdWxhdGl2ZSBzdW1cblxuXG4gICAgdmFyIHN1bSA9IDA7IC8vIGluaXRpYWxpemUgY3B0ciB3aXRoIHRoZSBjdW1tdWxhdGl2ZSBzdW0gb2Ygcm93IGNvdW50c1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyLnB1c2goc3VtKTsgLy8gdXBkYXRlIHN1bVxuXG4gICAgICBzdW0gKz0gd1tpXTsgLy8gdXBkYXRlIHdcblxuICAgICAgd1tpXSA9IGNwdHJbaV07XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyLnB1c2goc3VtKTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB2YWx1ZXMgJiBpbmRleCBpbiBjb2x1bW5cbiAgICAgIGZvciAodmFyIGswID0gcHRyW2pdLCBrMSA9IHB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gQyB2YWx1ZXMgJiBpbmRleFxuICAgICAgICB2YXIgcSA9IHdbaW5kZXhba11dKys7IC8vIENbaiwgaV0gPSBBW2ksIGpdXG5cbiAgICAgICAgY2luZGV4W3FdID0gajsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBtYXRyaXgpXG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIGN2YWx1ZXNbcV0gPSAoMCwgX29iamVjdC5jbG9uZSkodmFsdWVzW2tdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtjb2x1bW5zLCByb3dzXSxcbiAgICAgIGRhdGF0eXBlOiBtLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zcG9zZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFuc3Bvc2UgPSBjcmVhdGVUcmFuc3Bvc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVplcm9zID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICd6ZXJvcyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVplcm9zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yXG4gICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC56ZXJvcyhtKVxuICAgKiAgICBtYXRoLnplcm9zKG0sIGZvcm1hdClcbiAgICogICAgbWF0aC56ZXJvcyhtLCBuKVxuICAgKiAgICBtYXRoLnplcm9zKG0sIG4sIGZvcm1hdClcbiAgICogICAgbWF0aC56ZXJvcyhbbSwgbl0pXG4gICAqICAgIG1hdGguemVyb3MoW20sIG5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnplcm9zKDMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF1cbiAgICogICAgbWF0aC56ZXJvcygzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1swLCAwXSwgWzAsIDBdLCBbMCwgMF1dXG4gICAqICAgIG1hdGguemVyb3MoMywgJ2RlbnNlJykgICAgICAgICAvLyByZXR1cm5zIFswLCAwLCAwXVxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXVxuICAgKiAgICBtYXRoLnplcm9zKG1hdGguc2l6ZShBKSkgICAgICAgLy8gcmV0dXJucyBbWzAsIDAsIDBdLCBbMCwgMCwgMF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBvbmVzLCBpZGVudGl0eSwgc2l6ZSwgcmFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi5udW1iZXIgfCBBcnJheX0gc2l6ZSAgICBUaGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XSAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICAgIEEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScgPyBfemVyb3MoW10pIDogX3plcm9zKFtdLCAnZGVmYXVsdCcpO1xuICAgIH0sXG4gICAgLy8gbWF0aC56ZXJvcyhtLCBuLCBwLCAuLi4sIGZvcm1hdClcbiAgICAvLyBUT0RPOiBtb3JlIGFjY3VyYXRlIHNpZ25hdHVyZSAnLi4ubnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnIGFzIHNvb24gYXMgdHlwZWQtZnVuY3Rpb24gc3VwcG9ydHMgdGhpc1xuICAgICcuLi5udW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTdHJpbmcoc2l6ZSkge1xuICAgICAgdmFyIGxhc3QgPSBzaXplW3NpemUubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGFzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHNpemUucG9wKCk7XG4gICAgICAgIHJldHVybiBfemVyb3Moc2l6ZSwgZm9ybWF0KTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5Jykge1xuICAgICAgICByZXR1cm4gX3plcm9zKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF96ZXJvcyhzaXplLCAnZGVmYXVsdCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQXJyYXk6IF96ZXJvcyxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeChzaXplKSB7XG4gICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5zdG9yYWdlKCk7XG4gICAgICByZXR1cm4gX3plcm9zKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfemVyb3Moc2l6ZS52YWx1ZU9mKCksIGZvcm1hdCk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcnJheSBvciBNYXRyaXggd2l0aCB6ZXJvc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0PSdkZWZhdWx0J11cbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF96ZXJvcyhzaXplLCBmb3JtYXQpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMCkgOiAwO1xuXG4gICAgX3ZhbGlkYXRlKHNpemUpO1xuXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gcmV0dXJuIGEgbWF0cml4XG4gICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkucmVzaXplKShhcnIsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzXG5cblxuICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IGZhbHNlO1xuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7XG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZS50b051bWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYXNCaWdOdW1iZXJzO1xuICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiB6ZXJvcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pOyAvLyBUT0RPOiB6ZXJvcyBjb250YWlucyBhbG1vc3QgdGhlIHNhbWUgY29kZSBhcyBvbmVzLiBSZXVzZSB0aGlzP1xuXG5leHBvcnRzLmNyZWF0ZVplcm9zID0gY3JlYXRlWmVyb3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbWJpbmF0aW9ucyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tYmluYXRpb25zID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlci9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBuYW1lID0gJ2NvbWJpbmF0aW9ucyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbWJpbmF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYGtgIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYFxuICAgKiBwb3NzaWJpbGl0aWVzLlxuICAgKlxuICAgKiBDb21iaW5hdGlvbnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmNvbWJpbmF0aW9ucyhuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21iaW5hdGlvbnMoNywgNSkgLy8gcmV0dXJucyAyMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zV2l0aFJlcCwgcGVybXV0YXRpb25zLCBmYWN0b3JpYWxcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgIE51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IF9jb21iaW5hdGlvbnMuY29tYmluYXRpb25zTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcihuLCBrKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gbi5jb25zdHJ1Y3RvcjtcbiAgICAgIHZhciByZXN1bHQsIGk7XG4gICAgICB2YXIgbk1pbnVzayA9IG4ubWludXMoayk7XG4gICAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsuZ3QobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBuIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBvbmU7XG5cbiAgICAgIGlmIChrLmx0KG5NaW51c2spKSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUobk1pbnVzayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhrLnBsdXMoaSkpLmRpdmlkZWRCeShpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShrKTsgaSA9IGkucGx1cyhvbmUpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRpbWVzKG5NaW51c2sucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgY29sbGVjdGlvbiBpbiBjb21iaW5hdGlvbnNcblxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnMgPSBjcmVhdGVDb21iaW5hdGlvbnM7XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKG4pIHtcbiAgcmV0dXJuIG4uaXNJbnRlZ2VyKCkgJiYgbi5ndGUoMCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfcHJvZHVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9wcm9kdWN0XCIpO1xuXG52YXIgbmFtZSA9ICdjb21iaW5hdGlvbnNXaXRoUmVwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYGtgIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYFxuICAgKiBwb3NzaWJpbGl0aWVzLCBhbGxvd2luZyBpbmRpdmlkdWFsIG91dGNvbWVzIHRvIGJlIHJlcGVhdGVkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBDb21iaW5hdGlvbnNXaXRoUmVwIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbiArIGsgLTEuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tYmluYXRpb25zV2l0aFJlcChuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21iaW5hdGlvbnNXaXRoUmVwKDcsIDUpIC8vIHJldHVybnMgNDYyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIHBlcm11dGF0aW9ucywgZmFjdG9yaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBuICAgIFRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzZXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGsgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBOdW1iZXIgb2YgcG9zc2libGUgY29tYmluYXRpb25zIHdpdGggcmVwbGFjZW1lbnQuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihuLCBrKSB7XG4gICAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobikgfHwgbiA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9uc1dpdGhSZXAnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG4gPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiArIGsgLSAxJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrIDwgbiAtIDEpIHtcbiAgICAgICAgdmFyIF9wcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkobiwgbiArIGsgLSAxKTtcblxuICAgICAgICByZXR1cm4gX3Byb2RyYW5nZSAvICgwLCBfcHJvZHVjdC5wcm9kdWN0KSgxLCBrKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb2RyYW5nZSA9ICgwLCBfcHJvZHVjdC5wcm9kdWN0KShrICsgMSwgbiArIGsgLSAxKTtcbiAgICAgIHJldHVybiBwcm9kcmFuZ2UgLyAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoMSwgbiAtIDEpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIHZhciBCaWdOdW1iZXIgPSBuLmNvbnN0cnVjdG9yO1xuICAgICAgdmFyIHJlc3VsdCwgaTtcbiAgICAgIHZhciBvbmUgPSBuZXcgQmlnTnVtYmVyKDEpO1xuICAgICAgdmFyIG5NaW51c09uZSA9IG4ubWludXMob25lKTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuLmx0KG9uZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuICsgayAtIDEgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zV2l0aFJlcCcpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBvbmU7XG5cbiAgICAgIGlmIChrLmx0KG5NaW51c09uZSkpIHtcbiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShuTWludXNPbmUpOyBpID0gaS5wbHVzKG9uZSkpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudGltZXMoay5wbHVzKGkpKS5kaXZpZGVkQnkoaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUoayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhuTWludXNPbmUucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwID0gY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDtcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikge1xuICByZXR1cm4gbi5pc0ludGVnZXIoKSAmJiBuLmd0ZSgwKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yaWFsID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZhY3RvcmlhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdnYW1tYSddO1xudmFyIGNyZWF0ZUZhY3RvcmlhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBnYW1tYSA9IF9yZWYuZ2FtbWE7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGZhY3RvcmlhbCBvZiBhIHZhbHVlXG4gICAqXG4gICAqIEZhY3RvcmlhbCBvbmx5IHN1cHBvcnRzIGFuIGludGVnZXIgdmFsdWUgYXMgYXJndW1lbnQuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mYWN0b3JpYWwobilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKDUpICAgIC8vIHJldHVybnMgMTIwXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKDMpICAgIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zLCBjb21iaW5hdGlvbnNXaXRoUmVwLCBnYW1tYSwgcGVybXV0YXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBbiBpbnRlZ2VyIG51bWJlclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGZhY3RvcmlhbCBvZiBgbmBcbiAgICovXG4gIHZhciBmYWN0b3JpYWwgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobikge1xuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdhbW1hKG4gKyAxKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLmlzTmVnYXRpdmUoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnYW1tYShuLnBsdXMoMSkpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgobikge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKShuLCBmYWN0b3JpYWwpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmYWN0b3JpYWw7XG59KTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yaWFsID0gY3JlYXRlRmFjdG9yaWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVHYW1tYSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2dhbW1hJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtdWx0aXBseVNjYWxhcicsICdwb3cnLCAnQmlnTnVtYmVyJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVHYW1tYSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGdhbW1hIGZ1bmN0aW9uIG9mIGEgdmFsdWUgdXNpbmcgTGFuY3pvcyBhcHByb3hpbWF0aW9uIGZvclxuICAgKiBzbWFsbCB2YWx1ZXMsIGFuZCBhbiBleHRlbmRlZCBTdGlybGluZyBhcHByb3hpbWF0aW9uIGZvciBsYXJnZSB2YWx1ZXMuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5nYW1tYShuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5nYW1tYSg1KSAgICAgICAvLyByZXR1cm5zIDI0XG4gICAqICAgIG1hdGguZ2FtbWEoLTAuNSkgICAgLy8gcmV0dXJucyAtMy41NDQ5MDc3MDE4MTEwMzM1XG4gICAqICAgIG1hdGguZ2FtbWEobWF0aC5pKSAgLy8gcmV0dXJucyAtMC4xNTQ5NDk4MjgzMDE4MDk3MyAtIDAuNDk4MDE1NjY4MTE4MzU1OTZpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbCwgcGVybXV0YXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBIHJlYWwgb3IgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBnYW1tYSBvZiBgbmBcbiAgICovXG4gIHZhciBnYW1tYSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZ2FtbWFOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleChuKSB7XG4gICAgICBpZiAobi5pbSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2FtbWEobi5yZSk7XG4gICAgICB9XG5cbiAgICAgIG4gPSBuZXcgX0NvbXBsZXgobi5yZSAtIDEsIG4uaW0pO1xuICAgICAgdmFyIHggPSBuZXcgX0NvbXBsZXgoX251bWJlci5nYW1tYVBbMF0sIDApO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IF9udW1iZXIuZ2FtbWFQLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciByZWFsID0gbi5yZSArIGk7IC8vIHggKz0gcFtpXS8obitpKVxuXG4gICAgICAgIHZhciBkZW4gPSByZWFsICogcmVhbCArIG4uaW0gKiBuLmltO1xuXG4gICAgICAgIGlmIChkZW4gIT09IDApIHtcbiAgICAgICAgICB4LnJlICs9IF9udW1iZXIuZ2FtbWFQW2ldICogcmVhbCAvIGRlbjtcbiAgICAgICAgICB4LmltICs9IC0oX251bWJlci5nYW1tYVBbaV0gKiBuLmltKSAvIGRlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4LnJlID0gX251bWJlci5nYW1tYVBbaV0gPCAwID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHQgPSBuZXcgX0NvbXBsZXgobi5yZSArIF9udW1iZXIuZ2FtbWFHICsgMC41LCBuLmltKTtcbiAgICAgIHZhciB0d29QaVNxcnQgPSBNYXRoLnNxcnQoMiAqIE1hdGguUEkpO1xuICAgICAgbi5yZSArPSAwLjU7XG4gICAgICB2YXIgcmVzdWx0ID0gcG93KHQsIG4pO1xuXG4gICAgICBpZiAocmVzdWx0LmltID09PSAwKSB7XG4gICAgICAgIC8vIHNxcnQoMipQSSkqcmVzdWx0XG4gICAgICAgIHJlc3VsdC5yZSAqPSB0d29QaVNxcnQ7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZSA9PT0gMCkge1xuICAgICAgICByZXN1bHQuaW0gKj0gdHdvUGlTcXJ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnJlICo9IHR3b1BpU3FydDtcbiAgICAgICAgcmVzdWx0LmltICo9IHR3b1BpU3FydDtcbiAgICAgIH1cblxuICAgICAgdmFyIHIgPSBNYXRoLmV4cCgtdC5yZSk7IC8vIGV4cCgtdClcblxuICAgICAgdC5yZSA9IHIgKiBNYXRoLmNvcygtdC5pbSk7XG4gICAgICB0LmltID0gciAqIE1hdGguc2luKC10LmltKTtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihyZXN1bHQsIHQpLCB4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLmlzSW50ZWdlcigpKSB7XG4gICAgICAgIHJldHVybiBuLmlzTmVnYXRpdmUoKSB8fCBuLmlzWmVybygpID8gbmV3IF9CaWdOdW1iZXIoSW5maW5pdHkpIDogYmlnRmFjdG9yaWFsKG4ubWludXMoMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW4uaXNGaW5pdGUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIobi5pc05lZ2F0aXZlKCkgPyBOYU4gOiBJbmZpbml0eSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBCaWdOdW1iZXIgZXhwZWN0ZWQnKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkobiwgZ2FtbWEpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgZmFjdG9yaWFsIGZvciBhIEJpZ051bWJlclxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBmYWN0b3JpYWwgb2YgblxuICAgKi9cblxuICBmdW5jdGlvbiBiaWdGYWN0b3JpYWwobikge1xuICAgIGlmIChuIDwgOCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKFsxLCAxLCAyLCA2LCAyNCwgMTIwLCA3MjAsIDUwNDBdW25dKTtcbiAgICB9XG5cbiAgICB2YXIgcHJlY2lzaW9uID0gY29uZmlnLnByZWNpc2lvbiArIChNYXRoLmxvZyhuLnRvTnVtYmVyKCkpIHwgMCk7XG5cbiAgICB2YXIgQmlnID0gX0JpZ051bWJlci5jbG9uZSh7XG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvblxuICAgIH0pO1xuXG4gICAgaWYgKG4gJSAyID09PSAxKSB7XG4gICAgICByZXR1cm4gbi50aW1lcyhiaWdGYWN0b3JpYWwobmV3IF9CaWdOdW1iZXIobiAtIDEpKSk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSBuO1xuICAgIHZhciBwcm9kID0gbmV3IEJpZyhuKTtcbiAgICB2YXIgc3VtID0gbi50b051bWJlcigpO1xuXG4gICAgd2hpbGUgKHAgPiAyKSB7XG4gICAgICBwIC09IDI7XG4gICAgICBzdW0gKz0gcDtcbiAgICAgIHByb2QgPSBwcm9kLnRpbWVzKHN1bSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHByb2QudG9QcmVjaXNpb24oX0JpZ051bWJlci5wcmVjaXNpb24pKTtcbiAgfVxuXG4gIHJldHVybiBnYW1tYTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVHYW1tYSA9IGNyZWF0ZUdhbW1hOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVLbGRpdmVyZ2VuY2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdrbGRpdmVyZ2VuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2RpdmlkZScsICdzdW0nLCAnbXVsdGlwbHknLCAnZG90RGl2aWRlJywgJ2xvZycsICdpc051bWVyaWMnXTtcbnZhciBjcmVhdGVLbGRpdmVyZ2VuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHN1bSA9IF9yZWYuc3VtLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZG90RGl2aWRlID0gX3JlZi5kb3REaXZpZGUsXG4gICAgICBsb2cgPSBfcmVmLmxvZyxcbiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljO1xuXG4gIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgS3VsbGJhY2stTGVpYmxlciAoS0wpIGRpdmVyZ2VuY2UgIGJldHdlZW4gdHdvIGRpc3RyaWJ1dGlvbnNcbiAgICAgKlxuICAgICAqIFN5bnRheDpcbiAgICAgKlxuICAgICAqICAgICBtYXRoLmtsZGl2ZXJnZW5jZSh4LCB5KVxuICAgICAqXG4gICAgICogRXhhbXBsZXM6XG4gICAgICpcbiAgICAgKiAgICAgbWF0aC5rbGRpdmVyZ2VuY2UoWzAuNywwLjUsMC40XSwgWzAuMiwwLjksMC41XSkgICAvL3JldHVybnMgMC4yNDM3NjY5ODc3MzEyMTE1M1xuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcSAgICBGaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcCAgICBTZWNvbmQgdmVjdG9yXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgICAgUmV0dXJucyBkaXN0YW5jZSBiZXR3ZWVuIHEgYW5kIHBcbiAgICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheShxLCBwKSB7XG4gICAgICByZXR1cm4gX2tsZGl2KG1hdHJpeChxKSwgbWF0cml4KHApKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihxLCBtYXRyaXgocCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChxLCBwKSB7XG4gICAgICByZXR1cm4gX2tsZGl2KG1hdHJpeChxKSwgcCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihxLCBwKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9rbGRpdihxLCBwKSB7XG4gICAgdmFyIHBsZW5ndGggPSBwLnNpemUoKS5sZW5ndGg7XG4gICAgdmFyIHFsZW5ndGggPSBxLnNpemUoKS5sZW5ndGg7XG5cbiAgICBpZiAocGxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3Qgb2JqZWN0IG11c3QgYmUgb25lIGRpbWVuc2lvbmFsJyk7XG4gICAgfVxuXG4gICAgaWYgKHFsZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY29uZCBvYmplY3QgbXVzdCBiZSBvbmUgZGltZW5zaW9uYWwnKTtcbiAgICB9XG5cbiAgICBpZiAocGxlbmd0aCAhPT0gcWxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMZW5ndGggb2YgdHdvIHZlY3RvcnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH0gLy8gQmVmb3JlIGNhbGN1bGF0aW9uLCBhcHBseSBub3JtYWxpemF0aW9uXG5cblxuICAgIHZhciBzdW1xID0gc3VtKHEpO1xuXG4gICAgaWYgKHN1bXEgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VtIG9mIGVsZW1lbnRzIGluIGZpcnN0IG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvJyk7XG4gICAgfVxuXG4gICAgdmFyIHN1bXAgPSBzdW0ocCk7XG5cbiAgICBpZiAoc3VtcCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdW0gb2YgZWxlbWVudHMgaW4gc2Vjb25kIG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvJyk7XG4gICAgfVxuXG4gICAgdmFyIHFub3JtID0gZGl2aWRlKHEsIHN1bShxKSk7XG4gICAgdmFyIHBub3JtID0gZGl2aWRlKHAsIHN1bShwKSk7XG4gICAgdmFyIHJlc3VsdCA9IHN1bShtdWx0aXBseShxbm9ybSwgbG9nKGRvdERpdmlkZShxbm9ybSwgcG5vcm0pKSkpO1xuXG4gICAgaWYgKGlzTnVtZXJpYyhyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTnVtYmVyLk5hTjtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVLbGRpdmVyZ2VuY2UgPSBjcmVhdGVLbGRpdmVyZ2VuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU11bHRpbm9taWFsID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ211bHRpbm9taWFsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnLCAnbXVsdGlwbHknLCAnZmFjdG9yaWFsJywgJ2lzSW50ZWdlcicsICdpc1Bvc2l0aXZlJ107XG52YXIgY3JlYXRlTXVsdGlub21pYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlO1xuXG4gIC8qKlxuICAgKiBNdWx0aW5vbWlhbCBDb2VmZmljaWVudHMgY29tcHV0ZSB0aGUgbnVtYmVyIG9mIHdheXMgb2YgcGlja2luZyBhMSwgYTIsIC4uLiwgYWkgdW5vcmRlcmVkIG91dGNvbWVzIGZyb20gYG5gIHBvc3NpYmlsaXRpZXMuXG4gICAqXG4gICAqIG11bHRpbm9taWFsIHRha2VzIG9uZSBhcnJheSBvZiBpbnRlZ2VycyBhcyBhbiBhcmd1bWVudC5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogZXZlcnkgYWkgPD0gMFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm11bHRpbm9taWFsKGEpIC8vIGEgaXMgYW4gYXJyYXkgdHlwZVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aW5vbWlhbChbMSwyLDFdKSAvLyByZXR1cm5zIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgQmlnTnVtYmVyW119IGEgICAgSW50ZWdlciBudW1iZXJzIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICAgICAgTXVsdGlub21pYWwgY29lZmZpY2llbnQuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHtcbiAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgdmFyIGRlbm9tID0gMTtcbiAgICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYSwgZnVuY3Rpb24gKGFpKSB7XG4gICAgICAgIGlmICghaXNJbnRlZ2VyKGFpKSB8fCAhaXNQb3NpdGl2ZShhaSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG11bHRpbm9taWFsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdW0gPSBhZGQoc3VtLCBhaSk7XG4gICAgICAgIGRlbm9tID0gbXVsdGlwbHkoZGVub20sIGZhY3RvcmlhbChhaSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGl2aWRlKGZhY3RvcmlhbChzdW0pLCBkZW5vbSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aW5vbWlhbCA9IGNyZWF0ZU11bHRpbm9taWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQZXJtdXRhdGlvbnMgPSB2b2lkIDA7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9wcm9kdWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3Byb2R1Y3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdwZXJtdXRhdGlvbnMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZmFjdG9yaWFsJ107XG52YXIgY3JlYXRlUGVybXV0YXRpb25zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Ygd2F5cyBvZiBvYnRhaW5pbmcgYW4gb3JkZXJlZCBzdWJzZXQgb2YgYGtgIGVsZW1lbnRzXG4gICAqIGZyb20gYSBzZXQgb2YgYG5gIGVsZW1lbnRzLlxuICAgKlxuICAgKiBQZXJtdXRhdGlvbnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnBlcm11dGF0aW9ucyhuKVxuICAgKiAgICAgbWF0aC5wZXJtdXRhdGlvbnMobiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucGVybXV0YXRpb25zKDUpICAgICAvLyAxMjBcbiAgICogICAgbWF0aC5wZXJtdXRhdGlvbnMoNSwgMykgIC8vIDYwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGNvbWJpbmF0aW9uc1dpdGhSZXAsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gbiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0b3RhbFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2tdIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgVGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZhY3RvcmlhbCxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pIHx8IG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcGVybXV0YXRpb25zJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHBlcm11dGF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoayA+IG4pIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbicpO1xuICAgICAgfSAvLyBQZXJtdXRlIG4gb2JqZWN0cywgayBhdCBhIHRpbWVcblxuXG4gICAgICByZXR1cm4gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKG4gLSBrICsgMSwgbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgdmFyIHJlc3VsdCwgaTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBwZXJtdXRhdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsuZ3QobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb25lID0gbi5tdWwoMCkuYWRkKDEpO1xuICAgICAgcmVzdWx0ID0gb25lO1xuXG4gICAgICBmb3IgKGkgPSBuLm1pbnVzKGspLnBsdXMoMSk7IGkubHRlKG4pOyBpID0gaS5wbHVzKDEpKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciBjb2xsZWN0aW9uIGluIHBlcm11dGF0aW9uc1xuXG4gIH0pO1xufSk7XG4vKipcbiAqIFRlc3Qgd2hldGhlciBCaWdOdW1iZXIgbiBpcyBhIHBvc2l0aXZlIGludGVnZXJcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSBuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gaXNQb3NpdGl2ZUludGVnZXJcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVBlcm11dGF0aW9ucyA9IGNyZWF0ZVBlcm11dGF0aW9ucztcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikge1xuICByZXR1cm4gbi5pc0ludGVnZXIoKSAmJiBuLmd0ZSgwKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGlja1JhbmRvbSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfc2VlZGVkUk5HID0gcmVxdWlyZShcIi4vdXRpbC9zZWVkZWRSTkdcIik7XG5cbnZhciBuYW1lID0gJ3BpY2tSYW5kb20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9vbiddO1xudmFyIGNyZWF0ZVBpY2tSYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYub247XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgdmFyIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY29uZmlnLnJhbmRvbVNlZWQpO1xuXG4gIGlmIChvbikge1xuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7XG4gICAgICAgIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY3Vyci5yYW5kb21TZWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmFuZG9tIHBpY2sgb25lIG9yIG1vcmUgdmFsdWVzIGZyb20gYSBvbmUgZGltZW5zaW9uYWwgYXJyYXkuXG4gICAqIEFycmF5IGVsZW1lbnRzIGFyZSBwaWNrZWQgdXNpbmcgYSByYW5kb20gZnVuY3Rpb24gd2l0aCB1bmlmb3JtIG9yIHdlaWdodGVkIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5KVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5LCBudW1iZXIpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIHdlaWdodHMpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIG51bWJlciwgd2VpZ2h0cylcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShhcnJheSwgd2VpZ2h0cywgbnVtYmVyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgb25lIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5XG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIFsxLCAzLCAyLCAxXSkgICAgLy8gcmV0dXJucyBvbmUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgd2l0aCB3ZWlnaHRlZCBkaXN0cmlidXRpb25cbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdLCAyLCBbMSwgMywgMiwgMV0pIC8vIHJldHVybnMgYW4gYXJyYXkgb2YgdHdvIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5IHdpdGggd2VpZ2h0ZWQgZGlzdHJpYnV0aW9uXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgWzEsIDMsIDIsIDFdLCAyKSAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSB3aXRoIHdlaWdodGVkIGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHJhbmRvbSwgcmFuZG9tSW50XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5ICAgICBBIG9uZSBkaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0ludH0gbnVtYmVyICAgICAgICAgICAgICAgQW4gaW50IG9yIGZsb2F0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHdlaWdodHMgICBBbiBhcnJheSBvZiBpbnRzIG9yIGZsb2F0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheX0gICAgICAgICAgUmV0dXJucyBhIHNpbmdsZSByYW5kb20gdmFsdWUgZnJvbSBhcnJheSB3aGVuIG51bWJlciBpcyAxIG9yIHVuZGVmaW5lZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgY29uZmlndXJlZCBudW1iZXIgb2YgZWxlbWVudHMgd2hlbiBudW1iZXIgaXMgPiAxLlxuICAgKi9cblxuXG4gIHJldHVybiB0eXBlZCh7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgocG9zc2libGVzKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIocG9zc2libGVzLCBudW1iZXIpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5KHBvc3NpYmxlcywgd2VpZ2h0cykge1xuICAgICAgcmV0dXJuIF9waWNrUmFuZG9tKHBvc3NpYmxlcywgdW5kZWZpbmVkLCB3ZWlnaHRzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXhOdW1iZXIocG9zc2libGVzLCB3ZWlnaHRzLCBudW1iZXIpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgd2VpZ2h0cyk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckFycmF5TWF0cml4KHBvc3NpYmxlcywgbnVtYmVyLCB3ZWlnaHRzKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpIHtcbiAgICB2YXIgc2luZ2xlID0gdHlwZW9mIG51bWJlciA9PT0gJ3VuZGVmaW5lZCc7XG5cbiAgICBpZiAoc2luZ2xlKSB7XG4gICAgICBudW1iZXIgPSAxO1xuICAgIH1cblxuICAgIHBvc3NpYmxlcyA9IHBvc3NpYmxlcy52YWx1ZU9mKCk7IC8vIGdldCBBcnJheVxuXG4gICAgaWYgKHdlaWdodHMpIHtcbiAgICAgIHdlaWdodHMgPSB3ZWlnaHRzLnZhbHVlT2YoKTsgLy8gZ2V0IEFycmF5XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfYXJyYXkuYXJyYXlTaXplKShwb3NzaWJsZXMpLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgdmVjdG9ycyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxXZWlnaHRzID0gMDtcblxuICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh3ZWlnaHRzLmxlbmd0aCAhPT0gcG9zc2libGVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBwb3NzaWJsZXMnKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHdlaWdodHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh3ZWlnaHRzW2ldKSB8fCB3ZWlnaHRzW2ldIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2VpZ2h0cyBtdXN0IGJlIGFuIGFycmF5IG9mIHBvc2l0aXZlIG51bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvdGFsV2VpZ2h0cyArPSB3ZWlnaHRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsZW5ndGggPSBwb3NzaWJsZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyID49IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bWJlciA+IDEgPyBwb3NzaWJsZXMgOiBwb3NzaWJsZXNbMF07XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBwaWNrO1xuXG4gICAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCBudW1iZXIpIHtcbiAgICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcGljayA9IHBvc3NpYmxlc1tNYXRoLmZsb29yKHJuZygpICogbGVuZ3RoKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmFuZEtleSA9IHJuZygpICogdG90YWxXZWlnaHRzO1xuXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2xlbiA9IHBvc3NpYmxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIHJhbmRLZXkgLT0gd2VpZ2h0c1tfaV07XG5cbiAgICAgICAgICBpZiAocmFuZEtleSA8IDApIHtcbiAgICAgICAgICAgIHBpY2sgPSBwb3NzaWJsZXNbX2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihwaWNrKSA9PT0gLTEpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocGljayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmdsZSA/IHJlc3VsdFswXSA6IHJlc3VsdDsgLy8gVE9ETzogcmV0dXJuIG1hdHJpeCB3aGVuIGlucHV0IHdhcyBhIG1hdHJpeFxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaWNlc1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUGlja1JhbmRvbSA9IGNyZWF0ZVBpY2tSYW5kb207IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbU51bWJlciA9IGV4cG9ydHMuY3JlYXRlUmFuZG9tID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9zZWVkZWRSTkcgPSByZXF1aXJlKFwiLi91dGlsL3NlZWRlZFJOR1wiKTtcblxudmFyIF9yYW5kb21NYXRyaXgyID0gcmVxdWlyZShcIi4vdXRpbC9yYW5kb21NYXRyaXhcIik7XG5cbnZhciBuYW1lID0gJ3JhbmRvbSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ107XG52YXIgY3JlYXRlUmFuZG9tID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgb24gPSBfcmVmLm9uO1xuICAvLyBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIHJhbmRvbSBudW1iZXIgbGFyZ2VyIG9yIGVxdWFsIHRvIGBtaW5gIGFuZCBzbWFsbGVyIHRoYW4gYG1heGBcbiAgICogdXNpbmcgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5kb20oKSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbShtYXgpICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20obWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSkgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgMVxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSwgbWF4KSAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgbWF4XG4gICAqICAgICBtYXRoLnJhbmRvbShzaXplLCBtaW4sIG1heCkgIC8vIGdlbmVyYXRlIGEgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tKCkgICAgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbSgxMDApICAgIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwXG4gICAqICAgICBtYXRoLnJhbmRvbSgzMCwgNDApIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMzAgYW5kIDQwXG4gICAqICAgICBtYXRoLnJhbmRvbShbMiwgM10pIC8vIHJldHVybnMgYSAyeDMgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiAwIGFuZCAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmFuZG9tSW50LCBwaWNrUmFuZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgYW5kIGZpbGxlZCB3aXRoIHJhbmRvbSB2YWx1ZXMgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5dICBNaW5pbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBBIHJhbmRvbSBudW1iZXJcbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHNpemUpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIDEpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlcihzaXplLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJOdW1iZXIoc2l6ZSwgbWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIG1pbiwgbWF4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9yYW5kb21NYXRyaXgoc2l6ZSwgbWluLCBtYXgpIHtcbiAgICB2YXIgcmVzID0gKDAsIF9yYW5kb21NYXRyaXgyLnJhbmRvbU1hdHJpeCkoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JhbmRvbShtaW4sIG1heCkge1xuICAgIHJldHVybiBtaW4gKyBybmcoKSAqIChtYXggLSBtaW4pO1xuICB9XG59KTsgLy8gbnVtYmVyIG9ubHkgaW1wbGVtZW50YXRpb24gb2YgcmFuZG9tLCBubyBtYXRyaXggc3VwcG9ydFxuLy8gVE9ETzogdGhlcmUgaXMgcXVpdGUgc29tZSBkdXBsaWNhdGUgY29kZSBpbiBib3RoIGNyZWF0ZVJhbmRvbSBhbmQgY3JlYXRlUmFuZG9tTnVtYmVyLCBjYW4gd2UgaW1wcm92ZSB0aGF0P1xuXG5leHBvcnRzLmNyZWF0ZVJhbmRvbSA9IGNyZWF0ZVJhbmRvbTtcbnZhciBjcmVhdGVSYW5kb21OdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgIG9uID0gX3JlZjIub24sXG4gICAgICBtYXRyaXggPSBfcmVmMi5tYXRyaXg7XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IxXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9yYW5kb20obWluLCBtYXgpIHtcbiAgICByZXR1cm4gbWluICsgcm5nKCkgKiAobWF4IC0gbWluKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbU51bWJlciA9IGNyZWF0ZVJhbmRvbU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZG9tSW50ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9yYW5kb21NYXRyaXggPSByZXF1aXJlKFwiLi91dGlsL3JhbmRvbU1hdHJpeFwiKTtcblxudmFyIF9zZWVkZWRSTkcgPSByZXF1aXJlKFwiLi91dGlsL3NlZWRlZFJOR1wiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAncmFuZG9tSW50JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICc/b24nXTtcbnZhciBjcmVhdGVSYW5kb21JbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYub247XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgdmFyIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY29uZmlnLnJhbmRvbVNlZWQpO1xuXG4gIGlmIChvbikge1xuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7XG4gICAgICAgIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY3Vyci5yYW5kb21TZWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGxhcmdlciBvciBlcXVhbCB0byBgbWluYCBhbmQgc21hbGxlciB0aGFuIGBtYXhgXG4gICAqIHVzaW5nIGEgdW5pZm9ybSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tSW50KCkgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tSW50KG1heCkgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQobWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUpICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUsIG1heCkgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmRvbUludCgxMDApICAgIC8vIHJldHVybnMgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwMFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoMzAsIDQwKSAvLyByZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAzMCBhbmQgNDBcbiAgICogICAgIG1hdGgucmFuZG9tSW50KFsyLCAzXSkgLy8gcmV0dXJucyBhIDJ4MyBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmFuZG9tLCBwaWNrUmFuZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgYW5kIGZpbGxlZCB3aXRoIHJhbmRvbSB2YWx1ZXMgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5dICBNaW5pbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBBIHJhbmRvbSBpbnRlZ2VyIHZhbHVlXG4gICAqL1xuXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tSW50KDAsIDEpO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludCgwLCBtYXgpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludChtaW4sIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChzaXplKSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoc2l6ZSwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCBtYXgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyTnVtYmVyKHNpemUsIG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCBtaW4sIG1heCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfcmFuZG9tSW50TWF0cml4KHNpemUsIG1pbiwgbWF4KSB7XG4gICAgdmFyIHJlcyA9ICgwLCBfcmFuZG9tTWF0cml4LnJhbmRvbU1hdHJpeCkoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tSW50KG1pbiwgbWF4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JhbmRvbUludChtaW4sIG1heCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKG1pbiArIHJuZygpICogKG1heCAtIG1pbikpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZG9tSW50ID0gY3JlYXRlUmFuZG9tSW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21NYXRyaXggPSByYW5kb21NYXRyaXg7XG5cbi8qKlxuICogVGhpcyBpcyBhIHV0aWwgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSByYW5kb20gbWF0cml4IHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcmFuZG9tXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHJhbmRvbU1hdHJpeChzaXplLCByYW5kb20pIHtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgc2l6ZSA9IHNpemUuc2xpY2UoMCk7XG5cbiAgaWYgKHNpemUubGVuZ3RoID4gMSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzaXplLnNoaWZ0KCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgZGF0YS5wdXNoKHJhbmRvbU1hdHJpeChzaXplLCByYW5kb20pKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuZ3RoID0gc2l6ZS5zaGlmdCgpOyBfaSA8IF9sZW5ndGg7IF9pKyspIHtcbiAgICAgIGRhdGEucHVzaChyYW5kb20oKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJuZyA9IGNyZWF0ZVJuZztcblxudmFyIF9zZWVkUmFuZG9tID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwic2VlZC1yYW5kb21cIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuLy8gY3JlYXRlIGEgcmFuZG9tIHNlZWQgaGVyZSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AgZnJvbSBzZWVkLXJhbmRvbVxuLy8gaW5zaWRlIHRoZSBmYWN0b3J5LiBSZWFzb24gaXMgdGhhdCBtYXRoLnJhbmRvbSBpcyBkZWZpbmVkIGFzIGEgZ2V0dGVyL3NldHRlclxuLy8gYW5kIHNlZWQtcmFuZG9tIGdlbmVyYXRlcyBhIHNlZWQgZnJvbSB0aGUgbG9jYWwgZW50cm9weSBieSByZWFkaW5nIGV2ZXJ5XG4vLyBkZWZpbmVkIG9iamVjdCBpbmNsdWRpbmcgYG1hdGhgIGl0c2VsZi4gVGhhdCBtZWFucyB0aGF0IHdoaWxzdCBnZXR0aW5nXG4vLyBtYXRoLnJhbmRvbSwgaXQgdHJpZXMgdG8gZ2V0IG1hdGgucmFuZG9tLCBldGMuLi4gYW4gaW5maW5pdGUgbG9vcC5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vRm9yYmVzTGluZGVzYXkvc2VlZC1yYW5kb20vaXNzdWVzLzZcbnZhciBzaW5nbGV0b25SYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX3NlZWRSYW5kb21bXCJkZWZhdWx0XCJdKSgpO1xuXG5mdW5jdGlvbiBjcmVhdGVSbmcocmFuZG9tU2VlZCkge1xuICB2YXIgcmFuZG9tOyAvLyBjcmVhdGUgYSBuZXcgcmFuZG9tIGdlbmVyYXRvciB3aXRoIGdpdmVuIHNlZWRcblxuICBmdW5jdGlvbiBzZXRTZWVkKHNlZWQpIHtcbiAgICByYW5kb20gPSBzZWVkID09PSBudWxsID8gc2luZ2xldG9uUmFuZG9tIDogKDAsIF9zZWVkUmFuZG9tW1wiZGVmYXVsdFwiXSkoU3RyaW5nKHNlZWQpKTtcbiAgfSAvLyBpbml0aWFsaXplIGEgc2VlZGVkIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGNvbmZpZydzIHJhbmRvbSBzZWVkXG5cblxuICBzZXRTZWVkKHJhbmRvbVNlZWQpOyAvLyB3cmFwcGVyIGZ1bmN0aW9uIHNvIHRoZSBybmcgY2FuIGJlIHVwZGF0ZWQgdmlhIGdlbmVyYXRvclxuXG4gIGZ1bmN0aW9uIHJuZygpIHtcbiAgICByZXR1cm4gcmFuZG9tKCk7XG4gIH1cblxuICByZXR1cm4gcm5nO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVDb21wYXJlID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIG5hbWUgPSAnY29tcGFyZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUNvbXBhcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA1ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTA1KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byB2YWx1ZXMuIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICpcbiAgICogeCBhbmQgeSBhcmUgY29uc2lkZXJlZCBlcXVhbCB3aGVuIHRoZSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeVxuICAgKiBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvXG4gICAqIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmUoNiwgMSkgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmUoMiwgMykgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKDcsIDcpICAgICAgICAgICAvLyByZXR1cm5zIDBcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMDAwJywgJzFlMycpICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCgnNSBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzQwIG1tJylcbiAgICogICAgbWF0aC5jb21wYXJlKGEsIGIpICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKDIsIFsxLCAyLCAzXSkgICAvLyByZXR1cm5zIFsxLCAwLCAtMV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlciwgbGFyZ2VyRXEsIGNvbXBhcmVOYXR1cmFsLCBjb21wYXJlVGV4dFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmUgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA9PT0geSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pID8gbmV3IEJpZ051bWJlcigwKSA6IG5ldyBCaWdOdW1iZXIoeC5jbXAoeSkpO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4LmNvbXBhcmUoeSkpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGFyZSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgY29tcGFyZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBjb21wYXJlLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBjb21wYXJlKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgY29tcGFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBjb21wYXJlLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgY29tcGFyZSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgY29tcGFyZSwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb21wYXJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmUgPSBjcmVhdGVDb21wYXJlO1xudmFyIGNyZWF0ZUNvbXBhcmVOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVOdW1iZXIgPSBjcmVhdGVDb21wYXJlTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTmF0dXJhbCA9IHZvaWQgMDtcblxudmFyIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJqYXZhc2NyaXB0LW5hdHVyYWwtc29ydFwiKSk7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIG5hbWUgPSAnY29tcGFyZU5hdHVyYWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZUNvbXBhcmVOYXR1cmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7XG4gIHZhciBjb21wYXJlQm9vbGVhbnMgPSBjb21wYXJlLnNpZ25hdHVyZXNbJ2Jvb2xlYW4sYm9vbGVhbiddO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gdmFsdWVzIG9mIGFueSB0eXBlIGluIGEgZGV0ZXJtaW5pc3RpYywgbmF0dXJhbCB3YXkuXG4gICAqXG4gICAqIEZvciBudW1lcmljIHZhbHVlcywgdGhlIGZ1bmN0aW9uIHdvcmtzIHRoZSBzYW1lIGFzIGBtYXRoLmNvbXBhcmVgLlxuICAgKiBGb3IgdHlwZXMgb2YgdmFsdWVzIHRoYXQgY2FuJ3QgYmUgY29tcGFyZWQgbWF0aGVtYXRpY2FsbHksXG4gICAqIHRoZSBmdW5jdGlvbiBjb21wYXJlcyBpbiBhIG5hdHVyYWwgd2F5LlxuICAgKlxuICAgKiBGb3IgbnVtZXJpYyB2YWx1ZXMsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgZXF1YWwgd2hlbiB0aGUgcmVsYXRpdmVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uXG4gICAqIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW5cbiAgICogYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIENvbXBsZXggbnVtYmVycywgZmlyc3QgdGhlIHJlYWwgcGFydHMgYXJlIGNvbXBhcmVkLiBJZiBlcXVhbCxcbiAgICogdGhlIGltYWdpbmFyeSBwYXJ0cyBhcmUgY29tcGFyZWQuXG4gICAqXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIHdpdGggYSBuYXR1cmFsIHNvcnRpbmcgYWxnb3JpdGhtLCB3aGljaFxuICAgKiBvcmRlcnMgc3RyaW5ncyBpbiBhIFwibG9naWNcIiB3YXkgZm9sbG93aW5nIHNvbWUgaGV1cmlzdGljcy5cbiAgICogVGhpcyBkaWZmZXJzIGZyb20gdGhlIGZ1bmN0aW9uIGBjb21wYXJlYCwgd2hpY2ggY29udmVydHMgdGhlIHN0cmluZ1xuICAgKiBpbnRvIGEgbnVtZXJpYyB2YWx1ZSBhbmQgY29tcGFyZXMgdGhhdC4gVGhlIGZ1bmN0aW9uIGBjb21wYXJlVGV4dGBcbiAgICogb24gdGhlIG90aGVyIGhhbmQgY29tcGFyZXMgdGV4dCBsZXhpY2FsbHkuXG4gICAqXG4gICAqIEFycmF5cyBhbmQgTWF0cmljZXMgYXJlIGNvbXBhcmVkIHZhbHVlIGJ5IHZhbHVlIHVudGlsIHRoZXJlIGlzIGFuXG4gICAqIHVuZXF1YWwgcGFpciBvZiB2YWx1ZXMgZW5jb3VudGVyZWQuIE9iamVjdHMgYXJlIGNvbXBhcmVkIGJ5IHNvcnRlZFxuICAgKiBrZXlzIHVudGlsIHRoZSBrZXlzIG9yIHRoZWlyIHZhbHVlcyBhcmUgdW5lcXVhbC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDYsIDEpICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgyLCAzKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDcsIDcpICAgICAgICAgICAgICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgnMTAnLCAnMicpICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJzEwJywgJzInKSAgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLmNvbXBhcmUoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJylcbiAgICogICAgICAgIC8vIEVycm9yOiBDYW5ub3QgY29udmVydCBcIkFuc3dlcjogMTBcIiB0byBhIG51bWJlclxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnNDAgbW0nKVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKGEsIGIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgnMiArIDNpJylcbiAgICogICAgY29uc3QgZCA9IG1hdGguY29tcGxleCgnMiArIDRpJylcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChjLCBkKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyLCA0XSwgWzEsIDIsIDNdKSAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChbMSwgMiwgM10sIFsxLCAyXSkgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoWzEsIDVdLCBbMSwgMiwgM10pICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyXSwgWzEsIDJdKSAgICAgICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCh7YTogMn0sIHthOiA0fSkgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tcGFyZSwgY29tcGFyZVRleHRcbiAgICpcbiAgICogQHBhcmFtICB7Kn0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAgeyp9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG4gICAqICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmVOYXR1cmFsID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7XG4gICAgICB2YXIgdHlwZVggPSAoMCwgX2lzLnR5cGVPZikoeCk7XG4gICAgICB2YXIgdHlwZVkgPSAoMCwgX2lzLnR5cGVPZikoeSk7XG4gICAgICB2YXIgYzsgLy8gbnVtZXJpYyB0eXBlc1xuXG4gICAgICBpZiAoKHR5cGVYID09PSAnbnVtYmVyJyB8fCB0eXBlWCA9PT0gJ0JpZ051bWJlcicgfHwgdHlwZVggPT09ICdGcmFjdGlvbicpICYmICh0eXBlWSA9PT0gJ251bWJlcicgfHwgdHlwZVkgPT09ICdCaWdOdW1iZXInIHx8IHR5cGVZID09PSAnRnJhY3Rpb24nKSkge1xuICAgICAgICBjID0gY29tcGFyZSh4LCB5KTtcblxuICAgICAgICBpZiAoYy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAvLyBjIGNhbiBiZSBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb25cbiAgICAgICAgICByZXR1cm4gYyA+IDAgPyAxIDogLTE7IC8vIHJldHVybiBhIG51bWJlclxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbWF0cml4IHR5cGVzXG5cblxuICAgICAgaWYgKHR5cGVYID09PSAnQXJyYXknIHx8IHR5cGVYID09PSAnTWF0cml4JyB8fCB0eXBlWSA9PT0gJ0FycmF5JyB8fCB0eXBlWSA9PT0gJ01hdHJpeCcpIHtcbiAgICAgICAgYyA9IGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KTtcblxuICAgICAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gaW4gY2FzZSBvZiBkaWZmZXJlbnQgdHlwZXMsIG9yZGVyIGJ5IG5hbWUgb2YgdHlwZSwgaS5lLiAnQmlnTnVtYmVyJyA8ICdDb21wbGV4J1xuXG5cbiAgICAgIGlmICh0eXBlWCAhPT0gdHlwZVkpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfamF2YXNjcmlwdE5hdHVyYWxTb3J0W1wiZGVmYXVsdFwiXSkodHlwZVgsIHR5cGVZKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVDb21wbGV4TnVtYmVycyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnVW5pdCcpIHtcbiAgICAgICAgaWYgKHguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsKHgudmFsdWUsIHkudmFsdWUpO1xuICAgICAgICB9IC8vIGNvbXBhcmUgYnkgdW5pdHNcblxuXG4gICAgICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHguZm9ybWF0VW5pdHMoKSwgeS5mb3JtYXRVbml0cygpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVCb29sZWFucyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gKDAsIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKSh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnT2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gY29tcGFyZU9iamVjdHMoeCwgeSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ251bGwnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZVggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyB0aGlzIHNob3VsZCBub3Qgb2NjdXIuLi5cblxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHZhbHVlIFwiJyArIHR5cGVYICsgJ1wiJyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENvbXBhcmUgbWl4ZWQgbWF0cml4L2FycmF5IHR5cGVzLCBieSBjb252ZXJ0aW5nIHRvIHNhbWUtc2hhcGVkIGFycmF5LlxuICAgKiBUaGlzIGNvbXBhcmF0b3IgaXMgbm9uLWRldGVybWluaXN0aWMgcmVnYXJkaW5nIGlucHV0IHR5cGVzLlxuICAgKiBAcGFyYW0ge0FycmF5IHwgU3BhcnNlTWF0cml4IHwgRGVuc2VNYXRyaXggfCAqfSB4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBTcGFyc2VNYXRyaXggfCBEZW5zZU1hdHJpeCB8ICp9IHlcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KSB7XG4gICAgaWYgKCgwLCBfaXMuaXNTcGFyc2VNYXRyaXgpKHgpICYmICgwLCBfaXMuaXNTcGFyc2VNYXRyaXgpKHkpKSB7XG4gICAgICByZXR1cm4gY29tcGFyZUFycmF5cyh4LnRvSlNPTigpLnZhbHVlcywgeS50b0pTT04oKS52YWx1ZXMpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh4KSkge1xuICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmVcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0FycmF5KCksIHkpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh5KSkge1xuICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmVcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeCwgeS50b0FycmF5KCkpO1xuICAgIH0gLy8gY29udmVydCBEZW5zZUFycmF5IGludG8gQXJyYXlcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoeCkpIHtcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0pTT04oKS5kYXRhLCB5KTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc0RlbnNlTWF0cml4KSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5LnRvSlNPTigpLmRhdGEpO1xuICAgIH0gLy8gY29udmVydCBzY2FsYXJzIHRvIGFycmF5XG5cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyhbeF0sIHkpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCBbeV0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHgsIHkpO1xuICB9XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBBcnJheXNcbiAgICpcbiAgICogLSBGaXJzdCwgY29tcGFyZXMgdmFsdWUgYnkgdmFsdWVcbiAgICogLSBOZXh0LCBpZiBhbGwgY29ycmVzcG9uZGluZyB2YWx1ZXMgYXJlIGVxdWFsLFxuICAgKiAgIGxvb2sgYXQgdGhlIGxlbmd0aDogbG9uZ2VzdCBhcnJheSB3aWxsIGJlIGNvbnNpZGVyZWQgbGFyZ2VzdFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSB4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHlcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyh4LCB5KSB7XG4gICAgLy8gY29tcGFyZSBlYWNoIHZhbHVlXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gTWF0aC5taW4oeC5sZW5ndGgsIHkubGVuZ3RoKTsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtpXSwgeVtpXSk7XG5cbiAgICAgIGlmICh2ICE9PSAwKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfVxuICAgIH0gLy8gY29tcGFyZSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzXG5cblxuICAgIGlmICh4Lmxlbmd0aCA+IHkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZiAoeC5sZW5ndGggPCB5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gLy8gYm90aCBBcnJheXMgaGF2ZSBlcXVhbCBzaXplIGFuZCBjb250ZW50XG5cblxuICAgIHJldHVybiAwO1xuICB9XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBvYmplY3RzXG4gICAqXG4gICAqIC0gRmlyc3QsIGNvbXBhcmUgc29ydGVkIHByb3BlcnR5IG5hbWVzXG4gICAqIC0gTmV4dCwgY29tcGFyZSB0aGUgcHJvcGVydHkgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVPYmplY3RzKHgsIHkpIHtcbiAgICB2YXIga2V5c1ggPSBPYmplY3Qua2V5cyh4KTtcbiAgICB2YXIga2V5c1kgPSBPYmplY3Qua2V5cyh5KTsgLy8gY29tcGFyZSBrZXlzXG5cbiAgICBrZXlzWC5zb3J0KF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKTtcbiAgICBrZXlzWS5zb3J0KF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKTtcbiAgICB2YXIgYyA9IGNvbXBhcmVBcnJheXMoa2V5c1gsIGtleXNZKTtcblxuICAgIGlmIChjICE9PSAwKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9IC8vIGNvbXBhcmUgdmFsdWVzXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c1gubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtrZXlzWFtpXV0sIHlba2V5c1lbaV1dKTtcblxuICAgICAgaWYgKHYgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gY29tcGFyZU5hdHVyYWw7XG59KTtcbi8qKlxuICogQ29tcGFyZSB0d28gY29tcGxleCBudW1iZXJzLCBgeGAgYW5kIGB5YDpcbiAqXG4gKiAtIEZpcnN0LCBjb21wYXJlIHRoZSByZWFsIHZhbHVlcyBvZiBgeGAgYW5kIGB5YFxuICogLSBJZiBlcXVhbCwgY29tcGFyZSB0aGUgaW1hZ2luYXJ5IHZhbHVlcyBvZiBgeGAgYW5kIGB5YFxuICpcbiAqIEBwYXJhbXMge0NvbXBsZXh9IHhcbiAqIEBwYXJhbXMge0NvbXBsZXh9IHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29tcGFyZU5hdHVyYWwgPSBjcmVhdGVDb21wYXJlTmF0dXJhbDtcblxuZnVuY3Rpb24gY29tcGFyZUNvbXBsZXhOdW1iZXJzKHgsIHkpIHtcbiAgaWYgKHgucmUgPiB5LnJlKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoeC5yZSA8IHkucmUpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBpZiAoeC5pbSA+IHkuaW0pIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmICh4LmltIDwgeS5pbSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHJldHVybiAwO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dE51bWJlciA9IGV4cG9ydHMuY3JlYXRlQ29tcGFyZVRleHQgPSB2b2lkIDA7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ2NvbXBhcmVUZXh0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZUNvbXBhcmVUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gc3RyaW5ncyBsZXhpY2FsbHkuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuXG4gICAqIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KCdCJywgJ0EnKSAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJzInLCAnMTAnKSAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKCcyJywgJzEwJykgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgnMicsICcxMCcpIC8vIHJldHVybnMgLTFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlVGV4dCgnQicsIFsnQScsICdCJywgJ0MnXSkgLy8gcmV0dXJucyBbMSwgMCwgLTFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgZXF1YWxUZXh0LCBjb21wYXJlLCBjb21wYXJlTmF0dXJhbFxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheSB8IERlbnNlTWF0cml4fSB4IEZpcnN0IHN0cmluZyB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHkgU2Vjb25kIHN0cmluZyB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmVUZXh0ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IF9zdHJpbmcuY29tcGFyZVRleHQsXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIF9zdHJpbmcuY29tcGFyZVRleHQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGNvbXBhcmVUZXh0KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlVGV4dChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gY29tcGFyZVRleHQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIF9zdHJpbmcuY29tcGFyZVRleHQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIF9zdHJpbmcuY29tcGFyZVRleHQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbXBhcmVUZXh0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVUZXh0ID0gY3JlYXRlQ29tcGFyZVRleHQ7XG52YXIgY3JlYXRlQ29tcGFyZVRleHROdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogX3N0cmluZy5jb21wYXJlVGV4dFxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dE51bWJlciA9IGNyZWF0ZUNvbXBhcmVUZXh0TnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZWVwRXF1YWwgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkZWVwRXF1YWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWwnXTtcbnZhciBjcmVhdGVEZWVwRXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsO1xuXG4gIC8qKlxuICAgKiBUZXN0IGVsZW1lbnQgd2lzZSB3aGV0aGVyIHR3byBtYXRyaWNlcyBhcmUgZXF1YWwuXG4gICAqIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGJvdGggbWF0cmljZXMgYW5kIHNjYWxhciB2YWx1ZXMuXG4gICAqXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRlZXBFcXVhbCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kZWVwRXF1YWwoMiwgNCkgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGEgPSBbMiwgNSwgMV1cbiAgICogICAgYiA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLmRlZXBFcXVhbChhLCBiKSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5lcXVhbChhLCBiKSAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCBtYXRyaXggdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIG1hdHJpeCB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiB0aGUgaW5wdXQgbWF0cmljZXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBlYWNoIG9mIHRoZWlyIGVsZW1lbnRzIGlzIGVxdWFsLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIF9kZWVwRXF1YWwoeC52YWx1ZU9mKCksIHkudmFsdWVPZigpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byBhcnJheXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBhbGwgZWxlbWVudHMgYXJlIGVxdWFsXG4gICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB5XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBib3RoIGFycmF5cyBhcmUgZGVlcCBlcXVhbFxuICAgKi9cblxuICBmdW5jdGlvbiBfZGVlcEVxdWFsKHgsIHkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeSkpIHtcbiAgICAgICAgdmFyIGxlbiA9IHgubGVuZ3RoO1xuXG4gICAgICAgIGlmIChsZW4gIT09IHkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICghX2RlZXBFcXVhbCh4W2ldLCB5W2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZXF1YWwoeCwgeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVlcEVxdWFsID0gY3JlYXRlRGVlcEVxdWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbE51bWJlciA9IGV4cG9ydHMuY3JlYXRlRXF1YWwgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICdlcXVhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVFcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gdGVzdHMgd2hldGhlciB0aGUgcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXNcbiAgICogc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0b1xuICAgKiBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogSW4gY2FzZSBvZiBjb21wbGV4IG51bWJlcnMsIHgucmUgbXVzdCBlcXVhbCB5LnJlLCBhbmQgeC5pbSBtdXN0IGVxdWFsIHkuaW0uXG4gICAqXG4gICAqIFZhbHVlcyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBjb21wYXJlZCBzdHJpY3RseSwgdGh1cyBgbnVsbGAgaXMgb25seVxuICAgKiBlcXVhbCB0byBgbnVsbGAgYW5kIG5vdGhpbmcgZWxzZSwgYW5kIGB1bmRlZmluZWRgIGlzIG9ubHkgZXF1YWwgdG9cbiAgICogYHVuZGVmaW5lZGAgYW5kIG5vdGhpbmcgZWxzZS4gU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoMiArIDIsIDMpICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmVxdWFsKDIgKyAyLCA0KSAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1MCBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzUgbScpXG4gICAqICAgIG1hdGguZXF1YWwoYSwgYikgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBbMiwgNSwgMV1cbiAgICogICAgY29uc3QgZCA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsKGMsIGQpICAgICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlXVxuICAgKiAgICBtYXRoLmRlZXBFcXVhbChjLCBkKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbChcIjEwMDBcIiwgXCIxZTNcIikgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguZXF1YWwoMCwgbnVsbCkgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGxhcmdlckVxLCBjb21wYXJlLCBkZWVwRXF1YWwsIGVxdWFsVGV4dFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgZXF1YWwgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHtcbiAgICAgIC8vIHN0cmljdCBlcXVhbGl0eSBmb3IgbnVsbCBhbmQgdW5kZWZpbmVkP1xuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB4ID09PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB5ID09PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgsIHkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBlcXVhbFNjYWxhcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGVxdWFsU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBlcXVhbChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZXF1YWwobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGVxdWFsKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGVxdWFsU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGVxdWFsU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlcXVhbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbCA9IGNyZWF0ZUVxdWFsO1xudmFyIGNyZWF0ZUVxdWFsTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmMi5lcXVhbFNjYWxhcjtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geSA9PT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXF1YWxTY2FsYXIoeCwgeSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbE51bWJlciA9IGNyZWF0ZUVxdWFsTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhck51bWJlciA9IGV4cG9ydHMuY3JlYXRlRXF1YWxTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbXBsZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29tcGxleFwiKTtcblxudmFyIG5hbWUgPSAnZXF1YWxTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJ107XG52YXIgY3JlYXRlRXF1YWxTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWc7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0d28gc2NhbGFyIHZhbHVlcyBhcmUgbmVhcmx5IGVxdWFsLlxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdmFyIGVxdWFsU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPT09IHk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZXEoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguZXF1YWxzKHkpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb21wbGV4LmNvbXBsZXhFcXVhbHMpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgudmFsdWUsIHkudmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlcXVhbFNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhciA9IGNyZWF0ZUVxdWFsU2NhbGFyO1xudmFyIGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhck51bWJlciA9IGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFRleHQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdlcXVhbFRleHQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZVRleHQnLCAnaXNaZXJvJ107XG52YXIgY3JlYXRlRXF1YWxUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbXBhcmVUZXh0ID0gX3JlZi5jb21wYXJlVGV4dCxcbiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvO1xuXG4gIC8qKlxuICAgKiBDaGVjayBlcXVhbGl0eSBvZiB0d28gc3RyaW5ncy4gQ29tcGFyaXNvbiBpcyBjYXNlIHNlbnNpdGl2ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbFRleHQoJ0hlbGxvJywgJ0hlbGxvJykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCgnYScsICdBJykgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmVxdWFsKCcyZTMnLCAnMjAwMCcpICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCcyZTMnLCAnMjAwMCcpICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCdCJywgWydBJywgJ0InLCAnQyddKSAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgY29tcGFyZVRleHQsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHggRmlyc3Qgc3RyaW5nIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7c3RyaW5nIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0geSBTZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGlzWmVybyhjb21wYXJlVGV4dCh4LCB5KSk7XG4gICAgfVxuICB9KTtc